• 02.保护模式


    一、什么是保护模式?

    X86cpu有3种模式:实模式,保护模式和虚拟8086模式

    二、什么是X86cpu

    X86是由INTEL退出的一种复杂指令集,能够生产支持这种指令集CPU公司主要是Intel和amd
    AMD在1999年的时候,扩展了这套指令集,称为X86-64,后改名为AMD64,intel也兼容了这个产品,称为intel64。但AMD64和intel64几乎一样,所有现在统称X64.

    三、什么是实模式?

    实模式就是即实地址访问模式,程序访问的内存空间直接就是物理内存的空间

    四、什么是保护模式?

    1.保护模式与实模式相对应。在80286以前,CPU只有实时模式,地址总线有20位,而内存地址是16位,也就是最多能够访问2^20 =1M的内存空间。在80286及以后,内存地址改为16位或32位,至少可以访问到2^32=4G的内存空间。但为了保证后续的CPU能够运行旧的CPU,只能保持向下兼容。因此,80286及以后的CPU首先进入实模式,然后通过切换机制再进入到保护模式。
    2.CPU复位(reset)或加电(power on)的时候以实模式启动,处理器以实模式工作。在实模式下,内存寻址方式和8086相同,由16位段寄存器的内容乘以16(10H)当做段基地址,加上16位偏移地址形成20位的物理地址,最大寻址空间1MB,最大分段64KB。可以使用32位指令。32位的x86 CPU用做高速的8086。在实模式下,所有的段都是可以读、写和可执行的
    3.保护模式与实模式相比,主要是两个差别:一是提供了段间的保护机制,防止程序间胡乱访问地址带来的问题,二是访问的内存空间变大

    五、什么是虚拟8086模式?

    虚拟8086模式是386及以上处理器所独有的运行模式,它全兼容实模式下所有处理方式,并运用分页机构进行内存管理。分页机构的处理单位是固定大小为4KB的页面,它把32位的线性地址分成三部分,即两个指向页表的10位变址和一个12位的页面偏移值(线性地址的格式见下面左图)。由于线性地址空间的虚拟页面和物理空间的页面均对齐到4KB的页面边界,如果将线性地址空间的每一页都对应物理空间的一页则需要4GB的内存开销,而实际内存空间是有限的。

    六、段的机制

    段寄存器的值为段选择子
    1.每个段寄存器有一个高速缓冲寄存器 段描述符高速缓冲寄存器或者描述符投影寄存器 不可见
    2.选择子被装入到段寄存器 cpu会将描述符表中的描述符的信息保存的缓冲寄存器
    3.此后对段的访问 就会直接使用描述符缓冲寄存器的新内容 而不再去描述符表中取
    段描述符高速缓冲寄存器 对应cs ss ds es fs gs
    内容包括32位基地址 32位段界限 还包括10位的段属性
    注意此寄存器的信息更新时机 除了选择子被装入到段寄存器外 还有在改变描述符表中的某个当前段的描述符后 也要更新此时缓冲寄存器的内容 即使选择子未变 需要通过重新装载段寄存器来实现

    七、页的机制

    在32位x86保护模式下,线性地址被分割成4KB大小的页面。物理地址也同样被分割为4KB固定大小的块,称为页框(页帧),页面可以映射到页框里。

    页表是一种特殊的数据结构,放在系统空间的页表区,存放逻辑页于物理页帧的对应关系。每一个进程都拥有一个自己的页表,PCB表中有指针指向页表。

    通常页表是一个4KB的数据结构,每一个页表项为4B,所以每个页表中可以存储1024个页表项

  • 相关阅读:
    eslint+prettier 配置
    【docker desktop】MongoDB配置并用NodeJS连接
    Python 之Mysql的异步操作库 aiomysql 笔记
    Go-Zero自定义goctl实战:定制化模板,加速你的微服务开发效率(四)
    CMake技术总结
    【小白友好】LeetCode 删除并获得点数
    前端面试必看(手写Promise+js设计模式+继承+函数柯里化等)JavaScript面试全通关(1/3)
    pom管理规范
    【目标检测】swin-transformer训练自己的数据集
    ZXing.Net 的Core平台生成二维码
  • 原文地址:https://blog.csdn.net/u011488769/article/details/127112902