《深入理解LINUX内核》笔记(二)

本文介绍80x86处理器架构中的三种地址概念:逻辑地址、线性地址及物理地址,并探讨内存控制单元如何进行地址转换,同时讨论了页与页框的区别,以及高速缓存的读写策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第二章:内存寻址

使用80X86时必须区分三种地址:

逻辑地址:包含在机器语言指令中,用来指定一个操作数或一条指令的地址。每个逻辑地址都有一个段segment和偏移量offset(displacement)组成,偏移量指明了从段开始的地方到实际地址之间的距离

 

线性地址(虚拟地址):一个32位无符号整数,可用来表示高达4GB的地址,常用16进制数字表示,范围从0x000000000xfffffff

 

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

 

内存控制单元(MMU):逻辑地址通过分段单元(硬件电路)转化到线性地址通过分页单元(硬件地址)转换到物理地址

 

 

一个逻辑地址:段标识符(段选择符)+偏移量

 

段寄存器存放段选择符,段寄存器有6个,有三个专用:

cs 代码段寄存器(含有一个2位字段,用于指明CPU当前特权级CPL

ss 栈段寄存器

ds 数据段寄存器

 

linux下逻辑地址与线性地址是一致的,即逻辑地址的偏移量字段的值与相应的线性地址的值总是一致的

 

区分页和页框:页只是一个数据块,可以存放在任何页框或磁盘中

 

当访问一个RAM存储单元时,CPU从物理地址中提取出子集的索引号并把子集中所有行的标签与这个物理地址的高位相同,则CPU命中一个高速缓存

 

对于写操作,控制器有两个策略:回写,通写

回写:只更新高速缓存,不改变RAM内容

通写:既写RAM也写高速缓存

 

LINUXPC体系结构保留的页框来动态存放所分配的页

 

内核使用固定映射的线性地址表来代替指针变量

 

任何进程切换都会暗示这更换活动页表集,相对于过期页表,本地TLB表项必须被刷新;这个过程在内核把新的页全局目录的地址写入cr3控制寄存器时会自动完成

 

内核线程使用的是普通进程的页表集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值