《2022年Linux下的存储管理 .pdf》由会员分享,可在线阅读,更多相关《2022年Linux下的存储管理 .pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、6Linux 下的存储管理 杨 伟,刘 强,顾 新 (西安电子科技大学,陕西西安 710071 )摘 要内存管理单元作为操作系统的核心部分,在整个系统的运行过程中发挥着举足轻重的作用。Linux在其发展过程中不断的在完善和优化内存管理单元的功能和性能。本文总结了Linux2.4内核中存储管理子系统的总体框架,重点介绍存储管理子系统中各个模块的基本特点以及它们之间的联系,深入分析了内存管理的实现技术,对 Linux2.4内核中存储管理中的重要的算法、数据结构做了相应的分析描述。 关键字Linux ;存储管理;虚拟内存 中图分类号 TP3151 引 言 Linux 是一个遵循POSIX (Port
2、able Operating System Interface) 标准的操作系统, 它继承了UNIX系统优秀的设计思想,拥有简练、容错强、高效而且稳定的内核。此外Linux 还具备其他操作系统所不能比拟的优点。:完全免费;:内核源代码完全公开。Linux2.4 内核拥有一个功能完备的内存管理子系统 ,它增加了对NUMA (非均匀存储结构)体系结构的支持并且使用了基于区(ZONE) 的物理内存管理方法 ,从而保持了物理上连续分布、而逻辑上统一的内存模式和传统的共享内存编程模型,使得系统的性能得以极大的扩展。这样Linux 不仅能够满足传统的桌面应用,而且还能满足高端服务器市场的需要。 目前,Li
3、nux 不仅在 Internet 服务器上表现出色,而且还可以胜任大型数据库系统的服务器。2 Linux存储管理的基本框架 Linux内核采用虚拟页式存储管理,采用三次映射机制实现从线性地址到物理地址的映射。具体的映射方式如图1 所示。其中 PGD 为页面目录, PMD 为中间目录, PT为页面表。具体的映射过程为:( 1)从 CR3 寄存器中找到PGD 基地址;( 2)以线性地址的最高位段为下标,在PGD中找到指向PMD 的指针;图 1 三层映射示意图 (3)以线性地址的次位段为下标,在PMD 中找到指向 PT 的指针;(4)同理,在PT 中找到指向页面的指针;(5) 线性地址的最后位段,
4、为在此页中的偏移量,这样就完成了从线性地址到物理地址的映射过程。32 位的微机平台如Intel 的 X86 采用段页式的两层映射机制,而64 位的微处理器采用三级分页。对于传统的32 位平台, Linux 采用让 PMD( 中间目录)全 0 来消除中间目录域,这样就把 Linux 逻辑上的三层映射模型落实到X86 结构物理上的二层映射,从而保证了Linux 对多种硬件平台的支持。3 Linux对虚拟内存的管理 虚拟内存不仅可以解决内存容量的问题,还可以提供以下附加的功能:大地址空间;进程保护;内存映射;灵活的物理内存分配;共享虚拟内存。Linux 对虚拟内存的管理以进程为基础。32 位的 线
5、性 地 址 映 射 的4GB的 虚 拟 空 间 中 , 从0XC0000000 到 0XFFFFFFFF 的 1GB 空间为所用进程共享的内核空间, 每个进程都有自己的3GB 用户PGDPMD PT 物理页面PGD 基地址PGD 表项下标PMD表 项 下位移PT 表项下标电子科技 2005 年第 9 期(总第 192 期)收稿日期 :2005-04-04名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 4 页 - - - - - - - - - Linux 下的存储管理 电
6、子科技 /2005 年 9 月 15 日7空间。Linux的虚拟内存管理需要各种机制的支持,图 2 就给出了这几种机制之间的关系。首先内存管理程序通过映射机制把用户程序的逻辑地址映射到物理地址,在用户程序运行时时如果发现程序中要用的虚拟地址没有对应的物理地址,就发出请页要求:如果有空闲的内存可供分配,就请求分配内存,并把正在使用的物理页记录在页缓存中,如果没有足够的内存分配,就调用交换机制,腾出一部分内存。另外在地址映射中要通过TLB(翻译后援存储器)来寻找物理页,交换机制中要用到交换缓存,并且把物理页内容交换到交换文件中也要修改页表来映射文件地址。图 2 虚存实现机制之间的关系 一个进程的虚
7、拟地址映射靠3 个数据结构来描述: mm_struct、 vm_area_struct、 page。 其中 mm_struct结构用来描述一个进程的虚拟内存;vm_area_struct描述一个进程的虚拟地址区域,在这个区域中的所有页面具有相同的访问权限和一些属性;page 描述一个具体的物理页面。当进程通过系统调用动态分配内存时,Linux首先分配一个vm_area_struct 结构,并链接到进程的虚拟内存链表,当后续指令访问这一内存区域时,产生缺页异常。系统处理时,通过分析缺页原因、操作权限之后,如果页面在交换文件中,则进入 do_page_fault() 中恢复映射的代码,重新建立映射
8、关系。如果因为页面不再内存中,则Linux 会分配新的物理页,并建立映射关系。当物理内存出现不足时,就需要换出一些页面。 Linux 采用 LRU(Least Recently Used最近最少使用)页面置换算法选择需要从系统中换出的页面。系统中每个页面都有一个“ age ”属性,这个属性会在页面被访问的时候改变。Linux根据这个属性选择要回收的页面, 同时为了避免页面“ 抖动”(即刚释放的页面又被访问), 将页面的换出和内存页面的释放分两步来做,而在真正释放的时候仅仅只写回“ 脏”页面。这一任务由交换守护进程kswapd 完成。free_pages_high,free_pages_low
9、是衡量系统中现有空 闲 页 的 标 准 , 当 系 统 中 空 闲 页 的 数 量 少 于free_pages_high, 甚至 少 于 free_pages_low时 ,kswapd 进程会采用3种方法来减少系统正在使用的物理页的数量。调用shrink_mmap() 减少buffer cache和 page cache 的大小;调用shm_swap()将system V共享内存页交换到物理内存;调用swap_out()交换或丢弃页。图 3 给出了页面置换管理框图。其中代表:refill_inactive_scan() ,它的任务是扫描活跃页面队列,从中找到可以转入不活跃状态的页面;代表:pa
10、ge_launder()它把已经转入不活跃状态的“ 脏” 页面“ 洗净” ,使它们成为立即可以分配的页面;代表:reclaim_page()用于从页面管理区的不活跃净页面队列中回收页面。图 3 页面置换管理框图 kswapd 是被定期唤醒的, 首先检查内存中可供分配或周转的物理页面是否短缺,若需要回收页面,则按顺序循环检查缓冲区、共享内存、进程独占的内存,遇到满足条件的页面,即将它释放。如果已释放了足够的页面,kswapd 重新睡眠, 直到下一次被重新唤醒。4 Linux对物理内存的管理 Linux2.4 内核加入了对NUMA 的支持,如果系activeinactiv_dirtyinactiv
11、_clean free_listpage age0page_age=0page_age=0 地址映射缓存和刷新请求分页内存的分配和回收交换机制名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 4 页 - - - - - - - - - Linux 下的存储管理 IT Age/ Sep. 15, 2005 8统是 NUMA结构的处理机系统,则物理内存被划分为 3 个层次来管理:存储节点(Node) ,管理区(Zone) ,页面( Page) 。处理器的本地内存组成的区域叫做一
12、个节点(Node),它通过 pglist_data 数据结构来描述。各个节点的物理内存根据不同的作用又分 为ZONE_DMA、 ZONE_NORMAL、 ZONE_ HIGH ,ZONE_DMA面积小,且专供DMA 使用,ZONE_NORMAL则供大多数的程序使用,对于ZONE_HIGH 仅仅只有页面缓存以及用户进程能够使用该区域的空间。每个管理区对应一个free_area数组来组织空闲页面队列,该数组的每一项描述某一种页块的信息,第一个元素描述大小为1 页的内存块的信息, 第二个元素描述大小为2 页的内存块的信息,依此类推,所描述的页块大小以 2 的倍数增加。 free_area 数组的定义
13、如下:Typedef struct free_area_struct Struct list_head free_list; Unsigned int *map; free_area_t; list_head 是一个双向指针结构,在这里用于将物理页块结构mem_map_t 连结成一个双向链表,而 map 则是记录这种页块组分配情况的位图,例如,位图的第 N 位为 1, 表明第 N 个页块是空闲的。图 4 给出了空闲物理块组织结构的示意图。图 4 空闲区组织结构 页分配代码使用向量表free_area 来分配和回收物理页。系统初始化时,free_area 数组也被赋了初值。也就是说,系统中所有可
14、用的空闲物理页块都已经被加到了free_area 数组中。Linux 使用 Buddy 最先匹配算法来进行页面的分配和回收,并且必须按2 的幂次方进行分配。如图 4 所示, 比如要分配大小为2k的空闲块, 如果系统 中 有 足 够 的 空 闲 块 , 页 面 分 配 代 码 首 先 在free_area中查找相应大小的空闲块,如果找到则分配。如果没有则查找下一尺寸(2 倍于请求大小)的页面块,继续这一过程直到找到可以分配的页面,按要求分配之后,将剩余的空闲块仍然按照2的幂次方划分后链入适当的空闲块中。与分配算法相反,页面回收时总是试图将相邻的空闲页面组合成更大尺寸的空闲块。这里先给出“ 伙伴”
15、 要满足的3 个条件:两个块大小相同;两个块物理地址连续;两个块从同一大块中分离出来。在用户释放内存时,判断“ 伙伴 ” 是否是空闲块。若否,则只要将释放的空闲块简单的插入相应的free_area中。若是,则需要在free_area中删除其伙伴关系,然后再判断合并后的空闲块的伙伴关系,依次重复,直到归并后的空闲块没有伙伴关系或合并到最大块时将其插入到free_area 中。5 缓存和刷新机制 为了更好的发挥系统性能,Linux采用了一系列和内存管理相关的高速缓存机制: 缓冲区高速缓存:包含了从设备中读取的数据块或写入设备的数据块。缓冲区高速缓存由设备标示号和块索引,因此可以快速找到数据块。如果
16、数据可以在缓冲区中高速缓存中找到,则不需要从物理块设备上读取,从而加快了访问速度。 页高速缓存:这一高速缓存用来加速对磁盘上的映像和数据访问,它用来缓存某个文件的逻辑内容,并通过文件VFS 索引节点和偏移量访问。当页从磁盘读到物理内存时,就缓存在页高速缓存。 交换高速缓存:用于多个近程共享的页面被换出到交换区的情况。当页面交换到交换文件之后,如果有进程再次访问,它会被重新调入内存。6 小 结 Linux已成为世界上发展最快的操作系统。在5 4 0 5 4 3 2 1 0 mem_map_t mem_map_t mem_map_t free_areamap名师资料总结 - - -精品资料欢迎下载
17、 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 4 页 - - - - - - - - - Linux 下的存储管理 电子科技 /2005 年 9 月 15 日9Linux2.6 内核中,对存储管理子系统进行了一系列的改进,提高了系统的可扩展性,包含了对大型服务器如 NUMA 服务器和Intel 服务器的良好支持。此外, Linux2.6 还提供了对无MMU 的支持。可见Linux正在不断的加强对高端服务器领域以及嵌入式领域的支持。Linux在其发展过程中不断的在完善和优化内存管理单元的功能和性能。针对具体领域
18、,可以根据自己的需要定制Linux 内核。而内存管理单元作为 Linux 操作系统的核心部分,在整个系统的运行过程中发挥着举足轻重的作用。参考文献 1 毛德操 , 胡希明 . Linux内核源代码情景分析. 杭州 : 浙江大学出版社 , 2003. 2 陈莉君 . Linux 操作系统内核分析. 北京 :人民邮电出版社 , 2003. 3 彭晓鸣 , 王强 . Linux 核心源代码分析 . 北京 : 人民邮电出版社 , 2000. 作者简介 杨伟( 1983 )女,西安电子科技大学2003 级硕士生。研究方向:嵌入式系统应用。刘强( 1981 )男,西安电子科技大学2003 级硕士生。研究方
19、向:信息安全和媒体信息处理。顾新,男,副教授,研究方向:图形图像处理、嵌入式开发。A Memory Management Mechanism Based on Linux Yang Wei, Liu Qiang, Gu Xin (Xidian University, Xi an 710071, China) Abstract As the key part of the operating system, the memory management unit is playing a very important role when the operating system is runnin
20、g. The function and performance of memory management is constantly improved and optimized in the course of Linuxs development. This paper first summarizes the frame of the memory management subsystem in Linux2.4 kernel with emphasis on the basic characteristic of each module in the subsystem and the
21、ir relationship. It also analyzes the implementation technique of the memory management and the algorithm and data structure in the memory management in Linux2.4 kernel. Keywords Linux; memory management; virtual memory (上接第5 页) A Design of a 433MHZ Wireless Calling System by AT89C51 Peng Zelin, Che
22、n Jian (School of Telecommunications Engineering, Xidian University, Xi an 710071, China) Abstract Given that most current indoor calling systems are wire system, this paper introduces a design method of a wireless calling system which is made up of such chips as AT89C51,PT2272/2262 and ISD4003 with
23、 the circuit of system designing and software designing procedures given. With its simple structure and small size, this system can solve some problems existing chronically in the wire calling system. Keywords wireless calling; AT89C51; PT2262/2272recoder 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 4 页 - - - - - - - - -