内存寻址

1.背景

通过阅读和学习《深入学习linux内核》,这里进行简单整理,以备以后再学习。

2.三种地址

2.1 逻辑地址

定义:包括在机器语言指令中用来指定一个操作数或者一条指令的地址。

2.2 线性地址(虚拟地址)

定义:是一个32位无符号整数,可以用来表达高达4GB的地址,也就是高达4 294 967 296个内存单元。该地址通常用十六进制数字表示,值的范围从0x00000000 到 0xffffffff。

2.3 物理地址

定义:用于内存芯片级内存单元寻址。它们与从微处理器的地址引脚发送到内存总线上的电信号相对应。物理地址由32位或者36位无符号整数表示。

2.4 三种地址关系

这里写图片描述

2.4.1 附加说明

在多处理器系统中或者包含DMA控制器的特殊处理器的单处理器中,涉及到一个内存仲裁器(memory arbiter)的硬件电路。它插在总线和每个RAM芯片之间。它用于因为多个处理器共用同一个内存导致并发问题的。

3. 分段

3.1 硬件中的分段

3.1.1段选择符和段寄存器

三个有专门用途的寄存器
cs:代码寄存器,指向包含程序指令的段
ss:栈段寄存器,指向包含当前程序栈的段
ds:数据段寄存器,指向包含静态数据或者全局数据数据段

3.2 linux中的分段

Linux以非常有限的方式使用分段。2.6版的Linux只有在80x86结构下才需要使用分段。

4.分页

4.1 分页

分页单元(硬件电路)把线性地址转换成物理地址。
为了效率起见,线性地址被分成固定长度单位的组,成为页(page)。页内的线性地址被映射到连续的物理地址中。

分页单元把所有的RAM分成固定长度的页框(page frame)(有时叫做物理页)。每一个页框包含一个页,也就是说一个叶框的长度与一个页的长度一致。页框是主存的一部分,因此也是一个存储区域。区分一页和一个页框是很重要的,前者是一个数据块,可以存放在任何页框或者磁盘中。

4.1.1 常规分页

三个概念:页目录表、页表、偏移量

图:80x86处理器的分页
80x86处理器的分页

4.1.2 扩展分页

扩展分页允许页框大小为4MB而不是4KB.

图:扩展分页
扩展分页

4.1.3 物理地址扩展(PAE)分页机制

4.1.4 64位系统中的分页

4.1.5 硬件高速缓存

当今的微处理器时钟频率接近几个GHz,而动态RAM(DRAM)芯片的存取时间是时钟周期的数百倍。这意味着,当从RAM中取操作数或者向RAM中存放结果这样的指令执行时,CPU可能等待很长时间。

为了缩小CPU和RAM之间的速度不匹配,引入了硬件高速缓存内存(hardware cache memory)。

速度上 L1-cache > L2-cache > L3-cache
容量上 L1-cache < L2-cache < L3-cache
多级高速缓存之间的一致性是有硬件实现的。Linux忽略这些硬件细节并假定只有一个单独的高速缓存。

图:处理器硬件高速缓存
处理器硬件高速缓存

图:双处理器中的高速缓存

双处理器中的高速缓存

4.2 linux中的分页

直到2.6.10版本,Linux采用三级分页的模型。从2.6.11版本开始,开始采用四级分页模型,如下:
页全局目录
页上级目录
页中间目录
页表

图:linux分页模式
这里写图片描述

参考:《深入理解Linux内核》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值