CS공부/운영체제

[운영체제] 프로세스 관리 (1)

혜유우 2024. 4. 22. 21:41

 

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

process의 virtual memory의 주소 공간과 커널의 주소 공간은 code, data, stack으로 이루어져 있음

 

커널 주소 공간의 내용

 

 

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

 

✓함수(function)

1. 사용자 정의 함수

자신이 프로그램에서 정의한 함수

2. 라이브러리 함수

자신의 프로그램에서 정의하지 않고 갖다 쓴 함수

자신의 프로그램의 실행 파일에 포함되어 있다

3. 커널 함수

운영체제 프로그램의 함수

커널 함수의 호출=시스템 콜

 

Mode bit=1 -> 사용자 모드

Mode bit=0 -> 모니터 모드=커널 모드=시스템 모드

 

 

프로세스의 개념

 

"Process is a program in execution"

프로세스의 문맥(context)

-CPU 수행 상태를 나타내는 하드웨어 문맥(Program Counter, 각종 Register)

-프로세스의 주소 공간(code, data, stack)

-프로세스 관련 커널 자료 구조(PCB(Process Control Block), Kernel stack)

 

프로세스의 상태

프로세스는 상태(state)가 변경되며 수행

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

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

3. Blocked(wait, sleep)

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

-Process 자신이 요청한 event(Ex. I/O)가 즉시 만족되지 않아 이를 기다리는 상태 Ex. 디스크에서 file을 읽어와야 하는 경우

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

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

 

 

 

 

Process Control Block(PCB)

 

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

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

(1) OS가 관리상 사용하는 정보: Process state, Process ID, scheduling information, priority

(2) CPU 수행 관련 하드웨어 값: Program Counter, registers

(3) 메모리 관련: Code, data, stack의 위치 정보

(4) 파일 관련: Open file descriptors...

 

 

문맥 교환(Context Switch)

 

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

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

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

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

 

 

(1)은 문맥 교환이 아님! 문맥교환은 사용자 프로세스A->사용자 프로세스B로 CPU가 넘어가는 것임. 프로세스A->커널->프로세스A로 넘어가는 것은 문맥교환이 아니다.

System call이나 Interrupt 발생시 반드시 context switch가 일어나는 것은 아님

(1)의 경우에도 CPU 수행 정보 등 context의 일부를 PCB에 save해야 하지만 문맥교환을 하는 (2)의 경우 그 부담이 훨씬 큼(cache memory flush)

 

 

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

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

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

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

프로세스들은 각 큐들을 오가며 수행된다