실행(Running)
프로세스가 CPU를 차지하여 현재 실행 중인 상태를 말합니다.
준비(Ready)
프로세스가 CPU를 사용하고 있지는 않지만 언제든지 사용할 수 있도록 준비된 상태를 말하며, 대부분의 프로세스가 여기에 해당됩니다.
CPU가 한번에 하나의 프로세스 밖에 실행 시킬 수 없기 때문에, 아직 CPU를 할당 받지
못한 프로세스들은 Ready 상태로 시스템의 큐(Queue)에 등록되어 CPU의 할당을 기다리게 됩니다.
대기(Waiting)
프로세스가 어떠한 사건(event)을 기다리는 상태를 말합니다. 예를 들어 외부 장치들로부터의 I/O가 종료되기를 기다리거나,
한 프로세스가 종료되기를 기다리거나, 어떤 자원이 사용 가능해지기를 기다리는 경우를 말합니다.
완료(Terminated)
프로세스가 완전히 수행을 종료한 상태를 말합니다. 프로세스가 종료되면 운영체제에
의해서 시스템에서 제거됩니다.
디스페치(Dispatch)
디스페치(Dispatch)란 준비 상태에서 실행 상태로 전이되는 과정으로 준비 상태의 큐(Queue)에
대기하고 있던 프로세스 중 우선 순위가 높은 프로세스가 CPU를 취하여 실행 상태로 바뀌는 것을 말합니다.
타이머 런아웃(Timer Runout)
타이머 런아웃(Timer Runout)란 실행 상태에서 준비 상태로 전이되는 과정으로 어떤 프로세스가
CPU를 계속 독점하여 사용하는 것을 막기 위해서, 주어진 시간 내에 작업이 끝나지 않으면,
운영체제가 CPU의 제어권을 해당 프로세스로부터 강제로 회수하여 프로세스의 상태가 준비 상태로 바뀌는 것을 말합니다.
블록(Block)
블록(Block)이란 실행 상태에서 대기 상태로 전이되는 과정으로 실행 상태의 프로세스가 지정된
시간 이전에 입출력이나 기타 다른 수행을 필요로 하는 경우, 그 프로세스는 스스로 CPU를
양보하게 됩니다. 즉 프로세스가 스스로 실행 상태에서 대기 상태로 바뀌는 것을 말합니다.
웨이크 업(Wake Up)
웨이크 업(Wake Up)이란 대기 상태에서 준비 상태로 전이되는 과정으로 입출력 작업을
실행하기 위해 스스로 대기 상태로 전이했던 프로세스가 작업이 완료되어 대기 상태에서
준비 상태로 전이하는 것을 말합니다.
프로세스 상태
실행(Running), 준비(Ready), 대기(Waiting), 완료(Terminated) 등의 프로세스 상태를 말합니다.
프로그램 카운터
프로세스 수행을 위한 다음 명령의 주소를 표시합니다. 프로그램 카운터(program counter)와 함께 프로세스 상태 정보는
인터럽트 발생시 저장되어야 하는데, 이것은 후에 프로세스의 정확한 수행을 계속하기 위함입니다.
레지스터
컴퓨터 구조에 따라 다양한 형식과 종류를 가집니다. 누산기(accumulator), 인덱스 레지스터(index register),
그리고 범용 레지스터(general purpose register) 등이 있습니다.
회계 및 입출력 상태 정보
CPU 사용기간, 실제 사용 기간, 시간 제한, 작업 이나 프로세스 번호 등을 포함하는 회계 정보와 특별한 입출력 요구,
이 프로세스에 할당된 입출력 장치 등을 포함하는 입출력 상태 정보를 말합니다.
CPU 스케줄링 정보
프로세스의 우선순위, 스케줄링 큐에 대한 포인터, 그리고 다른 스케줄링 매개 변수들을 포함합니다.
환형대기(Circular Wait)
프로세스간의 환형 사슬이 존재해서 이를 구성하는 각 프로세스는 사슬 내의 다음에
있는 프로세스가 요구하는 하나 또는 그 이상의 자원을 갖고 있습니다.
즉, 프로세스의 집합{p0, p1, p2, …, pn}에 있어서 p0는 p1에 할당된 자원을, pi는
pi+1에 할당된 자원을, 그리고 pn은 p0에 할당된 자원을 요청하며 대기합니다.
상호배제(Mutual Exclusion)
공유할 수 없는 자원, 즉 한번에 하나의 프로세스만이 독점할 수 있는 자원을 하나 이상
가지고 있는 경우를 말합니다. 공유될 수 없는 자원이란 프린터와 같이 결코 여러
프로세스가 동시에 사용할 수 없는 자원을 의미합니다.
반면에 공유할 수 있는 자원은 상호배제적인 액세스를 요구하지 않기 때문에 교착
상태가 일어나지 않습니다. 예를 들어 읽기 전용(read-only) 파일과 같은 자원은
동시에 몇 개의 프로세스라도 공유할 수 있습니다. 따라서 프로세스는 공유 자원을
액세스하기 위해 대기할 필요가 없으므로 교착 상태가 일어나지 않습니다.
점유와 대기(Hold and Wait)
프로세스가 자신이 점유한 자원을 해제하지 않은 상태에서 다른 프로세스가 점유한
자원이 할당되기만을 기다리는 상태를 말합니다.
비선점(Non-Preemption)
할당된 자원을 프로세스가 모두 사용하기 전에는 그 프로세스로부터 자원을 강제로
빼앗을 수 없고, 그 자원을 점유하고 있는 프로세스가 끝나야 그 자원이 해제되는
상태를 말합니다.
방법1
만일 어떤 자원을 이미 할당 받은 프로세스가 또 다른 자원을 요청했는데 그것을
즉시 사용할 수 없는 상황이라면 현재 할당되었던 모든 자원을 선점시킵니다.
즉, 이 모든 자원은 묵시적으로 해제됩니다.
선점된 자원은 그 프로세스가 기다리고 있는 자원들의 리스트에 추가시키고,
프로세스는 그 리스트 내의 모든 자원을 얻을 경우에만 다시 시작할 수 있도록
합니다.
방법2
만일 프로세스가 어떤 자원을 요청하면 먼저 그 자원의 가용 여부를 조사하여 가용
상태이면 할당합니다. 그러나 바로 할당할 수 없는 상태이면 그 자원이 다른 자원을
기다리고 있는 프로세스에 할당되어 있는지를 조사합니다. 만일 그렇다면 대기
상태인 프로세스로부터 자원을 선점하여 요청한 프로세스에게 할당해 줍니다.
자원이 가용 상태가 아니거나 대기 상태인 프로세스에 의해 소유되고 있으면 요청한
프로세스는 반드시 대기해야 합니다. 대기 상태일 경우 다른 프로세스가 자신의
자원을 요구할 때는 그 자원은 선점되게 됩니다.
대기 상태에서 자신의 자원이 강제 해제된 프로세스는 기다리던 자원을 할당
받았을 때 강제 해제된 자원을 다시 요청하여 할당 받은 후에 작업을 수행하게
됩니다.
방법1
프로세스는 자원을 항상 오름차순으로 요청하도록 하는 것입니다.
프로세스는 초기에 어떤 자원 ri를 지닐 수 있습니다. 그 후에는 반드시 F(rj) > F(ri)인
경우에 한해서만 rj를 요청할 수 있습니다. 만약 같은 형태의 여러 개의 자원들이
필요하게 되면, 이들 모두에 대해 단 한 번의 요구만 문제 삼습니다.
프로세스 오름차순 요청의 예
방법2
대안으로서 CPU가 자원 rj 형태를 요구할 때마다 F(ri) ≥ F(rj)인 자원 ri는 이미
해제되어 있어야 합니다. 이 방법이 적용되면 환형 대기 상태는 결코 발생하지
않습니다.
가령 환형 대기가 존재한다고 합시다. ({p0, p1, …, pn}의 프로세스에 대해 pi는
pi+1이 지닌 ri를 기다리고 있으며, pn은 p0이 지닌 r0를 기다리고 있습니다.
프로세스 pi+1은 자원 ri를 소유하고 있으며, 자원 ri+1을 요청하고 있기 때문에 모든
i에 대하여 F(ri) < F(ri+1) 입니다. F(r0) < F(r1) <, …, F(rn) < F(r0)을 의미하게
되고, F(r0) < F(r0)가 성립하게 됩니다. 그러나 이것은 모순이며 따라서 환형 대기는
발생할 수 없음을 알 수 있습니다.
방법1
교착 상태에 빠진 모든 프로세스들을 중지(kill)시키는 방법이 있습니다.
임의의 프로세스를 종료 시키는 것은 쉽지가 않습니다.
만약 프로세스가 파일을 갱신 중이었다면, 그 프로세스를 중도에 종료시키는 것은 파일을
부정확한 상태에 있게 만들게 됩니다. 마찬가지로 프로세스가 프린터로 자료를 출력
중이었다면, 시스템은 다음 작업의 출력이 이루어지기 전에 프린터의 상태를 올바르게
해주어야 합니다.
방법2
교착 상태에 있는 하나 이상의 프로세스들로부터 몇 개의 자원을
선점(preemption)시키는 방법이 있습니다. 프로세스로부터 자원을 선점한다면,
그 프로세스를 어떤 상태로 놓을 것인지를 결정해야 합니다. 분명한 것은 정상적 수행을
계속할 수 없다는 것이며, 따라서 그 프로세스는 어떤 필요한 자원을 잃어버리게 됩니다.
그리고 그 프로세스를 안전한 상태로 되돌려 놓아야 하며, 그 상태로부터 재시작해야
합니다.
'Server > Linux ' 카테고리의 다른 글
5장. UNIX의 개요 및 구조 (0) | 2013.06.25 |
---|---|
4장. 보조기억장치 및 파일관리 (0) | 2013.06.25 |
3장. 메모리 관리 (0) | 2013.06.25 |
2장. 프로세스 관리 - 2 (0) | 2013.06.25 |
1장. 운영체제의 개요 (0) | 2013.06.25 |