728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 컴퓨터 구조 + 운영체제를 공부하고 학습한 자료를 남깁니다.

  • 들어가며

이 기법들이 어떻게 상호 배제를 이루는지 그리고 어떻게 실행 동기화를 이루는지를 중점적으로 살펴보면 좋을 것 같다.

  • 뮤텍스 락

옷 가게에 가면 탈의실에는 한 번에 한명씩 들어간다.

탈의실이라는 자원을 이용하고 손님들은 프로세스에 비유하고 탈의실을 임계 구역에 비유한다.

탈의실 안에 있는 사람이 있는지 없는지 알 수 없는 경우라면, 문이 잠겨 있다면 사람이 있다고 판단할 수 있는 근거가 된다.

전역 변수로 자물쇠 역할을 하는 락 변수가 있어야 한다.

이에 따라 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

 

728x90
반응형
LIST

+ Recent posts