more: Jollen 的 Embedded Linux 教育訓練

« 開放手機:談中國市場的機會 | Home | iPhone 改變工程師設計嵌入式裝置的思惟 »

[教育訓練紀錄] 關於驅動程式的 private data 與可重覆進入函數

jollen 發表於 April 20, 2008 5:09 PM

今天進行 Linux 驅動程式的教育訓練課程,課堂中提到「多個 process (/dev/debug[0..n]) 同時 invoke 同一個驅動程式 (fops) 的架構觀念與程式設計」,我們也做了一個課堂練習。這是 Linux 驅動程式架構上,很重要的一個觀念。

Private Data and Reentrant Function

如圖,當 P 與 Q 二個 process 同時在系統裡執行時,因為開啟的裝置檔不同,因此 kernel(VFS switch)會分別為二個裝置檔建立一個 struct file 的資料結構空間。因為二個裝置檔的 major number 相同,因此如果 P/Q 同時(或非同時)執行 write system call 時,都會引用(invoke)到同一份程式碼(即圖上的 xxx_write)。

VFS Switch 在 callback xxx_write 時,便會將「正確的」struct file 結構傳給a write driver function,即圖中的 filp 指標。如此一來,xxx_write 函數便能「重覆進入」:computation code 一份,但有二份獨立的 data (memory space)。

struct file 裡設計了一個稱為 private_data 的欄位,用來指向「私有資料」,即保存個別 user process 狀態的資料結構。這是在 Linux 驅動程式中很常見的程式結構,當然也是一個「不可不懂」的觀念。`

延伸閱讀

* 2006.09.20: 一篇有關 Reentrant Code Program (可重覆進入程式碼) 的文章


--jollen

引用通告

如果您想引用這篇文章到您的Blog,
請複製下面的鏈接,並放置到您發表文章的相應界面中。

http://blog.jollen.org/mt-tb.cgi/494

發表一個評論

(您發表的意見將被立即接受,但需要一點時間與後端伺服器做同步,您的留言才會顯示在網站上。為避免 spam 攻撃,按「發表」後請輸入帳號密碼。使用者帳號:「nospam」、密碼:「nospam」。)

Top | 授權條款 | Jollen's Forum: Blog 評論、討論與搜尋
Copyright(c) 2006 www.jollen.org