“Programmer Visible” x86-64寄存器:
alt text http://www.usenix.org/events/bsdcon/full_papers/linden/linden_html/reg.gif
看不见的寄存器怎么样?刚才我了解到MMU寄存器,中断描述符表(IDT)使用这些不可见的寄存器。我正在以艰难的方式学习这些东西。是否有任何资源(书籍/文档/等)可以立即提供完整的图片?
我知道程序员可见的寄存器,并且很容易使用它们进行编程。我只是想了解隐形寄存器及其功能。我想得到一个完整的图片。我在哪里可以获得这些信息?
编辑:
我想要全面了解情况。我在哪里可以获得这些信息?
这两本书帮我理解了所有低级细节。
答案 0 :(得分:3)
IDT是一个中断描述符表,从抽象的视图中包含类似的内容,处理器保留了前18个中断,接下来的18个由英特尔保留,以便将来验证芯片的架构......
Interrupt Handler 0 divide_by_zero_handler 1 debug_handler .. ... 13 general_exception_handler 14 page_fault_handler .. ... 18 machine_check_handler
在此上下文中,处理程序是玩具内核的一部分,每个处理程序都在启动时设置,在加载用户区代码之前。 (BIOS是16位代码,也就是实模式代码),内核设置处理程序,切换到32位保护模式,当发出任何中断时,根据中断号执行相应的处理程序。例如,如果生成了中断14,内核将执行page_fault_handler
,检查页面是否脏并驻留在磁盘上,然后将该页面加载到内存中,修复地址并清除脏位,执行IRET
中断返回指令继续,清除标志....
这是IDT如何工作的抽象视图......幕后有更复杂的事情......取决于内存管理的体系结构和类型,例如分页/平面/保护/虚拟模式寻址方案。 ..
在Intel文档中查看英特尔编程的完整视图......
修改强>
回到过去的DOS(16位代码并且不是很好,确切地受到内存保护),可以将中断处理程序重新路由到您自己的处理程序,从而覆盖原始IDT,例如这样的中断,中断9这是使用getvect(...)
和setvect(...)
调用的键盘中断(在此上下文中是BIOS中断),您也可以处理一些(并非所有处理器中断,特别是IDT 0除以零) )...虽然那些BIOS中断在外观上与处理器中断非常相似,但是它们共享一个共同特征,两者都有中断向量表(当时已知)。这就是由于BIOS中断被重新路由到TSR的处理程序,TSR(Terminate Stay Resident)程序能够在DOS中保持重入...
答案 1 :(得分:2)
您需要研究您感兴趣的特定处理器的处理器参考手册。这是Itanium Processor Reference Manual。