본문 바로가기
EH 운영체제 강의

4. 프로세스

by 킹차니 2022. 5. 20.

 

 

프로세스의 문맥(context):  프로세스는 실행중인 프로그램이다.

CPU 수행 상태를 나타내는 하드웨어 문맥

- 하드웨어 문맥 : Program Counter( Register 중 PC)

- 각종 register

프로세스의 주소 공간

- code, data, stack

프로세스 관련 커널 자료 구조

- PCB (Process Control Block)

- kernal stack

하나의 CPU가 여러 개의 프로세스들을 실행시키기 위해서는 프로세스의 문맥이 중요하다. 즉 특정 프로세스가 어디까지 실행되었는지를 알야 다른 프로세스를 실행시키다 돌아와도 어디부터 실행해야 하는 지를 알 수 있다.

OS는 프로세스들이 잘 실행되고 있나? 를 잘 감시해야 한다. 해서 커널 주소 공간이 존재하는데, 여기에 각 프로세스들의 데이터, PCB를 두고 이들을 관리한다.

 

프로세스의 상태 (Process State)

프로세스는 상태가 변경되며 수행된다. 상태들에는 아래와 같이 5개로 나눌 수 있다.

1. Running : CPU를 잡고 instruction을 수행중인 상태

2. Ready : CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)

3. Blocked (wait, sleep) :

- CPU를 주어도 당장 intruction을 수행할 수 없는 상태

- Process 자신이 요청한 event(예:I/O)가 만족되지 않아 이를 기다리는 상태

- ex) 디스크에서 file을 읽어와야 하는 경우

4. New : 프로세스가 생성중인 상태

5. Terminated : 수행(execution)이 끝난 상태

 

아래의 그림을 보면 프로세스의 상태를 조금 더 쉽게 이해할 수 있다.

다양한 프로세들은 자신이 CPU에 실행되기 위해 Ready queue에서 대기하고 있다. 그러다 IO장치다 필요하다 던지, 공유 데이터에 접근행 한다면 그쪽으로 옮겨서 작업을 기다리게 된다.

 

그런데 이러한 queue에서 대기 중인 프로세스들은 실제로는 OS가 관리하는 것이다. 즉 OS의 Data 세그먼트 안에 자료구조를 만들어 두고 여기서 프로세스들의 상태를 결정한다.

 

 

 

Process Control Block (PCB)

PCB

- 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보

- 다음의 구성 요소를 가진다.(구조체로 유지)

(1) OS가 관리상 사용하는 정보

      - Process state, Process ID

      - scheduling information, priority

(2) CPU 수행 관련 하드웨어 값

      - Program counter, registers

(3)  메모리 관련

      - Code, data, stack의 위치 정보

(4)  파일 관련

      - Open file description...

 

 

문맥 교환 (Context Switch)

CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정

CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행

   1. CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장

   2. CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴

 

즉 CPU의 주도권이 프로세스A에서 프로세스B로 넘어가는 상황에서 Context Switch가 발생한다.

그런데 CPU의 주도권이 사용자 프로그램에서 OS로 넘어가는 것을 Context Switch라고 하지는 않는다.

(1)은 사용자 프로그램에서 OS로 넘어간 뒤 다시 사용자 프로그램으로 넘어가는 경우이고, 

(2)는 사용자 프로그램A에서 사용자 프로그램B로 컨텍스트 스위칭이 발생하는 경우이다.

물론 (1)의 경우에도 CPU의 수행 정보 등 context의 일부를 PCB에 save해야 하지만 문맥 교환을 하는 (2)의 경우에 비하면 오버헤드가 훨씬 적다.(ex. cache memory flush)

 

프로세를 스케쥴링하기 위한 큐

Job Queue : 현재 시스템 내에 있는 모든 프로세스의 집합

Ready Queue : 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합

Device Queue : I/O devices의 처리를 기다리는 프로세스의 집합

프로세스들은 위의 여러 큐들을 오가며 수행된다.

 

프로세스 스케쥴링 큐의 모습은 아래와 같다.

 

 

스케쥴러 (Scheduler)

Long-term scheduler (장기 스케쥴러 or job scheduler)

- 시작 프로세스 중 어떤 것들을 ready queu로 보낼지 결정

- 프로세스에 memory(및 각종 자원)을 주는 문제

- degree of Multiprogramming을 제어

- time sharing system에는 보통 장기 스케쥴러가 없음(무조건 ready)

 

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

- 어떤 프로세스를 다음번에 running시킬지 결정

- 프로세스에 CPU를 주는 문제

- 충분히 빨라야 함 (millisecond 단위)

 

Medium-term scheduler (중기 스케쥴러 or Swapper)

- 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄

- 프로세스에게서 memory를 뺏는 문제

- degree of multiprogramming을 제어

 

사실 롱텀 스케쥴러는 프로그램을 메모리에 올려주는 역할만 한다. 즉 그냥 요청하면 다 올려준다. 그래서 실질적으로 메모리의 용량에 비해 너무 많은 프로세스가 올라온 것을 보고 디스크로 쫓아내는 것은 중기 스케쥴러가 한다.

 

 

프로세스의 상태 (Process State)

위에서도 프로세스의 상태에 대해 살펴봤는데, 위에서 살펴본 것을 CPU 기준이고, 이번에는 좀 더 프로세스 기준으로 살펴보자.

1. Running 

  - CPU를 잡고 instruction을 수행중인 상태

2. Ready

  - CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)

3. Blocked(wait, sleep)

  - I/O 등의 event를 기다리는 상태

  - Ex) 디스크에서 file을 읽어와야 하는 경우

4. Suspended (stoped)

  - 외부적인 이유로 프로세스의 수행이 정지된 상태

  - 프로세스는 통째로 디스크에 swap out 된다.

  - Ex) 사용자가 프로그램을 일시 정지시킨 경우 (break key) 시스템이 여러 이유로 프로세스를 잠시 중단시킴 (메모리에 너무 많은 프로세스가 올라와 있을 때)

* Blocked : 자신이 요청한 event가 만족되면 Ready

* Suspended : 외부에서 resume해 주어야 Active

 

 

프로세스 상태도 (프로세스 기준)

 

 

 

 

 

 

출처 : 이화대학교 반효경 교수님의 운영체제 강의
http://www.kocw.net/home/search/kemView.do?kemId=1046323