| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> linux内核学习1:内存地址(1) -> 正文阅读 |
|
[系统运维]linux内核学习1:内存地址(1) |
1. 程序反汇编机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过MMU(CPU中的内存管理单元)转换成物理地址才能够被访问到。 我们写个最简单的hello world程序,用gccs编译,再反编译后会看到以下指令: mov 0x80495b0, %eax 这里的内存地址0x80495b0 就是一个逻辑地址,必须加上隐含的DS 数据段的基地址,才能构成线性地址。也就是说 0x80495b0 是当前任务的DS数据段内的偏移 2. LINUX地址分类当使用80x86微处理器时,必须区分以下三种不同的地址:
2.1 实模式和保护模式具体区别查看:https://zhuanlan.zhihu.com/p/42309472 2.2.逻辑地址转换成线性地址在 80386中,有6个16位的段寄存器,但是,这些段寄存器中存放的不再是某个段的基地址,而是某个段的选择符(Selector)。因为16位的寄存器 无法存放32位的段基地址,段基地址只好存放在一个叫做描述符表(Descriptor)的表中 我们在寻址的时候,一般是从段寄存器拿到段选择符,然后再根据选择符的索引号,找到段描述符,然后从段描述符中取出段基址,加上偏移就形成了我们要访问的地址 段选择符段选择符(或称段选择子)是段的一个十六位标志符,段选择符用来表示指向哪个段描述符,即用来在段描述符中寻址
为了更方便的找到段选择符,处理器提供了段寄存器,段寄存器的唯一目的就是存放段选择符。 段寄存器段寄存器:有6个段寄存器,分别为: cs除了是包含程序指令的段,还包含前面提到的请求特权级(RPL),值为0代表最高优先级,为3代表最低优先级。linux中只用哪0级和3级,分别称之为内核态和用户态 段描述符段描述符8个字节,描述了段的特征。段描述符存放在全局描述符(GDT)或者局部描述符(LDT)中 GDT在主存中的地址和大小存放在gdtr控制寄存器中,当前正在被使用的LDT的地址和大小放在ldtr控制寄存器中。 段描述符具有64位在GDT表中结构如下:
常见的几种段描述符Type(即上面Type字段):
段描述符的地址 = GDT/LDT的值(保持在gdtr/ldtr寄存器) + (段选择符的索引值 * 8) 分段单元工作步骤下图显示了一个逻辑地址是怎样转换成对应的线性地址的。 ① 检查段选择符的TI字段,以确定段描述符保存在GDT还是LDT中 ② 段描述符地址 = gdtr / ldtr + 段选择符index字段 * 8(每个段描述符8B) ③ 线性地址 = 段描述符base字段 + 逻辑地址的偏移量 对上面的各种地址的阶段性总结如下:CPU将一个虚拟地址空间的地址转换为物理地址,需要进行两步:首先将给定的逻辑地址,即[段标识符:段内偏移量]这样的形式,利用段式管理单元,转化为线性地址,然后利用页式内存管理单元,转化为最终的物理地址。 在Linux下,逻辑地址与线性地址总是一致(是一致,不是有些人说的相同)的,即逻辑地址的偏移量字段的值与线性地址的值总是相同的。!!!”所以如果做linux下内核开发,对于上述的x86的段式管理可以完全不用理会,我们可以认为linux根本没有用intel弄出来的这个段式管理,而是以页式管理完成了所有的内存管理工作。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/27 10:55:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |