[問題] 磁碟的 consisitency model

看板C_and_CPP (C/C++)作者 (*zstar.get())時間15年前 (2010/08/14 21:30), 編輯推噓2(209)
留言11則, 4人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 我不確定 disk 的 behavior 假設有一個 disk 原本的資料是 A A A A A (5 個 cluster) 經過對不同位置的 write/read 如下 original A A A A A write B B B write C C C read _ _ _ _ _ 最後一個 read 的結果,有可能有哪些? 顯然, B C C C A 是合理的結果。下面這些呢? B B B A A (CCC 尚未寫入) A A A A A (BBB, CCC 均尚未寫入) A C C C A (CCC 已寫入,BBB尚未寫入) B C B A A (BBB已寫入,CCC正在寫入當中) B C A A A (BBB,CCC 均正在寫入中) .... .... (有什麼是保證不會出現的嗎?) 就我所知,disk "有權"調換 io request 的順序,例如: 磁頭先移到的先 service read request 先 service 但是更細節的的部分我就不太清楚了。 此外我也不知道要怎麼找這方面的資料~ 還請各位指點~謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.73.18.132

08/14 21:32, , 1F
比較好奇的是為什麼會有這樣的疑問...
08/14 21:32, 1F

08/14 21:33, , 2F
發生了 B C C C A 以外的結果,我都會覺得這個磁碟壞了XD
08/14 21:33, 2F
那些 request 是微觀的 3 個 request 喔,假設時間間隔很近, 甚至,read 與 write 不是同一 process 會這麼問,是想瞭解 disk 的 behavior / consistency model

08/14 21:42, , 3F
如果時間軸是由上而下, 不是應該被鎖住, 等寫完才有
08/14 21:42, 3F

08/14 21:42, , 4F
辦法讀嗎?
08/14 21:42, 4F
lock 是 OS / database 提供的功能,是嗎? 我想問的比較不是:「要怎樣實作能保證正確」(雖然這方面我也不太瞭解) 而是:「disk 理應提供怎樣的 model,它有確保什麼樣的 behavior」 (或不確保) 感覺應該有 spec 有說明,但不知如何找起.. ※ 編輯: zstar 來自: 203.73.18.132 (08/14 21:49) ※ 編輯: zstar 來自: 203.73.18.132 (08/14 21:50)

08/14 22:18, , 5F
與C/C++相關性甚低 s註記
08/14 22:18, 5F

08/14 22:21, , 6F
寫入的第二筆 如果是 C + + 應該就有關了 = ˇ =
08/14 22:21, 6F

08/14 22:23, , 7F
我會這麼說,是因為這個行為對 user 而言是絕不可見的 XD
08/14 22:23, 7F

08/15 12:31, , 8F
在像CreateFile時不就有指定是否為FILE_SHARE_READ/WRITE
08/15 12:31, 8F

08/15 12:31, , 9F
設0時就由OS來保證其它人此時不能對這個檔做讀寫之類的
08/15 12:31, 9F

08/15 12:32, , 10F
可以看http://ppt.cc/NjL8 disk不需要保證 這該由OS負責
08/15 12:32, 10F

08/15 12:33, , 11F
driver本來就是接到什麼命令就做什麼事
08/15 12:33, 11F
文章代碼(AID): #1CPffxD6 (C_and_CPP)
文章代碼(AID): #1CPffxD6 (C_and_CPP)