【操作系统 3.了解实模式与保护模式的区别】

在这里插入图片描述

一、实模式与保护模式鸟瞰

我这人喜欢直面问题,其实本章只需要搞明白三个主要问题就行了,

  • 什么是实模式和保护模式,
  • 实模式与保护模式的区别是什么,
  • 怎么进入保护模式。

我先来简单阐述下这三个问题

什么是实模式和保护模式

Intel 8086 是一个由 Intel 于 1978 年所设计的 16 位微处理器芯片,是 x86 架构的鼻祖。紧接着 Intel 又推出了第一款 32 位的 cpu Intel 80286(很快被淘汰,80386更经典一些),这款 cpu 由于和之前有很多不同的“保护”特性,所以称为保护模式,也是与此同时,之前的 8086 这个 16 位 cpu 才有了实模式的叫法。

所以什么是实模式和保护模式,其实就是 Intel 给自己的处理器特性命的一个名字而已,具体有哪些特性那就是细节问题了,但最起码有一点刚刚已经有所透露,那就是保护模式至少是 32 位的,而实模式是 16 位的(即使一个 32 位的 cpu 也有实模式)

实模式与保护模式的区别是什么

1.实模式 16 位,保护模式 32 位
2.实模式下的地址是段寄存器地址偏移4位+偏移地址得到物理地址。保护模式下段寄存器存入了段选择子,在段描述符表中寻找段基址,再加上偏移地址得到物理地址(开启分页下为逻辑地址)

这个我觉得是 1 的推论,就是实模式寻址空间是 1M,保护模式是 4G
这个我觉得是 2 的推论,就是段描述符表记录了段的权限,改变了实模式下可以随意访问所有内存的隐患(这也是保护这两个字的体现)

怎么进入保护模式

进入保护模式有三步:

1.打开 A20
2.加载 gdt
3.将 cr0 的 pe 位置 1(cr0是GDT表中的字段属性名)

可以看出进入保护模式的操作是很简单的,但提前要做好准备工作,最重要的就是 gdt(Global Descriptor Table 全局描述表)的准备。

保护模式与实模式的关键点要理解GDT

所以我们先说一说先什么是段描述符?

在你开机的一瞬间,CPU 的 PC 寄存器被强制初始化为 0xFFFF0。如果再说具体些,CPU 将段基址寄存器 cs 初始化为 0xF000,将偏移地址寄存器 IP 初始化为 0xFFF0,根据实模式下的最终地址计算规则,将段基址左移 4 位,加上偏移地址,得到最终的物理地址也就是抽象出来的 PC 寄存器地址为 0xFFFF0。

这种段基址左移 4 位,加上偏移地址,得到物理地址的方式,就是实模式下的地址转换方式。

然而保护模式下不一样了
在保护模式下,段基址寄存器中存的数据,被理解为==段选择子,根据这个值去我们自己在内存中写好的段描述符表中找,找到对应的段描述符,从中取出段基址。用这个段基址加上偏移地址,最终得到物理地址(逻辑地址和页表的事以后再说,不冲突)。

那自然就有两个问题,一个是段描述符表长什么样子呀?决定了我们往内存中写的数据结构是什么。另一个就是去哪找段描述符表压,这个就需要告诉 cpu 为我们提前预留好的寄存器,也就是 lgdt 指令。下面我们就分别看着两个问题

段寄存器中16位2字节段选择子的结构如下

在这里插入图片描述
在这里插入图片描述

段描述符表长什么样子
首先段描述符表是一张表,在内存中也就是个数组,是一个个的段描述符一个个紧挨着的结果。所以我们要了解段描述符长什么样就好了

在这里插入图片描述

对于一个段寄存器描述的一个段,该段具有段属性Attribute段基址Base以及段限长Limit,段寄存器中能看到的16位段选择子就是为了能够查找上述三个属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值