To Be myself

[혼공컴운] 5주차 (1/29~2/4) Chapter 12 ~ 13 본문

CS

[혼공컴운] 5주차 (1/29~2/4) Chapter 12 ~ 13

투비마 2024. 2. 4. 23:30

 

 

 

기본 미션

Chapter 12.  

P. 363 확인 문제 1번

뮤텍스 락과 세마포에 대한 설명으로 옳지 않은 것을 고르세요.

 

① 뮤텍스 락은 임계구역을 잠근 뒤 임계구역에 진입함으로써 상호배제를 위한 동기화를 이룹니다.

② 세마포는 공유 자원이 여러 개 있는 상황에서도 이용할 수 있습니다.

③ 세마포를 이용해 프로세스 실행 순서 제어를 위한 동기화도 이룰 수 있습니다.

④ 세마포를 이용하면 반드시 바쁜 대기를 해야 합니다.

 

답&풀이)

③ 세마포가 아니라 모니터를 이용해 프로세스 실행 순서 제어를 위한 동기화도 이룰 수 있습니다.

 

뮤텍스 락(Mutex lock;MUTual Exclusion lock)

- 임계구역을 잠구고 다른 프로세스가 접근할 수 없게 만들도록 진입하는 자물쇠 기능을 수행

- 전역 변수 1개, 함수 2개; 전역변수 lock으로 임계구역의 잠금 여부를 판단하고 acquire 함수로 잠금과 release 함수로 잠금해제를 처리

- 임계구역이 잠겼는지 아닌지 계속 확인해야 하는 바쁜 대기 busy waiting 발생

 

세마포(Semaphore)

- 여러 개의 공유 자원이 있을 때도 적용할 수 있는 동기화 도구

- 전역 변수 1개, 함수 2개; 사용 가능한 공유 자원 수를 뜻하는 전역 변수 S를 확인하고 임계 구역 들어갈지 말지를 알리는 wait 함수와 들어가도 된다는 신호를 주는 signal 함수로 처리가도 좋다’고 신호를 주는 signal 함수

- 사용 가능한 공유 자원이 없으면 있을 때까지 계속 확인해야 하는 바쁜 대기 busy waiting 발생

 


선택 미션

임계 구역

동시에 공유 자원에 접근했을 때 문제가 발생할 수 있는 코드 영역을 말함

임계 구역이 미리 들어간 프로세스가 있으면 다른 프로세스들은 밖에서 기다려야 함

먼저 작업한 프로세스가 끝나면 대기 중이었던 프로세스가 임계구역에 진입할 수 있음

 

레이스 컨디션(race conditon)

실행을 잘못 해서 여러 프로세스가 동시에 임계 구역의 코드를 실행해서 발생하는 문제, 자원의 일관성이 깨지게 됨

 

상호 배제(mutual exclusion)

동시에 공유할 수 없는 자원을 사용하는 걸 막기 위해 사용되는 알고리즘

이미 한 프로세스가 임계 구역에 있으면 다른 프로세스는 들어갈 수 없게 제어함

 

사례

- Account Problem : 입출금 처리가 동시에 여러 곳에서 요청 들어왔을 때, 예상하지 못한 결과가 초래할 수 있음

- 생산자(Producer)와 소비자(Consumer) 문제: 물건을 생성하기만 하는 생성자와 소비만 하는 소비자를 동시에 실행시켰을 때 발생하는 문제

> 예제코드(C++): https://github.com/kangtegong/self-learning-cs/tree/main/producer_consumer

 

상호 배제를 위한 동기화

공유 불가능 자원을 하나의 프로세스만 사용할 수 있도록 하는 것

 

운영체제의 원칙

・ 상호배제(mutual exclusion): 이미 프로세스가 진입한 임계구역에 다른 프로세스가 들어갈 수 없음

진행(progress): 임계 구역에 이미 진입한 프로세스가 없다면 프로세스는 들어갈 수 있다

유한 대기(bounded waitin): 임계 구역에 들어가고자 하는 프로세스는 언젠가 진입해야 한다. (무한하게 대기해선 안 된다.)