上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
第1章x86硬件基础
如果你是一个Linux内核初学者,你一定常常遇到:保护模式,分段机制,分页机制,段地址,线性地址,中断门,调用门,局部描述符,全局描述符,等等这样的名词。这些概念常常把初学者弄得“云里来,雾里去”。你会常常感慨,Intel为什么要设计这么复杂的概念呢?仅仅是一个地址机制,就常常让初学者打开书本,发现自己会算了,可是一旦关上书本,换个例子,又迷惑了。
事实上这些机制的背后都有它的缘由,任何一个复杂的设计都是由一个简单的设计发展起来的,当简单的设计满足不了实际需要时,就会一步一步地革新,直到问题被圆满地解决。因此理解一个“复杂”的东西的最好方式不是去记住它,而是要从最简单的地方入手,一步一步地推敲,简单的设计在现实中会遇到什么问题?又该如何解决这个问题?再联系到你现在要理解的复杂的例子,慢慢地建立起一条完整的线索,这样知识不会出现断层,你也不需要一次跨越一个鸿沟,一切都水到渠成。例如:在学习保护模式中的地址机制时,你一定会感觉为什么要这么复杂呢?实模式不是很简单吗?既然实模式简单,那么不妨想想,如果使用实模式会遇到什么问题呢?把这些问题都一一列出来,再结合现有机制,你就会很自然的理解为什么需要这么做了。本章将试图让读者看到这些概念背后的“为什么”。
图1.1 虚拟地址映射
图1.2 32位X86系统两级页表结构
图1.3 页表项结构
图1.4 段描述符
图1.5 局部描述符表访问示意图
图1.6 段选择子
图1.7 任务状态段
图1.8 任务状态段描述符
图1.9 中断门&陷阱门描述符
图1.10 任务门描述符
图1.11 CR0寄存器
图1.12 EFLAGS标志寄存器
图1.13 典型PC系统简要框图示例