您当前的位置:首页>论文资料>Linux虚拟内存管理

Linux虚拟内存管理

资料类别:论文资料

文档格式:PDF电子版

文件大小:89.45 KB

资料语言:中文

更新时间:2024-11-29 13:59:55



推荐标签:

内容简介

Linux虚拟内存管理 学术论坛
Linux虚拟内存管理
刘立圆于松波吕晓姆
(中国地质大学长城学院教师河北保定071000)
敬事批术
摘要:一般而言,计算机的内存容量是有限的,面某费进程运行所需的内存空间却有可能超过内存的总客量。这也就意味着存在这样的可能:运行某个进程,机器内存客纳不下该进程所有的代码,数据和堆栈,而是只能容纳其中的一部分。一个占用大量内存的进程在任意一段时间内需要用到的代码,数据等都是总数的一小部分,其余部分在相应时间段内对于维持进程的运行是不起作用的,于是,虚拟存储器技术应而生。
关键调:内存容量内存空间虚权内存进程虚拟存储器技术
中图分类号:TP393
文献标识码:A
文章编号:1007-9416(2011)05-0092-01
Linux能够使用文件系统中的一个常规文件或一个独立的分区作为交换空间。交换分区要快一些,但是很容易改变交换文件的大小。当你知道你需要多大的交换空间时,你应该使用交换分区,但是如果你不能确定的话,你可以首先使用一个交换文件,然后使用一阵子系统,你就可以感觉到要有多大的交换空间,此
时,当你能够确信它的大小时就创建一个交换分区。 1、虚拟存储器的思想
一个进程的代码,数据,堆栈的总容量可能超过可用物理内存的容量,操作系统负责吧当前用到的那些部分保留在内存中,面把其他部分保存在磁盘上,当需要用到不再内存的某一个部分时,由操作系统把那部分调入内存,同时把已经在内存中的但是暂时用不到的部分清除出去。这些操作对用户来说都是透明的。 2、Linux支持虚拟内存(virtualmemory)
虚拟内存是指使用磁盘当作RAM的扩展,这样可用的内存的大小就相应地增大了。内核会将暂时不用的内存块的内容写到硬盘上,这样一来,这块内存就可用于其它目了。当需要用到原始的内容时,它们被重新读人内存。这些操作对用户来说是完全透明的。当然,读写硬盘要比直接使用真实内存慢得多,所以程序就不会象一直在内存中运行的那样快。用作虚拟内存的硬盘部分被称为交换空间(swapspace)。
3、Linux虚拟内存的实现需要6种机制的支持
地址映射机制、内存分配回收机制、缓存和刷新机制、请求页机制、交换机制和内存共享机制。
存管理程序通过映射机制把用户程序的逻辑地址映射到物理地址。当用户程序运行时,如果发现程序中要用的虚地址没有对应的物理内存,就发出了请求贝要求。如果有空闲的内存可供分配,就请求分配内存(于是用到了内存的分配和回收),并把正在使用的物理页记录在缓存中(使用了绥存机制)。如果没有足够的内存可供分配,那么就调用交换机制:腾出一部分内存。另外,在地址映射中要通过TLB(翻译后援存储器)来寻找物理页;交换机制中也要用到交换缓存,并且把物理内容交换到交换文件中,也要修改页表来映射文件地址。
Linux总是假定处理器支持三级页表结构。这三届页表依次为页目录(PCD,PageDirectory),中间页目录(PMD,PageMiddle Directory)和页表(PTE,PageTable),每一级页表通过虚拟地址的一个域来访向。
4、在INTELX86TIXI的微机上
Linux的负表结构实际上为两级其中页表目录就是PGD,页表就是PTE,而PMD和PCD实际上是合二为一的。所有有关PMD的操 92
万方数据
作实际上是对PGD的操作。所以源代码中过的形如*_Pgd_*0和* pmd_*0的函数所实现的功能是一样的。有关的宏定义如下:
/include/asmi386/pgtable21level.h
(I) #ifndef _I386_PGTABLE_2LEVLE_H(2) #define_I386_PGTABLE_2LEVLE_H(3) /*
(4) * traditional i386 twolevel paging structure:/ (s)
(6) #define PGDIR_SHIFT 22(7)efine PTRS_PER_PCD 1024
从上面的宏定义可以清楚地看到i386体系结构中PMD实际上是不存在的,PMD(中间页目录)只含有一项(#definePTRS PER_PMD1),实际上这一级已经是退化了。页目录PGD和页表
PTE都含有1024个项。 5、按需调页分析
我们来看一下2.4.18版的linuxkemel按需调页的过程:
首先由缺页中断进人do_page_fault函数,该函数是缺页中断服务的人口雨数。该函数先查找出现却也的虚拟存储区的vm, area_struct结构,如果没有找到则说明进程访问了一个非法地址,系统将向进程发送出错信号。若地址是合法的,则接着检查缺页时的访问模式是否合法,若不合法系统将向进程发送存储访问出错的信息。通过上述两步检查之后,可以确定发生的却也情况是正常的,可以进人下一步处理。
/arch/386/mm/fault.c
147 asmlinkage void do_page_fault (struct pt_regs *regs,unsigned long error_code)
148
149 155 156
struct task_struct *sk; int write;
siginfo_t info,
do_page_faulto函数人口,asmlinkage指示编译器不要使用寄存器,而是使用堆栈来传递参数。Regs是struetpt_regs结构的指针,保存了在发生异常是的寄存器内容。Eror_code是一个32位长整形数据,但是只有最低3位有效,在发生异常时,有CPU的控制部分根据系统当前上下文的情况,生成此3位数据,压入堆栈。参考文献
[1]白洛,李俊查译.深入理解1inux虚拟内存管理.e]Gorman.京航空航天大学出版社。
[2]胡希明,毛德操.inkx内核源代码情景分析.江大学出版社[3]深入理解Tinux内核(第二版).国电力出版社
上一章:卷积LDPC码流水线译码器的改进方法 下一章:基于手机控制的智能加湿器设计

相关文章

Linux虚拟文件系统原理 并行计算的内存访问方法 分布式内存数据库的实现 基于CMP的内存数据库索引性能优化 建筑业虚拟企业集成管理 GA/T 1977-2022 法庭科学 计算机内存数据提取检验技术规范 YD/T 4073-2022 基于远程直接内存访问的高速以太存储网络交换设备测试方法 YD/T 4072-2022 基于远程直接内存访问的高速以太存储网络交换设备技术要求