4.1保护模式

简介: 4.1保护模式

4.1保护模式概述

为什么需要保护模式

实模式缺点

1.实模式下操作系统和用户程序属于同一特权级

2. 用户程序所引用的地址都是指向真实的物理地址, 也就是说逻辑地址等于物理地址。

3. 用户程序可以自由修改段基址, 这样对于系统来说这样是不行的,因为一旦随意改变物理内存中的值,那么很容易造成系统崩溃。

4.访问超过64KB的内存区域时要切换段基址, 转来转去容易晕乎。

4. 每次只能运行一个程序打无法充分利用用计算机资源。

5. 共20条地址线, 最大可用内存为1M.


为了克服以上缺点开发出保护模式。这样物理内存不能直接被程序访问,程序内部的地址(虚拟地址)需要被转化为物理地址后再去访问。程序对此一无所知。地址转换是由处理器和操作系统共同协作完成,处理器在硬件上提供地址转换部件,操作系统提供转换过程中所需要的页表。


4.2初见保护模式

1寄存器方面的改变

为了让一个寄存器就能够访问4GB空间,需要寄存器宽度提升到32位。

除段寄存器外,通用寄存器,指令指针寄存器,标志寄存器都由原来的16位扩展成32位。

因为在实模式下段寄存器中存放的是描述子,描述子只用16位就可以成功表示。

08574b2f7cf44c4b83a8af8872a98164.png

寄存器中低 16 位的部分是为了兼容实模式,可以单独使用。 高 16 位没办法单独使用,只能在用 32位寄存器时才有机会用到它们。

1.段描述符是在内存中, 访问内存对 CPU来说是比较慢的动作, 效率不高。

2.段描述符的格式很奇怪, 一个数据要分三个地方存, 所以 CPU 要把这些七零八落的数拼合成一个完整数据也是要花时间的。

根据上面的两点,CPU为了提高效率,CPU 每次将千辛万苦获取到的内存段信息, 整理成“完整的、 通顺、 不鳖脚” 的形式后, 存入段描述符缓冲寄存器,以后每次访问相同的段时, 就直接读取该段寄存器对应的段描述符缓冲寄存器。


1985 年推出了首款 32 位处理器 80386, 它的地址总线和寄存器都是32位的。 结果图 4-2 中的80286 段描述符缓冲寄存器结构的 base部分, 这是个 32 位的段基址, 位于该结构的第 32~63 位。 这样,段基址是 32 位, 单独的一个寄存器也是 32 位, 任意一个段都可以访问到4GB 空间啦, 不用再变化段基址了甚至段基址可以是 0, 光用段内偏移就可以指向4GB 空间任意角落 这就开启了 “平坦模式” 的时代, 大大方便了开发人员的工作。


保护模式之寻址拓展

在保护模式下, 这一切都不同了, 同样是内存寻址中, 基址寄存器不再只是 bx、 _

bp, 而是所有 32 位的通用寄存器, 变址寄存器也是一样, 不再只是 si’、 di, 而是除 esp之外的所有 32位通用寄存器, 偏移量由实模式的 16 位变成了 32 位。还可以对变址寄存器乘以一个比例因子,比例因子, 只能是 l、 2、 4、 8。

3f4872dbbf2b408e93f1b2ff4c1588e1.png


保护模式之运行模式反转

bits 的指令格式是[bits16] 或 [bits 32]。

[bits 16]是告诉编译器, 下面的代码帮我编译成 16 位的机器码。

[bits32]是告诉编译器, 下面的代码帮我编译成 32 位的机器码。

进入保护模式下需要的三个步骤:

1.打开A20

2.加载gdt

3.将cr0的be位设置为1

在十六位模式下可以反转成三十二位

在三十二位模式下可以反转成十六位


344721fede734d079ba92ecf283faa43.png

机器码66前缀就是反转码前缀

不同模式之间可以使用对方模式下的操作数,还可以使用对方模式下的寻址方式。


保护模式下的指令拓展

其实拓展的就是根据字节数大小不一样来的,自行推理即可。


目录
相关文章
|
传感器 存储 数据采集
04 深度解析物联网架构与技术应用于农业大棚系统
本文将深入探讨物联网架构在农业大棚系统中的应用,从设备接入、边缘网关、数据传输到云平台和应用平台,逐层解析其技术应用与通信协议,为读者全面呈现物联网在农业领域的实际运用场景。
423 0
|
数据安全/隐私保护 Python
BUUCTF 传统知识+古典密码 1
BUUCTF 传统知识+古典密码 1
842 0
|
7月前
|
人工智能 Java 程序员
一文彻底搞定C语言中的条件语句if
本文介绍了C语言中的条件语句,如if、if-else和switch,帮助读者理解如何根据不同的条件执行相应的代码块。通过实例讲解了if语句的基本用法及其复杂形式,并提供了编写条件语句的最佳实践建议。君志所向,一往无前!
240 0
一文彻底搞定C语言中的条件语句if
|
5月前
|
网络协议 安全 网络安全
雷池WAF+emby+ddnsgo搭建个人影音库,实现远程安全访问流媒体
雷池WAF+emby+ddnsgo搭建个人影音库,实现远程安全访问流媒体
410 4
|
SQL 关系型数据库 分布式数据库
PolarDB Proxy配置与优化:提升数据库访问效率
【9月更文挑战第6天】PolarDB是阿里云推出的高性能分布式关系型数据库,PolarDB Proxy作为其关键组件,位于客户端与PolarDB集群间,负责SQL请求的解析与转发,并支持连接池管理、SQL过滤及路由规则等功能。本文详细介绍了PolarDB Proxy的配置方法,包括连接池、负载均衡和SQL过滤设置,并探讨了监控调优、缓存及网络优化策略,以帮助提升数据库访问效率。
191 1
|
安全 数据安全/隐私保护
深入解析 https
在使用HTTP协议时,数据传输是明文形式,容易遭受运营商劫持等安全问题,如篡改返回网页内容、修改Referer字段等。为解决这些问题,引入了HTTPS协议,它通过加密、认证和完整性保护,确保通信内容不被第三方窃听或篡改。HTTPS结合了对称加密和非对称加密,使用公钥加密对称密钥,私钥解密,确保数据安全性和传输效率。然而,中间人攻击仍可能破解这一机制,因此引入证书机制,客户端通过验证证书中的数字签名来确认公钥的有效性,从而保障数据传输的安全性。
275 0
|
新零售 人工智能 搜索推荐
苗悦堂新零售模式系统开发
新零售也一样,今天的模式可以是新零售
|
自然语言处理 并行计算 算法
cp-sat求解器介绍及使用案例
cp-sat求解器介绍及使用案例 更多文章欢迎关注我的微信公众号:Python学习杂记
2428 1
|
数据库 开发者 Java
颠覆传统开发:Hibernate与Spring Boot的集成,让你的开发效率飞跃式提升!
【8月更文挑战第31天】在 Java 开发中,Spring Boot 和 Hibernate 已成为许多开发者的首选技术栈。Spring Boot 简化了配置和部署过程,而 Hibernate 则是一个强大的 ORM 框架,用于管理数据库交互。将两者结合使用,可以极大提升开发效率并构建高性能的现代 Java 应用。本文将通过代码示例展示如何在 Spring Boot 项目中集成 Hibernate,并实现基本的数据库操作,包括添加依赖、配置数据源、创建实体类和仓库接口,以及在服务层和控制器中处理 HTTP 请求。这种组合不仅简化了配置,还提供了一套强大的工具来快速开发现代 Java 应用程序。
841 0
|
JavaScript 开发工具 容器
初始Vue、Vue模板语法、数据绑定(2022/7/3)
这篇文章是关于Vue.js基础的介绍,包括Vue的简介、安装使用、开发工具、基础知识、模板语法和数据绑定。文中通过代码实例和页面效果展示了如何创建Vue实例、使用插值和指令语法、以及单向和双向数据绑定的方法。
初始Vue、Vue模板语法、数据绑定(2022/7/3)