【问题标题】:Why not to double number of registers for fast syscalls?为什么不将快速系统调用的寄存器数量加倍?
【发布时间】:2015-07-10 11:42:29
【问题描述】:

我们面临两个事实: 1. 系统调用很昂贵。程序应将其状态保存在堆栈上,陷阱到内核,这会导致缓存和TLB失效等。 2. 借助新技术(如 14nm),我们有足够的芯片空间。

为什么不拥有两组寄存器和两个 TLB?一个用于用户空间进程,另一个用于内核。每个系统调用只会将处理器从用户空间寄存器 + tlb 切换到内核,这应该非常快。

显然我在这里遗漏了一些东西。

【问题讨论】:

    标签: operating-system cpu-architecture


    【解决方案1】:

    一些处理器架构有影子寄存器。例如,Z80 在中断时切换到备用寄存器文件。限制寄存器文件大小的因素之一是时钟周期。如果重命名表变得太大,那会减慢前端的流水线阶段。

    TLB 通常具有很高的命中率,因为每个条目对应于整个页面,并且它们通常可以标记多个地址空间的条目。第一次系统调用的 TLB 未命中开销可能很高,但如果您进行大量系统调用,您的 TLB 可能会保留内核内存的映射。

    【讨论】:

      【解决方案2】:

      寄存器用于在系统调用中交换值。有些系统有内核模式栈,所以栈不能用来交换值。

      【讨论】:

        猜你喜欢
        • 2014-01-18
        • 2011-03-31
        • 2016-11-01
        • 1970-01-01
        • 2011-11-23
        • 2018-01-21
        • 1970-01-01
        • 1970-01-01
        • 2018-11-10
        相关资源
        最近更新 更多