본문 바로가기

개인공부/혼공학습단 13기 - 컴운

혼공학습단 13기- 5주차

@ 4주차 Keyword

 

 

프로그램 실행에 필요한 요소를 시스템 자원 또는 자원이라고 함

운영체제는 메모리 내 커널영역에 적재됨

운영체제는 프로세스들이 사용할 자원에 접근하고 조작하는 것으로 필요한 자원을 할당함

 

운영체제가 프로세스에 대해 CPU 자원을 배분하는 것을 CPU 스케줄링이라 하고, 다양한 알고리즘들이 적용되지만 그중 다단계 피드백 큐 스케줄링이 가장 일반적임


12. 프로세스 동기화

12.1. 동기화란

- 동시다발적으로 협력하여 실행되는 프로세스들은 실행 순서와 자원의 일관성을 보장하기 위해 동기화 되어야함

 

12.1.1. 동기화의 의미

- 동시다발적으로 실행되는 많은 프로세스는 서로 데이터를 주고 받으며, 협력하며 실행될 수 있음

- 협력적으로 실행되는 프로세스들은 올바른 실행을 위해 동기화가 필수임

- 프로세스 동기화란 프로세스들 사이의 수행 시기를 맞추는 것을 의미함
   ○ 실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기

   ○ 상호 배제 : 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기

 

12.1.2. 생산자와 소비자 문제

- 물건을 계속해서 생산하는 프로세스인 생산자와 물건을 계속해서 소비하는 프로세스인 소비자로 이루어짐

- 생산자와 소비자는 동시에 실행되는 스레드가 될 수도 있음

- 코드 문맥상 정상적이어도, 동기화가 되지 않은 상태에서 접근해서는 안되는 자원에 동시에 접근하여 발생하여 문제 발생함

 

12.1.3. 공유 자원과 임계 구역

- 동시에 실행되는 프로세스들은 전역변수라는 공동 자원을 사용할 때, 이러한 자원을 공유 자원이라고 함

- 공유 자원은 전역 변수, 파일, 입출력장치, 보조기억 장치가 될 수 있음

- 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역임계 구역이라고 함

1) 두 개 이상의 프로세스가 임계 구역에 진입하고자 하면, 둘 중 하나는 대기해야 함

2) 임계 구역에 먼저 진입한 프로세스의 작업이 마무리되면 그제서야 비로소 기다렸던 프로세스가 임계 구역에 진입함

 

- 잘못된 실행으로 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제가 생기는 것을 레이스 컨디션 이라고함

- 레이스 컨디션이 발생하면, 데이터의 일관성이 깨지는 문제가 발생함

- 상호 배제를 위한 동기화는 레이스 컨디션이 발생하지 않도록 두 개 이상의 프로세스가 임계 구역에 동시에 접근 불가하도록 함

- 운영체제는 임계 구역 문제를 3가지 원칙 하에 해결함

1) 상호 배제 : 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 임계 구역에 들어올 수 없음

2) 진행 : 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하고자 하는 프로세스는 들어갈 수 있어야 함

3) 유한 대기 : 한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스는 언젠가는 임계 구역에 들어올 수 있어야 함

 

12.2. 동기화 기법

12.2.1. 뮤텍스 락

- 뮤텍스 락은 동시에 접근해서는 안 되는 자원에 동시에 접근하지 않도록 만드는 도구 → 상호 배제를 위한 동기화 도구

- 뮤텍스 락의 단순한 형태는 하나의 전역 변수와 두 개의 함수로 구현할 수 있음

예시)
자물쇠 역할 : 프로세스들이 공유하는 전역변수 lock
임계 구역을 잠그는 역할 : acquire 함수
임계 구역의 잠금을 해제하는 역할 : release 함수
- acquire 함수는 프로세스가 임계 구역에 진입하기 전에 호출하는 함수
→ 임계 구역이 잠겨 있으면 임계 구역이 열릴 때까지 임계 구역을 반복적으로 확인하고, 임계 구역이 열려 있다면 임계 구역을 잠금
- release 함수는 임계 구역에서 작업이 끝나고 호출하는 함수 → 현재 잠긴 임계 구역을 열어주는 함수

acquire();
// 임계 구역, 프로세스 작업
release();

 

- 이렇게 구현되면, acquire 함수는 락을 획득할 때까지 무작정 기다리다가 락을 획득하면 프로세스 작업하게 되고 작업 후 release 함수에서 락을 반환함

- acquire에서 쉴 새 없이 반복하여 확인하는데, 이러한 대기 방식을 바쁜 대기라고 함

 

12.2.2. 세마포

- 세마포는 뮤텍스 락과 비슷하지만, 조금 더 일반화된 방식의 동기화 도구임

- 뮤텍스 락은 하나의 공유 자원에 접근하는 프로세스를 상정한 방식이지만, 세마포는 공유 자원이 여러 개 있는 상황에서도 적용이 가능한 동기화 도구임

- 세마포에는 이진 세마포, 카운팅 세마포가 있지만 이진 세마포는 뮤텍스 락과 비슷하여 제외

- 세마포는 뮤텍스 락과 비슷하게 하나의 변수와 두 개의 함수로 단순하게 구현할 수 있음

예시)
- 임계 구역에 진입할 수 있는 프로세스의 개수를 나타내는 전역변수 S
- 임계 구역에 들어가도 좋은지, 기다려야 할지를 알려주는 wait 함수
- 임계 구역 앞에서 기다리는 프로세스에 가도 된다고 신호를 주는 signal 함수

wait()
// 임계 구역, 프로세스 작업
signal()

○ wait 함수
- 임계 구역에 진입할 수 있는 프로세스 개수가 0개라면 실행하지 않음
- 사용할 수 있는 자원(S)가 있는지 확인하여, 있다면(S>0) S를 1 감소시키고 임계 구역 진입

○ signal 함수
- 임계 구역에서의 작업을 마친 뒤 S를 1 증가시킴

 

- 뮤텍스 락과 동일하게, 사용할 수 있는 공유 자원이 없는 경우 프로세스는 무한히 반복하며 S의 값을 확인해야 함

- 이렇게 바쁜 대기를 반복하는 것은 CPU 주기를 낭비를 초래함

- 세마포에서는 프로세스 상태를 대기 상태로 만들고, 프로세스의 PCB를 세마포를 위한 대기 큐에 넣음

→ 다른 프로세스가 임계 구역에서의 작업이 끝나고 signal 함수를 호출하면, signal 함수는 대기 중인 프로세스를 대기 큐에서 제

→ 프로세스 상태를 준비 상태로 변경한 뒤 준비 큐로 옮김

 

- 세마포를 이용하여 동시에 실행되는 프로세스의 실행 순서도 마음대로 제어할 수 있음

- 세마포의 변수 S를 0으로 먼저 실행할 프로세스 뒤에 signal 함수, 다음 실행할 프로세스 앞에 wait 함수를 붙이면됨

 

12.2.3. 모니터

- 세마포는 훌륭한 프로세스 동기화 도구이지만, 사용하기가 조금 불편함 → 일일이 wait, signal 함수를 명시 해야되기에

- 최근에 등장한 도구가 모니터임 → 사용자가 사용하기에 훨씬 편리한 도구

1) 공유 자원과 공유 자원에 접근하기 위한 인터페이스(통로)를 묶어 관리
2) 프로세스는 반드시 인터페이스를 통해서만 공유 자원에 접근하도록 함

- 이를 위해 모니터를 통해 공유 자원에 접근하고자 하는 프로세스를 큐에 삽입하고, 큐에 삽입된 순서대로 하나씩 공유 자원을 이용

→ 인터페이스에 접근하기 위한 큐를 만들고, 모니터 안에 항상 하나의 프로세스만 들어오도록 함

→ 상호 배제를 위한 동기화를 제공

 

- 모니터는 세마포와 마찬가지로 실행 순서 제어를 위한 동기화도 제공함

- 특정 조건을 바탕으로 프로세스를 실행하고 일시 중단하기 위해 모니터는 조건 변수를 사용

- 조건 변수는 프로세스나 스레드의 실행 순서를 제어하기 위해 사용하는 특별한 변수임, wait과 signal 연산 수행 가능

- 모니터 진입을 위한 wait과 다르게,
호출한 프로세스의 상태를  대기 상태로 변환 → 일시적으로 조건 변수에 대한 대기 큐에 삽입

- 모니터에 이미 진입한 프로세스의 실행 조건이 만족될 때까지 잠시 실행이 중단되어 기다리기 위해 만들어진 큐임 (360p)

- 모니터는 조건 변수를 이용하여 프로세스 실행 순서 제어를 위한 동기화를 제공

1) 특정 프로세스가 아직 실행될 조건이 되지 않았을 때에는 wait를 통해 실행을 중단

2) 특정 프로세스가 실행될 조건이 충족되었을 때에는 signal을 통해 실행을 재개


13. 교착 상태

13.1. 교착 상태란

- 두 개 이상의 프로세스가 각자 가지고 있는 자원을 무작정 기다리면, 어떠한 프로세스도 더이상 진행할 수 없는 교착 상태가 됨

 

13.1.1. 식사하는 철학자 문제

- 일어나지 않을 사건을 기다리며 진행이 멈춰 버리는 현상을 교착 상태라고 함

- 교착 상태를 해결하기 위해서는
1) 교착 상태가 발생했을 때의 상황을 정확히 표현해 봄

2) 교착 상태가 일어나는 근본적인 이유에 대해서 알아야함

 

13.1.2. 자원 할당 그래프

- 교착 상태는 자원 할당 그래프를 통해 단순하게 표현할 수 있음

- 어떤 프로세스가 어떤 자원을 사용하고 있고, 다른 어떤 프로세스가 어떤 자원을 기다리고 있는지를 표현한 그래프임

- 아래의 조건을 통해 그래프를 그림

1 프로세스는 원으로 자원의 종류는 사각형으로 표현
2 사용할 수 있는 자원의 개수는 자원 사각형 내에 점으로 표현
ex) 하드 디스크가 세 개 있는 경우 자원의 종류는 하드 디스크 1개, 사용가능한 디스크는 3개
3 프로세스가 어떤 자원을 할당받아 사용 중이라면 자원에서 프로세스를 향해 화살표를 표시
4 프로세스가 어떤 자원을 기다리고 있다면 프로세스에서 자원으로 화살표를 표시

 

- 교착 상태가 발생하면, 자원 할당 그래프가 원의 형태를 가지게 됨

 

13.1.3. 교착 상태 발생 조건

- 상호 배제, 점유와 대기, 비선점, 원형 대기  조건에서 교착 상태가 발생하게 됨

- 4개의 조건 중 하나라도 만족하지 않는다면 교착 상태가 발생하지 않지만, 모두 만족될 때 교착 상태가 발생할 수 있음

 

1) 상호 배제

- 교착상태가 발생한 원인은 해당 자원을 한 번에 하나의 프로세스만 이용 가능했기 때문

- 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없는, 상호 배제 상황에서 교착 상태가 발생할 수 있음

 

2) 점유와 대기

- 어떠한 자원을 할당받은 상태에서 다른 자원을 할당 받기를 기다린다면 교착 상태가 발생할 수 있음

- 자원을 할당받은 상태에서 다른 자원을 할당받기를 기다리는 상태를 점유와 대기 상태임

 

3) 비선점

- 비선점 자원은 그 자원을 이용하는 프로세스의 작업이 끝나야만 비로소 이용할 수 있음

- 어떤 프로세스도 다른 프로세스의 자원을 강제로 빼앗지 못했기 때문에 교착 상태가 발생할 수 있음

 

4) 원형 대기

- 프로세스들과 프로세스가 요청 및 할당받은 자원이 원의 형태를 이루었기 때문

- 자원 할당 그래프가 원의 형태로 자원을 대기하는 것을 원형 대기라고 하며, 교착 상태가 발생할 수 있음

 

 

13.2. 교착 상태 해결 방법

13.2.1. 교착 상태 예방

- 교착 상태를 예방하는 방법은 상기 4가지 조건 중 하나라도 충족을 못시키게 하면 됨

 

1) 상호 배제 제거?

- 상호 배제를 제거하면 모든 자원을 공유하게 된다는 말과 동일 → 현실적으로 힘듦

 

2) 점유와 대기 제거?

- 점유와 대기를 없애면 운영체제는 특정 프로세스에 자원을 모두 할당하거나, 아예 할당하지 않는 방식으로 배분

- 이론적으로 핵결가능하지만, 단점으로 자원의 활용률이 낮아질 우려가 있음

→ 당장 자원이 필요해도 기다릴수 밖에 없는 프로세스와 사용되지 않으면서 오랫동안 할당되는 자원을 다수 양산

- 점유와 대기를 금지하면 많은 자원을 사용하는 프로세스들이 불리해짐

→ 많은 자원을 사용할 타이밍을 확보하기 어렵기 때문

 

3) 비선점 조건 제거?

- 선점하여 사용할 수 있는 일부 자원에 대해서는 효과적임

- 하지만 모든 자원에 대해 선점 가능한 것이 아니며, 한 프로세스의 작업이 끝날 때까지 다른 프로세스가 기다려야 하는 자원도 있음

 

4) 원형 대기 조건 제거?

- 원형 대기를 없애기 위해, 모든 자원에 번호를 붙이고 오름차순으로 자원을 할당하면 원형 대기는 발생하지 않음

- 원형 대기를 제거하여 교착 상태를 예방하는 방식은 앞의 세가지 조건에 비해 현실적이고 실용적임

- 하지만, 시스템에 존재하는 모든 자원에 번호를 붙이는 것은 어렵고, 어떤 번호를 붙이는지에 따라 특정 자원의 활용율이 떨어짐

 

 

13.2.2. 교착 상태 회피

- 교착 상태 회피는 교착 상태가 발생하지 않을 정도만 조심 조심 자원을 할당하는 방식

- 교착 상태를 한정된 자원의 무분별한 할당으로 인해 발생하는 문제로 간주함

- 프로세스들에 배분할 수 있는 자원의 양을 고려, 교착 상태가 발생하지 않을 정도의 양만큼만 자원을 배분 → 교착 상태 회피

- 교착 상태가 발생하지 않고 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태를 안전 상태라 함

- 교착 상태가 발생할 수도 있는 상황을 불안정 상태라고 함

- 안전 순서열은 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서를 의미

- 안전 순서열대로 프로세스들에 자원을 배분하여 교착 상태가 발생하지 않는 상태를 안전 상태라 함

- 불안전 상태는 안전 순서열이 없는 상황임

- 시스템이 불완전 상태에 놓이면 교착 상태가 발생할 수 있는 위험이 있음

 

13.2.3. 교착 상태 검출 후 회복

- 교착 상태 예방과 회피는 교착 상태 발생을 막기 위한 노력임

- 교착 상태 검출 후 회복은 교착 상태 발생을 인정하고 사후 조치하는 방식임

- 검출 후 회복 방식에서 운영체제는 프로세스의 자원을 요구할 때마다 모두 할당하며, 교착 상태 발생 여부를 주기적으로 검사함

 

1) 선점을 통한 회복

- 선점을 통한 회복은 교착 상태가 해결될 때까지 한 프로세스씩 자원을 몰아주는 방식임

 

2) 프로세스 강제 종료를 통한 회복

- 프로세스 강제 종료를 통한 회복은 가장 단순하면서 확실한 방식임

- 운영체제는 교착 상태에 놓인 프로세스를 모두 강제 종료 가능, 교착 상태가 없어질 때까지 한 프로세스씩 강제 종료 가능

- 전자는 가장 확실한 방법이지만, 작업 내역을 잃게 될 가능성이 있음

- 후자는 작업 내역을 잃는 프로세스를 최소화 할 수 있지만 교착 상태가 없어졌는지 여부를 확인하는 과정에서 오버헤드를 야기

 

- 이외에 교착 상태를 아예 무시하는 방법으로 타조 알고리즘이 있음

- 완벽을 추구하는 과학자나 수학자 입장에서는 납득 할 수 없겠지만, 최대 효율을 추구하는 엔지니어들에게는 적합할 때도 있음

 

 


# 진도 기본 숙제(필수) 추가 숙제(선택)
5주차
(2/10 ~ 2/16)
Chapter 12 ~ 13 p. 363의 확인 문제 1번 풀고 인증하기 Ch.12(12-1) 임계 구역, 상호 배제 개념을 정리하기

 

1. 뮤텍스 락과 세마포에 대한 설명으로 옳지 않는 것?

- 세마포를 이용하면 반드시 바쁜 대기를 해야한다 X → 반드시 바쁜 대기를 할 필요 없음

 

2. 임계 구역, 상호 배제 개념 정리

- 임계 구역 : 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역

- 상호 배제 : 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 임계 구역에 들어올 수 없음

'개인공부 > 혼공학습단 13기 - 컴운' 카테고리의 다른 글

혼공학습단 13기 마무리  (1) 2025.02.25
혼공학습단 13기- 6주차  (0) 2025.02.25
혼공학습단 13기- 4주차  (1) 2025.02.11
혼공학습단 13기- 3주차  (0) 2025.02.04
혼공학습단 13기- 2주차  (0) 2025.02.04