摘要: malloc是常用的用户态分配内存的接口,它会调用brk系统调用来请内存分配内存。下面看看该系统调用的实现。 插一句,每次调用malloc的时候未必都会调用brk去从kernel分配实际的内存,因为每次系统调用都是有开销的,为了避免频繁的陷入内核,malloc会多申请一部分内存当作内存池,之后要申请 阅读全文
posted @ 2024-06-11 16:31 半山随笔 阅读(57) 评论(0) 推荐(0) 编辑
摘要: 在fork进程的时候子进程会共享父进程的页表,但并没有分配新页。此时页表时只读的,如果父进程或者子进程写内存就会触发page fault,内核会重新分配内存更改页表,从此分道扬镳。因此写时复制包含两部分内容,第一是fork进程时复制页表并设置pte为只读,第二是写内存发生page fault。 先来 阅读全文
posted @ 2024-06-11 16:29 半山随笔 阅读(22) 评论(0) 推荐(0) 编辑
摘要: folio大概是5.16引入的,看起来像是page的封装,这里有一篇讲解folio很好的博客,论好名字的重要性: Linux内核page到folio的变迁-CSDN博客 struct folio { /* private: don't document the anon union */ union 阅读全文
posted @ 2024-06-11 14:07 半山随笔 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 分析一下缺页的处理。缺页的意思是在访问内存的时候该地址还没有建好页表,页面尚未分配,或者页面被swap出去或者没有权限。缺页是同步异常,用户态发生缺页异常会等待内核解决,当然这一切对于用户态都是透明的。缺页处理的核心函数是do_page_fault,这个函数是架构相关的所以这个函数分布在各个架构相关 阅读全文
posted @ 2024-06-11 13:47 半山随笔 阅读(48) 评论(0) 推荐(1) 编辑
摘要: 个人笔记,谨慎观看. 先看看vmalloc是怎么实现的。它能在非连续物理内存之上建立连续的虚拟内存映射。这里有一篇博客Linux内存管理 (6)vmalloc - ArnoldLu - 博客园 (cnblogs.com) 调用链vmalloc->_vmalloc_node->_vmalloc_nod 阅读全文
posted @ 2024-06-11 10:45 半山随笔 阅读(14) 评论(0) 推荐(0) 编辑