2025-12-17
오늘 배운 것
12-1 동기화란
동기화의 의미
- 프로세스 동기화
- 특정 자원에 접근 할 때 한개의 프로세스만 접근하게 하거나, 프로세스를 올바른 순서대로 실행하게 하는 것
실행 순서 제어를 위한 동기화
- 동시에 실행되는 프로세스를 올바른 순서대로 실행
상호 배제를 위한 동기화
- 상호배제
- 공유가 불가능한 자원의 동시 사용을 피하기 위해 사용하는 알고리즘
- 동시에 접근해서는 안 되는 자원에 동시에 접근하지 못하게 하는 것
생산자와 소비자 문제
- 생산자와 소비자는 총합이라는 데이터를 동시에 사용
- 동시에 접근해서는 안되는 자원에 동시에 접근하여 발생하는 문제
공유 자원과 임계 구역
- 공유 자원
- 전역 변수, 파일, 입출력 장치, 보조 기억 장치 등 프로세스가 공유하는 자원
- 임계 구역
- 동시 실행하면 문제가 발생하는 자원에 접근하는 코드 영역
- 레이스 컨디션
- 임계 구역에 잘못된 실행으로 인해 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제가 발생
- 데이터의 일관성이 깨짐
- 상호배제를 위한 동기화 원칙
- 상호 배제 : 한 프로세스가 임계 구역에 진입 했다면 다른 프로세스는 임계 구역에 들어올 수 없다
- 진행 : 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하고자 하는 프로세스는 들어갈 수 있어야 한다
- 유한 대기 : 한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스는 언젠가는 임계 구역에 들어올 수 있어야 한다
12-2 동기화 기법
뮤테스 락
- 상호 배제를 위한 동기화 도구
- 구현
- 자물쇠 역할 : 프로세스들이 공유하는 전역 변수 lock
- 임계 구역을 잡그는 역할 : acquire 함수
- 프로세스가 임계 구역에 진입하기 전에 호출하는 함수
- lock이 false가 될때까지 임계 구역을 반복적으로 확인하다가 열리면 lock을 true로 바꿈
- 임계 구역의 잠금을 해제하는 역할 : release 함수
- 바쁜 대기
세마포어
- 공유 자원이 여러 개 있는 상황에서도 적용이 가능한 동기화 도구
- 구현
- 전역 변수 S : 임계 구역에 진입할 수 있는 프로세스의 개수
- wait 함수 : 임계 구역에 들어가도 좋은지, 기다려야 할지를 알려주는 함수
- S ≤ 0 : 사용할 수 있는 자원이 있는지 반복적으로 확인
- S > 0 : S를 1 감소시키고 임계 구역 진입
- signal 함수 : 임계 구역 앞에서 기다리는 프로세스에 이제 가도 좋다고 신호를 주는 함수
- 임계 구역에서의 작업을 마친 뒤 S를 1 증가시킴
모니터
- 공유 자원과 공유 자원에 접근하기 위한 인터페이스를 묶어 관리
- 프로세스는 반드시 인터페이스를 통해서만 공유 자원에 접근
- 모니터는 공유 자원에 접근하고자 하는 프로세스를 큐에 삽입
- 큐에 삽입된 순서대로 하나씩 공유 자원을 이용
- 조건 변수
- 프로세스나 스레드의 실행 순서를 제어하기 위해 사용하는 특별한 변수
- wait와 signal 연산을 수행할 수 있음
- wait : 호출한 프로세스의 상태를 대기 상태로 전환하고 일시적으로 조건 변수에 대한 대기 큐에 삽입하는 연산
- signal : 특정 프로세스가 실행될 조건이 충족되었을 때 signal을 통해 재개