[KOCW] 운영체제 - 반효경, 프로세스
프로세스
프로세스의 개념
- 프로세스란 프로그램의 실행.
- 프로세스의 문맥(Context)
- 특정 시점을 놓고 봤을 때 프로세스가 어느정도 실행됐고, 어떤 주소공간에 어느정도 data를 쌓아뒀는지 등을 규명하기 위한 것.
- 프로세스의 현재 상태를 알기 위한 모든 요소를 문맥이라고 함.
- CPU 수행 상태를 나타내는 하드웨어 문맥
- Program Counter
- Register
- 프로세스 주소 공간
- code, data, stack
- 프로세스 관련 커널 자료구조
- PCB(Process Control Block)
- Kernel Stack (프로세스마다 별도로 가지고 있음)
=> 프로세스들이 번갈아 실행되기 때문에 프로세스의 현재 문맥을 가지고 있지 않으면 스위칭하기가 어려움.
프로세스의 상태
suspended <----------------------------------
| |
new -admitted-> ready <-> running -exit-> terminated |
(in memory) | |
^-------- blocked |
| |
suspended ----------------------
- 프로세스는 상태(state)가 변경되며 수행된다.
- Running
- CPU를 잡고, 인스트럭션을 수행하고 있는 상태.
- Ready
- CPU를 기다리는 상태. 다른 조건(당장 프로그램이 실행되기 위해 필요한 물리적인 메모리 등)은 모두 충족된 사태.
- Blocked(wait, sleep)
- CPU를 줘도 당장 인스트럭션을 수행할 수 없는 상태.
- 프로세스가 요청한 이벤트(I/O)작업이 바로 만족되지 않아 기다리는 상태 등.
- Suspened(stopped)
- 외부적인 이유로 프로세스의 수행이 정지된 상태
- 프로세스 통째로 디스크에 swap out 됨.
- ex) 사용자가 일지 정지시킴(break key), 시스템(중기 스케줄러)이 메모리 등의 문제로 중단시킴
- New
- 프로세스가 생성중인 상태.
- Terminated
- 수행이 끝난 상태.
- Running
- Blocked: 자신이 요청한 event가 만족되면 Ready
- Suspended: 외부에서 resume 해 주어야 Active
프로세스 스케줄링 큐
- Job queue
- 현재 시스템 내에 있는 모든 프로세스의 집합.
- Ready queue
- 현재 메모리 내에 있으면서 CPU를 잡아 실행되기를 기다리는 프로세스 집합.
- Device queues
- I/O device 처리를 기다리는 프로세스의 집합.
=> 프로세스들은 각 큐를 오가며 실행된다.
문맥 교환(Context Switch)
- CPU를 한 프로세스에서 다른 프로세스로 넘겨 주는 과정.
- 수행 과정
- CPU에서 물러나는 프로세스에 대한 정보를 프로세스의 PCB에 저장
- CPU에 실행되는 프로세스의 상태를 프로세스의 PCB로부터 읽어옴
- system call/interrupt가 발생하면 무조건 context switch가 일어나는 것은 아님
- 사용자 프로세스로부터 CPU가 OS에게 가는 것, 그리고 다시 그 프로세스로 돌아가는 것은 context switch가 아님.
- 이는 user mode -> kernel mode -> user mode 일 뿐임.
- 이 경우에도 문맥의 일부를 저장해야 하지만, 프로세스간 문맥 교환을 하는 경우 그 부담이 훨씬 크다.
PCB(Process Control Block)
- 운영체제가 프로세스를 관리하기 위해 사용하는 자료구조
- 구성요소(구조체로 유지)
- (1) OS가 관리상 사용하는 정보
- (2) CPU 수행 관련 하드웨어 값
- (3) 메모리 관련
- (4) 파일 관련
스케줄러(Scheduler)
Long-term scheduler(장기 스케줄러 or job scheduler)
- 어떤 프로세스를 ready queue로 보낼지 결정
- 프로세스를 메모리에 할당하는 문제
- degree of Multiprogramming을 제어
- 메모리에 올라가는 프로그램의 수를 적당히 유지해줘야 함.
- time sharing system에는 보통 장기 스케줄러가 없음 => 무조건 ready
Short-term scheduler(단기 스케줄러 or CPU scheduler)
- 충분히 빨라야 함(millisecond 단위)
- 어떤 프로세스를 다음에 running할지 결정
- 프로세스를 CPU에 주는 문제
Medium-term scheduler(중기 스케줄러 or Swapper)
- 여유 공간을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
- 프로세스에서 메모리를 해제하는 문제
- degree of Multiprogramming을 제어
- 프로세스 상태에 suspended라는 상태가 추가됐다.
스레드(Thread)
- 프로세스 내부에 CPU 사용 단위가 여러 개 분리되어있으면 그 각각이 스레드(thread)
- CPU의 수행 단위(lightweight)
- 메모리 공간은 하나(프로세스는 하나). 프로그램 카운터만 여러 개를 두고 있음. CPU 수행 단위를 여러 개 두고 있는 것.
- 프로세스 하나에서 공유할 수 있는 것은 최대한 공유하고, CPU 수행에 대한 정보(program counter, register, stack)만 별도로 가짐.
스레드의 구성
- program counter
- register set
- stack space
스레드들끼리 공유하는 부분(=task)
- code section
- data section
- OS resources
장점
- Responsiveness(응답성)
- 다중 스레드의 경우, 하나의 서버 스레드가 blocked(waiting) 상태인 동안에도 동일한 태스크 내의 다른 스레드가 running 되어 빠른 처리를 할 수 있음.
- Economy(경제성)
- 프로세스 생성/문맥 교환은 스레드를 생성하고 교환하는 것보다 overhead가 큼.
- 동일한 일을 수행하는 다중 스레드가 협력해 높은 처리율(throughput)과 성능 향상을 얻을 수 있음.
- Resource Sharing(자원 공유)
- 자원을 절약할 수 있음. 똑같은 프로그램을 서로 다른 프로세스로 나누는 것 보다 절약됨.
- code, data, OS resources를 공유함.
- Utilization of MP(Multi Processor) Architectures
- 병렬성을 높일 수 있음(CPU가 여러개일때만 장점).
- 각 스레드가 다른 프로세서에서 병렬적으로 수행될 수 있음.
구현 방법
- kernel -> Kernel Thread
- 스레드가 여러 개 있다는 것을 OS가 알고 있음.
- 스레드 간 옮겨다니는 것도 OS에 의해 진행됨.
- library -> User Thread
- 프로그램 스스로 스레드 관리함. OS는 모르고 있음.
- real-time Thread
출처
해당 내용은 KOCW 강의 중 이화여자대학교의 운영체제-반효경 강의의 내용을 정리한 것입니다.
댓글남기기