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 : 잠재적 문제, 교착 상태를 무시로 대처
숙제
'소프트웨어 > Computer Science' 카테고리의 다른 글
[혼공컴운] 혼공스 12기 회고 📕 (0) | 2024.08.19 |
---|---|
[혼공컴운] 6주차_운영체제 마무리 (0) | 2024.08.15 |
[혼공컴운] 4주차_운영체제 핵심 (0) | 2024.08.01 |
[혼공컴운] 3주차_주기억, 보조기억장치 (1) | 2024.07.22 |
[혼공컴운] 2주차_CPU 구석구석 (1) | 2024.07.14 |