프로세스의 개념
실행중인 프로그램
운영체제로부터 시스템 자원을 할당 받는 작업의 단위
프로그램:
- 컴퓨터가 특정 동작을 수행하기위해 작성된 실행가능한 명령어와 정적 데이터의 묶음
- 파일이 저장장치에 저장되어 있지만 메모리에 할당이 되지 않은 정적인 상태
- .exe 파일처럼 사용자가 실행하기 전의 파일들
프로그램을 실행하면 해당 파일이 메모리에 할당 되어서 정적인 상태에서 동적인 상태로 변하고, 운영체제의 CPU 제어권을 받을 수 있는 상태의 프로그램을 프로세스라고 함
프로세스의 구성
◻ Stack
- 함수의 매개변수, 지역변수, 리턴값 등 임시적인 데이터를 저장하는 영역
- 컴파일 타임에 크기가 결정되므로 스택 영역을 초과하면
stack overflow
가 발생
◻ Heap
- 동적으로 할당되는 데이터를 저장하는 영역
- 사용자가 필요할 때 사용하므로 런타임에 크기가 결정
◻ Data
- 전역변수, 정적변수 등 프로그램이 사용하는 데이터를 저장하는 영역
- 초기화 된 데이터와 초기화되지 않은 데이터(BSS)로 구분되어있음
◻ Text(Code)
- 프로그램의 코드가 CPU에서 수행할 수 있는 기계어 명령 형태로 변환되어 저장되는 영역
- 컴파일 타임에 결정되고 중간에 바꿀 수 없도록 Read-Only로 되어있음
프로세스의 상태
- New: 프로세스가 생성되는 도중의 상태
- Ready: CPU에 의해 실행되기를 기다리고 있는 상태, 준비 큐에서 대기
- Running: CPU가 프로세스를 실행하고 있는 상태
- Waiting: 프로세스가 입출력 완료, 시그널 수신 등 어떤 이벤트를 기다리고 있는 상태
- Terminated: 프로세스가 완전히 종료된 상태
프로세스의 상태 전이
1. Admit [New -> Ready]
- 운영체제가 프로그램을 메모리로 올리는 것을 허락함: 프로세스 생성이 가능하여 승인됨
- 메모리의 공간이 한정적이고 프로그램이 많아지면 각각의 대기시간이 길어지므로 CPU가 모든 프로세스를 부드럽게 처리하기 어렵기 때문에 운영체제의 허락을 받아야 한다
2. Dispatch [Ready -> Running]
- 스케줄러에 의해 준비 큐에 있는 프로세스를 선택해 CPU에 할당
- CPU가 다른 프로세스를 실행하고 있으면 기존 프로세스의 상태를
PCB
에 저장하고 새로운 프로세스의 상태를 적재하는 Context Switching
수행
3. Interrupt [Running -> Ready]
- 예외, 입출력, 이벤트 등이 발생하여 현재 실행 중인 프로세스를 잠시 멈추고 해당 작업을 먼저 처리
선점(Preemptive)스케줄링 채택 시
- CPU를 점유중인 프로세스가 할당된 시간을 모두 사용하면 Timer Interrupt가 발생
4. Block [Running -> Waiting]
- 프로세스가 입출력 등의 이벤트를 즉시 해결할 수 없어 필요한 자원을 할당 받기를 기다림
5. Wakeup [Waiting -> Ready]
- Waiting 상태에서 필요한 자원을 할당 받으면 다시 Ready상태로 돌아감
6. Exit [Running -> Terminated]
- 프로세스가 CPU를 할당받아 작업을 모두 수행함
Process Control Block (PCB)
운영체제가 프로세스의 상태 관리와 Context Switching에 필요한 정보를 저장하는 커널 내의 자료구조
PCB에 저장되어 있는 정보:
- 포인터: 프로세스가 위치한 메모리 주소에 대한 포인터 (준비 큐에서 사용)
- 프로세스의 상태 (Process State): ready, running 등
- 프로세스 식별자 (PID)
- 프로그램 카운터 (Program Counter): 프로세스가 다음에 실행할 명령어의 주소를 가리킴
- 레지스터 정보: 이전 작업을 중단된 위치에서부터 이어서 할 수 있도록 누산기, 스택, 인덱스 레지스터 등을 저장
- CPU 스케줄링 정보: 프로세스의 우선 순위, 최종 실행 시각, 총 CPU 점유시간, 스케줄링 큐 포인터 등
- 메모리 관리 정보: 프로세스의 메모리 주소, 페이지 테이블, 세그먼트 테이블 등
- 입출력 상태 정보: 프로세스에 할당된 입출력장치 목록, 열린 파일 목록 등
출처 및 참고
프로세스 알아보기 (메모리 구조, 상태 전이)
프로세스와 스레드
[ OS] 프로세스의 개념, 상태, 제어