專(zhuān)利名稱(chēng):程序執(zhí)行方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種程序執(zhí)行方法,具體地說(shuō),本發(fā)明是用來(lái)在不同的硬件平臺(tái)和軟件環(huán)境中實(shí)現(xiàn)程序的通用的執(zhí)行方法。作為一種方法,可以解決當(dāng)今世界在計(jì)算機(jī)軟件技術(shù)發(fā)展和硬件技術(shù)發(fā)展之間的相互制約的問(wèn)題,實(shí)現(xiàn)硬件平臺(tái)之間和軟件環(huán)境之間及軟硬件環(huán)境之間的強(qiáng)兼容性。
今天,越來(lái)越多的人認(rèn)識(shí)到,隨著計(jì)算機(jī)產(chǎn)業(yè)的硬件技術(shù)獲得飛速的發(fā)展,軟件技術(shù)也獲得了迅速的發(fā)展,但是由于軟件技術(shù)的發(fā)展遠(yuǎn)遠(yuǎn)落后于計(jì)算機(jī)硬件技術(shù)的發(fā)展。雖然隨著各種面向?qū)ο蠹夹g(shù)的發(fā)展對(duì)軟件的重復(fù)使用和擴(kuò)展性而言得到了很大的擴(kuò)展的機(jī)會(huì),大大地提高了程序員的生產(chǎn)率,但是計(jì)算機(jī)軟件開(kāi)發(fā)技術(shù)的現(xiàn)狀從另外一個(gè)方面已經(jīng)很大地限制了計(jì)算機(jī)硬件新技術(shù)和軟件新產(chǎn)品的應(yīng)用和發(fā)展,成為現(xiàn)代計(jì)算機(jī)技術(shù)發(fā)展的瓶頸。
如同每一個(gè)國(guó)家或地區(qū)都可能有自己的語(yǔ)言或方言一樣,在計(jì)算機(jī)的硬件層或者說(shuō)是機(jī)器語(yǔ)言層上也存在著各種各樣的“語(yǔ)言”。雖然大家都是要完成或可以完成相同的邏輯/數(shù)學(xué)功能,但是大家使用了不同的表示方法或者說(shuō)不同的機(jī)器語(yǔ)言。同樣,雖然操作系統(tǒng)的知識(shí)和方法是一門(mén)科學(xué),但是不同的操作系統(tǒng)有不同的“方言”,使得軟件的通用性大大地降低了。
針對(duì)這種情況,下面我們來(lái)簡(jiǎn)略地分析一下一個(gè)C語(yǔ)言程序員要實(shí)現(xiàn)一個(gè)程序時(shí)的簡(jiǎn)略的過(guò)程首先他要清晰所要實(shí)現(xiàn)的程序的功能,嚴(yán)格來(lái)講就是在邏輯和數(shù)學(xué)上的功能。
其次他要針對(duì)目標(biāo)軟件環(huán)境提供的方法和手段,來(lái)具體的思考在目標(biāo)軟件環(huán)境上的實(shí)現(xiàn)方法,有時(shí)侯如果目標(biāo)軟件環(huán)境沒(méi)有提供一些特殊的方法和手段,還要考慮目標(biāo)硬件平臺(tái)上的可以應(yīng)用的具體的實(shí)現(xiàn)方法。
最后他才能夠真正的開(kāi)始動(dòng)手去實(shí)現(xiàn)這個(gè)特殊的應(yīng)用。而他使用的開(kāi)發(fā)工具將根據(jù)他的源程序/目標(biāo)軟件環(huán)境/目標(biāo)硬件平臺(tái)生成一個(gè)在目標(biāo)軟件環(huán)境/目標(biāo)硬件平臺(tái)上的可執(zhí)行程序。如果他想讓他的程序可以在其他的軟件環(huán)境中或硬件平臺(tái)上可正確執(zhí)行,那么他必須重新進(jìn)行他的在上一個(gè)部分所進(jìn)行過(guò)的思考。重新組織源程序,重新根據(jù)他的源程序生成一個(gè)針對(duì)新的目標(biāo)軟件環(huán)境和新的目標(biāo)硬件平臺(tái)的可執(zhí)行程序。
現(xiàn)在讓我們分析在計(jì)算機(jī)硬件技術(shù)方面的問(wèn)題,雖然各種處理器的能力都越來(lái)越強(qiáng),但是每種處理器的機(jī)器指令集不兼容,而所謂的高級(jí)語(yǔ)言的兼容只是建立在支持不同處理器的編譯器的代碼生成能力上,如一個(gè)為INTEL PENTIUM III處理器編譯的程序,是不可能在一臺(tái)INTEL 8086上運(yùn)行的,雖然它們都還是INTEL公司的產(chǎn)品(至少有一點(diǎn),它們的代碼寬度不同)。
在軟件環(huán)境的兼容方面以一個(gè)最簡(jiǎn)單的程序?yàn)槔绦蚬δ苁窃诒O(jiān)視器上打印一行文字tell you 3*4=12.然后退出。
以C語(yǔ)言實(shí)現(xiàn)void main(){int i=3*4printf(″tell you 3*4=%d.*,i);}經(jīng)過(guò)C語(yǔ)言編譯器編譯成為linux系統(tǒng)下的可執(zhí)行程序后,能夠正常運(yùn)行,計(jì)算出正確的結(jié)果并打印一行正確的文字,退出。但是如果將該可執(zhí)行程序移植到MS-DOS系統(tǒng)時(shí)執(zhí)行結(jié)果將是不可以預(yù)測(cè)的。
將以上的程序開(kāi)發(fā)和移植過(guò)程比較人們對(duì)程序開(kāi)發(fā)過(guò)程的分析似乎可以看到一些不正常的問(wèn)題。就是程序開(kāi)發(fā)的核心問(wèn)題不應(yīng)該是對(duì)某一種硬件平臺(tái)或軟件環(huán)境的兼容問(wèn)題,而應(yīng)該是程序要實(shí)現(xiàn)的邏輯和數(shù)學(xué)功能的完成。雖然每一種處理器都有能力實(shí)現(xiàn)這些功能,但是各種處理器的指令集的不兼容轉(zhuǎn)移了人們的注意力,人們似乎都沒(méi)有注意到需要完成的是相同的邏輯和數(shù)學(xué)功能。由于對(duì)硬件平臺(tái)和軟件環(huán)境開(kāi)發(fā)中對(duì)不同的方面的側(cè)重或者是對(duì)性?xún)r(jià)比的不同考慮或者是習(xí)慣或者是其它的什么原因,造成了這些不兼容的問(wèn)題。
在這里我們應(yīng)該考慮到硬件平臺(tái)的相同點(diǎn)就是都能夠完成邏輯和數(shù)學(xué)的功能,軟件環(huán)境的相同點(diǎn)是它們調(diào)度接口和功能都是已知的,因此軟件環(huán)境和硬件平臺(tái)的不同都是既定的和可以控制的。
本發(fā)明的目的是提供一種程序執(zhí)行方法,它兼容這些由于各種原因造成的在不同的計(jì)算機(jī)系統(tǒng)中存在的不兼容性。得到一種通用程序執(zhí)行方法??梢缘玫礁鞣N計(jì)算機(jī)系統(tǒng)的支持。
本發(fā)明的目的是這樣實(shí)現(xiàn)的在當(dāng)前占有統(tǒng)治地位的程序設(shè)計(jì)語(yǔ)言中,我們選擇C/C++語(yǔ)言和JAVA語(yǔ)言為例,C/C++語(yǔ)言實(shí)現(xiàn)了挖掘硬件平臺(tái)和軟件環(huán)境全部功能的能力,但是它對(duì)軟件環(huán)境和硬件平臺(tái)的兼容性是體現(xiàn)在源代碼層上的,這也增加了可執(zhí)行代碼對(duì)軟件環(huán)境和硬件平臺(tái)的依賴(lài)性。而JAVA語(yǔ)言實(shí)現(xiàn)了硬件平臺(tái)和軟件環(huán)境的獨(dú)立性,但JAVA是建立在所謂的JAVA虛擬機(jī)上解釋執(zhí)行的,所以速度較慢且兼容性也受到了一定的限制。我們從這些的程序設(shè)計(jì)語(yǔ)言的編譯過(guò)程中進(jìn)行思考,也許可以得到某種解決方法,一般情況下語(yǔ)言的編譯連接執(zhí)行方法為兩種A、編譯型語(yǔ)言如C/C++語(yǔ)言,在開(kāi)發(fā)過(guò)程中源程序通過(guò)詞法分析、語(yǔ)法分析、語(yǔ)義分析、生成中間代碼、代碼優(yōu)化、生成可執(zhí)行代碼。開(kāi)發(fā)過(guò)程結(jié)束。執(zhí)行過(guò)程就是利用可執(zhí)行代碼在其他機(jī)器上運(yùn)行。這個(gè)可執(zhí)行代碼必須是在一臺(tái)兼容的計(jì)算機(jī)(包括軟件環(huán)境的兼容和硬件平臺(tái)的兼容)上才可以執(zhí)行,如果不能兼容就不能執(zhí)行。有時(shí)即使可以兼容也不能完全應(yīng)用該計(jì)算機(jī)的特有的某些優(yōu)勢(shì),造成硬件資源和軟件資源的浪費(fèi),缺點(diǎn)為兼容性不好,優(yōu)點(diǎn)是執(zhí)行速度較快。
B、解釋型語(yǔ)言如JAVA語(yǔ)言,在開(kāi)發(fā)過(guò)程中源程序通過(guò)詞法分析、語(yǔ)法分析、語(yǔ)義分析、生成中間代碼、代碼優(yōu)化、生成可執(zhí)行中間代碼。可執(zhí)行中間代碼一般為字節(jié)流,開(kāi)發(fā)過(guò)程結(jié)束。執(zhí)行過(guò)程就是利用可執(zhí)行中間代碼在其他機(jī)器上解釋運(yùn)行(對(duì)JAVA語(yǔ)言既是在JAVA虛擬機(jī)上的執(zhí)行)。缺點(diǎn)為執(zhí)行速度較慢,優(yōu)點(diǎn)是兼容性比較好。
為了實(shí)現(xiàn)對(duì)速度和兼容性的兼顧并且充分利用軟件環(huán)境和硬件平臺(tái)的特點(diǎn)和優(yōu)勢(shì),我們可以通過(guò)邏輯和數(shù)學(xué)上的虛擬機(jī)和基于通用平臺(tái)的特殊軟件環(huán)境的技術(shù)來(lái)實(shí)現(xiàn)本發(fā)明的基本思想和方法為首先是在一臺(tái)計(jì)算機(jī)上對(duì)源程序進(jìn)行諸如詞法分析、語(yǔ)法分析,語(yǔ)義分析、生成中間代碼、代碼優(yōu)化等過(guò)程,生成包含邏輯和數(shù)學(xué)上的虛擬機(jī)代碼的邏輯和數(shù)學(xué)上的執(zhí)行程序。在這個(gè)過(guò)程中源程序的全部的邏輯和數(shù)學(xué)信息和與其他模塊的連接信息已經(jīng)進(jìn)入了虛擬機(jī)可執(zhí)行程序中,所以可以和后端軟件包或仿真軟件包聯(lián)合進(jìn)行調(diào)試。然后我們將該虛擬機(jī)可執(zhí)行程序移植到一臺(tái)具有任意的可以抽象為
圖1的配置的計(jì)算機(jī)上。針對(duì)該計(jì)算機(jī)的特定的硬件平臺(tái)和軟件環(huán)境的情況,生成最終可執(zhí)行程序。這樣就能充分利用該計(jì)算機(jī)的能力。這樣程序就能以C語(yǔ)言的執(zhí)行速度執(zhí)行,并且具有象JAVA語(yǔ)言一樣的可移植能力。
在這里發(fā)明人必須闡明一些名詞1.開(kāi)發(fā)機(jī)開(kāi)發(fā)實(shí)現(xiàn)一個(gè)應(yīng)用程序時(shí)所使用的計(jì)算機(jī)系統(tǒng)。
2.目標(biāo)機(jī)開(kāi)發(fā)的應(yīng)用程序所將在其上運(yùn)行的計(jì)算機(jī)系統(tǒng)。
3.前端編譯器在開(kāi)發(fā)機(jī)上所使用的編譯的源程序的編譯器(包括用于連接的連接程序)程序或程序集。
4.虛代碼在這里是特指執(zhí)行邏輯和數(shù)學(xué)命令的虛擬機(jī)的指令集。
5.虛代碼可執(zhí)行程序在開(kāi)發(fā)機(jī)上利用前端編譯器所生成的包含有邏輯和數(shù)學(xué)虛擬機(jī)代碼和一些軟件環(huán)境功能調(diào)用及一些可能的最終可執(zhí)行代碼的文件或文件集。
6.后端編譯器將虛代碼可執(zhí)行程序轉(zhuǎn)換成為目標(biāo)機(jī)上特定的軟件環(huán)境功能調(diào)用和最終可執(zhí)行代碼的轉(zhuǎn)換程序或程序集。
7.最終可執(zhí)行代碼能夠在目標(biāo)機(jī)上直接執(zhí)行的代碼。
8.最終可執(zhí)行程序由后端編譯器對(duì)虛代碼可執(zhí)行程序進(jìn)行轉(zhuǎn)換后生成的包含特定軟件環(huán)境調(diào)用和最終可執(zhí)行代碼的文件或文件集。
9.前端軟件開(kāi)發(fā)包指包含有供前端編譯器使用的功能調(diào)用的信息的文件或文件集。
10.后端軟件包指包含有相應(yīng)的前端軟件包中提供的功能調(diào)用的代碼(及入口)的文件或文件集。
11.仿真軟件包指在一種硬件平臺(tái)/軟件環(huán)境中模擬另一種硬件平臺(tái)/軟件環(huán)境的軟件包。
另如果想在開(kāi)發(fā)機(jī)上進(jìn)行調(diào)試,開(kāi)發(fā)機(jī)上就必須有后端軟件包。
本發(fā)明的方法是這樣實(shí)現(xiàn)的a.在開(kāi)發(fā)過(guò)程中源程序通過(guò)詞法分析、語(yǔ)法分析、語(yǔ)義分析、生成中間代碼、代碼優(yōu)化等過(guò)程,生成包含邏輯和數(shù)學(xué)代碼及對(duì)軟件環(huán)境的調(diào)度接口信息的虛擬機(jī)可執(zhí)行程序。一種特殊的情況是我們需要一個(gè)沒(méi)有軟件包支持的功能時(shí)(比如一個(gè)特殊的沒(méi)有軟件包支持的外部設(shè)備),就必須提供該功能的應(yīng)用于將使用的目標(biāo)機(jī)的C或匯編或其它任何程序設(shè)計(jì)語(yǔ)言的源程序,并且經(jīng)過(guò)編譯后產(chǎn)生包含能夠被后端編譯器所識(shí)別的最終可執(zhí)行代碼的文件,用于生成目標(biāo)系統(tǒng)可執(zhí)行程序。
b.這時(shí)該虛擬機(jī)可執(zhí)行程序已經(jīng)包括了全部的邏輯/數(shù)學(xué)信息和對(duì)軟件環(huán)境的調(diào)度接口信息,可以與后端軟件包聯(lián)合進(jìn)行程序調(diào)試。
c.執(zhí)行過(guò)程之前要經(jīng)過(guò)針對(duì)特定目標(biāo)機(jī)硬件平臺(tái)和目標(biāo)軟件環(huán)境的代碼轉(zhuǎn)化,自動(dòng)完成對(duì)軟件環(huán)境的接口的調(diào)用的處理工作的代碼及可能的特殊功能的接口的調(diào)用的處理工作的代碼。生成目標(biāo)系統(tǒng)可執(zhí)行程序,這樣就可以在目標(biāo)機(jī)上正常運(yùn)行了。
d.這樣最后的可執(zhí)行程序能夠在完成本身邏輯和數(shù)學(xué)的功能的前提下,充分利用目標(biāo)機(jī)的軟硬件資源。而且可以在系統(tǒng)資源管理和系統(tǒng)維護(hù)等方面獲得優(yōu)勢(shì)。
本發(fā)明所闡明的通用可執(zhí)行程序?qū)崿F(xiàn)方法,包含以下這些部分1.一個(gè)存儲(chǔ)了調(diào)度接口信息的裝置。
2.一個(gè)能夠根據(jù)語(yǔ)言的源程序和調(diào)度接口信息進(jìn)行聯(lián)編和連接的裝置和一個(gè)能夠根據(jù)以上的信息生成只包含邏輯和數(shù)學(xué)代碼及調(diào)度接口信息的裝置。
3.一個(gè)存儲(chǔ)了調(diào)度接口實(shí)現(xiàn)代碼的裝置。
4.一個(gè)對(duì)邏輯和數(shù)學(xué)代碼進(jìn)行轉(zhuǎn)換成為可加載的代碼的裝置。
5.一個(gè)能夠根據(jù)目標(biāo)環(huán)境轉(zhuǎn)換和生成調(diào)度接口代碼的裝置。
本發(fā)明的優(yōu)點(diǎn)為在開(kāi)發(fā)過(guò)程中源程序通過(guò)詞法分析、語(yǔ)法分析、語(yǔ)義分析、生成中間代碼、代碼優(yōu)化,生成邏輯和數(shù)學(xué)代碼的可執(zhí)行程序。這時(shí)該可執(zhí)行程序已經(jīng)包括了全部的邏輯/數(shù)學(xué)信息和應(yīng)用程序連接信息??梢赃M(jìn)行程序調(diào)試。執(zhí)行過(guò)程之前要經(jīng)過(guò)針對(duì)特定目標(biāo)機(jī)硬件平臺(tái)和目標(biāo)軟件環(huán)境的代碼轉(zhuǎn)化。生成目標(biāo)系統(tǒng)可執(zhí)行程序。這樣最后的可執(zhí)行程序能夠在完成本身邏輯和數(shù)學(xué)的功能的前提下,充分利用目標(biāo)機(jī)的軟硬件資源;而且可以在系統(tǒng)資源管理和系統(tǒng)維護(hù)等方面獲得優(yōu)勢(shì)。
圖1是能夠適應(yīng)本發(fā)明的計(jì)算機(jī)硬件系統(tǒng)的框圖。因?yàn)榫唧w的目標(biāo)系統(tǒng)平臺(tái)信息由后端編譯器進(jìn)行適應(yīng),所以本發(fā)明能夠適用于任何可以簡(jiǎn)化抽象為圖1情況的計(jì)算機(jī)。
圖2是一臺(tái)實(shí)際的個(gè)人計(jì)算機(jī)的典型的配置的框圖。
圖3是本發(fā)明的軟件開(kāi)發(fā)過(guò)程簡(jiǎn)圖。
圖4是本發(fā)明的軟件執(zhí)行過(guò)程之前的代碼轉(zhuǎn)換和功能調(diào)配過(guò)程簡(jiǎn)圖。
圖5是本發(fā)明的經(jīng)過(guò)代碼轉(zhuǎn)換和功能調(diào)配之后進(jìn)行執(zhí)行過(guò)程的簡(jiǎn)圖。
圖6是用當(dāng)前的程序設(shè)計(jì)方法和流程進(jìn)行一項(xiàng)程序設(shè)計(jì)工作的過(guò)程。
圖7是應(yīng)用本發(fā)明進(jìn)行一項(xiàng)程序設(shè)計(jì)工作的過(guò)程。
下面結(jié)合附圖用實(shí)施方案對(duì)本發(fā)明作進(jìn)一步說(shuō)明。
要理解本發(fā)明所具有的意義和它的思想,要首先理解在圖1中描述的抽象的計(jì)算機(jī)系統(tǒng)的硬件結(jié)構(gòu),就是我們可以將計(jì)算機(jī)看成是由一個(gè)中央處理器,一個(gè)存儲(chǔ)器供中央處理器(及外部設(shè)備)使用,還有若干的我們稱(chēng)為外部設(shè)備的一些硬件組成。圖4顯示了本發(fā)明提出的方法生成的軟件在一臺(tái)具有某種特定的配置的計(jì)算機(jī)上要進(jìn)行的代碼轉(zhuǎn)換和功能調(diào)配過(guò)程生成一個(gè)針對(duì)本計(jì)算機(jī)的新的可執(zhí)行程序。在圖5中將使用這個(gè)新的可執(zhí)行程序執(zhí)行。
本發(fā)明還包括一個(gè)用于程序開(kāi)發(fā)的新系統(tǒng),該系統(tǒng)叫做商用軟件平臺(tái)(Business Software Platform)。本發(fā)明還提供了BSP的一些較詳細(xì)的描述,以幫助理解本發(fā)明。
本發(fā)明的一個(gè)組成部分BSP技術(shù)是根據(jù)以上所闡明的方法和技術(shù)設(shè)計(jì)的一種通用的跨平臺(tái)執(zhí)行的技術(shù)。BSP通過(guò)利用邏輯和數(shù)學(xué)上的虛擬機(jī)技術(shù)和通用軟件平臺(tái)技術(shù)實(shí)現(xiàn)硬件平臺(tái)和軟件環(huán)境的通用。(在這個(gè)過(guò)程中,我們將作為BSP系統(tǒng)的一個(gè)部分的軟件包稱(chēng)為軟件包,而將利用BSP系統(tǒng)開(kāi)發(fā)出來(lái)的軟件包稱(chēng)為可執(zhí)行程序包,以示區(qū)別)BSP的組成部分前端部分1.若干能夠?qū)⒏呒?jí)語(yǔ)言編譯生成虛擬機(jī)可執(zhí)行代碼的虛擬機(jī)編譯器(可以是支持BSP的任意的語(yǔ)言如C、C++、PASCAL、COBOL、FORTRAN等)軟件包。
2.若干能夠?qū)⒏呒?jí)語(yǔ)言或匯編語(yǔ)言(可以是C、C++、匯編等)編譯生成針對(duì)各種目標(biāo)機(jī)(如針對(duì)APPLE,8086,pentium III等等的)的最終可執(zhí)行代碼的最終可執(zhí)行代碼編譯器軟件包。
3.若干的提供了接口調(diào)用信息的前端軟件開(kāi)發(fā)包,可能包括有信息引入文件(如C/C++中的頭文件),信息說(shuō)明文件(如C/C++中的lib文件)等。
4.實(shí)現(xiàn)在開(kāi)發(fā)機(jī)上仿真目標(biāo)機(jī)硬件平臺(tái)和軟件環(huán)境的仿真軟件包,實(shí)現(xiàn)在開(kāi)發(fā)機(jī)上對(duì)程序針對(duì)目標(biāo)平臺(tái)軟件環(huán)境和硬件平臺(tái)的調(diào)試。
5.其它支持程序,如對(duì)一些數(shù)據(jù)進(jìn)行打包生成<.data>的數(shù)據(jù)管理軟件包,生成<.debug>文件的后端調(diào)試支持軟件包。
6.實(shí)現(xiàn)對(duì)以上提及的各種軟件包進(jìn)行綜合管理和調(diào)度等功能的軟件包。
生成部分1.由前端部分生成的可執(zhí)行程序包,它可能由一個(gè)<.package>文件或者是一個(gè)<.package>文件和若干<.module>及若干<.data>及若干<.debug>文件所組成。
2.<.package>文件是可執(zhí)行程序包的主文件,包含有各個(gè)模塊的信息(當(dāng)然也可以包含所有的其它信息),一個(gè)可執(zhí)行程序包有且只有一個(gè)<.package>文件。
3.<.module>文件包含了作為本程序包的一個(gè)組成部分的詳細(xì)信息,經(jīng)過(guò)后端處理后可能成為一個(gè)可加載模塊(如microsoft windows下的DLL或EXE或VXD文件或別的包含可加載模塊的文件),也可能不是一個(gè)可加載模塊,而是一個(gè)數(shù)據(jù)文件,也可能包含一個(gè)經(jīng)過(guò)后端處理后就可加載的信息和其它數(shù)據(jù)。
4.<.data>文件用于保存一些數(shù)據(jù)信息(也可能需要進(jìn)行轉(zhuǎn)換)。
5.<.debug>文件用于保存一些在目標(biāo)平臺(tái)上實(shí)現(xiàn)對(duì)程序進(jìn)行調(diào)試的功能的信息。
6.在生成部分中要包括非常大的信息量(1.)本可執(zhí)行程序包包含了本程序包中使用的各種常量的列表,因?yàn)樵诓煌挠?jì)算機(jī)系統(tǒng)中數(shù)據(jù)的表示方法可能不同;(2.)本可執(zhí)行程序包包含了提供了內(nèi)部接口的軟件環(huán)境和硬件平臺(tái)的列表;(3.)本可執(zhí)行程序包包含了本可執(zhí)行程序包的各個(gè)模塊之間的引用信息;(4.)本可執(zhí)行程序包包含了本可執(zhí)行程序包引用的其它的軟件或可執(zhí)行程序包提供的功能的信息;(5.)本可執(zhí)行程序包包含了開(kāi)發(fā)人員對(duì)程序執(zhí)行的目標(biāo)硬件平臺(tái)和軟件環(huán)境的一些特殊要求(如要求硬件平臺(tái)為64位以上的計(jì)算機(jī)或軟件環(huán)境為多任務(wù)操作系統(tǒng)等等)。
后端部分1.在目標(biāo)機(jī)上進(jìn)行可執(zhí)行程序包和軟件包管理的軟件包,負(fù)責(zé)調(diào)度可執(zhí)行程序包和軟件包的處理和對(duì)可執(zhí)行程序包和軟件包進(jìn)行添加、升級(jí)、移動(dòng)、刪除、監(jiān)視等管理功能的軟件包(也可以對(duì)本身進(jìn)行管理,另監(jiān)視功能可以實(shí)現(xiàn)對(duì)一些感染可執(zhí)行文件的病毒的防范等功能),稱(chēng)為后端包管理軟件包。
2.提供了接口調(diào)用的后端軟件包,后端軟件包與可執(zhí)行程序包實(shí)現(xiàn)結(jié)合的實(shí)現(xiàn)方式可能有很大的不同(如在Microsoft windows平臺(tái)上可能轉(zhuǎn)換成為對(duì)DLL的調(diào)用,也可能轉(zhuǎn)換成為靜態(tài)調(diào)用,當(dāng)然針對(duì)不同的軟件環(huán)境和硬件平臺(tái)的特點(diǎn)差異很大)這依賴(lài)于不同的系統(tǒng)和可執(zhí)行程序包的不同要求。
3.對(duì)虛擬機(jī)可執(zhí)行代碼與后端軟件包及內(nèi)部調(diào)用接口進(jìn)行結(jié)合的軟件包,產(chǎn)生完備的程序或程序集,稱(chēng)為后端連接器,是后端編譯器的一部分。
4.對(duì)虛擬機(jī)可執(zhí)行代碼進(jìn)行代碼轉(zhuǎn)換的軟件包,實(shí)現(xiàn)從虛代碼到本機(jī)特定代碼的轉(zhuǎn)換(也可能包含有優(yōu)化)和生成對(duì)后端軟件包和內(nèi)部調(diào)用接口的具體調(diào)用代碼的軟件包,稱(chēng)為后端轉(zhuǎn)換器,是后端編譯器的一部分5.對(duì)生成部分的<.data>文件進(jìn)行轉(zhuǎn)換的數(shù)據(jù)文件轉(zhuǎn)換器軟件包。
6.一個(gè)利用生成部分的<.debug>文件對(duì)虛擬機(jī)可執(zhí)行文件進(jìn)行調(diào)試的目標(biāo)調(diào)試器軟件包。
利用BSP系統(tǒng)開(kāi)發(fā)程序的工作流程為第一部分源程序部分撰寫(xiě)部分撰寫(xiě)或使用以下部分1.包含用任何支持BSP的語(yǔ)言(可以是任意的語(yǔ)言如C、C++、PASCAL等,只要支持BSP即可)編寫(xiě)源代碼。
2.源程序可能引用對(duì)通用軟件平臺(tái)的調(diào)用接口的進(jìn)行描述的針對(duì)某種程序設(shè)計(jì)語(yǔ)言的接口文件,類(lèi)似于C/C++中的#include的頭文件。
3.包含有通用平臺(tái)軟件調(diào)用接口的詳細(xì)信息的接口描述文件包括接口功能名(或接口在包中的位置)、參數(shù)個(gè)數(shù)、參數(shù)順序,調(diào)用約定等信息用于幫助后端編譯器實(shí)現(xiàn)聯(lián)結(jié)的具體代碼,我們稱(chēng)為通用平臺(tái)軟件包的接口文件。
4.源程序還可能包含有一些用于生成最終可執(zhí)行代碼的語(yǔ)言的源代碼,如果你要使用的功能在通用軟件平臺(tái)上沒(méi)有實(shí)現(xiàn),那么,你必須利用一種能夠生成目標(biāo)機(jī)最終可執(zhí)行代碼的語(yǔ)言撰寫(xiě)實(shí)現(xiàn)相應(yīng)功能的源程序(如果想在多個(gè)平臺(tái)上使用這個(gè)程序,就必須提供在多個(gè)平臺(tái)上的相應(yīng)的源代碼)。
第二部分前端聯(lián)編1.將上一個(gè)部分的(3)的源代碼聯(lián)編生成目標(biāo)機(jī)上的最終可執(zhí)行代碼(如果想在多個(gè)平臺(tái)上可以使用這個(gè)程序,就必須有相應(yīng)平臺(tái)上的源代碼,生成該功能調(diào)用的不同平臺(tái)的多個(gè)版本)和一個(gè)內(nèi)部的接口信息部分。
2.根據(jù)本部分(1)的接口信息和上一個(gè)部分(1)的源代碼和(2)的接口信息進(jìn)行聯(lián)編,生成包含內(nèi)部引用信息、通用平臺(tái)軟件調(diào)用接口信息、虛擬機(jī)可執(zhí)行代碼的虛擬機(jī)可執(zhí)行程序。
3.進(jìn)行仿真調(diào)試修改第三部分后端聯(lián)編(自動(dòng)完成)1.首先檢查上一個(gè)部分(2)提供的虛擬機(jī)可執(zhí)行程序的版本,如果本后端聯(lián)編器不能夠支持該版本,則不能執(zhí)行。
2.檢查軟件開(kāi)發(fā)人員對(duì)目標(biāo)硬件平臺(tái)和軟件環(huán)境的要求能否在本機(jī)得到滿(mǎn)足,若不能滿(mǎn)足則不能使用。
3.還要檢查該虛擬機(jī)可執(zhí)行程序是否包含有內(nèi)部接口信息和本機(jī)是否有能力執(zhí)行該程序,如果包含有內(nèi)部接口信息就要檢查是否針對(duì)本機(jī)平臺(tái)的接口,如果沒(méi)有針對(duì)本機(jī)平臺(tái)的接口而本機(jī)又不能夠兼容它所提供的接口(如它為intel 8086處理器提供了接口而沒(méi)有為intel pentium處理器提供接口,因?yàn)樵谔幚砥鞣矫鎝entium可以兼容8086,則也能夠兼容它提供的接口,反之則不可以)則本機(jī)不能執(zhí)行該程序,同理,如果虛擬機(jī)可執(zhí)行程序?qū)?shù)字的值的使用超過(guò)了0xffffffff,則對(duì)數(shù)字表示范圍小于0xffffffff的計(jì)算機(jī)平臺(tái)就不能執(zhí)行該程序,如果虛擬可執(zhí)行程序的字符集為雙字節(jié)(假定每個(gè)字節(jié)8位),那么字符集寬度為單字節(jié)的計(jì)算機(jī)平臺(tái)就不能執(zhí)行該程序,如果目標(biāo)機(jī)上沒(méi)有一些必須后端軟件包也不能使用該程序,同理適用于其它一些情況。
4.然后利用內(nèi)部接口和本計(jì)算機(jī)的后端軟件包提供的調(diào)度接口實(shí)現(xiàn)具體的動(dòng)態(tài)或靜態(tài)聯(lián)編,利用虛擬機(jī)代碼轉(zhuǎn)換軟件包生成本機(jī)的最終可執(zhí)行代碼.可以在BSP的包管理軟件包下執(zhí)行,也可以直接執(zhí)行。
當(dāng)然,BSP只是本發(fā)明的一個(gè)部分,是本發(fā)明的一個(gè)實(shí)施方法。
權(quán)利要求
1.一種程序執(zhí)行方法,其特征在于在一臺(tái)計(jì)算機(jī)上對(duì)源程序進(jìn)行詞法分析、語(yǔ)法分析、語(yǔ)義分析、生成中間代碼、代碼優(yōu)化過(guò)程,生成包含邏輯和數(shù)學(xué)代碼及對(duì)軟件環(huán)境的調(diào)度接口信息的虛擬機(jī)可執(zhí)行程序。
2.根據(jù)權(quán)利要求1所述的程序執(zhí)行方法,其特征在于沒(méi)有軟件包支持的功能時(shí),比如一個(gè)特殊的沒(méi)有軟件包支持的外部設(shè)備,就必須提供該功能的應(yīng)用于將使用的目標(biāo)機(jī)的C或匯編或其它任何程序設(shè)計(jì)語(yǔ)言的源程序,并且經(jīng)過(guò)編譯后產(chǎn)生包含能夠被后端編譯器所識(shí)別的最終可執(zhí)行代碼的文件,用于生成目標(biāo)系統(tǒng)可執(zhí)行程序。
3.根據(jù)權(quán)利要求1或2所述的程序執(zhí)行方法,其特征在于該虛擬機(jī)可執(zhí)行程序已經(jīng)包括了全部的邏輯/數(shù)學(xué)信息和對(duì)軟件環(huán)境的調(diào)度接口信息,可以與后端軟件包聯(lián)合進(jìn)行程序調(diào)試。
4.根據(jù)權(quán)利要求1或2所述的程序執(zhí)行方法,其特征在于執(zhí)行過(guò)程之前要經(jīng)過(guò)針對(duì)特定目標(biāo)機(jī)硬件平臺(tái)和目標(biāo)軟件環(huán)境的代碼轉(zhuǎn)換和自動(dòng)完成對(duì)軟件環(huán)境的接口的調(diào)用的處理工作的代碼及可能的特殊功能的接口的調(diào)用的處理工作的代碼;生成目標(biāo)系統(tǒng)可執(zhí)行程序,這樣就可以在目標(biāo)機(jī)上正常運(yùn)行;最后的可執(zhí)行程序能夠在完成本身邏輯和數(shù)學(xué)的功能的前提下,充分利用目標(biāo)機(jī)的軟硬件資源。
5.一種程序執(zhí)行裝置,其特征在于包括a.一個(gè)存儲(chǔ)了調(diào)度接口信息的裝置;b.一個(gè)能夠根據(jù)語(yǔ)言的源程序和調(diào)度接口信息進(jìn)行聯(lián)編和連接的裝置和一個(gè)能夠根據(jù)以上的信息生成只包含邏輯和數(shù)學(xué)代碼及調(diào)度接口信息的裝置;c.一個(gè)存儲(chǔ)了調(diào)度接口實(shí)現(xiàn)代碼的裝置;d.一個(gè)對(duì)邏輯和數(shù)學(xué)代碼進(jìn)行轉(zhuǎn)換成為可加載的代碼的裝置;e.一個(gè)能夠根據(jù)目標(biāo)環(huán)境轉(zhuǎn)換和生成調(diào)度接口代碼的裝置。
全文摘要
本發(fā)明涉及一種程序執(zhí)行方法,一種利用執(zhí)行純邏輯和數(shù)學(xué)命令的虛擬機(jī)來(lái)實(shí)現(xiàn)的一種程序執(zhí)行方法,在程序執(zhí)行的計(jì)算機(jī)上將該虛擬機(jī)的指令轉(zhuǎn)換為該計(jì)算機(jī)上的特定的指令和對(duì)軟件環(huán)境相應(yīng)功能的調(diào)用,實(shí)現(xiàn)兼容性和速度的兼顧,并且具有更好的系統(tǒng)性能和更小的系統(tǒng)維護(hù)代價(jià)等優(yōu)點(diǎn)。
文檔編號(hào)G06F9/45GK1265488SQ0010280
公開(kāi)日2000年9月6日 申請(qǐng)日期2000年3月6日 優(yōu)先權(quán)日2000年3月6日
發(fā)明者周大凱 申請(qǐng)人:周大凱