2010-05-18 139 views
4

我需要編寫一個模擬「多路複用器」的內核模塊使用/ proc文件系統。將信息保存在IO系統中

基本上它需要支持以下方案:

1)允許/ proc文件一個寫訪問和讀出許多訪問/ proc文件。

2)該模塊應該有一個內容緩衝區最後成功寫入。 每次寫入都應該與來自所有閱讀器的讀取相匹配。

考慮場景2,作家寫了一些東西,並且有兩個閱讀器(A和B),A讀取緩衝區的內容,然後A再次嘗試讀取,在這種情況下,它應該進入wait_queue並等待對於下一條消息,應該是而不是再次獲得相同的緩衝區。

我需要保留已讀取當前緩衝區的所有pid的映射,並且如果它們嘗試再次讀取且緩衝區未更改,則應阻止它們,直到出現新緩衝區。我試圖找出有一種方法可以在沒有地圖的情況下保存這些信息。 我聽說I/O系統中有一些冗餘字段,如果它已經讀取了當前緩衝區,我可以使用它來標記進程。

有人可以給我一個提示,我應該在哪裏尋找該領域?我怎樣才能保存當前進程的信息,而不保留pid和緩衝區的「映射」?

謝謝!

回答

1

不要試圖根據PID保留它 - 這只是錯誤的抽象級別。

每次打開文件時,都會創建一個新的struct file,該文件引用該打開文件的實例。將信息(由給定的struct file讀取的最新緩衝區)存儲在struct file本身內。

您可以使用struct file內的private_data指針來存儲所需的信息。這就是它的目的。