실행 중인 프로그램을 프로세스라고 한다. 한 프로세스는 한 시스템 내 작업의 단위이다. 프로그램은 수동적 개체, 프로세스는 프로그램 카운터를 가진 능동적 개체이다. 프로세스는 작업을 실행하기 위해 자원(CPU, memory, I/O, files, etc)요청을 하고 프로세스가 끝나면 반납한다. 더 이상 쪼개지지 않는 프로세스는 그 자체가 쓰레드이며 single-스레드 라고 부른다. 여러 개로 쪼개지는 프로세스는 멀티스레드 라고 부른다.
💡 프로세스 상태
- new : 새로 만들어진 상태
- ready: cpu를 제외한 필요한 자원이 확보되어 cpu를 할당받길 기다리고 있는 상태
- running: cpu가 할당되어 연산되고 있는 상태
- waiting: 사건이 발생해서 프로세스가 기다리고 있는 상태. 예) I/O 처리할 때에는 waiting으로 상태가 바뀐다. I/O가 끝나면 다시 ready 상태로 바뀐다.
- terminated: 프로세스가 연산이 끝난 상태. 실제 연산에서는 ready running waiting을 숱하게 왔다 갔다 하게 된다.
운영체제에는 프로세스마다 프로세스 제어 블록을 유지한다. 다른 말로 테스크 제어 블록이라 한다. 여기에는 다음과 같은 정보들이 기록된다.
1. 프로세스 상태(new, ready, running, waiting, terminated)
2. 프로그램 번호(program counter) - 다음에 실행할 명령어의 주소
3. CPU 레지스터들 - 현재 레지스터의 값을 여기에 보관
4. CPU 스케줄링 정보 – 우선순위, 큐에 대한 포인터 등등
5. 메모리 관리 정보 – 레지스터의 기본값과 한계값, 페이지와 세그먼트테이블
6. 회계 정보 – CPU가 사용된 양과 사용된 실제 시간 등
7. 입출력 상태 정보 – I/O 장치와 열린 파일들의 목록