随笔分类 -  深入Linux内核架构(进程虚拟内存)

摘要:图4-17给出了内核在处理缺页异常时,可能使用的各种代码路径的一个粗略的概观。 arch/x86/kernel/entry_32.S中的一个汇编例程用作缺页异常的入口,但其立即调用了arch/x86/mm/fault_32.c中的C例程do_page_fault。 图4-18给出了该例程的代码流程图 阅读全文
posted @ 2022-03-26 22:13 while(true);; 阅读(570) 评论(0) 推荐(0)
摘要:堆是一个连续的内存区域,在扩展时自下至上增长。的mm_struct结构,包含了堆在虚拟地址空间中的起始和当前结束地址(start_brk和brk)。 <mm_types.h> struct mm_struct { ... unsigned long start_brk, brk, start_sta 阅读全文
posted @ 2022-03-26 21:17 while(true);; 阅读(75) 评论(0) 推荐(0)
摘要:C标准库提供了mmap函数建立映射。在内核一端,提供了两个系统调用mmap和mmap2。两个函数的参数相同。 asmlinkage unsigned long sys_mmap{2}(unsigned long addr, unsigned long len,unsigned long prot, 阅读全文
posted @ 2022-03-26 00:12 while(true);; 阅读(356) 评论(0) 推荐(0)
摘要:内核提供了各种函数来操作进程的虚拟内存区域。在建立或删除映射时,创建和删除区域(以及查找用于新区域的适当的内存位置)是所需要的标准操作。如图4-10所示。 将虚拟地址关联到区域 通过虚拟地址,find_vma可以查找用户地址空间中结束地址在给定地址之后的第一个区域,即满足addr < vm_area 阅读全文
posted @ 2022-03-24 21:44 while(true);; 阅读(119) 评论(0) 推荐(0)
摘要:struct mm_struct提供了进程在内存中布局的所有必要信息。另外,它还包括下列成员,用于管理用户进程在虚拟地址空间中的所有内存区域。(其中管理虚拟地址空间所有内存区域) <mm_types.h> struct mm_struct { struct vm_area_struct * mmap 阅读全文
posted @ 2022-03-24 20:09 while(true);; 阅读(225) 评论(0) 推荐(0)
摘要:由于所有用户进程总的虚拟地址空间比可用的物理内存大得多,因此只有最常用的部分才与物理页帧关联。我们考察一下通过文本编辑器操作文件的情况。通常用户只关注文件结尾处,因此尽管整个文件都映射到内存中,实际上只使用了几页来存储文件末尾的数据。至于文件开始处的数据,内核只需要在地址空间保存相关信息,如数据在磁 阅读全文
posted @ 2022-03-24 18:00 while(true);; 阅读(168) 评论(0) 推荐(0)
摘要:虚拟地址空间中包含了若干区域。其分布方式是特定于体系结构的,但所有方法都有下列共同成分。  当前运行代码的二进制代码。该代码通常称之为text,所处的虚拟内存区域称之为text段。  程序使用的动态库的代码。  存储全局变量和动态产生的数据的堆。  用于保存局部变量和实现函数/过程调用的栈。 阅读全文
posted @ 2022-03-24 17:49 while(true);; 阅读(270) 评论(0) 推荐(0)