혼공 학습단 컴퓨터 구조+운영체제

혼공 학습 5주차 컴퓨터 구조+운영체제

gyk7 2024. 2. 5. 20:55

12-1

 

1. 동기화의 의미

프로세스 동기화 : 프로세스 사이의 수행 시기를 맞추는 것

(실행의 흐름을 갖는 것 ex) 스레드, 프로세스 는 동기화의 대상)

- 실행 순서 제어 : 프로세스를 올바른 순서대로 진행하기

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

   ex) 생산자와 소비자의 문제

 

2. 공유 자원과 임계 구역

- 공유 자원 : 동시에 실행되는 자원 

ex) 계좌 잔액 문제와 생산자 소비자 문제 - 전역변수 '잔액', '총합',

전역변수, 파일, 입출력장치, 보조기억장치

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

레이스 컨디션 : 잘못된 실행으로 인해 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제가 발생하는 경우

- 상호 배제를 위한 동기화를 위해서 지켜야 할 세가지 원칙

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

(2) 진행 : 임계 구역에 어떤 프로세스도 진입하지 않았따면 임계 구역에 진입하고자 하는 프로세스는 들어갈 수 없음.

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

(임계 구역에 들어오기 위해 무한정 대기 안됨)

 

p. 349 확인문제

(정답)

1. 실행 순서 제어

2. 상호 배제

 

(정답) 1번

여러 개의 프로세스를 동시에 실행하면 '레이스 컨디션' 발생함.

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------

12-2

동기화를 위한 대표적인 도구 : 뮤텍스 락, 세마포, 모니터

 

1. 뮤텍스 락

자물쇠 기능. 동시에 접근해서는 안 되는 자원에 동시에 접근하지 않도록 만드는 도구.

=> 상호 배제를 위한 동기화 도구

- 자물쇠 역할 : 프로세스들이 공유하는 전역 변수 lock

- 임계 구역을 잠그는 역할 : acquire 함수

- 임계 구역의 잠금을 해제하는 역할 : release 함수(lock을 false로 바꿈)

 

+ 바쁜 대기 : acquire함수. 임계 구역이 잠겨 있을 경우 프로세스가 반복적으로 lock 확인하는 것

 

 

2. 세마포

뮤텍스 락과 비슷하지만, 조금 더 일반화된 방식의 동기화 도구. 

(뮤텍스 락 - 하나의 공유 자원에 접근하는 프로세스 상정한 방식.

세마포 - 여러 개의 프로세스 기준)

- 전역변수 S : 임계 구역에 진입할 수 있는 프로세스 개수(사용 가능한 공유 자원의 개수)

- wait 함수 : 임계 구역에 들어가도 좋은지, 기다려야 할지를 알려줌.

- signal 함수 : 임계 구역 앞에서 기다리는 프로세스에 '이제 가도 좋다'고 신호를 줌.

임계 구역 진입 전후로 wait(), signal() 호출함.

 

 

3. 모니터

- 최근 등장한 동기화 기구

- 모니터를 통해 공유 자원에 접근하고자 하는 프로세스를 큐에 삽입.

큐에 삽입된 순서대로 하나씩 공유 자원을 이용하도록 함.

=> 모니터는 공유 자원을 다루는 인터페이스에 접근하기 위한 큐를 만들고, 

모니터 안에 항상 하나의 프로세스만 들어오도록 하여 (상호배제를 위한 동기화) 제공함.

+ (실행 순서 제어 위한 동기화-조건변수 사용) 제공함.

- 조건 변수로 wait, signal 연산 수행 가능.

wait : 호출한 프로세스 상태를 대기 상태로 전환하고 일시적으로 조건 변수에 대한 대기 큐에 삽입하는 연산.

 

(주의!) 

- 상호 배제를 위한 큐 : 모니터에 한 번에 하나의 프로세스만 진입하도록 하기 위해 만들어진 큐.

- 조건변수에 대한 큐(wait가 호출되어 실행이 중단된 프로세스들이 삽입되는 큐) : 모니터에 이미 진입한 프로세스의 실행 조건이 만족될 때까지 잠시 실행이 중단되어 기다리기 위해 만들어진 큐

 

 

(p.363 확인문제)

(정답 : 4번)

반드시 바쁜 대기를 할 필요는 없고, 대기 상태로 접어들게 할 수 있음.

 

(정답 : 스레드 B)

조건 변수 y에 대한 것이므로

 

(정답)

1 : 상호 배제 

2 : 실행 순서 제어 

 

13-1.

1. 교착 상태 : 일어나지 않을 사건을 기다리며 진행이 멈춰 버리는 현상

ex) 식사하는 철학자 문제 

프로세스, 스레드, 포크 : 자원 / 생각하는 행위 : 자원을 기다리는 것 / 포크: 임계 구역

 

2. 교착 상태 해결하기 위한 방법

(1) 자원 할당 그래프

① 프로세스 : 원, 자원의 종류 : 사각형으로 표현

② 사용할 수 있는 자원의 개수는 자원 사각형 내에 점으로 표현

③ 프로세스가 어떤 자원을 할당받아 사용 중이라면 자원에서 프로세스를 향해 화살표를 표시

④ 프로세스가 어떤 자원을 기다리고 있다면 프로세스에서 자원으로 화살표를 표시

교착상태 일어난 그래프 특징 : '원' 형태

 

(2) 교착 상태 발생 조건

① 상호 배제 : 해당 자원을 한 번에 하나의 프로세스만 이용 가능

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

③ 비선점 : 그 자원을 이용하는 프로세스의 작업이 끝나야만 비로소 이용 가능함.

④ 원형 대기 : 프로세스들이 원의 형태로 자원을 대기하는 것.

 

(p.374 확인문제)

(정답 : 4번)

철학자들이 동시에 식사를 하려고 하면 교착 상태 발생함.

 

(정답 : 상호 배제, 점유와 대기, 비선점, 원형 대기)

 

(정답 : 2번)

원의 형태일 때 교착 상태 발생할 위험 있음.

 

13-2.

1. 교착 상태 예방

(1)  상호 배제를 없앤다면?

모든 자원을 공유 가능하게 만들어야 함. => 현실적으로 어려움.

 

(2) 점유와 대기를 없앤다면?

특정 프로세스에 자원을 모두 할당하거나, 아예 할당하지 않은 방식으로 배분.

단점 : 자원의 활용률이 낮아질 우려 존재 

          많은 자원을 사용하는 프로세스가 불리해짐 -> 기아현상 우려.

 

(3) 비선점 조건을 없앤다면?

자원을 이용 중인 프로세스로부터 해당 자원을 빼앗을 수 있음.

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

but, 모든 자원이 선점 가능한 것 아님 - >범용성 떨어짐.

 

(4) 원형 대기 조건을 없앤다면?

모든 자원에 번호 붙이고, 오름차순으로 자원 할당하면 됨.

앞의 방법보다 현실적이고 실용적인 편. 

단점 : 모든 컴퓨터 시스템 내에 있는 자원에 번호 붙이는 것 복잡한 일, 특정 자원의 활용률 떨어질 수 있음.

 

2. 교착 상태 회피

교착 상태가 발생하지 않을 정도의 양만큼만 조심히 자원을 할당하는 방식.

- 안전 상태 : 교착 상태가 발생하지 않고 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태(안전 순서열이 존재)

- 불안전 상태 : 교착 상태가 발생할 수도 있는 상황(안전 순서열이 없는 상태)

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

 

3. 교착 상태 검출 후 회복

교착 상태 발생을 인정하고 사후에 조치하는 방식

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

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

(3) 교착 상태를 아예 무시하는 방식 : 타조 알고리즘

 

(p.386-387 확인문제)

(정답 : 2)

교착 상태가 발생해도 회복 가능함.

 

(정답 : 5개)

P2에 자원 2개 할당하면 남은 자원은 3-2=1개가 됨.

P2가 실행을 성공적으로 종료하여 자원 반납하면 1+4=5개가 됨.

 

(정답 : 2번)

 

(정답 : 4번)

원형으로 대기하면 교착 상태 발생 가능해짐.