[发明专利]一种基于Linux大页内存的易扩展页面架构有效
申请号: | 201710144381.4 | 申请日: | 2017-03-10 |
公开(公告)号: | CN106970882B | 公开(公告)日: | 2020-04-14 |
发明(设计)人: | 陈文智;王总辉;王金昱;李国玺 | 申请(专利权)人: | 浙江大学 |
主分类号: | G06F12/123 | 分类号: | G06F12/123;G06F12/128 |
代理公司: | 杭州天勤知识产权代理有限公司 33224 | 代理人: | 蒋琼 |
地址: | 310013 浙江*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 linux 内存 扩展 页面 架构 | ||
1.一种基于Linux大页内存的易扩展页面架构,包括:大页内存及调用大页内存的接口函数,其特征在于,所述的大页内存分为多个节点,每个节点分为多个分区,每个分区由以双向链表的形式连接在一起的多个2M大页组成,所述的接口函数包括用于获取单个大页的申请函数、用于释放大页的释放函数、用于将大页占为己有且禁止其他进程访问的锁函数以及用于恢复大页自由的解锁函数;
申请函数实现从大页内存中获取单个大页的具体过程为:
(a-1)查询Linux系统中的node_possible_map,获取节点分布,判断节点的个数以及节点是否含有内存空间,并从第一个含有内存空间的节点进行查询;
(a-2)获取当前节点的分区分布,判断当前节点是否含有分区,若是,执行步骤(a-3),若否,结束该节点的查询,并执行步骤(a-7);
(a-3)查找当前节点的第一分区,并判断当前分区中是否含有空闲大页,若是,执行步骤(a-6),若否,执行步骤(a-4);
(a-4)判断当前节点的下一个分区中是否含有空闲大页,若是,执行步骤(a-6),若否,执行步骤(a-5);
(a-5)重复循环步骤(a-4),直到遍历当前节点的所有分区为止,若当前节点的最后一个分区不含有空闲大页,执行步骤(a-7);
(a-6)将空闲大页的共享计数Mapcount设为1,并将该空闲大页从当前分区的活动链表上去除,调整该分区中该空闲大页的前后大页的lrui-1、lrui+1,使lrui-1指向该空闲大页的后一个大页,lrui+1指向该空闲大页的前一个大页,返回获取的大页,结束函数;
(a-7)将下一个节点作为当前节点,执行步骤(a-2),直到遍历所有含有内存空间的节点,若遍历到最后一个含有内存空间的节点中的最后一个分区的所有大页,未找到空闲大页,则获取大页失败;
释放函数实现将不使用的大页释放到大页内存中的具体过程为:
(b-1)判断当前大页的共享计数mapcount是否为1,若是,执行步骤(b-2),若否,将共享计数mapcount减1,结束大页释放;
(b-2)判断是否能够获取当前大页所在的节点及分区信息,若是,执行步骤(b-3),若否,执行报错;
(b-3)根据获取的当前大页所在的节点及分区信息,将该当前大页添加至其所在分区的大页链表上,调整该当前大页的lrui,使lrui指向正确的前后大页,调整前后大页的lrui-1、lrui+1,使lrui-1、lrui+1指向该当前大页,并将该当前大页所属的分区的空间大页数目加1,将该当前大页所属的节点的空闲大页数目加1,将该当前大页的共享计数mapcount设为0,大页释放完成;
锁函数实现将大页占为己有,禁止其他进程访问的具体过程为:
(c-1)查看当前大页的标志flags,判断当前大页的属性是否为禁止锁,若是,退出查看,若否,执行步骤(c-2);
(c-2)继续查看当前大页的标志flags,判断当前大页是否已经被锁,若是,执行步骤(c-3),若否,执行步骤(c-4);
(c-3)将当前进程添加到该大页所属节点的一个等待队列中;
(c-4)将大页标志flags中的标志位PG_locked设为1,完成该大页的上锁;
解锁函数实现恢复大页自由,被其他进程访问的具体过程为:
修改大页的标志flags,将标志flags中的标志位PG_locked设为0,且重新唤醒该大页所属的节点中等待队列的进程,让进程继续运行。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江大学,未经浙江大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710144381.4/1.html,转载请声明来源钻瓜专利网。