- 시스템은 일반적으로 동시에 또는 병렬로 실행되는 여러 스레드(수백 또는 수천)로 구성됨
- 스레드는 종종 사용자 데이터를 공유함
- 공유 데이터에 대한 접근이 제어되지 않을 때 race condition이 존재하여 데이터 값이 손생될 수 있음
- 프로세스 동기화에는 race condition을 피하기 위해 공유 데이터에 대한 접근을 제어하는 도구를 사용함
- Mutex Lock
- 공유자원에 접근하기 위해 lock 필요
- critical section(프로세스가 여러 개 있을 때 그 여러 프로세스들이 공유하게 되는 자원에 해당하는 코드 부분)에 들어갈 땐 lock을 얻어야 하고, 나오면 해제해야함
- Mutex Lock의 단점
- 한 프로세스가 CS에 있는 동안, 다른 프로세스가 계속 조건을 확인하며 loop를 실행해야 함
- Semaphore
- Mutex Lock의 확장된 개념
- 여러 자원에 대한 동기화 가능
- 공유변수 S를 사용
- 공유자원이 여러 개인 경우 가용 자원의 수로 초기화됨
- 공유자원이 하나인 경우 => Mutex Lock
- 예) 공유자원이 3개인데 count 값이 -2인 경우: 3개는 사용중이고 2개의 프로세스가 대기중이라는 뜻
- Monitors
- 가장 high level
- 프로그래머가 세마포나 뮤텍스 락을 잘못 사용하면 error가 쉽게 발생함
- 간단한 동기화 도구들을 고급 언어 구조물로 통합하면 해결할 수 있음
- ADT(abstract data type): 특정 구현과는 무관한 데이터와 데이터에 대한 연산을 캡슐화한 것
- Monitor type(=ADT): instance의 state를 정의한 변수와 그 변수에 동작하는 함수 본체를 선언
- Monitor type은 프로세스가 직접 사용 금지(class 개념)
- 모니터 내부의 함수는 내부에 정의된 변수와 파라미터에 의해서만 접근 가능
- 모니터 내부의 local 변수는 local 함수에 의해서만 접근(read/write) 가능
- 모니터 내에서 한 번에 한 프로세스만 active함을 보장함
- 동기화 메커니즘 필요
- 프로그래머가 type condition 변수들을 정의 가능
- Semaphore vs. Monitor
'cs 공부 > 운영체제' 카테고리의 다른 글
ch08. Deadlocks (0) | 2023.07.05 |
---|---|
ch05. CPU Scheduling (0) | 2023.06.12 |
ch03. Process, Threads (0) | 2023.06.11 |