Linux的Virtual Memory Areas(VMA)

发布于 2022-10-15 05:28:48 字数 104 浏览 24 评论 0

看了 Linux的Virtual Memory Areas(VMA)的介绍后,仍然存在一个疑问。用户的进程空间的内存到实际的物理内存的分配是通过什么机制实现的,具体是有哪些系统调用完成的,会用到slab层吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

爱你不解释 2022-10-22 05:28:48

最底层是Buddy System,Slab是建立在Buddy System之上的。进程的虚拟地址也是一种资源,VMA就是用来描述这种资源的。至于虚拟地址下面有没有物理内存就看情况了。有时分配了虚拟地址就向Buddy System要内存并且在页表将两者联系上,有时则只分区虚拟地址段,等到访问这段空间时再分配内存。可以认为分配虚拟地址段和分配物理内存是独立的。

叶落知秋 2022-10-22 05:28:48

你的意思是如果需要分配物理地址的情况下,会使用Buddy System来完成。是吗?
回复 2# tempname2

蛮可爱 2022-10-22 05:28:48

回复 3# gulang2004xy

情况很多,不敢说绝对,一般要page frame就是向Buddy System索取。

冰魂雪魄 2022-10-22 05:28:48

用户空间申请内存的主要通过几个系统调用, execute,fork,brk,等系统调用可能会引起内核创建vma,然后申请内存页,并把对应关系放到页目录,页表中去。

晨光如昨 2022-10-22 05:28:48

不会用到slab

百合的盛世恋 2022-10-22 05:28:48

其实,很多时候我们都是太多关注内核空间与用户空间的概念定义了。本质上他们都是地址空间,甚至在从内核太看来他们是“一样的”。不然大名鼎鼎的copy_from_user实现怎么会就是简简单单的循环拷贝+fix area。只不过用户态是被多个进程复用的,所以页表处理和地址空间分配上有所不同。具体说就是用户态页表每个进程有一个,并且分配地址空间是以VMA大块大块的分配。
不知道偶的理解是否有偏差?CU 内存大牛们

少女七分熟 2022-10-22 05:28:48

赞一个

你是我的挚爱i 2022-10-22 05:28:48

回复 7# 懂医术的厨师
不想懂医术的厨师,不是好程序员。呵呵。好像用户空间的页表在映射内核的部分都是一样的。

飘然心甜 2022-10-22 05:28:48

本帖最后由 omycle 于 2011-08-29 20:19 编辑

回复 1# gulang2004xy

   
看了 Linux的Virtual Memory Areas(VMA)的介绍后,仍然存在一个疑问。用户的进程空间的内存到实际的物理内存的分配是通过什么机制实现的,具体是有哪些系统调用完成的,会用到slab层吗?


有啊,比如brk.

分配大数据是通过伙伴算法云云
分配小数据结构对象,是通过slab. 当然slab是以伙伴算法为基础的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文