2020. 7. 6. 01:30ㆍ컴퓨터언어/운영체제
👍 프로세스 상태전이 : 보조기억장치 -> 주기억장치[준비->실행->대기->준비...]
1. 제출(Submit) : 병원에 들어가서 데스크에서 접수하기
사용자가 디스크(보조기억장치)에 저장되어 있는 어떤 파일을 열어서 보고 싶다면, 우선 더블클릭 같은 명령을 통해 시스템에게 알려주어야 한다.
이렇게 사용자가 파일을 열고 싶어서 더블클릭 등의 행위를 하는 것을, 시스템에 작업을 "제출"한다고 표현한다.
제출은 보조기억장치에서 불러오는 것이므로 상대적으로 많은 시간을 필요로 한다.
따라서 제출은 Job-Scheduler(Long-Term) 스케줄러가 담당한다.
2. 접수(Hold) : 접수하고 호명하면 바로 들어갈 수 있도록 진료실 근처에 있기
사용자가 명령한 "제출"은 여러 개를 모아 한번에 <스풀>과정을 거침으로써 보조기억장치와 주기억장치 사이의 속도차이를 개선한다.
그리고 스풀 상태를 "접수"라고 한다.
*스풀은 보조기억장치에 위치해있다. 프로그램을 주기억장치로 적재하기 위한 것뿐만 아니라, 느린 입출력 작업을 주기억장치가 맡을 수 없기에 보조기억장치로 내려보내기도 한다.
*스풀과 비슷한 것으로 버퍼가 있다. 버퍼는 주기억장치에 위치한 것으로, 프로그램 실행에 필요한 최소한의 양을 매번 업데이트하여 동영상 같은 대용량 처리에 과부하가 없도록 도와준다.
3. 준비(Ready) : 진료실 안에 들어가서 의사와 대화를 시작하기 전 상태
스풀을 거치면, 그 파일을 열 수 있는 연결프로그램은 주기억장치로 들어와 적재된 것이다.
이때 주기억장치에 적재된 프로그램은 "프로세스"라는 이름으로 불리게 된다.
하지만 다중프로그래밍 방식에서는 메모리에 적재되었다고 해도, CPU가 해당 프로세스에 접근하기 전에는 <준비상태 큐>에 등록되어 "준비"상태로 남아있을 뿐이다.
그러다가 CPU가 해당 프로세스에 접근하여 연산하게 되면 드디어 "실행" 상태가 된다.
4. 실행(Run) : 의사가 진료를 보고 있는 상태
준비상태에서 실행상태로 바뀌는 것을 "디스패치"라고 하며, 상당히 빨라야 하므로 Process-Scheduler(Short-Term) 스케줄러가 담당한다.
*정해진 시간에 더 많은 양을 처리할 수 있게 계획하는 것
CPU가 한 개인 시스템에서는(병렬처리가 아닌 시스템) 시분할하여 다중프로그래밍하기 때문에, 찰나의 순간에 CPU를 할당받지 못한 프로세스는 잠깐동안 "준비"상태로 돌아가게 된다. 이를 "Time-Runout"이라고 한다.
5. 보류/대기(Wait, Block) : 진료를 제외한 의료시설(X-ray)
현재 프로세스가 CPU가 직접 연산하며 실행할 필요가 없고 I/O(입출력)요구처럼 주변장치가 필요한 경우, 현재 실행중인 프로세스가 중단되고 입출력 처리가 완료될 때까지 대기하고 있는 상태를 말한다.
대기 상태에서는 CPU가 아닌 "채널"이 입출력전용cpu로서 입출력을 담당한다.
*채널 : 입출력만을 담당하는 소형 컴퓨터로, 간단한 명령 구조와 레지스터를 가지고 있으며 입출력 장치와 통신하기 위한 간단한 장치로 구성되어 있다.
이때 입출력에서 오류가 나는 것을 Suspended(중단된 봉쇄상태, 운영체제에 의해 일시적으로 벗어나는 상태 ex 인쇄버튼을 눌렀는데 프린터가 꺼져있다, CD를 넣지 않았다), 오류를 해결하고자 다시 입출력을 시도하는 것을 Resume(재시작, ex 프린터를 다시 켰다, CD를 넣었다)이라고 하며,
프로세스의 입출력이 완료되면 다시 CPU가 접근할 때까지 준비상태 큐로 들어가는 "준비" 상태가 된다. 이를 Wake-up이라고 한다.
프로세스는 준비에서 대기로 가거나 대기에서 실행으로 갈 수 없다.