📄 minigui lite 版本的新改进.htm
字号:
多进程模型</P>
<P>目前的程序结构使每个加载的进程拥有一个自已的桌面模型及其消息队列,进程间的通信依靠以下所提到的进程通信模型来完成。</P><STRONG>4.5
进程通信模型</STRONG>
<P>这里我们所指的进程通信包括通过共享内存实现的数据交换和通过套接字实现的客户服务器通信模型。先看在MiniGUI中使用Socket的通信模型结构,如图
10:</P>
<P align=center><IMG height=939 alt=""
src="MiniGUI Lite 版本的新改进.files/image10.gif" width=651 border=0><BR>图 10
基于Socket 的通信模型</P>
<P>下面再看看MiniGUI进程间的资源共享问题。见图 11。</P>
<P align=center><IMG height=126 alt=""
src="MiniGUI Lite 版本的新改进.files/image11.gif" width=601 border=0><BR>图 11
内存共享通信模型</P>
<P>如上图所示,服务器负责装入共享资源,其中包括系统图标、位图、字体等,客户则通过AttachSharedResource()获取指向共享资源的指针,初始化一块共享内存及与使用已有共享内存的方法在前面的描述中已提到,在此不再赘述。</P><STRONG>4.6
各进程之间的同步</STRONG>
<P>这里所指的进程同步主要是指各进程绘制的同步,显然,同时不可能有两个进程向屏幕绘制。传统的GUI实现大多是只有一个进程负责绘制,而在我们Lite版本中,各进程负责自己的绘制。同时,我们的Lite
版本还支持虚屏切换,当我们切换出去的时候,谁也不能够向屏幕绘制。</P>
<P>Lite 版本利用Unix 信号解决了绘制同步问题。系统定义了两个信号:SIG_SETSCR 和
SIG_DNTDRAW,它们其实是重定义了的信号SIGUNUSED和
SIGSTKFLT。每个进程都定义了两个变量dont_draw和cant_draw。</P>
<P>服务器利用SIG_SETSCR和SIG_DNTDRAW来控制各客户程序谁有权对屏幕绘制,而不是自己全权代理。这也使得进程间通信量大大减少:当服务器希望一个客户程序不要向屏幕绘制时,就向它发送SIG_DNTDRAW信号,当让其绘制时,则发送SIG_SETSCR。从而实现了各进程间的屏幕绘制同步。</P>
<P>当一个客户收到SIG_DNTDRAW时,将自己的变量dont_daw设置为ture,收到SIG_SETSCR时,则将dont_draw变量设置为false。另一个变量cant_draw则是给客户自己用的,比如,做剪切时,当它的剪切域为空集时,又比如,当进行虚屏切换时,当前的进程将自己的cant_draw变量设置为true。</P>
<P>另外,如果一个客户正在绘图,我们只有等它画完后才能让其他进程得到这一权利。我们不需要知道谁在绘图,但我们要等到这一过程结束。Lite版本利用信号量机制解决了这一问题。在共享内存里保存着一个变量shmid,各进程利用它来实现各自的锁机制。这种机制有点类似于文件锁,不过要快许多。</P>
<P>从而,利用信号量机制,Lite版本实现了多进程的绘制同步。服务器利用信号控制各客户,而各客户也充分合作。相关代码都在MiniGUI的系统库里实现。保证了系统的稳定运行。</P><A
id=5 name=5></A>
<P><STRONG class=subhead>5 总结语</STRONG></P>
<P>MiniGUI
Lite版本试图在传统的基于线程的单体结构和C/S结构之间寻求一种效率和稳定性的折中,以便更加适合运行在PDA等小型嵌入式系统中。如今,MiniGUI
Lite版本已经稳定地运行在一些PDA系统上,事实证明这种尝试是成功的。</P><A id=resources
name=resources></A>
<P><STRONG class=subhead>相关资源</STRONG></P>
<UL>
<LI><B>MiniGUI 资源</B>
<LI style="LIST-STYLE-TYPE: none">
<UL>
<LI><A href="http://www.minigui.org/">MiniGUI 主页</A>
<LI><A href="ftp://ftp.minigui.org/pub/minigui">MiniGUI FTP 站点</A>
</LI></UL>
<LI><B>MiniGUI 邮件列表</B>
<LI style="LIST-STYLE-TYPE: none">
<UL>
<LI>发信:<A
href="mailto:minigui-devel@egroups.com">minigui-devel@egroups.com</A>
<LI>订阅:<A
href="mailto:minigui-devel-subscribe@egroups.com">minigui-devel-subscribe@egroups.com</A>
<LI>解除订阅:<A
href="mailto:minigui-devel-unsubscribe@egroups.com">minigui-devel-unsubscribe@egroups.com</A>
</LI></UL></LI></UL><A id=author name=author></A>
<P><STRONG class=subhead>关于作者</STRONG><BR>宋立新(zjujoe@minigui.org),男,25
岁,工学硕士,MiniGUI开发人员。参与编写《操作系统:中文 Linux 》一书。</P><!-- End paper --><BR></TD>
<TD vAlign=top width=5><IMG height=1 alt=""
src="MiniGUI Lite 版本的新改进.files/c.gif" width=5></TD></TR>
<TR vAlign=top height=5>
<TD vAlign=top width=5></TD>
<TD vAlign=top width=5></TD>
<TD vAlign=top width=5></TD></TR>
<TR vAlign=top height=5>
<TD vAlign=top width=5></TD>
<TD vAlign=top width=5><!-- rate article form -->
<TABLE cellSpacing=0 cellPadding=0 width=150 border=0>
<TBODY>
<TR>
<TD width="100%" height=1><SPACER height="1" type="block" /></TD></TR>
<TR>
<TD width="100%" bgColor=#cc6633 height=3><IMG height=3 alt=""
src="MiniGUI Lite 版本的新改进.files/c.gif" width=150></TD></TR>
<TR>
<TD width="100%" bgColor=#333333 height=1><IMG height=1 alt=""
src="MiniGUI Lite 版本的新改进.files/c.gif" width=150></TD></TR>
<TR>
<TD width="100%" bgColor=#000000 height=1><IMG height=1 alt=""
src="MiniGUI Lite 版本的新改进.files/c.gif" width=150></TD></TR>
<TR>
<TD width="100%" bgColor=#ffffff height=5><IMG height=5 alt=""
src="MiniGUI Lite 版本的新改进.files/c.gif" width=150></TD></TR>
<TR vAlign=top>
<TD>
<FORM
action=/developerWorks/cn/cnratings.nsf/RateArticle?CreateDocument
method=post><!-- paste title here --><INPUT type=hidden
value="MiniGUI Lite 版本的新改进" name=ArticleTitle> <!-- paste zone here --><INPUT type=hidden value=Linux name=Zone>
<INPUT type=hidden
value=/developerWorks/cn/thankyou/feedback-linux.html
name=RedirectURL> <FONT face="HELVETICA, HELV, ARIAL"
size=-1><B>您对这篇文章的看法如何?</B></FONT>
<P></P>
<TABLE cellSpacing=0 cellPadding=0 width=570 border=0>
<TBODY>
<TR vAlign=top>
<TD><INPUT type=radio value=5 name=Rating><FONT
face="HELVETICA, HELV, ARIAL" size=-1>真棒!</FONT></TD>
<TD><INPUT type=radio value=4 name=Rating><FONT
face="HELVETICA, HELV, ARIAL" size=-1>好文章</FONT></TD>
<TD><INPUT type=radio value=3 name=Rating><FONT
face="HELVETICA, HELV, ARIAL" size=-1>一般,尚可</FONT></TD>
<TD><INPUT type=radio value=2 name=Rating><FONT
face="HELVETICA, HELV, ARIAL" size=-1>需提高</FONT></TD>
<TD><INPUT type=radio value=1 name=Rating><FONT
face="HELVETICA, HELV, ARIAL"
size=-1>太差!</FONT></TD></TR></TBODY></TABLE><BR><FONT
face="HELVETICA, HELV, ARIAL" size=-1><B>意见?</B></FONT><BR><TEXTAREA name=Comments rows=3 wrap=virtual cols=52></TEXTAREA><BR><BR><INPUT type=submit value=提交反馈意见></FORM></TD></TR></TBODY></TABLE><!-- end rate article form --></TD>
<TD vAlign=top width=5><!--gutter--></TD></TR>
<TR vAlign=top height=5>
<TD vAlign=top width=5><!--gutter--></TD>
<TD vAlign=top width=5><!--gutter--></TD>
<TD vAlign=top width=5><!--gutter--></TD></TR></TBODY></TABLE><!-- end content --></TD></TR></TABLE><!-- ---------------footer------------------- -->
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD align=right width="100%" colSpan=2 height=30>(c) Copyright IBM Corp.
2001, (c) Copyright IBM China 2001, All Right Reserved</TD></TR>
<TR>
<TD width=150>
<TABLE cellSpacing=0 cellPadding=0 width=150 border=0>
<TBODY>
<TR bgColor=#000000>
<TD align=middle width=49><A class=nav style="COLOR: #ffffff"
href="http://www.ibm.com/privacy/"><FONT face="Arial, sans-serif"
color=#ffffff size=-1>隐私</FONT></A></TD>
<TD width=1 bgColor=#959595><IMG height=20 alt=""
src="MiniGUI Lite 版本的新改进.files/c.gif" width=1 border=0></TD>
<TD align=middle width=49><A class=nav style="COLOR: #ffffff"
href="http://www.ibm.com/legal/"><FONT face="Arial, sans-serif"
color=#ffffff size=-1>法律</FONT></A></TD>
<TD width=1 bgColor=#959595><IMG height=20 alt=""
src="MiniGUI Lite 版本的新改进.files/c.gif" width=1 border=0></TD>
<TD align=middle width=49><A class=nav style="COLOR: #ffffff"
href="http://www.cn.ibm.com/Main.nsf/HTMLS/aboutibm&contactus"><FONT
face="Arial, sans-serif" color=#ffffff size=-1>联系</FONT></A></TD>
<TD width=1 bgColor=#959595><IMG height=21 alt=""
src="MiniGUI Lite 版本的新改进.files/c.gif" width=1
border=0></TD></TR></TBODY></TABLE></TD>
<TD width="100%" bgColor=#000000><IMG height=1 alt=""
src="MiniGUI Lite 版本的新改进.files/c.gif" width=1
border=0></TD></TR></TBODY></TABLE>
<SCRIPT language=JavaScript1.2 src="MiniGUI Lite 版本的新改进.files/stats.js"
type=text/javascript></SCRIPT>
<NOSCRIPT><IMG height=1 alt="" src="D:\新建文件夹\MiniGUI Lite 版本的新改进.files\c(2).gif"
width=1 border=0></NOSCRIPT> </BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -