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번)
원형으로 대기하면 교착 상태 발생 가능해짐.
'혼공 학습단 컴퓨터 구조+운영체제' 카테고리의 다른 글
혼자 공부하는 컴퓨터 구조 + 운영체제 3주 (0) | 2024.01.22 |
---|---|
혼자 공부하는 컴퓨터 구조 + 운영체제 2주 (0) | 2024.01.15 |
혼자 공부하는 컴퓨터 구조 + 운영체제 1주 (1) | 2024.01.07 |