zoukankan      html  css  js  c++  java
  • 实模式和保护模式

    1 问题的由来

    在学习操作系统引导启动程序部分,看到寻址模式由实模式切换到保护模式,不知道它们二者有何区别。

    2 实模式

    对于8086/8088这类16位处理器,寄存器都是16位的。

    而8086/8088CPU有20根地址总线,即寻址空间可以达到220 = 1M。

    然而16位的寄存器只能组合出216 = 64K个地址。

    于是使用两个16位寄存器来寻址:一个寄存器叫段寄存器;另一个寄存器叫偏移寄存器。

    内存地址 = 段寄存器<<4 + 偏移寄存器的值。

    例如段寄存器 = 0x500,偏移寄存器的值是0x100;则内存地址为0x5100。

    段寄存器与偏移寄存器的组合方式如下表所示。

    CS:IP  指向指令的位置
    SS:SP 指向栈顶
    SS:BP 可指向整个栈
    DS:偏移量 指向数据段
    ES:偏移量 指向附加段

    3 保护模式

    首先保护模式是针对32位CPU的,32位的CPU寻址空间达到232 = 4G。

    实模式下,可访问内存中的任何一个位置,不安全。

    为了限制每个段的访问空间,设置了一个表。表的名字为GDT(Global Descriptor Table 段描述符表),表里有很多表项,每个表项8个字节。

    下图为一个表项的信息。

     一个段就有一个相应的表项来限制它。

    保护模式下:内存地址=段基址+偏移地址。

    4 疑问

    如今的CPU都是64位了,寻址模式是什么?

    参考

    CPU的实模式和保护模式(一)

    https://zhuanlan.zhihu.com/p/42309472

    「学习笔记」对实模式/保护模式的三种访问内存机制的理解

    https://www.cnblogs.com/bEngi1/p/12173719.html

    汇编学习1--寄存器学习

    https://www.wandouip.com/t5i316078/

  • 相关阅读:
    webpack-bundle-analyzer使用
    HTTP1.0,HTTP1.1和HTTP2.0区别
    document.readyState
    async和defer
    页面生命周期
    key的理解
    解释型语言和编译型语言
    AMD/CMD/CommonJS与ES6 Module的区别
    vue的keep-alive原理
    数字钱包metaplex-foundation
  • 原文地址:https://www.cnblogs.com/QQ2962269558/p/13263280.html
Copyright © 2011-2022 走看看