星期一, 2月 18, 2008

Inter-process Callback

基本上是想要在User-Mode下實作出Bottom-Halve1的機制. 接下來的描述是想要實作出的機制. 首先產生一個process S (接下來簡稱為S), S提供數個APIs供其它processes透過任一種IPC的機制呼叫. 利用這些APIs, 其它processes可以動態的讓S去執行某些functions, 而這些functions都在於別的processes的space.

例如, Process A告訴S: "有一個function存在於我(也就是Process A)的位址0x1024上, 請執行他.". 然後這時S就開始執行並告訴Process A執行結果. 這裡其實還有一些問題, 簡單的, function的prototype, 討厭一點的, function內變數的位址, 但我們先忽略這些問題. 單純的只是想做到上述的例子. 為了實作出這個機制, 過去幾天找了許多資料. Shared Memory, Memory Mapped I/O和Signal.

在Shared Memory的想法是, 我能不能把function內編譯完的machine code抓出來並寫到一塊shared memory裡面並附予這區塊被執行的屬性. 但試了許久, 抓出machine code了, 也寫到shared memory了, 但就是沒辦行執行起來, 我想也許是我忽略了什麼細節, 這個想法停頓在這裡了.

Memory Mapped I/O則是簡單的把其它processes的可執行檔利用mmap函式把整個file當成是自己space的一剖份, 並利用其它processes提供的function pointer所指的位址並搭配offset去找出function在自己的space的何處並執行. 這個想法目前還沒驗證過, 但可想而知會是一個挺麻煩的方法. 也許有時間時再試試看.

最後是Signal, 看到Signal我想大家都應該知道了, 其實就是processes間互丟signal很簡單的一個方法. 但, 並沒辦法提到最一開始所提到的機制. 所以....嗯...當作是複習一下吧!

其實還有想到很多方法, 但, 使終擺脫不了multi-programming所帶來的束縛. 但, 我如果這麼簡單就做出Inter-process Callback, 代表別人也能, 代表整個作業系統其實是曝露在危險中的. 這樣想想, 自己作不出來某種程度而言也算正常的, 畢竟我也才作了數天而已.

最後, 還是利用Thread或fork的方式做, 但利用Thread去做其實是很危險的, 因為如果 host process在等待自己產生的thread執行完, 而host process在等待則意味著thread可能無法執行, 就這樣形成了dead lock. 所以還是利用fork做比較保險. 但, 值得嗎?

1. 這裡有簡單的解釋http://www.linux-tutorial.info/modules.php?name=MContent&pageid=263

沒有留言: