linux内存寻址

news/2024/11/10 2:02:08

本章节介绍linux寻址技术,详细描述80x86微处理器怎样进行芯片级的内存寻址,linux又是如何寻址硬件的。

1. linux内存地址

  80x86微处理器下主要有三种不同的地址:逻辑地址,线性地址,物理地址。

逻辑地址:

  主要用于兼容早起80x86处理(段式内存管理方式),包含在机器语言指令中用来指定一个操作数或一条指令的地址。每个逻辑地址由一个段标识符(segment)和一个偏移量(offset)组成,偏移量指明从段开始到实际地址之间的距离。段标识符是一个16bits的字段,成为段选择符(segment selector),而偏移量是一个32bits的字段。

线性地址:

  也叫虚拟地址,和逻辑地址一样不是一个真实的地址,如果逻辑地址对应段式内存管理方式下转换前的地址,那么线性地址就是页式内存管理方式下转换前的地址。在32位处理器上,它是一个32为无符号整型,用于寻址4G,也就是高达4294967296个内存单元。

物理内存:

  是内存芯片级的单元寻址,与微处理器上的地址引脚发送到内存总线上的电信号相对应,也就是我们常说的真实物理地址。

CPU内存管理单元(MMU)将一个逻辑地址转换到物理地址需要两步:

(1).通过分段单元(segmentation unit)的硬件电路将逻辑地址转换成线性地址

(2).通过分页单元(paging unit)的硬件电路将线性地址转换成物理地址。

  从80286开始,intel处理器以两种不同的方式进行地址转换:实时模式(real mode)和保护模式(protectd mode)。实时模式主要为兼容早起处理器。

  在实时模式下,CPU直接寻址(物理地址),形式为:段值+偏移量。段值被保存在段寄存器中(如ds),并且段的长度被固定为64KB。段内偏移量被存放在任意一个可用于寻址的寄存器中(如si)。

  在保护模式下,CPU可采用分段和分页机制,分段机制下使用的地址是逻辑地址,形式为:段选择子+段内偏移量。在分页机制下使用的地址是线性地址,形式为0x00000000。在保护模式下,段寄存器中存放的是一个段描述符表(segment Descriptor Table)中每个段在表中的索引值。

2. 内存分段机制

3. 内存分页机制

http://book.chinaunix.net/showart.php?id=1316

转载于:https://www.cnblogs.com/lambda107/archive/2010/08/02/1790892.html


http://www.niftyadmin.cn/n/3613033.html

相关文章

Linux Input Device 介紹: APIs

Linux Input Device 介紹: APIs jollen 發表於 April 8, 2009 12:18 PM Linux 的 Input Device 是重要的一個 subsystem,在進行實例介紹前,先大略了解一下相關的 API。 Linux Input Device input.c是Linux的”input”驅動程式,主…

Android 如何破解兼容性困局

最新的消息表明,Android 手机的销售量超越 iPhone,虽然在整体市场占有率上,仍然不及竞争对手,但是却已经初现王者风范,一些文章也预测 Android 最终会稳坐智能手机第一把交椅。Android 的确是十分有潜力的,…

webpack学习路径(01.webpack的配置及使用)

对于webpack,我的理解是一种工具提供了友好的前端模块化开发的支持,可以解决代码压缩混淆,浏览器兼容性问题,以及提升性能等主要功能, 安装配置过程: 首先创建一个根目录(随便创建一个文件夹&…

C#中直接打印Report文件(rdlc)

Visual Studio自带的报表文件(rdlc,后面提到的报表,都指rdlc报表文件)虽然功能相对不是十分强大,但应付一般的报表要求也是绰绰有余了。关于rdlc报表的使用和设计方法,这里就不做讲解了,本文主要…

士农工商

中国古代,把商排在了最低等级,其实这是有道理的,商人是滋生腐败的源头,以盈利为目的的运营,只要没有很好的规范,即使牺牲了全世界,也会有人去做,这里的重点就是规范,不过…

vsCode自动修复规范报错的配置

1.先要安装Eslint 和Prettier - Code formatter插件 2.在settings-json中添加 (1) //Eslint插件的配置 “editor.codeActionsOnsave”:{ “source.fixAll”:true, }, (2) //prettier配置 “eslint.alwaysShowStatus”: true, &quo…