Process
프로세스의 개념
- Process is a progam in execution
- 프로세스의 문맥(context)
- CPU 수행 상태를 나타내는 하드웨어 문맥
- Program Counter
- 각종 register
- 프로세스의 주소 공간
- 프로세스 관련 커널 자료 구조
- PCB(Process Control Block)
- Kernel stack
프로세스의 상태
- 프로세스는 지속적으로 상태가 변경되며 수행됨
- Running: CPU를 할당 받아 명령을 수행 중인 상태
- Ready: 메모리 등 다른 조건을 모두 만족하고 CPU를 기다리는 상태
- Blocked(wait, sleep)
- CPU를 주어도 당장 명령을 수행할 수 없는 상태
- 프로세스 자신이 요청한 Event(ex: Disk I/O)가 즉시 만족되지 않아, 이를 기다리는 상태
- New: 프로세스가 생성 중인 상태
- Terminated: 수행이 끝난 상태
- CPU를 사용하지 못하고 있는 이유는 위와 같이 다양함
- Ready, Block Queue 관련 정보는 Kernel의 Data 영역에 저장됨
PCB(Process Control Block)
- 운영체제가 각 프로세스를 관리하기 위해 프로세스 당 유지하는 정보로 구조체로 유지
- (1) OS가 관리상 사용하는 정보
- Process state, PID
- scheduling information, priority..
- (2) CPU 수행 관련 하드웨어 값
- (3) 메모리 관련
- (4) 파일 관련
Context Switch
- CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
- CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
- System call이나 Interrupt 발생 시 반드시 문맥 교환이 일어나는 것은 아님
프로세스를 스케줄링하기 위한 Queue
- Job Queue: 현재 시스템 내에 있는 모든 프로세스의 집합
- Ready Queue: 현재 메모리 내에 있으면서 CPU를 할당 받아 실행되기를 기다리는 프로세스의 집합
- Device Queues: I/O device의 처리를 기다리는 프로세스의 집합
- 프로세스들은 위의 Queue들을 오가며 수행됨
Scheduler
-
Long-term scheduler(Job scheduler)
- 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
- 프로세스에 memory 및 각종 자원을 주는 문제
-
degree of Multiprogramming을 제어
- 메모리에 올라가 있는 프로세스의 수
- 메모리에 너무 적은 혹은 너무 많은 프로세스가 있지 않도록 제어
- time sharing system에는 보통 장기 스케줄러가 없음
- 무조건 ready queue로 보냄!
-
Swapper가 degree of Multiprogramming을 제어
-
Short-term scheduler(CPU scheduler)
- 어떤 프로세스를 다음에 running 시킬지 결정
- 프로세스에게 CPU를 주는 문제
- millisecond 단위로 충분히 빨라야 함
-
Medium-term scheduler(Swapper)
- 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
- 프로세스에게서 memory를 빼앗는 문제
-
degree of Multiprogramming을 제어
- Swapper로 인해 추가되는 프로세스 상태 Suspended(stopped)
- 외부적 이유로 프로세스의 수행이 정지된 상태
- 프로세스는 통째로 디스크에 Swap out 됨
- 외부에서 resume해 주어야 다시 Active
- cf. 메모리에 너무 적은 프로세스만 올라가 있으면 왜 안좋은가?
- 모든 프로세스들이 device queue에 들어가게 되면 CPU는 노는 상태가 되버림
Thread
- A Thread(lightweight process) is a basic unit of CPU utilization
- Thread의 구성(독립적으로 가지는 요소)
- Program counter
- Register set
- Stack space
- Thread가 동료 Thread와 공유하는 부분(Task)
- Code section
- Data section
- OS resources
- 즉, 공유할 수 있는 것은 최대한 공유하고, CPU 수행단위를 여러 개를 두는
- Thread의 종류
- kernel에 의해 지원되는 Kernel Threads
- Thread가 여러 개 있다는 것을 kernel이 알고 있음
- 따라서, context switch가 매우 빠름
- library를 통해 지원되는 User Threads
- Thread가 여러 개 있다는 것을 kernel은 모르고 사용자 프로그램이 관리해야 함
- 이 외에도 Realtime thread도 존재
Thread의 장점
-
응답성: 다중 Thread로 구성된 Task 구조에서는 하나의 서버 Thread가 Blocked(wait) 상태인 동안에도 동일한 Task 내의 다른 Thread가 Running이 되어 빠른 처리를 할 수 있음
- ex) 웹 브라우저 프로세스를 구성하는 하나의 Thread가 이미지를 불러오는 동안에, 또 다른 Thread가 이미 읽어온 HTML 문서와 같은 것들을 미리 화면에 제공..
-
Resource Sharing: n개의 Threads는 하나의 프로세스의 binary code, data, resource를 공유
-
Economy: 동일한 일을 수행하는 다중 Thread가 협력하여 높은 Throughput과 성능 향상을 얻을 수 있음
- thread 간 문맥 교환도 같은 process 내에서 일어나기 때문에 빠름
- ex) Word 프로그램에서 여러 파일을 띄워놓을 때, 각각의 파일을 프로세스를 생성하여 수행하도록 하는 것이 아니라 Thread를 생성하여 성능 향상
-
Utilization of Multi Processor Architectures: 각각의 Thread는 여러 개의 프로세서에서 병렬적으로 running되어 병렬성을 높일 수 있음