今天看代碼時突然發現,好像看到linus在寫代碼時的一些準則了,再根據趙博士的一句話"內核開發者不可能總是關注這些細節問題的!“,然後參照自己的理解總結出來一些準則,本人初學,如果有問題還請留言指正。
1.在關於鎖的操作上,希望是原子操作,所以不管什麼先關中斷再說
2.在互斥資源上,如果下面可能睡眠,那麼先上鎖再說,這點可以從inode.c中的read_inode函數中可以看出!
3.如果進程修改了某些indoe等一些公共內容,如果下面有bread之類可能睡眠的函數那麼先把i_dirty置1,以免丟失數據。
4.貌似只要是進程打開的,不是用作公共有途的,如打開一個i_node用來添加目錄,打開一塊緩衝區用作他用,這些都算是私有的,不算是臨界,共同使用同個i_node或同一個緩衝區的可能性很小?我只能這麼解釋他爲什麼在bread後在進程中不上鎖了!