프로세스 (Process) - ①

프로세스의 개념과 PCB 그리고 프로세스 상태


프로세스의 개념

운영체제에서 프로세스는 하나의 작업 단위이다. 사용자가 마우스를 더블클릭하여 프로그램을 실행하면 그 프로그램은 프로세스가 된다.

폰 노이만 구조의 컴퓨터에서 프로그램을 실행된다는 것은 해당 프로그램의 코드가 메모리에 올라와 실행된다는 의미이다. 프로그램은 하드디스크같은 저장장치에 저장되어 있는 정적인 상태이고 프로세스는 실행을 위해 메모리에 올라온 동적인 상태이다. 즉 프로그램을 실행하면 프로세스가 되는 것이다.


프로그램에서 프로세스로의 전환

프로그램이 프로세스로 전환될 때 우선 운영체제는 프로그램을 메모리의 적당한 위치로 가져온다. 동시에 프로세스 제어 블록(Process Control Block, PCB)을 만드는데 이 곳에 프로세스를 처리하는 필요한 다양한 정보가 들어 있다. 이 프로세스 제어 블록이 없으면 프로그램이 프로세스로 전환되지 못한다.

프로세스 제어 블록에는 다양한 정보가 들어있는데 대표적으로 아래 세 가지가 있다.

  • 프로세스 구분자 (PID)

메모리에는 여러 개의 프로세스가 존재하므로 각 프로세스를 구분하기 위한 ID가 필요하다 이 ID가 프로세스 구분자(Process IDentification, PID)이다. pid 윈도우에서 작업 관리자에 들어가면 현재 내 컴퓨터에서 돌아가고 있는 프로세스들의 PID를 확인할 수 있다.

  • 메모리 관련 정보

CPU는 실행하려는 프로세스가 메모리의 어느 위치에 있는지 알아야 작업을 할 수 있다. 이를 위해 PCB에는 프로세스의 메모리 위치 정보가 담겨 있다. 또한 메모리 보호를 위해서 경계 레지스터와 한계 레지스터도 포함되어 있다.

  • 각종 중간값

PCB에는 프로세스가 사용했던 중간값이 저장되어 있다. 현대 대부분의 컴퓨터는 시분할 방식을 채택하여 마치 여러 개의 프로그램이 동시에 실행되는 것처럼 보인다. 실은 동시에 실행되는 것이 아니라 여러 프로세스가 굉장히 빠른 속도로 번갈아 가면서 실행이 되는 것이다.

예를 들어 A라는 프로세스가 103번 행까지 작업한 후 다른 프로세스에게 CPU 이용권을 넘겨 줬다가 다시 A의 차례가 되면 104 행부터 실행 되어야 한다. 이를 위해 PCB에는 다음에 실행될 명령어의 주소를 기록하고 있는 프로그램 카운터(PC)의 값을 저장하고 있는다. 프로그램 카운터 뿐 아니라 작업이 끊겼다가 다시 이어서 시작될 수 있도록 각종 레지스터 값을 가지고 있는다.

프로세스 제어 블록은 운영체제가 해당 프로세스를 관리하는 데이터 구조이므로 운영체제 영역에 만들어진다. pcb https://math-coding.tistory.com/98


프로세스의 상태

여러 개의 프로세스가 돌아가면서 CPU를 차지하므로 하나의 프로세스는 여러 개의 상태를 가진다.

1. 생성 상태 (create status)

프로세스가 메모리에 올라와 실행 준비를 완료한 상태이다. 이 때 프로세스 제어 블록(PCB)가 생성된다.

2. 준비 상태 (ready status)

생성된 프로세스가 CPU를 차지할 때 까지 대기하고 있는 상태이다. 이때 CPU는 다른 프로세스가 사용 중이다.

3. 실행 상태 (running status)

준비 상태였던 프로세스가 드디어 CPU를 사용하는 상태이다. 실행 상태에 들어간 프로세스는 일정 시간 CPU를 점유할 권한을 가지고 이 시간 안에 모든 작업을 마치면 완료 상태로 넘어가고 작업을 마치지 못한 경우 다른 프로세스에게 CPU를 넘겨주고 자신은 준비 상태로 다시 돌아간다.

4. 완료 상태 (terminate status)

실행 상태의 프로세스가 주어진 작업을 모두 마친 상태이며 이떄 프로세스 제어 블록은 삭제된다.

process_status https://math-coding.tistory.com/98

위 사진을 보면 상태 변화를 쉽게 이해할 수 있다. 준비 상태에 있는 프로세스 중 하나를 골라 실행 상태로 옮기는 작업은 CPU 스케줄러가 담당하고 이 작업을 디스패치(dispatch)라고 한다.

반대로 실행 상태였던 프로세스가 준비 상태로 되돌아가는 작업을 Timeout이라고 한다.

위 사진에는 대기 상태라는 상태도 존재한다. 이는 실행 상태 중이던 프로세스가 입출력 장치로 입출력 요청을 하였을 경우 프로세스는 해당 요청의 응답이 올 때 까지 아무것도 할 수 없다. 이 상태를 방치하면 CPU 자원의 낭비이므로 해당 프로세스를 대기 상태로 옮긴 후 다른 프로세스를 디스패치한다. 입출력 요청의 응답(인터럽트)이 오면 해당 프로세스를 다시 준비 상태로 돌려 놓고 다음 실행을 기다린다.


참고 서적

쉽게 배우는 운영체제