zoukankan      html  css  js  c++  java
  • 操作系统——Linux内核完全注释011c-3.0

    4.2保护模式和内存管理(80X86)

    4.21 内存寻址

    物理内存

    计算机的物理内存是字节的线型数组,每个字节具有一个唯一地物理地址。

    地址总线32位,共2^32个不同的物理地址。即内存物理地址空间有4G,总共可以寻址4G字节的物理内存。

     

    小端法

     

    段寻址技术

    为了进行内存寻址,80X86使用了段寻址技术。寻址通过段地址+段内偏移地址

    段地址:16位,由端选择符指定

    段内偏移地址:32位,故一个段最大长度可达4G。

    程序中由16位的段和32位的段偏移构成48位地址,称为一个逻辑地址(虚拟地址)。它唯一确定了一个数据对象的段地址和段内偏移地址。

     

    6个存放段选择符的段寄存器

    CS、DS、ES、SS、FS、GS

    CS:代码段,在任何指定时刻由CS寻址的段称为当前代码段。此时EIP寄存器中包含当前代码段内下一条要执行指令的段内偏移地址。因此要执行指令的地址可表示为CS:[EIP]。

    段间控制转移指令可以被用来为CS、EIP赋新值,将执行为之改到其他代码段,实现不同段中程序的控制传递。

    SS:堆栈段,栈顶由ESP寄存器指定,因此堆栈顶地址SS:[ESP]。

    另外4个段寄存器是通用段寄存器,当指令中没有指定所操作数据的段时,DS作为默认的数据段寄存器。

     

    指令寻址方式

    通俗讲就是指令中寻找操作数地址的方式。

    指令的偏移量由三部分相加组成:基地址寄存器、变址寄存器和一个偏移常量。即:

    偏移地址 = 基地址 + (变址 * 比例因子)+偏移常量

    8086指令寻址方式的介绍:https://www.cnblogs.com/lfri/p/10781186.html

    4.2.2 地址变换

    保护

    防止一个任务访问另一个任务或操作系统的内存区域。地址变换可以让某些地址不被任何逻辑地址映射,所以地址变换过程也提供内存保护功能。

     

    地址变换

    程序中的地址是由两部分构成的逻辑地址,不能直接用于访问物理内存。

    需要将逻辑地址转为物理地址。

     

    将逻辑地址转为物理地址——分段和分页机制

    分段机制和分页机制是两种广泛使用的地址变换技术。

    都使用驻留在内存中的表来指定变换信息,这些表只能由操作系统访问,以防应用程序篡改。

    映射过程:

    第一阶段:分段机制。逻辑地址→处理器可寻址内存空间(称为线性地址空间)中的地址

    第二阶段:分页机制。线性地址→物理地址

    • 注:第二阶段是选用的,如果无第二阶段,则第一阶段直接将逻辑地址映射为物理地址。

    • 物理地址空间:地址总线能产生的地址范围

     

     

     

  • 相关阅读:
    vue2 下载scss依赖包
    fastjson使用
    vscode format
    flutter 中涉的深拷贝
    通过pom给maven添加编译插件
    IDEA添加动态模板(Live Templates)
    Maven启动tomcat:run异常
    Redis
    tomcat启动时启动窗口出现乱码的解决方案
    无效的源发行版,解决方案
  • 原文地址:https://www.cnblogs.com/Ivan-Luo/p/11651483.html
Copyright © 2011-2022 走看看