在lxr.linux.no浏览 linux 2.6.36 源代码,我ioctl()
在file_operations
. 相反,我发现了两个新调用:unlocked_ioctl()
和compat_ioctl()
。是什么区别ioctl()
,unlocked_ioctl()
和compat_ioctl()
?
Gil*_*il' 44
元答案:发生在 Linux 内核上的所有原始内容都通过lkml(Linux 内核邮件列表)。有关解释性摘要,请阅读或搜索lwn(Linux 每周新闻)。
答:从的ioctl()的新方法由乔纳森·科比特:
ioctl()
是在大内核锁 (BKL) 下运行的内核的其余部分之一。过去,BKL 的使用使得长时间运行的ioctl()
方法可以为不相关的进程创建长时间的延迟。
下面介绍了该补丁的说明unlocked_ioctl
,并compat_ioctl
为2.6.11。该字段的移除ioctl
发生在很晚之后的 2.6.36 中。
说明:在ioctl
执行时,它占用了大内核锁(BKL),因此不能同时执行任何其他操作。这在多处理器机器上是非常糟糕的,因此我们付出了很大的努力来摆脱 BKL。首先unlocked_ioctl
是介绍。它让每个驱动程序编写者选择要使用的锁。这可能很困难,因此有一段过渡期,在此期间旧驱动程序仍然可以工作(使用ioctl
),但新驱动程序可以使用改进的界面(unlocked_ioctl
)。最终所有驱动程序都被转换并且ioctl
可以被移除。
compat_ioctl
实际上是不相关的,即使它是同时添加的。其目的是允许 32 位用户态程序ioctl
调用 64 位内核。最后一个参数 to 的含义ioctl
取决于驱动程序,因此无法进行独立于驱动程序的转换。
归档时间: |
|
查看次数: |
57291 次 |
最近记录: |