Written by coh at home

OS supported SW solution -Semaphore 본문

CS/OS

OS supported SW solution -Semaphore

och 2022. 4. 7. 12:18

spinlock에서의 Busy waiting을 해결해봅시다.

 

Dijkstra님이 제안해서 이 문제점을 해결하게 됩니다.

Semaphore는 음이아닌 정수형 변수인데

spinlock과 마찬가지로 초기화, P(), V()연산만 가능합니다.

 

p()는 들어가기 전 검사 v()는 물건 돌려놓는 것으로 똑같습니다. 

Semaphore는 차단기라는 뜻인데 들어가기 전 검사하는 게 p() 나오면서 여는 게 v()로 비유할 수 있겠습니다. 

 

그러면 spinlock이랑 똑같은 거 아냐? 

음.. 다른 점은 임의의 변수 s 하나에 ready queue가 할당 된다는 점이 다릅니다.

 

Semaphore는 두 종류가 있는데 

하나는 Binary로 0,1을 갖는 것이 있고 Counting으로 음이 아닌 정수를 갖는 종류가 있습니다. 

각각 사용하는 데가 다른 데요 binary는  ME에 사용하고 counting은 producer-consumer문제에 사용 됩니다.

교수님은 재밌는 문제라고 하는데 음... ㅋㅋㅋㅋ 가스라이팅 당해서 저도 재밌다고 생각 중입니다. 

 

P(S)의 s는 물건 수이고 물건이 있으면 물건을 꺼내는 연산.

물건이 없다면 ready queue 에서 기다리게 됩니다. 대기실이라고 생각하면 됩니다.

뺑뺑 돌 필요없이 가만히 대기하게 됩니다. 

 

V(S)는 물건을 채워넣는 연산인데

나갈 때 ready queue에 기다리는 프로세스가 있는지 검사하고 있다면

대기실에 있는 애를 깨우게 됩니다. 

 

마찬가지로 이 모든 연산은 OS가 support하게 됩니다. 

 

그리고 semaphore를 배우면..MSDN과 linux에서 쓸 수 있게 됩니다. 

ME 해결 알고리즘은 spinlock과 같고요. 

Semaphore를 사용하면 procss syncroniztion, 즉, 프로세스들의 실행 순서를 맞출 수 있게 됩니다.

 

음... 생산자-소비자 문제를 봅시다. 지금 저는 가스라이팅 당해서 이거 재밌는 문제라고 여기고 있어요.

 

producer는 음.. 뭔가를 생산하는 놈들이고 이게 버퍼에 쌓여있으면 소비하는 녀석들이 가져가게 될 겁니다.

 

문제점은 생산자가 놓는 동안에 소비자가 가져가면 안 된다는 것. (역의 경우도 마찬가지)

그리고 한 명이 놓는 중에 다른 애들이 또 놓으면 안 된다는 것. 

 

기본적인 개념을 가지고 여러가지 문제를 풀면은 모두 풀립니다. 

pseudo code라서 좀 어렵게 느껴지는 거지 다 기본적인 내용이에요.

'CS > OS' 카테고리의 다른 글

Process Syncronization & Mutual Exclusive.2.TAS, spinlock  (0) 2022.04.06
Process Syncronization & Mutual Exclusive  (0) 2022.04.05
메모리/프로세스 질문  (0) 2022.04.01
OS. Thread.  (0) 2022.03.25