프로세스란, 수행중인 프로그램을 뜻한다.
디스크에 실행파일형태로 존재하는 프로그램이 메모리에 올라가서 수행되기 시작하면 비로소 생명력을 갖는
프로세스가 되는 것이다.
프로세스의 상태는 실행(running), 준비(ready), 봉쇄(blocked,wait,sleep) 상태로 구분할 수 있다.
실행상태는 프로세스가 CPU를 보유하고 있는 상태이며, 일반적인 컴퓨터의 CPU가 1대로 가정하면 실행상태에 있는
프로세스는 매시점 하나뿐이다.
준비상태는 프로세스가 CPU만 보유하면 당장 명령을 실행할 수 있지만, 아직 CPU를 할당받지 못한 상태이다.
봉쇄상태는 프로세스에게 CPU를 주어도 당장 명령을 실행할 수 없는 상태를 말한다.
하나의 프로세스는 앞의 상태중 어느 한 상태에 머무르게 된다.
입출력을 요청한 프로세스의 상태변화가 어떻게 일어나는지 예를들어보자.
프로세스가 실행중에 입출력 요청을 받으면, 디스크에서 파일의 내용을 읽어오는 등의 명령이 포함될 수 있다.
하지만 이러한 작업은 CPU의 본연의 임무를 처리하는 속도에 비해 상대적으로 오랜시간이 걸리는 작업이기 때문에,
디스크입출력이 진행되는동안 CPU는 후속명령을 처리하지 못하고 아무것도 하지못하는 일명 낭비가되는 현상이 발생한다.
따라서 입출력을 하는 동안은, 이 프로세스는 CPU를 반환하게 되며 다음 디스크입출력 서비스를 기다리는 장치 큐(wait queue) 에가서 줄을서게되는데, 이때 프로세스는 봉쇄(Block) 상태가 된다.
그렇다면 반환된 CPU를 받는 프로세스가 있어야 하는데, 이는 준비큐(ready queue)에 줄서있는 프로세스들 중에 CPU스케쥴러가 적절한 프로세스를 하나 선정해서 CPU를 할당하게 된다.
이 준비큐에 있는 프로세스는 CPU를 휙득하면 곧장 명령을 수행할 수 있는 프로세스, 즉 준비(Ready)상태의 프로세스들이 존재한다.
그렇다면 아까 디스크 입출력을 요청하는동안 Block 되어버린 프로세스는 어떻게 되는 것일까.
이 프로세스는 디스크 입출력을 기다리는 장치 큐에 줄을 서 있다가, 원하는 데이터를 버퍼로 받아들인다면 '디스크 컨트롤러'가 CPU에게 인터럽트를 발생시켜 입출력 완료를 알리게 된다.
그렇게되면 CPU는 인터럽트를 확인하고, 그에 대응하는 루틴을 수행하게 된다.
이 루틴의 임무는 입출력이 완료된 프로세스를 장치 큐에서 빼내어 CPU를 기다리는 준비 큐에 넣어주고 프로세스의 상태를 준비상태로 바꾼후 장치의 로컬버퍼에 있는 내용을 메모리로 이동시키는 것이다.
자세한것은 인터럽트 포스팅에서 다룰 것이다.
경우에 따라서는 입출력을 완료한 프로세스가 원래 있던 인터럽트를 받은 프로세스의 자리를 차지하고 CPU를 할당받는 경우도 있는데, 이는 스케줄링과 관련이 있다.
'OS' 카테고리의 다른 글
[OS] 문맥교환(Context Switch) (0) | 2020.06.07 |
---|---|
[OS] 인터럽트(Interrupt) 원리 (0) | 2020.06.07 |
[OS] Linux, Mac(Darwin), Android (0) | 2020.06.06 |
[OS] 운영체제의 역사 (0) | 2020.06.06 |
[OS] 운영체제(OS) 개요 (0) | 2020.06.06 |