1. 다섯 가지 프로세스 상태도를 그리시오.
상태 | 설명 | 작업 |
생성 | 프로그램을 메모리에 가져와 실행 준비가 완료된 상태 | 메모리 할당, 프로세스 제어 블록 생성 |
준비 | 실행을 기다리는 모든 프로세스가 자기 차례를 기다리는 상태
실행될 프로세스를 CPU 스케줄러가 선택한다. | dispatch ( 준비 |
실행 | 선택된 프로세스가 타임 슬라이스를 얻어 CPU를 사용하는 상태
프로세스 사이의 문맥 교환이 일어난다. | timeout ( 실행 |
대기 | 입출력이 완료될 때 까지 기다리는 상태. 완료되면 준비 상태로 | wakeup ( 대기 |
완료 | 프로세스가 종료된 상태. | 메모리 삭제, 프로세스 제어 블록 삭제 |
2. 프로세스의 상태 중 휴식 상태와 보류 상태에 대해 설명하시오.
앞에서 살펴 본 프로세스 상태들은 활성상태 이며 휴식/보류 상태는 활성상태 이외의 상태를 말한다.
휴식상태
•
유닉스에서 ctrl +z
•
프로세스가 작업을 일시적으로 쉬고 있는 상태
•
종료와는 다르다. 정지의 상태이다.
•
사용하던 데이터가 메모리에 그대로 있고 프로세스 제어 블록도 유지되기 때문에 멈춘 지점에서부터 재시작이 가능하다.
•
ctrl+c 는 프로세스 종료이며 메모리에서 내려가게 되어 메모리/제어블록이 다 사라져서 처음부터 다시 시작해야한다.
보류상태
•
프로세스가 메모리에서 잠깐 쫓겨난 상태이다.
•
보류 상태에 들어간 프로세스는 메모리 밖으로 쫓겨나 스왑 영역에 보관된다.
•
보류와 휴식의 구분 : 보류상태는 스왑 영역에 있는 상태 / 휴식상태는 메모리에 있으나 멈춘 상태
다음과 같은 경우에 보류 상태가 된다
3. 프로세스 제어 블록의 구성에 대해 설명하시오.
프로세스 제어 블록(Process Control Block)
•
프로세스를 실행하는 데 필요한 중요한 정보를 보관하는 자료구조
•
프로세스 생성 시 만들어지고 완료되면 폐기된다.
•
구성요소
구성요소 | 설명 |
포인터 | 준비/대기 상태는 큐로 운영된다. 각 프로세스의 제어 블록을 연결하여 큐를 구현할 때 포인터 사용 |
프로세스 상태 | 프로세스가 현재 어떤 상태에 있는지 나타냄 |
프로세스 구분자 | 운영체제 내의 있는 여러 프로세스를 구별하기 위한 구분자 저장 |
프로그램 카운터 | 다음에 실행될 명령어의 위치를 가리키는 프로그램 카운터의 값 저장 |
프로세스 우선순위 | 대기 큐는 하나가 아닌 여러개로 우선순위 별로 따로 운영된다. 높은 우선순위의 프로세스가 먼저, 자주 실행되어야 하므로 우선 순위를 저장해놓는다. |
각종
레지스터 정보 | 다음에 이어서 실행을 하기 위해 자신이 사용하던 레지스터의 중간값을 보관한다. |
메모리 관리
정보 | 프로세스가 메모리의 어디에 있는지 나타내는 메모리 위치 정보 |
할당된 자원정보 | 입출력 자원이나 오픈 파일 등에 대한 정보 |
계정정보 | 계정 번호, CPU 할당 시간, CPU 사용 시간 등의 정보 |
PPID 와 CPID | 부모 프로세스 구분자 PPID , 자식 프로세스 구분자 CPID |
포인터의 역할
•
입출력 장치의 종류는 다양하므로 관리 하기 쉽게 장치의 종류별로 프로세스를 구분하여 모아 놓는다.
•
포인터에는 어떤 장치의 대기큐에 넣을 건지에 대한 값이 저장되어 있다.
추가) 포인터와 프로세스 우선순위 정보의 차이점