컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다.
종종 스케줄링의 대상이 되는 작업(task)라는 용어와 거의 같은 의미로 사용. (위키백과)
- 프로그램이 실행되면 프로세스 인스턴스가 생성된다.
- 인스턴스가 생성된다는 의미는 프로그램 실행에 필요한 내용이 컴퓨터 메모리(ram)에 적재된다는 뜻
- 일반적으로 프로세스와 프로그램을 같은 개념으로 얘기할때가 많은데 엄밀히 따지면 둘은 다른 개념이다.
둘의 차이는 프로세스와 프로그램의 차이는 정말 명확하다. 프로그램 자체는 생명이 없습니다. 프로그램은 보조 기억장치(하드디스크, SSD)에 존재하며 실행되기를 기다리는 명령어(코드)와 정적인 데이터의 묶음이다. 이 프로그램의 명령어와 정적 데이터가 메모리에 적재되면 생명이 있는 프로세스가 된다.즉 프로세스란 실행 중인 프로그램이다.
그렇다면 프로세서란 무엇일까? 프로세서란 말 그대로 프로세스를 처리하는 주체인 CPU를 말한다.
사실 하나의 프로세서(CPU)는 한 순간에 하나의 일만 처리할 수 있다.
프로세스가 동시에 여러 개가 실행될 수 있는 이유는 운영체제가 엄청나게 빠른 속도로 프로세서(CPU)가 실행할 프로세스를 교체하기 때문이다.
그래서 운영체제는 마치 사용자가 이렇게 동시에 여러 개의 프로세스를 실행하고 있다는 “환상”을 준다.
프로세스에 대한 정보는 프로세스 제어블록(PCB, Process Control Block)또는 프로세스 기술자(process descriptor)라고 부르는 자료구조에 저장된다. 대부분 PCB
라고 부른다.
추가적인 내용은 링크를 참고
운영체제는 프로세스들의 실행 사이에 프로세스를 교체하고 재시작할 때 오류가 발생하지 않도록 관리해야한다. 이를 위해 운영체제는 프로세스의 상태를 실행
(running), 준비
(ready), 블록
(block) 상태로 분류하고 프로세스들을 상태전이
(state transition)를 통해 체계적으로 관리한다.
사용자가 프로그램을 실행하면 프로세스가 생성되고 준비 리스트에 추가가 된다. 프로세스는 프로세서(CPU)가 사용가능한 상태가 되면 CPU를 할당 받는다. 이를 준비
상태에서 실행
상태로 상태전이
된다고 한다.
이 과정을 디스패칭
(dispatching)이라고 하고, 디스패처(dispatcher)가 이 일을 수행한다.
이제 프로세스는 실행상태에서 CPU를 이용하면서 연산한 후 CPU 를 자발적으로 반납하고 작업이 끝나지 않았으면 다시 준비
상태에 들어가게 된다. 그리고 이러한 과정을 반복하게 된다.
만약 프로세스가 다시 사용하기 전에 입출력을 받아야 하는 상황이라면 입출력이 완료될때 까지 자신을 블록
한다. 입출력이 완료되면 운영체제가 프로세스를 준비
상태로 다시 전이시키게 된다.
특정 프로세스에 대한 중요한 정보를 저장 하고 있는 운영체제의 자료구조이다.
- 운영체제는 프로세스 생성과 동시에 고유한 PCB를 생성한다.
- 프로세스는 CPU를 할당 받아 작업을 처리하다가 중간에 프로세스 전환이 발생하면 진행하던 작업의 진행사항을 전부 PCB 에 저장한다.
- 다시 CPU를 할당받으면 PCB에 저장되어있던 내용들을 불러와서 이전에 종료된 시점부터 다시 작업을 수행한다.