탄생 배경
- 프로그래밍 방식의 발전에 따라 다수의 프로그램이 한번에 메모리에 적재되면서, 각각의 프로그램을 보다 견고하게 제어하고 구획화할 필요성이 대두되었음
정의 및 개념
- 실행 중인 프로그램이며 작업의 단위
- 하나의 시스템은 프로세스의 집합체
- 운영체제 프로세스는 시스템 코드를 실행
- 사용자 프로세스들은 사용자 코드를 실행
- 다음과 같은 맥락에서 다른 용어로 표현되기도 하지만 유사한 면을 갖으므로 프로세스로 통칭
- 일괄 처리 시스템에서 잡(job)
- 시분할 시스템에서 테스크(task)
- 단일 테스킹만을 지원하는 임베디드 시스템에서 실행된 프로그램
메모리 구성
- 코드 섹션: 실행코드
- 데이터 섹션: 전역 변수
- 프로세스 제어 블록(PCB): 프로그램 카운터 값, CPU레지스터 값
- 힙: 동적으로 할당된 메모리
- 스택: 함수의 매개변수, 복귀 주소, 로컬 변수가 저장되는 공간
프로세스 상태
프로세스는 실행되면서 그 상태가 변한다. 상태값들은 프로세스 제어 블록(PCB)에 저장되며, 프로세스 상태의 종류는 다음과 같다.
- new(생성): 프로세스가 생성 중이다
- running(실행): 명령어들이 실행되고 있다.
- waiting(대기): 프로세스가 어떤 사건이 일어나기를 기다린다.
- ready(준비완료): 프로세스가 CPU에 할당되기를 기다린다.
- terminated(종료): 프로세스의 실행이 종료되었다.
프로세스 제어 블럭
프로세스 제어블럭은 다음과 같은 정보들을 포함한다.
- 프로세스 상태: new, ready, running, waiting, halted
- 프로그램 카운터: 프로세스가 다음에 실행할 명령어의 주소
- CPU레지스터: 누산기, 인덱스 레지스터, 스택 레지스터, 범용 레지스터들과 상태코드
- CPU스케줄링 정보: 프로세스 우선순위, 스케줄링 큐에 대한 포인터, 스케줄링 매개변수
- 메모리 관리 정보: 기준 레지스터, 한계 레지스터의 값, 페이지 테이블 또는 세그먼트 테이블
- 회계 정보: CPU 사용 시간과 경과된 시간, 시간 제한, 계정 번호, 프로세스 번호
- 입출력 상태 정보: 프로세스에 할당된 입출력 장치들, 열린 파일의 목록