美文网首页
第4章 保护模式入门

第4章 保护模式入门

作者: mecury | 来源:发表于2018-05-24 00:06 被阅读27次

为什么要有保护模式?

实模式下的不足

  • 实模式下操作系统与用户程序处于同一特权级,平起平坐,没有区别对待
  • 用户所引用的地址都是指向真实的物理地址,也就是说逻辑地址等于物理地址
  • 用户程序可以自由的修改段基址,这几乎可以访问所有的内存
  • 访问超过64K的地址就需要切换段基址,容易蒙蔽
  • 一次只能运行一个程序
  • 共20条地址线,最大可用内存为1MB,这在之前就不可以用了

保护模式

保护模式之寄存器扩展

除了段寄存器之外,通用寄存器,指令指针寄存器,标志寄存器都由原来的16位扩展为32位寄存器。经过extend后的寄存器,前面都加e,寻址范围达到4GB


  • 保护模式增加了一个描述符表,表中至少有一个表项称为段描述符,其大小为64字节用来描述各个内存段的起始地址,大小,权限等信息。段寄存器中保存的不在时段基址,而是称为“选择子”的内容,selector,用这个数来索引全局描述表中的段描述符,把全局描述符表当成数组,选择子就像数组下标一样。
  • 为了提供获取段信息的效率,对段寄存器率先应用了缓存技术,将段信息缓存用一个寄存器来缓存,这就是段描述符缓冲寄存器(Descriptor Cache Register
    三种段描述缓存寄存器结构:

80286:拥有了保护模式,地址总线由20位扩宽到了24位,即寻址空间为2的24次方,16MB。但是80286的通用寄存器还是16位,即单独的寄存器寻址还是64KB,要想防伪全部的空间,还是需要不停的切换段基址
80386: 提升地址中线与寄存器都为32位,段基址是32位,单独的一个寄存器也是32位,任意一个段都可以访问4GB的空间

综上所述,CPU有三种模式:实模式、虚拟8086模式,保护模式

保护模式之运行模式反转

bits的指令格式是[bits16]或[bits32]
bits[16]:声明下面的指令编译为16位的机器码
bits[32]:声明下面的指令编译为32位的机器码


操作数反转指令0x66
如果当前的模式是16位实模式,操作数大小是32位
如果当前的模式是32位保护模式,操作数大小变为16位

寻址方式反转前缀0x67

保护模式之指令扩展

mul无符号数相乘指令扩展:

  • 若乘数是8位,则把寄存器al当作另一个乘数,结果是16位,存入ax中
  • 若乘数是16位,则把ax当作另一个乘数,结果是32位,存入dx:ax中,其中dx是结果的高16位,ax是结果的低16位
  • 若乘数是32位,则把eax当作另一个乘数,结果是64位,存入edx:eax,edx为高32位,eax为低32位
    imul同上

div无符号数除法指令:

  • 如果除数是8位,被除数就是16位,位于寄存器ax,商在寄存器al,余数在寄存器ah。
  • 如果除数是16位,被除数就是32位,高16位在dx,低16位在ax,商在ax,余数在dx。
  • 如果除数是32位,被除数是64位,高32位在edx,低32位在eax,商在寄存器eax,余数在edx。

全局描述符表GDT

段描述符

全局描述符表GDT、局部描述符表LDT及选择子

  • 一个段描述符只能用来定义一个内存段。代码段要占用一个段描述符,数据段与栈段也要各自占用一个描述符,这些描述符就放在全局描述符表GDT中
  • GDT位于内存中,拥有独立的寄存器,拥有专门的寄存器GDTR,专门用来存储GDT的内存地址与大小。GDTR是48位寄存器
  • 段寄存器CS、DS、ES、FS、GS、SS,在实模式下,段中存储的是段基址,即内存段的起始地址;而在保护模式下,在段寄存器中存入选择子的东西

打开A20地址线

in al, 0x92
or al, 0000_0010B
out 0x92, al

地址回绕:实模式下的内存访问采取“段基址:段内偏移地址”,由于实模式下是20位地址先,最大寻址空间是1MB,即0x00000~0xFFFFF。CPU采用了地址回绕的方式,对于超过1MB多的部分会自动回绕到0地址,继续由)地址开始映射。超过1MB多余出来的内存被成为高端内存区HMA

保护模式的开关,CR0寄存器的PE位

PE:Protection Enable,用于控制是否启用保护模式,是保护模式的开关

mov eax, cr0
or eax, 0x00000001
mov cr0, eax

处理器微架构简介

流水线作业
计算机系统设计者的基本任务是提高处理机指令的执行速度,而采取的主要措施是指令级的并行性,即让多条指令同时参与解释的过程。
将一个指令的执行过程分为多个阶段,一般把一条指令的解释过程分为3个(取指、分析和执行)或5个(取指、译码、执行、访存和写回)阶段。然后执行过程如下图:


乱序执行
乱序执行是指在CPU中运行的指令不按照代码中的顺序执行,而是按照一定的策略将打乱顺序执行,也许后面的指令会先执行。
缓存
  • cpu中有一级缓存L1,二级缓存L2,三级缓存L3等,他们都是SRAM,即静态存取寄存器。
    缓存的局限性:程序的90%的时间都运行在程序中的10%代码上。分为两个方面:
  1. 最近访问过的指令与数据,在将来的一段的时间内依然经常被访问。
  2. 靠近当前访问内存空间的内存地址,在将来的一段时间也会被访问。

分支预测
流水线是提高CPU效率的方式,但流水线最大的问题是程序的分支结构,如何把握分支的方向,才能是流水线高效率。

  • 2位预测法:最简单的预测法。使用2bit的计数器来记录跳转状态,每跳转一次就加一,直到加到最大值3就不再加了,如果未跳转就减一,直到减到0就不在减了。当遇到跳转指令,如果计数器的值大于1则跳转,如果小于等于1则不跳转。
使用远跳转指令清空流水线,更新段描述符缓冲寄存器

相关文章

  • 第4章 保护模式入门

    为什么要有保护模式? 实模式下的不足 实模式下操作系统与用户程序处于同一特权级,平起平坐,没有区别对待 用户所引用...

  • CPU的保护模式与进程空间

    CPU的保护模式 保护模式 Windows多任务的实现 虚拟内存 内核模式与用户模式 1、保护模式 80386处理...

  • 理解Eureka的自我保护模式

    本文我们来探讨Eureka的自我保护模式。自我保护模式是Eureka的重要特性。进入自我保护模式最直观的体现,是E...

  • selenium问题解决

    1、保护模式不一致(全部打开保护模式) Caused by: org.openqa.selenium.Sessio...

  • cpu是怎么访问内存的

    实模式保护模式

  • redis保护模式引起的问题 --- 2020-03-18

    引起以下图中出现的问题是redis开启了保护模式导致的,现在我们关闭保护模式就可以了,可能有人说我关闭了保护模式啊...

  • MASM初探

    X86处理器主要有四种操作模式: 保护模式 虚拟8086模式 实地址模式 系统管理模式 一、保护模式:保护模式是C...

  • 理解Eureka的自我保护模式

    概要 自我保护模式是Eureka的重要特性。进入自我保护模式最直观的体现,是Eureka Server首页输出的警...

  • redis入侵防范笔记!

    打开保护模式redis默认开启保护模式。要是配置里没有指定bind和密码,开启该参数后,redis只能本地访问,拒...

  • redis.conf详解之protected-mode

    用法 打开保护模式 关闭保护模式 用途 保护你的redis实例,防止被访问和利用。大白话:只有本地能操作这个实例,...

网友评论

      本文标题:第4章 保护模式入门

      本文链接:https://www.haomeiwen.com/subject/nuhzdftx.html