본문 바로가기
컴퓨터 구조 + 운영체제/혼자 공부하는 컴퓨터 구조 + 운영체제

_운영체제_ 12. 프로세스 동기화

by 코딩기 2023. 12. 19.
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()을 이용해 진입전 대기 상태의 프로세스를 큐에 삽입