부가 제목 추가
지난 시간은 프로세스에 대한 내용으로 스레드(코드, 데이터, 힙 공유 | 스택영역 비공유), 프로세스 상태전이도(Dispatch, Time Run Out, wake up 등), 프로세스 스케줄링(선점(RR, SRT, MLQ, MLFQ),비선점(FCFS, SJF, HRN, 우선순위, 기한부)에 대해 배웠습니다. 기아현상과 그를 해결하는 에이징현상을 기억하셔야합니다.
이번 시간에는 두개 이상의 프로세스를 이용하는 병행프로세스에 대한 내용입니다. 공유자원을 쓸 때 서로 엉키거나 문제가 발행하는 것을 교착상태라고 하며, 이를 해결하기위한 방식들이 있습니다. 상호배재, 점유대기, 비선점, 환형대기는 꼭 기억해주셔야합니다.
목차
병행프로세스란?
병행 프로세스(Concurrent Processes)는 동시에 여러 작업이 수행되는 프로세스를 가리킵니다. 이러한 프로세스들은 여러 작업이 동시에 진행되므로 시스템의 자원을 효율적으로 활용할 수 있습니다.
하지만 병행 프로세스를 관리하는 것은 몇 가지 문제점을 초래할 수 있습니다.
문제점과 해결책
1. 경쟁 상태 (Race Conditions)
여러 프로세스가 공유 자원에 동시에 접근할 때 발생합니다. 이는 예기치 않은 결과를 초래할 수 있습니다.
해결책: 상호 배제(Mutual Exclusion)를 통해 공유 자원에 대한 접근을 제어합니다. 세마포어(Semaphores), 뮤텍스(Mutex), 모니터(Monitor) 등의 동기화 메커니즘을 사용하여 공유 자원에 대한 접근을 제어합니다.
2. 교착 상태 (Deadlocks)
둘 이상의 프로세스가 서로가 가지고 있는 자원을 대기하고 있는 상태로 빠지게 되는 현상입니다.
해결책: 교착 상태를 방지하기 위해 교착 상태 발생 조건을 방지하거나 회피하는 방법을 사용합니다. 예를 들어, 자원 할당 그래프를 이용하여 교착 상태를 예방하거나 교착 상태를 발견하고 복구할 수 있는 알고리즘을 구현합니다.
3. 우선순위 역전 (Priority Inversion)
낮은 우선순위를 가진 프로세스가 고 우선순위 프로세스가 필요로 하는 자원을 점유하여 해당 자원을 기다리는 고 우선순위 프로세스가 대기하는 현상입니다.
해결책: 우선순위 역전을 방지하기 위해 우선순위 상속(Priority Inheritance)이나 우선순위 상승(Priority Boosting) 기법을 사용합니다. 이러한 방법을 통해 낮은 우선순위의 프로세스가 고 우선순위 프로세스가 필요로 하는 자원을 사용할 수 있도록 합니다.
병행프로세스 문제 해결책
임계 구역 (Critical Section)
오직 하나의 프로세스만 들어올 수 있게 하는 방식
프로세스가 공유 자원에 접근하는 코드 영역을 임계 구역이라고 합니다.
임계 구역에 대한 안전한 접근을 보장하기 위해 상호 배제(Mutual Exclusion) 기법을 사용합니다.
상호배재 (Mutual Exclusion)
임계 구역을 하기 위한 기법
여러 프로세스가 동시에 공유 자원에 접근하지 못하도록 하는 메커니즘입니다.
세마포어(Semaphore), 뮤텍스(Mutex), 모니터(Monitor) 등의 동기화 기법을 사용하여 상호 배제를 구현합니다.
- 데커의 알고리즘 (Dekker's Algorithm): 두 개의 프로세스가 공유 자원을 접근할 때 경쟁 상태를 피하기 위한 상호 배제 알고리즘입니다. 상호 배제를 위해 flag 변수를 사용하며, 번갈아 가며 임계 구역에 진입하도록 합니다.
- 피터슨의 알고리즘 (Peterson's Algorithm): 두 개의 프로세스가 임계 구역에 진입할 때 경쟁 상태를 피하기 위한 상호 배제 알고리즘입니다. turn 변수와 flag 배열을 사용하여 임계 구역에 진입할 프로세스를 결정합니다.
- 다익스트라 알고리즘 (Dijkstra's Algorithm): 데드락을 예방하기 위한 알고리즘 중 하나입니다. 자원 할당 그래프를 이용하여 교착 상태 발생 조건을 확인하고, 안전한 상태로만 자원을 할당합니다.
- 램포트의 알고리즘 (Lamport's Algorithm): 병행 프로세스가 메시지를 교환하여 동기화를 달성하는 분산 시스템에서 사용되는 알고리즘입니다. 논리적 시계를 사용하여 이벤트의 발생 순서를 정의하고, 이를 기반으로 동기화를 관리합니다.
동기화 기법
동기화 기법은 다수의 프로세스나 스레드가 공유 자원에 동시에 접근할 때 발생하는 문제를 해결하기 위한 메커니즘입니다. 동기화 기법은 여러 프로세스나 스레드 간의 상호작용을 조절하고, 임계 구역(critical section)에서의 충돌을 방지하여 일관성을 유지합니다.
동기화 기법 | 설명 |
세마포어 (Semaphore) |
세마포어는 동기화와 상호 배제를 위한 정수 변수로, wait(P)와 signal(V) 두 가지 연산을 제공합니다. 이를 통해 임계 구역에 대한 접근을 제어할 수 있습니다. 세마포어는 바쁜 대기(busy waiting)가 발생할 수 있으며, 오버헤드가 발생할 수 있습니다. 일종의 수신호라고 보면됨 다익스트라가 제안 |
모니터 (Monitor) |
모니터는 고급 언어에서 제공하는 동기화 메커니즘으로, 객체와 객체에 대한 메서드를 함께 캡슐화하여 임계 구역에 대한 접근을 제어합니다. 모니터 내에서는 오직 한 프로세스만이 실행될 수 있으며, 다른 프로세스들은 대기 상태에 있습니다. 이를 통해 바쁜 대기와 오버헤드를 최소화할 수 있습니다. 프로그램 언어 수준의 동시성 제안 |
교착상태란?
교착 상태(Deadlock)는 상호배재에 의해 나타나는 문제점으로 여러 프로세스가 자원을 점유한 상태에서 서로 다른 프로세스의 자원 점유를 요구하며 무한정 기다리는 상태
컴퓨터 과학에서 여러 프로세스나 스레드가 상호 작용하며 발생하는 한 종류의 비정상적인 상태입니다.
교착 상태에서는 각 프로세스나 스레드가 서로의 자원을 기다리며 무한히 대기하는 상황이 발생합니다.
교착상태 발생조건
상점은 환률이 반영이 안돼(상점비환)
- 상호 배제(Mutual Exclusion)
- 자원은 한 번에 하나의 프로세스만 사용할 수 있어야 합니다.
- 점유와 대기(Hold and Wait)
- 프로세스가 최소한 하나의 자원을 점유한 채 다른 자원을 기다리고 있어야 합니다.
- 비선점(No Preemption)
- 다른 프로세스가 사용 중인 자원을 강제로 빼앗아 사용할 수 없어야 합니다.
- 환형 대기(Circular Wait)
- 두 개 이상의 프로세스나 스레드가 자원을 원형으로 대기하는 상황이 발생해야 합니다.
- 서로 계속 요청만 하는 상태
교착상태 해결방법
- 예방 기법(Prevention)
- 교착 상태가 발생하지 않도록 조건을 미리 방지하는 방법입니다.
- 발생 조건 중 하나 이상을 제거하여 교착 상태를 예방합니다.
- 회피 기법(Avoidance)
- 교착 상태가 발생할 가능성을 감지하고 회피하는 방법입니다.
- 안전 상태로만 이동하는 요구를 허용하여 교착 상태를 회피합니다.
- 은행원 알고리즘(Banker's Algorithm)
- 발견 기법(Detection)
- 교착 상태가 발생했을 때 이를 감지하고 처리하는 방법입니다.
- 주기적인 교착 상태 검사를 수행하여 발견된 경우 회피하거나 회복합니다.
- 회복 기법(Recovery)
- 교착 상태가 발생했을 때 시스템을 회복하는 방법입니다.
- 교착 상태에 놓인 프로세스나 스레드를 종료하거나 자원을 선점하여 회복합니다.
'정보처리기사' 카테고리의 다른 글
1. 네트워크 기본 - 4과목 네트워크 (2) | 2024.04.08 |
---|---|
6. 디스크 스케줄링 & 환경변수 - 3과목 운영체제 (1) | 2024.04.07 |
[정처기 실기] 4. 프로세스 - 3과목 운영체제 (0) | 2024.04.07 |
3. 가상기억 장치 - 3과목 소프트웨어 (0) | 2024.04.06 |
[정보처리기사] 2. 메모리 관리 - 3과목 운영체제 (0) | 2024.04.06 |
댓글