본문 바로가기

문과 코린이의, [운영체제] 기록

[문과 코린이의 IT 기록장] 운영체제(OS) - System structure & Program execution (컴퓨터 시스템 구조, 동기식 입출력과 비동기식 입출력, 서로 다른 입출력 명령어, 저장장치 계층 구조, 프로그램의 실행..

반응형

[문과 코린이의 IT 기록장] 운영체제(OS) - System structure & Program execution (컴퓨터 시스템 구조, 동기식 입출력과 비동기식 입출력, 서로 다른 입출력 명령어, 저장장치 계층 구조, 프로그램의 실행, 커널 주소 공간의 내용)

[문과 코린이의 IT 기록장] 운영체제(OS) - System structure & Program execution (컴퓨터 시스템 구조, 동기식 입출력과 비동기식 입출력, 서로 다른 입출력 명령어, 저장장치 계층 구조,  프로그램의 실행, 커널 주소 공간의 내용) 

 


 

 

운영체제

운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각

www.kocw.net

 

 

[문과 코린이의 IT 기록장] 운영체제(OS) - 운영체제(운영체제(OS)란?, 운영체제(OS)의 기능 및 목표,

[문과 코린이의 IT 기록장] 운영체제(OS) - 운영체제(운영체제(OS)란?, 운영체제(OS)의 기능 및 목표, 운영체제의 분류, 몇 가지 용어, 운영체제의 예, 운영체제의 개괄적인 구조) 운영

vansoft1215.tistory.com

 


운영체제 내용에 본격적으로 들어가기에 앞서컴퓨터 시스템에서 하드웨어가 어떻게 동작하는지, 프로그램들이 그 하드웨어 위에서 어떻게 돌아가는지에 대해 알아보고자 함.

 


1. 컴퓨터 시스템 구조

컴퓨터 시스템 구조

- Computer(=Host = Host Computer) : CPU, Memory로 구성

 : Memory는 CPU의 작업 공간임. CPU는 매 클럭사이클마다, 메모리에서 기계어를 하나씩 읽으며 실행함.

 

- I/O device : Disk, 키보드, 프린터, 모니터 등으로 구성

 * input device : 키보드, 마우스

 * output device : 프린터, 모니터

 * HDD는 input, output device 모든 역할을 함. (데이터를 메모리로 읽어들이기도, 처리의 결과를 출력하기도 함)

 

세부적인 컴퓨터 시스템 구조


1) Device controller 

- 각각의 I/O device들에, 각각의 device들을 전담하는 작은 cpu가 붙어있음. 그것을 device controller라고 함.

ex. Disk 내부를 통제하는 것 : Disk controller, 키보드 내부를 통제하는 것 : 키보드 controller

- 즉, 해당 I/O 장치유형을 관리하는 일종의 작은 CPU임.

 * 제어 정보를 위해 control register, status register(cpu가 일을 시킬 때 해당 일을 지시하는 레지스터)를 가지며, local buffer(일종의 data register)를 가진다.

 * I/O는 실제 device와 local buffer 사이에서 일어난다.

 * Device controller는 I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알린다.

- device driver(장치구동기)
 : 소프트웨어
 : OS 코드 중 각 장치별 처리루틴
(운영체제 코드 중 각 디바이스를 처리하기 위한 인터페이스에 맞게 접근할 수 있도록 돕는 소프트웨어 모듈)

- device controller(장치제어기)
 : 하드웨어
 : 각 장치를 통제하는 일종의 작은 CPU

2) Local buffer

- device controller들도, 각각의 작업공간들이 필요함. 그 공간을 local buffer라고 함.

 

# CPU와 I/O device속도와 성능에 있어 엄청난 차이가 존재한다. 따라서 CPU가 직접 device를 관리하게 된다면 효율성이 크게 떨어지게 되며, 이러한 이유로 device controller가 각각의 device를 담당하게 된다. 즉, CPU는 매 클럭사이클마다 메모리에서 명령어를 하나씩 읽어 실행하는 역할만 한다.


3) Register (레지스터)

- 메모리보다 더 빠르게 정보를 저장할 수 있는 작은 공간 (CPU 내부에 존재)


4) Mode bit

- CPU 내부에서 실행하는 것운영체제(OS)인지, 사용자 프로그램인지를 구분해주는 것

- 사용자 프로그램의 잘못된 수행으로, 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치

- Mode bit을 통해 하드웨어적으로 두 가지 모드의 operation 지원

 a. 1 : 사용자 모드 - 사용자 프로그램 수행

 * 사용자 프로그램에게 CPU를 넘기기 전에, mode bit을 1로 셋팅

 b. 0 : 모니터 모드(=커널 모드 = 시스템 모드) - OS 코드 수행

 * 보안을 해칠 수 있는 중요한 명령어 또한 수행 가능

 * 즉, 무엇이든 다 접근 가능 (I/O device ,Memory 등..)

 * interrupt나 Exception 발생 시 하드웨어가 mode bit을 0으로 바꿈.


5) Interrupt line

- CPU는 항상 메모리에 있는 명령어만 실행함. 즉, I/O device에 직접 접근할 수 없다는 것.

- 그렇다면, 만약 I/O device에서 명령 및 요청(scanf, 파일 입출력 등)이 들어올 경우에 그 정보를 어떻게 전달받는가?

- 이 정보를 전달해주는 역할interrupt line이라고 함.


6) Timer

- 만약 프로그램 1이 무한루트(for,while)를 도는 프로그램이라면, CPU가 계속 이 프로그램에서 사용되게 될 것이다. 그러면 Time sharing을 구현하기가 어려워짐.

- 경우를 방지하기 위해서 컴퓨터 내부에는 Timer라는 하드웨어를 두고 있음.

- 즉, 이는 특정 프로그램이 CPU를 독점하는 것을 막기 위해서 사용되는 것임.

 * Timer는 매 클럭 틱마다 1씩 감소

 * Timer 값이 0이 되면, Timer interrupt 발생


7) Memory controller & DMA controller

- Memory는 원칙적으로 CPU만 접근할 수 있게 해놓음. (I/O device들은 각자의 local buffer를 통해 작업하고, CPU가 이를 복사함) 그러다보니, CPU가 요청을 너무 많이 받게 되면서 interrupt가 상당히 많이 발생하곤 함. 

- 이로 인해 CPU가 그닥 효율적이지 않게 동작하기도 함. 이를 효율적으로 하기 위해 메모리를 직접 접근할 수 있는DMA controller(local buffer의 정보를 메모리에 복사하는 역할 등을 함)를 두고 있음. 

- 그리고 CPU와 DMA controller가 동시에 메모리 접근을 하는 문제를 방지하기 위해, Memory controller가 이를 중재하고 있음.


8) PC register

- CPU 내부에 있는 메모리 주소를 가지고 있는 공간.

- PC register를 통해, CPU는 메모리의 명령어를 수행하고, 그 다음 어떤 메모리 주소를 통해 실행해야할지를 알게 됨.

 * 다음 명령어를 처리하기 전에 CPU는 항상 interrupt를 체크함.


9) Interrupt (인터럽트)

- 인터럽트 당한 시점의 레지스터program counter(PC)save한 후 , CPU의 제어를 인터럽트 처리 루틴에 넘긴다.

 

a. 하드웨어 인터럽트(넓은 의미의 인터럽트) : 하드웨어가 발생시킨 인터럽트

ex 1 ) Timer에서 발생한 인터럽트 

 * 처음에는 OS가 CPU를 가지고 있다가, 프로그램이 사용이 되면 CPU를 넘겨줌.

-> 프로그램을 넘겨줄 때, OS는 Timer에 값을 세팅해서 넘겨줌

-> 프로그램에서 CPU를 사용하다, 세팅된 시간이 끝나면 Timer가 CPU에게 interrupt를 걸게 됨

-> interrupt가 걸린 CPU는, 제어권을 OS에 돌려줌.

-> OS는 다른 프로그램에 CPU 제어권을 넘겨줌.

* 프로그램이 끝나면 CPU는 자동으로 OS에 제어권이 넘어감.

 

ex 2 ) I/O device에서 전달한 인터럽트 

* I/O 장치에서 전달해야 하는 정보가 존재할 경우, CPU에 interrupt를 걸게 된다. 그러면, DMA controller가 먼저 local buffer에 존재하는 내용들을 Memory에 복사하고, 그 정보가 어느 정도 유의미하게 모이게 되면 DMA controller는 CPU에게 interrupt를 걸게 된다.

 

 

b. 소프트웨어 인터럽트 (Trap)

- Exception : 프로그램이 오류를 범한 경우

ex 1 ) 사용자 프로그램이 OS에 잘못 접근한 경우

* 사용자 프로그램이 오류를 범하게 되면, interrupt line이 자동으로 생성되면서, CPU 제어권이 운영체제로 넘어가게 된다.

 

- System call : 프로그램이 커널 함수를 호출하는 경우

ex 1 ) 사용자 프로그램이 I/O 요청을 하는 경우 

* 사용자 프로그램이 I/O device에서 정보를 읽어와야 하는 경우, CPU에게 interrupt를 건다. interrupt를 받은 CPU는 mode bit을 0으로 바꾸며 OS에게 CPU 제어권을 넘긴다. 그러면 OS는 올바른 요청인지 확인한 후, I/O를 수행하게 된다.

 

# 인터럽트 관련 용어
- 인터럽트 백터 : 해당 인터럽트의 처리 루틴 주소를 가지고 있음 (인터럽트마다 처리해야 하는 것들을 모아둔 코드 테이블)
- 인터럽트 처리 루틴(interrupt Service Routine, 인터럽트 핸들러) : 해당 인터럽트를 처리하는 커널 함수

 


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

* 두 경우 모두 I/O의 완료는 interrupt로 알려준다.

 

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

 * Synchronous : 서로 맞춘다는 의미가 내포됨.

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

구현 방법 1 ) 
- I/O가 끝날 때까지 CPU를 낭비시킨다.
- 매시점 하나의 I/O만 일어날 수 있다.

구현 방법 2 )
- I/O가 완료될 때까지, 해당 프로그램에게서 CPU를 빼앗는다.
- I/O 처리를 기다리는 중에, 다른 프로그램에게 CPU를 줌으로써 더 효율적으로 활용할 수 있다.

 

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

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

 * read의 경우에는,  읽어온 데이터와 관계없이 진행할 수 있는 코드들을 먼저 진행한다.

 * write의 경우에는, 좀 더 자연스럽게 진행될 수 있다. (일반적으로 출력 결과를 꼭 봐야하는것은 아니기 때문)

 

 


3. 서로 다른 입출력 명령어

- I/O를 수행(접근)한는 방법이, 2가지가 있다.

 

1) 일반적인 I/O 방식

- I/O에 접근하는 특정 명령어를 실행하면, 그 device를 접근하게 됨

 

2) Memory Mapped I/O 방식 

- I/O device들에 각각 메모리 주소를 매겨서, 명령어를 통해 메모리를 접근하는 방식

 


4. 저장장치 계층 구조

* 올라갈수록 속도가 빠르며, 단위공간당 가격이 비싸고, 용량이 적어짐. 

* 또한 위로 올라갈수록 휘발성이 높으며, 아래로 갈수록 비휘발성이 높음.

 

- Primary(excutable) : CPU에서 직접 접근할 수 있는 Memory storage 매체

 * 이들은 byte단위로 이루어짐. (CPU는 byte 단위로만 매채에 접근이 가능함)

- Secondary : CPU에서 직접 접근할 수 없는 Memory storage 매체

 * 이들은 sector 단위로 이루어짐.

- Caching : CPU가 명령어를 처리하는데 있어, 속도 차이를 완충하기 위해, 중요한 정보나 반복되는 정보를 캐시 메모리에 올려서 효율적으로 사용하는 것. 이는 보통 재사용을 목적으로 함.

 

 


5. 프로그램의 실행 (메모리 load)

* file system : 전원이 나가도 보관되는 데이터(HDD), swap areea : 전원이 나가면 사라지는 데이터

* swap area는 메모리 공간의 한계로 메모리 연장공간으로서 사용하는 것이고, file system은 비휘발성의 용도로 사용됨.

 

* 함수(function)

a. 사용자 정의 함수 : 자신의 프로그램에서 정의한 함수b. 라이브러리 함수 : 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수로, 프로그램 실행 파일에 포함되어 있다.c. 커널 함수 : 운영체제 프로그램의 함수. (커널 함수의 호출 = 시스템 콜)

 

** 커널 또한 주소공간이기 때문에, code / data / stack의 구조로 이루어져 있다.

 


6. 커널 주소 공간의 내용

1) 커널의 Code 부분

- 자원을 효율적으로 관리할 수 있도록 하는, 그리고 사용자에게 편리한 인터페이스를 제공할 수 있도록 하는 관련 코드들이 존재함.

- 즉 os는 interrupt를 통해 cpu제어권을 얻게 되는데, 그 각각의 interrupt마다 어떻게 처리할 것인지와 관련한 코드들이 들어있을 것임.

 

2) 커널의 Data 부분

- os가 사용하는 여러 가지 자료구조 부분

- 하드웨어 종류마다 자료구조를 하나씩 구성해서 관리하고 있을 것임.

- 더불어 프로세스들 또한 하나씩 구성해서 관리하고 있음.

 * 각 프로그램들이 독자적인 주소공간을 지니고 있지만, 이들을 os가 관리하기 위해서는 따로 자료구조가 필요함. 이를 PCB라고 부름

 

3) 커널의 Stack 부분

- os 또한 함수구조로 코드가 사용되기 때문에, stack 영역을 활용해야 함.

 * 운영체제의 코드들을 사용자 프로그램(시스템 콜)들의 요청에 따라 불러서 쓸 수 있음.

 

 


7. 프로그램의 실행

* 일반적인 실행과정


* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)
반응형