2023.05.18 - (⚠ 운영체제 주의) 세마포어 알아보기

최지원2023. 5. 19. 13:30

 

안녕하세요, 요새 운영체제 관련 게시글이 없다는 말이 많아서

최근에 Lock, CV(Condition), Semaphore 등등...

 

동기화를 위하여 사용하는 친구들을 배우고 있는데

그 중에서도 개인적으로 가장 헷갈렸던 세마포어(semaphore)에 대하여

공부한 내용을 바탕으로 글을 작성해보려고 합니다.

 

 

그렇다면 가시죠!

 

 

semaphore의 유래

세마포어의 원래 뜻은 기차 등에서 사용하는 '까치발 신호기'를 말합니다.

까치발 신호기는 기둥에 붙인 가로대를 올렸다 내렸다 함으로써 열차의 운전 조건을 지시하는 장치인데요.

 

두 개의 선로가 같은 레일을 공유할 때가 있다!

열차의 운전 조건을 지시하는 이유는 공유하는 기차의 선로가 있기 때문입니다.

동시에 두 기차가 같은 선로를 지나간다면 큰일나겠죠?

이때 그 선로는 critical section으로 생각할 수 있으며

semaphore(까치발 신호기)는 이러한 critical section 진입을 허가, 금지 하는 역할을 합니다.

 

 

 

운영체제에서의 semaphore

지금부터는 운영체제에서의 semaphore에 대하여 다루어보도록 하겠습니다.

위 설명으로 들어보면 semaphore와 lock이 상당히 비슷한 것 같은데

무엇이 다르고, 또 기차 선로에 사용되는 semaphore와는 무엇이 다를까요?

 

 

일단 lock부터 살펴보면 값을 0, 1만 가질 수 있습니다.

세마포어는 shared data의 개수를 의미하기 때문에 값이 0, 1, 2, ... 등이 될 수 있습니다.

그렇기 때문에 0, 1만을 값으로 가지는 세마포어는 binary semaphore라고 따로 분류하며

이 아이는 우리가 알고 있는 Lock처럼 사용할 수 있습니다.

 

lock은 자신이 1이 lock을 건 상태이지만

semaphore는 자신이 0인 것이 lock을 건 상태입니다(semphore의 값이 0, 1만 있을 때).

 

 

 

semaphore의 자원 관리 방법

 

세마포어의 값을 증가, 감소(가져오기, 반환) 등을 하는 것이 중요합니다.

그렇다면 세마포어는 어떠한 방법을 해당 자원들을 관리할까요?

 

semaphore를 객체처럼 본다면 다음과 같음!

 

세마포어를 일종의 객체라고 생각을 한다면 세마포어에는 wait(), signal()이라는 메소드를 가지고 있습니다.

wait()과 signal()라는 이름이 조금 와닿지 않을 수 있어서 간략하게 스토리를 더해서 용어를 매칭하면 쉽게 이해됩니다.

 

 

wait()

1. shared data를 사용하기 위해서 왔음

2-1. shared data가 있으면? -> 사용하니까 -1을 함

2-2. shared data가 없으면? -> 기다려야 하니까 wait()

 

따라서 shared data가 있으면 -1을 하고 없으면 기다립니다.

 

 

signal()

1. shared data를 돌려주기 위하여(공급하기 위하여) 왔음

2. shared data를 기다리는 사람이 있을 수도 있으니까 신호를 보냄 signal()

 

따라서, shared data를 돌려놓고 Waiting Queue에 신호를 보냄

 

 


세마포어의 경우에는 굉장히 여러 방법으로 응용되고 있습니다.

lock처럼 사용되기도 하고

Condition Variable처럼 사용되기도 하고

 

각각의 thread를 동기화 시키는 역할을 하는 일들에 잘 사용되고 있죠.

운영체제의 도전 과제 중에서도 이 세마포어를 이용한 과제가 있는데

조금 더 자세히 알아보고 도전해보려고 합니다.

 

운영체제 화이팅~

 

 

 

참고문헌 : https://jhnyang.tistory.com/101

 

[운영체제]세마포어(semaphore) 완전 쉬운 이해! wait(), signal(), 이진, 계수형

운영체제 완전 정복 목차~! semaphore의 유래~! 세마포어란? Semaphore는 깃발이라는 뜻입니다. 옛날에는 기찻길에서 깃발 표식으로 파란색이 걸려있으면 지나가도 되고 빨간색이 걸려있으면 섰다가

jhnyang.tistory.com

 


모각코 마무리 인사

 

사실 이번 학기에도 모각코를 또 할 수 있을지 정말 상상도 하지 못했습니다.

마음이 맞는 친구들과 같이 공부한다는 것이 정말 좋은 기회라고 생각합니다.

커피랑 밥 개꿀맛

 

나름 os술사라는 직책을 부여받아서 그런지는 모르겠지만

운영체제 공부를 이번 학기에 제일 열심히 했습니다

시험도 잘봄!

 

3회 모각코에서도 찾아뵐 수 있으면 좋겠습니다 :) 감사합니다.

제가 팀장 설득해서 대학원 팀으로 제 5회까지 만날 수 있게 해볼게요