본문 바로가기
운영체제

세마포어, 뮤텍스

by kcj3054 2021. 10. 21.

소유의 관점에서 세마포어와 뮤텍스의 차이점은?

  • 뮤텍스에서 a, b프로세스가 있을 대 a가 열쇠를 얻고 정상적으로 종료를 하지 않으면 os가 a를 trace해서 열쇠를 획득한 후 b에게 열쇠를 줍니다. 그때 호출 되는 것은 wait_abandoned이다.

  • 세마포어는 소유의 개념이 없지만 뮤텍스는 위의 말처럼 소유의 개념이있다. 세마포어가 소유의 개념이 없는 것은 상대적으로 여러개의 열쇠를 가질 수 있어서 +1, -1이 일치 않아도 되어서 그런 것같다.

세마포어

  • 세마포어는 변수를 하나 둬서 동기화 문제를 해결하는 방법...
  • p연산과 v연산 두가지로 수행 할 수 있다고 보면된다... p연산을 자원을 가져다가 쓰는 것으로 v연산은 자원을 다시 돌려주는 것으로 보면된다. p연산에서 while 조건을 보고 자원이 있다 (양수이다)이러면 들어가서 자원을 쓰고 나와서 v연산을 통해서 자원을 반납합니다...
p(s) : while (s <= 0) // p연산을 수행할때 busy waiting이 발생 할 수도 있다... while조건에 안맞으면 빙글 도니.. s--;`
v(s) : s++;

busy waing을 해결하기 위한 wakeup 수행 방법..

  • 비지 웨이팅이 불필요하다고 보는 관점에서 다른 방법으로 비지웨이팅을 할려고하는 프로세스를 잠재우는 방식이있다...

  • 그러나 이방식도 저방식도 서로 장단점이 있다 왜냐? 재우고 깨우는 순간에 발생하는 오버헤드가 크기때문이다...

  • block

    • block을 호출한 프로세스를 suspend 시킨다... 그후 wait queue에 넣는다..
  • wakeup

    • block된 프로세스를 wakeup한다 그래서 이 프로세스 pcb를 ready queue로 옮긴다..

block & wakeup과 busy waiting 어느것이 더 좋냐???

  • 크리티컬 섹션이 길면 busy waiting 하는 시간이 길기때문에 block & wakeup을 하는 편이 좋다
  • 크리티컬 섹션이 짧으면 재울때 오버헤드가 더 커질 수 있어서 차라리 그냥 busy - wait하는편이 더 좋을 수도 있다..

counting semaphore vs binary semaphore

  • 자원의 갯수를 헤아리는 것은 (counting semaphre)
  • lock을 걸고 푸는 용도로 사용하는 것은 (binary semaphore)

readers - writers 모델

  • readers -writers 모델에서 reader에서 읽을려고 들어가서 readcnt++를 해주었는데 해주고 난 뒤 1이면 내가 최초로 들어간 것이다 그러고 난 뒤 lock을 걸어주어야한다 이유는 그래야지 writer가 접근을 하지 못하도록 막으니...
  • reader끼리는 동시에 리더들이 접근 할 수 있도록 리더카운드를 사용한다
  • readers writers에서 starvation현상이 발생 할 수 있다
  • => 왜냐? reader가 끊임업이 도착하면 writers는 접근하지 못하고 기다려야할 수도 있다...
  • 이것을 해결하기위한 방법 => 신호등과 비스한 방식을 이용하면된다 일정시간 이내에 도착한 리더스에게만 동시접근을 허용하고 이후에는 writers에게 접근을 허용하는 것이다...
  • 생산자 소비자 모델이나 reader - writer모델 둘다 동일한 맥락이다...

출처 : 공룡책
https://velog.io/@injoon2019/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EB%B0%98%ED%9A%A8%EA%B2%BD-%EA%B5%90%EC%88%98%EB%8B%98-2017%EB%85%84-6.-%EB%B3%91%ED%96%89-%EC%A0%9C%EC%96%B4-II

```

'운영체제' 카테고리의 다른 글

paging  (0) 2021.10.24
메모리관리, 가상메모리, 주소바인딩,  (0) 2021.10.24
프로세스 synchronize  (0) 2021.10.21
프로세스, 스레드, cpu스케쥴러, contextswitch  (0) 2021.10.19
컴퓨터 시스템 구조  (0) 2021.10.19