본문 바로가기
ComputerScience/OS

2. 컴퓨터시스템 구조(2)

by seongju.lee 2022. 11. 6.

* 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
      1. I/O가 완료될 때까지 해당 프로그램에게서 CPU제어권을 빼앗는다.
      2. I/O 처리를 기다리는 큐에 그 프로그램을 줄 세운다.
      3. 다른 프로그램에게 CPU제어권을 넘겨준다.

 

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영역을 사용해야 하는데 각 프로그램마다 커널의 코드를 실행 중인가를 구분하기 위해
      각 프로세스마다 커널 스택이 별도로 정의 되어 있음.

'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