◎ 프로그램 & 프로세스
- 프로그램 : 저장장치에 저장되어 있는 정적인 상태
- 프로세스 : 실행을 위해 메모리에 올라온 동적인 상태
- 프로그램과 프로세스의 관계
- 프로그램이 운영체제로부터 프로세스 제어 블록(PCB)을 얻으면 프로세스가 됨
- 프로세스가 종료 → 해당 프로세스 제어 블록(PCB)이 폐기된다는 의미
◎ 프로세스의 상태
생성 상태
- 프로그램이 메모리에 올라오고 PCB를 할당받은 상태
준비 상태
- 실행 대기중인 모든 프로세스가 자기 순서를 기다리는 상태
- PCB는 준비 큐(Ready Queue)에서 기다리며 CPU 스케쥴러에 의해 관리
- CPU 스케쥴러 : 큐를 몇 개 운영할건지, 어떤 PCB를 실행상태로 보낼지 결정
- CPU 스케쥴러가 dispatch(PID) 명령 실행시, 실행 상태로 바뀜
실행 상태
- 프로세스가 CPU를 할당 받아 실행하는 상태
- 자신에게 주어진 타임 슬라이스 동안만 작업할 수 있다.
- 한 프로세스가 실행 상태가 끝나게 되면, CPU 스케쥴러는 새로운 프로세스를 실행 상태로 가져옴
- 실행 상태가 끝나는 경우
- timeout(PID) : 주어진 타임슬라이스를 다 사용한 경우; 다시 준비 상태로 이동
- exit(PID) : 실행 상태동안 작업이 완료; 프로세스가 정상 종료(완료 상태)
- block(PID) : 입출력을 요청한 경우; 대기 상태로 이동함
대기 상태
- 프로세스가 입출력이 완료될 때까지 기다리는 상태
- 완료되면 인터럽트가 발생하고, wakeup(PID)을 통해 해당 프로세스의 PCB가 준비 상태로 이동
완료 상태
- 프로세스가 종료되는 상태 (exit()을 사용)
- 코드와 사용했던 데이터를 메모리에서 삭제하고 PCB 파기
- 코어 덤프(core dump) : 강제 종료(오류나 비정상적 종료)를 만나면 디버깅하기 위해 종료 직전의 메모리 상태를 저장장치로 옮김
휴식 상태
- 프로세스가 작업을 일시적으로 쉬고 있는 상태
- 종료 상태가 아니기 때문에 원할 때 다시 시작할 수 있다.
보류 상태
- 프로세스가 메모리에서 잠시 쫓겨난 상태
- 보류 상태가 되는 상황들
- 메모리가 꽉 찼을 때
- 프로그램에 오류가 있을 때
- 바이러스와 같은 악의적인 공격을 하는 프로세스라고 판단할 때
- 매우 긴 주기로 반복되는 프로세스
- 프로세스의 입출력이 계속 지연될 때
◎ 프로세스 제어 블록 (PCB, Process Control Block)
프로세스 제어 블록
- 프로세스를 실행하는 데 필요한 중요 정보를 관리하는 자료 구조
- 프로세스는 고유한 PCB를 가짐
- 프로세스 생성시 만들어져 완료되면 폐기함
프로세스 제어 블록의 구성
- 포인터 : 준비 상태나 대기 상태의 큐를 구현할 때 사용
- 대기 상태에는 같은 입출력을 요구하는 프로세스끼리 연결할 때 포인터 사용
- 프로세스 상태 : 프로세스가 현재 어떤 상태에 있는지를 나타내는 정보
- 프로세스 구분자 : 여러 프로세스를 구현하기 위한 구분자 (Process ID)
- 프로그램 카운터 : 다음에 실행될 명령어의 위치를 가리킴
- 프로세스 우선순위 : 프로세스의 실행 순서를 결정하는 우선순위
- 각종 레지스터 정보 : 프로세스가 실행하던 중에 사용하던 레지스터 값
- 메모리 관리 정보 : 프로세스가 메모리의 어디에 있는지 나타내는 메모리 위치정보
- 경계 레지스터 값, 한계 레지스터 값, ...
- 할당된 자원 정보 : 프로세스를 실행하시 위해 사용하는 입출력 자원이나 오픈 파일 등의 정보
- 계정 정보 : 계정 번호, CPU 할당 시간, CPU 사용 시간, ...
- PPID, CPID : 부모 프로세스 구분자, 자식 프로세스 구분자
◎ 문맥 교환
- CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업
- 나가는 프로세스 제어 블록에는 현재 작업 내용 저장, 들어오는 프로세스는 작업 내용을 불러옴