探討 IPC 的文章與文件相當多,例如 http://www.linuxhq.com/guides/LPG/node7.html, http://ai.ee.ccu.edu.tw/os/projects/2004fall/ipc_11/os-3.ppt及http://www.comms.scitech.susx.ac.uk/fft/computer/ipc.pdf是兩篇我覺得寫的很棒的文件,當然不是我寫的。
這邊畫蛇添足地說明一下,正常情況下,OS 為了保護每個 Process 的獨立性,不止從 User 來切割整個作業環境,而且也從 Process 來切割,意思是,每個 User 間是獨立的,互相不會影響,不會因為甲用戶惡搞當機而造成乙用戶也跟著當機,當然行程也是如此。這就導致行程間要互相溝通必須做到一件事:
透過 Kernel!
是可以自行利用 file lock 來溝通,但是這也會有問題,例如別人是否也想這麼做?同步問題怎麼解決?附件有提到幾種正規的作法我就不多談,只是要強調出來,正規作法,其實都是透過 kernel 來達成的。因此有必要對 Kernel 提供的機制進行瞭解,包括 Pipe, Name Pipe, Socket, 信號、共享記憶體等等作法都是如此。
事實上 Kernel 提供出來的機制除了 system call 外,還有其他作法,例如 /proc filesystem, 不過這一點有機會再來說明,這邊簡單的說一下,很多情況下,不止是 Process 間要溝通,連裝置間或是裝置與 Process 間要溝通,透過 /proc filesystem 是非常方便的,甚至比 ioctl 來得簡易。但是簡易不代表有效率。當然這作法有一種限制,你必須去改 kernel, 但是若你剛剛好是作嵌入式系統,必須動到 Kernel , 那麼順便修改並提供利用 /proc filesystem 來溝通的機制也是相當方便的。
/proc, /sys 等,都透露出 kernel 愈來愈 Open, 學習是值得的。
Best Regards
--
自由的精靈, 狂想的空間
Free Spirit, Fantasy Space
Marie von Ebner-Eschenbach - "Even a stopped clock is right twice a day."
2008/12/08
訂閱:
張貼留言 (Atom)
0 意見:
張貼留言