728x90
12-1. 동기화란
협력하여 실행되는 프로세스들의 실행 순서와 자원 일관성을 보장하기 위한 개념
- 동기화의 의미
동시다발적으로 실행되는 각기 다른 독립적인 프로세스라도 공동의 목표를 위해 협력
올바른 실행을 위해 동기화는 필수
- 프로세스 동기화
프로세스들의 수행 주기를 맞추는 것
실행 순서 제어 : 프로세스를 올바른 순서로 실행
상호 배제 : 동시접근이 불가한 자원에 하나의 프로세스만 접근
-> 실행 순서 제어를 위한 동기화와 상호 배제를 위한 동기화로 나뉘어짐
- 실행 순서 제어 동기화
ex) Book.txt 파일을 처리하는 Writer와 Reader 프로세스가 있다고 가정할 시, Reader는 Writer
프로세스가 완료되어야 실행 가능 -> 올바른 순서대로 실행되어야 함
- 상호 배제 동기화
ex) 10만원 저축 계좌에 2만원을 저금하는 프로세스 A와 5만원을 넣는 프로세스 B가 있다고 가정
하고 동시 실행 시, 동기화가 제대로 이루어지지 않아 엉뚱한 결과 도출 가능성 증가
-> 동시 접근 불가한 자원에 동시 접근을 방지하는 것
- 생산자와 소비자 문제
상호 배제 동기화 관련 예시 문제
총합 = 10;
생산자 () {
버퍼에 데이터 삽입;
'총합' 변수 1 증가;
}
소비자 () {
버퍼에서 데이터 빼내기;
'총합' 변수 1 감소;
}
-> 각각 100번씩 실행한다고 가정 시, 총합의 결과값은 동기화의 유무에 따라 차이발생
- 공유 자원과 임계 구역
공유 자원 : 프로세스가 할당받는 공동의 자원
임계 구역 : 동시 실행 시 문제가 발생한 영역에 접근하는 코드 영역
레이스 컨디션 : 여러 프로세스가 동시다발적으로 임계 구역 코드 실행(생산자와 소비자 문제)
저급 언어를 실행하는 컴퓨터는 여러줄의 저급 언어 변환 후 실행 과정에서 문맥교환 발생 가능
- 임계 구역 문제해결 3가지 원칙
1. 상호 배제 : 한 프로세스가 임계구역 진입 시 다른 프로세스 접근 불가
2. 진행 : 임계 구역에 프로세스 진입이 없을 시 접근하고자 하는 프로세스는 접근 허용
3. 유한 대기 : 임계 구역에 진입 대기 중인 프로세스는 언젠가 접근 가능(무한정 대기 X)
12-2. 동기화 기법
- 뮤텍스 락
피팅을 위해 대기하는 사람이 탈의실의 문을 열어보고 잠겨있으면 들어가지 않는 것을 구현
-> 상호 배제를 위한 동기화 기법
자물쇠 : lock()
자물쇠를 잠그는 역할 : acquire()
자물쇠를 푸는 역할 : release()
acquire() {
while(lock === true) // 임계구역이 잠겨있다면
; // 잠겨있는지 반복확인
lock = true; // 잠겨있지 않다면 잠금
}
release() {
lock = false; // 임계 구역 작업 완료 후 잠금해제
}
-> 이러한 매커니즘을 통해 임계구역 보호(계속 잠금 유무 확인을 반복하는 "바쁜 대기" 발생)
- 세마포
뮤텍스 락과 비슷하면서 더 일반화된 방식(탈의실이 여러개)
철도 신호기의 STOP과 GO 신호에서 유래
임계구역 진입 가능 프로세스 개수 : 전역변수 S
임계구역에 들어갈지 말지 유무 결정 : wait()
임계구역 앞에서 기다리는 프로세스에게 가라는 신호 제공 : signal()
wait() {
while( S <= 0 ) // 임계구역 진입가능 프로세스 수 < 0
; // 반복 확인
S--; // 프로세스 수가 하나 이상일 시 S를 1 감소시키고 임계구역 진입
}
signal() {
S++; // 임계 구역 작업 종료 후 S를 1 증가
}
고질병인 "바쁜 대기" 방지를 위해, wait와 signal 함수가 프로세스를 상황에 따라 대기, 준비 큐를 넘나들게 하여 CPU 주기 낭비 방지
- 모니터
세마포의 단점(wait와 signal을 임계구역마다 앞뒤로 일일히 배치) 상쇄
- 모니터
공유 자원과 공유 자원에 접근하기 위한 통로(인터페이스)를 묶어 관리
공유 자원에 접근하고자 하는 프로세스를 큐에 삽입, 순서대로 하나씩 자원 이용
-> 상호 배제를 위한 동기화
"조건 변수"를 이용해 특정 조건을 바탕으로 실행 순서 제어 동기화 실행
조건 변수 : wait(), signal()을 이용해 진입전 대기 상태의 프로세스를 큐에 삽입
'컴퓨터 구조 + 운영체제 > 혼자 공부하는 컴퓨터 구조 + 운영체제' 카테고리의 다른 글
| _운영체제_ 13. 교착 상태 (1) | 2024.01.10 |
|---|---|
| _운영체제_ 11. CPU 스케줄링 (0) | 2023.12.19 |
| _운영체제_ 10. 프로세스와 스레드 (1) | 2023.12.15 |
| _운영체제_ 09. 운영체제 시작하기 (1) | 2023.12.03 |
| _컴퓨터 구조_ 07. 보조 기억 장치 (1) | 2023.11.26 |