게시:

아래의 컴퓨터 시스템의 구조를 염두에 두고 내용을 보길 권장한다.
이에 대한 자세한 내용은 OS System Structure & Program Execution. Part 1. 포스팅을 참조.

컴퓨터 시스템의 구조도

동기식(Synchronous)과 비동기식(Asynchronous) 입・출력

용어가 생소할 수 있는데 단순화해서 설명하자면 동기식은 작업 A, B, C가 있으면 A가 끝나야 B를 실행할 수 있고 B가 끝나야 C를 수행할 수 있는 방식이고, 비동기식은 A를 요청만 하고 작업이 끝나기 전에 다른 작업을 또 요청할 수 있는 방식이다.

두 가지 방식 모두 인터럽트(Interrupt)로 입・출력이 끝났음을 알린다.

1. 동기식(Synchronous)

동기식(Synchronous)은 입・출력 요청 후, 입・출력 장치로부터 작업이 끝난 다음에야 사용자 프로그램이 다른 일을 할 수 있는 방식을 말한다.

구현방법 1

  • 입・출력이 끝날 때 까지 CPU가 대기한다(….) → CPU 자원의 낭비
  • 매 시점 I/O만 일어날 수도 있다. → I/O 디바이스의 낭비

구현방법 2

  • 입・출력 요청 후 메모리(Memory)에 있는 다른 프로세스(Process)에 CPU를 넘긴다.
  • 언젠가 입・출력이 끝나면 디바이스 컨트롤러가 CPU에 인터럽트를 발생시킨다.

2. 비동기식(Asynchronous)

입・출력하라고 던져놓고 바로 CPU를 얻어와서 다른 작업하는 방식이다. 이렇게 되면 CPU가 입・출력이 완료될 때 까지 멈추는 경우도 없어지고 다른 프로그램에 CPU를 넘기지 않고 실행 중이던 프로세스 중 입・출력과 관계없는 인스트럭션을 계속해서 수행할 수 있다.

Compare synchronous with asynchronous.
동기식은 외부 장치의 입력이 종료날 때 까지 CPU가 대기하는 반면 비동기식은 요청 후 바로 CPU 제어권을 회수한다.

DMA 컨트롤러(Direct Memory Access Controller)

잦은 입・출력(예: 키보드 한 글자 입력 반복) 시 CPU가 자주 인터럽트 당하면서 오버헤드가 커질 수 있다. 이와 같은 잦은 입・출력을 메모리에 가까운 속도로 처리하기 위해서 사용한다.

CPU의 중재없이 디바이스 컨트롤러가 디바이스 로컬 버퍼 스토리지(Local Buffer Storage)의 내용을 메모리에 전송하고 인터럽트를 발생시킨다. 데이터 저장 및 인터럽트 발생은 바이트(Byte) 단위가 아닌 블록(Block) 단위로 일어난다.

메모리에 접근 가능한 장치는 CPU 뿐이지만 DMA 컨트롤러를 통해서도 직접 접근이 가능하다.

No DMA Controller vs DMA Controller comparison.
DMA를 통하여 입력 데이터를 CPU를 거치지 않고 직접 메모리에 접근할 수 있다.

서로 다른 입・출력 명령어

일반적으로 CPU에서 메모리에 접근하는 인스트럭션(Instruction)과 외부 디바이스에 접근하는 인스트럭션(Special Instruction)의 주소 영역은 다른데 외부 디바이스도 메모리 주소로 접근할 수 있도록 하는 방식을 Memory Mapped I/O라 한다.

CPU에서 메모리에 접근하는 인스트럭션과 외부 디바이스에 접근하는 스페셜 인스트력선(Special Instruction)이 따로 있는 방식이 있고, 외부 디바이스도 메모리 주소로 접근할 수 있는 방식이 있다.

Memory mapped I/O.

저장장치의 계층 구조

아래 그림을 보자. 그림에서 위의 영역은 휘발성(Volatility)이면서 바이트(Byte) 단위로 접근이 가능하면서도 CPU에서 직접 접근(Execution)할 수 있는 저장장치이다. 반면 아래 영역은 비휘발적이면서 섹터(Sector) 단위로 접근이 가능하면서 CPU에 직접 접근할 수 없는 저장장치이다.

계층의 위로 올라 갈수록 속도는 빨라지고 용량은 작아지는데, 장치의 속도가 올라가는 만큼 저장장치의 가격도 올라간다.(….)

추가적으로 레지스터(Registers)와 캐시 메모리(Cache Memory)는 CPU 안에 있는데 캐시 메모리는 CPU의 속도에 비하여 상대적으로 느린 메모리의 속도[1]를 완충시키는 역할을 한다.

캐시 메모리는 용량이 작기 때문에 재사용성을 염두에 두고 당장 필요할 것 같은 데이터를 선별하여 저장하는데 이를 캐싱(Caching)이라 한다.

Hierarchy of memory・storage device.
저장장치의 계층 구조 (Hierarchy)

프로그램의 실행

프로그램을 실행하면 프로그램이 파일 시스템(File System)에서 메모리로 적재(Load)되는데 바로 올라가는 것이 아니라 중간에 가상 메모리(Virtual Memory)에 주소 공간(Address Space)이 생성된다. 또한 생성된 주소 공간 중 당장 필요한 것만 주소 변환(Address Translation)[2]하여
물리적인 메모리에 올라간다.

Program execution diagram.
한정된 Physical memory를 효율적으로 사용하기 위해 모든 필요한 주소 공간만 상주시킨다.

프로그램이 끝나기 전까지 버리면 안되는 주소 공간은 물리적인 메모리에 올려두고 그렇지 않은 주소 공간은 디스크의 Swap Area에 내려놓는다. 또한 사용되지 않는 주소 공간이 물리 메모리에 있으면 쫓아내며 커널(Kernel)의 주소 공간은 항시 물리 메모리에 상주시킨다.

주소 공간(Address Space)는 각각 0번지부터 시작하고 코드(Code)[3], 데이터(Data)[4], 스택(Stack)으로 구성된다.

Structure of address space.
프로그램의 주소 공간 (Address Space)

사용자 프로그램이 사용하는 함수

사용자 프로그램이 사용하는 함수는 사용자가 직접 정의하지 않은 함수(예: 라이브러리 함수[5])이더라도 컴파일(Compile) 및 실행하면 프로그램 안에 함수가 포함된다.

이에 반해 커널 함수는 사용자 프로그램이 사용하더라도 프로그램 내에 함수가 포함되는 것이 아니다. 단지 가져다 쓰는 것이며 이와 같은 이유로 메모리 주소 점프도 불가능하다.

Sequence of program execution.

각주

1 : DRAM의 경우 액세스 시 10 ~ 100 클럭 사이클 정도의 시간이 소요됨.
2 : 가상 메모리의 주소(예: 100번지)를 물리 메모리의 주소(예: 3000번지)를 변환하는 것.
3 : 기계의 코드.
4 : 변수, 전역변수 등 자료구조.
5 : 직접 정의하지 않고 누군가 만들어 놓은 유용한 함수.

Reference

반효경, "반효경 [운영체제] 4. System Structure & Program Execution 2" KOCW. 2014년 3월 14일. video, [http://www.kocw.net/home/cview.do?lid=3dd1117c48123b8e](http://www.kocw.net/home/cview.do?lid=3dd1117c48123b8e)


OS 시리즈 모두보기 (펼치기)


댓글남기기