기본 미션
p.363 확인 문제 1번
1. 뮤텍스 락과 세마포에 대한 설명으로 옳지 않은 것을 고르세요.
① 뮤텍스 락은 임계 구역을 잠근 뒤 임계 구역에 진입함으로써 상호 배제를 위한 동기화를 이룹니다.
② 세마포는 공유 자원이 여러 개 있는 상황에서도 이용할 수 있습니다.
③ 세마포를 이용해 프로세스 실행 순서 제어를 위한 동기화도 이룰 수 있습니다.
④ 세마포를 이용하면 반드시 바쁜 대기를 해야 합니다.
정답
④ 세마포를 이용하면 반드시 바쁜 대기를 해야 합니다.
해설
① 뮤텍스 락은 임계 구역을 잠근 뒤 임계 구역에 진입함으로써 상호 배제를 위한 동기화를 이룹니다.
- 뮤텍스 락은 자물쇠를 이용하여 임계 구역에 진입하는 방식으로 상호 배제를 위한 동기화를 이룸
- 잠그고 -> 사용하고 -> 풀고
② 세마포는 공유 자원이 여러 개 있는 상황에서도 이용할 수 있습니다.
- 세마포: 공유 자원이 여러 개 있는 일반적인 상황에 활용 가능
- 사용 가능한 공유 자원의 개수를 나타내는 전역 변수 s 사용
③ 세마포를 이용해 프로세스 실행 순서 제어를 위한 동기화도 이룰 수 있습니다.
- 사용 가능 자원 개수를 0으로 두고
- 먼저 실행 할 프로세스 뒤에 signal 함수, 다음에 실행될 프로세스 앞에 wait 함수 작성
- wait으로 대기를 걸기에 먼저 실행될 수 없다
④ 세마포를 이용하면 반드시 바쁜 대기를 해야 합니다.
[세마포를 통한 빠른 대기 문제 해결 방법]
바쁜 대기 시 cpu 주기가 낭비된다
-> wait() 함수에서 사용할 수 있는 자원이 없을 경우, 해당 프로세스 상태를 대기로 전환
-> 해당 프로세스의 PCB를 세마포어 대기 큐에 넣음
-> 한 프로세스 작업이 끝나고 signal()이 호출되면
-> 대기중인 프로세스를 대기 큐에서 제거하고 프로세스 상태를 준비 큐로 바꾼 뒤 준비큐로 옮김
# 빠른 대기 문제 해결
def wait():
s -= 1 # 확인 전 감소
if (s < 0): # 사용할 수 있는 자원이 없음
add this process to Queue # PCB를 대기 큐에 삽입
sleep(); # 대기 상태
def signal():
s += 1
if (s <= 0): # 먼저 감소시키고, 증가시켜서 0이 될 수 있음 (프로세스 3개, s: 2 생각해보기)
remove a process p from Queue # 대기큐에서 프로세스 제거
wakeup(p) # 대기 -> 준비
선택 미션
Ch12(12-1) 임계 구역, 상호 배제 개념을 정리하기
공유 자원과 임계 구역
공유 자원: 전역 변수, 파일. io 장치, 보조기억장치 등 공유되는 자원
임계 구역: 동시에 실행하면 문제가 발생하는 코드에 접근하는 코드 영역
레이스 컨디션: 임계구역 코드를 동시 다발적으로 실행하여 문제가 발생하는 경우 (데이터 일관성 문제 발생)
두 개 이상의 프로세스가 임계 구역에 진입하려면 대기가 필요
임계 구역 문제 해결 원칙
1. 상호 배제: 한 프로세스가 임계 구역에 들어갔다면 다른 프로세스는 임계구역에 들어갈 수 없다
2. 진행: 임계 구역에 어떤 프로세스도 진입하지 않았다면 진입할 수 있다
3. 유한 대기: 임계 구역에 진입하고 싶다면 언젠가는 임계 구역에 들어갈 수 있다 (무한정 대기 X)
임계 구역 문제 해결 방법
1. 뮤텍스 락
- 락을 걸고, 임계 구역에 진입하고, 락을 해제
2. 세마포어
- 임계 구역이 여러 개 일 때 사용 가능
- 대기/진입 확인 후, 임계 구역에 진입하고, 사용 후 신호 보내기
3. 모니터
- 조건 변수를 활용하여 동기화
- 공유 자원과 접근 인터페이스를 묶어 관리
'cs > [OS] 혼자 공부하는 컴퓨터 구조 + 운영체제' 카테고리의 다른 글
[혼공컴운] chapter 14. 가상 메모리 (2) | 2024.02.15 |
---|---|
[혼공컴운] chapter 13. 교착 상태 (6) | 2024.02.05 |
[혼공컴운] chapter 12. 프로세스 동기화 (1) | 2024.02.05 |
[혼공학습단 11기] 혼공컴운 4주차 미션 (0) | 2024.01.30 |
[혼공컴운] chapter 11. CPU 스케줄링 (1) | 2024.01.30 |