jollen.org

Jollen 的 Blog
Jollen's email: jollen # jollen.org
more:  Jollen's Training

[教育訓練紀錄] 關於驅動程式的 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 (可重覆進入程式碼) 的文章


Tags:

純手工打造說明:技術專欄文章為 Jollen 原創,內容皆為人工撰寫,無 AI 生成。轉載請註明出處與作者,並全文引用。轉載時請在文章開頭或結尾明顯處註明「本文出處:https://www.jollen.org,已取得原作者同意並授權使用。」
訂閱電子報:不定期 Jollen's Blog 精選文章隨 Moko365 電子報寄送;請透過 Moko365 電子報訂閱(可隨時取消)。

Copyright(c) 2001–2008 www.jollen.org. All rights reserved.
Last update: 2026-07-22