안녕하세요, 혼자 공부하는 컴퓨터 구조 + 운영체제를 공부하고 학습한 자료를 남깁니다.
- 들어가며
이 기법들이 어떻게 상호 배제를 이루는지 그리고 어떻게 실행 동기화를 이루는지를 중점적으로 살펴보면 좋을 것 같다.
- 뮤텍스 락
옷 가게에 가면 탈의실에는 한 번에 한명씩 들어간다.
탈의실이라는 자원을 이용하고 손님들은 프로세스에 비유하고 탈의실을 임계 구역에 비유한다.
탈의실 안에 있는 사람이 있는지 없는지 알 수 없는 경우라면, 문이 잠겨 있다면 사람이 있다고 판단할 수 있는 근거가 된다.
전역 변수로 자물쇠 역할을 하는 락 변수가 있어야 한다.
이에 따라 acquire함수와 release함수가 있을 수 있다.
=> 상호배제를 위한 동기화를 이룰 수 있다.
lock이 false가 될 때까지 쭉 쉴새없이 확인을 해보는 것과 같다.
썩 좋은 방식은 아닙니다.
무한히 반복적으로 대기하면서 임계 구역이 열려 있는지 안 열려 있는지 확인하는지 이를 바쁜 대기라고 부릅니다.
- 세마포
바이너리 세마포와 카운팅 세마포가 있다.
바이너리 세마포는 이진법으로 뮤텍스 락과 거의 유사하기 때문에 일반적으로 카운팅 세마포를 지칭한다.
프로세스와 스레드들이 STOP인 경우 기다리고, GO이면 임계 구역에 진입한다.
전역 변수 S = 프로세스의 개수 (사용 가능한 공유 자원의 개수)
wait 함수 = 임계구역에 들어가도 되는지 알려주는 함수
signal 함수 = 임계구역 앞에서 기다리는 함수에 '이제 가도 좋다'고 신호를 주는 함수
전역 변수 S가 0이하라면 내가 들어갈 수 있는지를 무한히 반복하고
false가 되면 사용할 수 있는 프로세스의 개수를 1 낮추고(내가 들어갈 거니까) 임계 구역에 진입한다.
signal() 함수는 전역 변수 s를 1 증가시킨다.
- 모니터
debuging이 어렵다. 그래서 등장한 것이 모니터다. 개발자가 다루기 편리한 동기화 도구다.
모니터는 실행 순서 동기화도 이룰 수가 있다.
감사합니다.
참고 url - https://www.youtube.com/watch?v=4u13f9Umq7Y&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=37
'혼자 공부하는 컴퓨터 구조 및 운영체제 (복습)' 카테고리의 다른 글
[운영체제] 교착 상태 해결 방법 (2) | 2024.10.19 |
---|---|
[운영체제] 교착 상태란? (2) | 2024.10.19 |
[운영체제] 프로세스 동기화란? (3) | 2024.10.18 |
[운영체제] CPU 스케줄링 알고리즘 (2) | 2024.10.18 |
[운영체제] CPU 스케줄링 개요 (2) | 2024.10.18 |