demand paging_swap.pdf

demand paging_swap.pdf

ID:34114841

大小:72.08 KB

页数:5页

时间:2019-03-03

demand paging_swap.pdf_第1页
demand paging_swap.pdf_第2页
demand paging_swap.pdf_第3页
demand paging_swap.pdf_第4页
demand paging_swap.pdf_第5页
资源描述:

《demand paging_swap.pdf》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、Linux内核中Demandpaging与swap机制的源码分析王森msn:kernel_senix@163.com1Swappartition与file-backedmemory首先对于每个文件,内核里都有一个structaddress_space结构来管理,他有两个作用1该文件所有被读进内存的页,都被加进structaddress_space结构2该结构提供读写例程,内核对该文件所有的读写都通过这些例程完成。这些例程向下跟文件系统连接起来。其次,所谓swappartition可以是个普通文件、也可是个设备文件,对其管理也是当成文件来处理,自然就有对应的s

2、tructaddress_space:structaddress_spaceswapper_space。用户进程的stack/heap内存都会通过swapper_space写出去。所谓file-backedmemory就是把一块连续的虚拟内存与文件映射起来,对虚拟内存的首次访问会产生demandpanging,内核分配物理内存,并把对应的文件内容读进物理内存,而这些物理内存以page为单位放在文件的structaddress_space里。可见swappartition机制和file-backedmemory机制的区别仅仅在于换出目的不同。另外demandp

3、aging产生时会内核动作分为3步1)分配物理内存2)将存放在swappartition或backed在文件系统里的内容读入内存3)修复页表项2Swapout机制分析linux内核会管理所有的用户进程使用物理内存(包括上文提到的stack/heap内存,和file-backedmemory),单位为page(4k),这些page被按最近使用的频率的穿起来,如果内存紧张了,就把很久没有用的page释放掉、或者swapout出去。而根据使用swappartition机制还是file-backedmemory机制,产生不同的目的地。/mm/vmscan.c//在进

4、入这个函数前,内核已经把需要swapout或者释放掉的页放在page_list里了staticunsignedlongshrink_page_list(structlist_head*page_list,…){...//这个page_list就是一串很久没有被用到的页,逐个从这个page_list取出页,做以下操作://如果定义了系统支持swappartition下面这部分橙色代码会被编译进来,而对于android系统,下边这部分灰底代码是无效的,内核swappartition和file-backedmemory的区别仅仅就在这里。这部分代码就是为依靠swa

5、ppartition机制换出的匿名内存绑定目的地:swapper_space#ifdefCONFIG_SWAPif(PageAnon(page)&&!PageSwapCache(page)){//这个page是匿名的(动态分配的stack/heap,没有对应的文件),并且没有和swapcache联系起来,所谓swapcache,就是swappartition的swapper_spaceif(!add_to_swap(page,GFP_ATOMIC))//将这个匿名页加入到swapcache…}#endif/*CONFIG_SWAP*/…mapping=pag

6、e_mapping(page);//找到这个page对应的structaddress_space//依靠swappartition机制换出的目的地,在应用程序调用map()时绑定,即为对应的file,这里就是找到这个file的structaddress_space//对于依靠swappartition的内存,其换出目的地在灰底代码部分绑定,这里是也将其找出来…if(PageDirty(page)){//对应的page是被修改的,该条件成立/*Pageisdirty,trytowriteitouthere*/pageout(page,mapping,sync_

7、writeback)//把修改的页写出去//mapping就是换出目的地//可见无论通过Swappartition还是file-backedmemory做swapout其本质都是一样的,不同的//仅仅是swapout的目的地不一样。一个是swappartition,一个是文件系统上的普通文件。......//如果这个page是clean的内存,简单释放即可...}/**pageoutiscalledbyshrink_page_list()foreachdirtypage.*Calls->writepage().*/staticpageout_tpageout

8、(structpage*page,structadd

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。