1. 뮤텍스 락
상호 배제를 위한 동기화 도구(자물쇠 역할)
뮤텍스 락의 단순한 형태 전역 변수 하나, 함수 두 개
- 자물쇠 역할 : 프로세스들이 공유하는 전역 변수 lock
- 임계 구역을 잠그는 역할 : acquire 함수
- 임계 구역의 잠금을 해제하는 역할 : release 함수
acquire 함수
- 프로세스가 임계 구역에 진입하기 전에 호출
- 임계 구역이 잠겨 있다면
- 임계 구역이 열려 있다면
release 함수
- 임계 구역에서의 작업이 끝나고 호출
- 현재 잠긴 임계 구역을 열기(lock을 false로 바꾸기)
2. 세마포
좀 더 일반화된 방식의 동기화 도구
공유 자원이 여러 개 있는 경우에도 적용 가능
세마포의 단순한 형태 전역 변수 하나, 함수 두 개
- 임계 구역에 진입할 수 있는 프로세스의 개수(사용 가능한 공유 자원의 개수)를 나타내는 전역 변수 S
- 임계구역에 들어가도 좋은지, 기다려야 할지를 알려주는 wait 함수
- 임계구역 앞에서 기다리는 프로세스에 '이제 가도 좋다'고 신호를 주는 signal 함수
3. 모니터
상호 배제를 위한 동기화
- 인터페이스를 위한 큐
- 공유자원에 접근하고자 하는 프로세스를 (인터페이스를 위한) 큐에 삽입
- 큐에 삽입된 순서대로 (한 번에 하나의 프로세스만) 공유 자원 이용
실행 순서 제어를 위한 동기화
- 조건 변수 condition variable* 이용
*프로세스나 스레드의 실행 순서를 제어하기 위해 사용되는 특별한 변수
조건변수.wait() : 대기 상태로 변경, 조건 변수에 대한 큐에 삽입
조건변수.signal() : wait()으로 대기 상태로 접어든 조건변수를 실행 상태로 변경
모니터 안에는 하나의 프로세스만이 있을 수 있다
- wait()를 호출했던 프로세스는 signal()을 호출한 프로세스가 모니터를 떠난 뒤에 수행을 재개
- signal()을 호출한 프로세스의 실행을 일시 중단하고 자신이 실행된 뒤 다시 signal()을 호출한 프로세스의 수행을 재개
'컴퓨터공학' 카테고리의 다른 글
29. 교착 상태 해결방법 (0) | 2024.11.13 |
---|---|
28. 교착상태_데드락 (0) | 2024.10.31 |
26. 동기화 (0) | 2024.10.30 |
25. CPU 스케줄링 알고리즘 (0) | 2024.10.28 |
24. CPU 스케줄링 (0) | 2024.10.26 |