【存储管理】物理页面的使用和周转

除CPU之外,物理存储页面对于linux来说是最基本,最重要的资源了。虚拟页面指的是在虚拟地址空间中一个固定大小,边界与页面大小4kb对齐及其内容,它最终要映射到某种物理存储介质上(物理页面)。根据具体的介质不同,物理页面可以在内存中,也可以在磁盘上,分别称为内存页面和盘上页面,此外,外部设备(如网络接口)用来存储一个页面内容的那部分介质也称为物理页面;每一个进程的虚存空间是很大的(用户空间有3GB),但是每一个进程实际上使用的空间要小的多,不会超过几个MB,但是当有成千个进程同时存在时,对存储空间的需求总量就很大了,这时,系统配备足够的内存就很难了。


(1)内存页面都对应一个page结构,并且有全局的mem_map指向,zone是将物理地址连续的许多页面组成的块;类似,交换设备(通常是磁盘或文件)的每一个物理页面也在内存中有结构swap_info_struct,用以描述和管理页面交换或设备;其中swap指向一个数组,数组中的每一个无符号数即代表盘上的一个物理页面,而数组的下标决定了该页面在盘上或文件中位置;pages决定数组的大小,表示页面交换设备或文件的大小;swap_map[0]所代表的页面不是用于页面交换的,它包含设备或文件的自身信息和哪些页面可供使用的位图;lowest_bit,highest_bit用于表示文件从什么地方开始到结束为止提供的页面;max表示设备或文件最大页面号,也就是设备和文件的大小。


(2)swap_on()指定将一个文件用于页面交换时,将该文件的swap_info_struct结构链入到队列swap_list_t中;pte_t将物理内存页面和虚存页面建立联系。盘山页面有一个swap_entry_t,7位type表示页面在哪一个文件或设备中,24位表示页面在一个磁盘设备或文件的位置,最低位永远为0。当页面在内存时,页面表中的相应项确定了地址的映射关系,页面不在内存时,则指明了物理页面的去向和所在。


(3)__get_swap_page()用来分配磁盘页面;__swap_free()用来释放一个磁盘页面,通过swap_info(type)得到具体文件的swap_info_struct,具体页面通过swap_map(offest)得到,然后判别。不是所有的页面都可以被交换出去,只有映射到用户空间的页面(普通的用户空间页面,含代码段,数据段,堆栈段;mmap映射的,进程间的共享内存区)才会被换出。内核所使用的内存页面也是动态分配的,但是常驻内存,不会被换出,包括使用外便无价值的(kmalloc,vmalloc,vma_area_struct,alloc_pages),使用完仍有价值的(inode结构,dentry结构,读写buffer等),释放之后要放入LRU队列中去。


(4)linux采用在系统相对空闲时,挑选一些页面预先腾出一些页面内存,从而保持一定的供应量;挑选的准则一般是LRU,但是还是避免不了“抖动”;linux为了进一步减小抖动,设置全局性的active_list,inactive_dirty_list两个队列,并且在每一个页面管理区设置一个inactive_clean_list,根据page结构在上述LRU队列中的位置,就可为回收页面提供参考。


(5)通过一个全局的address_space数据结构swapper_space把所有可交换的内存页面管理起来,每一个可交换的页面通过队列头list链入到其中的一个一个队列,为加快搜索,建立了一个杂凑表page_hash_table;内核为每一个刚换入的页面分配一个空白内存页面以后,通过add_to_swap_cache()链入到clean_pages队列中去;其实每一个inode数据结构都有一个成分i_data即address_space;然后还要链入到某个杂凑队列和LRU队列中的全局的active_list中去。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值