Welcome to Rooeye's blog

Orange’s 自制操作系统系列笔记(5)—保护模式(1)

操作系统 rooeye 488℃ 0评论

x86CPU主要有三种工作模式,分别是 实模式保护模式虚拟8086模式。

实模式

在8086CPU中,只有实模式一种工作模式。实模式有自己独特的寻址方式 段地址:偏移地址,它实际对应的物理地址为:

  1. 实际物理地址 = 段地址 * 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)。




来自为知笔记(Wiz)

转载请注明:寻梦人博客 » Orange’s 自制操作系统系列笔记(5)—保护模式(1)

喜欢 (1)
发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址