第15章 實(shí)時(shí)系統(tǒng)的設(shè)計(jì)
實(shí)時(shí)計(jì)算系統(tǒng)的設(shè)計(jì)是一個(gè)軟件工程師所能從事的最有挑戰(zhàn)性和最為復(fù)雜的任務(wù)。由于這個(gè)特點(diǎn),用于實(shí)時(shí)系統(tǒng)的軟件需要其他應(yīng)用領(lǐng)域沒有涉及到的分析、設(shè)計(jì)和測(cè)試技術(shù)。
實(shí)時(shí)軟件是外部世界高度耦合的,也就是說,實(shí)時(shí)軟件必須在問題域規(guī)定的時(shí)間框架內(nèi)對(duì)該問題域(現(xiàn)實(shí)世界)作出響應(yīng)。由于實(shí)時(shí)軟件必須在嚴(yán)格的性能約束下操作,因此軟件的設(shè)計(jì)常常是被硬件及軟件體系結(jié)構(gòu)、操作系統(tǒng)特性、應(yīng)用需求和編程語言的變化所驅(qū)動(dòng)的。
Robert Glass[GLA83]在他關(guān)于實(shí)時(shí)軟件的書中,對(duì)實(shí)時(shí)系統(tǒng)主題給出了一段很有幫助的介紹:
數(shù)字計(jì)算機(jī)在我們所有人的日常生活中正變得日益普及。計(jì)算機(jī)不但可以讓我們玩游戲,還可以報(bào)時(shí)、優(yōu)化最新一代汽車的汽油里程以及控制我們的家用電器……[在工業(yè)上,計(jì)算機(jī)可以控制機(jī)器、協(xié)調(diào)過程,并逐漸用自動(dòng)化系統(tǒng)和“人工智能”來代替手工操作和人的參與。]
所有上述的計(jì)算——不論是有幫助的還是強(qiáng)行引入的——都是實(shí)時(shí)計(jì)算的例子。計(jì)算機(jī)正在控制著某些東西與外部世界的實(shí)時(shí)交互,事實(shí)上,時(shí)間是交互的核心……反應(yīng)遲鈍的實(shí)時(shí)系統(tǒng)比完全沒有系統(tǒng)還要糟糕。
就在十年前,實(shí)時(shí)軟件開發(fā)還被認(rèn)為是一種黑色的藝術(shù),它的從事者是那些充滿嫉妒地保衛(wèi)著他們封閉世界的巫師們。如今,巫師們已經(jīng)供不應(yīng)求了!然而,實(shí)時(shí)軟件的開發(fā)毫無疑問需要特殊的技能。在本章里我們將對(duì)實(shí)時(shí)軟件進(jìn)行研究,并討論建造實(shí)時(shí)軟件所需的某些開發(fā)技能。
15.1系統(tǒng)考慮
與其他任何基于計(jì)算機(jī)的系統(tǒng)一樣,一個(gè)實(shí)時(shí)系統(tǒng)必須將硬件、軟件、人力和數(shù)據(jù)庫(kù)元素集成起來,以恰當(dāng)?shù)貙?shí)現(xiàn)一組功能和性能需求。在第10章中,我們探討了基于計(jì)算機(jī)的系統(tǒng)任務(wù)分配,并指出,系統(tǒng)工程師必須對(duì)系統(tǒng)元素分配功能和性能。實(shí)時(shí)系統(tǒng)的問題在于恰當(dāng)?shù)姆峙?。?shí)時(shí)性能常常與功能一樣重要,但卻很難有把握地作出與性能相關(guān)的分配決策。一個(gè)處理算法能滿足嚴(yán)格的時(shí)間約束嗎,或者說我們應(yīng)該建造特殊的硬件來完成這個(gè)工作?一個(gè)購(gòu)買來的操作系統(tǒng)能夠滿足我們進(jìn)行高效的中斷處理、多任務(wù)和通信的需求嗎,或者說我們應(yīng)該使用自定義的執(zhí)行程序?與推薦的軟件配對(duì)的特定硬件能夠滿足性能標(biāo)準(zhǔn)嗎?所有這些以及其他許多問題都需要由實(shí)時(shí)系統(tǒng)工程師來回答。
對(duì)實(shí)時(shí)系統(tǒng)所有成分的詳細(xì)討論已經(jīng)超出了本書的范圍,在[SAV85]、[ELL94]和[SEL94]等文獻(xiàn)中有大量好的有關(guān)這方面的信息,但是,在討論軟件分析和設(shè)計(jì)問題前我們對(duì)實(shí)時(shí)系統(tǒng)的各個(gè)元素能有所理解還是非常重要的。
Everett[EVE95]定義了實(shí)時(shí)軟件開發(fā)不同于其他軟件工程的三個(gè)特征:
·實(shí)時(shí)系統(tǒng)的設(shè)計(jì)是受資源約束的。時(shí)間是實(shí)時(shí)系統(tǒng)的首要資源,關(guān)鍵是要在指定數(shù)目的CPU周期內(nèi)完成一個(gè)定義好的任務(wù),除此以外,其他系統(tǒng)資源,如內(nèi)存大小等,在實(shí)現(xiàn)系統(tǒng)目標(biāo)時(shí)都有可能和時(shí)間進(jìn)行折衷。
·實(shí)時(shí)系統(tǒng)是緊湊而復(fù)雜的。盡管一個(gè)復(fù)雜的實(shí)時(shí)系統(tǒng)可能包含上百萬行的代碼,但軟件中有關(guān)時(shí)間標(biāo)準(zhǔn)的代碼一般只占很小一部分。這一小部分代碼是最為復(fù)雜的(從算法的角度來說)。
·實(shí)時(shí)系統(tǒng)的運(yùn)行常常不需要用戶的參與。因此,實(shí)時(shí)軟件必須能檢測(cè)到導(dǎo)致故障的問題,并在對(duì)數(shù)據(jù)和控制環(huán)境造成破壞前改正這些問題。
在下面一節(jié)中,我們將探討一下實(shí)時(shí)系統(tǒng)不同于其他類型計(jì)算機(jī)軟件的一些關(guān)鍵性屬性。
15.2 實(shí)時(shí)系統(tǒng)
實(shí)時(shí)系統(tǒng)產(chǎn)生某種動(dòng)作以響應(yīng)外部世界。為了完成這個(gè)功能,它們能高速地獲取數(shù)據(jù),并在嚴(yán)格的時(shí)間和可靠性約束控制下。由于這些約束是如此苛刻,實(shí)時(shí)系統(tǒng)通常只用于滿足單個(gè)的應(yīng)用。
實(shí)時(shí)系統(tǒng)廣泛地用于各種應(yīng)用領(lǐng)域,包括軍用的命令與控制系統(tǒng)、消費(fèi)者電器、過程控制、工業(yè)自動(dòng)化、醫(yī)療和科學(xué)研究、計(jì)算機(jī)圖形、局域和廣域通信、航天系統(tǒng)、計(jì)算機(jī)輔助測(cè)試以及大量的工業(yè)儀器。
15.2.1集成和性能問題
為了將一個(gè)實(shí)時(shí)系統(tǒng)組織在一起,系統(tǒng)工程師需要作出困難的硬件和軟件決策。(實(shí)時(shí)系統(tǒng)與硬件相關(guān)的分配問題超出了本書的范圍;更多的信息請(qǐng)參閱文獻(xiàn)[SAV85]。)一旦分配好軟件成分,就要建立詳細(xì)的軟件需求,并必須開發(fā)出一個(gè)基本的軟件設(shè)計(jì)。許多實(shí)時(shí)設(shè)計(jì)關(guān)心的是實(shí)時(shí)任務(wù)間的協(xié)調(diào)、系統(tǒng)中斷的處理、保證不丟失數(shù)據(jù)的I/O處理、指定系統(tǒng)的內(nèi)部和外部時(shí)間約束、以及確保數(shù)據(jù)庫(kù)的準(zhǔn)確度等。
實(shí)時(shí)設(shè)計(jì)關(guān)注的每個(gè)部分都必須應(yīng)用到系統(tǒng)性能這個(gè)語境中。在大多數(shù)情況下,一個(gè)實(shí)時(shí)系統(tǒng)的性能是由一個(gè)或多個(gè)與時(shí)間相關(guān)的特征來測(cè)度的,但也可能用容錯(cuò)性之類的指標(biāo)來測(cè)度。
某些實(shí)時(shí)系統(tǒng)是設(shè)計(jì)來用于那些只關(guān)注反應(yīng)時(shí)間或數(shù)據(jù)傳輸率的應(yīng)用中,其他實(shí)時(shí)應(yīng)用還需要對(duì)峰值負(fù)載條件下的這兩個(gè)參數(shù)進(jìn)行優(yōu)化,而且,實(shí)時(shí)系統(tǒng)必須在執(zhí)行一系列并發(fā)任務(wù)時(shí)處理它們的峰值負(fù)載。
由于一個(gè)實(shí)時(shí)系統(tǒng)的性能主要由系統(tǒng)響應(yīng)時(shí)間和它的數(shù)據(jù)傳輸率決定,所以理解這兩個(gè)參數(shù)是很重要的。系統(tǒng)的響應(yīng)時(shí)間是從系統(tǒng)檢測(cè)到一個(gè)內(nèi)部或外部事件到發(fā)出響應(yīng)動(dòng)作這段時(shí)間,事件檢測(cè)和反應(yīng)生成常常是很簡(jiǎn)單的,對(duì)事件信息進(jìn)行處理以判斷合適的反應(yīng)往往會(huì)涉及到復(fù)雜耗時(shí)的算法。
實(shí)時(shí)計(jì)算系統(tǒng)的設(shè)計(jì)是一個(gè)軟件工程師所能從事的最有挑戰(zhàn)性和最為復(fù)雜的任務(wù)。由于這個(gè)特點(diǎn),用于實(shí)時(shí)系統(tǒng)的軟件需要其他應(yīng)用領(lǐng)域沒有涉及到的分析、設(shè)計(jì)和測(cè)試技術(shù)。
實(shí)時(shí)軟件是外部世界高度耦合的,也就是說,實(shí)時(shí)軟件必須在問題域規(guī)定的時(shí)間框架內(nèi)對(duì)該問題域(現(xiàn)實(shí)世界)作出響應(yīng)。由于實(shí)時(shí)軟件必須在嚴(yán)格的性能約束下操作,因此軟件的設(shè)計(jì)常常是被硬件及軟件體系結(jié)構(gòu)、操作系統(tǒng)特性、應(yīng)用需求和編程語言的變化所驅(qū)動(dòng)的。
Robert Glass[GLA83]在他關(guān)于實(shí)時(shí)軟件的書中,對(duì)實(shí)時(shí)系統(tǒng)主題給出了一段很有幫助的介紹:
數(shù)字計(jì)算機(jī)在我們所有人的日常生活中正變得日益普及。計(jì)算機(jī)不但可以讓我們玩游戲,還可以報(bào)時(shí)、優(yōu)化最新一代汽車的汽油里程以及控制我們的家用電器……[在工業(yè)上,計(jì)算機(jī)可以控制機(jī)器、協(xié)調(diào)過程,并逐漸用自動(dòng)化系統(tǒng)和“人工智能”來代替手工操作和人的參與。]
所有上述的計(jì)算——不論是有幫助的還是強(qiáng)行引入的——都是實(shí)時(shí)計(jì)算的例子。計(jì)算機(jī)正在控制著某些東西與外部世界的實(shí)時(shí)交互,事實(shí)上,時(shí)間是交互的核心……反應(yīng)遲鈍的實(shí)時(shí)系統(tǒng)比完全沒有系統(tǒng)還要糟糕。
就在十年前,實(shí)時(shí)軟件開發(fā)還被認(rèn)為是一種黑色的藝術(shù),它的從事者是那些充滿嫉妒地保衛(wèi)著他們封閉世界的巫師們。如今,巫師們已經(jīng)供不應(yīng)求了!然而,實(shí)時(shí)軟件的開發(fā)毫無疑問需要特殊的技能。在本章里我們將對(duì)實(shí)時(shí)軟件進(jìn)行研究,并討論建造實(shí)時(shí)軟件所需的某些開發(fā)技能。
15.1系統(tǒng)考慮
與其他任何基于計(jì)算機(jī)的系統(tǒng)一樣,一個(gè)實(shí)時(shí)系統(tǒng)必須將硬件、軟件、人力和數(shù)據(jù)庫(kù)元素集成起來,以恰當(dāng)?shù)貙?shí)現(xiàn)一組功能和性能需求。在第10章中,我們探討了基于計(jì)算機(jī)的系統(tǒng)任務(wù)分配,并指出,系統(tǒng)工程師必須對(duì)系統(tǒng)元素分配功能和性能。實(shí)時(shí)系統(tǒng)的問題在于恰當(dāng)?shù)姆峙?。?shí)時(shí)性能常常與功能一樣重要,但卻很難有把握地作出與性能相關(guān)的分配決策。一個(gè)處理算法能滿足嚴(yán)格的時(shí)間約束嗎,或者說我們應(yīng)該建造特殊的硬件來完成這個(gè)工作?一個(gè)購(gòu)買來的操作系統(tǒng)能夠滿足我們進(jìn)行高效的中斷處理、多任務(wù)和通信的需求嗎,或者說我們應(yīng)該使用自定義的執(zhí)行程序?與推薦的軟件配對(duì)的特定硬件能夠滿足性能標(biāo)準(zhǔn)嗎?所有這些以及其他許多問題都需要由實(shí)時(shí)系統(tǒng)工程師來回答。
對(duì)實(shí)時(shí)系統(tǒng)所有成分的詳細(xì)討論已經(jīng)超出了本書的范圍,在[SAV85]、[ELL94]和[SEL94]等文獻(xiàn)中有大量好的有關(guān)這方面的信息,但是,在討論軟件分析和設(shè)計(jì)問題前我們對(duì)實(shí)時(shí)系統(tǒng)的各個(gè)元素能有所理解還是非常重要的。
Everett[EVE95]定義了實(shí)時(shí)軟件開發(fā)不同于其他軟件工程的三個(gè)特征:
·實(shí)時(shí)系統(tǒng)的設(shè)計(jì)是受資源約束的。時(shí)間是實(shí)時(shí)系統(tǒng)的首要資源,關(guān)鍵是要在指定數(shù)目的CPU周期內(nèi)完成一個(gè)定義好的任務(wù),除此以外,其他系統(tǒng)資源,如內(nèi)存大小等,在實(shí)現(xiàn)系統(tǒng)目標(biāo)時(shí)都有可能和時(shí)間進(jìn)行折衷。
·實(shí)時(shí)系統(tǒng)是緊湊而復(fù)雜的。盡管一個(gè)復(fù)雜的實(shí)時(shí)系統(tǒng)可能包含上百萬行的代碼,但軟件中有關(guān)時(shí)間標(biāo)準(zhǔn)的代碼一般只占很小一部分。這一小部分代碼是最為復(fù)雜的(從算法的角度來說)。
·實(shí)時(shí)系統(tǒng)的運(yùn)行常常不需要用戶的參與。因此,實(shí)時(shí)軟件必須能檢測(cè)到導(dǎo)致故障的問題,并在對(duì)數(shù)據(jù)和控制環(huán)境造成破壞前改正這些問題。
在下面一節(jié)中,我們將探討一下實(shí)時(shí)系統(tǒng)不同于其他類型計(jì)算機(jī)軟件的一些關(guān)鍵性屬性。
15.2 實(shí)時(shí)系統(tǒng)
實(shí)時(shí)系統(tǒng)產(chǎn)生某種動(dòng)作以響應(yīng)外部世界。為了完成這個(gè)功能,它們能高速地獲取數(shù)據(jù),并在嚴(yán)格的時(shí)間和可靠性約束控制下。由于這些約束是如此苛刻,實(shí)時(shí)系統(tǒng)通常只用于滿足單個(gè)的應(yīng)用。
實(shí)時(shí)系統(tǒng)廣泛地用于各種應(yīng)用領(lǐng)域,包括軍用的命令與控制系統(tǒng)、消費(fèi)者電器、過程控制、工業(yè)自動(dòng)化、醫(yī)療和科學(xué)研究、計(jì)算機(jī)圖形、局域和廣域通信、航天系統(tǒng)、計(jì)算機(jī)輔助測(cè)試以及大量的工業(yè)儀器。
15.2.1集成和性能問題
為了將一個(gè)實(shí)時(shí)系統(tǒng)組織在一起,系統(tǒng)工程師需要作出困難的硬件和軟件決策。(實(shí)時(shí)系統(tǒng)與硬件相關(guān)的分配問題超出了本書的范圍;更多的信息請(qǐng)參閱文獻(xiàn)[SAV85]。)一旦分配好軟件成分,就要建立詳細(xì)的軟件需求,并必須開發(fā)出一個(gè)基本的軟件設(shè)計(jì)。許多實(shí)時(shí)設(shè)計(jì)關(guān)心的是實(shí)時(shí)任務(wù)間的協(xié)調(diào)、系統(tǒng)中斷的處理、保證不丟失數(shù)據(jù)的I/O處理、指定系統(tǒng)的內(nèi)部和外部時(shí)間約束、以及確保數(shù)據(jù)庫(kù)的準(zhǔn)確度等。
實(shí)時(shí)設(shè)計(jì)關(guān)注的每個(gè)部分都必須應(yīng)用到系統(tǒng)性能這個(gè)語境中。在大多數(shù)情況下,一個(gè)實(shí)時(shí)系統(tǒng)的性能是由一個(gè)或多個(gè)與時(shí)間相關(guān)的特征來測(cè)度的,但也可能用容錯(cuò)性之類的指標(biāo)來測(cè)度。
某些實(shí)時(shí)系統(tǒng)是設(shè)計(jì)來用于那些只關(guān)注反應(yīng)時(shí)間或數(shù)據(jù)傳輸率的應(yīng)用中,其他實(shí)時(shí)應(yīng)用還需要對(duì)峰值負(fù)載條件下的這兩個(gè)參數(shù)進(jìn)行優(yōu)化,而且,實(shí)時(shí)系統(tǒng)必須在執(zhí)行一系列并發(fā)任務(wù)時(shí)處理它們的峰值負(fù)載。
由于一個(gè)實(shí)時(shí)系統(tǒng)的性能主要由系統(tǒng)響應(yīng)時(shí)間和它的數(shù)據(jù)傳輸率決定,所以理解這兩個(gè)參數(shù)是很重要的。系統(tǒng)的響應(yīng)時(shí)間是從系統(tǒng)檢測(cè)到一個(gè)內(nèi)部或外部事件到發(fā)出響應(yīng)動(dòng)作這段時(shí)間,事件檢測(cè)和反應(yīng)生成常常是很簡(jiǎn)單的,對(duì)事件信息進(jìn)行處理以判斷合適的反應(yīng)往往會(huì)涉及到復(fù)雜耗時(shí)的算法。