内存管理 – 哪些数据结构使用128MB的1GB Linux内核空间?

内存管理 – 哪些数据结构使用128MB的1GB Linux内核空间?,第1张

概述在我读过的关于 Linux内核中的HIGHMEM的几乎所有书籍和文章中,他们都说在使用3:1拆分时,并非所有1GB都可用于内核进行映射.通常是896MB左右,其余用于内核数据结构,内存映射,页表等. 我的问题是,这些数据结构究竟是什么?页表通常通过页表地址寄存器访问,对吧?并且页表的基地址通常存储为物理地址.现在为什么需要为整个表预留一个虚拟地址空间? 同样,我读到了占用空间的内核代码本身.这与虚 在我读过的关于 Linux内核中的HIGHMEM的几乎所有书籍和文章中,他们都说在使用3:1拆分时,并非所有1GB都可用于内核进行映射.通常是896MB左右,其余用于内核数据结构,内存映射,页表等.

我的问题是,这些数据结构究竟是什么?页表通常通过页表地址寄存器访问,对吧?并且页表的基地址通常存储为物理地址.现在为什么需要为整个表预留一个虚拟地址空间?

同样,我读到了占用空间的内核代码本身.这与虚拟地址空间有什么关系?它不是存储代码所消耗的物理内存吗?

最后,这些数据结构为什么要保留128MB空间?为什么它们不能像所需的那样在整个1GB地址空间中使用,就像内核中的任何其他普通数据结构一样?

我已经完成了LDD3,专业linux内核架构以及堆栈溢出(例如:Why Linux Kernel ZONE_NORMAL is limited to 896 MB?)和旧版LWN article的几个帖子,但没有找到相同的具体信息.

解决方法 关于页表,MMU不关心页表本身是否未映射到虚拟地址空间 – 为了地址转换的目的,这是可以的.但是当内核需要修改页面表时,它们确实需要映射到虚拟地址空间 – 而内核不能只是“及时”映射它们,因为它需要修改页面表本身来做那.这是一个鸡与蛋的问题,这意味着页表需要始终保持映射状态.

内核代码存在类似的问题.对于要执行的代码,它必须映射到虚拟地址空间 – 如果执行页表修改的代码本身不存在,我们就会遇到类似的鸡与蛋问题.有了这个,就可以更容易地将整个内核代码映射到内部,同时内核模式堆栈和任何内核数据结构都可以通过代码进行访问,而不希望出现页面错误.这种数据结构的一个大例子是结构页面结构数组,代表每个物理内存页面.

总结

以上是内存溢出为你收集整理的内存管理 – 哪些数据结构使用128MB的1GB Linux内核空间?全部内容,希望文章能够帮你解决内存管理 – 哪些数据结构使用128MB的1GB Linux内核空间?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1049938.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存