본문 바로가기

Computer Science/운영체제

[운영체제] CH2. System Structure(2)

동기식 입출력과 비동기식 입출력

입출력 방식에는 크게 동기식 입출력과 비동기식 입출력으로 나뉜다.

 

동기식 입출력(Synchronous I/O)

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

구현 방법 1

  • I/O가 끝날 때까지 CPU를 낭비시키는 방법. 매 시점 하나의 I/O만 일어날 수 있다.

구현 방법 2

  • I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗는 방법.
  • I/O 처리를 기다리는 줄에 그 프로그램을 줄 세운다.
  • 다른 프로그램에게 CPU를 준다.

비동기식 입출력(Asynchronous I/O)

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

 
두 경우 모두 I/O의 완료는 인터럽트로 알려준다.

I/O는 커널을 통해서만 할 수 있다.

Synchronous I/O는 사용자가 I/O 작업을 요청하고 결과가 돌아올 때까지 기다린다.

Asynchronous I/O는 결과를 기다리지 않고 요청만 해놓고 CPU 제어권을 얻어서 다른 작업을 한다. I/O 작업이 끝나면 인터럽트를 통해서 알려준다.

 

DMA 보충

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

 

저장장치 계층 구조

위로 갈수록 속도가 빠르고, 단위 공간당 가격이 비싸다. 그래서 용량이 적어진다.

이러한 계층 구조를 갖는 이유는 Caching(재사용)이다. 데이터를 접근 속도가 빠른 저장 공간에 올려서 재사용하는 것이 목적이다.

 

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

프로그램이 어떻게 컴퓨터에서 실행될까?

프로그램은 보통 실행 파일 형태로 파일 시스템에 저장되어 있다. 프로그램을 실행하면 메모리에 올라가서 프로세스가 된다.

정확하게는 물리적인 메모리에 바로 올라가는 것이 아니라, Virtual Memory를 거친다.

프로그램을 실행하면 그 프로세스만의 독자적인 메모리 주소 공간(Address space)이 형성된다. (code, data, stack으로 이루어 짐) -> Virtual Memory

이를 물리적인 메모리 공간에 올려서 실행을 시키게 되는데, 이 때 프로그램이 통째로 올라가지 않고 당장 실행에 필요한 부분만 올라간다. 메모리 낭비를 방지하기 위해 필요한 부분만 올리는 것이다.

당장 필요하지 않은 부분은 디스크의 Swap area라는 공간에 일시적으로 내려놓는다.

 

 

 

 

본 포스팅은 이화여대 반효경 교수님의 강의와 경북대 탁병철 교수님의 강의를 토대로 작성한 글입니다.