#Orange's 自制OS系列笔记(5)#保护模式(1)
x86CPU主要有三种工作模式,分别是 实模式,保护模式和 虚拟8086模式。
实模式
在8086CPU中,只有实模式一种工作模式。实模式有自己独特的寻址方式
段地址:偏移地址
,它实际对应的物理地址为:
实际物理地址 = 段地址 * 16 + 偏移地址
16位的8086CPU,它的内部总线宽度是16位
,外部总线(即地址总线)宽度是20位,寻址空间为1 M 。
段地址和偏移地址都是16bit的数据,原本寻址空间最大只有64KB,但是为了使得寻址空间能够达到1M,所以采用了将段地址乘以16的方法,即将二进制的段地址向左移4位,凑够20位。
比如 2000H:0002H,段地址 = 2000H,偏移地址 = 0002H,那么实际物理地址就是 20002H .
段地址和偏移地址会通过地址加法器产生实际物理地址,并将其传输给外部地址总线,见下图:
这里要注意 “段”
只是人为分段,实际内存并没有分段,内存中任何一个段的开始地址永远是16的倍数,而由于偏移地址只有16bit,所以一个段的最大长度也只有 64KB。
实模式只能访问地址在1M以下的内存,也就是说实模式下CPU的寻址空间只有1M。
保护模式
32位的80x86CPU主要工作在保护模式下,但是为了向前兼容8086/8088的CPU,运行一些旧的软件,也可以工作在实模式下,也就是说intel的32位CPU完全兼容16位的CPU,可以使用16位CPU的寻址方式
,但是保护模式的寻址方式和实模式则不一样。
之所以叫做 ”保护“模式,是因为在保护模式中对访问进行了权限控制,以达到保护的目的。在实模式中,系统程序和应用程序具有相同的权限,这就造成了一些安全隐患。
在保护模式中,”保护"主要体现在两个方面:
不同任务之间的保护:
通过把不同任务放在不同的虚拟地址空间中,实现不同任务之间的隔离(即A程序不能访问和修改B程序的代码和数据),以达到程序间的隔离。
同一任务之间的保护:
在每一任务之内定义了4种保护级别 ,
通过Ring级别进行了访问控制,以
环的方式表示见下图:
Ring级别从上图可看出一共分为4个层次,
依次是 Ring0,Ring1,Ring2,Ring3、其中Ring0权限最大,Ring3权限最小
,工作在某一层的程序只能访问权限小于等于它的数据,执行权限小于等于它的指令。
但是常见操作系统比如 windows
操作系统
和 linux 操作系统,都只是使用了Ring0和Ring3两层,其中操作系统内核工作在Ring0层,普通应用程序工作在Ring3层,也就是说系统程序可以访问所有数据,而普通应用程序无法访问高于R3层的数据。
虚拟8086模式
虚拟8086模式顾名思义,就是“虚拟”的8086模式,8086模式指的就是实模式,也就是说“虚拟的实模式”,它是指在保护模式上虚拟一个实模式,目的是在32位保护模式下执行16位程序。
下一篇笔记
继续
写保护模式(Protect Mode)。