# 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

종종해먹는 버터치킨커리

정말 버터란.... 맛있다. 물 한방울 안들어간 소스까지 싹싹...! 닭보다 소스가 더 맛있음..

내 밥먹고, 동생이 화장실 간 사이 동생 밥도 내가 먹고.. 완전 밥도둑이 따로 없네





버터치킨커리 : 버터, 마늘, 우유, 닭, 양파, 카레페이스트, 후추, 바질


'취미 ㅋㅋ' 카테고리의 다른 글

레고 캠퍼밴  (0) 2015.11.30
레고 펫샵  (0) 2015.11.30
근대된장국 가지덮밥(안심근대가지덮밥, 가지표고덮밥)  (0) 2015.09.24
밑반찬  (0) 2015.09.24
참치미역국 간장불고기 미역초무침  (0) 2015.09.24

근대가 싸길래 무넣고 국끓이고

가지가 싸길래 초간단 덮밥소스 만들기


근대된장국 : 근대, 무, 된장, 마늘, 멸치/다시마 육수


안심근대가지덮밥 : 돼지안심, 가지, 양파, 근대, 마늘, 청양고추, 굴소스, 간장, 참기름, 깨, 녹말가루(없어서 난 전분..)


가지표고덮밥 : 가지, 건표고버섯, 양파, 청양고추, 굴소스, 간장, 참기름, 깨, 녹말가루(없어서 난 전분..)



요즘 가지 홀릭

이연복 탕슉을 엄마가 주문했는데, 거기에도 가지 넣고먹으니까 정말 맛있다.

구워도 먹고, 볶아도 먹고 홀릭홀릭 가지홀릭 !!


'취미 ㅋㅋ' 카테고리의 다른 글

레고 펫샵  (0) 2015.11.30
버터치킨커리  (0) 2015.09.24
밑반찬  (0) 2015.09.24
참치미역국 간장불고기 미역초무침  (0) 2015.09.24
기본 견과루 파운드  (0) 2015.09.24

+ Recent posts