Process(프로세스)
Process
실행중인 프로그램을 의미한다.
-> memory에 올라와 실행되고 있는 program의 인스턴스이다(독립적 개체)
-> OS로부터 system 자원을 할당받는 작업의 단위
-> CPU time, 주소 공간(memory 공간)
기본적으로 최소 1개의 thread를 갖는다.
각 process는 별도 주소 공간에서 실행되며 다른 process의 변수나 자료구조에 접근할 수 없고 그렇기 때문에 다른 process의 resource에 접근하기 위해서는 IPC를 사용해야 한다.
종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 같은 의미로 쓰인다. 여러 개의 프로세서를 사용하는 것을 멀티 프로세싱(multi processing)이라고 하며 같은 시간에 여러 개의 프로그램을 띄우는 시분할 방식을 멀티태스킹(multi tasking)이라고 한다. process 관리는 운영체제의 중요한 부분이다.
프로그램은 일반적으로 하드 디스크 등에 저장되어 있는 실행코드를 뜻하고, process는 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 memory 상에서 실행되는 작업 단위를 지칭한다. 예를 들어, 하나의 프로그램을 여러 번 구동하면 여러 개의 process가 memory 상에서 실행된다.
processor: 중앙처리장치(예: 펜티엄, 쿼드코어 등)
program(프로그램): 사용자가 컴퓨터에 작업을 시키기 위한 명령어의 집합
고급언어로 작성한 프로그램은 기계어 프로그램으로 변환해야 실행 가능하다.
일반적 process 구성
- text(code): 실행할 명령어(코드) 저장
- data: 프로그램에 필요한 전역 변수나 정적 변수 저장
- stack: 함수 호출에 필요한 스택 프레임 저장
- heap: 사용자가 관리하는 공간으로 memory가 동적으로 할당되고 해제됨, Java에서는 GC가 메모리를 해제
Process State
kernel의 process 관리 기능이 process의 scheduling을 담당한다.
kernel 내에는 ready queue, waiting queue, running queue 등의 자료 구조가 있으며 kernel은 이것들을 이용하여 process의 state를 관리한다.
- create: process가 생성되는 중
- running: process가 CPU를 차지하여 명령어들이 실행되는 중
- ready: process가 CPU를 사용하고 있지는 않지만 언제든 사용할 수 있는 상태, CPU가 할당되기를 기다리고 있다. 일반적으로 ready 상태의 process 중 priority가 높은 process가 CPU를 할당받는다.
- wating: block이라고 부르기도 한다. process가 IO 완료, signal 수신 등 어떤 사건을 기다리고 있는 상태
- terminated: 말 그대로 process의 종료
Process State는 규칙에 따라 여러 상태로 변한다.
1. process는 먼저 user mode에서 실행
2. user mode에서 system call을 하면 kernel 모드로 전환된다.
3. 수면 중이던 process가 깨어나 실행 대기 상태(wait) 상태로 전환되면 실행을 준비한다.
4. kernel 모드에서 실행 주 입출력을 기다릴 때처럼 실행을 계속할 수 없으면 수면상태로 전환
하나의 프로그램이 실행되면 그 프로그램에 대응되는 process가 생성되어 ready queue의 끝에 들어간다. ready queue 상의 다른 process들이 CPU를 할당받아 ready queue를 떠나면, 그 process는 점차 ready queue의 앞으로 나가게 되고 언젠가 CPU를 사용할 수 있게 된다.
- dispatch: ready queue의 맨 앞에 있던 process가 CPU를 점유하게 되는 것, ready에서 running으로 바뀌는 것을 dispatch라고 하며 다음과 같이 표시한다.
dispatch (processname) : ready → running
- block: running state의 process가 CPU time(time quamtum)을 다 쓰기 전에 IO를 필요로 하는 경우 process는 CPU를 스스로 반납(non-preemption)하고 block 상태로 넘어 간다. block 상태를 다음과 같이 표시한다.
block (processname) : running → blocked
- wakeup: I/O 작업 종료 등 기다리던 사건이 일어났을 때 block에서 running으로 넘어가는 과정을 wakeup이라고 하며 다음과 같이 표시한다.
wakeup (processname) : blocked → ready
- timeout: OS는 process가 processor를 계속 독점해서 사용하지 못하게 하기 위해 clock interrupt를 두어서 process가 일정 시간동안만 processor를 점유할 수 있게 한다.
timeout(processname) : running → ready