linux内核page结构体的PG_referenced和PG_active标志

本文介绍Linux内核中改进的LRU算法,通过二次机会机制管理内存页面的状态转换,包括激活和非激活列表间的迁移,确保高效利用内存资源。

linux内核使用了lru算法来置换内存页面,但是实际上并不是纯的lru算法,里面掺杂了很多别的思想,比如第二次机会,比如双时钟指针等等。这里着重说一下第二次机会的体现。在内核中有一个mark_page_accessed函数,它实际上体现一个状态机,这是它的实现:
if (!PageActive(page) && PageReferenced(page) && PageLRU(page)) { 
    activate_page(page);  
    ClearPageReferenced(page);
} else if (!PageReferenced(page)) {
    SetPageReferenced(page);
}
基本上这段代码体现了函数注释中的言词:
inactive,unreferenced        ->      inactive,referenced
inactive,referenced          ->      active,unreferenced
active,unreferenced          ->      active,referenced
一个被内存管理系统管理的page的生命周期就是:伙伴系统->active list->inactive list->伙伴系统。
当一个page在两个list之间晃荡的时候,并不是一次性从active转移到inactive或者相反的移动,而是有两次机会,inactive的page要先referenced才能进一步变成active的,同样的active的page要先清除了referenced才能变成inactive的,上面的函数是到active的变换,下面的page_referenced其实是到inactive的变换,每当置换算法扫描到一个页面的时候,就要老化它一次,这里有一个技巧,那就是不管它是active的还是inactive的,只是清除一下referenced,只要它被referenced了,那么它就理应不该被释放,除非它既是inactive的又是unreferenced的:
int page_referenced(struct page *page, int is_locked)
{
    int referenced = 0;
    if (page_test_and_clear_young(page))
        referenced++;
    if (TestClearPageReferenced(page))
        referenced++;
    if (page_mapped(page) && page->mapping) {
        ...//检查page是否刚被使用
    }
    return referenced;
}

 CAM350就是把layout工程师设计出来的线路板,经客户以电脑资料的方式给线路板厂,然后板厂根据该厂里的机器设备能力生产能力,利用CAM软件(genesis2000,cam350,ucam,v2001等)将客户提供的原始资料根据该厂的生产能力修正后,为生产的各工序提供某些生产工具(比如菲林、钻带、锣带等),以方便本厂能生产符合客户要求 的线路板,起的就是辅助制造作用支持多种输入/输出格式 (CAD数据,ODB++, Gerber, IPC-356,Excellon, DXF, Sieb 以及 Myers等)  提供了双向的 AutoCAD DXF数据支持  设计规则检查,检查包括各类间距,环状线,铜箔面积计算,网表对比等  优化设计文件,添加泪滴,网表提取,丝印检查等  Basic NC Editor通孔编辑功能,钻孔工具定义,铣边路径,改变提刀点。  快速拼板功能,制作PCB的阵列,适应生产要求  Quote Agent生成精确的制造工艺要求清单  交互查看Cross-probe  在CAM350中检查到的错误,同时在CAD 工具中高亮显示(AllegroPADS). 这样就可以方便快速的发现修改错误。  网络表对比图形化  增强了网表比较功能,不仅产生文字报告,并允许用户以图形化方式查看错误。  批量规则检查Streams Rule Check  用户可以定义DRC, DFF 网表比较等一系列的校验步骤,点击一个按钮就可以执行所有这些检测,也可以在其它的设计中重复调用这些检测。  DFF Audit  在设计进入生产之前,分析 PCB 设计中的蚀刻缺陷,狭长的铜箔条阻焊条,焊接搭桥,热焊盘阻挡等其它问题。  Advanced NC-Editor  允许处理 PCB 设计中的钻孔铣边数据。添加钻孔采样数铣刀路径,还有高级的NC记录程序,比如钻字, 铣圆,操作者信息,定位孔等等。  快速拼板Panel Editor  强大拼板工具,提供用户调用标准的拼板模板定制自己的模板。  Flying Probe Editor  飞针测试需要的数据可以通过强大的图形化的编辑器过滤选项快速提取,需要的数据比如网络,测试点,以及相互间距信息。  Bed-of-Nails Editor  针床编辑器来创建单面的或者双面的测试夹具所有必要的文件,图形化的编辑界面过滤选项,使用户可以轻松地交互控制测试点等信息。  Reverse Engineering  CAM350独有的反向工程功能,允许用户把Gerber 图形数据,转换为包括NET,REFDES,属性的智能CAD 数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值