收稿日期:20040618;修返日期:20041124基金项目:国家863计划捐助项目2003AA148020);上海市科技攻关项目(H0)桌面Linux操作系统页面交换算法的改进复旦学院软件大学,上海100084)inux系统的页面交换策略是一种被动的策略,这促使桌面应用的响应速率较慢。这儿改进了页面交换算法,包括系统内核、窗口管理器和应用程序几个层面上的更改。关键词:页面交换;窗口管理器;indows中图法分类号:TP3016文章编号:10013695(2005)08014303ImprovementPageReplacementinuxSHILeping,WUBangyu,GUing(SchoolSoftware,singhuaUniversity,Beijing100084,China)Abstract:Pagereplacementpolicypassivepolicy,whichleadsresponsespeeddesktopapplicationstooslow.presentsmiprovementalgorithmpagereplacemen.tThemodificationexistssystemkerne,lindowmanagerdesktopapplication.ourexpermien,trunningdesktopapplicationsmiprovementalgorithmenhancedobviously.Keywords:PageReplacemen;tindowManager;Linux;目前,好多Linux较为成熟的应用都是针对中低档服务器领域的。
同时,inux的自由软件特点也促使好多桌面应用将其作为自己的操作系统。而桌面应用相对于控制台程序来说有两个最主要的区别,即桌面应用有更大的指令集;桌面应用涉及到更多的间接调用。这两个特征造成桌面应用须要占用更多的显存。而就inux内核来说,它并没有为这种应用问题考虑好多linux开发培训,所以造成在Linux系统中运行桌面应用的整体疗效不如Windows系统。笔者分别对Linux和indows系统的页面交换算法进行了一些研究,发觉inux操作系统的页面交换算法的主要特征是被动的交换策略和相对稳健的换出机制,indows系统的交换机制则是更为主动的策略。Linux系统的这些策略造成其在桌面应用的响应过程中可能会耗费很长的时间去等待显存页面的分配。笔者借鉴了一些indows系统中的处理策略,改进了Linux的页面交换算法。主要的改进包括对系统内核的更改,使它的页面交换策略更为主动;口管理器和应用程序之间通讯的更改,使它们相互配合实现对页面交换的主动调用。改进后的系统,在桌面应用程序最小化的时侯释放了大部份其所占用的空间,促使系统时刻才能保持着大量的空闲显存页面。实验证明,在改进系统中运行桌面应用的响应速率有了显著的提升。
22内核中,系统通过Kswapd函数来对页面进行释放操作,而系统只有分配页面的时侯,发觉页面短缺就会唤起Kswapd函数进行操作。这其中牵扯到页面的交换。这些交换机制相对来说较为被动。在Kswapd函数中,一个页面从活动队列,到页面被换出,到最终步入空闲队列,最多的情况下可经历17次轮回。这些稳健的换出机制,保证了页面交换的变化较为稳定,不至于常常性的出现晃动现象。但从另一个角度看,每次换出页面释放空间须要的时间才会显著降低。这种特征比较适宜于控制台程序,它们在接受恳求到作出响应的一段时间内对显存的需求量变化相对较小。这些情况下使用被动的交换策略和稳健的换出机制可以降低换入/换出时的消耗,提升系统的借助率。但在桌面应用中,用户更重视的是系统的响应速率,而桌面应用的瞬时显存需求量变化又比较大,所以该算法并不能挺好地符合桌面应用的须要。通过比较indows2000这两个操作系统在运行几个桌面应用时侯的情况,发觉indows2000的响应速率显著较快。深入剖析后,发觉Windows系统在运行桌面应用过程中各个层次的处理机制与用户层面的比较和剖析在用户层面上,indows系统的桌面应用调用Window统提供的API来实现它的图形化界面,而通过Windows的消息分派机制来实现桌面程序对风波的响应。
Linux则通过indow来实现桌面应用程序,应用程序的顾客端仅仅是发送须要勾画图形的指令和定义风波处理的函数,而服务器端负责实际消息的传递和图形的显示。相对来说,indows系统在处理桌面应用时变得更为直接。另一个方面,indows系统中运行的桌面应用会在一些特定的窗口操作中进行显存的释放工作,Linux系统中的桌面应用则还没有对一些界面上的操作做出反应。内核层面的比较和剖析在内核层面上,史乐平等:桌面Linux内核中页面交换的相关策略进行比较剖析。Windows系统每一个进程都有一个相应的工作集linux操作系统原理 pdf,示该进程所占用的数学显存。Memoryanager每秒一次的调整工作集的大小,保持系统拥有一定数目的空闲页面,inux内核并不限制每位进程占用化学显存的数目,也并没有一个守护进程对显存的占用情况进行控制。Linux系统中的空闲页面数目并不会比较稳定地保持在一定的数目上,在分配空间时发生空闲页面欠缺的情况下,系统才能调用Kswapd函数进行页面换出操作。这些策略相对来说较为被动,系统并不会在没有空闲页面需求的时侯主动进行页面的调整。这也是Windows系统能有较快响应速率的诱因,为系统在一个桌面应用运行之前就早已为应用程序腾出了较为修身的空间,在程序运行过程中就可以毋须为空间的欠缺而延后好多的响应时间。
页面交换算法改进的剖析从换出机制方面来看,现有Linux内核在实现上并没有通过一个守护进程对空闲页面的数目进行控制。若果采用这些监控策略则改动较大,并且对一些inux下运行的控制台程序也会有相应的影响。所以笔者采取一种较为折中的方式,借助桌面应用的特性,在桌面应用程序最小化操作时主动把一部分页面换出数学显存。原系统中的整个换出的过程可以细分成几个阶段:第一阶将页面从活动队列换到非活动队列中,解除页面和进程之间的联系,为脏页面写盘做好打算。第二阶段,对脏页面进行化学写盘,但是化学写盘本身是比较历时的操作。第三阶段,释放那些页面所占用的数学显存,这一阶段执行速率较快,且假如被释放再要重新获取,则须要耗费很长的时间,所以应尽可能地延后这一阶段的执行。按照上述三个阶段的各自特征,改进版本中这样安排触发时机:第一阶段主要是解除进程和页面之间的关系,这一阶段的工作并不会花费太多的处理时间,但是它又是桌面应用程序最小化风波直接造成的结果,所以它可以作为应用程序中处理最小化操作的一部份来完成。第二阶段主要是数学写盘操作,它本身比较历时。假如将该阶段安排在最小化操作的过程中完成,会影响最小化操作的响应时间。
另一方面,倘若系统在忙碌的时侯还必需要抽出时间来运行化学写盘操作,则会从根本上影响系统的运行速率,这与改进的本意是相背离的。所以这一阶段的工作应当在一个系统空闲的状态下运行。按照第三阶段的特征,它的触发时机应当被尽可能的延后,可以被安排在系统分配页面发生短缺时侯进行。页面交换算法改进的实现改进的原系统为Redhat22的内核,GNOME的桌面环境,采用了1描述了改进之后系统的框架结构,其中阴影部分区域是笔者对系统进行的改进。本文所进行的改进主要包括内核层面的和用户层面的改进。在内核层面上,swapd原先进行换出的操作清楚地界定成三个阶段,加入系统空闲审计模加窗口管理器对桌面应用程序的通知过程和桌面应用程序接收消息主动释放显存的过程。Kswapd中三个阶段的交换过程进行明晰界定。第一阶段通过调用swap_out_mm函数实现对特定进程的所有页面解除映射关系,构建脏页面与写设备的映射关系的功能,向用户提供系统调用的插口。为了分辨第二阶段、第三阶段和Kswapd本身的操作过程,改进过程中定义了几种操作类型:swap_do_write_pages参数表示进行第二阶段化学写盘的操作;swap_do_free_pages参数表示进行第三阶段释放页面的操作;swap_do_write_andfree参数表示保持原先Kswapd的操作过程。
这三种操作类型主要是在shrink_cache函数处理过程中加以分辨的。2)在内核中加入一个系统空闲的审计模块,通过实时地监控来反应系统当前的空闲状况。在系统中定义了一个audit_timer_t结构,该结构中包括三个计数器audit_idle链表和计数的权重Weight链表linux操作系统原理 pdf,三个权重分别反映从现今开始追述到过去某个时间点的三个阶段对现今的影响。audit_period表示对每位阶段的次数统计。Index表示当前阶段统计数据在链表中的下标。audit_timer_t结构的定义为typedeftructaudit_timerunsignedlongvolatileu_audit;unsignedlongvolatilem_audit;intindex;longweight[longaudit_period;audit_timer_t;每一次发生时钟中断时侯linux软件,系统会执行do_timer进行中断处理,通常还会调用bh函数timer_bh进行处理。每次调用bh函数时侯,我们还会在当前audit_idle中的2操作(为提升效率可以采用移位操作)。倘若发生溢出1操作。若果系统在中断时侯的执行进程为Idle进程,则采用前种操作,否则为后一种。每次计数之后,audit_period都加1。等到执行了一定次数的操作之后,通过前两个阶段的记录和现阶段的记录进行加权平估算出现阶段的空闲率,之后再将字段下标Index加