프로세스의 상태는 프로세스가 실행되는 동안의 단계를 나타낸다.
여러 프로세스가 동시에 실행될 때, 상태 관리를 통해 각 프로세스가 사용하는 자원과 상태에 따라 적절한 처리를 할 수 있다.
운영체제가 효율적으로 CPU 자원을 관리하고, 여러 프로세스를 처리할 수 있도록 하는 중요한 개념이다.
일반적으로 5가지 주요 상태로 나눠지고, 특별한 경우로 휴식과 보류 상태가 추가될 수 있다.
프로세스가 메모리를 할당받고 *PCB가 생성되어 실행 준비를 완료한 상태이다.
생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태이다.
프로세스의 순서는 여러 개의 준비 큐(Ready Queue)로 관리되며, 준비 큐의 종류는 *스케줄링 정책에 따라 결정된다.
dispatch(PID): 스케줄러가 준비 큐에서 실행할 프로세스를 선택하고, 해당 프로세스를 CPU에 할당하는 명령어CPU 스케줄링
CPU를 사용할 프로세스를 선택하는 작업이다. CPU의 사용률을 극대화하고, 프로세스 간 자원을 공평하게 배분하며, 시스템 성능을 최적화하는 과정이다.
CPU에서 프로세스가 실행 중인 상태로, *CPU의 개수 만큼의 프로세스가 실행 상태가 된다.
timeout(PID): 주어진 시간(time slice)을 다 사용하고도 작업이 끝나지 않았다면 ready 상태로 돌아가 다음 차례를 기다림exit(PID): running 상태 동안 작업이 완료되면 프로세스가 정상 종료됨block(PID): running 상태의 프로세스가 입출력을 요청하면 CPU는 입출력 관리자에게 입출력을 요청하고, 해당 프로세스를 waiting 상태로 옮김 -> dispatch입출력 요청에 의해 해당 I/O 작업이 끝날 때까지 대기하는 상태이다.
입출력 종료를 running 상태로 기다리면 효율성이 떨어지기 때문에, 입출력 장치 별로 마련된 queue에서 기다린다.
waiting 상태로 옮기고 CPU 스케줄러가 waiting 상태에 있는 프로세스 중 하나를 가져다 running 상태로 만든다.
wakeup(PID): 입출력이 완료되면 인터럽트가 발생하고, waiting 상태에 있는 여러 프로세스 중 해당 인터럽트로 깨어날 프로세스를 찾아서 해당 프로세스의 PCB를 ready 상태로 옮김프로세스가 정상 및 강제 종료되어 자신이 가지고 있던 메모리를 반환하고 PCB가 삭제된 상태이다.
exit(): 프로세스 종료Core Dump
오류나 *abort를 만나면 디버깅을 위해 강제 종료 직전의 메모리 상태를 저장 장치로 옮기는데, 그 메모리 상태를 기록한 파일을 말한다.abort
다른 프로세스에 의해 비정상적으로 종료되는 강제 종료.
프로세스가 작업을 일시적으로 쉬고 있는 상태이다. sleep()을 호출하는 등 특정 조건이 충족될 때까지 실행을 잠시 멈춘다.
메모리의 데이터와 PCB가 유지되기 때문에 프로세스는 멈춘 지점에서부터 재시작할 수 있다.
프로세스가 메모리에서 잠시 쫓겨난 상태로, 다음과 같은 경우에 보류 상태가 된다.
쫓겨난 프로세스는 swap area에 상태를 구분하여 보관되며, 재시작하면 원래 활성 상태로 들어간다.
단, 보류 대기 상태에서 입출력이 완료됐을 때는 활성 상태가 아닌 보류 준비 상태로 옮겨진다.