操作系统实践之路——三、硬件(1.CPU工作模式)

前言

​ 今天来学习 CPU 的工作模式,硬件中最重要的就是 CPU,它就是执行程序的核心部件。按照 CPU 功能升级迭代的顺序,CPU 的工作模式有实模式、保护模式、长模式,这几种工作模式下 CPU 执行程序的方式截然不同,下面来讨论这几种工作模式。

一、实模式

​ 实模式是最简单,也是最原始的一种工作模式。实模式实模式又称实地址模式,实,即真实,这个真实分为两个方面,一个方面是运行真实的指令,对指令的动作不作区分,直接执行指令的真实功能,另一方面是发往内存的地址是真实的,对任何地址不加限制地发往内存

1.1实模式寄存器

​ 由于CPU是根据指令完成相应的功能,举个例子:ADD AX,CX;这条指令完成加法操作,AX、CX 为 ADD 指令的操作数,可以理解为 ADD 函数的两个参数,其功能就是把 AX、CX 中的数据相加。指令的操作数,可以是寄存器、内存地址、常数,其实通常情况下是寄存器,AX、CX 就是 x86 CPU 中的寄存器。

​ 看看 x86 CPU 在实模式下的寄存器。表中每个寄存器都是 16 位的。
在这里插入图片描述

1.2实模式下访问内存

​ 我们都知道,数据和指令都是存放在内存中,所以我们要访问内存,而访问内存靠的是地址值。

​ 那这个地址值是如何计算呢?如下图所示:

在这里插入图片描述

​ 由上图发现所有的内存地址都是由段寄存器左移 4 位,再加上一个通用寄存器中的值或者常数形成地址,然后由这个地址去访问内存。这就是大名鼎鼎的分段内存管理模型

代码段地址+左移4位+ IP = 取指
数据段+左移4位+ 通用寄存器值 = 数据地址
栈段SS+左移4位 + SP = 栈地址

​ 注意:代码段是由 CS 和 IP 确定的,而栈段是由 SS 和 SP 段确定的!!

1.3实模式中断

​ 中断就是中止执行当前的程序,转到另一个特定的地址上,去运行特定的代码。那么实模式下它的中断是如何产生的呢?

​ 第一种情况,中断控制器给 CPU 发送了一个电子信号,CPU 会对这个信号作出应答。随后中断控制器会将中断号发送给 CPU,这是硬件中断

​ 第二种情况, CPU 执行了 INT 指令,这个指令后面会跟随一个常数,这个常数即是软中断号。这种情况是软件中断

​ 为了实现中断,就需要在内存中放一个中断向量表,这个表的地址和长度由 CPU 的特定寄存器 IDTR 指向。实模式下,表中的一个条目由代码段地址段内偏移组成,如下图所示。

在这里插入图片描述

​ 有了中断号后,CPU 就能根据 IDTR 寄存器中的信息,计算出中断向量中的条目,进而装载 CS(装入代码段基地址)、IP(装入代码段内偏移)寄存器,最终响应中断。
即:中断号+ IDTR 寄存器(指向中断表的地址和长度) —> 根据中断号,找到中断表中的对应条目 —> 解析出中断函数基地址填充CS、中断函数偏移填充IP —> 响应中断。

二、保护模式

​ 随着软件的规模不断增加,需要更高的计算量和更大的内存容量。而内存一大,首先就要解决的问题就是寻址问题。原本实模式下的16位寄存器最大只能表示2的16次方个地址,所以CPU的寄存器和运算单位都要扩展成32位的。

​ 虽然CPU内部器件的位数解决了计算和寻址的问题,但依旧是没有解决实模式场景下的问题:①CPU对任何指令不加区分的执行;②CPU对访问内存的地址不加限制。

​ 基于以上的原因,CPU实现了保护模式。

​ 保护模式包含特权级,对指令及其访问的资源进行控制,对内存段与段之间的访问进行严格检查,没有权限的绝不放行,对中断的响应也要进行严格的权限检查,扩展了 CPU 寄存器位宽,使之能够寻址 32 位的内存地址空间和处理 32 位的数据,从而 CPU 的性能大大提高。

2.1保护模式寄存器

​ 保护模式相比于实模式,增加了一些控制寄存器和段寄存器,扩展通用寄存器的位宽,所有的通用寄存器都是 32 位的,还可以单独使用低 16 位,这个低 16 位又可以拆分成两个 8 位寄存器,如下表所示:

在这里插入图片描述

2.2保护模式特权级

​ 为了区分哪些指令和哪些资源可以被访问,CPU实现了特权级。

​ 下图中,从外到内,既能体现权力的大小,又能体现各特权级对资源控制访问的多少,还能体现各特权级之间的包含关系。R0~R3,每个特权级执行的指令的数量不用。R0 拥有最大权力,可以访问低特权级的资源,反之则不行。

在这里插入图片描述

2.3保护模式段描述符

​ 由于CPU的扩展导致了 32 位的段基地址和段内偏移,还有一些其它信息,所以 16 位的段寄存器肯定放不下。放不下就要找内存借空间,然后把描述一个段的信息封装成特定格式的段描述符,放在内存中,其格式如下。一个段描述符有 64 位 8 字节数据,里面包含了段基地址、段长度、段权限、段类型(可以是系统段、代码段、数据段)、段是否可读写,可执行等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值