2010-05-18 172 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指针来存储所需的信息。这就是它的目的。