linux 内存寻址

(持续更新)

相关概念


内存地址

  当使用80x86(32位)微处理器时,一般分为三种不同的地址: 


逻辑地址

 包含在机器语言指令中用来指定一个操作数或一条指令的地址。每一个逻辑地址都由一个段(segment)和偏移量(offset或displacement)组成,偏移量指明了从段开始的地方到实际地址之间的距离。
所有段都从0x00000000开始,只需关注段内偏移即可。而段内偏移的值恰好等于线性地址的值。


线性地址(也称虚拟地址)

线性地址通常用十六进制数字表示,值的范围从0x00000000到0xffffffff。
物理地址
用于内存芯片级内存单元寻址。他们与从微处理器的地址引脚发送到内存总线上的电信号相对应。 

物理地址

用于内存芯片级内存单元寻址。他们与从微处理器的地址引脚发送到内存总线上的电信号相对应。 

地址转换

内存控制单元(MMU)通过一种称为分段单元的硬件电路把一个逻辑地址准换成线性地址;接着,第二个称为分页单元的硬件电路把线性地址转换成一个物理地址。 
这个地方有疑问! 逻辑地址一般等于线性地址,那不同的进程中相同的地址是逻辑地址一样?还要继续看。

段选择符

机器语言指令中出现的内存地址,都是逻辑地址。

一个逻辑地址由两部分组成: 段选择符以及偏移量。

段选择符字段

index 指定了放在GDT或LDT中的相对应段描述符的入口。 

TI      :TI (Table Indicator)标志 :指明段描述符实在GDT(TI=0)中或在LDT中 (TI=1)

RPL   :请求者特权级。

段描述符

每个段由一个8字节的段描述符表示,它描述了段的特征。段描述符放在全局描述符表(Global Descriptor Table,GDT)或局部描述符表(Local Descriptor Table, LDT中)。

Linux GDT(全局描述符表)

在单处理器系统中只有一个GDT,而在多处理器系统中每个CPU对应一个GDT。

通常只定义一个GDT,每个进程除了存放在GDT中的段之外如果还需创建附加的段,就有自己的LDT。GDT在主存中的地址和大小存放在gdtr控制寄存器中,当前正被使用的LDT地址和大小放在ldtr控制寄存器中。

段描述符类型

代码段描述符

数据段描述符

任务状态段描述符(TSSD)

局部描述符表描述符(LDTD)

段描述符字段 

Base  : 包含段的首字节的线性地址

.............

.............

分段单元

逻辑地址转换为线性地址,分段单元执行以下操作

1.通过逻辑地址(由段选择符及偏移量组成)得到段选择符;

2.先检查段选择符的TI字段,判断段选择符保存在哪一个描述符表中。TI字段指明描述符是在GDT中(在这种情况下,分段单元从gdtr寄存器中得到GDT的线性基地址)还是在LDT中(在这种情况下,分段单元从ldtr寄存器中得到LDT的线性基地址);

3.从段选择符的index 字段计算段描述符的地址,index字段的值乘以8(一个段描述符的大小),这个结果与gdtr或ldtr寄存器中的内容相加;

4.把逻辑地址的偏移量与段描述符Base字段的值相加就得到了线性地址。

简单说就是,通过逻辑地址找到段选择符,再找到对应的段描述符,最后得到最后的线性地址。

段描述符中有包含段的首地址的线性地址(base)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/808282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux重定向符号

将ls命令执行结果重定向到a文件中 将错误ls命令执行结果重定向到a文件中(这里用到前面的标准错误输出重定向)

科研学习|可视化——相关性结果的可视化

一、相关性分析介绍 相关性分析是指研究两种或者两种以上的变量之间相关关系的统计分析方法,一般分析步骤为: 1)判断变量间是否存在关联;2)分析关联关系(线性/非线性)、关联方向(正相…

上海人工智能实验室的书生·浦语大模型学习笔记(第二期第三课——上篇)

书生浦语是上海人工智能实验室和商汤科技联合研发的一款大模型,这次有机会参与试用,特记录每次学习情况。 一、课程笔记 本次学习的是RAG(Retrieval Augmented Generation)技术,它是通过检索与用户输入相关的信息片段…

基于SSM的大学生兼职平台的设计与实现需求(源码+配套文档)

基于SSM的大学生兼职平台的设计与实现需求(源码配套文档) 摘 要 信息社会、信息时代造就了现在我们所拥有的科技生活。各种关于生活、社团的互联网软件逐步的走向了百姓的生活当中,移动互联网在当下的时代中有着非常成熟的应用&#xff…

【nodejs基础学习三-浏览器偏好设置】

系列文章目录 第一章 nodejs基础学习–注释、变量、运算符、字符串、函数(一) 第二章 nodejs基础学习–循环、对象字符、模块导入出(二) 第三章 nodejs基础学习三-浏览器设置 系列文章目录一、开发者模式二、web偏好设置 一、开发…

将没有父对象的组件加入布局,将布局设置给一个窗口,窗口析构时,组件自动释放

创建按钮,和布局管理器,把按钮加入到布局管理器,窗口中使用布局管理器。 MyButton *button2 new MyButton; MyButton *button3 new MyButton; QHBoxLayout *layout new QHBoxLayout; layout ->addWidget(button2); layout ->addWid…

1.网络编程-网络协议

目录 网络编程是什么 网络编程三要素 OSI七层网络模型 TCP/IP五层模型 SSL/TLS 是哪层协议 网络编程是什么 网络编程是计算机科学中的一个重要领域,它涉及到编写能够在网络环境中进行通信的程序。网络编程的核心目标是使不同的设备能够通过网络交换信息&#…

100美元如何做安全防御?

面对仅有100美元的网络安全预算,如何确保家庭网络和个人数据的安全?近期,国外媒体咨询了几位网络安全领域的专家,他们提出了在有限预算下最大化网络安全的有效方法。以下内容提炼了四位专家关于家庭网络安全预算分配的独特观点与实…

【前端Vue】Vue3+Pinia小兔鲜电商项目第5篇:整体认识和路由配置,本资源由 收集整理【附代码文档】

Vue3ElementPlusPinia开发小兔鲜电商项目完整教程(附代码资料)主要内容讲述:认识Vue3,使用create-vue搭建Vue3项目1. Vue3组合式API体验,2. Vue3更多的优势,1. 认识create-vue,2. 使用create-vue创建项目,1. setup选项的写法和执行…

万亿资产规模,一个指标平台,银行业数据赋能经营的最佳实践

为了适应经营环境变化,企业的发展模式需要转向高质量发展。在数字经济时代,借助数字化手段实现数字化经营,是企业实现高质量发展的必由之路。 指标平台逐渐成为企业数据基础设施中的重要组成部分。企业可以借助指标平台对数据资产进行便捷化…

全面的网络流量监控

流量监控指的是对数据流进行的监控,通常包括出数据、入数据的速度、总流量。通过网络流量监控,组织可以确保只有业务关键型流量通过网络传输,并限制不需要的网络流量,从而提高网络效率,又可以防止停机、减少 MTTR、帮助…

实验8 内置对象session

一、实验目的 掌握怎样在JSP中使用内置对象session 二、实验项目内容&#xff08;实验题目&#xff09; 编写代码&#xff0c;掌握session的用法。【参考课本4.6.5 】 三、源代码以及执行结果截图&#xff1a; choiceGrade.jsp <% page language"java" content…

ad原理图库的创建及引入

SCH是原理图库。 PCB是封装库。 法1 小器件 1.创建lib 保存路径 2.创建器件 3.绘制器件 右击》放置》选择要放置的东西》左键放置&#xff0c;右键结束。 放置引脚快捷↓ 【Name】:用于输入库元件引脚的功能名称.  【Designator】:用于设置引脚的编号 选择器件后电机T…

EEPROM读写案例(以AT24C02为例)

本篇文章主要是在学习单片机串行接口时的学习经历&#xff0c;主要侧重于驱动程序的讲解。下文将通过ESP32S3、STM32两款MCU进行编写驱动案例。 1、AT24C02简要说明 AT24C02是美国微芯科技公司生产的电擦写式只读存储器系列中的一款&#xff0c;其容量为2K位&#xff08;即256字…

前端项目部署教程——有域名无证书

一、拉取nginx镜像 docker pull nginx //先拉取nginx镜像二、打包前端项目 1、将Vue打包项目传输到/usr/local/vue/下blog和admin文件夹下 2、在/usr/local/nginx下创建nginx.conf文件&#xff0c;格式如下&#xff1a; events {worker_connections 1024; }http {include …

每日OJ题_BFS解决FloodFill④_力扣130. 被围绕的区域

目录 力扣130. 被围绕的区域 解析代码 力扣130. 被围绕的区域 130. 被围绕的区域 难度 中等 给你一个 m x n 的矩阵 board &#xff0c;由若干字符 X 和 O &#xff0c;找到所有被 X 围绕的区域&#xff0c;并将这些区域里所有的 O 用 X 填充。 示例 1&#xff1a; 输入&…

设计模式: 结构型之外观模式(11)

外观模式概述 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它为复杂的系统、程序库或框架提供一个简单&#xff08;但有限&#xff09;的接口这种模式的核心理念是隐藏系统的复杂性&#xff0c;仅对外暴露一个简化的接口&#xff0c;使得…

libVLC 视频界面分割

先看看分割后的界面吧&#xff0c;根据分割的数量&#xff0c;来分割视频画面。 其实视频界面分割很简单&#xff0c;看过叠加窗口的这篇文章&#xff0c;不难理解&#xff0c;如何分割。 libVLC 视频窗口上叠加透明窗口-CSDN博客 如果还是不懂的话&#xff0c;我讲解一下原理…

【c++】-对象的初始化-构造函数和析构函数区别联系-总结

对象的初始化 1.构造函数和析构函数 构造函数和析构函数是在类体中说明的两种特殊的成员函数。构造函数的功能是在创建对象时&#xff0c;使用给定的值来将对象初化。析构函数的功能是用来释放一个对象的&#xff0c;在对象删除前&#xff0c;用它来做一些清理工作&#xff0…

原码的除法运算

目录 王道考研ppt&#xff1a; 个人理解&#xff1a; 手算整数的除法&#xff1a; ​编辑 手算二进制的除法&#xff1a; 用机器实现除法&#xff1a; 方法一&#xff1a;恢复余数法 第二种方法&#xff1a;加减交替法 王道考研ppt&#xff1a; 个人理解&#xff1a; 手…