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