计算机的保护模式与实模式

一、背景

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

二、实模式(Real-address Mode)的诞生(16位处理器及寻址)

在8086处理器诞生之前,内存寻址方式就是直接访问物理地址。8086处理器为了寻址1M的内存空间,把地址总线扩展到了20位。但是,一个尴尬的问题出现了,数据总线只有16位,即CPU不能计算20位的地址。为了解决这个问题,分段机制被引入,登上了历史舞台。 为了支持分段,8086处理器设置了四个段寄存器:CS, DS, SS, ES。每个段寄存器都是16位的,同时访问内存的指令中的地址也是16位的。但是,地址在送入地址总线之前,CPU先把它与某个段寄存器内的值相加。这里要注意:段寄存器的值对应于20位地址总线的中的高16位,所以相加时实际上是内存总线中的高12位与段寄存器中的16位相加,而低4位保留不变,这样就形成一个20位的实际地址,也就实现了从16位内存地址到20位实际地址的转换,或者叫“映射”。


所以,什么是实模式呢?CPU复位(reset)或加电(power on)的时候以实模式启动,这时处理器以实模式工作。在实模式下,内存寻址方式和8086相同,由16位段寄存器的内容乘以16(10H)当做段基址,加上16位偏移地址形成20位的物理地址,最大寻址空间1MB,最大分段64KB。也可以使用32位指令,32位的x86 CPU用做高速的8086。在实模式下,所有的段都是可以读、写和可执行的。

三、保护模式(Protect Mode)的诞生(32位处理器及寻址)

在80286及以后,内存地址改为24位或32位,至少可以访问到2^32=4G的内存空间。

  • 80286处理器的地址总线为24位,寻址空间达16M,同时引入了保护模式(内存段的访问受到限制)
  • 80386处理器是一个32位处理器,ALU和地址总线都是32位的,寻址空间达 4G。也就是说它可以不通过分段机制,直接访问4G的内存空间。虽然它是新时代的小王子,超越它的无数前辈,然而,它需要背负家族的使命–兼容前代的处理器。也就是说,它必须支持实模式和保护模式。所以,80386在段寄存器的基础上构筑保护模式,并且保留16位的段寄存器。
  • 从80386之后的处理器,架构基本相似,统称为IA32(32 Bit Intel Architecture)。

。因此,80286及以后的CPU首先进入实模式,然后通过切换机制再进入到保护模式。

保护模式与实模式相比,主要是两个差别:一是提供了段间的保护机制,防止程序间胡乱访问地址带来的问题,二是访问的内存空间变大,从1M变为4G。

保护模式是处理器的本机模式,在这种模式下,处理器支持所有的指令和所有的体系结构特性,提供最高的性能和兼容性。对于所有的新型应用程序和操作系统来说,建议都使用这种模式。为了保证PM的兼容性,处理器允许在受保护的,多任务的环境下执行RM程序。这个特性被称做虚拟8086模式(Virtual -8086 Mode),尽管它并不是一个真正的处理器模式。Virtual-8086模式实际上是一个PM的属性,任何任务都可以使用它。

四、保护的机制

相对于实模式,保护模式提供了一系列复杂的机制,其中最重要的是分段、分页以及中断。其中分段和分页都是为了给编写应用程序的程序员提供更好的地址抽象和内存管理,每个程序都可以独立的申请4G的虚拟内存空间。至于中断的功能实模式也有,但是因为保护模式寻址方式改变,因此为了适应保护模式,在从实模式跳入保护模式的时候要修改中断机制。

保护模式下,虚拟地址到物理地址的变换过程

参考:

http://blog.sina.com.cn/s/blog_4dff87120100u7m6.html

https://blog.csdn.net/qq_37924084/article/details/78360003

https://cloud.tencent.com/developer/article/1172683

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值