资源描述
第2 9 卷第1 期2 0 0 8 年2 月首都师范大学学报(自然科学版)J o u r n a lo fC a p i t a lN o r m a lU n i v e r s i t y(N a t u r a lS c i e n c eE d i t i o n)N O 1F e b 2 0 0 8运用S o l a r i sr-1(D o o r)技术对提高计算机内存利用率的影响耿佳孙卫真(首都师范大学信息工程学院北京1 0 0 0 3 7)摘要门(D o o r)技术是S u n 公司开发的S o l a f i s 操作系统中的一个进程间通信的功能通过分析f-j(D o o r)机制的基本原理和结构,编写了基于S o l a r i sf-1(D o o r)机制的客户,服务器的测试程序,并利用S o l a r i s 操作系统提供的内核分析工具对计算机内存的使用情况进行了详细的分析。获得了确定的结果实现了在门(D o o r)机制的结构下对内存的共享,提高了内存的利用率,并且对于相同并发线程数量与利用率的关系给出了分析与结论关键词:S o l a r i s,操作系统,进程间通信(I P C),f-I(D o o r)中图分类号:T P 3 1 6 8 11S o l a r i s 门进程间通信的基本原理进程间通信(I P c)是由操作系统支持的,它允许一个进程与另外的一个进程之间相沟通进程可以在同一台计算机或经过网络连接的不同计算机上运行I P C 维持了进程进入共享资源和进程间同步的次序门由服务器进程创建并由客户进程调用,由同一个进程完成创建和调用的情况也有可能当门创建后,服务器端会指定一个服务器线程,它会被客户端调用不像大多数远程过程调用那样,每个门对于每个客户都会对应一个服务器线程服务器端可以将门绑定到一个文件,通过打开这个文件,客户端可以连接到对应的门如图1 从图l 中可以看出,门机制不仅仅是进程间通信的一种方法,还结合了远程过程调用,可以说,它是I P C 和R P C 的综合由于门机制是基于用户线程级的,因此采用门机制有一个很大的好处即可以节省内存的使用多个客户共享同一段内存,从而提高系统的运行效率,这在每个用户线程都需要占用很大内存的服务器的情况下,效果极为明显收稿日期:2 0 0 7-0 9 0 32 0客户进程图1S o l a r i s 门0|内存页2S o l a r i s 门机制的结构分析从客户方面看,门使用的文件抽象是被客户核心线程用于取回函数d o o r _ c a l l()产生的门句柄的打开文件系统的一个路径名,返回的文件描述符被看作是d o o r _ c a l l()的一个参数传递给对应的门参数结构体(d o o r _ a 骓t)由客户进程的代码声明而且用于传递参数给门服务器端的函数从服务器方面看,利用d o o r _ c r e a t e()来定义一个函数与客户通信服务器还必须绑定门到一个文件系统命名空间中的某个文件一旦这个绑定建立之后,客户就可以发出打开路径名的请求并且在d o o r _ c a l l()中使用返回的 万方数据第1 期耿佳等:运用S o l a r i sf-1(D o o r)技术对提高计算机内存利用率的影响文件描述符了在进程中,门通过门描述符被引用,它在形式和功能上与文件描述符很相似事实上,进程中门描述符的指写使用了文件描述符的通道支持门机制所需的主要数据结构如图2 图2S o l a r i s 门结构两个主要的结构分析别是d o o r _ n o d e,它与进程结构中的p-d o o r _ l i s t 指针相连,以及d o o r _ d a t a,它与d o o r _ n o d e 中的d o o r _ d a t a 指相连一个门服务器进程可以有多个函数(多个对应客户的门),因此客户的每次调用都产生一个d o o r _ n o d e 结构,它们通过d o o r _ l i s t 链接到一个d o o r _ d a t a 结构的创建作为服务器线程创建的一部分,其中包括一个用来管理d o o r _ c a l l 函数中参数表的d o o r _ a r g 结构,还包括一个当服务器函数被调用时,用来传递门描述符的门描述符指针(d o o r _ d e s c)3 基于门机制的客户,服务器的实现3 1 构造设计并实现门由服务器线程创建并由客户线程调用所以这里我们分别构造了服务器的线程和客户的线程同时设计两个服务器门,一个用于验证客户传来的密码是否正确,另一个编写一段测试函数,即用于读某个指定文件实验时在若干个客户端调用这个函数,产生若干个用户级的线程,来分析门机制共享内存的好处为了进行比较分析,我们再编写一段没有使用门的代码,采用其他的进程间通信的方法实现相同的功能在运行中使用内存分析工具来跟踪内存的使用情况图3 分别显示了程序中门机制服务器和客户线程的流程图服务器线程图3客户线程门程序流程图下面是程序的主要代码,它们说明门是如何进行进程间通信的d o o r _ l o g i I L8 1 W 登陆服务门中主要代码:i n tm a i n(i n ta r g c,c h a r*a r g v)i f(d o o r _ f d=d o o r _ c r e a t e(s e r v e r _ p r o c,N U L L,0)一一1),创建门e 儿m s g(“l o g i n _ d o o r _ c r e a t ef a i l e d”);u n l i n k(a r g v 1 );解除链接i f(t m p f d=c r e a t(a r g v 1 ,F I L E P E R M S)=一I),与文件系统路径名关联e nm s g(“c r e a tf a i l e d”);i f(f a t t a e h(d o o r _ f d,a r g v 1 )一一1)a n 载挂载点e r r _ m s g(“f a t t a e h 缸k d”);*服务器过程:比较密码是否正确*,s t a t i cv o i ds e r v e r _ p r o c(v o i d*c o o k i e,c h a r*a r g p,s i z e ta r g _ s i z e,d o o r _ d e s c t*d p,u i n L tn _ d e s c)i f(s t r c m p(a r g p,“p s w l l l”)一0)r e 8=1;e l s er e 8=O;i f(d o o r _ r e t u r n(c h a r*)&r e s,s i z e o f(i n t),N U L L,0)一一1)将结果传回客户e r r _ m s g(“d o o r _ r e t u r nf a i l e d”);d L n s r v 读文件服务门中主要代码:i n tm a i n(i n ta r g c,c h a r*a r g v)i f(d o o r _ f d=d o o r _ c r e a t e(s e r v e r _ p r o c,N U L L,0)一一I)创建门2 l 万方数据首都师范大学学报(自然科学版)2 0 0 8 正e 盯_ m s g(“d o o r _ c r e a t ef a i l e d”);u n l i n k(a r g v 1 );解除链接i f(t m p f d=t r e a t(a r g v 1 ,F I L E P E R M S)=一1)e r r _ m s g(“e r e a tf a i l e d”);i f(f a t t a c h(d o o r _ f d,a r g v 1 )一一1)a n 载挂载点e nm s g(“f a t t a c hf a i l e d”);*服务器过程:将客户请求的文件传给客户*,s t a t i cv o i ds e r v e r _ p r o c(v o i d*c o o k i e,c h a r*a r g p,s i z e ts i z e,d o o r _ d e s c t*d p,u I l i L tI L d e s c)i f(f d=o p e n(a r g p,O R D O N L Y)一一1)i f(d o o r _ r e t u r n(b u f,s t r l e n(b u r),N U L L,O)一一1)e nm s g(“d o o r _ r e t u r nf a i l e d”);d o o r _ l o g i n c l i 登陆客户门中主要代码:v o i d*d e m o(v o i d*a r g)i f(d o o r _ f d=o p e n(I n p u t B o x(“p l e a s ei n p u tl o g i n d o o r Sf i l e n a m e:”),0 一R D W R)一一1输入密码,路径名传递给o p e n 打开门M s g B o x(“C a n to p e nl o g i n d o o r”);i f(d o o r _ c a l l(d o o r _ f d,&d o o r-a r g s)一一1)*调用服务器过程*M s g B o x(“l o g i n _ d o o r _ c a l lf a i l e d”);i f(d o o r _ f d=o p e n(I n p u t B o x(!P l e a s ei n p u td o o r Sf i l e n a m e:”),O R D w R)=一1),输入文件名,路径名传递给o p e n 打开门M s g B o x(“C a n to p e nd o o r”);i f(d o o r _ c a l l(d o o r _ f d,&d o o r _ a r g s)一一1)M s g B O X(“d o o r _ c a l lf a i l e d”);w h i l e(n=r e a d(f d,b u f,B U F _ S I z E)O)m v w p r i n t w(e d i t o r,Y Y x x,“C”,t m p);盛+;,读文件内容并显示t o u c h w i n(m a i n w i n);i n tm a i n(i n ta r g o,c h a r*a r g v)i f(p t h r e a d _ c r e a t e(&t i d,N U L L,d e m o,N U L L)!=0)商t(一1);创建线程p t h r e a d _ j o i n(t i d,N U L L);等待线程结束r e t u r n(E X I T _ S U C C E S S);3 2 测试和结果图4 说明了多个客户进程下门实现进程间通信的过程2 2图4 多个客户进程的通信过程运行登陆服务器门等待客户线程请求:d o o r _l o g i n _ S l w t m p l o g i n&和运行读文件服务器门等待客户线程请求:d o o r _ f d _ s r v t m p s r v 之后,运行客户线程:d o o r _ l o g i n c l i,则进入“输入登陆门”界面如图5 图5“输入登陆门”界面在进程内部,门是用描述字标识的在进程外,门是用文件系统中的路径名标识的因此我们使用一个文件名来进行进程间通信,与登陆服务门相连在第二个对话框输入密码(门通信要求必须输入正确的密码才能进入下一个对话框,否则会弹出图6f-I 机制执行结果 万方数据第1 期耿佳等:运用S o l a r i s 门(D o o r)技术对提高计算机内存利用率的影响密码错误对话框)从客户端将密码传给登陆服务门,由它负责密码的验证在第三个对话框输入服务f t m p s r v,与登陆服务门类似使用一个文件名t r a p 8 I V 与读文件服务门进行通信在第四个对话框输入服务申请显示的文件名得到的结果如图6 客户端得到了服务器中的文件e t e p a s s w d,不仅是这个文件,其他的文件也可以读到下面我们再启动一个客户线程,访问同一个服务器的文件,并得到和上面相同的结果为了验证门机制的好处,我们编写实现相同功能而采用另一种进程间通信的方法的程序使用了命名管道(F I F o)方法的主要代码如下:服务器端:#d e f i n eW E U K N O W N F I F O“t m p s s p _ f i f o”i n tm a i n(v o i d)i f(m k f i f o(W E u L K N O W N F I F O,F I F O P E R M S)一一1)创建共知F I F Oe l l _ m s g(“m k f i f of a i l e d”);i f(f d=o p e n(W E L L _ K N O W N F I F O,0 一R D O N L Y)一一1)打开共知F I F Oe r r _ m s g(“o p e nf a i l e d”);i f(f d p i d=e a l l o c(M A X P I D,s i z e o f(i n t)一N U L L),为进程到文件描述符的映射分配内存e nm s g(“c a U o cf a i l e d”);w h i l e(i n=r e a d(f d,b u f,L I N E L E D)0),从共知F I F O 读取一行并处理i f(s t r c m p(c m d,“o p e n”)一0)i f(f d p i d p i d 一O)i f(m k f i f o(p a t h,F I F O P E R M S)一一1)创建特定于客户机的F I F O 并打开e 玎_ r e t(“m k f i f of a i l e d”);i f(f d _ p i d p i d =o p e n(p a t h,O W R O N L Y)一1)e 盯_ r e t(“o p e nf a i l e d”);i f(s t r c m p(c m d,“f i l e”)=0),解析从客户机读取的文件名f p=o p e n(s t r,“r”);i f(w r i t e n(f d _ p i d p i d ,b u r,n)一一1)e nr e t(“w r i t e nf a i l e d”);i f(s t r e m p(e m d,“q u i t”)一0),关闭F I F oc l o s e(f d _ p i d p i d );客户端:i n tm a i n(v o i d)i f(w L f d=o p e n(W E I J I K N O W N _ F I F O,O W R O N L Y)一1),打开共知F I F Oe 札m s g(“C a n to p e nw e l lk n o w nF I F O”);p i d=g e t p i d();获得进程I Ds n p r i n f f(b u f,L I N E L E N,“do p e n n”,p i d);,发送o p e n 指令到服务器s n p r i n f f(p a t h,M A X P A T H L E N,“s d”),w E u K N O W N F I F O,p i d);打开指定于客户机的F I F O研n t f(“E n t e raf i l e n a m e:”);输入请求的文件名m u s h(s t d o u t);w h i l e(f g e t s(p a f l l,L I N E _ L E N,s t d i n)!=N U L L),读取并显示文件内容s n p r i n f f(b u f,B U F _ S I Z E,“ds q r t s”,p i d,p a t h);i f(n=r e a d(m y f d,b u r,B U F _ S I z E)一一1)e r r _ m s g(“C a n tr e a dm yF I F O”);i f(f p u t s(b u f,s t d o u t)一E O F)e r r _ m s g(“f p u t sf a i l e d”);这里我们使用的B U F _ S I Z E 都为8 1 9 2 B 在服务器运行的同时,分别启动5 个客户线程在S o l a r i s 操作系统中,内存使用分为两类:虚拟内存使用和物理内存使用(称为驻留集大小,或R S S),可以使用p s命令显示它们的使用情况,即p s e Op i d,V S Z,r s s,a r g s 另外,使用p m a p 命令可以更清楚的显示组成进程内存空间的各个内存映射,查看进程占物理内存的大小并收集有关进程使用内存的更多信息图7是采用门机制和采用命名管道机制下内存的比较从图中可以看到门程序的驻留集大小为1 3 6 0 K B,而命名管道程序的驻留集大小为1 4 0 8 K B 其中4 8 K B的差额来自门机制5 个客户线程因共享同一段内存而节省的内存空间3 3 使用门机制的意义通过以上实验对门机制和其它进程间通信机制的对比分析,我们可以清楚地看出,门机制不仅仅是进程间通信的一种方法,还结合了远程过程调用技术,可以说,它是I P C 和R P C 的综合由于它是基于用户线程级的,因此采用门机制可以节省内存的使用,提高内存使用效率尤其在服务器端当多个客户共享同一段内存时,可以显而易见地提高内存利用率例如在线的翻译系统,就可以使用门机制由于单个词库占内存量是很大的,如果每个在线翻泽的2 3 万方数据首都师范大学学报(自然科学版)2 0 0 8 拉图7 门机制和命名管道机制下的内存比较客户开启一个线程,对应每个用户线程都分配一大块单词内存,这样不但大量重复占用了内存,降低了翻译的速度,而且系统负荷很大采用门机制后,调用线程的每一个客户都可以共享服务器中的唯一一个词库,这样无论从速度还是内存开销上都会有显著提升的效果但是,这时要注意线程的陷入问题由于线程和线程之间互相竞争C P U 资源和互斥访问内存,可能会使得线程无序地访问这些共享资源,最终可能导致无法得到正确的结果这个问题有待2 4下一步研究4 结论通过上述对比实验,当采用门技术作为进程间通信的方法时,它可以提供给我们一个迅捷的过程调用机制(相对于传统的R P C 而言),并可以有效的节省用户线程级的内存使用,从而提高系统的运行效率 万方数据第1 期耿佳等:运用S o l a r i s 门(D o o r)技术对提高计算机内存利用率的影响参考文献W R i c h a r dS t e v e n s U N I X 环境高级编程(第二版)M 北京:人民邮电出版社,2 0 0 6 R i c h a r dM c D o u g a l l S o l a r i s 内核结构(第二版)M】北京:机械工业出版社,2 0 0 7 M a nP a g e sS e c t i o n2:S y s t e mC a l l S U N 技术文档:8 1 6 5 1 6 7 O L h t t p:l d o e s s u n c o m a p p d o e s d o c 8 1 6 5 1 6 7 16 m b b 2 j a e 6 7l=z h&a=e x p a n d M a nP a g e sS e c t i o n3:L i b r a r y I n t e r f a c e sa n d H e a d e r s S U N 技术文档:8 1 6 5 1 7 3 0 L h t t p:d o e s s u n c o m a p p d o e s d o c 8 1 65 1 7 3 6 m b b S a d q 6 71=z h _ t w&a=e x p a n d J i mM a u m,R i c h a r dM c D o u g a U S e l a r l s 性能与工具 M 北京:机械工业出版社,2 0 0 7 R i c h l e e r S e l a r i ss y s t e m sp r o g r a m m i n g M 北京:机械工业出版社,2 0 0 6 S U N 中国技术社区 O L】h t t p:g c e c l u b s u n c o m c n 段风雷S e l a r i s1 0 红宝书 M 北京:电子工业出版社,2 0 0 6 A n d r e wS T a n e n b a u m,A l b e r tS W o o d h u l l 操作系统:设计与实现(第二版)M 北京:电子工业出版社,2 0 0 4 I r i sZ h u S o h r i s 平台I P C 及系统限制简介 O L h t t p:d e v e l o p e r s s 岫c o m e n b l o g r o d e e n t r y 2 0 0 6 0 8 0 7 I m p r o v e m e n to fU s a g eo fC o m p u t e rM e m o r yU s i n gS o l a r i sD o o rG e n gJ i aS u nW e i z h e n(I n f o r m a t i o nE n g i n e e r i n gC o l l e g e,C a p i t a lN o r m a lU n i v e r s i t y,B e i j i n g1 0 0 0 3 7)A b s t r a c tD o o ri si st h ed e v e l o p m e n to fS u nS o l a r i so p e r a t i n gs y s t e mi ni n t e r-p r o o e s sc o m m u n i c a t i o n B ya n a l y z i n gt h eb a s i cp r i n c i p l e sa n ds t r u c t u r eo fd o o r,w ec o m p i l ec l i e n t s e r v e rt e s t i n gp r o g r a mb a s e do nS o l a r i sd o o r,U S ea n a l y t i c a lt o o l sp r o v i d e db yS o l a r i so p e r a t i n gs y s t e mk e r n e lt oc a r r yo u tad e t a i l e da n a l y s i so ft h eu o fc o m p u t e rm e m o r ya n do b t a i nt h ec e r t a i nr e s u l t s S h a r e dm e m o r yi sa c h i e v e du n d e rt h es t r u c t u r eo fd o o rm e c h a n i s m t o g e t h e rw i t l lt h eu t i l i z a t i o no fm e m o r yi n c r e a s e d D e t e r m i n a t ec o n c l u s i o n sa r em a d eb e t w e e nt h en u m b e ro fc o n c u r r e n tt h r e a d sa n dt h eu s a g eo fm e m o r y K e yw o r d s:$o l a r i s,o p e r a t i n gs y s t e m,i n t e r-p r o c e s sc o m m u n i c a t i o n,d o o r 1 J1 J1 J1 J1 J1 J1 J1 J1 J1 Jl23456789 加r Lr Lr Lr Lr Lr Lr Lrl 万方数据运用Solaris门(Door)技术对提高计算机内存利用率的影响运用Solaris门(Door)技术对提高计算机内存利用率的影响作者:耿佳,孙卫真,Geng Jia,Sun Weizhen作者单位:首都师范大学信息工程学院,北京,100037刊名:首都师范大学学报(自然科学版)英文刊名:JOURNAL OF CAPITAL NORMAL UNIVERSITY(NATURAL SCIENCES EDITION)年,卷(期):2008,29(1)参考文献(10条)参考文献(10条)1.Iris Zhu Solaris平台LPC及系统限制简介2.Andrew S.Tanenbaum;Albert S.Woodhull 操作系统:设计与实现 20043.段风雷 Solaris 10红宝书 20064.SUN中国技术社区5.Rich Teer Solaris systems programming 20066.Jim Mauro;Richard McDougall Solaris性能与工具 20077.Man Pages Section 3:Library Interfaces and Headers.SUN技术文档:816-51738.Man Pages Section 2:System Call.SUN技术文档:816-51679.Richard McDougall Solaris内核结构(第二版)200710.W.Richard Stevens UNIX环境高级编程 2006 本文链接:http:/
展开阅读全文