프로세스 스케줄링(Process Scheduling)은 여러 프로세스가 CPU를 공정하게 사용할 수 있도록 실행 순서를 결정하는 운영체제의 핵심 기능이다. 이를 통해 CPU를 포함한 시스템 자원의 효율적인 사용과 빠른 응답을 제공하는 역할을 한다.
프로세스의 버스트 (Process Burst)
프로세스가 실행될 때, 주로 두 가지 유형의 작업 주기를 거치게 되며, 각각의 주기에서 다른 종류의 자원을 사용한다. 이 두 가지 주기는 CPU Burst 와 I/O Burst 로 나누어 진다.
- CPU Burst
프로세스가 CPU를 가지고 명령을 수행하는 시간
프로세스가 I/O 작업을 한번 수행한 후 다음 I/O 작업을 수행하기까지 CPU를 가지고 명령을 수행하는 일련의 작업 - I/O Burst
프로세스가 I/O 장치와 상호작용 하는 시간
프로세스가 I/O 작업 요청을 수행한 후 다시 CPU Burst로 돌아가기까지 수행하는 일련의 작업
프로세스는 일반적으로 CPU 버스트와 I/O 버스트를 번갈아 가며 실행된다. 또한, 각 프로세스마다 CPU Burst와 I/O Burst가 차지하는 비율이 균일하지 않기 때문에 프로세스 버스트 특성을 고려하여 적절한 자원을 할당해야 한다.
프로세스 버스트 특성을 고려하여 적절한 자원을 할당해야 하는 이유
- 자원 효율성 극대화: 각 프로세스는 CPU 버스트와 I/O 버스트에서 요구하는 자원의 양과 패턴이 다릅니다. CPU 버스트가 긴 프로세스는 CPU 자원을 많이 필요로 하는 반면, I/O 버스트가 긴 프로세스는 주로 I/O 장치에 대기 시간을 보냅니다. 프로세스 버스트 특성을 고려하지 않고 자원을 할당하면, CPU가 유휴 상태에 있거나 I/O 장치가 과부하 상태에 빠질 수 있어 자원 활용도가 떨어집니다. 따라서, 각 프로세스의 특성에 맞게 자원을 할당하면 시스템의 자원 활용도를 극대화할 수 있습니다.
- 응답 시간 개선: 사용자 경험을 최적화하기 위해 응답 시간이 중요한 대화형 응용 프로그램에서는 프로세스 버스트 특성을 고려하는 것이 필수적입니다. CPU 버스트가 짧은 대화형 프로세스는 빠른 응답을 위해 우선적으로 CPU 자원을 할당받아야 합니다. 반면, I/O 중심의 프로세스는 I/O 작업이 완료될 때까지 대기하므로, 그 사이에 다른 프로세스가 CPU 자원을 사용할 수 있도록 스케줄링할 수 있습니다.
- 공정한 자원 배분: 다양한 프로세스가 시스템 자원을 공유하는 환경에서 공정한 자원 배분은 중요한 문제입니다. 프로세스 버스트 특성을 무시하면, 특정 유형의 프로세스가 과도하게 자원을 점유하거나 불공정한 대기 시간이 발생할 수 있습니다. 적절한 스케줄링은 이러한 문제를 방지하고 모든 프로세스가 공정하게 자원을 사용할 수 있도록 보장합니다.
프로세스 스케줄링의 필요성
현대의 범용 컴퓨터 시스템에서 CPU는 독립적으로 프로세스를 처리할 수 있는 코어(Core)가 여러 개 포함되어 있어 하드웨어적으로 멀티 프로세싱을 지원하며, 운영체제는 시분할 시스템을 지원하여 여러 프로세스가 동시에 시스템을 사용할 수 있게 한다.
[멀티 프로세싱 환경에서의 필요성]
멀티 프로세싱이란 여러 개의 프로세서 또는 CPU 코어에서 동시에 여러 프로세스를 처리할 수 있는 하드웨어적 환경을 말한다. 이는 여러 프로세서가 작업을 병렬로 수행할 수 있도록 하는 기술이다.
- 자원 효율성 극대화
멀티프로세싱 시스템에서는 여러 CPU 코어나 프로세서가 동시에 작동하기 때문에, 작업을 적절히 배분하는 것이 중요하다. 프로세스 스케줄링은 프로세스의 특성에 따라 작업을 분배하여 모든 프로세서가 고르게 사용되도록 하며, 이를 통해 시스템의 처리 능력을 최대화하고 성능을 개선한다. - 응답 시간 최적화
멀티프로세싱 환경에서는 다수의 프로세스가 동시에 실행될 수 있으므로, 중요한 작업이나 우선순위가 높은 프로세스가 신속하게 처리되도록 하는 것이 중요하다. 프로세스 스케줄링을 통해 중요한 작업의 응답 시간을 줄이고, 전체 시스템의 반응성을 향상시킨다.
[시분할 시스템 환경에서의 필요성]
시분할 시스템이란 짧은 시간 간격으로 CPU와 같은 자원을 사용자의 프로세스 간에 빠르게 전환하여 여러 프로세스가 마치 동시에 실행되는 것 처럼 보이게하는 소프트웨어적 환경(= 운영체제)을 말한다.
- 공정한 자원 분배
시분할 시스템 에서는 각 프로세스에게 CPU 자원을 정해진 시간(짧은 시간) 동안 할당하고, 프로세스 스케줄링을 통해 각 프로세스가 공정한 양의 CPU 시간을 받을 수 있도록 조정한다. 이를 통해 각 프로세스가 마치 동시에 실행되는 것 처럼 느끼게 한다. - 효율적인 대화형 처리
시분할 시스템은 주로 대화형 작업을 처리하는 데 사용되며, 각 작업에 대한 응답 시간을 최소한으로 줄이는 것을 목표로 한다. 프로세스 스케줄링을 통해 프로세스 간의 전환을 효율적으로 관리하며, 시스템 자원을 최적으로 분배한다.
프로세스 제어 블록 (PCB, Process Control Block)
프로세스 제어 블록(PCB, Process Control Block)은 프로세스를 관리하는 데 필요한 모든 상태 정보(실행 정보)를 담고 있는 커널 내의 자료구조(구조체)로, 해당 프로세스가 생성될 때 함께 생성되며 종료 시 삭제된다. 프로세스 제어 블록에 저장되는 주요 정보는 아래와 같다.
| 운영체제가 프로세스를 관리하는데 사용하는 정보 |
프로세스 식별자 (PID, Process ID) |
각 프로세스의 고유 식별자 |
| 프로세스 상태 (Process State) |
프로세스의 현재 상태 | |
| 프로세서 스케줄링 정보 (Processor Scheduling Info) |
프로세스 스케줄링을 위한 정보 CPU 점유 시간(CPU Time), 스케줄링 큐 위치, 우선 순위 등 |
|
| 프로세스 실행 관련 하드웨어 값 정보 |
프로그램 카운터 (Program Counter) |
다음에 실행할 명령어의 주소 |
| 레지스터 정보 (Register Info) |
현재 실행 중인 프로세스의 레지스터 값 | |
| 메모리 관련 정보 | 메모리 관리 정보 (Memory Management Info) |
프로세스에 할당된 메모리 영역과 관련된 정보 |
문맥 교환 (Context Switch)
문맥 교환(Context Switch)은 시스템 호출이나 인터럽트에 의해 CPU의 제어가 한 프로세스에서 다른 프로세스로 전환될 때 발생하는, 프로세스의 상태와 관련 정보가 변경되는 과정이다.
[문맥 교환 과정]
문맥 교환 과정은 크게 3단계로 이루어 진다.
- 현재 실행 중인 프로세스의 상태 정보를 PCB(Process Contrl Block)에 저장
- 다음 실행할 프로세스의 상태 정보를 PCB에서 복원
- CPU 제어권을 다음 프로세스로 이양

- 세부 과정
1) CPU가 Process P1을 실행한다.
2) 인터럽트 발생 시, Process P1의 상태를 PCB1에 저장한다.
3) 프로세스 스케줄러가 다음 실행할 프로세스를 선택한다.
4) 선택된 Process P2의 상태를 PCB2에서 로드한다.
5) (반복) 인터럽트 발생 시, Process P2의 상태를 PCB2에서 로드한다.
6) 프로세스 스케줄러가 다음 실행할 프로세스를 선택한다.
7) 선택된 Process P1의 상태를 PCB1에서 로드한다.
8) PCB1에 저장된 작업 진행도에서 다시 작업을 수행한다.
프로세스 스케줄링 큐
내용을 적어주세요.
'OS' 카테고리의 다른 글
| [OS] 프로세스 (Process) (0) | 2024.07.26 |
|---|---|
| [OS] 메모리 관리 (0) | 2024.01.13 |
| [OS] 5. 상호배제 (Mutual Exclusion) - 작성중 (0) | 2024.01.13 |
| [OS] 3. 프로세스 (Process) (0) | 2024.01.13 |
| [OS] 컴퓨터 시스템의 동작 (0) | 2024.01.13 |