• 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个页表项

  • 相关阅读:
    人工智能模型转ONNX & 连接摄像头使用ONNX格式的模型进行推理
    如何高效管理自己的电脑?文件再多也不乱!
    语音信号处理中的“窗函数”
    【Scala】Scala语法中=>、->、<-与{}、()的使用
    第十三届蓝桥杯 C++ B 组省赛 F 题——统计子矩阵 (AC)
    不要称之为卷土重来,Java 仍独领风骚
    JavaScript循环语句(for、while)
    第P4周:猴痘病识别
    mysql 中 varchar 和 text 的区别
    rust calcmine读取excel
  • 原文地址:https://blog.csdn.net/u011488769/article/details/127112902