CS/OS

[OS] 운영체제의 프로세스 관리

Deveun 2021. 7. 23. 02:49

운영체제의 여러 기능중에는 프로세스 관리가 있다.

이번 게시글에서는 프로세스란 무엇이며, 운영체제에서 어떻게 관리되는지 공부해보자.

 

 

Process란 무엇인가?

A process is a program in execution.

 

: 프로세스란 실행중인 프로그램을 말한다.

컴퓨터의 저장소(HDD) 에는 많은 파일과 프로그램들이 있는데, 이를 실행시키기 위해 메모리에 load하면 프로세스로 불리는 것이다. 그리고 이 때, 프로세스는 다음 그림과 같이 메모리에 여러 영역으로 나뉘어 저장된다.

 

출처: Operating System Concepts, 10th Ed. Abraham Silberschatz

 

o Text section : 소스코드의 명령어

o Data section : 소스코드의 전역변수

o Heap section : 동적 메모리 할당 (dynamic memory allocation) - ex. malloc, new() ..

o Stack section : 함수 영역 (function parameters, return addresses) 

 

 

 

운영체제는 Process를 어떻게 관리할까?

: 운영체제는 여러개의 프로세스들이 동시에(concurrency) 동작하고, 프로세스를 실행시키는 CPU의 활용성을 최대로(Maximize CPU utilization) 하도록 지원한다. 이를 설명하기 위해, 프로세스의 생명주기(Process Lifecycle)PCB(Process Control Block) 개념에 대해서 알아보자.

 

 

(1) 프로세스의 생명주기 (Process Lifecycle)

 

출처: Operating System Concepts, 10th Ed. Abraham Silberschatz

 

o 생성(new): 프로세스가 memory에 올라간 상태.

o 준비(ready): 다른 프로세스가 CPU를 사용하고 있어, 할당을 기다리고 있는 상태.

o 수행(running) : 프로세스가 CPU를 점령하여 명령어가 실행되고 있는 상태.

o 대기(waiting) : I/O request나 이벤트가 완료될 때까지 기다리고 있는 상태로, 해당 작업이 완료되면 ready queue로 이동.

o 종료(terminated) : 프로세스의 명령어가 끝까지 진행되었거나 중간에 exit() 가 발생하면 프로세스가 종료.

 

 

(2) PCB(Process Control Block)

: 생성주기에서 살펴본거처럼 프로세스는 다른 프로세스가 CPU를 차지하고 있는 동안 준비(ready)하기도, 수행(running)중이다가도 이벤트 발생에 따라 대기(waiting)를 거쳐 ready queue에서 다음 차례를 기다렸다가 다음 수행(running) 차례 때, 이전 위치부터 다시 실행되기도 한다.

이런 상태의 변화와 실행 위치 등, 운영체제가 기억할 수 있도록 프로세스가 가져야 하는 모든 정보를 구조체에 저장하는데 이게 바로 PCB이다. 즉, OS는 PCB를 가지고 프로세싱을 핸들링한다.

 

출처: Operating System Concepts, 10th Ed. Abraham Silberschatz

 

 

 

프로세스 스케쥴링(Process Scheduling)

: 만약에 운영체제에서 한번에 하나의 프로세스만 실행할 수 있다면, 그 운영체제는 아무도 사용하지 않을 것이다. 그렇기 때문에 운영체제는 CPU core의 프로세스를 빠르게 교체하면서 여러 프로세스가 동시에 실행되는것 처럼 보이게 한다. => Time Sharing

 

준비(ready) 상태의 프로세스들은 PCB로 이루어진 Ready Queue에 쌓이고, 하나씩 꺼내어 CPU에서 실행하는데 이 때, 실행(running)중이던 프로세스가 다른 프로세스로 교체되면서 *Context Switch가 발생한다.

 

*Context Switch(문맥교환)

: CPU core에서 다른 프로세스로 교체가 일어날 때, 시스템은 현재 context(어디가지 실행했는지 등의 PCB정보)를 저장(save)하고, ready queue에서 다시 실행(resumed)되었을 때, context를 다시 가져온다(restore).

 

출처: Operating System Concepts, 10th Ed. Abraham Silberschatz
출처: Operating System Concepts, 10th Ed. Abraham Silberschatz