* OS 게시물 1,2는 운영체제를 다루기 앞서 컴퓨터시스템 구조의 전반적인 흐름을 적어놓은 내용이다.
동기식 입출력과 비동기식 입출력
- 동기식 입출력(synchronous I/O)
- I/O 요청을 하고, 작업이 완료된 후에야 CPU제어권이 사용자 프로그램으로 넘어가는 것.
- 비동기식 입출력(asynchronous I/O)
- I/O 요청을 하고, 작업이 끝나기를 기다리지 않고 CPU제어권이 사용자 프로그램으로 넘어가는 것.
read 작업의 경우 보통 I/O요청을 통해 읽어 온 데이터를 확인 후 다음 작업을 진행을 하기 때문에, 동기식 입출력을 많이 사용할 것 이다.
(물론 읽어온 데이터와 상관없는 다른 작업들을 수행하도록 비동기식 입출력을 사용할 수도 있긴 하겠지만..)
write의 경우는 비동기식이 자연스러운 경우가 많을 것 이다.
(물론, 데이터가 storage에 잘 write되었는 지 확인해야 다음 작업을 수행할 수 있기도 하겠지만..)
사실 이전 게시물에서 설명한 바와 같이, I/O작업은 오래 걸리는 작업이기 때문에
synchronous한 I/O 작업을 통해 데이터를 읽어오는 동안에 다른 프로세스한테 CPU제어권을 넘겨준다고 했었다.
그에 대한 synchronous I/O 구현 방법이 아래와 같다.
- 동기식 입출력(synchronous I/O) 구현방법
- 구현방법1
- 첫번째 구현방법은 위에서 설명한 것과 같이
I/O가 끝날 때까지 CPU를 낭비시키고, 매 시점마다 하나의 I/O만 일어날 수 있다.
- 첫번째 구현방법은 위에서 설명한 것과 같이
- 구현방법2
- I/O가 완료될 때까지 해당 프로그램에게서 CPU제어권을 빼앗는다.
- I/O 처리를 기다리는 큐에 그 프로그램을 줄 세운다.
- 다른 프로그램에게 CPU제어권을 넘겨준다.
- 구현방법1
DMA(Direct Memory Access)
- DMA(Direct Memory Access)
- 메모리를 접근할 수 있는 장치
- 원래는 메모리에 접근할 수 있는 장치가 CPU밖에 없다.
예를 들어, I/O장치에서 너무 빈번한 interrupt를 CPU에게 보내면 CPU는 계속해서 제어권이 프로그램에서 OS로 자주 넘어 가기 때문에 상당한 오버헤드가 뒤따르게 된다.
그래서, 사용하는 것. - CPU의 중재없이 device controller가 device의 buffer storage의 내용을 메모리에게 block 단위로 직접 전송한다.
- 바이트 단위가 아닌 block단위로 인터럽트를 발생 시킨다.
저장장치 계층 구조
CPU가 메모리에 빠르게 접근하기 위해 메모리를 필요에 따라 여러가지 종류로 나누어 둘 수 있다.
- 위 그림에서 위쪽으로 올라 갈 수록 아래와 같은 특징을 가진다.
- 속도가 빠르다.
- 단위공간당 가격이 비싸기 때문에, 용량이 적다.
- Primary에 해당되는 main memory, cache memory, cpu registers는 내용이 사라지는 휘발성 매체이다.
Secondary에 해당되는 매체는 비휘발성 특징을 가진다.
(전통적인 매체의 특징) - CPU에서 직접 접근할 수 있는 저장장치를 Primary라고 하며,
직접 접근할 수 없는 저장장치를 Secondary라고 한다.
프로그램의 실행 (메모리 load)
- 프로그램이라는 것은 실행파일로 파일시스템에 저장이 된다.
- 실행 시키면 메모리로 올라가서 하나의 프로세스가 되는 것인데,
사실, 바로 물리적인 메모리에 올라가는 것이 아닌 가상 메모리를 거쳐서 올라가게 된다. - 방식
- 프로그램을 실행시키면 프로그램의 독자적인 주소공간이 형성된다.
- 이 주소공간을 물리적인 메모리에 올려서 실행 시키는 것인데,
주소공간 모든 것을 물리적인 메모리에 다 올리는 것이 아니다. - 당장 사용되고 있는 부분만 물리적인 메모리에 올리고,
그렇지 않은 부분은 디스크의 swap area라는 곳에 올려놓게 된다.
즉, 실제로는 각 프로그램마다의 주소공간은 어딘가에 연속적으로 할당 되는 것이 아니라 이런 식으로 쪼개지는 virtual memory인 것이다.
- 커널의 주소공간은 물리적 메모리에 상주하게 되는데,
커널의 주소공간 구성을 살펴보면 아래와 같다.
커널 주소 공간의 내용
- code영역
- 운영체제가 작업해야 할 여러가지 코드들이 정의 되어있다.
- data영역
- 운영체제가 사용하는 여러 자료구조들이 정의 되어있다.
- PCB(Process Control Block): 각 프로세스마다 해당 프로그램을 관리하기 위한 자료구조가 커널에 만들어지게 됨.
- CPU, memory, disk 등 하드웨어를 관리하기 위한 자료구조가 정의되어 있음.
- stack영역
- 커널함수를 사용하게 될 때, stack영역을 사용해야 하는데 각 프로그램마다 커널의 코드를 실행 중인가를 구분하기 위해
각 프로세스마다 커널 스택이 별도로 정의 되어 있음.
- 커널함수를 사용하게 될 때, stack영역을 사용해야 하는데 각 프로그램마다 커널의 코드를 실행 중인가를 구분하기 위해
'ComputerScience > OS' 카테고리의 다른 글
5. 프로세스 관련 시스템콜 & IPC (0) | 2022.12.28 |
---|---|
4. 프로세스(2) (0) | 2022.12.26 |
3. 프로세스(1) (0) | 2022.11.08 |
1. 운영체제란 & 컴퓨터시스템 구조(1) (0) | 2022.11.02 |
[OS] Process Memory와 Thread (0) | 2022.08.03 |