资源描述:
《第四章 内存管理ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、内存管理Linux的内存管理进程的用户空间管理请页机制物理内存的分配与回收交换机制内存管理示例扩大了的记忆—虚拟内存虚拟内存的基本思想:在计算机中运行的程序,其代码、数据和堆栈的总量可以超过实际内存的大小,操作系统只将当前使用的程序块保留在内存中,其余的程序块则保留在磁盘上。必要时,操作系统负责在磁盘和内存之间交换程序块。虚地址到实地址转换虚拟地址虚拟内存、内核空间和用户空间内核空间(1GB)进程1的用户空间(3GB)进程2的用户空间(3GB)进程n的用户空间(3GB)虚拟地址空间虚拟内存、内核空间和用户空间虚拟内存-共4G字节,分为内核空
2、间(最高的1G字节)和用户空间(较低的3G字节)两部分,每个进程最大拥有3G字节私有虚存空间地址转换-通过页表把虚存空间的一个地址转换为物理空间中的实际地址。内核空间到物理内存的映射内核空间由所有进程共享,其中存放的是内核代码和数据,即“内核映象”进程的用户空间中存放的是用户程序的代码和数据内核空间映射到物理内存总是从最低地址(0x00000000)开始,使之在内核空间与物理内存之间建立简单的线性映射关系。内核空间到物理内存的映射03G4G0X虚拟地址空间物理内存图4.1内核的虚拟地址空间到物理地址空间的映射虚拟内存实现机制Linux虚拟内存
3、的实现需要多种机制的支持地址映射机制请页机制内存分配和回收机制交换机制缓存和刷新机制虚拟内存实现机制及之间的关系地址映射虚拟内存实现机制及之间的关系进程的用户空间管理每个进程经编译、链接后形成的二进制映像文件有一个代码段和数据段进程运行时须有独占的堆栈空间堆栈段空洞数据段代码段进程的用户空间(3G)进程用户空间Linux把进程的用户空间划分为一个个区间(虚拟区),便于管理一个进程的用户地址空间主要由mm_struct结构和vm_area_structs结构来描述。mm_struct结构它对进程整个用户空间进行描述vm_area_structs
4、结构对用户空间中各个区间(简称虚存区)进行描述vm_operation结构描述了在这些区上的操作mm_struct结构structmm_struct{atomic_tcount;pgd_t*pgd;intmap_count;structsemaphoremmap_sem;unsignedlongstart_code,end_code,start_data,end_data;unsignedlongstart_brk,brk,start_stack;unsignedlongarg_start,arg_end,env_start,env_end;
5、unsignedlongrss,total_vm,locked_vm;unsignedlongdef_flags;structvm_area_struct*mmap,*mmap_avl,*mmap_cache;unsignedlongswap_cnt;unsignedlongswap_address;};count对mm_struct结构的引用进行计数。为了在Linux中实现线程,内核调用clone派生一个线程,线程和调用进程共享用户空间,即mm_struct结构,派生后系统会累加mm_struct中的引用计数。pgd进程的页目录基地址,当调
6、度程序调度一个进程运行时,就将这个地址转成物理地址,并写入控制寄存器(CR3)map_count在进程的整个用户空间中虚存区的个数semaphore对mm_struct结构进行串行访问所使用的信号量Start_code,end_code,start_data,end_data进程的代码段和数据段的起始地址和终止地址start_brk,brk,start_stack;每个进程都有一个特殊的地址区间,这个区间就是所谓的堆,也就是前面图中的空洞。前两个域分别描述堆的起始地址和终止的地址,最后一个域描述堆栈段的起始地址。arg_start,arg_e
7、nd,env_start,env_end命令行参数所在的堆栈部分的起始地址和终止地址;环境串所在的堆栈部分的起始地址和终止地址rss,total_vm,locked_vm进程贮留在物理内存中的页面数,进程所需的总页数,被锁定在物理内存中的页数。mmapvm_area_struct虚存区结构形成一个单链表,其基址由小到大排列mmap_avlvm_area_struct虚存区结构形成一个颗AVL平衡树mmap_cache最近一次用到的虚存区很可能下一次还要用到,因此,把最近用到的虚存区结构放入高速缓存,这个虚存区就由mmap_cache指向。VM
8、_AREA_STRUCT结构structvm_area_struct{structmm_struct*vm_mm;unsignedlongvm_start;unsi