#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)。

该系列笔记也载于俺的个人网站:    http://zhangjinkun.com  , 欢迎访问。





#C++工程师#
全部评论

相关推荐

双非坐过牢:非佬,可以啊10.28笔试,11.06评估11.11,11.12两面,11.19oc➕offer
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务