소유의 관점에서 세마포어와 뮤텍스의 차이점은?
뮤텍스에서 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모델 둘다 동일한 맥락이다...
```
'운영체제' 카테고리의 다른 글
paging (0) | 2021.10.24 |
---|---|
메모리관리, 가상메모리, 주소바인딩, (0) | 2021.10.24 |
프로세스 synchronize (0) | 2021.10.21 |
프로세스, 스레드, cpu스케쥴러, contextswitch (0) | 2021.10.19 |
컴퓨터 시스템 구조 (0) | 2021.10.19 |