- 뮤텍스 락
- 상호 배제를 위한 동기화 도구(자물쇠 역할), 뮤텍스 락
- 공유 자원이 하나만 있을 경우
- 전여 변수 하나, 함수 두 개
- 자물쇠 역할 ; 프로세스들이 공유하는 전역 변수 lock
- 임계 구역을 잠그는 역할 : acquire 함수
- 임계 구역의 잠금을 해제하는 역할 : release 함수
- acquire 함수
- 프로세스가 임계 구역에 진입하기 전에 호출
- 임계 구역이 잠겨있다면, 임계 구역이 열릴 때까지 임계 구역을 반복적으로 확인 ( lock이 false가 될때까지)
- 임계 구역이 열려있다면, 임계 구역 잠그기(lock을 true로 바꾸기)
- release 함수
- 임계 구역에서의 작업이 끝나고 호풀
- 현재 잠긴 임계 구역을 열기(lock을 false로 바꾸기)
- 바쁜 대기(busy waiting)
- 세마포
- 좀 더 일반화된 방식의 동기화 도구
- 공유 자원이 여러 개 있는 경우에도 적용 가능
- 임계 구역 앞에서 멈춤 신호를 받으면 잠시 기다리기
- 임계 구역 앞에서 가도 좋다는 신호를 받으면 임계 구역 진입
- 전역 변수 하나, 함수 두 개
- 임계 구역에 진입할 수 있는 프로세스의 개수를 나타내는 전역 변수 S
- 임계 구역에 들어가도 좋은지, 기다려야 할지를 알려주는 wait 함수
- 임계 구역 앞에서 기다리는 프로세스에 이제 가도 좋다고 신호를 주는 signal 함수
- 여기도 busy waiting이 될 수 있다
- busy waiting 해결방법
- 사용할 수 있는 자원이 없을 경우 대기 상태로 만듦 (해당 프로세스의 PCB를 대기 큐에 삽입)
- 사용할 수 있는 자원이 생겼을 경우 대기 큐의 프로세스를 준비 상태로 만듦 (해당 프로세스의 PCB를 대기 큐에서 꺼내 준비 큐에 삽입)
- 실행 순서 동기화
- 세마포의 변수 S를 0으로 두고
- 먼저 실행할 프로세스 뒤에 signal 함수
- 다음에 실행할 프로세스 앞에 wait 함수를 붙이면 됌
- 모니터
- 개발자가 다루기에 편한 동기화 도구
- 상호 배제를 위한 동기화
- 인터페이스를 위한 큐
- 공유자원에 접근하고자 하는 프로세스를 큐에 삽입
- 큐에 삽입된 순서대로 공유 자원 이용
- 조건 변수 이용
- 프로세스나 스레드의 실행 순서를 제어하기 위해 사용하는 특별한 변수
- 조건변수.wait() : 대기 상태로 변경, 조건 변수에 대한 큐에 삽입
- 조건변수.signal() : wait()으로 대기 상태로 접어든 조건 변수를 실행 상태로 변경
- 모니터 안에는 하나의 프로세스만이 있을 수 있다
- 실행 순서 제어를 위한 동기화
- 특정 프로세스가 아직 실행될 조건이 되지 않았을 때에는 wait를 통해 실행을 중단
- 특정 프로세스가 실행될 조건이 충족되었을 때에는 signal을 통해 실행을 재개한다
'CS지식 쌓기' 카테고리의 다른 글
교착 상태 해결 방법 (0) | 2024.01.02 |
---|---|
교착 상태(데드락) (0) | 2024.01.02 |
동기화 (0) | 2024.01.02 |
CPU 스케줄링 알고리즘 (0) | 2024.01.02 |
CPU 스케줄링 (1) | 2024.01.02 |