專利名稱:用于資源受限設(shè)備的虛擬執(zhí)行系統(tǒng)的制作方法
用于資源受限設(shè)備的虛擬執(zhí)行系統(tǒng)
本技術(shù)領(lǐng)域一般是虛擬執(zhí)行系統(tǒng)的領(lǐng)域。更具體地,本技術(shù)領(lǐng)域涉及在資 源受限設(shè)備中虛擬執(zhí)行系統(tǒng)的使用。
資源受限設(shè)備是通常具有比臺式計算機(jī)大得多的對計算資源和存儲器的 約束的電子設(shè)備。資源受限設(shè)備的示例包括移動電話、個人數(shù)字助理、手持式 計算機(jī)、游戲控制臺、機(jī)頂盒、基于衛(wèi)星的定位設(shè)備(例如,全球定位系統(tǒng)
("GPS")設(shè)備)和傳感器節(jié)點(diǎn)。資源受限設(shè)備是在一設(shè)備中幫助虛擬執(zhí)行 環(huán)境的虛擬執(zhí)行系統(tǒng)(也被稱為運(yùn)行時環(huán)境)感興趣的目標(biāo)。虛擬執(zhí)行系統(tǒng)是 能夠以軟件或以硬件和軟件的組合實(shí)現(xiàn)的程序執(zhí)行系統(tǒng),其使高級應(yīng)用程序能 夠在不考慮該應(yīng)用程序與設(shè)備的操作系統(tǒng)或硬件的兼容性的情況下執(zhí)行。因 此,虛擬執(zhí)行系統(tǒng)向應(yīng)用程序提供了與設(shè)備的操作系統(tǒng)或硬件的獨(dú)立性。
在資源受限設(shè)備中使用虛擬執(zhí)行系統(tǒng)的主要原因是通常難以在資源受限 設(shè)備上進(jìn)行本機(jī)編程,即使用設(shè)備的內(nèi)部文件格式的編程。難以在資源受限設(shè) 備上進(jìn)行本機(jī)編程是因?yàn)樵谀切┵Y源受限設(shè)備上提供的本機(jī)編程模型(包括應(yīng) 用程序接口 ( "API" ) , S卩,用于創(chuàng)建應(yīng)用程序的例程、協(xié)議和工具,以及 可用于編寫應(yīng)用程序的編程概念)和編程語言經(jīng)常難以理解并且沒有為應(yīng)用程 序員提供簡單的接口。
運(yùn)行時技術(shù),即在應(yīng)用程序的執(zhí)行期間操作并且?guī)椭摂M執(zhí)行系統(tǒng)的技 術(shù),有可能顯著改善在資源受限設(shè)備上實(shí)現(xiàn)應(yīng)用程序的過程。示例運(yùn)行時技術(shù) 包括以下由加利福尼亞州的圣克拉拉市的Sun微系統(tǒng)有限公司創(chuàng)建的JAVA 虛擬機(jī)("JVM");以及作為國際標(biāo)準(zhǔn)的公共語言基礎(chǔ)結(jié)構(gòu)("CLI")。 公共語言運(yùn)行庫("CLR")是由華盛頓州雷蒙德市的微軟公司創(chuàng)建的CLI的 實(shí)現(xiàn)。運(yùn)行時技術(shù)允許應(yīng)用程序用各種高級語言的任一種來編寫并且仍然在不 同的系統(tǒng)環(huán)境中執(zhí)行。應(yīng)用程序開發(fā)者將符合運(yùn)行時技術(shù)的這些高級語言編譯 成中間語言,例如,公共中間語言("CIL")或JAVA字節(jié)碼。該中間語言 進(jìn)而在程序執(zhí)行期間被變換成特定于設(shè)備的體系結(jié)構(gòu)的本機(jī)代碼。雖然虛擬執(zhí)行系統(tǒng)從應(yīng)用程序員的觀點(diǎn)來看是極度需要的,但是在資源受 限設(shè)備上使用運(yùn)行時技術(shù)的主要缺點(diǎn)是對于該設(shè)備的性能損失。關(guān)于該性能損 失的原因之一是由虛擬執(zhí)行系統(tǒng)的運(yùn)行時技術(shù)支持的編程模型與同資源受限 設(shè)備的操作系統(tǒng)和硬件相關(guān)聯(lián)的編程模型之間的差異。該性能損失是不合需要 的,并且對于資源受限設(shè)備而言是不容許的。
與在資源受限設(shè)備中使用虛擬執(zhí)行系統(tǒng)相關(guān)聯(lián)的另一個問題是資源受限 設(shè)備的操作系統(tǒng)所提供的能力及所具有的限制與包括在臺式系統(tǒng)中的操作系 統(tǒng)不同。因此,將由虛擬執(zhí)行系統(tǒng)展示的編程模型映射到資源受限設(shè)備中的操 作系統(tǒng)的API和運(yùn)行時結(jié)構(gòu)是具有挑戰(zhàn)性的。與此同時,應(yīng)用程序員期望利用 底層操作系統(tǒng)的附加能力。
概述
提供本概述以便以簡化的形式介紹將在以下詳細(xì)描述中進(jìn)一步描述的一 些概念。該概述不旨在標(biāo)識所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨 在用于幫助確定所要求保護(hù)的主題的范圍。
在詳細(xì)描述中更詳細(xì)描述的各實(shí)施例包括虛擬執(zhí)行系統(tǒng)、資源受限設(shè)備和 用于提高資源受限設(shè)備中的性能的相關(guān)方法。 一個示例性實(shí)施例是一種被配置 成在資源受限設(shè)備中使用的虛擬執(zhí)行系統(tǒng)。該資源受限設(shè)備包括操作系統(tǒng)和包 括指令的應(yīng)用程序。該虛擬執(zhí)行系統(tǒng)包括執(zhí)行引擎,其被配置成執(zhí)行應(yīng)用程序 以及幫助應(yīng)用程序與操作系統(tǒng)的兼容。非功能方面表征指令和操作系統(tǒng)。該執(zhí) 行引擎可訪問非功能方面,并且基于該非功能方面在應(yīng)用程序的執(zhí)行期間實(shí)現(xiàn) 改進(jìn)。
現(xiàn)在將作為示例,參考所附附圖描述本發(fā)明的各實(shí)施例,附圖中
圖1是包括在資源受限設(shè)備中的通用分層結(jié)構(gòu)的框圖。該通用分層結(jié)構(gòu)包
括應(yīng)用程序、虛擬執(zhí)行系統(tǒng)、平臺自適應(yīng)層、操作系統(tǒng)和硬件。
圖2是表示圖1的虛擬執(zhí)行系統(tǒng)和/或平臺自適應(yīng)層所采取的步驟的示例
性算法的流程圖。
圖3是對套接字函數(shù)的調(diào)用的平臺自適應(yīng)層實(shí)現(xiàn)的框圖。
圖4是對套接字函數(shù)的調(diào)用的第一平臺自適應(yīng)層實(shí)現(xiàn)的框圖,其中應(yīng)用程序線程被表示為活動對象。
圖5是對套接字函數(shù)的調(diào)用的第二平臺自適應(yīng)層實(shí)現(xiàn)的框圖,其中應(yīng)用程 序線程被表示為活動對象。
圖6是示出在有和沒有附加平臺自適應(yīng)層線程的情況下在SYBMIAN控制 臺上的打印語句的性能的曲線圖。
圖7是示出在有和沒有中間平臺自適應(yīng)層線程的情況下低復(fù)雜度操作的 性能的曲線圖。
圖8是示出應(yīng)用程序線程數(shù)量對在仿真器上執(zhí)行排序的平臺自適應(yīng)層函 數(shù)的性能的影響的曲線圖。
圖9是示出應(yīng)用程序線程數(shù)量對在資源受限設(shè)備上執(zhí)行排序的平臺自適 應(yīng)層函數(shù)的性能的影響的曲線圖。
圖10是示出使用托管與非托管線程對資源受限設(shè)備的性能的影響的曲線圖。
圖1是示例性資源受限設(shè)備的軟件和硬件分層體系結(jié)構(gòu)10的框圖。在設(shè) 備12中示出包括指令16并且存儲在第一計算機(jī)可讀介質(zhì)18中的應(yīng)用程序14; 包括類庫22和執(zhí)行引擎24的虛擬執(zhí)行系統(tǒng)20;平臺自適應(yīng)層("PAL" ) 26; 操作系統(tǒng)28,其展示,S卩,提供、支持、和/或允許通過提供明確定義的接口、 一組API和內(nèi)部數(shù)據(jù)結(jié)構(gòu)30 (該內(nèi)部數(shù)據(jù)結(jié)構(gòu)在運(yùn)行時期間被稱為"運(yùn)行時 結(jié)構(gòu)")來使用底層服務(wù)并且存儲在第二計算機(jī)可讀介質(zhì)32中;以及硬件34, 例如,資源受限設(shè)備的微處理器、隨機(jī)存取存儲器("RAM")、只讀存儲器 ("ROM")和藍(lán)牙硬件組件。因此,當(dāng)認(rèn)為操作系統(tǒng)展示一組API和內(nèi)部 數(shù)據(jù)結(jié)構(gòu)時,這意味著該操作系統(tǒng)具有可被應(yīng)用程序、應(yīng)用程序員、和/或虛擬 執(zhí)行系統(tǒng)使用的一組API和內(nèi)部數(shù)據(jù)結(jié)構(gòu)。
PAL 26與虛擬執(zhí)行系統(tǒng)20接口并且直接與操作系統(tǒng)28和硬件34進(jìn)行通 信。PAL是處理底層操作系統(tǒng)服務(wù)對虛擬執(zhí)行系統(tǒng)的編程模型的自適應(yīng)的組件 的邏輯抽象。操作系統(tǒng)用作硬件與在設(shè)備12上運(yùn)行的軟件之間的接口。每個 計算機(jī)可讀介質(zhì)18和32可以是例如,RAM、ROM、EEPROM、閃存、CDROM、 DVD、光盤、磁帶盒、磁帶、磁盤驅(qū)動器、或可用于存儲信息的任何其他介質(zhì)。同樣,第一計算機(jī)可讀介質(zhì)18和第二計算機(jī)可讀介質(zhì)32可包括在單個計算機(jī) 可讀介質(zhì)中。
類庫22包括被執(zhí)行引擎24使用的數(shù)據(jù)。執(zhí)行引擎被配置成執(zhí)行應(yīng)用程序 14以及幫助應(yīng)用程序與操作系統(tǒng)28的兼容。該執(zhí)行引擎讀取中間語言代碼、 利用來自類庫的數(shù)據(jù)、并且轉(zhuǎn)換該信息以使其可被設(shè)備的操作系統(tǒng)和硬件34 使用。PAL被配置成將來自應(yīng)用程序的指令映射到在底層操作系統(tǒng)中的API 和運(yùn)行時結(jié)構(gòu)30。圖1是示例性的,并且可取決于資源受限設(shè)備12的獨(dú)特特 性從圖1中添加、組合、或移除各種硬件和/軟件組件。
縮小由虛擬執(zhí)行系統(tǒng)20支持的編程模型與由資源受限設(shè)備12支持的編程 模型之間的信息差異是重要的。以下討論的各示例實(shí)施例通過增加虛擬執(zhí)行系 統(tǒng)的編程模型對資源受限設(shè)備的編程模型的認(rèn)識來縮小該信息差異。更具體 地,各實(shí)施例使虛擬執(zhí)行系統(tǒng),尤其是結(jié)合PAL26的執(zhí)行引擎24更容易將來 自該虛擬執(zhí)行系統(tǒng)使用的中間語言的指令映射到底層操作系統(tǒng)28的合適的 API和運(yùn)行時結(jié)構(gòu)30。這些映射的示例包括以下將虛擬執(zhí)行系統(tǒng)中所支持的 線程化模型映射到由資源受限設(shè)備的操作系統(tǒng)展示的線程化模型,以及映射虛 擬執(zhí)行系統(tǒng)中所支持的訪問文件的方法以使其有效地考慮底層操作系統(tǒng)的安 全限制。
通過增加虛擬執(zhí)行系統(tǒng)20,尤其是執(zhí)行引擎24對與將由虛擬執(zhí)行系統(tǒng)執(zhí) 行的應(yīng)用程序的指令16以及設(shè)備的操作系統(tǒng)28相關(guān)的非功能方面的認(rèn)識來做 出性能提高。這通過用描述非功能方面的元數(shù)據(jù)擴(kuò)充應(yīng)用程序指令來完成。這 些非功能方面可包括,例如,關(guān)于及時性、安全性、資源需求、網(wǎng)絡(luò)生存期、 實(shí)時方面、能量消耗、和/或執(zhí)行模式的信息。非功能方面向虛擬執(zhí)行系統(tǒng)提供 關(guān)于如何通過考慮應(yīng)用程序14的需求特性以及設(shè)備的底層操作系統(tǒng)的特性來 優(yōu)化性能的額外知識。具體地,非功能方面被虛擬執(zhí)行系統(tǒng)用來找出設(shè)備的操 作系統(tǒng)中適當(dāng)?shù)腁PI和運(yùn)行時結(jié)構(gòu)30。
以下是虛擬執(zhí)行系統(tǒng)20所采取的示例步驟。首先,分析由操作系統(tǒng)28 提供給資源受限設(shè)備12的API和運(yùn)行時結(jié)構(gòu)30。其次,找出如何將虛擬執(zhí)行 系統(tǒng)的編程模型(例如,API和運(yùn)行時結(jié)構(gòu))映射到底層操作系統(tǒng)的方法。第 三,在PAL26中實(shí)現(xiàn)這些不同的方法(任選地,對執(zhí)行引擎24的添加可能是必須的)。第四,允許執(zhí)行引擎在不同的實(shí)現(xiàn)之間切換。第五,將描述非功能 方面的元數(shù)據(jù)添加到指令。元數(shù)據(jù)的添加可由程序員在指令層上完成。元數(shù)據(jù) 的添加還可基于簡檔對于特定類型的所有指令自動完成。第六,執(zhí)行引擎能夠 使用非功能方面來提供到操作系統(tǒng)的改進(jìn)的映射,或利用最初并未包括在虛擬 執(zhí)行系統(tǒng)的編程模型中的操作系統(tǒng)特征,例如,關(guān)于訪問操作系統(tǒng)中的套接字 /文件的安全問題。
表示虛擬執(zhí)行系統(tǒng)20結(jié)合PAL 26所采取的步驟的示例性算法36在圖2 中示出。該算法可以用存儲在計算機(jī)可讀介質(zhì)18和32中的計算機(jī)可讀介質(zhì)指 令來實(shí)現(xiàn)。在該算法開始38之后,下一步驟40是使虛擬執(zhí)行系統(tǒng)標(biāo)識應(yīng)用程 序的指令16的非功能方面和操作系統(tǒng)28的非功能方面。在步驟42處,將非 功能方面提供給虛擬執(zhí)行系統(tǒng),其在步驟44處在應(yīng)用程序14的執(zhí)行期間使用 該非功能方面。接著,在步驟46處,虛擬執(zhí)行系統(tǒng)結(jié)合PAL標(biāo)識操作系統(tǒng)中 的API和運(yùn)行時結(jié)構(gòu)30。在步驟48處,虛擬執(zhí)行系統(tǒng)在應(yīng)用程序的執(zhí)行期間 考慮該API和運(yùn)行時結(jié)構(gòu)以及該非功能方面。在步驟50處,PAL結(jié)合虛擬執(zhí) 行系統(tǒng)將指令映射到該API和運(yùn)行時結(jié)構(gòu)。該算法在步驟52處結(jié)束。
被虛擬執(zhí)行系統(tǒng)20利用的非功能方面使用與該虛擬執(zhí)行系統(tǒng)兼容的某種 形式的中間語言編碼的元數(shù)據(jù)來描述。給定該元數(shù)據(jù),虛擬執(zhí)行系統(tǒng)能夠執(zhí)行 幫助將運(yùn)行時技術(shù)部署在資源受限設(shè)備12上的各種各樣的優(yōu)化。例如,如果 某些實(shí)時方面在執(zhí)行一功能時是重要的,則虛擬執(zhí)行系統(tǒng)能夠基于底層操作系 統(tǒng)28的能力來自動確定特定指令的優(yōu)先級。同樣,關(guān)于安全問題的信息對于 提高的性能而言是重要的。例如,在沒有關(guān)于安全約束的附加信息的情況下, 必須支持最強(qiáng)的安全機(jī)制,這可導(dǎo)致性能損失。此外,關(guān)于執(zhí)行模式的信息(例 如, 一函數(shù)是否意味著對底層操作系統(tǒng)的異步函數(shù)調(diào)用)可用于找出用于提高 的性能的合適API和運(yùn)行時結(jié)構(gòu)30。
在一個實(shí)施例中,資源受限設(shè)備12中的操作系統(tǒng)28包括API和運(yùn)行時結(jié) 構(gòu)30,其被配置成執(zhí)行作為在.NET環(huán)境中運(yùn)行的代碼的托管代碼。該托管代 碼的執(zhí)行由CLR控制,CLR是.NET應(yīng)用程序在其中運(yùn)行的運(yùn)行時環(huán)境。CLR 被分層在.NET應(yīng)用程序與底層操作系統(tǒng)之間。在執(zhí)行期間,CLR能夠停止執(zhí) 行引擎24并且檢索以中間語言編碼的信息,例如,元數(shù)據(jù)。為了允許必須的性能提高,附加信息被嵌入到托管代碼中以允許執(zhí)行引擎
24中和PAL26處的優(yōu)化。該附加信息對于例如,調(diào)用機(jī)制("PInvoke")等各 種編程機(jī)制而言是重要的,調(diào)用機(jī)制是.NET語言用于調(diào)用動態(tài)鏈接庫("DLL") 中的非托管函數(shù)的機(jī)制。附加信息對于托管代碼庫而言也是重要的。對于將附 加數(shù)據(jù)注入托管代碼,CLI支持可擴(kuò)展元數(shù)據(jù)模型。
一般地,使用元數(shù)據(jù)來描述CLI中的公共類型系統(tǒng)("CTS")中的類型。 CTS是用于定義如何在運(yùn)行時環(huán)境中聲明、使用和管理各種類型的數(shù)據(jù)的規(guī) 范。元數(shù)據(jù)可在運(yùn)行時被執(zhí)行引擎24訪問以加載類或執(zhí)行運(yùn)行時檢查。在資 源受限設(shè)備12上,使用元數(shù)據(jù)來使虛擬執(zhí)行系統(tǒng)20與PAL 26能夠一起通過 考慮底層操作系統(tǒng)28的API和運(yùn)行時結(jié)構(gòu)30來執(zhí)行更多的優(yōu)化。在如同C# 的CLI編程語言中,屬性是將元數(shù)據(jù)添加到例如數(shù)據(jù)、方法、類和接口的機(jī)制。 對于自定義屬性的使用的替換方案是直接擴(kuò)展PInvoke機(jī)制的句法以允許性能 提高;這也將影響可被執(zhí)行引擎訪問的元數(shù)據(jù)。
附連到PInvoke機(jī)制和其他指令16的這種元數(shù)據(jù)允許執(zhí)行引擎24動態(tài)地 執(zhí)行優(yōu)化以將托管代碼指令映射到底層操作系統(tǒng)28的合適API和運(yùn)行時結(jié)構(gòu) 30上。所附連的元數(shù)據(jù)描述將由虛擬執(zhí)行系統(tǒng)20執(zhí)行的指令的非功能方面。 例如,考慮標(biāo)準(zhǔn)PInvoke機(jī)制,元數(shù)據(jù)主要著重于功能方面,諸如函數(shù)名、函 數(shù)標(biāo)號、自變量類型、調(diào)用約定和數(shù)據(jù)編組(見ECMA標(biāo)準(zhǔn)ECMA-335的15.5 節(jié))等。此處,PInvoke機(jī)制由非功能方面來擴(kuò)展,這允許PAL中的優(yōu)化。這 些非功能方面的示例是關(guān)于安全約束的信息、關(guān)于函數(shù)調(diào)用的側(cè)放作用的信 息、關(guān)于定時問題的信息和關(guān)于執(zhí)行模式的信息,例如,函數(shù)是否是異步的。
以下所討論的在三個示例中的特定非功能方面提供關(guān)于函數(shù)是否映射到 異步函數(shù)調(diào)用、關(guān)于安全約束以及關(guān)于底層操作系統(tǒng)28的特性的信息。在這 三個示例中,討論了用于處理用于由英國倫敦市的Symbian有限公司提供的 SYMBIAN操作系統(tǒng)的虛擬執(zhí)行系統(tǒng)20中的安全、存儲器和線程化問題的特 定技術(shù)。這三個示例實(shí)現(xiàn)CLR到SYMBIAN操作系統(tǒng)的移植,g卩,應(yīng)用程序 14從一種類型的計算機(jī)到另一種類型的計算機(jī)的轉(zhuǎn)移。SYMBIAN操作系統(tǒng)是 用于啟用數(shù)據(jù)的移動電話,例如被配置成訪問因特網(wǎng)的移動電話的操作系統(tǒng)。 SYMBIAN操作系統(tǒng)提供一種與由CLR提供的編程模型不同的編程模型,并且CLR/SYMBIAN接口示出與將運(yùn)行時技術(shù)移植到資源受限設(shè)備12相關(guān)聯(lián)的 某些困難。
雖然以下討論的重點(diǎn)將會在符合CLI的虛擬執(zhí)行系統(tǒng)20上,但是本文中 包括的示教可應(yīng)用于不同的運(yùn)行時技術(shù),例如JVM,并且應(yīng)用于除了 SYMBIAN操作系統(tǒng)之外的不同的操作系統(tǒng)28,例如通常在小型傳感器設(shè)備上 使用的TINYOS。
示例h SYMBIAN智能電話上的安全約束
當(dāng)將虛擬執(zhí)行系統(tǒng)20移植到資源受限設(shè)備12時,期望維持該設(shè)備的底層 操作系統(tǒng)28的附加安全機(jī)制。即使安全機(jī)制并非可直接被由虛擬執(zhí)行系統(tǒng)支 持的編程語言14訪問,亦是如此。附加安全約束常常是對可靠性的特殊需求 以及設(shè)備上的資源限制的結(jié)果。在該示例中,討論當(dāng)前作為智能電話的主流操 作系統(tǒng)的SYMBIAN操作系統(tǒng)中的安全約束。具體地,在該示例中,安全約束 被集成到虛擬執(zhí)行系統(tǒng)中并且使其可被應(yīng)用程序員訪問。
參考圖3,假設(shè)在本節(jié)中討論的示例SYMBIAN安全約束提高可靠性,因 為它限制對資源的訪問并且需要顯式建立連接來訪問資源。SYMBIAN操作系 統(tǒng)28提供一組所謂的服務(wù)器54,其是該操作系統(tǒng)的本地服務(wù)提供方。使用服 務(wù)器來訪問特定資源。存在用于訪問文件系統(tǒng)功能,例如用于處理位圖或窗口、 用于發(fā)送諸如短消息服務(wù)("SMS")或多媒體消息服務(wù)("MMS")等消 息、用于通過套接字接口訪問網(wǎng)絡(luò)、以及甚至用于打印消息的服務(wù)器。 一般地, 存在用于除了簡單數(shù)學(xué)計算之外幾乎所有一切的服務(wù)器。服務(wù)器通常提供異步 函數(shù)以幫助SYMBIAN的協(xié)作多任務(wù)處理的模型。
每個服務(wù)器54在不同的線程56或進(jìn)程上運(yùn)行,并且因此是與各個應(yīng)用程 序14分離的??蛻魴C(jī)與服務(wù)器之間的通信在被指定為存在于應(yīng)用程序線程58 與服務(wù)器線程之間的會話上發(fā)生。所導(dǎo)致的附加訪問限制或安全約束是只有創(chuàng) 建該會話的線程被允許使用該會話。這保證了可在任何會話上強(qiáng)制實(shí)施安全 性,并且該安全性能夠?qū)υO(shè)備12的穩(wěn)健性作出貢獻(xiàn)。虛擬執(zhí)行系統(tǒng)20通常實(shí)現(xiàn)繞開可能并非始終是合乎需要的這一附加安全 保護(hù)的機(jī)制。相反,可以相信,虛擬執(zhí)行系統(tǒng)應(yīng)當(dāng)知道并且遵從資源受限設(shè)備 12的特殊限制和資源約束以提高穩(wěn)健性和性能。
圖3是示出用于繞開SYMBIAN的安全保護(hù)(見圖3的右邊部分60)的 機(jī)制,并且將其與典型的臺式操作系統(tǒng)28 (見圖3的左手側(cè)62)上的PAL實(shí) 現(xiàn)相比較的框圖。如從圖3的左手側(cè)可以看出,對托管框架中的套接字函數(shù)的 調(diào)用可被直接映射到底層操作系統(tǒng)的套接字函數(shù)。對于底層SYMBIAN操作系 統(tǒng),從不同線程64調(diào)用的send()(發(fā)送)操作由于安全限制而存在問題。具體 地,只有打開到服務(wù)器54的連接的線程,在這種情況下是SYMBIAN操作系 統(tǒng)("OS")套接字服務(wù)器,能夠與該服務(wù)器對話。如果從兩個不同線程的調(diào) 用send(),則這兩個不同的線程被直接映射到SYMBIAN套接字函數(shù)。這將導(dǎo) 致出錯,它可導(dǎo)致智能電話在典型使用期間崩潰。
為了允許多個線程64訪問套接字服務(wù)器54, PAL 26必須引入建立到 SYMBIAN套接字服務(wù)器的連接的新線程,g卩,圖3所示的PAL套接字線程 66。如果不同的線程現(xiàn)在調(diào)用.NETsendO函數(shù),則該請求被調(diào)度以供執(zhí)行,并 且最終由PAL套接字線程來調(diào)用。通過使用該配置,只有PAL套接字線程訪 問套接字服務(wù)器從而繞開了安全保護(hù)。這種安全保護(hù)的繞開在某些情況下可能 是可接受的,但是, 一般地,該方法是有問題的,因?yàn)樗∠说讓硬僮飨到y(tǒng) 28的保護(hù)。以下是處理該問題的若干不同的方法。
方法1:
可以使用上述機(jī)制來允許不同的線程64共享與服務(wù)器54的單個會話。該 單個服務(wù)器會話由PAL 26中的附加線程66來建立,該線程對來自不同的應(yīng)用 程序線程的請求進(jìn)行排序。該方法的優(yōu)點(diǎn)是單個服務(wù)器會話可被不同的應(yīng)用程 序線程重復(fù)使用。該方法的缺點(diǎn)是它以可被不同種類的服務(wù)提供方重復(fù)使用的 附加線程,即調(diào)度開銷為代價,并且導(dǎo)致SYMBIAN的安全機(jī)制的削弱。
方法2:可能最簡單的解決方案是在需要與服務(wù)器54進(jìn)行通信的每個PAL函數(shù)中
創(chuàng)建服務(wù)器會話,即到該服務(wù)提供方的連接。在會話建立后,執(zhí)行該函數(shù),并 且然后關(guān)閉該服務(wù)器會話。與該方法相關(guān)聯(lián)的缺點(diǎn)是因連接建立/關(guān)閉導(dǎo)致的性
能損失,這在幾乎所有PAL函數(shù)中將會是必然的。 方法3:
另一方法是為使用由該特定服務(wù)器54提供的服務(wù)的每個應(yīng)用程序線程58 建立單獨(dú)的服務(wù)器會話。那意味著如果兩個線程64使用一服務(wù)器,則這兩個 線程能夠建立兩個不同的服務(wù)器會話;并且由一個線程建立的服務(wù)器會話被從 該一個線程中調(diào)用的函數(shù)使用。該方法的優(yōu)點(diǎn)是它遵從SYMBIAN操作系統(tǒng) 28的訪問限制,從而如果使用了一個服務(wù)器會話,則它始終從該相同線程中出 現(xiàn),即使它是應(yīng)用程序線程。此外,使用該方法來調(diào)用函數(shù)更快,因?yàn)闊o需對 請求進(jìn)行排序的獨(dú)立PAL線程。這意味著該P(yáng)AL中的附加線程無需線程同步。 該方法的缺點(diǎn)是該方法可能導(dǎo)致比第一個方法更多的服務(wù)器會話,因?yàn)榉?wù)器 會話并沒有在不同的應(yīng)用程序線程之間共享。
所有以上方法都具有可行的應(yīng)用領(lǐng)域。然而,由于資源受限設(shè)備12的資 源約束,令應(yīng)用程序員決定使用什么特定方法可能變得必須或需要。這可通過 使用元數(shù)據(jù)來完成。例如,如果第三個方法是合乎需要的,則引入創(chuàng)建線程函 數(shù)的自定義屬性,它允許程序員指定將創(chuàng)建附加服務(wù)器會話。該附加服務(wù)器會 話被在該線程64中調(diào)用的函數(shù)使用?;蛘?,關(guān)于采取什么方法的決定也可在 程序集層上作出,這意味著元數(shù)據(jù)屬性可指定對于在程序集中創(chuàng)建的所有線程 使用什么方法。通過這么做,優(yōu)化可基于應(yīng)用程序特有元數(shù)據(jù)在虛擬執(zhí)行系統(tǒng) 20中實(shí)現(xiàn)。
示例2: PAL API和運(yùn)行時結(jié)構(gòu)的特定于應(yīng)用程序的自適應(yīng) 用于處理資源受限設(shè)備12的資源限制的現(xiàn)有方法之一是根據(jù)特定應(yīng)用程 序14來自適應(yīng)托管程序集,即,其中代碼模塊由托管代碼(托管代碼是將要 在虛擬執(zhí)行系統(tǒng)20中執(zhí)行的代碼)組成的程序集。換言之,給定特定應(yīng)用程 序和一組托管代碼庫,可以找出該特定應(yīng)用程序需要該托管代碼庫的什么子集。因?yàn)橘Y源受限設(shè)備的存儲器約束可以是嚴(yán)格的,所以只有托管代碼庫的絕 對必需的子集和該特定應(yīng)用程序才被部署在該資源受限設(shè)備上。該方法減少了 所需存儲器數(shù)量并且能夠顯著地提高性能。然而,該方法只影響托管代碼而不 是虛擬執(zhí)行系統(tǒng)的非托管代碼部分。
變得可能的優(yōu)化的一簡單示例影響執(zhí)行引擎24的初始化和啟動階段???br>
慮前一節(jié)中的示例l, 一個重要的問題是何時創(chuàng)建到服務(wù)器54的會話。以下兩
個方法是可能的。第一,在啟動期間創(chuàng)建到所有服務(wù)器,例如文件服務(wù)器、聯(lián)
網(wǎng)服務(wù)器、消息通信服務(wù)器和位圖服務(wù)器的服務(wù)器會話以及必需的線程64和 API及運(yùn)行時結(jié)構(gòu)30。該第一方法的優(yōu)點(diǎn)是只要PAL函數(shù)需要,所有必需的 API和運(yùn)行時結(jié)構(gòu)就會在適當(dāng)?shù)奈恢?。該方法的缺點(diǎn)是那些結(jié)構(gòu)中的大部分可 能永遠(yuǎn)不會被使用,并且可能因此浪費(fèi)存儲器。第二方法是在運(yùn)行時創(chuàng)建服務(wù) 器會話和相應(yīng)的API及運(yùn)行時結(jié)構(gòu)。在示例1的第三個方法中,這可能在創(chuàng)建 線程時發(fā)生。否則,服務(wù)器會話可以在真正使用特定PAL函數(shù)時建立。例如, 對文件函數(shù)的第一個調(diào)用將建立到SYMBIAN文件服務(wù)器的連接。
再一次,可以使用該示例的兩個方法。雖然一般是優(yōu)良的,但是該第二方 法的缺點(diǎn)是第一次調(diào)用訪問特定服務(wù)器54的函數(shù)可能導(dǎo)致多得多的執(zhí)行時間。 如果應(yīng)用程序14具有在資源受限設(shè)備12中并非不常見的某些實(shí)時約束,則這 就會有問題。
API和運(yùn)行時結(jié)構(gòu)30的初始化可通過執(zhí)行對將要執(zhí)行的應(yīng)用程序14及托 管庫中相應(yīng)元數(shù)據(jù)的靜態(tài)分析來改進(jìn)。靜態(tài)分析是在應(yīng)用程序上執(zhí)行而不執(zhí)行 該應(yīng)用程序的分析。例如,靜態(tài)分析可揭示應(yīng)用程序沒有訪問文件函數(shù);在這 種情況下,無需建立對于與服務(wù)器54進(jìn)行通行所必需的服務(wù)器會話和線程64。 托管代碼庫中的元數(shù)據(jù)同樣是必需的以指定哪些托管函數(shù)(通過PInvoke機(jī)制) 訪問與特定服務(wù)器對話的SYMBIAN函數(shù)。這些注釋對于虛擬執(zhí)行系統(tǒng)20中 的許多有用的跨層優(yōu)化而言是必需的。
此外,虛擬執(zhí)行系統(tǒng)的非托管占用量,即沒有托管代碼庫的部分可能是相 當(dāng)大的。為了具有用于資源受限設(shè)備12的虛擬執(zhí)行系統(tǒng),可能必須根據(jù)將要 在這些設(shè)備上執(zhí)行的應(yīng)用程序14的要求來自適應(yīng)包括在該虛擬執(zhí)行系統(tǒng)的非 托管部分中的模塊。建議的方法是將關(guān)于托管部分的同一種優(yōu)化應(yīng)用于虛擬執(zhí)行系統(tǒng)的執(zhí)行
引擎24的非托管部分。這意味著基于必須取決于具體操作系統(tǒng)28來包括的 (即,對于SYMBIAN所包括的屬性將不同于TINYOS或NUT/OS)包括在托 管代碼庫中的元數(shù)據(jù),它可通過對將需要PAL模塊的托管應(yīng)用程序的靜態(tài)分 析來找出。例如,如果應(yīng)用程序14只需要文件功能、消息通信功能、或圖形 用戶界面("GUI")功能集,則相應(yīng)的PAL函數(shù)被包括在虛擬執(zhí)行系統(tǒng)20 中并部署在資源受限設(shè)備12上。該方法同樣只有通過用底層操作系統(tǒng)特有元 數(shù)據(jù)擴(kuò)充托管代碼庫才是可能的。只有該元數(shù)據(jù)才使得所建議的大小的優(yōu)化成 為可能。
乍一看,后一方法顯現(xiàn)出看上去像通過PInvoke的標(biāo)準(zhǔn)庫加載。例如,假 設(shè)用于文件訪問、聯(lián)網(wǎng)和GUI功能集的PAL模塊被嵌入到單獨(dú)的動態(tài)鏈接庫 ("DLL")中,它是可被WINDOWS應(yīng)用程序14使用的數(shù)據(jù)或可執(zhí)行函數(shù) 功能的庫。WINDOWS是由微軟公司創(chuàng)建的。此外,對于該示例,假設(shè)存在以 下兩種具有不同大小限制的存儲器18和32: (1)大量非易失性存儲器,例如,
附連到移動電話用于存儲圖片的存儲卡;以及(2)有限數(shù)量的RAM。用于文件 訪問、聯(lián)網(wǎng)和GUI功能集的不同PAL模塊可被存儲到非易失性存儲器中并且 只在訪問該P(yáng)AL模塊的PInvoke發(fā)生時才通過LoadLibrary (加載庫)函數(shù)加 載到RAM中。
以上示例具有與其相關(guān)聯(lián)的以下三個問題。第一,PAL模塊通常包含所 有文件函數(shù)或所有聯(lián)網(wǎng)函數(shù),所以,在實(shí)踐中,比所需的更大的模塊通過 LoadLibrary函數(shù)加載到有限數(shù)量的RAM中。通過對應(yīng)用程序14的靜態(tài)分析 以及所建議的元數(shù)據(jù)擴(kuò)充,PAL模能夠只包含必要的函數(shù)。第二,在運(yùn)行時期 間,而非在如其通常發(fā)生的初始化期間的模塊的動態(tài)加載可能是不合需要的。 這對于具有特定時間約束的應(yīng)用程序而言尤其如此。第三,大量可用非易失性 存儲器的假設(shè)并非始終是正確的。鑒于此原因,存儲器限制在虛擬執(zhí)行系統(tǒng)20 被部署在設(shè)備12上時常常是重要的考慮。
當(dāng)知道應(yīng)用程序14將要在資源受限設(shè)備12上執(zhí)行時,對這些應(yīng)用程序的 靜態(tài)分析能夠顯著改善對必須被部署在該資源受限設(shè)備上的虛擬執(zhí)行系統(tǒng)20 的存儲器需求。動態(tài)優(yōu)化在這種情況下并不能有所幫助。在實(shí)踐中,將要執(zhí)行的應(yīng)用程序的數(shù)量通常非常少。實(shí)際上,在大多數(shù)情況下,只存在單個應(yīng)用程 序。
示例3:通過利用關(guān)于異步函數(shù)的知識的優(yōu)化
該示例示出如何在由虛擬執(zhí)行系統(tǒng)20提供的不同編程模型,或更精確地
而言,在其上方的應(yīng)用程序編程語言14與底層操作系統(tǒng)28之間高效地映射。 具體地,以下示例處理線程處理情況。在該示例中解決的問題是虛擬執(zhí)行系統(tǒng) 通常集中于簡單的編程模型,其中開發(fā)者不必關(guān)心如何手動地在不同任務(wù)之間 切換。相反,資源受限設(shè)備12的操作系統(tǒng)通常只具有對搶先調(diào)度的線程64的 有限支持。結(jié)果,這些操作系統(tǒng)或者是純粹基于事件的并且將在任務(wù)之間顯式 切換的責(zé)任移交給程序員,或者提供具有高度集中于協(xié)作多任務(wù)處理的編程結(jié) 構(gòu)。SYMBIAN操作系統(tǒng)屬于后一種類別。盡管SYMBIAN操作系統(tǒng)支持搶先 調(diào)度的線程,但其編程模型高度集中于協(xié)作多任務(wù)處理。
本節(jié)的目標(biāo)是示出如何處理不同編程模型之間的差異,以及如何通過使其 知道底層編程模型來允許虛擬執(zhí)行系統(tǒng)20中的優(yōu)化。具體地,以下是合乎需 要的(1)減少搶先調(diào)度的線程64的數(shù)量及其在虛擬執(zhí)行系統(tǒng)中引起的管理開 銷,以及(2)提高使用由底層操作系統(tǒng)提供的輕量線程模型來執(zhí)行并發(fā)任務(wù)的 效率。這些目標(biāo)通過將關(guān)于底層編程模型的信息作為元數(shù)據(jù)嵌入在托管代碼中 來實(shí)現(xiàn),虛擬執(zhí)行系統(tǒng)利用該元數(shù)據(jù)來執(zhí)行優(yōu)化。
以下是如何減少線程64的數(shù)量的一個示例方法。示例1引入了處理與 SYMBIAN操作系統(tǒng)28相關(guān)聯(lián)的安全約束的體系結(jié)構(gòu)。如從圖3可以看出, 最常見的方法需要在PAL26中創(chuàng)建對來自多個.NET線程的請求進(jìn)行排序的新 線程66。換言之,.NET線程(例如,。#或Visual Basic中的應(yīng)用程序線程) 被映射到SYMBIAN中搶先調(diào)度的線程,并且其函數(shù)調(diào)用由附加PAL線程來 排序。
現(xiàn)在,再次考慮圖3中的示例,其中存在在其主循環(huán)中具有函數(shù)的兩 個.NET線程64,并且其請求由獨(dú)立PAL線程66來排序。在這種情況下,無 需為兩個.NET線程創(chuàng)建搶先調(diào)度的線程。相反,因?yàn)槠湔埱笤赑AL線程中排 序并且因?yàn)镾YMBIAN操作系統(tǒng)28提供有力支持的輕量線程模型,所以不同的任務(wù)可以在單個線程中執(zhí)行。所以,如果應(yīng)用程序線程的主函數(shù)滿足特定需 求,則無需為每個應(yīng)用程序線程創(chuàng)建搶先調(diào)度的線程。
主要的要求是應(yīng)用程序線程58的主函數(shù)調(diào)用在附加PAL線程66中排序 的異步函數(shù)。大多數(shù)函數(shù)(例如,文件函數(shù)、聯(lián)網(wǎng)函數(shù)、消息通信函數(shù)、以及 甚至打印語句)滿足該特性。結(jié)果,有可能所提議的優(yōu)化可被應(yīng)用于許多(如 果不是大多數(shù))應(yīng)用程序線程。另一方面,要求虛擬執(zhí)行系統(tǒng)20知道哪些托 管函數(shù)被映射到底層操作系統(tǒng)28的異步函數(shù)調(diào)用以及哪些不是。該信息通過 將合適的元數(shù)據(jù)嵌入托管代碼庫來變得可用。給定該信息,執(zhí)行引擎24能夠 動態(tài)地決定其是否需要為應(yīng)用程序線程創(chuàng)建新的搶先調(diào)度的線程或是否可以 使用SYMBIAN的輕量線程模型。
另外參考圖4,在所提議的優(yōu)化中,可以使用SYMBIAN的輕量線程模型。 基本上,SYMBIAN的輕量線程模型由以下兩個核心組件構(gòu)成活動對象和活 動調(diào)度器?;顒訉ο?8與活動調(diào)度器一起使應(yīng)用程序員更容易處理協(xié)作多任 務(wù)處理。通常,應(yīng)用程序14包括存在于單個搶先調(diào)度的線程中的一組活動對 象,即,使用協(xié)作多任務(wù)處理。
被表示為活動對象68的不同任務(wù)之間的控制轉(zhuǎn)移如下發(fā)生。首先,如示 例1中所討論的,SYMBIAN操作系統(tǒng)28提供各種本地服務(wù)提供方,即所謂 的服務(wù)器54。這些服務(wù)器支持異步函數(shù)請求。換言之,如果應(yīng)用程序14調(diào)用 異步函數(shù),則該函數(shù)請求被發(fā)送至服務(wù)器,該服務(wù)器執(zhí)行該函數(shù)請求,并且通 知做出調(diào)用的應(yīng)用程序該函數(shù)請求何時被執(zhí)行。由于服務(wù)器存在于與應(yīng)用程序 不同的線程64或進(jìn)程中,因此這意味著該應(yīng)用程序在等待異步請求完成的同 時具有一些空閑時間。實(shí)際上,每次應(yīng)用程序調(diào)用異步函數(shù)時,使用此方法來
在由活動對象抽象化的不同任務(wù)之間轉(zhuǎn)移控制。
在各實(shí)施例中,如果滿足上述要求,則使用該活動對象概念來表示虛擬執(zhí) 行系統(tǒng)20中的應(yīng)用程序線程58。再一次,這些要求是重要的,因?yàn)樵趹?yīng)用程 序線程沒有以規(guī)則的間隔調(diào)用異步函數(shù)的情況下該任務(wù)能夠阻塞所有其他任 務(wù)。然而,SYMBIAN操作系統(tǒng)28中的許多函數(shù)具有異步表示并且?guī)缀跛?PAL層函數(shù)(例如,文件函數(shù)、聯(lián)網(wǎng)函數(shù)、打印語句和消息通信函數(shù))都需要 在PAL線程66中排序。圖4和圖5分別提供了兩個可能的體系結(jié)構(gòu)70和72的圖形概觀。在圖4 中,只有應(yīng)用程序線程58被表示為活動對象68,并且用于排序請求的數(shù)據(jù)結(jié) 構(gòu)依舊在那里。只要應(yīng)用程序線程調(diào)用在PAL 26中排序的函數(shù),該請求就以 異步方式實(shí)現(xiàn)。換言之,(1)該請求作為異步請求被轉(zhuǎn)發(fā)到PAL線程66, (2)由 于該請求是異步的,控制被自動轉(zhuǎn)移到表示另一個應(yīng)用程序線程的另一個活動 對象,(3)該活動對象執(zhí)行其指令直到它也達(dá)到異步函數(shù)調(diào)用,(4)在異步函 數(shù)完成的情況下,標(biāo)識發(fā)出相應(yīng)的異步請求的活動對象,(5)原始活動對象檢 索先前的異步函數(shù)調(diào)用的結(jié)果并且執(zhí)行進(jìn)一步的指令,直到(6)它再次調(diào)用異 步函數(shù)。在存在對于其先前的異步調(diào)用的結(jié)果可用的多個活動對象的情況下, SYMBIAN的活動調(diào)度器基于簡單的優(yōu)先級決定接下來激活哪個活動對象。
如果活動對象68可以在維護(hù)到不同的SYMBIAN服務(wù)器54的連接的相同 的線程74中創(chuàng)建,則也可能消除附加PAL線程66。這是處理在示例1中討論 的SYMBIAN操作系統(tǒng)28的安全約束的另一個可能的方式。圖5示出了相應(yīng) 的體系結(jié)構(gòu)。
以下是從基于多個具體實(shí)驗(yàn)的所提議優(yōu)化的評估中收集的數(shù)據(jù),這些實(shí)驗(yàn) 使用運(yùn)行SYMBIAN操作系統(tǒng)28的設(shè)備12上的虛擬執(zhí)行系統(tǒng)20來執(zhí)行。這 些實(shí)驗(yàn)在高端、啟用SYMBIAN的智能電話上執(zhí)行,該智能電話具有用于在其 上執(zhí)行的SYMBIAN的微軟的CLR移植。
圖6和7示出由附加PAL線程66引起的開銷。具體地,圖6是時間相對 于使用SYMBIAN設(shè)備12的打印語句的重復(fù)次數(shù)的曲線圖。圖6中上方的軌 跡76包括從不具有附加PAL線程的SYMBIAN設(shè)備中獲取的數(shù)據(jù),而下方的 軌跡78包括從具有附加PAL線程的SYMBIAN設(shè)備中獲取的數(shù)據(jù)。類似于圖 6,圖7是時間相對于不如使用SYMBIAN設(shè)備的打印語句復(fù)雜的操作的重復(fù) 次數(shù)的曲線圖。圖7中上方的軌跡80包括從不具有附加PAL線程的SYMBIAN 設(shè)備中獲取的數(shù)據(jù),而下方的軌跡82包括從具有附加PAL線程的SYMBIAN 設(shè)備中獲取的數(shù)據(jù)。
可以看出,開銷(即,分別在上方軌跡76和80與下方軌跡78和82之間 的差別)取決于將要執(zhí)行的操作的復(fù)雜度。例如,打印語句在SYMBIAN中是 相當(dāng)復(fù)雜的函數(shù),因?yàn)榇蛴≌Z句經(jīng)常需要刷新整個屏幕,這是由于字符串經(jīng)常附連到控制臺窗口的末尾。鑒于此,打印語句經(jīng)常導(dǎo)致自動巻屏。執(zhí)行不涉及
巻屏的另一個函數(shù),除去附加PAL線程66的優(yōu)點(diǎn)甚至更加顯而易見,如圖7 所示。在后一種情況下,附加PAL線程耗費(fèi)執(zhí)行該函數(shù)的整體性能中的大約 20%。
搶先調(diào)度的線程64導(dǎo)致資源受限設(shè)備12上顯著的性能損失這一事實(shí)也從 以下實(shí)驗(yàn)的結(jié)果中得到支持。圖8和圖9示出了相對于應(yīng)用程序線程58的數(shù) 量仿真器(見軌跡84)和資源受限設(shè)備(見軌跡86)執(zhí)行由PAL線程66排 序的固定數(shù)量的PAL函數(shù)所需的時間。請注意,在仿真器上以及在實(shí)際資源 受限設(shè)備上的所有線程執(zhí)行了幾乎相同數(shù)量的函數(shù)調(diào)用。例如,如果該實(shí)驗(yàn)由 執(zhí)行來自50個不同的應(yīng)用程序線程的IOO,OOO個PAL函數(shù)調(diào)用組成,則底層 操作系統(tǒng)28均等地分配這些調(diào)用以使得50個應(yīng)用程序線程中的每一個發(fā)出這 些調(diào)用中的大約2,000個。無需額外的顯式同步。如從圖8和9可以看出,線 程數(shù)量的影響在仿真器上并沒有很大的效果,但是實(shí)際資源受限設(shè)備上的線程 數(shù)量的影響是顯著的。
參考圖10,最后一個實(shí)驗(yàn)處理操作系統(tǒng)28中托管線程的開銷(見軌跡88) 相對于純線程的開銷(見軌跡90)。執(zhí)行與上述相同的實(shí)驗(yàn),但是這次編寫直 接在資源受限設(shè)備12上執(zhí)行的C弁程序而不是使用非托管代碼。先前實(shí)驗(yàn)中對 非托管代碼的使用對于評估底層操作系統(tǒng)的影響是有必要的。從圖10可以看 出,托管代碼需要維護(hù)各種附加數(shù)據(jù)結(jié)構(gòu)這一事實(shí)極大地影響性能。這使得更 有必要應(yīng)用所建議的優(yōu)化技術(shù)以提高效率。
總之,以上實(shí)驗(yàn)結(jié)果支持所討論的優(yōu)化有可能極大地提高資源受限設(shè)備 12上的虛擬執(zhí)行系統(tǒng)20的效率這一思想。有利的是,這些優(yōu)化增加了虛擬執(zhí) 行系統(tǒng)對托管函數(shù)、應(yīng)用程序特有特性、底層設(shè)備的資源約束和操作系統(tǒng)28 的特性之間的相互關(guān)系的認(rèn)識。換言之,優(yōu)化通過將關(guān)于這些調(diào)用在較低層(例 如,操作系統(tǒng)層)上的效果的信息提供給虛擬執(zhí)行系統(tǒng)中負(fù)責(zé)處理托管代碼的 較高層來促進(jìn)。這通過用附加元數(shù)據(jù)來注釋托管代碼來完成,該附加元數(shù)據(jù)被 虛擬執(zhí)行系統(tǒng)用來執(zhí)行優(yōu)化,該優(yōu)化將托管函數(shù)映射到平臺自適應(yīng)層26和操 作系統(tǒng)層上合適的調(diào)用和數(shù)據(jù)結(jié)構(gòu)。有利的是,各實(shí)施例包括被配置成在資源受限設(shè)備12中使用并且在應(yīng)用 程序14的執(zhí)行期間提供改進(jìn)的虛擬執(zhí)行系統(tǒng)20。該資源受限設(shè)備包括操作系
統(tǒng)28和包括指令16的應(yīng)用程序。該虛擬執(zhí)行系統(tǒng)包括被配置成執(zhí)行該應(yīng)用程 序的執(zhí)行引擎24、以及被配置成將來自該執(zhí)行引擎的調(diào)用映射到底層操作系統(tǒng) 的PAL 26。相比于最初在臺式系統(tǒng)上所預(yù)見的,資源受限設(shè)備的操作系統(tǒng)提 供不同的能力并具有不同的限制。為了利用該附加能力并且有效地克服資源受 限設(shè)備上的操作系統(tǒng)的限制,虛擬執(zhí)行系統(tǒng)使用非功能方面。非功能方面表征 應(yīng)用程序指令并允許執(zhí)行引擎和PAL利用底層操作系統(tǒng)的特性。執(zhí)行引擎與 PAL —起基于非功能方面在應(yīng)用程序的執(zhí)行期間實(shí)現(xiàn)改進(jìn)。改進(jìn)能夠影響性能 或存儲器需求,以及諸如如非功能方面所表達(dá)的安全性或及時性等特性。
盡管用對結(jié)構(gòu)特征和/或方法動作專用的語言描述了本主題,但可以理解, 所附權(quán)利要求書中定義的主題不必限于上述具體特征或動作。相反,上述具體 特征和動作是作為實(shí)現(xiàn)以下權(quán)利要求書的示例形式而公開的。此外,盡管術(shù)語 "步驟"可在此處用于指示所采用的方法的不同方面,但該術(shù)語不應(yīng)被解釋為 暗示此處所公開的各個步驟中或之間的任何特定次序,除非且當(dāng)明確描述了各 個步驟的次序的時候。
權(quán)利要求
1. 一種被配置成在資源受限設(shè)備(12)中使用的虛擬執(zhí)行系統(tǒng)(20),所述資源受限設(shè)備包括操作系統(tǒng)(28)和具有指令(16)的應(yīng)用程序(14),所述虛擬執(zhí)行系統(tǒng)包括a. 被配置成執(zhí)行所述應(yīng)用程序以及幫助所述應(yīng)用程序與所述操作系統(tǒng)的兼容的執(zhí)行引擎(24)。b. 其中i. 非功能方面表征所述指令和所述操作系統(tǒng),ii. 所述執(zhí)行引擎可訪問所述非功能方面,以及iii. 所述執(zhí)行引擎基于所述非功能方面在所述應(yīng)用程序的執(zhí)行期間實(shí)現(xiàn)改進(jìn)。
2. 如權(quán)利要求1所述的虛擬執(zhí)行系統(tǒng)(20),其特征在于,由所述執(zhí)行引 擎(24)實(shí)現(xiàn)的所述改進(jìn)選自由影響性能的改進(jìn)、影響存儲器需求的改進(jìn)、安 全性改進(jìn)和及時性改進(jìn)組成的組。
3. 如權(quán)利要求1或權(quán)利要求2所述的虛擬執(zhí)行系統(tǒng)(20),其特征在于a. 所述操作系統(tǒng)(28)展示應(yīng)用程序接口和運(yùn)行時結(jié)構(gòu)(30);b. 所述虛擬執(zhí)行系統(tǒng)展示編程模型;以及c. 所述執(zhí)行引擎(24)利用所述非功能方面來幫助從所述虛擬執(zhí)行系 統(tǒng)的編程模型到所述操作系統(tǒng)的應(yīng)用程序接口和運(yùn)行時結(jié)構(gòu)的映射。
4. 如前述任一權(quán)利要求所述的虛擬執(zhí)行系統(tǒng)(20),其特征在于,所述非 功能方面選自由及時性信息;安全性信息;函數(shù)調(diào)用信息;資源需求信息;存 儲器限制信息;安全約束信息;網(wǎng)絡(luò)生存期信息;實(shí)時信息;能量消耗信息; 執(zhí)行模式信息;描述托管函數(shù)、應(yīng)用程序特有特性、所述設(shè)備(12)的資源約 束及所述操作系統(tǒng)(28)的特性之間的關(guān)系的信息組成的組。
5. 如前述任一權(quán)利要求所述的虛擬執(zhí)行系統(tǒng)(20),其特征在于,所述非功能方面用以中間語言編碼的元數(shù)據(jù)來描述。
6. 如權(quán)利要求5所述的虛擬執(zhí)行系統(tǒng)(20),其特征在于a. 所述虛擬執(zhí)行系統(tǒng)包括選自由公共語言基礎(chǔ)結(jié)構(gòu)和JAVA虛擬機(jī)組 成的組的運(yùn)行時技術(shù);以及b. 所述中間語言選自由公共中間語言和JAVA字節(jié)碼組成的組。
7. 如前述任一權(quán)利要求所述的虛擬執(zhí)行系統(tǒng)(20),其特征在于,所述操 作系統(tǒng)(28)選自由SYMBIAN操作系統(tǒng)和TINYOS操作系統(tǒng)組成的組。
8. —種資源受限設(shè)備(12),包括a. 第一計算機(jī)可讀介質(zhì)(18),其包括具有指令(16)的應(yīng)用程序;b. 第二計算機(jī)可讀介質(zhì)(32),其包括展示應(yīng)用程序接口和運(yùn)行時結(jié) 構(gòu)(30)的操作系統(tǒng)(28);以及c. 虛擬執(zhí)行系統(tǒng)(20),其被配置成幫助所述應(yīng)用程序與所述操作系 統(tǒng)的兼容以及展示編程模型;d. 其中i. 非功能方面表征所述指令和所述操作系統(tǒng),ii. 所述虛擬執(zhí)行系統(tǒng)可訪問所述非功能方面,iii. 所述虛擬執(zhí)行系統(tǒng)基于所述非功能方面在所述應(yīng)用程序的執(zhí)行 期間實(shí)現(xiàn)改進(jìn),以及iv. 所述虛擬執(zhí)行系統(tǒng)利用所述非功能方面來幫助從所述虛擬執(zhí)行 系統(tǒng)的編程模型到所述操作系統(tǒng)的應(yīng)用程序接口和運(yùn)行時結(jié)構(gòu)的映射。
9.如權(quán)利要求8所述的資源受限設(shè)備(12),其特征在于,所述非功能方面選自由及時性信息;安全性信息;函數(shù)調(diào)用信息;資源需求信息;存儲器限 制信息;安全約束信息;網(wǎng)絡(luò)生存期信息;實(shí)時信息;能量消耗信息;執(zhí)行模 式信息;描述托管函數(shù)、應(yīng)用程序特有特性、所述設(shè)備的資源約束及所述操作 系統(tǒng)(28)的特性之間的關(guān)系的信息組成的組。
10. 如權(quán)利要求8或權(quán)利要求9所述的資源受限設(shè)備(12),其特征在 于,所述資源受限設(shè)備選自由移動電話、個人數(shù)字助理、手持式計算機(jī)、游戲 控制臺、機(jī)頂盒、基于衛(wèi)星的定位設(shè)備和傳感器節(jié)點(diǎn)組成的組。
11. 如權(quán)利要求8到10中的任一項所述的虛擬執(zhí)行系統(tǒng)(12),其特 征在于,所述非功能方面用以中間語言編碼的元數(shù)據(jù)來描述。
12. —種用于提高資源受限設(shè)備(12)中的虛擬執(zhí)行系統(tǒng)(20)的性能 的方法,所述資源受限設(shè)備包括操作系統(tǒng)(28)和包括指令(16)的應(yīng)用程序(14),所述方法包括a. 標(biāo)識所述指令和所述操作系統(tǒng)的非功能方面;b. 向所述虛擬執(zhí)行系統(tǒng)提供所述非功能方面;以及c. 由所述虛擬執(zhí)行系統(tǒng)在所述應(yīng)用程序的執(zhí)行期間使用所述非功能方面。
13. 如權(quán)利要求12所述的方法,其特征在于,還包括a. 標(biāo)識在所述操作系統(tǒng)(28)中展示的應(yīng)用程序接口和運(yùn)行時結(jié)構(gòu)(30);b. 在所述應(yīng)用程序(14)的執(zhí)行期間考慮所述應(yīng)用程序接口和運(yùn)行時 結(jié)構(gòu)以及所述非功能方面;以及c. 將所述指令(16)映射到所述應(yīng)用程序接口和運(yùn)行時結(jié)構(gòu)。
14. 如權(quán)利要求13所述的方法,其特征在于,所述虛擬執(zhí)行系統(tǒng)(20) 展示編程模型,并且還包括將所述編程模型映射到所述應(yīng)用程序接口和運(yùn)行時 結(jié)構(gòu)(30)。
15. 如權(quán)利要求12到14中的任一項所述的方法,其特征在于a. 所述操作系統(tǒng)(28)包括具有安全限制的安全模型;b. 所述虛擬執(zhí)行系統(tǒng)(20)向應(yīng)用程序員展示所述安全模型;以及c. 所述應(yīng)用程序員能夠在逐個情況的基礎(chǔ)上決定如何處理所述安全限制。
16. 如權(quán)利要求12到15中的任一項所述的方法,其特征在于,所述虛 擬執(zhí)行系統(tǒng)(20)提供線程(64),并且所述操作系統(tǒng)(28)提供服務(wù)器(54); 并且所述方法還包括對所述線程排序以使得所有所述線程能夠訪問所述服務(wù) 器。
17. 如權(quán)利要求16所述的方法,其特征在于,還包括為需要服務(wù)器會 話的每個對函數(shù)的訪問以及為所述虛擬執(zhí)行系統(tǒng)(20)中的每個線程(64)創(chuàng) 建單獨(dú)的服務(wù)器會話。
18. 如權(quán)利要求12到17中的任一項所述的方法,其特征在于,所述操 作系統(tǒng)(28)提供服務(wù)器(54),并且所述方法還包括創(chuàng)建到所述服務(wù)器的會 話,其中所述虛擬執(zhí)行系統(tǒng)(20)被配置成管理所述會話,并且所述會話在選 自由以下各項構(gòu)成的組的方法中創(chuàng)建在所述虛擬執(zhí)行系統(tǒng)的啟動期間創(chuàng)建到 所有服務(wù)器的會話,以及在運(yùn)行時創(chuàng)建到所述服務(wù)器的會話。
19. 如權(quán)利要求12到18中的任一項所述的方法,其特征在于,所述虛 擬執(zhí)行系統(tǒng)(20)被配置成幫助搶先的多任務(wù)處理,并且所述操作系統(tǒng)(28) 展示非搶先的多任務(wù)處理模型;并且所述方法還包括將所述虛擬執(zhí)行系統(tǒng)中的 搶先的多任務(wù)處理映射到所述操作系統(tǒng)的非搶先的多任務(wù)處理模型。
20. 如權(quán)利要求12到19中的任一項所述的方法,其特征在于,所述虛 擬執(zhí)行系統(tǒng)(20)被配置成提供搶先調(diào)度的線程(64)以執(zhí)行任務(wù)并且知道什 么函數(shù)被映射到所述操作系統(tǒng)(28)中的異步函數(shù)調(diào)用,并且所述操作系統(tǒng)被 配置成基于協(xié)作多任務(wù)處理來實(shí)現(xiàn)線程模型并且提供輕量線程模型;所述方法 還包括選自由以下各項組成的組的步驟a. 通過在單個線程中執(zhí)行一個以上的任務(wù)來減少搶先調(diào)度的線程的數(shù) 量;以及b. 使用所述輕量線程模型來提高執(zhí)行并發(fā)任務(wù)的效率。
全文摘要
一種被配置成在資源受限設(shè)備中使用的虛擬執(zhí)行系統(tǒng)。該資源受限設(shè)備包括操作系統(tǒng)和包括指令的應(yīng)用程序。該虛擬執(zhí)行系統(tǒng)包括執(zhí)行引擎,其被配置成執(zhí)行應(yīng)用程序以及幫助應(yīng)用程序與操作系統(tǒng)的兼容。非功能方面表征指令和操作系統(tǒng)。該執(zhí)行引擎可訪問非功能方面,并且基于該非功能方面在應(yīng)用程序的執(zhí)行期間實(shí)現(xiàn)改進(jìn)。
文檔編號G06F17/00GK101421711SQ200780013298
公開日2009年4月29日 申請日期2007年3月22日 優(yōu)先權(quán)日2006年4月13日
發(fā)明者F·西格蒙德, R·休格, W·馬努瑟克 申請人:微軟公司