본문 바로가기

Programming/Operating System

운영체제 정리 3

Chapter 2 System Structure(2)

 

- I/O Device Controller -

 

I/O 디바이스를 통해 데이터를 읽거나 쓰며, Local Buffer에 데이터를 저장

CPU에 무언가를 알릴 때 Interrupt를 건다.

 

 

- CPU -

 

CPU는 매순간 메모리에 올라온 기계어를 처리한다(메모리에 프로그램 카운터라는 레지스터가 가리키는

인스트럭션을 처리)

하나의 인스트럭션을 처리하면 인터럽트를 확인하고 인터럽트가 들어왔다면, CPU 제어권이 OS에게 넘어간다.

이 때 Mode Bit은 0이 된다. 평소 CPU 제어권은 사용자 프로그램이 갖고 있으며, Mode Bit은 1이다.

 

사용자 프로그램이 무언가를 요청(커널 함수 호출) 할 때는 System Call 을 통하여 요청한다. 

컴퓨터 시스템 구조

 

- 동기식 입출력 - 

 

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

 

구현 방법 1

* I/O 가 끝날 때 까지 CPU를 낭비시킨다

* 매 시점, 하나의 I/O만 일어날 수 있다

 

구현 방법 2

* I/O가 완료될 때까지 해당 프로그램에게서 CPU 제어권을 뺏는다

* I/O 처리를 기다리는 라인에 그 프로그램을 대기 시킨다

* 다른 프로그램에게 CPU 제어권을 넘긴다

 

- 비동기식 입출력 - 

 

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

 

두 경우 모두 I/O의 완료는 인터럽트를 통해 알려준다

 

DMA Controller -> 메모리에 접근 가능한 장치. Block 단위로 접근 한다.

 

DMA (Direct Memory Access)

* 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용

* CPU의 중재 없이 Device Controller가 Device의 Buffer Storage 내용을 메모리에 Block 단위로 직접 전송

* Byte 단위가 아니라 Block 단위로 Interrupt 발생

 

- 서로 다른 입출력 명령어 -

 

* I/O를 수행하는 Special Instruction 방식 -> 메모리 주소, Device 주소 따로 부여

* Memory Mapped I/O 방식 -> 메모리 주소로 일괄 부여

 

- 저장장치의 계층적 구조- 

 

저장장치의 계층적 구조도

-Primary(Executable)-

Registers ~ Main memory: CPU에서 직접 접근 가능(Byte 단위 접근 가능)하며 휘발성 메모리이다

 

-Secondary-

Electronic Disk ~ Magnetic Tapes: CPU에서 직접 접근 불가(하드디스크의 경우 섹터 단위 접근)이며

비휘발성 메모리이다

 

계층적 구조에서 위로 갈수록 속도가 빠르고, 용량이 작으며 비싸다.

CPU와 Main Memory간 속도차이를 완충하기 위해, Registers, Cache Memory를 둔다.

 

Cashing: Main Memory에서 현재 작업에 필요한 내용만 추려서 Cache Memory에 올려 놓는 것을 가리킨다.

재사용을 목적으로 한다(처음엔 Main Memory로 접근하지만 자주 사용하는 내용일 경우, 그 내용을 Cache Memory

에 올려서 재사용 할 때는 Main Memory가 아닌 Cache Memory에 접근하여 읽어들이는 시간을 줄이기 위함)

 

- 프로그램 실행(Memory Load) -

파일 시스템에서 하드 디스크에 존재하는 두 개의 실행파일 A, B를 실행한다고 가정할 경우에

각 실행파일은 각각 프로세스 A, 프로세스 B를 갖는다. (컴퓨터 실행 후 기본적으로 커널 프로세스가 동작하고 있다.)

가상 메모리(Virtual Memory) 영역에서 각 프로세스는 각각의 주소 공간 (Address Space)를 갖는데

그 구조는 Code, Data, Stack으로 이루어져 있다.

파일 시스템에서 하드 디스크의 자료는 컴퓨터의 전원이 꺼져도 유지되어야 한다.

 

Code -> 프로그램의 기계어 코드

Data -> 전역변수 등의 프로그램 자료구조

Stack -> 함수 호출, 리턴 데이터 등

 

가상 메모리에서 주소 변환(Address Translation)을 통해 물리적 메모리(Physical Memory)에 적재된다.

(물리적 메모리는 기본적으로 항상 상주하는 커널 영역, 그리고 유저들이 요청하는 프로세스를 처리하는

유저 영역으로 나누어져 있다.)

이 때, 메모리 낭비의 방지를 위해서 주소 공간 중 필요한 부분만 물리 메모리에 적재하고 필요 없는 주소 공간은

하드 디스크의 Swap Area에 내려와 있는다. Swap Area는 휘발성 용도이며 메모리의 연장선이다.

전원이 꺼지면 여기에 저장되어 있는 내용은 사라진다. 

 

- 커널의 주소 공간 내용 -

 

Code 부분: 커널 코드 부분. System Call, Interrupt 처리 코드, 자원관리, 유저에게 편리한 서비스를 제공하기 위한 코드를 저장하고 있다.

 

Data 부분: 각 프로세스를 제어하는 PCB(Process Control Block), CPU, Memory, Disk에 대한 Data Structure 저장.

 

Stack 부분: 각 프로세스에 대한 커널 스택 저장.

 

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

 

함수(Function)

* 사용자 정의 함수: 자신의 프로그램에서 정의한 함수

 

* 라이브러리 함수: 프로그램에서 자주 사용되는 기능을 미리 정의해 두어서 사용자가 가져다 쓸 수 있게 만든 함수.

프로그램 실행 파일에 포함되어 있다.

 

-> 사용자 정의 함수와 라이브러리 함수는 프로세스 주소 공간의 Code 영역에 위치한다.

 

* 커널 함수: OS 프로그램의 함수. 커널 함수의 호출 = System Call

 

-> 커널 함수는 커널 주소 공간의 Code 영역에 위치한다.

 

- 프로그램의 실행 -

 

프로그램 A를 실행하는 경우, 프로그램이 종료될 때 까지 A의 주소공간, 커널의 주소공간이 번갈아 가며 실행된다.

A의 주소공간일 경우는 User Mode, 커널의 주소공간일 경우는 Kernel Mode이며, User Mode에서 Kernel Mode로

넘어갈 때 System Call이 일어난다.

'Programming > Operating System' 카테고리의 다른 글

운영체제 정리 2  (0) 2020.09.18
운영체제 정리 1  (2) 2020.07.22