• 学前教育
  • 小学学习
  • 初中学习
  • 高中学习
  • 语文学习
  • 数学学习
  • 英语学习
  • 作文范文
  • 文科资料
  • 理科资料
  • 文档大全
  • 当前位置: 雅意学习网 > 初中学习 > 正文

    虚拟内存无分页文件 分页式虚拟内存管理及Linux实现

    时间:2019-01-21 03:28:32 来源:雅意学习网 本文已影响 雅意学习网手机站

      摘 要:本文分析了操作系统的页式虚拟存储管理机制,并结合当前支持多平台的Linux操作系统,根据其中虚拟存储的特点,详细分析了在Linux系统下的页式内存虚拟实现,重点指出了Linux所独特的具体实现过程,其中包括请页机制,物理内存分配与回收和交换机制等。
      关键词:内存;分页;虚拟;Linux
      
      现代大多数计算机操作系统由于内存空间的限制,都采用了虚拟内存空间管理的方法。虚拟存储管理器通过在辅存中建立一个虚拟地址空间,提供了一个物理存储器的抽象,并且在任意时刻“自动地”确定哪部分地址空间被加载在内存中,系统处理在内存和辅存之间地址空间块的来回传送,而无须人工干预。现在大部分的虚拟内存系统都采用了分页式虚拟内存管理。提高其管理性能可增强计算机的运行速率和工作效率。本文即介绍分页式虚拟内存管理的过程并结合Linux操作系统介绍其实现。
      一、实现过程
      1、地址转换。在分页式虚拟内存管理系统中,虚拟地址空间划分成许多页,页是一段连续的虚拟地址空间。相应的,物理内存空间也划分成多个页帧。页和页帧的大小是相同的,一个页可以映射到一个页帧。页表项(Page Table Entry,PTE)包含有与主存中的页相对应的帧号,对应的页是否在主存中的存在位(P),页的内容从上次装入至今是否改变的修改位(M)。图示如下:
      
      为了将逻辑地址转换成物理地址,系统中必须设置地址变换机构。但是现在计算机使用的虚拟地址一般是32位的,而且每次访问内存都要进行地址转换,这将严重影响系统效率。现实中使用TLB(Translation Lookaside Buffer)以及三级页表等解决上述问题。
      2、请求页面调度。 虚拟内存管理中,进程驻留在次级存储器。当访问到某页中的一个单元时才将该页取入内存。当一个进程第一次启动时,会出现大量的页错误,当越来越多的页被取入内存时,根据局部性原理,在一段时间后错误会逐渐平息下来,页错误的数目会降的很低。
      3、页面置换算法。在进程运行过程中,若其所要访问的页面不在内存而需把它们调入内存,但内存无空闲空间时,系统必须从内存中调出一页程序或数据,送磁盘的对换区中。页面置换算法(Page-Replacement Algorithms)确定将哪个页面调出。
      二、Linux中的分页虚拟内存管理具体实现
      Linux是多用户、多任务的操作系统,存储资源由多个进程有效共享。Linux内存管理的设计充分利用了计算机系统所提供的虚拟存储技术,真正实现了虚拟存储器管理。其虚拟地址空间大小为4GB,内核将这4G的空间分为两部分,高1G为内核空间,低3G为内核空间,即Linux可以拥有4GB的虚拟空间。
      1、Linux虚拟寻址
      Linux使用三级页表结构,且与平台无关,由页目录,页中间目录和页表构成。Linux中的虚拟地址可由4个域组成,其地址转换与前述类似。
      2、Linux请页机制。在Linux中,当一个进程执行时,如果CPU访问到一个有效的虚地址,但是这个地址对应的页不在内存,则CPU产生一个缺页异常,并将这个虚地址存入CR2存储器,然后调用缺页异常处理程序do_page_fault()。
      有两种方法装入所缺的页,取决于此页是否与磁盘文件建立了映射关系。可以调用do_no_page()函数检查虚存区描述符的nopage域来确定这一点。若nopage域不为空,说明映射了一个磁盘文件,nopage域指向执行从磁盘读入操作的函数;若nopage域为空,虚存区没有映射磁盘文件。因此,do_no_page()调用do_anonymous_page()函数,获得一个新的页面。
      3、物理内存分配与回收。在Linux中,虚存区间的分配在前,物理页面的分配在后。随着用户程序的执行和结束,系统不断地分配和释放物理页面,这导致在已分配的内存块中分散着许多小的空闲页面,即外碎片。外碎片无法满足大块连续页面的分配要求。为此,Linux采用伙伴(buddy)算法来解决外碎片问题。它把所有的空闲页面分为10个块组,每组中块的大小是2n个页面,且把同样大小的块形成一个链表。然后把大小相等且物理地址连续的两个块合并为一个块。
      4、交换机制。物理页面的换入换出主要过程如下,其中涉及Linux中的page结构和free_area结构。
      释放页面。如果一个页面变为空闲可用,就把该页面的page结构链入某个空闲队列free_area,同时页面的使用计数count减1。
      分配页面。调用在__get_free_page()从某个空闲队列分配内存页面,将页面的使用计数count置为1。
      活跃状态。已分配的页面处于活跃状态,该页面的数据结构page通过其队列头结构lru链入活跃页面队列active_list,并在进程地址空间中至少有一个页与该页面之间建立了映射关系。
      总结:操作系统中的虚拟存储技术是当今计算机领域的热点之一。它的优劣直接影响到计算机的性能的好坏。Linux是一个功能强大的实际的操作系统,每个技术环节都有其自身的特点,特别在系统架构方面有其独到的特点。在Linux虚拟内存方面的性能改善将成倍的提高计算机在实际应用中的价值和生产率。本文为虚拟内存的理论阐述,可作为相关方向的理论介绍材料,对提高计算机实际应用能力有一定帮助。
      作者单位:东北林业大学信息与计算机工程学院
      参考文献:
      [1]Abraham Baer Galvin等.郑扣银译.OPERATING SYSTEM CONCEPTS[M].北京:高等教育出版社.2005.
      [2]William Stallings,陈渝译.Operating Systems Internals and Design Principles[M].北京:电子工业出版社.2007.

    推荐访问:分页 内存管理 虚拟 Linux

    • 文档大全
    • 故事大全
    • 优美句子
    • 范文
    • 美文
    • 散文
    • 小说文章