프로세스는 하나의 작업 단위이다. 사용자가 마우스를 더블 클릭하여 프로그램을 실행하면 프로그램은 프로세스가 된다.
프로그램은 저장장치에 저장된 정적인 상태이고, 프로세스는 메모리에 올라온 동적인 상태이다.
프로그램이 프로세스로 전환될 때 운영체제는 프로그램을 메모리의 적당한 위치로 가져오고 프로세스 제어 블록(PCB) 을 만든다. 프로세스 제어 블록에는 프로세스를 처리하는 데 필요한 다양한 정보가 들어 있다.
프로그램이 프로세스가 되었다는 것은 운영체제로부터 프로세스 제어 블록을 받았다는 의미이다. 마찬가지로 프로세스가 종료된다는 것은 해당 프로세스 제어 블록이 폐기된다는 뜻이다.
프로세스 제어 블록에 있는 정보중 대표적인 세 가지를 간단하게 살펴보겠다.
프로세스 구분자
메모리에는 여러 개의 프로세스가 있어서 이를 구분하기 위해 구분자가 필요하다.
메모리 관련 정보
프로세스의 메모리 위치 정보가 담겨 있다.
각종 중간값
시분할 시스템에서는 여러 프로세스가 번갈아 가면서 실행되기 때문에 각 프로세스가 사용했던 중간값이 저장된다.
일괄 작업 시스템의 경우 한번에 하나의 프로세스만 실행가능하기 때문에 프로세스가 실행된 후 CPU를 얻어 실행되고 작업을 마치면 종료되는 매우 간단한 과정이다.
시분할 시스템은 당연히 더 복잡한 과정을 거친다.
CPU를 얻어 실행중인 프로세스가 다른 프로세스에게 CPU를 넘겨주는 일이 빈번하기 때문이다. 이때 일어나는 과정을 살펴보겠다.
첫번째는 생성 상태로 프로그램이 메모리에 올라오고 프로세스 제어 블록을 할당받은 상태이다.
생성된 프로세스는 바로 실행되는 것이 아니라 준비 큐에서 실행을 기다린다. 실행 대기 중인 모든 프로세스가 자기 순서를 기다리는 상태이다.
준비 큐에서 기다리던 프로세스가 자기 순서가 되어 CPU를 할당받아 실행되는 상태이다.(디스패치)
프로세스는 자신에게 주어진 시간동안 작업할 수 있고 그 시간을 다 사용하면 준비 상태로 옮겨진다.(타임 아웃)
입출력은 인터럽트 시스템에 의해서 CPU가 실행하지 않고 입출력 관리자가 실행한다. 만약 실행 상태에 있던 프로세스가 입출력을 요구했다면 입출력 관리자가 입출력을 실행하는 동안 프로세스는 입출력이 끝날때까지 기다리고 할일이 없어진 CPU 또한 아무 작업을 하지 않고 기다린다.
이와 같은 효율성 문제로 탄생한 상태가 대기 상태이다. 입출력을 요구한 프로세스가 입출력이 완료될 때까지 기다리는 상태가 대기 상태이다. 프로세스가 대기 상태로 옮겨지면 준비 상태에 있는 다른 프로세스를 실행 상태로 만들 수 있게 된다. 대기 상태에 있던 프로세스는 입출력이 완료되면 준비 상태로 돌아가 다시 실행 순서를 기다린다.
실행 상태에서 작업을 다 마친 프로세스가 종료되는 상태이다. 완료 상태에서는 종료된 프로세스의 코드와 사용했던 데이터를 메모리에서 삭제하고 프로세스 제어 블록을 폐기한다.