从内核空间移除所有系统调用

作者:Zack Brown

目前正在进行一项工作,旨在减少并最终从内核空间中移除所有系统调用。Dominik Brodowski 正在领导这项工作,他发布了一些补丁,以从内核中移除大量实例。 除此之外,他说,这些补丁将更容易清理和优化 syscall 入口点,并且更容易清理内核中仍然需要伪装成用户空间的部分,以便它们可以继续使用系统调用。

正如 Andy Lutomirski 所表达的,这些补丁背后的理由最终是为了防止用户代码访问内核内存。 在内核空间和用户空间之间共享系统调用目前使这成为不可能。 Andy 希望这些补丁能够快速进入内核,而无需等待进一步的清理。

Linus Torvalds 对这些补丁没有任何批评,并且他表示这是一个非常需要的更改。 他主动提出自己进行一些额外的内核发布时间安排,以简化 Dominik 的任务。 Linus 还同意 Andy 的观点,即任何清理工作都可以等待——他不介意首先接受丑陋的补丁来更新系统调用调用约定,然后再接受清理补丁。

Ingo Molnar 预测,通过 Dominik 的更改,编译后的内核大小将会减小——这始终是一件好事。 但 Dominik 说不,事实上,他为 Ingo 快速计算了一些数字,发现使用他的补丁,编译后的内核实际上大几个字节。 Ingo 感到惊讶但并不沮丧,他说轻微的尺寸增加不会成为障碍。

这个项目类似于——虽然可能范围较小——于摆脱 大内核锁 (BKL) 的努力。 在 BKL 的情况下,多年来没有人能弄清楚如何开始替换它,直到最终人们决定将所有 BKL 实例转换为相同的本地实现,这些实现可以用更专业和更轻量级的锁来逐步替换。 在那之后,就只是一个一个地进行替换的问题,直到最终即使是最挑剔的实例也被更专业的锁定代码所取代。

Dominik 现在似乎正在使用类似的技术,其中仍然需要系统调用的内核区域可以伪装成用户空间,而更容易修复的内核区域则首先进行清理。

注意:如果您在上面被提及,并希望在评论部分上方发布回复,请将包含您的回复文本的消息发送至 ljeditor@linuxjournal.com。

Zack Brown 是 Linux JournalLinux Magazine 的一名技术记者,并且曾是 “Kernel Traffic” 每周新闻通讯和 “Learn Plover” 速记打字教程的作者。 他于 1993 年在他的 386 上安装了 Slackware Linux,配备了 8 MB 的 RAM,并且他的思想被开源社区永久地震撼了。 他是 Crumble 纯策略棋盘游戏的创造者,您可以用几块纸板自己制作。 他还喜欢写小说、尝试动画、改革拉班舞谱、设计和缝制自己的衣服、学习法语以及与朋友和家人共度时光。

加载 Disqus 评论