프로세스 생명주기는 프로세스의 상태 변화 과정을 나타냅니다. 프로세스는 신규 상태에서 시작해 준비(Ready), 수행(Running), 대기(Waiting), 종료(Terminated) 등 여러 단계를 거칩니다. 상태 변화는 스케줄러에 의해 이루어지며, 각 상태는 CPU나 I/O 작업, 메모리의 사용 여부에 따라 결정됩니다.
- 신규(New): 프로세스가 막 생성되어 메모리에 올라간 상태.
- 메모리에 올라온 후, 프로세스는 준비 상태로 넘어가지만 아직 CPU에서 실행되지 않습니다.
- 준비(Ready): 프로세스가 실행될 준비를 마친 상태로, CPU가 언제든지 이 프로세스를 처리할 수 있는 상태입니다.
- 프로세스가 신규 상태에서 준비 상태로 넘어갈 수 있습니다. 이는 프로세스가 메모리로 올라와 기초 준비 작업(변수 초기화 등)을 마친 후 가능합니다.
- 대기 중이던 프로세스가 I/O 작업을 완료하고 다시 준비 상태로 돌아올 수 있습니다.
- 실행 중인 프로세스가 중단되어 준비 상태로 돌아갈 수도 있습니다.
- 수행(Running): 프로세스가 CPU를 할당받아 실제로 실행되는 상태입니다.
- 이 상태에서는 CPU가 프로세스의 명령어를 처리하고 있습니다.
- 프로세스가 준비 상태에서 스케줄러를 통해 CPU를 할당받으면 수행 상태로 진입합니다.
- 수행 상태에서 다른 상태로의 전환은 다음과 같습니다:
- 중단(Interrupted): CPU 과부하나 스케줄링 정책에 의해 중단되어 다시 준비 상태로 돌아갑니다.
- 대기(Waiting): I/O나 이벤트 대기를 위해 일시 중지되어 대기 상태로 전환됩니다.
- 종료(Terminated): 작업이 완료되면 프로세스는 종료됩니다.
- 대기(Waiting): 프로세스가 I/O 작업이나 특정 이벤트를 기다리는 상태입니다.
- 예를 들어, 프로세스가 디스크에서 파일을 읽거나 네트워크 데이터를 기다리는 동안 CPU는 다른 프로세스를 처리하고, 이 프로세스는 대기 상태에 머무릅니다.
- 대기 상태가 끝나면 다시 준비 상태로 돌아가며, CPU가 사용할 수 있을 때 수행 상태로 전환됩니다.
- 종료(Terminated): 프로세스가 모든 작업을 마치고 종료된 상태입니다.
- 이 상태에서는 프로세스가 사용하던 메모리와 자원이 운영체제에 의해 회수됩니다.
대기 큐 (Waiting Queue)
대기 큐는 프로세스들이 CPU나 특정 자원을 기다리는 상태에서 관리되는 큐입니다. 주요 대기 큐는 다음과 같습니다:
- Job Queue: 메모리에 올라가기 전에 HDD에서 대기 중인 프로세스들이 모여 있는 큐입니다. 메모리가 가득 찼거나 CPU가 다른 작업을 처리 중일 때 HDD에서 기다리게 됩니다.
- Ready Queue: 메모리에 올라왔으나 CPU가 처리 중이기 때문에 실행되지 못한 프로세스들이 모여 있는 큐입니다.
- Device Queue: I/O 장치를 기다리는 프로세스들이 모여 있는 큐로, 각각의 I/O 장치마다 큐가 따로 있습니다(프린터, 키보드, 디스크 등).
Terminated 상태는 프로세스가 종료되면 더 이상 대기할 필요가 없기 때문에 대기 큐가 없습니다.
스케줄링(Scheduling)
스케줄링은 CPU나 I/O 등의 자원을 여러 프로세스가 적절히 나누어 사용할 수 있게 해주는 과정입니다. 주요 스케줄러에는 다음 세 가지가 있습니다:
- Job 스케줄러 (Long-Term Scheduler): Job Queue에 있는 프로세스들을 어떤 순서로 메모리에 올릴지를 결정합니다. 이 스케줄링은 자주 일어나지 않으며, 프로그램이 새로 시작되거나 메모리가 가득 찼을 때만 발생합니다.
- CPU 스케줄러 (Short-Term Scheduler): Ready Queue에 있는 프로세스들을 어떤 순서로 CPU를 할당받을지 결정합니다. 시공유 시스템에서는 1초에도 수십 번에서 수백 번 발생하는 빠른 스케줄링이 필요합니다.
- Device 스케줄러: I/O 장치나 보조 기억 장치들을 사용할 프로세스의 순서를 결정합니다. 이는 각 장치별로 다르게 적용됩니다(프린터, 디스크, 네트워크 등)
Swapping (주-보조 교환)
Swapping은 여러 사용자가 메모리를 공유하는 시스템에서 오래 사용되지 않는 프로세스를 임시로 HDD로 내리고 다른 프로세스를 위해 메모리를 확보하는 과정입니다. 이 과정에는 두 가지가 포함됩니다
- Swap Out: 메모리에서 HDD로 프로세스를 이동시키는 작업.
- Swap In: HDD에 있던 프로세스를 다시 메모리로 불러오는 작업.
Swapping을 관리하는 스케줄러는 Midium-Term Scheduler라고 부르며, 이는 CPU 스케줄러보다 적게, Job 스케줄러보다는 자주 동작합니다.
문맥 교환 (Context Switching)
문맥 교환은 실행 중이던 프로세스가 중단되고, 새로운 프로세스가 실행될 때 프로세스 상태를 저장하고 복구하는 과정입니다. 운영체제는 프로세스 A를 중단하고 프로세스 B를 실행할 때, A의 작업 상태(PC, 레지스터 등)를 저장한 후, B의 상태를 복구합니다. Dispatcher는 이러한 저장 및 복구 작업을 담당합니다.
문맥 교환은 운영체제가 CPU 자원을 효율적으로 사용하게 만들어 여러 프로세스가 동시에 실행되는 것처럼 보이게 해주는 중요한 기술입니다.