본문 바로가기
IT

컴퓨터 운영 체제 프로세스 관리

by EDMBLACKBOX 2021. 2. 28.
728x90

프로세스 관리

초기 컴퓨터 시스템은 한 번에 하나의 프로그램만 수행하는 단일 프로그래밍 시스템으로, 하나의 프로그램이 모든 시스템 자원을 사용했으나 오늘날 컴퓨터 시스템은 다수의 프로그램을 주기억장치에 적재하여 병행 수행하기 때문에 여러 개의 프로그램이 시스템 자원을 공유합니다. 기술적 발전에 따라 개별 프로그램을 제어할 필요가 발행했고, 프로세스(Process) 개념이 등장하기 시작했습니다.

 

프로세스의 개념

프로세스는 1960년대 중반 멀틱스(Multics) 운영 체제에서 처음 사용되었으며, IBM 운영 체제에서는 테스크(Task)라고 부릅니다. 프로세스의 정의는 일반적으로 실행 중인 프로그램이라는 개념으로 가장 많이 사용됩니다.

 

프로세스의 상태

컴퓨터 시스템 내에 존재하는 프로세스는 생성 후 종료될 때까지 다양한 조건에 의해 여러 가지 상태로 바뀝니다.
프로세스의 상태 전이도를 간단하게 요약하면 초기 - 준비 - 실행 중 혹은 대기 - 종료로 나누어집니다.

초기(New State) : 프로그램이 활성화 프로세스로 변환된 상태입니다.
준비(Ready State) : 프로세스가 CPU를 할당받기 위해 준비 큐(Ready Queue)에서 기다리는 상태입니다. CPU 스케줄러는 준비 상태의 프로세스 중 하나를 선택하여 CPU를 할당하는데 이를 디스패치(Dispatch)라고 합니다.
실행(Running State) : 프로세스가 CPU를 차지하고 실행하는 상태입니다. 운영 체제는 프로세스의 CPU 사용 시간을 지정하는데, 이를 시간 할당량(Time Slice, Time Quantum)이라고 합니다. 시간 할당량은 특정 프로세스의 CPU 독점을 방지하고 시분할과 다중 프로그래밍을 원활하게 하기 위해 설정합니다. 시간 할당량이 설정된 경우 실행 중 시간 할당량이 초과되면 프로세스는 CPU를 양도하고 준비 큐의 맨 뒤로 이동합니다.
대기(Blocked State) : CPU를 차지한 프로세스가 실행 중에 입출력 처리와 같은 사건이 발생하면 CPU를 양도하고 입출력 처리가 완료될 때까지 대기 큐에서 기다리는 상태입니다. 입출력 완료 등의 신호가 대기 중인 프로세스에게 전달되면 준비 상태로 전이됩니다.
종료(Exit State) : 프로세스가 실행을 완료한 상태입니다. 해당 프로세스는 시스템에서 제거되며 프로세스에 관련된 프로세스 제어 블록(PCB : Process Control Block)도 삭제됩니다.

 

프로세스 제어 블록(PCB : Process Control Block)

프로세스는 프로그램과 프로세스 제어 블록으로 구성됩니다. PCB는 프로세스에 대한 정보를 운영 체제에 제공하는 자료 구조로 주기억장치에 저장됩니다. 프로세스가 생성될 때 만들어지므로 모든 프로세스는 별도의 PCB를 보유하며, 프로세스가 실행을 완료하면 PCB도 삭제됩니다. 운영 체제가 CPU를 다른 프로세스에게 넘겨줄 때 실행 중인 프로세스의 모든 정보는 PCB에 저장되며, 프로세스를 다시 실행할 때는 PCB에 저장된 정보를 활용합니다. 즉 프로세스의 상태가 변경되면 PCB의 내용도 함께 변경되는 것입니다.

 

병행 프로세스(Concurrent Process)

프로세스는 상황에 따라 다른 프로세스와 협력하면서 작업을 진행할 때가 있습니다. 두 개 이상의 연관된 프로세스가 동시에 실행되는 것이 바로 병행 프로세스라고 합니다. 병행 프로세스는 독립적으로 실행되거나 다른 프로세스와 협력하여 실행됩니다. 다른 프로세스와 데이터를 공유하지 않으면 독립적인 프로세스고, 다른 프로세스들에게 영향을 주거나 받으면 협력적인 프로세스가 됩니다.

두 개 이상의 프로세스들이 병행 처리 상태에 있으면 예측 불가능한 결과가 발행할 수 있는데, 이러한 오류를 방지하기 위해서 동기화, 상호 배제, 임계 구역 기법을 사용합니다.

동기화(Synchronization) : CPU는 두 개 이상의 프로세스를 동시에 처리할 수 없기 때문에 프로세스들의 처리 순서를 결정하는 기법입니다. 프로세스 A가 데이터를 프로세스 B에 전달하고, 프로세스 B가 그 데이터를 활용할 때, 두 프로세스는 데이터의 송수신 관계에 의해 실행 순서가 결정됩니다.
상호 배제(Mutual Exclusion) : 하나의 프로세스가 공유 자원을 사용하는 동안 다른 프로세스의 공유 자원 사용을 금지하는 기법입니다. 프로세스 A가 공유 자원을 사용하고 있을 때 프로세스 B가 해당 자원을 요구한다면 프로세스 B는 공유 자원이 반환될 때까지 기다려야 합니다.
임계 구역(Critical Section, Critical Region) : 병행 프로세스가 공유 자원을 사용하는 코드 영역을 임계 구역(영역)이라고 합니다. 즉 프로세스가 공유 자원을 참조하면 그 프로세스는 임계 구역 내에 있다고 합니다. 하나의 프로세스가 임계 구역 내에 존재하면 다른 프로세스들은 임계 구역에 진입할 수가 없도록 제어하는 기법입니다.

 

교착 상태(Deadlock)

교착 상태는 다중 프로그래밍 시스템에서 하나 이상의 프로세스가 절대 일어나지 않을 특정 사건을 기다리고 있는 상태를 의미합니다. 특정 사건이란 시스템 자원의 할당과 해제를 말합니다. 다수의 사용자 프로세스들에 의해 공유되는 자원이 특정 프로세스에 할당되어 독점적으로 사용되고 있는 경우에 다른 프로세스가 그 자원을 요구하면 교착 상태가 발생해 작업을 완료할 수 없습니다. 아래의 이미지는 OS 운영 체제의 교착 상태 예시입니다.

출처 : Preplnsta

리소스 1은 프로세스 2를 보유하면서 프로세스 1을 요구하고 리소스 2는 프로세스 1을 보유하면서 프로세스 2를 요구합니다. 각 프로세스는 자신의 자원은 계속 보유하면서 다른 프로세스의 자원을 요구하며, 상대방의 자원이 반환되어 자신에게 할당될 때까지 계속 기다립니다. 이러한 상황을 환형 대기(Circular Wait)라고 합니다.

 

교착 상태의 발생 조건

교착 상태에 있는 프로세스들은 절대로 실행을 완료할 수 없으며, 시스템 자원이 묶여 있어서 다른 작업을 실행할 수도 없습니다. 교착 상태는 다음과 같은 4가지 조건이 만족될 때 발생합니다.

상호 배제(Mutual Exclusion) : 오직 하나의 프로세스만이 자원을 사용할 수 있다는 것으로 다른 프로세스가 사용 중인 자원을 요구할 경우에는 그 자원이 반환될 때까지 기다려야 합니다.
보유와 대기(Hold and wait) : 어떤 프로세스가 자신에게 할당된 자원을 보유하면서 다른 프로세스가 보유하고 있는 자원을 추가로 요구하는 것으로, 해당 자원이 반환될 때까지 기다리는 상태입니다.
비선점(Nonpreemption) : 어떤 프로세스에 할당된 자원을 다른 프로세스가 강제로 선점할 수 없다는 것으로, 프로세스가 할당된 자원을 사용한 후 반환하기 전에는 회수할 수 없습니다.
환형 대기(Circular wait) : 각 프로세스가 자신에게 할당된 자원을 보유하면서 상대방의 자원을 요청하는 상태로 프로세스 자원들이 원형 상태(위 이미지와 같이)를 이룹니다.

 

교착 상태의 해결 방안

교착 상태의 해결 방안은 아래의 4가지로 분류할 수 있습니다.

교착 상태 예방(Deadlock Prevention) : 교착 상태의 발생 조건 4가지 중 하나를 제거하여 교착 상태가 발생하지 않도록 시스템을 조절합니다. 교착 상태 예방은 적절한 해결책이지만 정확한 자원 사용 정책을 제시해야 하므로 자원이 낭비될 수 있습니다.
교착 상태 회피(Deadlock Avoidance) : 시스템 운영 중 상황에 따라 교착 상태 발생 가능성을 피해 가는 방법입니다. 프로세스들의 자원 사용 정보를 파악하여 자원 사용에 대한 상황이 계속 안전 상태(Safe State)가 되도록 합니다. 교착 상태 예방 기법보다 자원을 효율적으로 사용할 수 있다는 장점이 있습니다.
교착 상태 탐지(Deadlock Detection) : 교착 상태가 발생하도록 허용한 후, 시스템 운영 중 교착 상태의 발생 여부를 판단하는 방법입니다. 교착 상태를 탐지하면 교착 상태에 관련된 프로세스와 자원을 결정합니다.
교착 상태 회복(Deadlock Recovery) : 교착 상태 탐지 후 교착 상태에 관련된 하나 이상의 프로세스를 시스템에서 제거하고, 그 프로세스에 할당된 자원을 회수해서 다른 프로세스에게 제공함으로써 교착 상태로부터 회복하는 방법입니다. 시스템에서 제거된 프로세스는 지금까지 실행한 작업 결과를 모두 잃어버리므로 처음부터 다시 시작해야 한다는 단점이 있습니다.

728x90