프로그램은 데이터를 사용하여 어떤 작업을 할지 그 절차를 적어 놓은 것으로, 저장장치에 저장되어 있는 정적인 상태인데 프로그램으로 작성된 작업 절차를 실제로 실행에 옮길 때 프로세스를 실행한다고 한다.
운영체제에서 프로세스는 하나의 작업 단위로 실행을 위해 메모리에 올라온 동적인 상태를 말한다.
프로세스는 컴퓨터 시스템의 작업 단위로 태스크(task)라고도 부른다.
프로그램을 메모리의 적당한 위치로 가져온다.
그와 동시에 작업 지시서를 만드는데 이를 프로세스 제어 블록(PCB, Process Control Block)이다. PCB 에는 프로세스를 처리하는데 필요한 다양한 정보가 들어있다. PCB 가 없으면 프로그램이 프로세스로 전환되지 못한다.
프로세스 제어 블록에는 다양한 값이 있다.
각종 중간값
프로세스 제어 블록은 운영체제가 해당 프로세스를 위해 관리하는 데이터 구조이므로 운영체제 영역에 만들어진다. 프로세스가 종료되면 프로세스가 메모리에서 삭제되고, 프로세스 제어 블록도 폐기된다.
생성 상태 (create status)
준비 상태 (ready status)
실행 상태 (running status)
완료 상태 (terminate status)
4가지 상태만으로는 작업을 진행하는데 문제는 없지만 운영체제의 효율성을 고려하여 1가지 상태를 더 만들었다.
입출력을 요구한 프로세스가 인터럽트 시스템에서 입출력 관리자에게 명령을 내릴 때, CPU가 아무 작업도 하지 않으면 효율성이 굉장히 저하된다.
입출력을 요구한 프로세스가 입출력이 완료될 때까지 기다리는 상태를 대기 상태(blocking status)라고 한다. 작업의 효율성을 높이기 위해 입출력을 요청한 프로세스를 실행 상태에 두지 않고, 대기 상태로 옮기는 것이다.
입출력을 요청한 프로세스가 대기 상태로 옮겨지면, CPU 스케쥴러는 준비 상태에 있는 프로세스 중 하나를 가져다 실행 상태로 만든다.
대기 상태의 프로세스는 원래 실행 상태에서 옮겨와서 입출력이 끝나면, 실행 상태로 돌아가는 것이 맞지만, 그러려면 현재 실행 상태에서 작업 중인 프로세스를 준비 상태로 돌려보내야 한다. 두 프로세스의 상태를 변환시켜야 하는 복잡한 상황이므로, 대기 상태에서 입출력이 끝난 프로세스는 실행 상태로 가지 않고, 준비 상태로 돌아가 자기 차례를 기다린다.
앞의 5가지 (생성, 준비, 실행, 대기, 완료) 상태로 프로세스는 운영되며, 이를 활성 상태 라고 한다.
프로세스는 이외에도 또 다른 상태가 있는데 이는 조금 특별하다.
휴식 상태(pause status)
보류 상태(suspend status)
프로세스가 메모리에서 잠시 쫓겨난 상태로 휴식 상태와 차이가 있다.
다음의 경우 보류 상태가 된다.
대부분이 컴퓨터의 성능을 떨어트리거나 실행을 미루어도 큰 지장이 없는 프로세스인 경우이다.
보류 상태에 들어간 프로세스는 메모리 밖으로 쫓겨나 스왑 영역 (swap area)에 보관된다.
보류 상태는 스왑 영역에 있는 상태이고, 휴식 상태는 프로세스가 메모리에 있으나 멈춘 상태이다.
입출력 작업 요청을 프로세스에서 하면, 입출력 작업에는 CPU가 필요가 없는 것일까?
참조한 책 및 사이트
쉽게 배우는 운영체제
https://velog.io/@thalals/OS-3.-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C