• 4.1保护模式


    4.1保护模式概述

    为什么需要保护模式

    实模式缺点
    1.实模式下操作系统和用户程序属于同一特权级
    2. 用户程序所引用的地址都是指向真实的物理地址, 也就是说逻辑地址等于物理地址。
    3. 用户程序可以自由修改段基址, 这样对于系统来说这样是不行的,因为一旦随意改变物理内存中的值,那么很容易造成系统崩溃。
    4.访问超过64KB的内存区域时要切换段基址, 转来转去容易晕乎。
    4. 每次只能运行一个程序打无法充分利用用计算机资源。
    5. 共20条地址线, 最大可用内存为1M.

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

    4.2初见保护模式

    1寄存器方面的改变

    为了让一个寄存器就能够访问4GB空间,需要寄存器宽度提升到32位。
    除段寄存器外,通用寄存器,指令指针寄存器,标志寄存器都由原来的16位扩展成32位。
    因为在实模式下段寄存器中存放的是描述子,描述子只用16位就可以成功表示。
    请添加图片描述
    寄存器中低 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。请添加图片描述

    保护模式之运行模式反转

    bits 的指令格式是[bits16] 或 [bits 32]。
    [bits 16]是告诉编译器, 下面的代码帮我编译成 16 位的机器码。
    [bits32]是告诉编译器, 下面的代码帮我编译成 32 位的机器码。
    进入保护模式下需要的三个步骤:
    1.打开A20
    2.加载gdt
    3.将cr0的be位设置为1
    在十六位模式下可以反转成三十二位
    在三十二位模式下可以反转成十六位
    请添加图片描述
    机器码66前缀就是反转码前缀
    不同模式之间可以使用对方模式下的操作数,还可以使用对方模式下的寻址方式。

    保护模式下的指令拓展

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

  • 相关阅读:
    仅用61行代码,你也能从零训练大模型
    DBeaver常用快捷键(含复制当前行)
    ZC-CLS381RGB颜色识别+8x8点阵指示(完)
    人工智能基础_机器学习003_有监督机器学习_sklearn中线性方程和正规方程的计算_使用sklearn解算八元一次方程---人工智能工作笔记0042
    多仓库管理工具git-repo部署
    Linux下的常见工具的简单使用
    关于web3.0平台的详细说明
    2.5A强驱动能力,舞台灯光驱动TMI8263锻造“中国芯”
    # 从浅入深 学习 SpringCloud 微服务架构(六)Feign(3)
    1027 Colors in Mars
  • 原文地址:https://blog.csdn.net/holdtao/article/details/127773530