※ 本文為 swallow.bbs. 轉寄自 cd.twbbs.org 更新時間: 2013-01-31 01:54:38
看板 P_RedWolf
作者 標題 [OS] 羅習五 11/30
時間 Tue Dec 2 03:04:27 2008
mreader高 則writer 會動不了
要增加公平性??or 增加平行度??
readcount 目前讀取人數
wrt 資料鎖定: reader在read or writer 在write(這啥廢話 = =
RW
writer - simple 只可一隻writer讀
reader
mutext - reader不可一起動 要等之前的讀完才可以讀
readecount - 紀錄reader數 從這邊以下用wait(mutex)保護起來
wrt - 第一個讀的reader鎖定之 故之後只能read -> writer不可存取
最後離開的reader要unlock 讓這個檔案可以進行其他類型存取
Think: read中檔案 大家一起看是ok的 但是一旦write就會造成存與錯誤
所以才需要用wrt和readcount來防止邊讀邊寫
進入writer用wrt鎖定 故reader會pause在wait(mutex);
Q1: if writer先進入 第一個reader等在哪個queue??
(已經lock) 第二個..............waiting sanpatha?
第三個
A: 第一個在wait(wrt)等 writer做完
第二個在wait(mutex)等前面的reader做完
後面的和前面都一樣
=> reader可接前面的做 writer要等所有的reader都離開才可以讀(寫者餓死)
平行度: 用ready queue中的tesk數目來判定
RCU - 對scheler做了一個普遍性的假設 which不應該做的...
http://en.wikipedia.org/wiki/Read-copy-update
Read-copy-update - Wikipedia, the free encyclopedia
In computer operating systems, read-copy-update (RCU) is a synchronization mechanism implementing a kind of mutual exclusion[note 1] which can sometimes be used as an alternative to a readers-writer lock. It allows extremely low overhead, wait-free reads. However, RCU updates can be expensive, as th ...
![[圖]](http://i2.disp.cc/s/upload.wikimedia.org/wikipedia_en_thumb_6_6b_Rcu_api.jpg_680px-Rcu_api.jpg)
Moniter
當中的函數不可被同時使用 平行度差
Condition variable
整個資料結構被鎖住 又不允許執行get -> 執行錯誤
M.buf{
buffer[][][][][][][][][][];//size=10 buffer示意
get();//塞
put();//拿
}
put();
:
: 中間10次
:
put();//第十一次 wait 且unlock -> 讓後面先做
get();//阿 有東西了 趕快跳回去前面做put
get(){ put(){
wait(__Buf); wait(__Buf);
: :
: :
singnal(_Buf); signal(__Buf);
} }
不能put時
1)執行 xx.wait() -> xx後面出現linkedlist接XX 並unlock 放下一個人進來
^^^^^^^^^^
2)get後 就可以跳回來做put 注意 這個是實做FIFO的queue
著名例子: 哲學家吃飯 //康普特賽恩斯人真討厭哲學家XDDDD
get 其實是分成兩段做 中間差一段put
看課本 看課本
key: 小考一定是某兩行顛倒 然後問正確性 顛倒後不一定是錯的喔
--
紅狼太難畫了 我可不可以畫隻紅色的波利就好?
『紅色波利』
◢◣
--
* Origin: 中正築夢園 (CcuDream.twbbs.org) ★ From: 122.146.209.89
--
※ 看板: Swallow 文章推薦值: 0 目前人氣: 0 累積人氣: 108
回列表(←)
分享