虚拟内存结构描述剖析

上传人:我** 文档编号:114809349 上传时间:2019-11-12 格式:DOC 页数:7 大小:220.54KB
返回 下载 相关 举报
虚拟内存结构描述剖析_第1页
第1页 / 共7页
虚拟内存结构描述剖析_第2页
第2页 / 共7页
虚拟内存结构描述剖析_第3页
第3页 / 共7页
虚拟内存结构描述剖析_第4页
第4页 / 共7页
虚拟内存结构描述剖析_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《虚拟内存结构描述剖析》由会员分享,可在线阅读,更多相关《虚拟内存结构描述剖析(7页珍藏版)》请在金锄头文库上搜索。

1、操作系统结构虚拟内存管理结构描述李 煜摘要:本文。本文通过介绍虚拟内存的概念,主要数据结构,Linux虚拟内存重建和拷贝等过程进行了详细的介绍和总结概括。首先介绍了Linux虚拟内存主要的数据结构如虚拟内存区域vm_area_struct,虚拟内存管理mm_struct等。然后对Linux虚拟内存重建和拷贝的过程进行了详细的介绍。目地是为了让读者了解Linux虚拟内存的重建过程,虚拟内存的拷贝以及重要数据结构有一个初步的了解。关 键 词:虚拟内存;Linux;数据结构1 引言我们知道程序代码和数据必须驻留在内存中才能得以运行,然而系统内存数量很有限,往往不能容纳一个完整程序的所有代码和数据,更

2、何况在多任务系统中,可能需要同时打开子处理程序,画图程序,浏览器等很多任务,想让内存驻留所有这些程序显然不太可能。因此首先能想到的就是将程序分割成小份,只让当前系统运行它所有需要的那部分留在内存,其它部分都留在硬盘。当系统处理完当前任务片段后,再从外存中调入下一个待运行的任务片段。的确,老式系统就是这样处理大任务的,而且这个工作是由程序员自行完成。但是随着程序语言越来越高级,程序员对系统体系的依赖程度降低了,很少有程序员能非常清楚的驾驭系统体系,因此放手让程序员负责将程序片段化和按需调入轻则降低效率,重则使得机器崩溃。系统必须采取一种能按需分配而不需要程序员干预的新技术。虚拟内存(之所以称为虚

3、拟内存,是和系统中的逻辑内存和物理内存相对而言的,逻辑内存是站在进程角度看到的内存,因此是程序员关心的内容。而物理内存是站在处理器角度看到的内存,由操作系统负责管理。虚拟内存可以说是映射到这两种不同视角内存的一个技术手段。)技术就是一种由操作系统接管的按需动态内存分配的方法,它允许程序不知不觉中使用大于实际物理空间大小的存储空间(其实是将程序需要的存储空间以页的形式分散存储在物理内存和磁盘上),所以说虚拟内存彻底解放了程序员,从此程序员不用过分关心程序的大小和载入,可以自由编写程序了,繁琐的事情都交给操作系统去做吧。 2 虚拟内存的概念极其优缺点2.1 虚拟内存的概念在分页系统中,由于在程序地

4、址空间和物理地址空间引入了页表,隔离了两个地址空间,一个程序可以在物理内存中不连续。操作系统负责在内外存之间交换页面,造成每个进程都认为自己是系统中唯一一个程序,独占系统全部地址空间的假象。虚拟地址是一块地址空间,它的特点主要是:(1)从0开始编址并且连续(2)不受系统物理内存大小限制(3)在功能上等价于物理内存,但实际上并不存在(4)虚拟地址空间是相互隔离的2.2 虚拟内存的优缺点在分页系统中,由Linux虚拟内存的优点主要有以下几个:(1)大地址空间:运行在I386平台的每个Linux进程,都可以使用4GB的地址空间。(2)进程保护:系统的每一个进程都有自己的虚拟地址空间,不同进程的虚拟空

5、间所对应的物理地址是完全隔离的。(3)内存映射:利用内存映射可以将数据文件映射到虚拟地址空间,从而使得对文件的访问和对内存单元的访问一样。(4)虚存共享:多个进程的虚拟地址映射到同一个物理地址空间,则可以在不同的进程之间实现虚存共享。(5)多程序同时驻留内存:由于进程只有一部分驻留在内存,因此内存中可以驻留多个进程,提高cpu效率。(6)允许运行重定位程序:程序可以放在物理内存的任意位置,并且在执行过程中也可以移动。(7)代价小:换入换出单个页面的代价比交换这个进程小。但是,虚拟内存也是有代价的,虚拟内存管理需要建立很多的数据结构,它们要占额外的内存;虚拟地址到物理地址的转化增加了每条指令的执

6、行时间;页面的换入换出也增加了磁盘的I/O操作。3 虚拟内存管理结构3.1 虚拟内存管理实现思路在分页系统中,由Linux虚拟内存的优点主要有以下几个:(1)大地址空间:运行在I386平台的每个Linux进程,都可以使用4虚拟内个管理的基本思路是虚拟或者制造假象,它使得每个进程都认为系统中有足够大的内存并且内存中只有自己一个进程,实现的基本思路是如下,具体如图1所示:(1)将系统的物理地址和进程的虚拟地址分成固定大小的页,为每个进程重建一个页表,从而实现两个地址空间的隔离。(2)由虚拟内存管理器管理和维护进程的页表,建立虚拟内存页和物理页的对应关系,利用硬件实现地址的转换。(3)由内存管理器负

7、责内外存之间的页面交换,将进程使用的虚拟页面换入物理内存,不用的换出内存,提高物理内存的使用率,造成几乎无限大小的虚拟内存的假象。图1. Linux虚拟内存管理器的实现思路3.2 页表的介绍在分页系页表是虚拟内存管理中最基础的数据结构,在Intel的32位处理器中分为两级,分别称为页目录和页表。其特点主要有:(1)页目录和页表只能由虚拟内存管理,对进程是透明的。(2)虚拟页在内存时,页表项记录这对应关系,虚拟页不在内存时,虚拟项记录这页面在外存的位置。(3)页表项和页表都是动态重建和动态删除的。(4)虚拟页和物理页的映射关系不要求连续,也不要求有序,多个虚拟页可以对应一个物理页。它的每一个元素

8、称为一个页表项(PTE),在Intel系统上,页表项长度为32位,4个字节,包含以下信息:(1) 有效标志:表示页表本项是否有效(2)映射关系:本页表项所对应的物理页编号(3)访问控制信息:描述本页是否可写?是否包含执行代码。3.3 虚拟内存区域的代码实现的每个进程都有自己的页目录和页表,通过页目录和页表,每个进程有拥有4GB的虚拟地址空间。进程的所有信息比如代码、数据、堆栈、共享区等。Linux使用结构vm_area_struct(vma)结构来描述一个虚拟内存区域,其定义如下,具体如图2所示:struct vm_area_struct struct mm_struct * vm_mm; /

9、* 指向虚拟区所在的mm_struct结构的指针*/ unsigned long vm_start; /* 在vm_mm中的起始地址*/ unsigned long vm_end; /*在vm_mm中的结束地址 */ struct vm_area_struct *vm_next; pgprot_t vm_page_prot; /* 对这个虚拟区间的存取保护权限(只读、只写、执行) */ unsigned long vm_flags; /* 虚拟区间的标志.(读、写、共享) */ struct rb_node_t vm_rb; struct vm_area_struct *vm_next_sha

10、re;struct vm_area_struct *vm_pprev_share;struct vm_operations_struct * vm_ops; /*对这个区间进行操作的函数 */ unsigned long vm_pgoff; /*映射文件中的偏移量 */struct file * vm_file; /*指向映射文件的文件对象 */unsigned long vm_raend; /* 预读信息 */void * vm_private_data; /* 指向内存区的私有数据 */.图2. Linux虚拟内存管理器的实现思路linux利用了面向对象的思想,把一个虚存区看成一个对象,用

11、vm_area_struct(vma)描述对象属性,其中的vm_operation描述了对象的操作,定义如下:struct vm_operations_struct void (*open)(struct vm_area_struct * area); void (*close)(struct vm_area_struct * area); struct page * (*nopage)(struct vm_area_struct * area, unsigned long address, int unused); void (*unmap)(struct vm_area_struct *

12、area,unsigned long,size_t) int(*swapout)(struct vm_area_struct * area,struct page*); pte_t(*swapin)(struct vm_area_struct * area,unsigned long,unsigned long);3.4 虚拟内存区域虚拟内存管理器还需要一个地方来记录进程中与内存有关的信息,如进程页目录的位置,进程的代码、数据、堆栈等在虚拟空间的位置进程驻留在物理内存中的页面的个数,为此,Linux为每个进程重建了一个内存管理结构mm_struct,来管理进程中与虚拟内存相关的信息。该结构定义

13、如下:struct mm_struct struct vm_area_struct * mmap; /*指向虚拟区间(VMA)链表头 */ b_root_t mm_rb; *指向红黑树的根*/struct vm_area_struct * mmap_cache; /*指向最近找到的虚拟区间*/ pgd_t * pgd; *进程页目录基地址*/atomic_t mm_users; /*用户空间中的有多少用户*/ atomic_t mm_count; /*对struct mm_struct引用的计数*/ int map_count; /*虚拟区间的个数*/ struct rw_semaphore

14、mmap_sem;/*线性区的读写信号量*/spinlock_t page_table_lock; /*线性区的自旋锁和页表的自旋锁 */ struct list_head mmlist; /*所有活动(active)mm的链表 */unsigned long start_code, end_code, start_data, end_data; unsigned long start_brk, brk, start_stack; /* 堆的相关信息*/ unsigned long arg_start, arg_end, env_start, env_end; unsigned long rs

15、s, total_vm, locked_vm; unsigned long def_flags;/* 线性区默认的访问标志*/进程的task_struct结构中包含一个mm域,指向mm_struct。进程的mm_struct包含进程的可执行映像信息和进程页目录指针PGD等。该结构还包含指向vm_area_struct结构的指针,每一个vm_area_struct代表进程一个虚拟地址空间,如图3所示:图3. 相关数据结构之间的关系3.5 虚拟内存区域在进程的生命周期中,它的虚拟地址空间会不断变化,过程如下:(1)在进程重建时,从父进程拷贝虚拟地址空间。在拷贝的过程中,系统根据父进程虚拟地址空间的定义,复制一套内存管理结构(mm_struct,vm_area_struct

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号