首页 > 其他分享 >【操作系统】CPU的工作模式

【操作系统】CPU的工作模式

时间:2022-11-09 15:03:17浏览次数:59  
标签:保护模式 操作系统 中断 模式 指令 寄存器 CPU

目录

本文为《操作系统45讲》笔记,简要介绍X86 CPU的工作模式,实模式,保护模式,长模式。
参考:操作系统实战45讲

一、实模式

(1)真实
真实的指令:直接执行指令的真实功能,无权限等校验。

真实的地址:发往内存的地址是真实的物理地址,直接读写,不需要转化也没有限制。

特点:CPU可以执行任意程序指令;内存之间没有隔离保护。

(2)寄存器
X86 CPU在实模式下的寄存器,寄存器的位数为16,重点关注以下几类:
通用寄存器:AX, BX, CX, DX, SI, BP,用户存放数据,参与运算;
指令指针寄存器:代码段寄存器CS : 程序指针寄存器IP,可以得到程序下一条指令的地址;
栈指针寄存器:数据段寄存器SS : 栈指针寄存器器SP,始终指向当前栈顶;
CPU标志寄存器:FLAGS,存放CPU执行运算产生的状态位;

(3)中断
外围设备产生中断,由中断控制器给CPU发送中断信号,CPU被动处理中断任务,这种情况叫做硬件中断;
CPU执行INT指令,主动执行中断任务,这种情况叫做软件中断。

X86 实模式中断过程:
CPU接受到中断控制器消息或者INT指令后,能够获取到中断号;
通过IDTR寄存器获取中断向量表的地址,结合中断号,得到中断入口函数的代码段地址与段内偏移地址,即CS:IP;
CPU保存当前的CS和IP寄存器,并加载中断入口的CS:IP寄存器,响应中断。

二、保护模式

(1)保护
寄存器位数从实模式下的16位,扩展到32位,解决内存寻址空间问题;

各指令区分特权级别,危险指令需要较高权限才能执行,从指令执行角度保护系统;

分段模型,新增段描述符,增加CPU对内存地址访问的权限控制,从数据角度保护系统;

(2)寄存器
新增CPU控制寄存器,扩展通用寄存器位宽到32位,重点关注如下:
通用寄存器:EAX, EBX, ECX, EDX, ESI, EBP,用户存放数据,参与运算;
指令指针寄存器:代码段寄存器CS : 程序指针寄存器EIP,可以得到程序下一条指令的地址;
栈指针寄存器:数据段寄存器SS : 栈指针寄存器器ESP,始终指向当前栈顶;
标志寄存器:EFLAGS,存放CPU执行运算产生的状态位;
控制寄存器:CR0、CR1、CR2、CR3,控制CPU的功能特性,如开启保护模式等

(3)特权级别
特权级分为4级,R0~R3,每个特权级可以执行指令与可以访问的内存资源不同,R0权限最高,R1、R2、R3依次递减。

各指令执行权限与资源访问权限,均依赖于特权级别的划分。

新增全局段描述符表,表内容中包括段的类型、权限以及基地址等;
GDTR寄存器,保存全局段描述符表的基地址与长度;
CPU通过段寄存器(包含访问者的权限级别)获取表的索引,进行权限等判断成功后,获取待访问的段基地址。
(与中断向量表类似,将内存中所有段资源集中统一管理,提高效率)

(4)中断
保护模式下的中断也需要进行权限判断,中断向量表存放中断门描述符,扩充信息。

CPU根据IDTR寄存器找到中断向量表,并根据中断信号转化成索引,确定对应的中断门描述符;
CPU根据中断门描述符,进行类型判断与权限检查;
检查通过后,将中断门中的目标代码段选择子与目标代码段偏移加载到CS:EIP寄存器中,响应中断。

(5)切换
X86 CPU在启动后会自动进入实模式,通过全局段描述符表初始化、GDTR和CRO寄存器配置后,进行跳转,进入保护模式。

三、长模式

(1)长
长模式又称AMD64模式,寄存器位数为64位,寻址空间也为64位。

长模式保留大部分保护模式特性,如特权级检查和权限检查。

长模式下,CPU不再对段描述符中的段基址和段长度进行检查(MMU处理),只对DPL进行相关的检查(权限)。

长模式,实际上可以理解为保护模式的升级版,拓宽寄存器,并将保护模式中的段地址校验功能转交给MMU处理;

(2)寄存器
新增通用寄存器,并将其位宽扩展到32位,重点关注如下:
通用寄存器:RAX, RBX, RCX, RDX, RSI, RBP,R8~R15,用户存放数据,参与运算;
指令指针寄存器:代码段寄存器CS : 程序指针寄存器RIP,始终指向下一条指令的地址;
栈指针寄存器:数据段寄存器SS : 栈指针寄存器器RSP,始终指向当前栈顶;
标志寄存器:RFLAGS,存放CPU执行运算产生的状态位;
控制寄存器:CR0~CR4,控制CPU的功能特性

(3)中断
长模式的中断流程与保护模式类似,GDTR寄存器保存中断向量表的地址;
CPU根据中断消息转化成中断向量表索引,获取对应的中断门描述符;
CPU根据中断门描述符的信息,进行权限相关检查,然后将对应的段选择子和段内偏移装载CS:EIP寄存器,响应中断;

(4)切换
可以从从实模式切换到长模式,也可以从保护模式切换到长模式;

长模式下需要开启分页模式,由MMU提供内存保护(依赖页表);

长模式也需要开启保护模式,保证权限检查功能;

四、总结

(1)实模式:16位寄存器位宽,原始简单,不检查指令权限和内存访问权限;
(2)保护模式:32位寄存器位宽,对指令权限严格控制,保护内存资源的访问;
(3)长模式:64位寄存器位宽,保留指令权限控制,将内存保护功能移交给MMU。

(4)附:ARM处理器的工作模式

ARM微处理器支持7种运行工作模式,分别为:

用户模式(usr):ARM处理器正常的程序执行状态。非特权模式。
快速中断模式(fiq):用于高速数据传输或通道处理。
外部中断模式(irq):用于通用的中断处理。
管理模式(svc):操作系统使用的保护模式。
数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。
系统模式(sys):运行具有特权的操作系统任务。
定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。

除用户模式外,其余6种模式称为非用户模式或特权模式;用户模式和系统模式之外的5种模式称为异常模式。ARM处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。

标签:保护模式,操作系统,中断,模式,指令,寄存器,CPU
From: https://www.cnblogs.com/HZL2017/p/16873672.html

相关文章

  • php 设计模式
    <?php//协程生成器函数并发classTest{publicfunctionasync(){$start=microtime(true);$url="https://money.finance.sina.com.c......
  • 【设计模式】689- TypeScript 设计模式之观察者模式
    一、模式介绍1.背景介绍在软件系统中经常碰到这类需求:当一个对象的状态发生改变,某些与它相关的对象也要随之做出相应的变化。这是建立一种「对象与对象之间的依赖关系」,......
  • 【设计模式】692- TypeScript 设计模式之发布-订阅模式
    前言在之前两篇自测清单中,和大家分享了很多JavaScript基础知识,大家可以一起再回顾下~本文是我在我们团队内部“「现代JavaScript突击队」”分享的一篇内容,第二期学习内......
  • Liunx 服务器CPU运行模式
    linuxcpu运行模式    CPU动态节能技术用于降低服务器功耗,通过选择系统空闲状态不同的电源管理策略,可以实现不同程度降低服务器功耗,更低的功耗策略意味着CPU唤醒更......
  • 设计模式学习(七):适配器模式
    设计模式学习(七):适配器模式作者:Grey原文地址:博客园:设计模式学习(七):适配器模式CSDN:设计模式学习(七):适配器模式适配器模式适配器模式是一种结构型模式。举例说明,假设有一......
  • Linux操作系统随笔2
    发现问题,查找原因,解决并记录。这是很好的——GaryCurp_2022.11.8今天还是继续搭建环境,教材到CentOS7导入hadoop包时候注释给出了两种不认识的导入方法,所以想要了解一下,然......
  • Linux操作系统随笔
    感觉更喜欢dos——GaryCurp_202.11.7环境:CentOS7X64设置默认进入命令行界面(前提是安装了GUI界面,不然也只有dos界面)#systemctlset-defaultmulti-user.target //默......
  • 初识设计模式 - 中介模式
    简介中介设计模式(MediatorDesignPattern)定义了一个单独的(中介)对象,来封装一组对象之间的交互。如果对象之间存在大量的相互关联和调用,若有一个对象发生变化,则需要跟踪和......
  • web开发模式
    1服务端渲染  2,前后端分离   不同开发模式下的身份验证 ......
  • 浅谈PHP设计模式的代理模式
    简介:代理模式,是结构型的设计模式。用于为其它对象提供一种代理以控制对这个对象的访问。目标对象可以是远程的对象、创建开销大的对象或需要安全控制的对象,并且可以在不......