프로세스의 생명주기는 운영체제에서 하나의 프로그램이 실행될 때 거치는 일련의 단계를 의미한다.
각 단계에서 프로세스는 특정한 상태에 있으며, 이 상태는 운영체제에 의해 관리됩니다.
1. 생성 상태 - New
프로세스가 처음 생성되는 단계입니다. 사용자가 프로그램을 실행하거나 시스템에서 특정 작업을 위해 프로세스를 생성하면, 운영체제는 이를 위한 프로세스 제어 블록(PCB, Process Control Block)을 생성하고 프로그램 코드를 메모리에 로드합니다.
예시) 사용자가 워드 프로세서를 실행하면, 운영체제는 해당 프로그램의 코드를 메모리에 올리고, 이를 관리하기 위한 PCB를 생성합니다. 이 시점에서 워드 프로세서는 생성 상태에 있습니다.
2. 준비 상태 - Ready
프로세스가 실행될 준비가 완료된 상태입니다. 메모리에 로드되어 있으며, CPU를 할당받기를 기다리고 있습니다. 여러 프로세스가 동시에 준비 상태에 있을 수 있으며, 운영체제의 스케줄러가 어떤 프로세스에 CPU를 할당할지 결정합니다.
예시) 워드 프로세서가 메모리에 로드 되었고, 이제 CPU를 할당받기를 기다리고 있습니다. 이때 워드 프로세서는 준비 상태에 있습니다.
3. 실행 상태 - Running
프로세스가 CPU를 할당받아 실제로 실행 중인 상태입니다. 프로세스의 명령어들이 CPU에서 실행됩니다. 프로세스는 이 상태에서 작업을 수행하며, 일정 시간이 지나면 다른 프로세스에게 CPU를 양보할 수도 있습니다.
예시) 스케줄러가 워드 프로세서에게 CPU를 할당하면, 워드 프로세서는 실행 상태로 전환되고, 사용자가 입력한 텍스트를 화면에 표시하는 등의 작업을 수행합니다.
4. 대기 상태 - Blocked/Waiting
프로세스가 실행 중 특정 사건(예: I/O작업, 파일 접근 등)을 기다리며 일시적으로 중단된 상태입니다. 이 상태에서는 CPU를 사용하지 않으며, 기다리던 사건이 발생하면 다시 준비 상태로 전환됩니다.
예시) 워드 프로세서가 사용자가 요청한 파일을 디스크에서 읽는 동안, 파일이 메모리에 로드될 때까지 기다려야 합니다. 이때 워드 프로세서는 대기 상태에 있습니다.
5. 종료 상태 - Terminated
프로세스의 작업이 모두 완료되어 종료된 상태입니다. 프로세스가 정상적으로 종료되었거나, 오류로 인해 비정상적으로 종료되었을 때 이 상태로 전환됩니다. 운영체제는 종료된 프로세스의 자원을 회수하고, PCB를 삭젝합니다.
예시) 사용자가 워드 프로세서를 종료하면, 프로세스는 종료 상태로 전환되고, 운영체제는 이 프로세스에 할당된 메모리와 기타 자원을 해제합니다.
6. 중단 상태 - Suspended
프로세스가 메모리에서 제거되고, 디스크에 저장된 상태입니다. 시스템 자원을 효율적으로 사용하기 위해 운영체제가 프로세스를 일시적으로 중단할 수 있습니다. 필요할 때 다시 메모리에 로드되어 준비 상태로 돌아갈 수 있습니다.
예시) 시스템이 과부하 상태에 있을 때, 워드 프로세서를 메모리에서 디스크로 옮겨 중단 상태로 만들고, 나중에 다시 활성화할 수 있습니다.
프로세스는 주어진 작업과 시스템의 요구에 따라 각 상태들 사이를 전이할 수 있습니다. 예를 들어 준비 상태에 있던 프로세스가 CPU를 할당받으면 실행 상태로 전이되고, 실행 상태에서 I/O작업을 요청하면 대기 상태로 전이됩니다.
프로세스 스케줄링은 운영체제의 핵심 기능 중 하나로, 여러 프로세스가 CPU를 공유할 수 있도록 스케줄링 알고리즘을 통해 CPU 시간을 각 프로세스에 할당하는 과정입니다. 스케줄러는 어떤 프로세스가 언제, 얼마나 오래 CPU를 사용할지를 결정하는 역할을 한다.
1️⃣ 장기 스케줄러(Long-Term Scheduler, Job Scheduler)
시스템에 어떤 프로세스를 추가할지를 결정합니다. 주로 프로세스를 메모리에 올릴지, 대기 상태로 둘지 결정하는 역할을 합니다. 이 스케줄러는 작업이 시스템에 진입하는 속도와 균형을 유지하는 데 사용됩니다.
2️⃣ 중기 스케줄러(Medium-Term Scheduler)
시스템에서 일시적으로 메모리를 해제하고, 나중에 다시 실행하기 위해 스왑 아웃(Swap Out)하는 프로세스를 결정합니다. 이 스케줄러는 준단된 프로세스를 메모리에서 제거하고, 필요한 시점에 다시 로드합니다.
3️⃣ 단기 스케줄러(Short-Term Scheduler, CPU Scheduler)
어떤 프로세스가 다음에 CPU를 사용할지를 결정합니다. 이 스케줄러는 가장 자주 실행되며, 프로세스들이 CPU를 얻기 위해 경쟁하는 상황에서 가장 중요한 역할을 합니다.
1️⃣ 선입선출(First-Come, First-Served, FCFS)
가장 먼저 도착한 프로세스에게 CPU를 할당합니다. 프로세스가 먼저 도착하면 먼저 처리되며, 도착 순서가 가장 중요합니다.
장점 : 구현이 간단하고 이해하기 쉬움
단점 : 프로세스의 실행 시간이 길면 후속 프로세스들이 오래 기다려야하는 Convoy Effect가 발생할 수 있음
2️⃣ 최단 작업 우선(Shortest Job Next, SJN 또는 Shortest Job First, SJF)
실행 시간이 가장 짧은 프로세스를 우선 실행합니다. 이는 평균 대기 시간을 최소화하는 데 도움이 됩니다.
장점 : 대기 시간 최소화
단점 : 실행 시간이 짧은 프로세스가 계속해서 선택되면 긴 프로세스가 무한정 대기할 수 있는 Starvation 문제가 발생할 수 있음
3️⃣ 우선순위 스케줄링(Priority Scheduling)
각 프로세스에 우선순위를 부여하고, 우선순위가 높은 프로세스에게 CPU를 할당합니다.
장점 : 중요한 작업을 빠르게 처리 가능
단점 : 낮은 우선순위의 프로세스가 계속 대기할 수 있음(Starvation). 이를 해결하기 위해 Again 기법을 사용하여 시간이 지나면 우선순위를 높일 수 있음
4️⃣ 라운드 로빈(Round Robin, RR)
각 프로세스에 동일한 시간 할당(타임 퀀텀)을 주고, 정해진 시간이 지나면 다음 프로세스로 전환합니다. 주로 시분할 시스템에서 사용됩니다.
장점 : 모든 프로세스가 공평하게 CPU를 할당받을 수 있음
단점 : 타임 퀀텀이 너무 크면 응답 시간이 길어지고, 너무 작으면 컨텍스트 스위칭 오버헤드가 증가함
5️⃣ 다단계 큐 스케줄링(Multilevel Queue Scheduling)
프로세스들을 우선순위에 따라 여러 개의 큐로 나누고, 각 큐에 대해 다른 스케줄링 알고리즘을 적용합니다. 예를 들어, 시스템 프로세스는 높은 우선순위 큐에서, 사용자 인터페이스 프로세스는 중간 우선순위 큐에서, 배치 작업은 낮은 우선순위 큐에서 실행될 수 있습니다.
장점 : 다양한 프로세스 유형을 효과적으로 관리 가능
단점 : 큐 사이의 적절한 균형을 유지하기 어려울 수 있음
6️⃣ 다단계 피드백 큐 스케줄링(Multilevel Feedback Queue Scheduling)
다단계 큐 스케줄링의 변형으로, 프로세스가 CPU를 사용할 때마다 다른 큐로 이동할 수 있습니다. 프로세스가 더 낮은 우선순위 큐로 이동하거나, 자주 실행되지 않으면 더 높은 우선순위 큐로 올라갈 수 있습니다.
장점: 동적 우선순위 조정이 가능하며 공정성을 유지함
단점 : 구현이 복잡하며, 잘못 설정하면 특정 프로세스가 너무 자주 전환될 수 있음
스케줄링은 운영체제의 성능과 사용자 경험에 큰 영향을 미칩니다. 잘 설계된 스케줄링 알고리즘은 시스템 자원을 효과적으로 사용하면서도 공정하게 프로세스에 할당할 수 있습니다. 또한, 다양한 시스템 요구사항에 따라 다른 스케줄링 알고리즘이 사용되며, 이를 통해 시스템의 목적과 성능을 최적화 할 수 있습니다.