기술면접용 세마포어

2019. 10. 14. 00:47임베디드/운영체제

임계구역에 대한 접근을 막기 위해 Locking 메커니즘이 필요하다

1. Mutex

- 임계구역에 하나의 스레드만 접근 가능

 

2. 세마포어

- 스레드 접근성을 높이고자 사용

- 임계구역에 여러 스레드가 접근 가능

- counter를 두어서 동시에 자원에 접근할 수 있도록 스레드 수를 제어

 

세마포어 연산

1. P

- 임계영역에 접근하기 전 세마포어를 검사해서 1 이상이라면 세마포어 값 S를 1 차감시킨다

 

2. V

- 임계영역을 끝내고 나올 때 세마포어 값 S를 1 증가시킨다

 

세마포어에서 중요한 이슈

- P 연산을 진행할 때 S값이 0이라면 대기를 하는데, 무작정 무한루프를 돌리는 것은 CPU를 심하게 차지한다

- 대기 큐를 만들어, 큐에 삽입한 후 sleep으로 block을 건다. V쪽에서 하나를 반환하면 그때 wake를 해서 대기큐에 있는 스레드를 pop한다

 

 

세마포어와 critical section은 어울리지 않는다. 세마포어를 사용하는 이유는 리소스가 n개만 있을 때, n개의 스레드에게만 할당해야하는 상황이 존재하기 때문이다. counting semeaphore를 열어서 n개의 스레드에게만 할당할 수 있다

'임베디드 > 운영체제' 카테고리의 다른 글

프로세스 구조 deep dive  (0) 2019.10.15
동기와 비동기의 차이  (0) 2019.10.14
스레드의 장단점  (0) 2019.10.13
멀티프로세싱과 스레드  (0) 2019.10.13
프로세스와 스레드의 차이점  (0) 2019.10.13