?? minigui lite 版本的新改進(jìn).htm
字號(hào):
多進(jìn)程模型</P>
<P>目前的程序結(jié)構(gòu)使每個(gè)加載的進(jìn)程擁有一個(gè)自已的桌面模型及其消息隊(duì)列,進(jìn)程間的通信依靠以下所提到的進(jìn)程通信模型來完成。</P><STRONG>4.5
進(jìn)程通信模型</STRONG>
<P>這里我們所指的進(jìn)程通信包括通過共享內(nèi)存實(shí)現(xiàn)的數(shù)據(jù)交換和通過套接字實(shí)現(xiàn)的客戶服務(wù)器通信模型。先看在MiniGUI中使用Socket的通信模型結(jié)構(gòu),如圖
10:</P>
<P align=center><IMG height=939 alt=""
src="MiniGUI Lite 版本的新改進(jìn).files/image10.gif" width=651 border=0><BR>圖 10
基于Socket 的通信模型</P>
<P>下面再看看MiniGUI進(jìn)程間的資源共享問題。見圖 11。</P>
<P align=center><IMG height=126 alt=""
src="MiniGUI Lite 版本的新改進(jìn).files/image11.gif" width=601 border=0><BR>圖 11
內(nèi)存共享通信模型</P>
<P>如上圖所示,服務(wù)器負(fù)責(zé)裝入共享資源,其中包括系統(tǒng)圖標(biāo)、位圖、字體等,客戶則通過AttachSharedResource()獲取指向共享資源的指針,初始化一塊共享內(nèi)存及與使用已有共享內(nèi)存的方法在前面的描述中已提到,在此不再贅述。</P><STRONG>4.6
各進(jìn)程之間的同步</STRONG>
<P>這里所指的進(jìn)程同步主要是指各進(jìn)程繪制的同步,顯然,同時(shí)不可能有兩個(gè)進(jìn)程向屏幕繪制。傳統(tǒng)的GUI實(shí)現(xiàn)大多是只有一個(gè)進(jìn)程負(fù)責(zé)繪制,而在我們Lite版本中,各進(jìn)程負(fù)責(zé)自己的繪制。同時(shí),我們的Lite
版本還支持虛屏切換,當(dāng)我們切換出去的時(shí)候,誰也不能夠向屏幕繪制。</P>
<P>Lite 版本利用Unix 信號(hào)解決了繪制同步問題。系統(tǒng)定義了兩個(gè)信號(hào):SIG_SETSCR 和
SIG_DNTDRAW,它們其實(shí)是重定義了的信號(hào)SIGUNUSED和
SIGSTKFLT。每個(gè)進(jìn)程都定義了兩個(gè)變量dont_draw和cant_draw。</P>
<P>服務(wù)器利用SIG_SETSCR和SIG_DNTDRAW來控制各客戶程序誰有權(quán)對屏幕繪制,而不是自己全權(quán)代理。這也使得進(jìn)程間通信量大大減少:當(dāng)服務(wù)器希望一個(gè)客戶程序不要向屏幕繪制時(shí),就向它發(fā)送SIG_DNTDRAW信號(hào),當(dāng)讓其繪制時(shí),則發(fā)送SIG_SETSCR。從而實(shí)現(xiàn)了各進(jìn)程間的屏幕繪制同步。</P>
<P>當(dāng)一個(gè)客戶收到SIG_DNTDRAW時(shí),將自己的變量dont_daw設(shè)置為ture,收到SIG_SETSCR時(shí),則將dont_draw變量設(shè)置為false。另一個(gè)變量cant_draw則是給客戶自己用的,比如,做剪切時(shí),當(dāng)它的剪切域?yàn)榭占瘯r(shí),又比如,當(dāng)進(jìn)行虛屏切換時(shí),當(dāng)前的進(jìn)程將自己的cant_draw變量設(shè)置為true。</P>
<P>另外,如果一個(gè)客戶正在繪圖,我們只有等它畫完后才能讓其他進(jìn)程得到這一權(quán)利。我們不需要知道誰在繪圖,但我們要等到這一過程結(jié)束。Lite版本利用信號(hào)量機(jī)制解決了這一問題。在共享內(nèi)存里保存著一個(gè)變量shmid,各進(jìn)程利用它來實(shí)現(xiàn)各自的鎖機(jī)制。這種機(jī)制有點(diǎn)類似于文件鎖,不過要快許多。</P>
<P>從而,利用信號(hào)量機(jī)制,Lite版本實(shí)現(xiàn)了多進(jìn)程的繪制同步。服務(wù)器利用信號(hào)控制各客戶,而各客戶也充分合作。相關(guān)代碼都在MiniGUI的系統(tǒng)庫里實(shí)現(xiàn)。保證了系統(tǒng)的穩(wěn)定運(yùn)行。</P><A
id=5 name=5></A>
<P><STRONG class=subhead>5 總結(jié)語</STRONG></P>
<P>MiniGUI
Lite版本試圖在傳統(tǒng)的基于線程的單體結(jié)構(gòu)和C/S結(jié)構(gòu)之間尋求一種效率和穩(wěn)定性的折中,以便更加適合運(yùn)行在PDA等小型嵌入式系統(tǒng)中。如今,MiniGUI
Lite版本已經(jīng)穩(wěn)定地運(yùn)行在一些PDA系統(tǒng)上,事實(shí)證明這種嘗試是成功的。</P><A id=resources
name=resources></A>
<P><STRONG class=subhead>相關(guān)資源</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 站點(diǎn)</A>
</LI></UL>
<LI><B>MiniGUI 郵件列表</B>
<LI style="LIST-STYLE-TYPE: none">
<UL>
<LI>發(fā)信:<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>關(guān)于作者</STRONG><BR>宋立新(zjujoe@minigui.org),男,25
歲,工學(xué)碩士,MiniGUI開發(fā)人員。參與編寫《操作系統(tǒng):中文 Linux 》一書。</P><!-- End paper --><BR></TD>
<TD vAlign=top width=5><IMG height=1 alt=""
src="MiniGUI Lite 版本的新改進(jìn).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 版本的新改進(jìn).files/c.gif" width=150></TD></TR>
<TR>
<TD width="100%" bgColor=#333333 height=1><IMG height=1 alt=""
src="MiniGUI Lite 版本的新改進(jìn).files/c.gif" width=150></TD></TR>
<TR>
<TD width="100%" bgColor=#000000 height=1><IMG height=1 alt=""
src="MiniGUI Lite 版本的新改進(jìn).files/c.gif" width=150></TD></TR>
<TR>
<TD width="100%" bgColor=#ffffff height=5><IMG height=5 alt=""
src="MiniGUI Lite 版本的新改進(jìn).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 版本的新改進(jìn)" 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 版本的新改進(jìn).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 版本的新改進(jìn).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>聯(lián)系</FONT></A></TD>
<TD width=1 bgColor=#959595><IMG height=21 alt=""
src="MiniGUI Lite 版本的新改進(jìn).files/c.gif" width=1
border=0></TD></TR></TBODY></TABLE></TD>
<TD width="100%" bgColor=#000000><IMG height=1 alt=""
src="MiniGUI Lite 版本的新改進(jìn).files/c.gif" width=1
border=0></TD></TR></TBODY></TABLE>
<SCRIPT language=JavaScript1.2 src="MiniGUI Lite 版本的新改進(jìn).files/stats.js"
type=text/javascript></SCRIPT>
<NOSCRIPT><IMG height=1 alt="" src="D:\新建文件夾\MiniGUI Lite 版本的新改進(jìn).files\c(2).gif"
width=1 border=0></NOSCRIPT> </BODY></HTML>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -