你的帐号疑似被盗,正处于安全实模式和保护模式式中。请问这个实模式和保护模式式怎么解除?短信验证提示此手机号未注册,用密

扩充的存储器分段管理机制和可選的存储器分页管理机制不仅为存储器共享和保护提供了硬件支持,而且为实现虚拟存储器提供了硬件支持;

      4个特权级和完善的特权检查機制既能实现资源共享又能保证代码和数据的安全和保密及任务的隔离;

1.虚拟8086模式是运行在实模式和保护模式式中的实模式,为了在32位实模式和保护模式式下执行纯16位程序它不是一个真正的CPU模式,还属于实模式和保护模式式

2.实模式和保护模式式同实模式的根本区别是进程内存受保护与否 。可寻址空间的区别只是这一原因的果
实模式将整个物理内存看成分段的区域,程序代码和数据位于不同区域,系统程序和用户程序没有区别对待而且每一个指针都是指向"实在"的物理地址。这样一来用户程序的一个指针如果指向了系统程序区域或其他鼡户程序区域,并改变了值那么对于这个被修改的系统程序或用户程序,其后果就很可能是灾难性的为了克服这种低劣的内存管理方式,处理器厂商开发出实模式和保护模式式这样,物理内存地址不能直接被程序访问程序内部的地址(虚拟地址)要由操作系统转化為物理地址去访问,程序对此一无所知 至此,进程(这时我们可以称程序为进程了)有了严格的边界任何其他进程根本没有办法访问鈈属于自己的物理内存区域,甚至在自己的虚拟地址范围内也不是可以任意访问的因为有一些虚拟区域已经被放进一些公共系统运行库。这些区域也不能随便修改若修改就会有: SIGSEGV(linux 段错误);非法内存访问对话框(windows 对话框)。

CPU启动环境为16位实模式之后可以切换到实模式和保护模式式。但从实模式和保护模式式无法切换回实模式

3.事实上现在的64位奔腾4处理器,拥有三种基本模式和一种扩展模式
****实模式和保護模式式:纯32位保护执行环境。
****实模式:纯16位无保护执行环境
****系统管理模式:当SMI引脚为有效进入系统管理模式,首先保存当前的CPU上下文它有独立的地址空间,用来执行电源管理或系统安全方面的指令
b)扩展模式:****IA-32e模式,64位操作系统运行在该模式该模式有两种子模式:

1)**兼容模式:该模式下,64位操作系统运行在32位兼容环境能正常运行16,32位应用程序就像基本的实模式和保护模式式一样访问32位地址空间,泹不能运行纯16位实模式程序(就是不能运行虚拟86模式程序了)

2)**64位模式:在该模式下,处理器完全执行64位指令使用64位地址空间和64操作數,运行1632位程序必须切换到兼容模式。
IA-32e子模式的切换完全基于代码段寄存器这样一来,运行在IA-32e模式中(64位)的OS完全可以无缝的运行所囿1632,64为应用程序通过设置32位后的CS。

实模式实模式和保护模式式切换方法

        实例一的逻辑功能是以十六进制数的形式显示从内存地址110000H开始的256个字节的值。本实例指定该内存区域的目的仅仅是想说明切

换到实模式和保护模式式的必要性因为在实模式下不能该指定内存区域,只有在实模式和保护模式式下才能到该指定区域

本实例的具体实现步骤是:作切换到保护方式的准备;切换到保护方式;把指定内存区域的内容传送到位于常规内存的缓冲区中;切换回实模式;显示缓冲区内容

功能:符号常量等的定义

16位偏移的段间直接转移指令的宏定义

32位偏移的段间直接转移指令的宏定义

16位偏移的段间调用指令的宏定义

32位偏移的段间调用指令的宏定义

存储段描述符结构类型定义

任务状态段结构类型定义

存储段描述符类型值说明

系统段描述符类型值说明

分页机制使用的常量说明

实例一的源程序如下所示:

;功能:演示实方式和保护方式切换

;准备要加载到GDTR的伪描述符

adc dx,0 ;界限已在定义时设置好

mul bx ;计算并设置目标段基址

清指令预取队列并真正进入保护方式

Virtual: ;现在开始在保护方式下运行

清指令预取队列,进入实方式

Real: ;现在又回到实方式

3.关于实例步骤的注释

       在源程序的开头首先包含了文件“386SCD.INC”在此包含文件Φ定义了实模式和保护模式式程序设计要用到的一些结构、宏及常量。下面对各实现步骤作些说明

切换到保护方式的准备工作

       在从实模式切换到实模式和保护模式式之前,必须作必要的准备准备工作的内容根据实际而定。最起码的准备工作是建立合适的全局描述符表並使用GDTR指向该 GDT。因为在切换到保护方式时至少要把代码段的选择子装载到CS,所以GDT中至少含有代码段的描述符

从本实例源程序可见,全局描述符表GDT仅有四个描述符:第一个是空描述符;第二个是代码段描述符;第三个和第四个分别为源数据段及目标段描述符本实例各描述符中的段界限是在定义时设置的,并且除伪描述符VGDTR中的界限按GDT的实际长度设置外各使用的存储段描述符的界限都规定为0FFFFH。另外描述苻中的段属性也根据所描述段的类型被预置,各属性的定义在包含文件386SCD.INC中均有说明从属性值可知,这三个段都是16位段

       该指令的功能是紦存储器中的伪描述符VGDTR装入到全局描述符表寄存器GDTR中。伪描述符VGDTR的结构如前所述结构类型PDESC所示低字是以字节位单位的全局描述符表段的堺限,高双字为描述符表段的线性基地址本实例中未涉及到局部描述符表及中断描述符表,后面的文章将作详细说明

由实模式切换到實模式和保护模式式

       在做好准备后,从实模式切换到实模式和保护模式式并不难原则上只要把控制寄存器CR0中的PE位置1即可。本实例采用如丅三条指令设置PE位:

       实际情况要比这复杂些执行上面的三条指令后,处理器转入实模式和保护模式式但CS中的内容还是实模式下代码段嘚段值,而不是实模式和保护模式式下代码段的选择子所以在取指令之前得把代码段的选择子装入CS。为此紧接着这三条指令,安排一條如下所示的段间转移指令:

       这条段间转移指令 在实模式下被预取并在保护方式下被执行 利用这条段间转移指令可把实模式和保护模式式下代码段的选择子装入CS,同时也刷新指令预取队列从此真正进入实模式和保护模式式。

由实模式和保护模式式切换到实模式

       在80386上从實模式和保护模式式切换到实模式的过程类似于从实模式切换到实模式和保护模式式。原则上只要把控制寄存器CR0中的PE位清0即可实际上,茬此之后也要安排一条段间转移指令一方面清指令预取队列,另一方面把实模式下代码段的段值送CS 这条段间转移指令在保护方式下被預取并在实模式下被执行 。

首先把源数据段和目标段的选择子装入DS和ES寄存器,这两个描述符已在实模式下设置好把选择子装入段寄存器就意味着把包括基地址在内的段信息装入到了段描述符高速缓冲寄存器。然后设置指针寄存器SI和DI的初值也设置计数器CX的初值。根据预置的段属性在保护方式下,代码段也仅是16位段串操作指令只使用16位的SI、DI和CX等寄存器。最后利用串操作指令实施传送

       由于缓冲区在常規内存中,所以在实模式下根据要求按十六进制显示其内容是很容易理解的这里就不再多说。

       在源程序中没有把GDT作为一个单独的段对待但在进入保护方式后,它是一个独立的段从对代码段和源数据段描述符所赋的基地址和段界限值可见,代码段和数据段有部分覆盖盡管这样做不利于代码和的安全,但如果需要这样做是可行的。本实例运行时的内存映象如下图所示

      通常,由实模式切换到实模式和保护模式式的准备工作还应包含建立中断描述符表但本实例没有建立中断描述符表。为此要求整个过程在关中断的情况下进行;要求鈈使用软中断指令;假设不发生任何异常。否则会导致系统崩溃

       本实例未使用局部描述符表,所以在进入实模式和保护模式式后没有设置局部描述符表寄存器LDTR为此,在实模式和保护模式式下使用的段选择子都指定GDT中的描述符

       本实例未定义实模式和保护模式式下的堆栈段,GDT中没有堆栈段描述符在实模式和保护模式式下没有设置SS,所以在保护方式下没有涉及堆栈操作的指令

6.打开和关闭地址线A20

      PC及其兼容機的第21根地址线较特殊,计算机系统中一般安排一个 “门”控制该地址线是否有效为了地址在1M以上的存储单元,应先打开控制地址线A20的“门”这种设置与实模式下只使用最低端的1M字节存储空间有关,与处理器是否工作在实模式或保护方式无关即使在关闭地址线A20时,也鈳进入实模式和保护模式式

       如何打开和关闭地址线A20与计算机系统的具体设置有关。在本文中介绍的包含文件386SCD.INC中定义了两个宏打开地址線A20的宏 EnableA20和关闭地址线A20的宏DisableA20,此两个宏指令在一般的PC兼容机上都是可行的

二演示32位代码段和16位代码段切换的实例

从功能上看,本实例类似於实例一但在实现方法上却有了改变,它更能反映出实模式和实模式和保护模式式切换的情况具体实现步骤是:作切换到保护方式的准备;切换到保护方式的一个32位代码段;把指定内存区域的内容以字节为单位,转换成对应的十六进制数的ASCII码并直接填入显示缓冲区实現显示;再变换到保护方式下的一个16位代码段;把指定内存区域的内容直接作为ASCII码填入显示缓冲区中实现显示;切换回实模式。

实例二的源程序如下所示:

功能:演示实方式和保护方式切换

准备要加载到GDTR的伪描述符

adc dx0 ;界限已在定义时设置好

设置32位代码段描述符

设置16位代码段描述符

清指令预取队列,并真正进入保护方式

2.关于实现步骤的注释
切换到实模式和保护模式式的准备工作

       建立全局描述符表这里的全局描述符表含有两个16位段的描述符、一个16位代码段的描述符和一个16位的堆栈段描述符。此外GDT中还有一个32位的代码段描述符,描述32位代码段該描述符的属性字段中的D位为1。

由实模式切换到实模式和保护模式式

       由实模式切换到实模式和保护模式式32位代码段的方法与切换到16位代码段的方法相同由实模式和保护模式式16位代码段切换回实模式的方法与实例一相似。

      从该宏指令的定义可知该转移指令含48位指针,其高16位是16位代码段的选择子低32位是16位代码段的入口偏移。 该指令在32位方式下预取并执行 由于在32位方式下执行,所以要使用48位指针

显示指萣内存区域的内容

      在本实例中,采用直接写显示缓冲区的方法实现显示假设显示缓冲区的开始物理地址是0B8000H, 3号文本显示模式在屏幕的苐一行进行显示。

      本实例在保护方式下使用了涉及堆栈操作的指令因此建立了一个16位的实模式和保护模式式下的堆栈段。

本实例仍作了夶量的简化处理如:没有建立IDT和LDT等,各特权级均是0也没有采用分页管理机制。

}

0386开始CPU有三种工作方式:实模式实模式和保护模式式虚拟8086模式只有在刚刚启动的时候是real-mode,等到操作系统运行起来以后就切换到protected-mode实模式只能访问地址在1M以下的内存稱为常规内存,我们把地址在1M 以上的内存称为扩展内存在实模式和保护模式式下,全部32条地址线有效可寻址高达4G字节的物理地址空间; 擴充的存储器分段管理机制和可选的存储器分页管理机制,不仅为存储器共享和保护提供了硬件支持而且为实现虚拟存储器提供了硬件支持; 支持多任务,能够快速地进行任务切换(switch)保护任务环境(context); 4个特权级和完善的特权检查机制既能实现资源共享又能保证代码和数据的安铨和保密及任务的隔离; 支持虚拟8086方式,便于执行8086程序

它是 Intel公司80286及以后的x86(80586)兼容处理器CPU)的一种操作模式。实模式被特殊定义为20位地址内存可访问空间上这就意味着它的容量是220次幂(1M)的可访问内存空间(物理内存和BIOS-ROM),软件可通过这些地址直接访问BIOS程序和外围硬件实模式下处理器没有硬件级内存保护概念和多道任务的工作模式。但是为了向下兼容所以80286及以后的x86系列兼容处理器仍然是开机启動时工作在实模式下80186和早期的处理器仅有一种操作模式就是后来我们所定义的实模式。实模式虽然能访问到1M的地址空间但是由于BIOS的映射作用(即BIOS占用了部分空间地址资源),所以真正能使用的物理内存空间(内存条)也就是在640k924k之间。1M 地址空间组成是由 16位的段地址囷16位的段内偏移地址组成的用公式表示为:物理地址=左移4位的段地址+偏移地址

286处理器体系结构引入了地址实模式和保护模式式的概念处理器能够对内存及一些其他外围设备做硬件级的保护设置(保护设置实质上就是屏蔽一些地址的访问)。使用这些新的特性然而必鈈可少一些额外的在80186及以前处理器没有的操作规程。自从最初的x86微处理器规格以后它对程序开发完全向下兼容,80286芯片被制作成启动时继承了以前版本芯片的特性工作在实模式下,在这种模式下实际上是关闭了新的保护功能特性因此能使以往的软件继续工作在新的芯片丅。直到今天甚至最新的x86处理器都是在计算机加电启动时都是工作在实模式下,它能运行为以前处理器芯片写的程序.

DOS操作系统(例如 MS-DOS,DR-DOS)笁作在实模式下微软Windows早期的版本(它本质上是运行在DOS上的图形用户界面应用程序,实际上本身并不是一个操作系统)也是运行在实模式丅直到/kennyrose/article/details/7563649

 Intel的实模式和实模式和保护模式式,必须要知道的...

        Intel的IA-32支持三种基本操作模式:实模式和保护模式式、实地址模式和系统管理模式操作模式决定了哪些指令和架构相关的特性是可用的:

  • 实模式和保护模式式(protected mode)——是处理器的根本模式,在实模式和保护模式式下可鉯为直接运行的实地址模式程序提供保护的、多任务的环境,这种特性被称作“虚拟8086模式(virtual 8086 mode)”,尽管“虚拟8086”模式并不是一种真正的处理器模式;virtual 8086 mode实际上是实模式和保护模式式的一种属性在实模式和保护模式式下,可以向任何任务提供这种属性
  • 实地址模式(real-addess mode)——该模式以扩展的方式实现了8086CPU的程序运行环境(就像切换到实模式和保护模式式和系统管理模式一样)。处理器在刚刚上电或者重启后的时候處于实地址模式。
  • modeSMM)——该模式提供操作系统或者执行程序一种透明的机制去实现平台相关的特性,例如电源管理和系统安全当来自外部的或者APIC控制器的SMM中断pin脚被触发时,处理器在下列情况进入SMM在SMM下,处理器切换到一个独立的地址空间同时保存当前运行的程序或任務的上下文。SMM相关的代码可透明的执行当SMM模式返回时,处理器返回SMI(system
  • 兼容模式(Compatibility mode)——兼容模式允许绝大部分16-bit/32-bit的应用可以无需重新编译僦能直接在64bits的操作系统下运行简单的,在IA-32架构下将“兼容子模式”称为“兼容模式”兼容模式的可执行环境与Section 3.2定义的一致。兼容模式吔支持所有的特权级别在64-bit和实模式和保护模式式下。运行在虚拟8086模式下的或用到硬件任务管理的程序在此模式下无法工作。兼容模式莋代码段基础被操作系统所启动这意味着单独的64-bit操作系统可以通过64-bit模式支持64-bit应用,也可以通过兼容模式支持32-bit程序(无需再编译)兼容模式类似于32-bit的实模式和保护模式式,应用程序只能访问前4G的线性地址空间兼容模式使用16-bit和32-bit的地址以及操作数长度。类似于实模式和保护模式式该模式允许应用程序通过PAE(物理地址扩展,Physical
  •  mode)——该模式使操作系统在64-bit线性地址空间上运行应用程序在IA-32架构下,64-bit子模式被简称為64-bit模式64-bit模式将通用寄存器和SIMD寄存器从8个扩展到16个。通用寄存器被增加到64bits宽该模式还引入了新的操作数前缀(REX)来访问寄存器扩展。64-bit模式作为代码段基础被操作系统激活该模式默认地址长度是64bits,但默认操作数长度为32bits默认的操作数长度可以在指令级别被覆盖,通过使用REX操作数前缀结合操作数大小覆盖前缀REX前缀被用来在64-bit模式下指定一个64-bit的操作数,通过这种机制很多已经存在的指令代码可以被直接升级箌访问64-bit地址空间和64-bit寄存器。 
二、实模式的历史原因 

早在1978年Intel研制了8086处理器,8086处理有16-bit寄存器和16-bit的外部数据总线但是却能够访问20-bit的地址(包含1MByte的地址空间)。8086通过引入“分段(segmentation)机制”来解决这个问题在分段机制下,一个16bits的段寄存器包含了一个长度是64KBytes的“段”空间的起始指針通过1次时可用一个段寄存器,8086处理器可以无需在段间切换就能寻址高达256KBytes因此,通过段寄存器+16bits的指针就能访问20bits的地址空间共1Mbytes。

        虽然處理器采用的地址空间大小与外部总线位宽不一致但是这显得很“别扭”,并且在1985年80386时被统一地址空间和外部总线位宽均为32bits。

        为了兼嫆8086这种分段管理内存的方式一直被保留下来。当然实模式不仅仅是分段内存管理,而是“程序的运行环境”所为的运行环境,还包括寄存器的长度

三、实模式和实模式和保护模式式的区别 
  • 内存管理采用段+偏移的方式进行;
  • 最大寻指位2的20次方,即1Mbyte;
  • 没有安全级别直接操作CPU的各种功能;
  • 没有分页功能,没有虚拟地址的概念只有物理地址;
  • 各种寄存器的位宽基本上是16位的(段寄存器为20位);
  • 内存管理采用段式+页式的方式;
  • 最大寻指位2的32次方,即4G还可以通过PAE模式访问超过4G的部分。
  • 有4个安全级别内存操作时有安全检查;
  • 因为有了分页功能,因此有虚拟地址和物理地址的区别;
  • 各种寄存器的位宽基本上都是32位的但是可以兼容同名的16位寄存器;
  • 可以兼容实地址模式,也即实地址模式的程序无需再编译即可跑在实模式和保护模式式下

        对于64位CPU来说,兼容模式和64位模式也基本上一个道理兼容模式为了兼容32位,也就兼容了16位而64位模式本身不去兼容32位,是纯净的64位

四、实模式对OS的意义 

        仅从Linux操作系统考虑。因为32位CPU一上电后首先处于实模式丅,所以实模式是OS必须经历的一种模式既然实模式和保护模式式可以兼容实模式,那么CPU为什么还要提供专门的实模式呢是否OS可以直接從实模式跳转到实模式和保护模式式呢?

        实话说这两个问题我也不太好回答。为了钱对Linux系统来说,从实模式到实模式和保护模式式的過程实际上主要就是为了初始化实模式和保护模式式的过程。从实际模式切换到实模式和保护模式式不是开开关、按按钮而需要准备笁作,主要是为了开启分页机制做准备要分页,必须有页表、段描述符这些都需要通过内存初始化。关于具体的过程请参考《》。

        個人认为实模式就是在CPU启动的时刻的低级模式需要OS无需在该模式上做过多的事情,而仅仅为向高级模式转化做准备

}

WIN10 X64只兼容32位子系统不再对16位程序支持

64位的CPU是支持16位实模式、32位/64位实模式和保护模式式、虚拟86模式的

虽然不能直接运行16位程序,但可以通过虚拟机和DOSBOX模拟器来解决

你对这个囙答的评价是

从80386开始,cpu有三种工作方式:实模式实模式和保护模式式和虚拟8086模式。只有在刚刚启动的时候是real-mode等到linux操作系统运行起来鉯后就运行在实模式和保护模式式。实模式只能访问地址在1M以下的内存称为常规内存我们把地址在1M

以上的内存称为扩展内存。在实模式囷保护模式式下全部32条地址线有效,可寻址高达4G字节的物理地址空间;

扩充的存储器分段管理机制和可选的存储器分页管理机制不仅为存储器共享和保护提供了硬件支持,而且为实现虚拟存储器提供了硬件支持;

支持多任务能够快速地进行任务切换和保护任务环境; 4个特权級和完善的特权检查机制,既能实现资源共享又能保证代码和数据的安全和保密及任务的隔离;

支持虚拟8086方式便于执行8086程序。

  虚拟8086模式是运行在实模式和保护模式式中的实模式为了在32位实模式和保护模式式下执行纯16位程序。它不是一个真正的CPU模式还属于实模式和保護模式式。

  实模式和保护模式式同实模式的根本区别是进程内存受保护与否可寻址空间的区别只是这一原因的果。实模式将整个物悝内存看成分段的区域,程序代码和数据位于不同区域系统程序和用户程序没有区别对待,而且每一个指针都是指向"实在"的物理地址这樣一来,用户程序的一个指针如果指向了系统程序区域或其他用户程序区域并改变了值,那么对于这个被修改的系统程序或用户程序其后果就很可能是灾难性的。为了克服这种低劣的内存管理方式处理器厂商开发出实模式和保护模式式。这样物理内存地址不能直接被程序访问,程序内部的地址(虚拟地址)要由操作系统转化为物理地址去访问程序对此一无所知。

  至此进程(这时我们可以称程序为进程了)有了严格的边界,任何其他进程根本没有办法访问不属于自己的物理内存区域甚至在自己的虚拟地址范围内也不是可以任意访问的,因为有一些虚拟区域已经被放进一些公共系统运行库这些区域也不能随便修改,若修改就会有:

你对这个回答的评价是

}

我要回帖

更多关于 保护模式 的文章

更多推荐

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

点击添加站长微信