- 主题:Kernel的代码区域的内存是设置成只读的吗?
rt
--
FROM 65.49.204.*
这部分好像没有计入伙伴系统,分配物理内存时看不到这块。不知道自己理解的对不对
--
FROM 123.113.69.*
不管入不入伙伴系统,总得有页表,页表上就有内存属性的啊
【 在 lazyfintech 的大作中提到: 】
: 这部分好像没有计入伙伴系统,分配物理内存时看不到这块。不知道自己理解的对不对
--
FROM 124.202.185.*
这块可能没有页表
页表由伙伴系统管理
可能我当时看的时候理解错了,lz可以看看伙伴系统初始化的代码
【 在 wjhtingerx 的大作中提到: 】
: 不管入不入伙伴系统,总得有页表,页表上就有内存属性的啊
:
--
FROM 123.113.69.*
没页表物理地址怎么映射成虚拟地址?
【 在 lazyfintech 的大作中提到: 】
: 这块可能没有页表
: 页表由伙伴系统管理
: 可能我当时看的时候理解错了,lz可以看看伙伴系统初始化的代码
: ...................
--
FROM 124.202.185.*
这部分就没加入伙伴系统,分配物理内存的时候不会分配这块区域
【 在 wjhtingerx 的大作中提到: 】
: 没页表物理地址怎么映射成虚拟地址?
:
--
FROM 123.113.69.*
不分配也要映射的啊
【 在 lazyfintech 的大作中提到: 】
: 这部分就没加入伙伴系统,分配物理内存的时候不会分配这块区域
: :
--
FROM 124.202.185.*
我看这块代码是十多年前
之所以记着,是因为当时看这块代码纠正了我的认知
在看这块代码之前,也是跟LZ理解的类似,任意物理内存都由伙伴系统管理
当时看的2.4.2x还是2.6早期代码,具体忘了
内核初始化阶段好像是通过bootmem进行物理内存的分配管理,细节上用的是bitmap(现在的内核不知道是否还用这种方法)
bootmem运行到最后,把free的提交给伙伴系统初始化,像内核代码占用的区域是不交给伙伴系统初始化的
可以理解成,伙伴系统看到多少物理内存是由bootmem位图决定的(自己没有尝试过,LZ可以自己更改对bootmem的调用,比如占据一部分物理内存,最后看看伙伴系统是否会管理这部分内存)
伙伴系统看不到这部分物理内存,产生page fault进行映射的时候,虚拟地址也不会映射到这块物理地址
LZ可以自己看看对应的内核代码,如果觉得新内核代码太多,找一个旧版本看看会省点时间
【 在 wjhtingerx 的大作中提到: 】
: 不分配也要映射的啊
:
--
FROM 123.113.69.*
虽然不会分配这些内存,但是映射是必不可少的。
你要访问这些地址(执行代码指令),就必然要映射。
【 在 lazyfintech 的大作中提到: 】
: 我看这块代码是十多年前
: 之所以记着,是因为当时看这块代码纠正了我的认知
: 在看这块代码之前,也是跟LZ理解的类似,任意物理内存都由伙伴系统管理
: ...................
--
FROM 221.219.109.*
这块当时没注意
是自己当时读代码没读细,把注意力放在了哪些内存交由伙伴系统了,这部分疏忽了
【 在 martinjspace 的大作中提到: 】
: 虽然不会分配这些内存,但是映射是必不可少的。
: 你要访问这些地址(执行代码指令),就必然要映射。
:
--
FROM 123.113.69.*