我们面临两个事实: 1. Syscalls是昂贵的。程序应该将其在堆栈上的状态、陷阱保存到内核上,从而导致缓存和TLB失效等。2.随着新技术(如14 of )的出现,芯片上有足够的空间。
为什么不拥有两套登记簿和两个TLB呢?一个用于用户空间进程,另一个用于内核。每个syscall只需将处理器从用户空间registers+tlb切换到内核,这应该是非常快的。
很明显我漏掉了什么。
发布于 2015-05-07 13:54:06
一些处理器体系结构有影子寄存器。例如,Z80在中断时切换到备用寄存器文件。限制寄存器文件大小的因素之一是时钟周期。如果重命名表太大,则会减缓前端的管道阶段。
TLB通常具有较高的命中率,因为每个条目对应于整个页面,而且它们通常可以标记多个地址空间的条目。对于您的第一个系统调用,TLB丢失的开销可能很高,但是如果您正在进行大量的系统调用,您的TLB很可能会为内核内存保留映射。
发布于 2015-05-01 03:12:16
寄存器用于交换系统调用中的值。有些系统有内核模式堆栈,因此不能使用堆栈来交换值。
https://stackoverflow.com/questions/29973361
复制相似问题