# Process Synchronize
- Why? Process Interactopn
1. Process, Design time Entity, Independently Develop, => Modular Design
2. Degree of Concurrency
3. to share resources
- Non-reentrant code : 인터럽트 서비스 루틴과 프로세스가 함께 상호작용하며 돌게될때 올바른 계산 결과를 내지 못하는 코드
* reentrant code : 여러 process들이 동시에 호출되거나 이전 호출이 완료되기 전에 반복 호출되어도 올바르게 수행되는 코드
- Atomic Operation : share하는 resources를 atomic하게 만들어야 함. 소프트웨어적만으로 구현하기엔 매우 복잡하므로 일반적으로 하드웨어적인 서포트가 필요
=> 인터럽트를 disable시키기. (process와 interrupt 서비스 루틴 사이). context switching이 발생하지 않음.
=> single processor에서는 인터럽트 disable이 만병통치약
- syncronization 문제 : 서로 상호작용하는 프로세스들이 리소스를 공유할 때 OS차원에서 공유되는 자원들을 관리하지 않으면 correctness 문제가 생김
- Race Condition : 경합조건. 여러 프로세스들이 동기화 절차를 거치지 않고 동시에 자원을 사용하기위해 경쟁함으로써 그 수행 결과를 예측할 수 없게되는 상황
- Critical section
: 어느 코드 섹션을 atomic하게 만든 코드. 하나의 프로세서만 수행되는 구간.
: Mutual exclusion : 한 프로세서가 크리티컬 같은 구간에 들어가면 다른 프로세서를 들어오지 못하게 방어하는 매커니즘
- Mutual exclusion
: 주어진 시간에 여러개의 프로세서가 진입을 원하더라도 언제나 하나의 프로세서만 허용.
: 빈번한 발생이 발생하므로 성능이 중요함
: Mutex, Semaphore, Monitor 등
=> 인터럽트 disable을 시키는 것은 큰 job이므로 늘 사용하기에는 적합하지 않아 Semaphores가 등장
* Interrupt Disable을 사용한 Synchronization의 문제 : Interrupt Disable은 시스템 전체에 영향을 미치기 때문에 상관없는 프로세스의 수행도 방해받게 됨
# Mutex
: Locking Mechanisms
: lock을 가지고 있는 경우에만 공유자원에 접근이 가능하며 lock에 대한 소유권이 존재.
# Semaphores
- Semaphore Mechanisms
- 1970년대 Dijkstra로부터 고안된 fusion mechanisms
- syncronization을 제공해주는 정수형 변수
- API
: lock(semaphore), = wait(s), = P(s) => resource destroyed()
: unlock(s), = signal(s), = V(s) => resource created()
- Synchronization 외에도 Scheduling, Control Transfer을 야기함
<세마포어의 종류>
: 세마포어는 동시에 리소스에 접근 가능한 Counter로 Counter의 갯수만큼 공유자원에 접근이 가능
- Counting Semaphore : 보호하려는 공유자원이 여러개인 경우의 세마포어. 초기값은 필요한 세마포어의 갯수만큼 필요
- Binary Semaphore : 보호하려는 공유자원이 한개인 경우로 0과 1의 값을 가지는 세마포어. 초기값은 1. (개념적으로 Mutex와 의미가 동일함)
- Block Semaphore : 초기값이 0, 인터럽트 서비스 루틴에서 V(s), 프로세스에서 P(s)
* Dining Philosophers : concurrency의 대표적인 예, Deadlock, Resources Sharing, Synchronize의 문제
# Semaphores의 단점
- unstructured programming construct이기 때문에 컴파일러 등의 도구를 사용한 디버깅이 어려움
*structured construct : 코드상의 pair된 구조. (ex. { } )
# Monitor
: Mutex(lock)과 Condition Variables(wating queue)를 가지는 Synchronization Mechanisms.
- Semaphores 사용. but, Semaphores는 unstructured contruct이므로 이를 해결하기 위해 등장하게 됨
- Abstract Data Type 구조를 기반으로 구현하며 pair구조를 가짐
- Data와 Data를 처리하는 프로시저로 구성. 프로세스를 호출하여 사용
- 지정된 공유자원에 접근을 하기위해서는 모니터로 들어가야하며, 모니터 내부에 들어간 프로세스에게만 공유자원에 접근할 수 있는 기능을 제공
- 프로세스가 모니터로 들어가고자 할 때, 이미 다른 프로세스가 모니터 내부에 있다면 큐에서 대기
'System > Etc.' 카테고리의 다른 글
[OS 기초] Linking and Loader (0) | 2015.09.30 |
---|---|
[OS 기초] Deadlock (0) | 2015.09.30 |
[OS기초] CPU Scheduling (0) | 2015.09.22 |
[OS기초] Process & Thread (0) | 2015.09.21 |
[OS기초] 개요 (0) | 2015.09.17 |