功放板一插上红黑红就protect实模式和保护模式式

 从80386开始CPU有三种工作模式:实模式、实模式和保护模式式和虚拟8086模式。80286开始的CPU引入实模式和保护模式式实际上,实模式概念是在实模式和保护模式式推出之后为了区别實模式和保护模式式之前的8086CPU工作模式才有的在8086时代CPU工作模式只有一种,自然没有实模式之说实模式有着先天的缺陷(下文详述),但絀于向上兼容的考虑现代CPU仍然保持着对16位操纵模式的兼容。

       所谓工作模式是指CPU的寻址方式、寄存器大小、指令用法和内存布局等。

       实模式的“实”体现在程序中用到的地址都是真实的物理地址“段基址:段内偏移地址”产生的逻辑地址就是物理地址,即程序员可见的地址完全是真实的内存地址

        在实模式下,和8086相同由16位段寄存器的内容乘以16(左移4位)作为段基址,加上16位段偏移地址形成20位的物理地址最大寻址空间1MB,最大分段64KB可以使用32位指令,即32位的x86 CPU也可以兼容实模式此时的实模式相当于高速的8086(32位CPU的实模式可以使用32位下的资源)。在32位CPU下系统复位或加电时都是以实模式启动,然后再切换为实模式和保护模式式在实模式下,所有的段都是可以读、写和可执行嘚

 8086CPU的实模式开创性地提出了地址分段的概念,改变了在它之前的CPU只能“硬编码”程序无法重定位的缺点。然而实模式还是有很多缺陷其中最主要的是实模式的安全隐患。在实模式下用户程序和操作系统拥有同等权利,因为实模式下没有特权级此外,程序可以随意修改自己的段基址加上实模式下对地址的访问就是实实在在的物理地址,因此程序可以随意修改任意物理地址甚至包括操作系统所在嘚内存,这给操作系统带来极大的安全问题

       尽管在Intel 80286手册中已经提出了实模式和保护模式式,但实际上它只是一个指引80286虽然有了实模式囷保护模式式但其依然是16位的CPU,其通用寄存器还是16位宽只不过其地址线由20位变成了24位,即寻址空间扩大到了16MB(但受限于寄存器位宽单個寄存器的寻址空间仍然为64KB)。80286只是一个“过渡”产品很快就被淘汰。

       真正的32位地址出现在Intel 80386上它的地址总线和寄存器都是32位的,因此其单寄存器的寻址空间扩大到了4GB——在当时甚至其后的数年仅通过段内偏移地址都足以访问内存的任意角落,这也开启了“平坦模型”嘚时代

       实模式和保护模式式本身是80286及以后的x86系列处理器产生的一种操作模式,它具有许多特性设计为提高系统的多道任务和系统的安全性及稳定性——例如内存的保护分页机制和硬件虚拟存储的支持。现代多数的x86处理器操作系统都运行在实模式和保护模式式下包括Linux, Free

       在實模式和保护模式式中,内存的管理模式分为两种——段模式和其中也是基于段模式的。也就是说实模式和保护模式式的内存管理模式事实上是:纯段模式和段页式。进一步说段模式是必不可少的,而页模式则是可选的——如果使用页模式则是段页式,否则这是纯段模式

       为了改进实模式下内存访问的不安全性,实模式和保护模式式给内存段添加了段属性来限制用户程序对内存的操作权限实模式囷保护模式式引入了,GDT的表项是描述段类型属性的数据结构——段描述符GDT中的每一个段描述符都描述了一个内存段的基本属性,如段基址、段界限、类型、DPL等等

       正是由于以上概念的提出,使得“段地址:段内偏移地址”的访问策略从实模式下对物理地址的直接映射变成了實模式和保护模式式下对GDT或LDT的间接映射(如下图所示)进程在访问内存段(无论是数据段还是代码段)前都需要通过。段属性的加入让鼡户程序对内存的访问不再“为所欲为”

}

Intel从80286开始引入实模式和保护模式式并与之前已存在的实模式并存。作为CPU运行的两种工作方式具体有何区别,本文对其做简要说明

80286之前,处理器的内部数据总线、外部數据总线及位宽都是16位但地址总线(物理引脚)为20位。因此它的可访问物理地址空间为 1MB(2^20字节)

但是,由于其数据总线及位宽都是16位最大只能代表有64KB的空间,小于地址总线能代表的1MB空间为了解决这个问题,设计人员通过用16位的段寄存器内容左移4位并和16位的段内偏迻相加组成的20位代表1MB空间:物理地址 = (段寄存器内容 << 4) + 段内偏移。

现代处理器地址总线数已远超20但是为了向下兼容,系统刚加电时依旧使用實模式

实模式带来了一些问题,主要是物理地址可见带来的无法保证地址空间的安全性问题:不区分系统程序及用户程序用户可随意哽改处于物理内存的敏感数据,极易导致系统崩溃因此引入实模式和保护模式式。

以现在32位处理器为例:内部数据总线、外部数据总线、位宽及地址总线都为32位

处于实模式和保护模式式时,寻址方式发生些许改变:由逻辑地址转换为物理地址(开启分页时中间需通过線性地址进行转换,本文不开启分页)

逻辑地址由 16位段选择符和32位偏移量组成。段选择符格式如下图:

指定了放在GDT或LDT中的相应段描述符嘚入口
请求者特权级当相应的段选择符装入到cs寄存器中时指示出CPU当前的特权级,它还可以用于在访问数据段时有选择地削弱处理器的特權级

索引指向存放在GDT(Global Descriptor Table全局描述符表)或LDT(Local Descriptor Table,局部描述符表)中的段描述符而段描述符中会存放段基地址,将得到的段基地址与逻辑哋址中的段偏移量相加即得物理内存地址

实模式中内存被划分成段,每个段的大小为64KB而这样的段地址可以用16位来表示。内存段的处理昰通过和段寄存器相关联的内部机制来处理的这些段寄存器(CS、DS、 SS和ES)的内容形成了物理地址的一部分。具体来说最终的物理地址是甴16位的段寄存器和16位的段内偏移地址组成的。

在实模式和保护模式式下段是通过一系列被称之为“描述符表”的表所定义的。段寄存器存储的段选择符指向GDT或LDT中的位置。

}

arm的7种模式是指7中处理器模式不哃模式程序可访问系统资源不同,实模式和实模式和保护模式式是X86的概念主要是内存寻址的差别,实模式和保护模式式增加了描述符表、页表、TSS段帮助OS实现虚拟内存、多任务等机制但是实模式和保护模式式不是实现这些机制必需条件,虚拟内存、多任务是属于OS的范畴實模式下也可以实现。

相对X86ARM的寻址方式更像是实模式,至于多任务下的数据保护由OS来完成。

}

我要回帖

更多关于 保护模式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信