为什么系统调用的数量非常有限?

时间:2017-02-15 11:06:25

标签: linux architecture kernel interrupt ioctl

我正在玩ioctl,这个问题发生在我身上。

背景

  1. 有人告诉我,系统调用的主要动机是允许的中断处理程序数量非常有限。如此多的操作系统实现了系统调用的抽象(a.k.a.陷阱),它只占用一个中断号(在Linux情况下为0x80),但接受额外的参数以按需提供不同的功能。
  2. this thread表示系统调用的数量实际上也非常有限,因此上述相同的推理再次应用于发明ioctl
  3. 因此我的问题。为什么操作系统不提供足够的系统调用并摆脱ioctl? (或者仅仅是为了创建一个层次结构来提供更好的可扩展性?)

1 个答案:

答案 0 :(得分:1)

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

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

  • 您的实施特定于您的驱动程序,其他组件可能不会使用它,
  • 添加新的系统调用并不容易 - 在WIndows上,由于Patchguard(内核补丁保护),它实际上是不可能的,
  • 在Windows上,内核可以帮助您进行"验证"对于IOCTL请求的I / O缓冲区,您必须在实现自己的系统调用时自己完成所有工作。

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