# 유닉스와 유닉스로부터 시작된 운영체제의 동시성을 제어하기 위한 방법 소개



파이프 - 일종의 버퍼
두개의 프로세스 사이에 producer consumer 모델로 통신할수 있는 버퍼 제공
파이프는 FIFO로 만들어지고

a | b (a라는 프로세스에서 b라는 프로세스로 data 전달)

예시) $ ls -a | more (여기서 | 이것이 파이프, 이름이 있는 파이프와 없는것이 있다)



메시지 - 유닉스는 msgsnd, msgrcv 시스템 콜로 프로세스 사이의 메시지 전달 가능
각 프로세스는 메시지 큐를 가지고 있고, 메일박스로 해석할수 있음
메시지 박스를 사용해서 비동기적으로 메시지를 주고받을수 있다


프로세스간 통신방법중 가장 빠른것
가상메모리에 공통적인 메모리 블럭을 넣어놓고 여러 프로세스가 공유
상호배제를 보장하는것은 세마포어와 같은 다른 방법을 사용한다 (shared memory 자체에서는 되지 않음)

semWait, semSignal을 일반화 하여 제공
여러 프로세스가 동시에 세마포어를 접근할수 없다


Signal - 소프트웨어로 만들어지는데, 프로세스 사이에 어떠한 일이 일어났는지 알려주는 방법
프로세스 사이에 하드웨어 인터럽트를 준것과 비슷하다
어떤 필드를 업데이트 함으로서 전달된다. 만들어진 비트는 dispatcher에 의해 검사된다.




# 유닉스의 클론인 리눅스에서의 동시성 제어 메커니즘


유닉스의 기능을 담고있고, 위 기능들이 추가


interrupt 없이 실행될수 있는 operation




critical section을 보호하기 위해서 많이 사용되는 방법, 한 스레드가 이것을 차지하면 나머지 스레드들은 기다리면서 계속 반복적으로 cpu time을 사용하는
단점 - 나머지 스레드들은 기다리면서 busy waiting mode로 cpu 사이클 사용 


리눅스의 세마포어는 내부적으로 커널 안에 함수로 구현


instruction의 실행 순서를 강제하는 것
프로그램의 일정 구간을 막아서 그 구간 실행동안은 instruction순서 재배치를 막는것
(원래는 cpu의 자원을 최대한 쓰게 하기 위해서 순서를 바꾼다 - 컴파일러에서의 최적화)




# Solaris




mutex - 한 스레드가 자원을 access할때 상호배제적으로 사용하기 위해 사용
세마포어와 다른점 - 세마포어는 lock을 잡고 release하는것이 다른 프로세스가 될수 있다
mutex는 lock을 잡은 스레드가 반드시 그것을 놓아줘야 







# 윈도우







#