CPU는 각 프로세스가 누군지 알아야 관리 및 실행을 할 수 있다. 이때 프로세스들의 특징을 갖고 있는 것이 바로 Process Metadata
이다.
🫧Process Metadata
- Process ID : 프로세스의 고유 ID
- Process State : 준비(Ready), 대기(Wait) 등 CPU에 대한 소유권을 얻은 이후의 상태 - 실행(Running)상태의 프로세스 정보는 CPU 내부, 즉 레지스터에서 저장한다
- Program Counter : 프로세스를 위해 실행될 다음 명령어의 주소
- Register : Accumulator, General Register 등을 포함하는 CPU Register의 값
- CPU Scheduling Information : 우선순위, 최종 실행시간, CPU 점유시간 등
- Memory management information : 해당 프로세스의 주소 공간 정보
- I/O Status : 프로세스에 할당된 입출력 장치 목록, 열린 파일 목록 등
이 메타데이터는 프로세스가 생성되면 PCB(Process Control Block)
이라는 곳에 저장된다.
프로그램이 실행 ➡ 프로세스 주소 공간(stack,data,code) 생성 ➡ 이 프로세스의 메타데이터를 PCB에 저장
앞서 배울 Context Switching이 일어났을 때, 현재 실행 중인 프로세스의 정보를 PCB에 저장하여, 앞으로 다시 실행할 때 PCB를 통해 메타데이터를 읽어 실행하기 위함이다.
프로세스의 생성과 소멸은 빈번하게 일어나기 때문에, Linked List방식으로 관리된다. PCB가 생성되면 PCB 연결 리스트의 Head에 추가되고, 소멸되면 삭제된다.
PCB는 일반 사용자가 접근하지 못하도록 커널 스택의 가장 앞부분에서 관리된다. 커널 스택은 커널 권한을 가진 운영체제만이 접근 가능하다.
현재 실행중인 프로세스에 할당된 시간이 끝나거나 Interrupt가 발생하면, Context Switching
이 발생한다. 하나의 CPU에는 하나의 프로세스만 실행이 가능하므로, 현대의 프로그램이 동시에 실행하는 것처럼 보이는 이유는 바로 Context Switching
이 매우 빠른 속도로 진행되기 때문이다.
위 그림은 Context Switching
의 동작 과정의 예시이다.
1. Process P1이 실행되는 도중 인터럽트가 발생하거나 CPU 사용 허가 시간이 지난다.
2. PCB1에 P1의 정보를 저장하고 PCB2의 상태를 불러온다.
3. Process P2를 실행한다.
4. P2가 실행되는 도중 인터럽트가 발생하거나 CPU 사용 허가 시간이 지난다.
5. PCB2에 P2의 정보를 저장하고 PCB1의 상태를 불러온다.
6. Process P1을 실행한다.
Context Switching
이 발생하는 과정에서 다음 프로세스가 실행되기 전까지의 CPU의 idle시간이 발생하는데, 이를 오버헤드라고 한다.
🫧
Context Switching
이 필요한 이유
CPU는 한 번에 하나의 프로세스만 수행할 수 있다.
하지만, 실생활에서 우리는 여러 개의 프로세스를 동시에 수행하려고 한다. (ex: 노래 들으며 인터넷 하기)
따라서 CPU는 동시에 수행하는 처럼 보이게 하기 위해서 여러 개의 프로세스를 번갈아가며 수행한다.
이렇게 CPU가 프로세스를 바꿔가며 실행하기 위해서Context Switching
이 필요하게 되었습니다.
이제는 본격적인 CPU 스케줄링에 대해 알아보겠다.
CPU가 노는 상태가 될때마다, 운영체제는 Ready Queue
에 있는 프로세스 중 하나를 선택해 실행해야 한다. 이때의 선택 절차는 CPU Scheduler
에 의해 수행된다.
이것은 면접 질문에 나온다고도 들어서, 한번 알아보고 가자
프로세스의 상태
Interrupt
, I/O or Event Completion
, I/O or Event Wait
, Exit
I/O or Event Wait
, Exit
- 프로세스가 실행 상태에서 대기 상태로 전환 (I/O 발생) :
I/O or Event Wait
- 프로세스가 실행 상태에서 준비 완료 상태로 전환 (인터럽트 발생) :
Interrupt
- 프로세스가 대기 상태에서 준비 완료 상태로 전환 (I/O 종료) :
I/O or Event Completion
- 준비 상태에 있는 프로세스 중 하나를 실행 :
Scheduler Dispatch
- 프로세스 종료 :
Exit
Priority Scheduling
Starvation
발생할 수 있음Aging
방법으로 오랫동안 대기하는 프로세스들의 운선순위를 점진적으로 증가하여 Starvation 해결 가능Round Robin Scheduling
Time Quantum
or Time Slice
라는 실행의 최소 단위 시간 정의Context Switching
잦아져서 오버헤드 증가Multilevel-Queue(다단계 큐) Scheduling
Starvation
을 방지하기 위해 Time Quantam
을 설정Time Quantum
할당. 우선순위가 낮은 큐는 큰 Time Quantum
할당Multilevel-Feedback-Queue (다단계 피드백 큐) Scheduling
Aging
통해 Starvation
예방🧷Turnaround Time
실행 시간과 대기 시간을 모두 합한 시간으로 작업이 완료될 때 까지 걸린 시간