為什么要上鎖?一個(gè)原因是原子性,另一個(gè)原因就是為了防止 lost wakeup,防止死鎖??梢钥纯春竺娴?同步:sleep & wakeup。原子性即代表當(dāng)前 CPU 不發(fā)生調(diào)度、其他 CPU 執(zhí)行 acquiresleep 需要互斥。因此睡眠鎖使用 xchg 很難保證原子性,這里 xv6 使用自旋鎖,就能很好的保證睡眠鎖的原子性。
是否可以檢測(cè)完對(duì)象之后再獲取 obj_lock 呢?這是不正確的,將會(huì)導(dǎo)致進(jìn)程的操作不是原子的,出現(xiàn)多個(gè)進(jìn)程進(jìn)入緩沖區(qū)操作同一個(gè) obj 的情況。3.1.2 sleep
假設(shè)剛釋放鎖,雖然此時(shí)可能不會(huì)發(fā)生中斷,但是其他 cpu 并行時(shí)會(huì)重新獲取鎖,然后快速執(zhí)行完 wakeup,因此出現(xiàn)了 lost wakeup由于涉及到了進(jìn)程狀態(tài)的修改,所以 xv6 選擇用 ptable.lock 來(lái)保證上面操作的原子性。
一般而言,父進(jìn)程可能不會(huì)sleep兩次?4.進(jìn)程調(diào)度
xv6 下系統(tǒng)調(diào)用是異常門(mén),所以?xún)?nèi)核下是可以開(kāi)中斷的。4.1.3 進(jìn)程B解鎖
歡迎光臨 愛(ài)鋒貝 (http://7gfy2te7.cn/) | Powered by Discuz! X3.4 |