본문 바로가기
Operating System

[운영체제] System Structure & Program Execution

by 선의 2022. 4. 4.
  • 해당 글은 이화여대 권진욱 교수님 운영체제 강의, KOCW에 등록된 반효경 교수님 운영체제 강의운영체제 10판을 참고하여 작성하였습니다
  • 아연 언니랑 운체 스터디 ☺️

 

1. 컴퓨터 시스템 구조

1) CPU

- Interrupts(끼어들기)

가장 헷갈린 부분이 '왜 발생하는가?' 였다 ➡️ 프로그램을 실행하는 도중 예기치 않은 오류가 발생했을 때 인터럽트가 호출된다

인터럽트 벡터는 인터럽트의 처리 루틴 주소를, 인터럽트 처리 루틴(=핸들러)은 해당 인터럽트를 처리하는 커널 함수를 의미

컨트롤러가 드라이버에게 작업완료사실을 인터럽트를 통해 전달한다

하드웨어는 어느 순간이든 시스템을 통해 CPU에 신호를 보내서 인터럽트를 발생시킬 수 있다

CPU가 인터럽트되면, 하던 일을 중단하고 즉시 고정된 위치로 실행을 옮긴다. 고정된 위치에는 인터럽트를 위한 서비스 루틴이 있는 시작 주소를 가지고 있고, 인터럽트 서비스 루틴 실행이 완료되면 인터럽트되었던(중단되었던) 연산을 재개한다

== 인터럽트된 시점의 레지스터와 pc를 저장한 후 CPU의 제어를 핸들러(인터럽트 처리 루틴)에 넘긴다

인터럽트는 인터럽트 핸들로를 통해 호출된다

굉장히 자주 발생한다

인터럽트된 정보를 모두 저장해야 인터럽트 처리 후 정보를 복원할 수 있으므로, 인터럽트 루틴은 반드시 현재 상태를 명시적으로 저장하고 복귀하기 전에 상태를 복구해야 함

 

- Mode bit

사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 장치가 필요

Mode bit는 말 그대로 OS가 어떤 모드에 있는지 알려주는 비트(0, 1)이다

1 사용자모드: 사용자 프로그램을 실행한다(일반적으로 유저가 사용하는 컴퓨터 상태로 이해)

0 모니터모드(= 커널 모드, 시스템 모드): OS의 코드를 수행한다. 보안을 해칠 수 있는 중요 명령어(특권 명령)는 모니터 모드에서만 수행 가능.

Interrupt, Exception 발생 시 하드웨어가 mode bit을 1에서 0으로 바꾼다

사용자 프로그램에게 CPU를 넘기기(사용자 모드로 돌아가기) 전에 mode bit를 1로 다시 바꾼다

 

- timer

정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킴

매 클럭 틱마다 1씩 감소, 값이 0이 되면 타이머 인터럽트 발생

CPU가 특정 프로그램이 독점하는 것으로부터 보호한다

사용) time sharing 구현 || 현재 시간 계산 등

 

2) DMA(Direct Memory Access)

빠른 입출력 장치를 메모리에 가까운 속도로, 독립적으로 처리하기 위해 사용한다

CPU의 중재 없이, 디바이스 컨트롤러가 디바이스의 버퍼 스토리지의 내용을 메모리에 블록 단위로 직접 전송한다(!= 바이트 단위)

쉽게 얘기하면 CPU를 거치지 않고 디바이스 컨트롤러가 메모리에 직접 접근한다

 

3) System Call

사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출(인터럽트를 발생시킬 때 시스템 콜도 일어날 것)

운영체제에 의해 사용가능하게 된 서비스에 대한 인터페이스를 제공한다

다섯 가지 범주(프로세스 제어, 파일 조작, 장치 조작, 정보 유지 보수, 통신/보호)로 나눌 수 있다

 

4) I/O

- I/O device controller

해당 I/O 장치유형을 관리하는 프로세서(일종의 작은 CPU)

제어 정보를 위해 control register, sattus register 존재

Input/Ouput은 실제 장치(device)와 local buffer 사이에서 일어난다

컨트롤러는 I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알림

(드라이버는 OS 코드 중 각 장치별 처리 루틴(SW)을, 컨트롤러는 장치를 통제하는 프로세서(HW)를 의미)

 

- 수행

모든 입출력 명령은 특권 명령(mode bit 0에서 수행)

(1) 시스템 콜

(2) trap ➡️ 인터럽트 벡터의 특정 위치로 이동

(3) 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동

(4) 올바른 요청인지 확인 후 수행

(5) 제어권을 시스템콜 다음 명령으로 옮김

 

(싱크로너스와 에이싱크로너스는 API를 어떻게 호출하느냐에 따라 달라진다)

- Synchronous(동기식 입출력)

I/O의 요청 후 입출력 작업 완료 후에 제어가 사용자 프로그램에 넘어간다

구현 1. I/O가 끝날 때까지 CPU를 낭비시키고, 매시점 하나의 I/O만 일어날 수 있음

구현 2. 매시점 하나의 I/O만 일어날 수 있음

결과값 받기 전까지 대기, 아무것도 안함

 

- Asynchronous

입출력 작업 끝날 때까지 안 기다리고 제어가 사용자 프로그램에 즉시 넘어감

유저와 HW가 서로 협력하지 않고 독립적으로 움직임

 

5) I/O 명령어

- I/O를 수행하는 special instruction에 의해) 장치마다 다른 명령어를 쓰는 방식

- Memory Mapped I/O에 의해) 메모리 + 명령어 공통 지정 ➡️ 프로그램을 일관적/간결하게 만든다

 

 

6) 저장장치 계층 구조

 

2. 프로그램의 실행

1) 디스크에 존재하는 프로그램을 메모리에 올려 CPU를 할당 받는다

- CPU를 할당받을 수 있는 상태 = 프로세스

- 프로세스는 바로 물리 메모리에 올라가지 않고, 가상 메모리에서 가상 주소공간(케바케지만 32bit 기준으로는 4GB)을 가진다

2) 가상 주소공간에서 실제 프로그램 실행 시, 필요 부분은 block 단위로 물리 메모리에 올라감(필요 없는 부분은 안 올라간다)

'Operating System' 카테고리의 다른 글

[운영체제] Deadlocks  (0) 2022.05.09
[운영체제] Process Management  (0) 2022.04.11
[운영체제] Introduction to Operating System  (0) 2022.04.04