Initial Attempts to Solve Problem
- 두 개의 프로세스가 있다고 가정 P0, P1
- 프로세스들의 일반적인 구조
- 프로세스들은 수행의 동기화(synchronize)를 위해 몇몇 변수를 공유할 수 있다 → synchronization variable
프로그램적 해결법의 충족 조건
- Mutual Exclusion (상호 배제)
- 프로세스 Pi가 critical section 부분을 수행 중이면 다른 모든 프로세스들은 그들의 critical section에 들어가면 안 된다
- Progress (진행)
- 아무도 critical section에 있지 않은 상태에서 critical section에 들어가고자 하는 프로세스가 있으면 critical section에 들어가게 해주어야 한다
- Bounded Waiting (유한 대기)
- 프로세스가 critical section에 들어가려고 요청한 후부터 그 요청이 허용될 때까지 다른 프로세스들이 critical section에 들어가는 횟수에 한계가 있어야 한다
- 가정
- 모든 프로세스의 수행 속도는 0보다 크다
- 프로세스들 간의 상대적인 수행 속도는 가정하지 않는다
Synchronization Hardware
- H/W적으로 Test&modify를 atomic하게 수행할 수 있도록 지원하는 경우 앞의 문제는 간단히 해결
- Mutual Exclusion with Test & Set
Semaphores
- 앞의 방식들을 추상화시킴
- Semaphore S
- integer variable
- 아래의 두 가지 atomic 연산에 의해서만 접근 가능
프로세스의 상태
Block / Wakeup Implementation
- Semaphore를 다음과 같이 정의
- block과 wakeup을 다음과 같이 가정
- block
- 커널을 block 호출한 프로세스를 suspend시킴
- 이 프로세스의 PCB를 semaphore에 대한 wait queue에 넣음
- wakeup(P)
- block된 프로세스 P를 wake 시킴
- 이 프로세스의 PCB를 ready queue로 옮김
- block
Two Types of Semaphores
- Counting semaphore
- 도메인이 0 이상인 임의의 정수값
- 주로 resource counting에 사용
- Binary semaphore (=mutex)
- 0 or 1 값만 가질 수 있는 semaphore
- 주로 mutual exclusion (lock/unlock)에 사용
'Study > CS' 카테고리의 다른 글
[운영체제] CPU Scheduling (0) | 2023.05.22 |
---|---|
[운영체제] 프로세스 관리 1, 2 (0) | 2023.05.17 |
[운영체제] 프로세스 2, 3 (0) | 2023.05.15 |
[운영체제] 프로세스 1 (0) | 2023.05.06 |
[운영체제] 컴퓨터시스템의 구조 2 (1) | 2023.04.30 |