【问题标题】:networking system call multiplexing on x86 but not on x64x86 上的网络系统调用多路复用,但 x64 上没有
【发布时间】:2014-07-12 18:07:07
【问题描述】:

我是reading an article,了解如何在 x86 上进行与网络相关的系统调用,我看到这些调用是通过单个系统调用“socketcall”进行多路复用的。这种额外层次结构的原因似乎是为了节省系统调用号。

快速浏览一下 x64,情况似乎并非如此。为什么会这样? x86 处理器中的每个寄存器都是 32 位长,存储更大的系统调用号值应该不会有问题;那么 x64 上没有实现 socketcall 的原因是什么?

【问题讨论】:

    标签: linux linux-kernel system-calls


    【解决方案1】:

    纯属推测,但在某些像 x86 这样具有少量寄存器的架构上,超过一定数量参数的函数无法有效地将所有参数直接传递到寄存器中(对于 x86,这大约是 6 个)。例如,sendto 和 recvfrom 将 6 + 1 作为系统调用号。在这一点上,传递一个指向 long 数组的指针会更有效,而对于其他参数小于阈值的参数,我猜这是为了方便和相关函数之间的代码共享。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-04
      • 2012-04-21
      • 2020-07-14
      • 2013-06-23
      • 2012-02-20
      • 1970-01-01
      • 2012-12-30
      • 2012-06-09
      相关资源
      最近更新 更多