mondegreen

(230513) 운영체제 4강. System Structure & Program Execution2 본문

Computer Science/운영체제

(230513) 운영체제 4강. System Structure & Program Execution2

앙갱 2023. 5. 13. 20:24
반응형

CPU는 interupt가 들어온 것이 있는지 확인 후 없다면 프로그램 카운터라는 레지스터가 가리키는 메모리 주소에서 인스트럭션(보통 4bite) 하나를 읽어서 실행한다.

 

인터럽트가 들어온 것이 있다면 하던 작업(프로그램에 할당된 상태)을 멈추고 CPU의 제어권은 운영체제로 넘어가게 된다. 그러면 운영체제는 인터럽트마다 해야하는 일들이 운영체제 안에 커널함수로 정의되어 있는대로 실행한다. 

인터럽트 벡터: 각 인터럽터 번호와 주소를 가지고 있음(각 인터럽터의 종류를 나타내는 번호와 어느 메모리에 있는 인스트럭션을 실행해야 하는지 주소)
인터럽트 처리 루틴: 실제로 해야하는 행동 즉, 인터럽트를 처리하는 커널 함수

CPU 안에는 mode bit이라는 것이 있는데  0일 때는 CPU가 실행할 수 있는 모든 기계어(instruction) 집합을 실행할 수 있으나 mode bit이 1인 경우엔 한정된 기계어(instruction)만 실행할 수 있다.

운영체제가 CPU를 가지고 있을 때는 mode bit이 0이라서 모든 인스트럭션 실행 가능,  I/O 디바이스는 운영체제만 실행할 수 있음  mode bit이 1일 때는 사용자 프로그램이 CPU를 가지고 있어서 자기 영역 메모리 주소만 보고 일하며 한정된 인스트럭션만 실행가능 그 이유는 사용자 프로그램을 믿을 수 없기 때문에 제한을 두는 것임 사용자 프로그램이 I/O 디바이스를 활용한 작업이 필요할 경우 인터럽트 라인을 세팅하고 시스템 콜(사용사 프로그램이 운영체제에게 I/O를 요청)을 수행한다. 

타이머라는 하드웨어는 CPU를 할당받은 시간이 끝나면 CPU에 인터럽터를 걸어 그 시점에 진행하던 프로그램에게서 CPU를 빼앗는다. 

 

동기식 및 비동기식 입출력

1. 동기식 입출력

입출력 요청후 작업이 완료되고 나서야 사용자 프로그램으로 CPU 제어가 넘어간다.

- 구현방법 1)

입출력이 끝날 때까지 CPU를 낭비시키며 매 시점 하나의 입출력만 가능

- 구현방법 2)

입출력이 완료될 때까지 해당 프로그램에게서 CPU을 빼앗는 방식으로 입출력 처리를 기다리는 줄에 해당 프로그램을 줄세우고 다른 프로그램에게 CPU 제어를 준다.  

 

2. 비동기식 입출력

입출력이 시작도니 후 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에게 즉시 넘어간다.

 

두 경우 모두 입출력이 완료되었다는 것을 인터럽트로 알린다.
주로 읽기는 동기 / 쓰기는 비동기식 입출력으로 수행한다.

DMA (Direct Memory Access)

빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용한다. CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송한다. 바이트 단위가 아닌 block의 단위로 인터럽트를 발생시킨다.

 

DMA는 메모리에 접근할 수 있는 장치로서 원래 그 역할을 CPU만 가능했는데 I/O 장치로부터 요청이 왔을 때마다 CPU에 인터럽트를 걸어버리면 CPU가 인터럽트를 너무 많이 당해 효율적이지 못하게 된다. 따라서 DMA 장치를 만들어놓고 메모리에 접근할 수 있게 하여 작은 일들은 CPU 대신 처리할 수 있게 한다. 로컬 버퍼가 어느정도 쌓이면 DMA 컨트롤러가 메모리에 쌓고 어느정도 블록의 형태로 쌓이면 CPU에 인터럽트를 건다. 빈도를 줄이고 효율성 높일 수 있음

 

입출력 수행 방식

1) (일반적) 메모리에만 접근하는 인스트럭션과 각각 I/O 디바이스에만 접근하는 인스트럭션이 별도로 존재 
2) I/O 장치에 메모리 주소의 연장 주소를 붙여 접근 즉, 메모리 접근하는 intruction을 통해 I/O 접근 -> memory mapped I/O

 

저장장치 계층 구조

최상단에는 CPU가 존재하고 상단으로 갈수록 저장장치의 속도가 빠르고 단위 공간 당 가격이 비싸다(즉 용량이 적다), 휘발성이 높다. 

[primary] 

byte 단위로 주소를 매기기 때문에 CPU가 직접 접근 가능하며 실행 가능한 매체 -> 휘발성 매체
Registers: CPU 내부에 존재
Cache Memory: S램 (cpu, register와 main memory간의 속도 차이 완충하는 역할) -> 재 사용 목적, 다시 데이터를 읽어오지 않고 사용(새로운 것들 읽어오고 기존의 것은 삭제인데 어떤 것을 지워야 하는가가 캐싱 부문에서의 중요한 부분이다.)
Main Memory: D램 -> 비휘발성 반도체가 나오고 있다는데 이미 나왔겠쥬

[secondary] 

CPU가 직접 접근하지 않고 실행 불가한 매체 -> 비휘발성 매체
magnetic disk: 하드디스크 -> 플래쉬 메모리 (섹터 단위로 접근)


프로그램의 실행 (메모리 load)

각 프로그램마다 독자적으로 가지고 있는 연속적으로 존재하지는 않는 가상의 메모리 공간이 있고 이를 address space라고 한다. 이 중 실제로 실행되는 당장 필요한 것들만 physical memory에 담기고 이때 가상의 주소공간이 물리적인 메모리에 담기면서 주소는 변환된다. (전체를 다 담으면 메모리 낭비) 당장 필요하지 않은 부분은 disk의 swap area에  내려놓게 된다. 

참고로 메인 메모리의 연장 공간으로서 swap area를 사용하는 것을 virtual 메모리 기법이라고 부르기도 한다. 

하드디스크에서 file 시스템으로 활용되는 것은 비휘발성이며 전원이 나가도 유지가 되며, swap area는 휘발성 공간으로 메인 메모리의 용량 이슈로 임시적으로 사용하는 것이기 때문에 전원 차단 시 유지되지 않음


커널 주소 공간의 내용(운영체제)

code: 자원을 효율적으로 관리하고 사용자에게 편리한 인터페이스를 제공할 수 있게하는 코드와 CPU를 배정할 때마다 생기는 인터럽트의 처리 코드가 함수형태로 저장되어 있다.
data: 운영체제가 사용하는 여러  하드웨어의 자료구조 데이터가 존재하며 특정 프로그램은 독자적인 가상의 주소 공간을 가지고 있지만 이 프로그램이 실행될 때마다 이를 관리하는 프로세스 컨트롤  블록(PCB)이 존재한다.
stack: 각 프로세스마다 각각 다른 커널 스택을 가지고 있다.


 

반응형