x86 CPU的保护模式——概述(一)

文章目录

  • 前言
  • 一、寄存器变化
  • 二、寻址变化
  • 三、为什么段寄存器依然是16位?


查看系列文章点这里: 操作系统真象还原

前言

  我们在前面已经介绍过实模式了,它是32位 CPU 的一种工作模式,模拟了16位 CPU 的工作环境,但是大多数时候 CPU 并不会处于实模式,而是保护模式,我们接下来看看实模式和保护模式有什么区别。


一、寄存器变化

  从实模式转换到保护模式之后,寄存器从本质上来说并没有任何变化,因为两种模式都属于一个 CPU,变化的只不过是这些寄存器的使用方法。

  首先第一个变换的就是寄存器的位数,在实模式下,大多数寄存器有8位或者16位,而在保护模式中,寄存器可以达到32位,若想使用32位的寄存器,只需要在原先16位寄存器名称前加一个大小字母“E”就可以了。值得强调的是,段寄存器即便在保护模式下也依然只有16位。其它寄存器可以见下图:

32位16位8位
EAXAXAH、AL
EBXBXBH、BL
ECXCXCH、CL
EDXDXDH、DL
ESISI
EDIDI
EBPBP
ESPSP
EFLAGSFLAGS
EIPIP
CS
DS
ES
FS
GS
SS

  段寄存器之所以还是只有16位,是因为16位已经够用了,没有必要扩展到32位,毕竟资源能省就省,这是硬件设计的原则。

  变化的只是寄存器的位数,含义用法确都没有变,不清楚的可以看看x86 CPU的实模式——寄存器(一)。

  除了寄存器位数发生了变化,保护模式下也多出来了很多新的寄存器的,例如DCR寄存器、GDTR寄存器等等,但是由于直接讲不好理解其作用,故在用到这些寄存器的时候再说叭。

二、寻址变化

  我们在前面详细讲过实模式下的寻址方式,不清楚的可以看看x86 CPU的实模式——寻址(二),实模式下的寻址方式对寄存器的使用有严格的限制,这一点大大限制了编程的灵活性,于是在保护模式中改进了这一点,保护模式下几乎所有的寄存器都可以做基址寄存器和变址寄存器。

  除此之外,保护模式还支持对变址寄存器乘上一个比例因子(只能是1、2、4、8),具体对比可以见下图:

在这里插入图片描述
  如果还是难以理解,可以看看下面的例子:

;实模式
	mov ax,[si]
	mov ax,[di]
	mov ax,[bx]
	mov ax,[bx+si]
	mov ax,[bx+si+0x1234]
	mov ax,[bx+di]
	mov ax,[bx+di+0x1234]

;保护模式
	mov eax,[eax+edx*8+0x12345678]
	mov eax,[eax+edx*2+0x8]
	mov eax,[ecx*4+0x1234]
	mov eax,[esp]
	mov eax,[esp+2]

三、为什么段寄存器依然是16位?

  我们知道IA32架构下,寻址方式都是基于“ 段基址:偏移地址方式 ”。在实模式下,是“ 段基址寄存器*16+段偏移地址 ”,并且乘16是因为,地址线是20位,而寄存器只有16位,为了正确表示地址才这么做的。

  那么在保护模式下,理论上只要寄存器和地址线都是32位,就可以实现寻址的功能。那么为什么实际上保护模式下,段寄存器还是16位呢?

  简单来说就是出于安全考虑(最主要的原因),实模式下操作系统和用户程序都可以肆意访问内存,让用户程序随意操控内存,这种行为是非常不安全的。因此,为了增加安全性,为了区分操作系统和用户程序,必须要改变一下访问内存的方式。插一嘴,这也是实模式和保护模式名字的由来。

  所以,保护模式就不能简单的将寄存器和地址线变成32位就OK了。要想解决安全问题,就要对用户程序做出限制,那就需要存储额外的信息。又由于寄存器只有32位,已经没有地方存放这些信息了,所以干脆就将段基址和这些信息全部放到内存中算了。

  既然都被放到内存中了,那就需要告诉 CPU 这些信息被放到内存中的那个地方了,如何告诉?就是通过段寄存器,它存储了一个叫“ 选择子 ”的结构,通过它和GDTR寄存器的值,就可以确定这些信息在内存中的位置了。

  现在知道为什么段寄存器还是16位的了叭,下一篇文章会详细讲解一下CPU如何通过“ 选择子 ”来寻址的。


  持续更新中~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/631942.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java医院信息系统HIS源码SaaS模式Java版云HIS系统 接口技术RESTful API + WebSocket + WebService

java医院信息系统HIS源码SaaS模式Java版云HIS系统 接口技术RESTful API WebSocket WebService 云HIS是基于云计算的医疗卫生信息系统(Cloud-Based Healthcare Information System),它运用云计算、大数据、物联网等新兴信息技术,…

centos7.9安装es7.12.0

下载es 国内镜像:https://mirrors.huaweicloud.com/elasticsearch/7.12.0/ 下载并上传内容到/usr/local目录下 解压: tar -zxvf /uar/local/elasticsearch-7.12.0-linux-x86_64.tar.gz安装 es一般不能用root启动,因此需要创建es:es用户和…

Mac SourceTree配置ssh git仓库

一、准备条件 1、Mac系统电脑 2、安装好SourceTree 3、获取ssh git仓库地址 二、配置步骤 1、打开终端命令行 ssh -t rsa -C "xxx""xxx"代表注册git仓库时,使用的用户名,可以是字符串也可以是邮箱地址。 如果遇到输入密码&#xf…

通过 Apple Vision Pro 释放创造力:深入研究空间计算

Apple 最新进军空间计算领域的 Apple Vision Pro,标志着重新定义我们与技术交互方式的重大飞跃。空间计算超越了传统界限,允许用户以无缝集成到物理世界的方式参与 2D 和 3D 内容。 我们可以关注两种类型的体验: 在空间中渲染 2D 内容。这涉及将现有设备窗口投影到空间领域…

某能源集团电力公司搭建数据报表中心,实现采集填报分析一体化

​在当今这个信息爆炸的时代,数据已成为企业最宝贵的财富,越来越多的企业开始重视数据的积累和归集。在企业日常生产和工作过程中,会产生绵延不断的数据,但这些数据往往没有统一的记录、归纳和整理,或者录入了系统却分…

广汽原车控制系统CAN协议控制汽车基本信息获取及数据应用

在现代汽车工业的迅速发展中,车辆控制系统的智能化和网络化已成为提升汽车性能的关键。广汽作为中国汽车行业的佼佼者,其在原车通信网络方面也取得了显著的成就。特别是广汽原车CAN(Controller Area Network)协议的应用&#xff0…

AC/DC电源模块在工业自动化领域的应用探析

BOSHIDA AC/DC电源模块在工业自动化领域的应用探析 AC/DC电源模块是一种将交流电转换为直流电的电力转换设备,在工业自动化领域具有广泛的应用。本文将从稳定性、效率和可靠性三个方面对AC/DC电源模块在工业自动化领域的应用进行探析。 首先,AC/DC电源模…

【SQL】SQL常见面试题总结(1)

目录 1、检索数据1.1、从 Customers 表中检索所有的 ID1.2、检索并列出已订购产品的清单1.2、检索所有列 2、排序检索数据2.1、检索顾客名称并且排序2.2、对顾客 ID 和日期排序2.3、按照数量和价格排序2.4、检查 SQL 语句 3、过滤数据3.1、返回固定价格的产品3.2、返回产品并且…

React 第三十七章 Scheduler 最小堆算法

在 Scheduler 中&#xff0c;使用最小堆的数据结构在对任务进行排序。 // 两个任务队列 var taskQueue: Array<Task> []; var timerQueue: Array<Task> [];push(timerQueue, newTask); // 像数组中推入一个任务 pop(timerQueue); // 从数组中弹出一个任务 time…

【漏洞复现】用友 NC portal-registerServlet JNDI注入漏洞

0x01 产品简介 用友NC是用友网络科技股份有限公司开发的一款大型企业数字化平台。它主要用于企业的财务核算、成本管理、资金管理、固定资产管理、应收应付管理等方面的工作,致力于帮助企业建立科学的财务管理体系,提高财务核算的准确性和效率。 0x02 漏洞概述 用友NC存在…

Elasticsearch 在滴滴的应用与实践

滴滴 Elasticsearch 简介 简介 Elasticsearch 是一个基于 Lucene 构建的开源、分布式、RESTful 接口的全文搜索引擎&#xff0c;其每个字段均可被索引&#xff0c;且能够横向扩展至数以百计的服务器存储以及处理 TB 级的数据&#xff0c;其可以在极短的时间内存储、搜索和分析大…

登录接口取到token,加到请求头中,通过服务器验证#Vue3

登录接口取到token&#xff0c;加到请求头中&#xff0c;通过服务器验证#Vue3 Token验证的基本流程 1.服务端收到请求&#xff0c;去验证用户名与密码 2.验证成功后&#xff0c;服务端会签发一个 Token&#xff0c;再把这个 Token 发送给客户端 3.客户端收到 Token 以后可以把它…

Linux文件系统详解

&#x1f30e;Linux文件系统 文章目录&#xff1a; Linux文件系统 简单认识磁盘 文件系统       磁盘线性结构抽象       文件系统存储方法 inode Table         inode Bitmap         Data Block         Block Bitmap         …

【漏洞复现】方正全媒体采编系统密码泄露漏洞

0x01 产品简介 方正全媒体新闻采编系统是一个面向媒体深度融合的技术平台&#xff0c;它以大数据和AI技术为支撑&#xff0c;集成了指挥中心、采集中心、编辑中心、发布中心、绩效考核中心、资料中心等多个功能&#xff0c;全面承载“策采编审发存传评”的融媒体业务流程。 0…

爱吃香蕉的珂珂

题目链接 爱吃香蕉的珂珂 题目描述 注意点 piles.length < h < 10^9如果某堆香蕉少于k根&#xff0c;将吃掉这堆的所有香蕉&#xff0c;然后这一小时内不会再吃更多的香蕉返回可以在 h 小时内吃掉所有香蕉的最小速度 k&#xff08;k 为整数&#xff09; 解答思路 二…

Find My资讯|苹果 iOS 17.5 率先执行跨平台反跟踪器标准

苹果和谷歌公司于 2023 年 5 月宣布推出“检测预期外位置追踪器”&#xff08;Detecting Unwanted Location Trackers&#xff09;行业标准&#xff0c;经过 1 年多的打磨之后&#xff0c;该标准目前已通过 iOS 17.5 部署到 iPhone 上。谷歌也将为运行 Android 6.0 或更高版本的…

【从零开始学架构 架构基础】二 架构设计的复杂度来源:高性能复杂度来源

架构设计的复杂度来源其实就是架构设计要解决的问题&#xff0c;主要有如下几个&#xff1a;高性能、高可用、可扩展、低成本、安全、规模。复杂度的关键&#xff0c;就是新旧技术之间不是完全的替代关系&#xff0c;有交叉&#xff0c;有各自的特点&#xff0c;所以才需要具体…

FestDfs快速安装和数据迁移同步。Ubuntu环境

一&#xff1a;防火墙 ufw status 二&#xff1a;下载 分别是&#xff08;环境依赖&#xff0c;网络模块依赖&#xff0c;安装包&#xff09; git clone https://github.com/happyfish100/libfastcommon.git git clone https://github.com/happyfish100/libserverframe.git …

package-lock.json导致npm install安装nyc出现超时错误

一、背景 前端项目在npm install安装依赖&#xff0c;无法下载组件nyc&#xff0c;详细报错信息&#xff1a; npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/nyc/download/nyc-13.3.0.tgz?cache0&a…

析构函数详解

目录 析构函数概念特性对象的销毁顺序 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x1f978;&#x1f978;&#x1f978; C语言 &#x1f43f;️&#x1f43f;️&#x1f43f;️ C语言例题 &…