社区
Linux_Kernel
帖子详情
CR0的PE和PG置位后,linux源码中的逻辑地址、线性地址、物理地址问题
天行健__
2013-12-24 02:28:42
看了赵老师的linux内核源码注解一书。
有一些疑惑,请大家不吝赐教。
1、这是获取一页物理内存的代码,代码中计算了某个页面的物理地址,并使用edi寄存器对改页面的对应对的物理地址进行清0。这段代码应该是在CR0的PE和PG置位后运行的,既然开启了段页存储,内核怎么会还用物理地址进行寻址操作呢?不是要经过段页转换的吗?
2、这个是释放页目录所对应页表的操作,内核代码里面使用的是相对的逻辑地址,怎么可以直接用*号操作物理内存中的页表了?不是要经过段页转换的吗?
...全文
330
2
打赏
收藏
CR0的PE和PG置位后,linux源码中的逻辑地址、线性地址、物理地址问题
看了赵老师的linux内核源码注解一书。 有一些疑惑,请大家不吝赐教。 1、这是获取一页物理内存的代码,代码中计算了某个页面的物理地址,并使用edi寄存器对改页面的对应对的物理地址进行清0。这段代码应该是在CR0的PE和PG置位后运行的,既然开启了段页存储,内核怎么会还用物理地址进行寻址操作呢?不是要经过段页转换的吗? 2、这个是释放页目录所对应页表的操作,内核代码里面使用的是相对的逻辑地址,怎么可以直接用*号操作物理内存中的页表了?不是要经过段页转换的吗?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
天行健__
2013-12-26
打赏
举报
回复
太让我失望了,csdn果然没有高手,还是我自己苦思冥想,想到了怎么回事。 内核把自己的代码段和数据段设为了0,内核初始化的时候就在页目录表里放了四个页表,每个页表映射4M物理内存,共映射了16M物理内存,也就是说内核的页表已经覆盖了整个物理内存,内核线性地址空间等于物理地址空间。 所以代码里面用物理地址寻址其实就是线性地址,线性地址和物理地址一一映射,完全相等,寻址时cpu的mmu单元也进行了段页转换。
天行健__
2013-12-24
打赏
举报
回复
怎么没人回啊?是觉得问题不削一顾,还是csdn都我一般菜鸟?大侠们出来。
控制寄存器(
CR0
,CR1,CR2,CR3)的说明
内核
源码
中
涉及控制寄存器较多,看到有人介绍转过来收藏下。 控制寄存器 (控制寄存器(
CR0
,CR1,CR2,CR3)用于控制和确定处理器的操作模式以及当前执行任务的特性。) 从上表可见,80386有四个32位的控制寄存器,分别命名位
CR0
、CR1、CR2和CR3。但CR1被保留,供今后开发的处理器使用,在 80386
中
不能使用CR1,否则会引起无效指令操作异常。
CR0
包括指示处理器工
linux
后援设备,
linux
内存寻址
基于80x86微处理器的计算机
中
,内存寻址的转换过程是:
逻辑
地址
→
线性
地址
(虚拟
地址
)→
物理
地址
。参与内存寻址的MMU(存储器管理单元)
中
有两个重要的部分——分段单元和分页单元,前者负责将
逻辑
地址
转换为
线性
地址
,后者负责将
线性
地址
转换为实际的
物理
地址
。硬件分段机制每个
逻辑
地址
包含两个部分:一个段标识和一个段
中
偏移offset。这个段标识就是段选择子(SegmentSelector),该数据结构
中
有...
Linux
内存管理
一、为什么要提出
逻辑
地址
、
线性
地址
和
逻辑
地址
原因:
物理
地址
、
线性
地址
(虚拟
地址
)和
逻辑
地址
;主要是为了阐述段式管理和页式管理基本概念;
Linux
操作系统内存管理和虚拟内存概念;为内核开发做一个基础铺垫。 1.
物理
地址
:
物理
地址
是指出现在cpu外部的
地址
总线上的寻址物理内存的
地址
信号,是
地址
变换的最终结果。 2.
逻辑
地址
: 程序代码经过编译后在汇编程序
中
使用的
地址
。 3.
Linux
0.11
源码
中
的内存分页机制
linux
源码
学习,内存分页的机制。
一篇长文叙述
Linux
内核虚拟
地址
空间的基本概括
这里的内存模型,是指
Linux
内核用怎么样的方式去管理物理内存,一个物理内存页(4k),内核会用一个page(64Byte)(类似物理页的meta)去记录Physics Page Number相关信息,下面几种内存模型是讲如何存储这个物理机的meta信息(page),保证内核能快速根据PFN/PPN找到Page,也可以根据Page快速算出PFN。
Linux
内存模型发展经历了三个模式,分别为FLATMEM、DISCONTIGMEM、SPARSEMEM。PS:这里说下PFN和PPN是一个东西。
Linux_Kernel
4,467
社区成员
17,461
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章