在x86_64中中断的成本是多少?例如,由于页面错误导致的中断?内核服务中断然后返回用户空间需要多少周期?我只想知道由于中断和调度被中断的用户级线程而产生的代价,所以我们可以忽略中断处理程序内部发生的事情。

最佳答案

对于odrinary中断(硬件irq或普通异常,如除以零),可能会给出上限。
即使不涉及磁盘IO,处理页错误的时间也特别难以评估,因为CPU必须遍历页表,这会引入许多变量。出现页面错误不仅是因为页面不存在,还因为访问冲突(例如,试图写入只读页面)。在任何情况下,如果TLB中不存在页映射(丢失的映射永远不会缓存),CPU将首先必须遍历多个级别的页表,甚至在调用页错误处理程序之前。访问页表项的时间(如果地址尚未缓存在tlb中)再次取决于某些项是否已在数据缓存中。
因此,从访问线性地址到调用pf处理程序的时间可能是从~200个周期(最佳情况;存在tlb条目,由于错误的访问类型而导致的异常--只是环形开关)到~2000个周期(不存在tlb条目,数据缓存中没有页表条目)。这只是1)执行出现故障的用户模式指令与2)执行页故障处理程序的第一条指令之间的时间。
[旁白:鉴于此,我想知道是否有可能构建使用分页的硬实时系统。]

关于c - x86_64中中断的费用是多少,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10282136/

10-16 20:04