Bit의 개발다이어리
article thumbnail

Chapter 12 프로세스 동기화

동기화synchronizatioin : 프로세스들의 실행 순서와 자원의 일관성을 유지하면서 수행 시기를 맞추는 것.

프로세스 동기화를 하려면 ?

1. 실행 순서 제어 : 프로세스들을 올바른 순서대로 실행하기

2. 상호 배제: 동시 접근이 안되는 자원에 하나의 프로세스만 접근하게 하기가 필요합니다.

제대로 동기화 되지않는다면 에러가 발생하거나 예상치 못한 결과가 나올 수 있습니다. -> 데이터의 일관성이 깨짐

공유 자원 : 프로세스들이 공동으로 이용하는 변수, 파일, 장치

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

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

동기화를 위해서 지켜야하는 원칙

1. 상호 배제 : 진입했다면 들어올 수 없다.

2. 진행 : 진입하고자 하면 들어갈 수 있도록.

3. 유한 대기 : 언젠가든 임계 구역에 접근. 무한정 대기X

 

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

뮤텍스 락MUTual EXclusion lock : 자물쇠처럼 임계 구역을 잠궈 임계 구역 진입을 막는 기능. -> 상호 배제

변수 lock : 전역 변수, 자물쇠 역할

acquire 함수 : 잠금

release 함수 : 잠금 해제

쉴 새 없이 잠김을 확인하는 것을 바쁜 대기라고 합니다. -> CPU 주기를 낭비한다.

 

세마포semaphore : 공유 자원이 여러 개 있는 상황에서도 적용이 가능한 도구. 뮤텍스 락과 비슷. -> 상호 배제

전역 변수 S : 임계구역에 진입가능한 프로세스 개수

wait 함수 : 들어가도 될 지, 기다려야 할 지 알려주기

signal 함수 : 가도 좋다는 신호 주기

일일이 함수를 명시하는 것이 번거롭고, 누락하거나 호출순서를 헷갈리거나, 중복으로 사용하면 마찬가지로 에러가 발생할 수 있습니다.

 

모니터monitor : 공유자원과, 인터페이스(공유 자원에 접근하기 위한 통로)를 묶어서 관리하는 도구. -> 상호 배제

모니터에 진입하는 큐(상호 배제를 위한 큐)를 만들고, wait으로 인해 실행 중단된 프로세스들이 삽입되는 큐(조건 변수에 대한 큐)를 만들어서 모니터 안에는 항상 하나의 프로세스만 접근할 수 있도록 합니다.

 

Chapter 13 교착 상태

교착 상태dead lock : 어떤 프로세스도 더 이상 진행할 수 없는 상태. 일어나지 않을 사건을 기다리며 진행이 멈추는 현상

ex) 식사하는 철학자 문제

 

자원 할당 그래프resource-allocation graph : 자원의 개수는 점, 기다리는 프로세스와 자원 & 사용중인 프로세스와 자원을 화살표로 표현한 그래프. 교착 상태가 발생하면 원 모양이 됩니다.

 

교착 상태 발생 조건

조건이 모두 만족될 때 교착 상태가 발생할 가능성이 생깁니다.

1. 상호 배제mutual exclusion : 프로세스가 자원을 이용 중일때, 다른 프로세스가 사용할 수 없는 것

2. 점유와 대기hold and wait : 자원을 보유한 채 기다리는 것

3. 비선점nonpreemptive : 작업이 끝나야만 비로소 이용이 가능한 것(강제로 빼앗지 못하는 것)

4. 원형 대기circular wait : 자원 할당 그래프가 원 형태인 것

 

교착 상태 해결 방법 3가지

예방, 회피, 검출 시 회복

 

예방 : 조건에 부합하지 않도록 자원 분배

상호 배제를 없애기(모든 자원이 공유 가능하게 하기) -> 현실적으로 어려움.

점유와 대기 없애기 -> 자원의 활용률이 낮아 질 수도 있습니다. (기아 현상)

비선점 조건을 없애기 -> 모든 자원이 선점 가능한 것이 아니므로 범용성이 떨어짐.

원형 대기 조건을 없애기(번호를 붙이고 오름차순으로 자원 할당) -> 번호를 붙이는 것은 번거롭고, 번호 숫자에 따라 활용률이 떨어질 수 있습니다.

 

회피 : 교착 상태가 발생하지 않을 정도로만 자원 할당(무분별한 할당 방지)

안전 순서열safe sequence : 교착 상태 없이 안전하게 자원 할당할 수 있는 순서

안전 상태safe state : 안전 순서열에 따라 배분하여 교착 상태가 일어나지 않는 상태 <-> 불안전 상태 : 안전 순서열이 없는 상태

안전 상태일때만 자원을 할당!

 

회복 : 교착 상태 발생을 인정하고 사후 조치하는 것. 그때그때 할당하고 주기적으로 발생 여부를 검사합니다.

1. 교착 상태가 해결될 때까지 자원을 강제로 빼앗고 한 프로세스에 할당

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

모두 강제 종료 - 확실하지만 작업 내역을 잃을 수 있습니다.

한 프로세스씩 강제 종료 - 교착 상태가 없어졌는지 여부를 계속 확인하므로 오버헤드가 발생할 수 있습니다.

 

+ 타조 알고리즘ostrich algorithm : 잠재적 문제, 교착 상태를 무시로 대처

숙제

 

profile

Bit의 개발다이어리

@bit비트

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!