第四章-内存管理-《Linux操作系统原理与应用》电子教案课件.ppt
《第四章-内存管理-《Linux操作系统原理与应用》电子教案课件.ppt》由会员分享,可在线阅读,更多相关《第四章-内存管理-《Linux操作系统原理与应用》电子教案课件.ppt(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章 内存管理Linux的内存管理进程的用户空间管理请页机制物理内存的分配与回收交换机制内存管理示例内存的层次结构内存的层次结构v虚拟内存的虚拟内存的基本思想基本思想:在计算机中运行:在计算机中运行的程序,其代码、数据和堆栈的总量可的程序,其代码、数据和堆栈的总量可以超过实际内存的大小,操作系统只将以超过实际内存的大小,操作系统只将当前使用的程序块保留在内存中,其余当前使用的程序块保留在内存中,其余的程序块则保留在磁盘上。必要时,操的程序块则保留在磁盘上。必要时,操作系统负责在磁盘和内存之间交换程序作系统负责在磁盘和内存之间交换程序块。块。扩大了的记忆虚拟内存扩大了的记忆虚拟内存虚地址到实地
2、址转换虚地址到实地址转换虚拟地址虚拟地址v虚拟内存共4G字节,分为内核空间(最高的1G字节)和用户空间(较低的3G字节)两部分,每个进程最大拥有3G字节私有虚存空间v地址转换通过页表把虚存空间的一个地址转换为物理空间中的实际地址。虚拟内存、内核空间和用户空间虚拟内存、内核空间和用户空间v内核空间由所有进程共享,其中存放的是内核代码和数据,即“内核映象”v进程的用户空间中存放的是用户程序的代码和数据v内核空间映射到物理内存总是从最低地址(0 x00000000)开始,使之在内核空间与物理内存之间建立简单的线性映射关系。内核空间到物理内存的映射内核空间到物理内存的映射03G4G0X虚拟地址空间虚拟
3、地址空间物理内存物理内存图图4.1内核的虚拟地址空间到物理地址空间的映射内核的虚拟地址空间到物理地址空间的映射内核空间到物理内存的映射内核空间到物理内存的映射地址映射图4.2虚拟内存实现机制及之间的关系虚拟内存实现机制及之间的关系虚拟内存实现机制及之间的关系每个进程经编译、链接后形成的二进制映像文件有一个代码段和数据段进程运行时须有独占的堆栈空间进程的用户空间管理进程的用户空间管理堆栈段空洞数据段代码段进程的用户空间(3G)struct mm_struct struct mm_struct atomic_t count;atomic_t count;pgd_t*pgd;pgd_t*pgd;in
4、t map_count;int map_count;struct semaphore mmap_sem;struct semaphore mmap_sem;unsigned long start_code,end_code,start_data,end_data;unsigned long start_code,end_code,start_data,end_data;unsigned long start_brk,brk,start_stack;unsigned long start_brk,brk,start_stack;unsigned long arg_start,arg_end,en
5、v_start,env_end;unsigned long arg_start,arg_end,env_start,env_end;unsigned long rss,total_vm,locked_vm;unsigned long rss,total_vm,locked_vm;unsigned long def_flags;unsigned long def_flags;struct vm_area_struct*mmap,*mmap_avl,*mmap_cache;struct vm_area_struct*mmap,*mmap_avl,*mmap_cache;unsigned long
6、s;unsigned long s;unsigned long s;unsigned long s;mm_struct mm_struct 结构结构struct vm_area_struct struct vm_area_struct struct mm_struct*vm_mm;struct mm_struct*vm_mm;unsigned long vm_start;unsigned long vm_start;unsigned long vm_end;unsigned long vm_end;pgprot_t vm_page_prot;pgprot_t vm_page_prot;unsi
7、gned short vm_flags;unsigned short vm_flags;struct vm_area_struct*vm_next;struct vm_area_struct*vm_next;short vm_avl_height;short vm_avl_height;struct vm_area_struct*vm_avl_left,*vm_avl_right;struct vm_area_struct*vm_avl_left,*vm_avl_right;struct vm_operations_struct*vm_ops;struct vm_operations_stru
8、ct*vm_ops;struct struct vm_area_struct vm_area_struct*vm_next_share,*vm_next_share,*vm_pprev_share;*vm_pprev_share;unsigned long vm_offset;unsigned long vm_offset;struct file*vm_file;struct file*vm_file;unsigned long vm_pte;unsigned long vm_pte;VM_AREA_STRUCT VM_AREA_STRUCT 结构结构域名说 明Vm_mm指向虚存区所在的mm_
9、struct结构的指针。Vm_start,vm_end虚存区的起始地址和终止地址。Vm_page_prot虚存区的保护权限。Vm_flags虚存区的标志。Vm_next构成线性链表的指针,按虚存区基址从小到大排列。vm_avl_height,vm_avl_left,vm_avl_right这3个域在一起构成AVL树,其中vm_avl_height是该节点距根节点的高度,vm_avl_left和vm_avl_right分别是该节点的左右两个子树。Vm_ops对虚存区进行操作的函数。这些给出了可以对虚存区中的页所进行的操作。相关数据结构之间相关数据结构之间的关系示意图的关系示意图fork()系统调
10、用在创建新进程时也为该进程创建完整的用户空间具体而言,是通过拷贝或共享父进程的用户空间来实现的,即内核调用copy_mm()函数,为新进程建立所有页表和mm_struct结构Linux利用“写时复制”技术来快速创建进程创建进程用户空间创建进程用户空间执行一个进程时,其可执行映像必须装入进程的用户地址空间虚存映射:即把文件从磁盘映射到进程的用户空间,对文件的访问转化为对虚存区的访问有共享的、私有的虚存映射和匿名映射当可执行映像映射到进程的用户空间时,将产生一组 vm_area_struct 结构来描述各虚拟区间的起始点和终止点虚存映射虚存映射例:exam.cintmain()printf(“vi
11、rtualareatest!”);进程的虚存区举例进程的虚存区举例地址范围许可权偏移量 所映射的文件08040 r-xp/home/test/exam08049000-0804a000rw-p/home/test/exam 40000r-xp/lib/ld-2.3.2.so40010rw-p/lib/ld-2.3.2.so40010rw-p匿名4002ar-xp/lib/libc-2.3.2.so40159000-4015e000rw-p0012f000/lib/libc-2.3.2.so4015erw-p匿名bfffe000-c0000000 rwxpfffff000匿名exam进程的进程的
12、虚存区虚存区与用户空间相关的主要系统调用与用户空间相关的主要系统调用系统调用描述fork()创建具有新的用户空间的进程,用户空间中的所有页被标记为“写时复制”,且由父子进程共享,当其中的一个进程所访问的页不在内存时,这个页就被复制一份。mmap()在进程的用户空间内创建一个新的虚存区。munmap()销毁一个完整的虚存区或其中的一部分,如果要取消的虚存区位于某个虚存区的中间,则这个虚存区被划分为两个虚存区。exec()装入新的可执行文件以代替当前用户空间。Exit()销毁进程的用户空间及其所有的虚存区。缺页异常处理程序缺页异常处理程序 这个虚地址属于进程的用户空间?访问类型与这个虚存区的访问权
13、匹配?异常发生在 用 户 态?合法访问:分配一个新的页面非法访问:发送一个SIGSEBV信号内核错误:杀死进程否是是是否否总总体体方方案案地址在中断中或内核线程中地址在虚存区中写访问区是可写的写时复制地址可能属于用户态栈页存在区是可读或可执行的在用户态地址是一个错误的系统调用参数请求调页发送SIGSEGV信号杀死进程通 常 情 况 下 发 送SIGSEGV信号缺页异常处理流程图缺页异常处理流程图否否否否否否否否否是是是是是是是是是请求调页:把页面的分配推迟到进程要访问的页不在物理内存时为止,由此引起一个缺页异常引入原因:进程开始运行时并不访问其地址空间中的全部地址程序的局部性原理保证请求调页从
14、总体上使系统有更大的吞吐量。请求调页动态内存分配技术请求调页动态内存分配技术在Linux中,CPU所访问的地址是虚拟地址空间的虚地址;管理内存页面时,先在虚存空间中分配一个虚存区间,然后才根据需要为此区间分配相应的物理页面并建立起映射Linux采用著名的伙伴(Buddy)算法来解决外碎片问题物理内存的分配与回收物理内存的分配与回收保留内核映象动态内存00 x100000start_memend_memLinux的伙伴算法把所有的空闲页面分为的伙伴算法把所有的空闲页面分为10个块链表,每个链表中的一个块含有个块链表,每个链表中的一个块含有2的幂次个页面(叫做的幂次个页面(叫做“页块页块”或简称或
15、简称“块块”)大小相同、物理地址连续的两个大小相同、物理地址连续的两个页块页块被称被称为为“伙伴伙伴”工作原理:首先在大小满足要求的块链表工作原理:首先在大小满足要求的块链表中查找是否有空闲块,若有则直接分配,中查找是否有空闲块,若有则直接分配,否则在更大的块中查找。其逆过程就是块否则在更大的块中查找。其逆过程就是块的释放,此时会把满足伙伴关系的块合并的释放,此时会把满足伙伴关系的块合并页面分配与回收算法伙伴算法页面分配与回收算法伙伴算法1)如果如果该链该链表中有表中有满满足要求的足要求的页块页块,则则:将将其其从从链链表表中中摘摘下下;将将free_areafree_area数数组组的的位位
16、图图中中该该页页块块所所对对应应的的位位取取反反,表表示示页页块块已已用用;修修改改全全局局变变量量nr_free_pagesnr_free_pages(减减去去分分配配出出去去的的页页数数);根根据据该页块该页块在在mem_mapmem_map数数组组中的位置,算出其起始物理地址,返回。中的位置,算出其起始物理地址,返回。2)2)如如果果该该链链表表中中没没有有满满足足要要求求的的页页块块,则则在在free_areafree_area数数组组中中顺顺序序向向上上查查找找。其其结结果有二:果有二:a)a)整整个个free_areafree_area数数组组中中都都没没有有满满足足要要求求的的页
17、页块块,此此次次无无法法分分配配,返返回。回。b)b)找到一个找到一个满满足要求的足要求的页块页块,则则:将将其其从从链链表表中中摘摘下下;将将free_areafree_area数数组组的的位位图图中中该该页页块块所所对对应应的的位位取取反反,表表示示页页块块已已用用;修修改改全全局局变变量量nr_free_pagesnr_free_pages(减减去去分分配配出出去去的的页页数数);因因为为页页块块比比申申请请的的页页块块要要大大,所所以以要要将将它它分分成成适适当当大大小小的的块块。因因为为所所有有的的页页块块都都由由2 2的的幂幂次次的的页页数数组组成成,所所以以这这个个分分割割的的过
18、过程程比比较较简简单单,只只需要将它平分就可以:需要将它平分就可以:I.I.将将其其平平分分为为两两个个伙伙伴伴,将将小小伙伙伴伴加加入入free_areafree_area数数组组中中相相应应的的链链表,修改位表,修改位图图中相中相应应的位;的位;II.II.如果大伙伴仍比申如果大伙伴仍比申请请的的页块页块大,大,则转则转I I,继续继续划分;划分;III.III.大大伙伙伴伴的的大大小小正正是是所所要要的的大大小小,修修改改位位图图中中相相应应的的位位,根根据据其其在在mem_mapmem_map数组中的位置,算出它的起始物理地址,返回。数组中的位置,算出它的起始物理地址,返回。函数函数f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux操作系统原理与应用 第四 内存 管理 Linux 操作系统 原理 应用 电子 教案 课件
限制150内