gpt4 book ai didi

linux - 为什么系统调用的次数非常有限?

转载 作者:太空宇宙 更新时间:2023-11-04 10:24:29 25 4
gpt4 key购买 nike

我在玩 ioctl 时想到了这个问题。

背景

  1. 有人告诉我系统调用的主要动机是允许的中断处理程序的数量非常有限。如此多的操作系统实现了系统调用的抽象(又名陷阱),它只占用一个中断号(在 Linux 中为 0x80),但接受额外的参数以按需提供不同的功能。
  2. this thread表明系统调用的数量实际上也非常有限,因此再次应用上述相同的推理来发明ioctl

因此我的问题。为什么操作系统不提供足够的系统调用并摆脱 ioctl? (或者仅仅是创建一个层次结构以提供更好的可扩展性?)

最佳答案

我对此的看法是,系统调用可以看作是操作系统内核为用户应用程序提供的一组服务,而 ioctl 只是这些服务中的一个,它允许您发送一个对特定设备(或驱动程序)的自定义命令。

在开发驱动程序时,您可能会为传入的 ioctl 请求编写一个处理程序。通过实现自己的系统调用来管理同一件事有几个缺点:

  • 您的实现是特定于您的驱动程序的,其他组件可能不会使用它,
  • 添加新的系统调用并不是那么容易——在 WIndows 上,这几乎是不可能的,因为有 Patchguard(内核补丁保护),
  • 在 Windows 上,内核可能会帮助您“验证”IOCTL 请求的 I/O 缓冲区,在实现您自己的系统调用时,您必须自己完成所有工作。

您可以将ioctl 视为readwrite 的泛化。可以提供输入和输出缓冲区,以及定义目标(通常是内核驱动程序)所需操作的控制代码。

关于linux - 为什么系统调用的次数非常有限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42247610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com