코학다식
[OS] 프로세스와 프로세스 스케줄링 본문
Operating System
charter 3, Processes (1)
Process: 프로세스란 무엇일까?
-
실행 중인 프로그램을 말한다.
- 프로그램은 passive entity
- 프로세스는 프로그램 카운터가 동작하는 active entitiy
-
프로그램은 실행 가능한 파일이 메모리에 로드되었을 때 프로세스가 된다.
-
운영체제는 다양한 프로그램을 실행한다.
- Batch system - jobs
- Time-shared systems - tasks(interactive)
-
프로세스는 코드 (또는 텍스) 섹션, 데이터 섹션, 스택(stack)과 힙 섹션, 그리고 프로그램 카운터를 포함한다.
- 프로그램 카운터는 다음에 실행될 명령의 위치를 저장하고 있다.
-
실행 가능한 파일이 메모리에 로드되면 다음과 같다.
- 스택에는 함수의 매개변수, 리턴 주소, 지역 변수와 같은 일시적인 데이터들이 포함된다.
- 힙에는 프로세스 런타임 동안 동적으로 할당된 메모리가 포함된다.
- 데이터 영역에는 전역 변수가 초기화 여부에 따라 나누어져 포함된다.
프로세스 상태(Process State)
- 한 사용자가 하나의 프로그램을 실행하는 경우에는 프로세스의 상태가 나누어질 필요가 없다. 프로그램이 끝나고 새로운 프로그램을 실행하면 되기 때문이다.
- 하지만 다양한 사용자가 많은 프로세스를 실행한다고 생각하면, 하나의 프로세스가 끝나고 새로운 프로그램을 실행해 새 프로세스를 생성하는 것은 효율이 떨어질 것이다.
- 이에 현대의 운영체제들은 한 프로세스가 실행될 때 다른 프로세스는 CPU에 할당되기까지 대기하거나, I/O 작업을 기다리는 등으로 상태를 나눈다.
- 프로세스가 실행되면 상태는 변화한다.
- 운영체제마다 상태의 종류에는 차이가 있다. 하지만 기본적으로 다음의 다섯 가지 상태가 존재한다.
- new: 프로세스가 생성된다.
- ready: 프로세스가 메모리에 적재되어 CPU에 할당되기를 기다린다. 스케줄링(scheduling)을 통해 한 개의 프로세스가 선택되고 실행되는 것을 scheduler dispatch라고 한다.
- running: 명령이 수행된다.
- waiting: 프로세스가 어떤 이벤트의 발생을 기다린다. (I/O 등)
- terminate: 프로세스가 실행을 끝낸다.
Process Control Block(PCB)
- PCB는 각 프로세스에 관계된 모든 정보(Process context)를 저장한다.
- 프로세스당 1개씩 존재한다. 즉, 1:1 관계이다.
- 메모리에 존재한다.
- 프로세스 상태, 프로세스 번호, 프로그램 카운터, CPU 레지스터, CPU 스케줄링 정보, 메모리 관리 정보, Accounting 정보, I/O 상태 정보를 저장한다.
- 다른 프로세스가 스케줄링 되는 시점에 최신의 정보로 업데이트된다.
- Process Control Block in Linux
- 이 구조체의 노드들은 doubly linked list를 이룬다.
current
라는 포인터는 현재 running 상태인 PCB를 가리킨다.
프로세스 스케줄링(Process Scheduling)의 개념
- 멀티프로그래밍(멀티태스킹)의 목표는 CPU의 효율성을 극대화하기 위해 항상 어떤 프로세스가 돌아가게 하는 것이다.
- time-sharing의 목표는 CPU가 프로세스를 아주 자주 변경하면서 사용자들이 각각의 프로그램이 실행되는 동안 상호 작용할 수 있게 하는 것이다.
- uni-processor 시스템은 하나의 실행 중인 프로세스만 가질 수 있다.
- 하나 이상의 프로세스가 존재하면 실행 중인 프로세스 외의 나머지 프로세스는 CPU가 작업을 마치고 다시 스케줄링을 할 때까지 기다려야 한다.
- 이는 프로세스 스케줄링을 필요로 한다.
Process Scheduling Queues
- 스케줄링은 큐(queue)들 사이에서 PCB의 위치를 바꾸는 것과 같다.
- 프로세스는 여러 큐들 사이를 이동한다.
- PCB들이 연결되어 큐를 이룬다.
- Job queue: 시스템 상의 모든 프로세스의 집합(new 상태의 프로세스)
- Ready queue: 메모리에 적재되어 실행을 기다리는 모든 프로세스의 집합
- Device queues(I/O queue): I/O 디바이스들을 기다리는 모든 프로세스의 집합(읽기 등이 끝날 때까지 기다린다.)
스케줄러(Schedulers)
-
Long-term 스케줄러 (또는 job 스케줄러): 어떤 프로세스가 ready queue로 이동되어야 하는지 결정한다. 몇 분 단위로 자주 일어나지 않는다. 느릴 수 있다.
-
Short-term 스케줄러 (또는 CPU 스케줄러): 어떤 프로세스가 다음에 실행되고 CPU에 할당되어야 하는지 결정한다. millisecond 단위로 아주 자주 일어난다. 빨라야 한다.
-
프로세스는 다음 두 가지 중 하나이다.
-
I/O bound 프로세스: 계산보다 I/O 하는 데에 시간을 더 많이 소요하며 많은 짧은 CPU burst를 가진다.
CPU burst란 프로세스가 CPU에서 실행되고 있을 때를 말한다. I/O burst는 CPU가 다음 명령을 위해 I/O를 기다리고 있는 때를 말한다.
-
- CPU-bound: 계산에 더 많은 시간을 소요한다. 수가 적고 긴 CPU burst를 가진다.
-
long-term 스케줄러는 degree of multiprogramming을 제어한다.
- degree of multiprogramming이란 메인 메모리에 적재된 프로세스의 수를 의미한다.
- I/O bound 프로세스가 많이 생성된 경우, I/O 작업에는 오랜 시간이 소요되므로 CPU 사용이 효율적이지 못하게 된다.
Medium-term Scheduler
- 현대의 많은 운영체제들은 medium-term 스케줄러를 사용한다.
- 이 스케줄러의 핵심 아이디어는 프로세스를 메모리에서 삭제하고 시간이 지난 후에 다시 메모리에 적재하여 실행을 계속하는 게 때때로 이득일 수 있다는 것이다.
- 메모리가 부족한 경우 디스크에 PCB를 쓰고 가져온다. (이는 시간이 소요된다.)
- 그래서 컴퓨터가 느리게 느껴질 때, 많은 경우는 CPU를 바꾸는 것보다 메모리의 크기를 키우거나 빠른 디스크(SSD 등)를 사용하는 게 효과가 좋다.
Context Switch
- CPU가 다른 프로세스로 변경할 때, 시스템은 바꾸기 이전 프로세스의 상태를 저장하고 새로운 프로세스에 저장된 상태를 로드해야 한다. 이 일은 Context switch로 알려져 있다.
- 이는 스케줄링의 핵심이라고 할 수 있다.
- 프로세스의 context-CPU 레지스터의 값, 프로세스 상태, 메모리 관리 정보 등... 위의 PCB 설명과 사진을 다시 한 번 보자-는 PCB에 쓰여 있다.
- context switch 시간은 오버헤드가 크다. 시스템은 변경하는 동안 다른 일을 할 수 없다.
- 변경 속도는 기계마다 다르다. 즉, 시간은 하드웨어에 달려 있다.
'Fundamentals > OS' 카테고리의 다른 글
[OS] 협력하는 프로세스들 (0) | 2020.09.01 |
---|---|
[OS] 프로세스 생성과 종료 (0) | 2019.09.26 |
[OS] Boot, 운영체제의 구조, VM (0) | 2019.09.19 |
[OS] System Call (0) | 2019.09.17 |
[OS] 운영체제의 구조와 운영체제 보호를 위한 작업들 (0) | 2019.09.10 |