最近借整理ARM/MIPS/X86系列文章之际,对x86体系架构进行了有针对性的学习。联系到大学课程《微机原理与接口技术》,将这次学习的一些心得,收获整理如下。

温故知新

为什么要重新学习x86体系架构呢?在大学期间,学习过《微机原理与接口技术》,课程主要是以8086处理器为例,x86处理器(也就是i386处理器,包括从刚开始的80286,80386,奔腾系列,一直到现在的intel处理器)知识都没有涉及。只有8086处理器的知识,对理解操作系统内存管理原理,编译和链接,C语言运行等造成很大的困惑。

下面主要认识一下CPU中的 内存寻址虚拟内存

内存寻址-实模式/保护模式

x86的内存寻址有两种模式,实模式和保护模式。实模式就是8086中的内存寻址模式,段寄存器左移4位+段基址寄存器的方式。在现在PC上,只有上电时很短的时候CPU工作在实模式,操作系统会很快将CPU切换到保护模式下工作。理解保护模式,也是理解OS内存管理等的基础。

分段机制

因为使用页机制的原因,通过段机制转换得到的地址仅仅是作为一个中间地址――线性地址了,该地址不代表实际物理地址,而是代表整个进程的虚拟空间地址。

虚拟内存技术

虚拟内存技术就是一种由操作系统接管的按需动态内存分配方法。如果说内存寻址是处理器架构要解决的问题(由硬件设计解决),那么虚拟内存就是OS和处理器架构需要共同解决的问题(主要由OS内存管理模块和处理器中的MMU一起解决)。

虚拟内存机制的特点:

Linux的swap分区就是硬盘专门为虚拟存储空间预留的空间。经验大小应该是内存的两倍左右。有兴趣的话可以使用 swapon -s 查看交换分区大小,还可以用vmstat 查看当前每秒换入换出的数据大小(在si/so字段下)。

分页机制

为了减少虚拟地址映射表项所占用的内存空间,所有的OS都采用了页式管理,也就是分页机制。

多级页表

进程权限级别问题

多数架构的CPU提供4个级别,0代表最高级别,3代表最低级别。多数操作系统在设计的时候,只是用了两个级别,内核运行在级别0上,应用程序运行在级别3上,通常称为ring0和ring3。

网络资料

整理“x86体系架构“方面优秀的网络资料。

  1. 由Linux内核之旅网站提供的《i386体系架构》。该资料在网络上有pdf版本,也有多个博客,网站有过转载。
  2. 由李彦昌编写的《80x86保护模式系列教程》。目前在网络上,我只找到chm版本的。
  3. 有一个叫做DOS怀旧存档的网站,其中保存了很多关于i386基础知识的文档,对于夯实基础知识很有帮助。