?? 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 + -