공대남자/프로그래밍

운영체제 - 1. Introduction of Operating System

낭만노래쟁이 2010. 3. 8. 17:41



운영체제 첫시간. 운영체제란 무엇이며 어떠한 원리로 컴퓨터에서 작동하는가?
다행스럽게도 과제를 통해 미리 예습을 해놔서 어느 정도 개념을 잡는 것은 쉬웠다.
수업이 끝나고 남는 시간에 노트 필기한 것과 개념 이해한 것을 대충 정리해 보았다.




1.  OS란 무엇일까?

운영체제(Operating System, 이하 OS)는 Application과 H/W 사이에서 효과적으로 apps가 H/W를 사용할 수 있게 해주는 프로그램이다. 즉, 서로 교류를 할 수 있게 중간 통로 역할을 하는 것이다. 축구로 치면 선수의 이적에 관해서 선수가 직접 구단을 물색하고 계약하는 것이 아니라 에이전시를 통해 그 역할을 대행하는 것과 비슷하다 할 수 있다.

H/W와 APPS는 원래 직접적으로 서로 통신이 불가능하다. APPS가 직접 H/W를 건드리게 되면 예전 도스시절의 프로그램들 처럼 H/W에 따라 작동되거나 작동되지 않는 그런 불상사가 일어난다. 사실, 도스를 OS로 보는 것에는 이견이 많다.
때문에 OS는 그 중간에서 APPS과 H/W가 원활히 통신을 할 수 있도록 중간자 역할을 해주는 것이다.
OS는 H/W를 통제할 수 있는 모든 권한을 갖고 있어야 하며 그 점에서 도스가 진정한 의미의 OS인가 아닌가 논란이 있는 것이다.

OS를 정의를 내려보면, 협의의 정의로서 "OS는 커널이다" 라고 말할 수 있다.
광의의 정의를 내린다면, OS는 APPS(1차)까지도 포함한다.
하지만, 진정으로 OS를 배울때의 정의는 커널을 말하는 것이다.


그림 1


여기서 OS는 커널을 말하는 것이다.
Application은 1차 어플리케이션, Other 어플리케이션은 2차 어플리케이션을 말한다.
2차 어플리케이션이란 쉽게 말해서, 어플리케이션 위의 어플리케이션을 뜻한다.
어플 입장에서 보면, 자신은 2차 어플이고 OS가 1차 어플인 셈이다.



이러한 APPS와 H/W간에는 Gap이 존재하는데, 이 갭을 Semantic Gap 이라고 한다.
H/W와 APPS 간에는 처리속도의 차이가 존재한다. H/W는 기계이기 때문에 속도가 느린 반면에 APPS는 속도가 훨씬 빠르다. 그러한 처리 속도차이를 Semantic Gap이라고 하는 것이다.
그렇다면, OS의 역할은 이러한 Semantic Gap을 줄여주는 역할을 한다고 할 수 있다.



2. OS를 보는 세 가지 관점 (Views of OS)

1) Extended machine

   기계 입장에서, OS는 좀 더 효율적인 기계와 다름없다. 단지, 형태가 눈에 보이지 않는 것이지 진보된 기계와 같다고 생각하는 것이다.

2) Virtual machine (가상 머신)

   이것은 apps 입장에서 본 관점이다. 여기서 말하는 machine은 일반 기계가 아닌 Program을 말하는 것이다.
가상 머신은 실제로 프로그램을 움직이는 것이 아니라 다른 프로그램을 움직이는 역할을 한다. OS는 apps 입장에서 보면 기계이다. 하지만 진짜 기계가 아니라 가짜 기계인 셈이다. apps는 OS를 거쳐 H/W를 제어하므로 직접적으로 H/W에 관여하지 않는다. 그러한 역할을 OS가 대신 해주는 것이다. 가까운 예로 자바 머신을 생각하면 이해가 쉽다.

3) Resource Manager

   OS는 컴퓨터의 주변기기를 모두 관리한다. 흔히 주변기기라 하면 마우스,스캐너,프린터 등등 만을 생각하기 쉬운데, 컴퓨터공학에서 주변기기는 CPU를 제외한 모든 기기를 말한다. 즉, 메모리에서 그래픽카드, 마우스 등 모두를 말하는 것이다.
이러한 주변기기를 관리하는 것은 OS의 몫이다. 우리가 윈도를 사용할 때 윈도는 더 효율적으로 메모리를 관리하고 I/O 장치를 관리하는 역할을 하는 것이다. 마우스 USB를 꽂았을 때 작동되는 것은 윈도가 메인보드와 통신을 하여 마우스의 USB 포트를 인식하고 작동되게끔 했기 때문이다.



3. 간단한 OS의 역사

초기 컴퓨터는 H/W밖에 없었다. 하지만 컨트롤러의 필요성이 제기되면서 배치 OS가 탄생했다. 배치 OS는 한번에 한번씩 일을 처리하였다.(현재의 OS들은 상호작용 OS이다)
그 후, Real-time OS가 등장했고 Multiprogramming, Distributed OS 등이 등장하게 되었다.



4. Process

Process는 흔히 Program과 비교된다. 비슷한 것 같지만 엄연히 둘은 다른 개념이다.
Program은 보조 기억장치에 저장되어 있는, 실행되지 않은 상태라면 Process는 현재 실행중인 프로그램을 말한다.
Process는 실행중이기 때문에 메모리에 로드되어 있는 중이다.

이러한 Process는 Life cycle까지 갖고 있다. 생명력을 갖기 때문이다.



그림 2


1번 - Long-term 스케쥴러. 프로세스가 생성되면서 Ready상태로 만들어줌. Ready 상태는 실행을 시켜서 메모리에 올라와 Running을 하기 위해 대기중인 상태이다. 이 때, 프로세스는 대기 큐에 들어간다. 우리가 여러 개의 프로그램을 실행시켰을 때 순차적으로 뜨는 것이 대기 큐에 들어가서 그런 것이다.

2번- Dispatching. Short-term 스케쥴러. 프로세스를 CPU를 부여하여 실제로 실행을 시키는 단계이다.

3번 - 프로세스가 수행을 계속하기 전에 어떠한 사건이 발생하기를 기다려야 할 때를 말한다.

4번 - Time-Out. 일정 시간이 지나면 다시 Ready 상태로 들어온다. CPU의 속도는 매우 빠르고, 항상 실행될 수 없기 때문에 이 과정은 계속 반복된다.

5번 - Block된 프로세스가 다시 Ready 상태로 돌아가는 단계이다. 이를 Wake-up 한다고 한다.

우리가 프로그램을 실행시킨다는 진정한 의미는 바로 Running 상태에 있다를 의미하는 것이다. CPU는 매우 빠르므로 위의 사이클이 계속 반복되면서 처리를 하는 것이다. 이 개념은 사실 이해하기가 조금 난해한 부분인 것 같다.






5. PCB

PCB(Process Control Block)은 사람으로 치자면 호적등본 같은 역할을 한다. 프로세스에 관한 state, 정보 등을 담고있다. 예를 들면 다음과 같은 정보들이다.

- Program Counter
- Register
- 우선순위
- Address Space
- Parent, child Process

PCB는 그 중요성 때문에 메모리의 깊숙한 영역에 저장된다. 프로세스 사이클의 정보를 저장하였다가 다시 꺼내어 사용할 수 있기 때문이다. 프로세스가 Running하다가 ready나 block으로 다시 갈 경우, PCB에 정보를 저장한 후 나중에 다시 Running을 할 때 PCB에서 다시 정보를 불러오는 것을 Context Switching 이라고 한다.





첫 과제에 대한 결과물을 다음과 같이 올린다.





1. What is the difference between Program and Process?

 

 

Program은 컴퓨터에 의해 실행되는 지시사항의 집합체, 즉 실행 중에 사용자의 입력에 반응하도록 구현된 명령어의 집합으로 구성되어 있다. 프로그램들은 하드디스크 등의 매체에 바이너리 형식의 파일로 저장되어 있다가 사용자가 실행시키면 메모리로 적재되어 실행된다. 실행 코드가 모여 있는 단위로써, 평소에는 보조기억 장치에 저장되어 있다.

 

Process는 컴퓨터에서 실행되고 있는 프로그램을 말한다. 다시 말하자면, 실행 중인 프로그램의 인스턴스를 지칭하는 것이다. 실행 중인 모든 프로그램은 각각의 프로세스를 갖게 된다. 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다. 프로세서를 여러개 사용하는 것을 멀티프로세싱이라고 하며, 동시에 이러한 프로세스를 처리하는 것을 멀티 태스킹이라고 한다.

 

Program이 보조기억 매체에 저장되어 있는 코드라면 Process는 프로그램이 실행되어 메모리에 실려있는 것을 말한다. 이 점에서 차이가 있다. Process는 하나의 작업 단위의 의미로서, Program은 1개이지만 Process는 여러 개가 있을 수 있다. 쉽게 말해서, MS-윈도우의 그림판을 놓고 생각해 보면 그림판을 실행시키기 전의 그림판 실행파일은 하드디스크의 Windows 폴더에 Program의 형태로 저장되어 있지만 이것을 실행시키게 되면 메모리의 공간을 점유하면서 Process로 활성화된다. 그림판은 여러 개를 동시에 실행시킬 수 있는데, 여러 개를 실행시켰을 때 각각은 Process가 되는 것이다.

Program은 실행시키기 전에는 메모리에 로드되지 않는다. 하지만 실행을 시켜서 메모리에 로드하여 Process로서 작동하는 것이다.

 

   

2. Process는 어떤 과정을 거쳐서 생성되고 종료되는가?

 

프로세스의 생성 과정은 먼저 프로세스 아이디를 할당하고 그 프로세스 이미지를 저장할 공간을 할당하는 것으로 시작된다. 다음으로 실행 파일의 코드와 데이터, DLL을 생성된 공간으로 로드하며 PCB(프로세스 제어 블록)를 초기화 시키고 PCB에 대해 적절한 연결을 설정해 줌으로써 생성된다.

 

프로세스가 생성되면 준비 큐의 끝 부분에 들어간다. 시간이 흐르면서 큐의 앞부분으로 나가게 되고 이후 CPU를 사용할 수 있게 된다.

 

프로세스가 생성된 후에는 세 가지 상태 중 하나의 상태를 갖게 된다.

 

1) 실행(running) - 프로세스가 CPU를 사용하여 실제로 명령들을 수행하고 있을 때를 말한다.

2) 준비(ready) - 블록되거나 실행 중이 아닌 프로세스들을 준비 상태라 지칭한다. 프로세스가 CPU를 사용하고 있지는 않지만 언제든지 사용할 수 있는 상태로, CPU가 할당되기를 기 다리고 있는 중이다. 대기 중인 프로세스들은 현재 실행 중인 프로세스가 CPU의 제어를 반환할 때 CPU의 제어 를 할당받을 대상이 된다. 이 때에는 우선 순위가 높은 순서대로 CPU를 할당받게 된다.

 

3) 대기(wating) - 블록(Block)이라고도 부른다. 프로세스가 수행을 계속하 기 전에 어떠한 사건이 발생하기를 기다려야 할 때 블 록이라고 부른다.

 

4) 종료(terminated) - 프로세스의 실행이 종료되는 것을 말한다.

 

프로세스가 생성될 때 그 프로세스를 저장할 메모리 구조도 함께 만들어진다. 또한, 레지스터 세트는 프로세스 실행을 위한 필요한 데이터들로 채워지게 된다.

 

프로세스는 다음과 같은 종료과정을 거치는데, 프로세스를 종료하는 함수를 호출하게 되면 프로세스의 상태가 변하게 되고 프로세스가 갖고있던 리소스를 모두 반환하게 되면서 프로세스의 종료가 이루어지는 것이다.

프로세스가 실행에서 대기 상태로 전환되면 다른 프로세스를 실행하도록 선택하게 된다. 이 때, 프로세스를 선택하고 제어권을 전달하는 것을 디스패칭(dispatching)이라고 부른다. 이 기능은 디스패처가 담당한다.

 

프로세스가 생성되는 시기는 다음과 같은데, 컴퓨터를 켜서 운영체제가 실행될 때 OS에 필요한 프로세스가 실행된다. 그리고 하나의 프로세스에서 파생되어 생성이 가능하다. 또한, 컴퓨터 사용자의 프로그램 실행에 의해서 생성되기도 하며, 일괄처리 작업이 개시될 때 등의 경우에서도 프로세스가 생성된다.

 


3. Process Control Block은 무엇이며 어떤 정보가 저장되는가?

 

 

프로세스 제어 블록(Process Control Block, PCB)은 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 OS 커널의 자료 구조로, 작업 제어블록, 혹은 작업 구조라고도 한다.

운영체제가 프로세스에 대한 중요한 정보를 저장해 놓은 저장소의 역할을 하는데, 프로세스가 생성될 때 동시에 만들어지며, 각각의 모든 프로세스들은 고유한 PCB를 지니게 된다. 프로세스가 상태 변화가 일어나면 PCB의 내용도 함께 변경되며, 프로세스의 수행이 완료될 때 대응되는 PCB도 함께 삭제된다. PCB는 OS가 프로세스를 표현한 것을 말한다.

 

PCB에는 여러 정보가 저장된다. 일반적으로, 다음과 같은 정보들이 저장되어 있다.

 

1. Process 상태(실행,대기 혹은 블록) 표시자(식별자)

2. 모든 기계 레지스터들을 저장하는 데 사용되는 영역

3. 프로세스에 의해 사용되는 시스템 자원의 표시

4. 프로세스 상태

5. 프로그램 계수기

6. CPU 스케쥴링 정보 (우선순위, 최종 실행시각, CPU 점유시간 등)

7. 프로세스가 점유하는 메모리에 대한 정보

8. 프로세스의 계정에 대한 정보

9. I/O 상태에 대한 정보

 

PCB는 중요한 정보를 담고 있기 때문에 임의로 사용자의 접근을 제한하여 숨겨진 메모리 영역에 보관한다.

  

 

4. 스케쥴링을 시간에 따라 분류할 경우 어떻게 분류되는가?

 

 

스케쥴링을 처리 시간별로 분류한다면 다음과 같이 두가지로 나뉜다.

 

1) 선점(preemptive) 스케쥴링

 

선점 스케쥴링은 하나의 프로세스가 CPU 점유시 다른 프로세스 중에서 우선순위별로 높은 프로세스가 현재 점유중인 프로세스를 중지시키고 대신 CPU를 점유하는 것을 말한다. 하지만 우선순위가 높은 프로세스들이 들어오는 경우 오버헤드가 발생하는 단점이 있다. 이러한 선점 스케쥴링은 우선순위가 높은 프로세스를 빨리 처리해야 하는 시스템에서 주로 쓰이거나 시분할 시스템 등에서 쓰인다.

 

2) 비선점(nonpreemptive) 스케쥴링

 

비선점 스케쥴링은 일단 한 프로세스가 CPU를 할당받게 되면 다른 프로세스는 우선순위가 높더라도 CPU를 점유할 수가 없다. 이러한 비선점 스케쥴링은 모든 프로세스가 공정하게 일을 처리할 수 있고 응답시간의 예측이 가능하지만 프로세스의 작업 길이에 관계없이 이전 프로세스의 작업이 종료될 때까지 기다려야 하는 단점이 있다.

 

 

스케쥴링은 세 가지의 단계별 스케쥴러로 구분할 수 있다.

 

1) 장기 스케쥴러

 

장기 스케쥴러는 프로세스를 주기억 장치에 위치시키는 스케쥴러로써, 주기억 장치에 위치될 때 준비 상태로 바뀐다. 만약, 공간이 충분치 않을 때에는 프로세스를 스왑 영역으로 옮길 수도 있다. 이를 스왑-아웃 이라고 한다.

 

2) 중기 스케쥴러

 

중기 스케쥴러는 스와핑을 관리하는 스케쥴러이다. 주기억 장치로 스왑-인 할 프로세스와 스왑아웃 시킬 프로세스를 결정하는 역할을 한다. 장기 스케쥴러보다 더 많이 작동한다.

 

3) 단기 스케쥴러 (Short-term scheduler)

 

단기 스케쥴러는 세 개의 스케쥴러 중 가장 바쁘게 작동한다. 실행을 위한 준비 상태에 있는 프로세스 중에서 처리기를 어느 곳에 할당할 것인가를 결정하는 역할을 한다. timer 인터럽트에 의해 실행 중이던 작업이 중단되었거나 system call에 의해 커널 모드를 실행 중인 프로세스가 블록했을 경우 등에 작동된다.

 

 


참고문헌

 

 

1. 프로그램과 프로세스의 차이점

 

위키백과
http://ko.wikipedia.org/wiki/%EC%BB%B4%ED%93%A8%ED%84%B0_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8

http://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4

네이버 블로그
http://blog.naver.com/ijkb1004?Redirect=Log&logNo=50034401367

구글
http://www.geekinterview.com/question_details/18526

 

2. 프로세스의 생성과 소멸

 

네이버 블로그

http://blog.naver.com/naesungbabo?Redirect=Log&logNo=100035763335

티스토리 블로그

http://urassa.tistory.com/56

http://dakuo.tistory.com/80

 

http://sizzle.cs.kookmin.ac.kr/lecture-data/unix-structure/UNIX-Chap7.pdf

 

SYSTEM SOFTWARE 3rd Edition - Leland L. Beck 저

 

 

3. Process Control Block에 대해..

 

http://cafe.naver.com/multism.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=1269

 

위키백과

http://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4_%EC%A0%9C%EC%96%B4_%EB%B8%94%EB%A1%9D

 

SYSTEM SOFTWARE 3rd Edition - Leland L. Beck 저

 

 

4. 스케쥴링을 시간에 따라 분류할 경우 어떻게 분류되는가?

 

 

http://ce.kyungil.ac.kr/~kdbu/os_html/os_9.html#9-4

 

네이버

http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=103&docId=69927534&qb=7Jq07JiB7LK07KCcIOyEoOygkCDruYTshKDsoJA=&enc=utf8&section=kin&rank=3&sort=0&spq=0&pid=fHMT9g331yGssbdXgmCssv--344137&sid=S5OOJY9rk0sAACE8Gtw