專利名稱:基于工作例程/主導(dǎo)例程與代理構(gòu)件在本地/遠(yuǎn)程運(yùn)行線程/進(jìn)程的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種在計(jì)算機(jī)中運(yùn)行線程/進(jìn)程的機(jī)制,尤其是一種利用工作例程/主導(dǎo)例程在本地/遠(yuǎn)程進(jìn)行安全地啟動(dòng)運(yùn)行線程/進(jìn)程的機(jī)制。屬于計(jì)算機(jī)技術(shù)領(lǐng)域。
背景技術(shù):
線程與進(jìn)程的概念是在任何計(jì)算機(jī)操作系統(tǒng)中都存在而且很重要的,對(duì)線程/進(jìn)程的管理(創(chuàng)建對(duì)象、啟動(dòng)運(yùn)行、退出運(yùn)行、釋放資源)是操作系統(tǒng)功能中不可或缺的一個(gè)重要組成部分。在公知的操作系統(tǒng)(MSDos/Unix/Linux/Windows,下同)中,線程通常是指在一個(gè)特定的進(jìn)程環(huán)境之下,執(zhí)行一個(gè)代碼段并為其提供執(zhí)行環(huán)境。為了執(zhí)行代碼,通常需要?jiǎng)?chuàng)建一個(gè)棧和一個(gè)含上下文的控制塊,還需要占用一部分其隸屬進(jìn)程的地址空間與代碼模塊。當(dāng)某個(gè)具體線程真正開始執(zhí)行時(shí),其實(shí)質(zhì)是執(zhí)行“一段函數(shù)代碼”。進(jìn)程的執(zhí)行通常是加載/運(yùn)行應(yīng)用程序的可執(zhí)行模塊。
隨著操作系統(tǒng)逐漸從桌面應(yīng)用向網(wǎng)絡(luò)應(yīng)用的轉(zhuǎn)移與發(fā)展,在下一代因特網(wǎng)操作系統(tǒng)中,對(duì)在網(wǎng)絡(luò)環(huán)境中進(jìn)行遠(yuǎn)程地動(dòng)態(tài)地創(chuàng)建/運(yùn)行/退出進(jìn)程/線程的需求日益突出,而如何提高網(wǎng)絡(luò)計(jì)算機(jī)的數(shù)據(jù)安全問題則一直顯得格外重要。目前有關(guān)這方面的工作進(jìn)展主要集中在“網(wǎng)絡(luò)管理軟件”這一層面上,其本質(zhì)是操作系統(tǒng)之上的一些應(yīng)用程序,而沒有在操作系統(tǒng)這一“系統(tǒng)管理軟件”層面上來實(shí)現(xiàn)并支持對(duì)遠(yuǎn)程計(jì)算機(jī)創(chuàng)建/運(yùn)行/退出進(jìn)程/線程的請(qǐng)求的安全驗(yàn)證并提供相關(guān)服務(wù),這就使得一些不法分子可以利用并不很專業(yè)的手段來盜取網(wǎng)絡(luò)數(shù)據(jù),從而進(jìn)行犯罪活動(dòng),這使得網(wǎng)絡(luò)安全這一問題難以從根本上得到解決。
在面向中間件的編程環(huán)境中,通常在操作系統(tǒng)之上進(jìn)行代理中間件的開發(fā),客戶端程序通過調(diào)用代理中間件的方法來完成期望的功能,只需要代理中間件服務(wù)組件在操作系統(tǒng)中進(jìn)行了注冊(cè),則應(yīng)用程序執(zhí)行時(shí)可以直接調(diào)用其方法來完成需要的功能,此時(shí),目前公知操作系統(tǒng)做的工作僅僅是把中間件程序模塊加載到內(nèi)存中,而沒有在操作系統(tǒng)內(nèi)核中對(duì)需要啟動(dòng)運(yùn)行的線程請(qǐng)求作系統(tǒng)訪問權(quán)限的的驗(yàn)證,由于代理中間件程序絕大多數(shù)是由一些作代理服務(wù)的人員或公司編寫,其實(shí)質(zhì)也是操作系統(tǒng)之上的應(yīng)用程序模塊,也沒有在內(nèi)核中實(shí)現(xiàn),操作系統(tǒng)對(duì)其管理就是對(duì)注冊(cè)表進(jìn)行管理,眾所周知,注冊(cè)表其本身是公開的,是很容易被修改的,目前流行的不少病毒就是通過修改注冊(cè)表來達(dá)到破壞系統(tǒng)的目的。因此,在對(duì)運(yùn)行一個(gè)程序/線程這個(gè)環(huán)節(jié)上,公知操作系統(tǒng)沒有作是否是合法運(yùn)行請(qǐng)求的驗(yàn)證,因?yàn)檫@不簡(jiǎn)單是個(gè)驗(yàn)證問題,而這涉及到如何啟動(dòng)/運(yùn)行一個(gè)程序的模型設(shè)計(jì)及其技術(shù)實(shí)現(xiàn)。
發(fā)明內(nèi)容
本發(fā)明的主要目的在于提供一種基于工作例程/主導(dǎo)例程與代理構(gòu)件在本地/遠(yuǎn)程運(yùn)行線程/進(jìn)程的方法,它在面向構(gòu)件的編程環(huán)境中,客戶程序訪問系統(tǒng),經(jīng)過工作例程/主導(dǎo)例程運(yùn)行,執(zhí)行代理構(gòu)件功能,啟動(dòng)線程/進(jìn)程,滿足本地/遠(yuǎn)程應(yīng)用服務(wù),離開系統(tǒng)結(jié)束訪問,在遠(yuǎn)程進(jìn)行創(chuàng)建/運(yùn)行/退出線程/進(jìn)程提供了新的途徑,可實(shí)現(xiàn)服務(wù)功能的遠(yuǎn)程運(yùn)行、本地應(yīng)用,更適于下一代網(wǎng)絡(luò)服務(wù)。
本發(fā)明的又一目的在于基于工作例程/主導(dǎo)例程與代理構(gòu)件在本地/遠(yuǎn)程運(yùn)行線程/進(jìn)程的方法,它通過工作例程/主導(dǎo)例程進(jìn)行驗(yàn)證,還可通過系統(tǒng)驗(yàn)證,能夠提高在本地、尤其在遠(yuǎn)程啟動(dòng)/運(yùn)行線程/進(jìn)程時(shí)的安全性,完善計(jì)算機(jī)網(wǎng)絡(luò)安全。
本發(fā)明的又一目的在于基于工作例程/主導(dǎo)例程與代理構(gòu)件在本地/遠(yuǎn)程運(yùn)行線程/進(jìn)程的方法,它利用代理構(gòu)件的結(jié)構(gòu),能夠進(jìn)一步擴(kuò)大代理服務(wù)的功能。
為此,本發(fā)明通過如下技術(shù)方案實(shí)現(xiàn)上述目的一種基于工作例程/主導(dǎo)例程與代理構(gòu)件在本地/遠(yuǎn)程運(yùn)行線程/進(jìn)程的方法,它包括在客戶端和服務(wù)端操作系統(tǒng)內(nèi)核中預(yù)先實(shí)現(xiàn)工作例程/主導(dǎo)例程對(duì)象,工作例程/主導(dǎo)例程對(duì)象至少有啟動(dòng)與結(jié)束兩個(gè)方法;根據(jù)客戶端需求在服務(wù)端創(chuàng)建線程/進(jìn)程時(shí),調(diào)用線程/進(jìn)程對(duì)象接口智能指針的啟動(dòng)方法啟動(dòng)服務(wù)端線程/進(jìn)程對(duì)象執(zhí)行,將線程運(yùn)行轉(zhuǎn)化為運(yùn)行工作例程對(duì)象;將進(jìn)程加載/運(yùn)行應(yīng)用程序的可執(zhí)行模塊轉(zhuǎn)化為運(yùn)行一主導(dǎo)例程對(duì)象;運(yùn)行結(jié)束時(shí),再調(diào)用線程/進(jìn)程對(duì)象接口智能指針的結(jié)束方法,結(jié)束線程/進(jìn)程。
根據(jù)客戶端需求在服務(wù)端創(chuàng)建/運(yùn)行/結(jié)束線程時(shí),客戶端操作系統(tǒng)調(diào)用系統(tǒng)API,獲取指定接口智能指針,定義一個(gè)線程/進(jìn)程對(duì)象接口智能指針,并在服務(wù)端創(chuàng)建其實(shí)例,到服務(wù)端系統(tǒng);再利用服務(wù)端系統(tǒng)接口方法創(chuàng)建服務(wù)端線程/進(jìn)程對(duì)象,訪問服務(wù)端系統(tǒng)線程/進(jìn)程對(duì)象,服務(wù)端線程/進(jìn)程對(duì)象通過工作例程/主導(dǎo)例程的啟動(dòng)方法啟動(dòng),同時(shí)將接口智能指針返回客戶端;運(yùn)行結(jié)束時(shí),客戶端調(diào)用服務(wù)端線程/進(jìn)程對(duì)象接口智能指針的結(jié)束方法,訪問服務(wù)端工作例程/主導(dǎo)例程的結(jié)束方法,結(jié)束線程/進(jìn)程。其中,客戶端或服務(wù)端為本地或遠(yuǎn)程。
在客戶端和服務(wù)端之間設(shè)置代理構(gòu)件功能模塊,代理構(gòu)件功能模塊中包括對(duì)應(yīng)于應(yīng)用的功能方法以及工作例程/主導(dǎo)例程接口;工作例程/主導(dǎo)例程啟動(dòng)方法參數(shù)至少包括工作例程/主導(dǎo)例程對(duì)象的引用或包含工作例程/主導(dǎo)例程接口代理構(gòu)件功能模塊的類智能指針;在服務(wù)端創(chuàng)建/運(yùn)行結(jié)束線程/進(jìn)程時(shí),服務(wù)端利用工作例程/主導(dǎo)例程接口的方法,由代理構(gòu)件功能模塊中所提供應(yīng)用功能,調(diào)用功能函數(shù)完成某具體功能的執(zhí)行,客戶端工作例程/主導(dǎo)例程結(jié)束方法通知服務(wù)端結(jié)束,服務(wù)端工作例程/主導(dǎo)例程結(jié)束方法通知代理構(gòu)件結(jié)束,代理構(gòu)件功能模塊利用工作例程/主導(dǎo)例程結(jié)束方法結(jié)束執(zhí)行,并將信息返回服務(wù)端系統(tǒng)。
服務(wù)端工作例程/主導(dǎo)例程啟動(dòng)方法執(zhí)行后,首先判斷是否有重載,如果有,則直接進(jìn)入代理構(gòu)件功能模塊工作例程/主導(dǎo)例程啟動(dòng)執(zhí)行某功能;如果沒有,則開始調(diào)用功能構(gòu)件方法,再進(jìn)行工作例程/主導(dǎo)例程啟動(dòng)。
代理構(gòu)件獨(dú)立于服務(wù)端或與服務(wù)端設(shè)置為一體,或者于客戶端為一體。
代理構(gòu)件內(nèi)除了可以選擇是否重載工作例程/主導(dǎo)例程的啟動(dòng)方法與結(jié)束方法外,其它是用戶或者代理構(gòu)件服務(wù)開發(fā)商所提供的具體的功能函數(shù)模塊的方法。
代理構(gòu)件功能模塊僅包括工作例程/主導(dǎo)例程的啟動(dòng)與結(jié)束方法,代理構(gòu)件功能模塊成為工作例程/主導(dǎo)例程對(duì)象,采用代理構(gòu)件功能模塊繼承/包含一個(gè)工作例程接口直接執(zhí)行一個(gè)工作例程對(duì)象。
代理構(gòu)件功能模塊的工作例程/主導(dǎo)例程接口為包含或繼承的接口。
用戶指定工作例程/主導(dǎo)例程對(duì)象運(yùn)行時(shí)執(zhí)行程序的入口函數(shù),工作例程/主導(dǎo)例程對(duì)象的啟動(dòng)方法采用回調(diào)函數(shù)的方式來執(zhí)行用戶定義的入口函數(shù)。
服務(wù)端系統(tǒng)的工作例程/主導(dǎo)例程的啟動(dòng)方法參數(shù)還包括帶有密鑰和/或運(yùn)行參數(shù)的參數(shù),用以對(duì)用戶創(chuàng)建線程/進(jìn)程時(shí)的系統(tǒng)安全許可驗(yàn)證。參數(shù)為字符串類型或數(shù)字類型或數(shù)據(jù)包格式。
工作例程啟動(dòng)方法中還包括有對(duì)當(dāng)前系統(tǒng)、當(dāng)前進(jìn)程、相關(guān)線程對(duì)象的運(yùn)行環(huán)境的參數(shù)設(shè)置,用以對(duì)客戶端遠(yuǎn)程創(chuàng)建線程時(shí)的系統(tǒng)安全許可驗(yàn)證。
在服務(wù)端系統(tǒng)上運(yùn)行線程/進(jìn)程時(shí),系統(tǒng)首先解開參數(shù)包,在內(nèi)核的工作例程/主導(dǎo)例程對(duì)象的啟動(dòng)方法中進(jìn)行系統(tǒng)密鑰驗(yàn)證,以確認(rèn)該遠(yuǎn)程用戶是否擁有訪問本機(jī)器/系統(tǒng)的權(quán)利,如果有,則可運(yùn)行;否則系統(tǒng)拒絕運(yùn)行。
密鑰驗(yàn)證還包括確認(rèn)該客戶端用戶是否擁有訪問本服務(wù)端機(jī)器/系統(tǒng)指定進(jìn)程的權(quán)利,如果有,則可運(yùn)行;否則系統(tǒng)拒絕運(yùn)行。
離開服務(wù)端系統(tǒng)前,在結(jié)束方法中進(jìn)行服務(wù)確認(rèn)的簽名工作,包括存留客戶名稱、服務(wù)時(shí)間、服務(wù)內(nèi)容、使用資源信息。
在代理構(gòu)件中設(shè)置服務(wù)權(quán)限控制密鑰,客戶端要求提供服務(wù)時(shí),創(chuàng)建/運(yùn)行線程/進(jìn)程,進(jìn)入代理構(gòu)件獲取構(gòu)件方法實(shí)際功能時(shí),首先解包,通過啟動(dòng)方法進(jìn)行密鑰驗(yàn)證,通過者,可獲取構(gòu)件方法實(shí)際功能,否則退出,拒絕創(chuàng)建/運(yùn)行線程/進(jìn)程。密鑰驗(yàn)證包括實(shí)際功能服務(wù)要求和/或服務(wù)類型的私鑰驗(yàn)證。
在代理構(gòu)件功能模塊某功能服務(wù)結(jié)束時(shí),在結(jié)束方法中進(jìn)行服務(wù)確認(rèn)的簽名工作,包括存留客戶名稱、服務(wù)時(shí)間、服務(wù)程序,占用的系統(tǒng)資源。
在客戶端,接口智能指針返回客戶端后,包括設(shè)置安全密鑰和/或參數(shù),用于配合服務(wù)端系統(tǒng)和/或代理構(gòu)件端創(chuàng)建/運(yùn)行線程/進(jìn)程前安全機(jī)制的密鑰驗(yàn)證。
在面向構(gòu)件的編程環(huán)境中,本發(fā)明提供了一個(gè)工作例程接口,寫為IWorkerApplet,它是為下一代網(wǎng)絡(luò)編程中將使用到的ActiveObject對(duì)象所引出的接口,ActiveObjeet與工作例程共同構(gòu)成了Agent對(duì)象,為遠(yuǎn)程調(diào)用提供代理服務(wù),不允許用戶通過地址進(jìn)行創(chuàng)建/執(zhí)行遠(yuǎn)程線程,從安全性方面及計(jì)算模型方面完善遠(yuǎn)程線程創(chuàng)建/執(zhí)行的概念。Agent對(duì)象通過遠(yuǎn)程用戶對(duì)工作例程接口的調(diào)用而被激活。
在本發(fā)明中,工作例程在操作系統(tǒng)中的位置是系統(tǒng)利用了進(jìn)程池與線程池來管理系統(tǒng)中的進(jìn)程與線程,在整個(gè)系統(tǒng)中有一個(gè)進(jìn)程池,進(jìn)程池中容納著一定個(gè)數(shù)的進(jìn)程對(duì)象,每個(gè)進(jìn)程對(duì)象又擁有一個(gè)線程池,線程池中容納著一定個(gè)數(shù)的線程對(duì)象,每個(gè)線程對(duì)象除了一些基本設(shè)置外,其中包含一個(gè)工作例程對(duì)象,這個(gè)工作例程對(duì)象就是該線程真正執(zhí)行時(shí)的入口點(diǎn),這個(gè)入口點(diǎn)在創(chuàng)建該線程對(duì)象、也就是同時(shí)創(chuàng)建該工作例程對(duì)象時(shí)就確定了。
在創(chuàng)建工作例程對(duì)象時(shí),系統(tǒng)將會(huì)根據(jù)當(dāng)前的系統(tǒng)用戶設(shè)置、當(dāng)前的服務(wù)進(jìn)程以及環(huán)境變量,按照一定規(guī)則來產(chǎn)生一個(gè)屬于該工作例程對(duì)象的系統(tǒng)密鑰,由于在同一系統(tǒng)中,不同用戶或不同進(jìn)程或不同環(huán)境下產(chǎn)生的這個(gè)密鑰不一定相同,為區(qū)別通常意義下的系統(tǒng)密鑰,直接稱這里的工作例程的密鑰為“啟動(dòng)密鑰”,因?yàn)槠淠康木褪窃谟隍?yàn)證用戶是否具有啟動(dòng)并運(yùn)行此工作例程對(duì)象的權(quán)利。由于工作例程對(duì)象是構(gòu)件化的組件對(duì)象,而且在操作系統(tǒng)內(nèi)核中創(chuàng)建,因此,用戶不能在應(yīng)用程序中指定其起始地址,也不能輕易更改其啟動(dòng)密鑰,而只能調(diào)用代理構(gòu)件已有的功能函數(shù)進(jìn)行服務(wù)。這就大大提高了在遠(yuǎn)程計(jì)算機(jī)上運(yùn)行一個(gè)線程的安全性。
在工作例程對(duì)象中,無(wú)論其接口還是類,都具有如下的特征至少有兩個(gè)方法啟動(dòng)方法,完成方法。啟動(dòng)方法的參數(shù)至少有兩個(gè)一個(gè)是代理構(gòu)件類的接口智能指針,一個(gè)是帶有密鑰和參數(shù)的數(shù)據(jù)包。在本發(fā)明中,用戶可以自己編寫代理構(gòu)件,實(shí)現(xiàn)需要的功能。在代理構(gòu)件中,要求必須包含或繼承工作例程接口,否則編譯提示出錯(cuò)。除了要實(shí)現(xiàn)代理構(gòu)件各個(gè)方法自身需要執(zhí)行的功能代碼之外,用戶可以選擇重載IWprkerApplet接口的啟動(dòng)方法和完成方法,也可以不重載而使用系統(tǒng)默認(rèn)實(shí)現(xiàn)。
在本發(fā)明中,線程的啟動(dòng)/運(yùn)行通過工作例程對(duì)象來實(shí)現(xiàn),整個(gè)模型是客戶程序——操作系統(tǒng)內(nèi)核——啟動(dòng)并開始執(zhí)行此線程對(duì)象對(duì)應(yīng)的工作例程對(duì)象——系統(tǒng)身份或密鑰驗(yàn)證——如通過,進(jìn)入代理構(gòu)件——代理構(gòu)件進(jìn)行服務(wù)類別驗(yàn)證——如通過,調(diào)用相應(yīng)功能函數(shù)完成功能——執(zhí)行代理構(gòu)件中重載的完成方法(功能服務(wù)完成,簽名確認(rèn))——執(zhí)行系統(tǒng)內(nèi)核中工作例程對(duì)象的完成方法(系統(tǒng)服務(wù)完成,簽名確認(rèn))——離開系統(tǒng)。
本發(fā)明中的說明以線程的啟動(dòng)/運(yùn)行為例,需要指出的是,對(duì)于在遠(yuǎn)程機(jī)器上運(yùn)行一個(gè)進(jìn)程(應(yīng)用程序),同樣可以使用工作例程這一機(jī)制,基于這一思想,在本發(fā)明的操作系統(tǒng)中,一個(gè)進(jìn)程的加載/運(yùn)行也不是公知操作系統(tǒng)中的傳統(tǒng)的程序模塊,而是一個(gè)主導(dǎo)例程(主導(dǎo)例程)對(duì)象,把加載/運(yùn)行進(jìn)程的“一個(gè)程序模塊”的概念發(fā)展成為“加載一個(gè)程序構(gòu)件,運(yùn)行一個(gè)主導(dǎo)例程對(duì)象”的概念。
與線程中工作例程不同的是主導(dǎo)例程是與進(jìn)程相關(guān)的概念,對(duì)于每個(gè)進(jìn)程對(duì)象,都有一個(gè)相應(yīng)主導(dǎo)例程對(duì)象,主導(dǎo)例程對(duì)象在進(jìn)程對(duì)象被構(gòu)造時(shí)同時(shí)被構(gòu)造,系統(tǒng)根據(jù)當(dāng)前設(shè)置、環(huán)境變量產(chǎn)生一個(gè)對(duì)應(yīng)的啟動(dòng)密鑰。系統(tǒng)同樣實(shí)現(xiàn)了對(duì)主導(dǎo)例程接口、主導(dǎo)例程類對(duì)象的封裝,其中至少包含啟動(dòng)方法、退出方法,在用戶程序中,可以被重載,也可以不被重載。當(dāng)用戶程序需要啟動(dòng)/運(yùn)行一個(gè)進(jìn)程時(shí),操作系統(tǒng)就開始執(zhí)行與其進(jìn)程對(duì)象對(duì)應(yīng)的主導(dǎo)例程對(duì)象,然后進(jìn)行啟動(dòng)密鑰的驗(yàn)證,如果通過驗(yàn)證,則進(jìn)入功能服務(wù)程序。
基于本發(fā)明操作系統(tǒng)的應(yīng)用程序,在面向構(gòu)件的編程環(huán)境中完成,其主要步驟是首先,在操作系統(tǒng)內(nèi)核中實(shí)現(xiàn)對(duì)進(jìn)程與線程的管理,本發(fā)明中采用了基于構(gòu)件的進(jìn)程池與線程池管理技術(shù),在進(jìn)程對(duì)象中維護(hù)這一個(gè)主導(dǎo)例程對(duì)象,在線程對(duì)象中維護(hù)這一個(gè)工作例程對(duì)象;其次,編寫代理構(gòu)件,其中包括編寫構(gòu)件自描述語(yǔ)言,功能代碼,編譯成動(dòng)態(tài)連接庫(kù);最后,編寫客戶端的程序。其中在適當(dāng)?shù)胤絼?chuàng)建進(jìn)程/線程,把密鑰和參數(shù)打包,然后調(diào)用其啟動(dòng)方法在指定的機(jī)器上啟動(dòng)/運(yùn)行進(jìn)程/線程,執(zhí)行完成時(shí),調(diào)用其完成方法可以結(jié)束進(jìn)程/線程的運(yùn)行。
無(wú)論是線程還是進(jìn)程,其執(zhí)行要指定一個(gè)入口地址,在現(xiàn)有的編程語(yǔ)言(C/C++,VC/VC++,Pascal,Basic及其可視化編程語(yǔ)言系列)中,以C/C++為例來說明,利用了工作例程與主導(dǎo)例程機(jī)制之后帶來的編程模式上的最大變化在于利用代理構(gòu)件這一中間件,在需要啟動(dòng)線程時(shí),啟動(dòng)函數(shù)的參數(shù)不是一個(gè)函數(shù)的地址,而是一個(gè)工作例程對(duì)象;在加載運(yùn)行一個(gè)進(jìn)程時(shí),其入口點(diǎn)可以不再是執(zhí)行模塊中的主函數(shù)main()、wmain、winmain(),換句話說,在可執(zhí)行模塊(本說明書中,“可執(zhí)行模塊”也就)中,可以沒有作為入口的主函數(shù),因?yàn)橄到y(tǒng)運(yùn)行進(jìn)程是運(yùn)行一個(gè)主導(dǎo)例程對(duì)象,從主導(dǎo)例程對(duì)象的啟動(dòng)方法啟動(dòng)開始執(zhí)行,而主導(dǎo)例程在進(jìn)程對(duì)象構(gòu)造時(shí)被同時(shí)構(gòu)造,其實(shí)現(xiàn)在系統(tǒng)內(nèi)核中,從某種意義上講,其啟動(dòng)方法可以簡(jiǎn)單看作就是程序的主函數(shù)入口點(diǎn),然而,其實(shí)現(xiàn)卻是在系統(tǒng)內(nèi)核,而不是在應(yīng)用程序中。
另一方面,在本發(fā)明中,啟動(dòng)/運(yùn)行進(jìn)程時(shí)的“可執(zhí)行模塊”可以就是“代理構(gòu)件”,“代理構(gòu)件”本身包含或繼承主導(dǎo)例程接口,此外主要是其具體的功能函數(shù)的實(shí)現(xiàn),其中沒有入口主函數(shù),但是是一個(gè)完整的構(gòu)件,基于這樣的構(gòu)件是用于啟動(dòng)/進(jìn)程的構(gòu)件,特稱為“進(jìn)程構(gòu)件”。同樣,包含或繼承工作例程接口的用于啟動(dòng)/運(yùn)行線程的代理構(gòu)件可以特稱為“線程構(gòu)件”。線程構(gòu)件與進(jìn)程構(gòu)件是本發(fā)明中代理構(gòu)件中的特例。
本發(fā)明中的線程/進(jìn)程的啟動(dòng)機(jī)制中的工作例程與主導(dǎo)例程接口及其類對(duì)象,均在面向構(gòu)件的編程環(huán)境中進(jìn)行實(shí)現(xiàn)。系統(tǒng)自動(dòng)實(shí)現(xiàn)了對(duì)標(biāo)準(zhǔn)接口類的封裝,屏蔽了調(diào)用COM構(gòu)件對(duì)象過程的繁瑣細(xì)節(jié),簡(jiǎn)化了進(jìn)行本地/遠(yuǎn)程創(chuàng)建/訪問/退出進(jìn)程/線程的用戶編程,具有構(gòu)件升級(jí)的獨(dú)立性、本地/遠(yuǎn)程透明性、編程語(yǔ)言無(wú)關(guān)性。
另外,本發(fā)明啟動(dòng)方法時(shí)帶有參數(shù)arg,這個(gè)參數(shù)在調(diào)用線程對(duì)象的啟動(dòng)方法時(shí)傳入,其設(shè)計(jì)目的不僅在于傳入一個(gè)普通的數(shù)據(jù),更為重要的是它可以用于對(duì)用戶,尤其是遠(yuǎn)程用戶的執(zhí)行線程請(qǐng)求作“簽名驗(yàn)證”,只要在服務(wù)端的代理構(gòu)件中設(shè)置密鑰和一張簽名注冊(cè)表,則可以根據(jù)不同客戶端的簽名決定是否提供服務(wù),或者提供何種服務(wù),甚至對(duì)同一方法的功能實(shí)現(xiàn)也可以根據(jù)不同的簽名來分別寫其代碼。服務(wù)端管理員需要時(shí)可以查閱、更改這張注冊(cè)表,以保證系統(tǒng)運(yùn)行的安全,如果真有不法分子訪問了工作例程對(duì)象,也可以從表中查出其是在何時(shí)何地以何密鑰來訪問的,從而盡可能地提高網(wǎng)絡(luò)數(shù)據(jù)的安全性。這種模型從系統(tǒng)本身和代理服務(wù)的雙重角度來確保網(wǎng)絡(luò)數(shù)據(jù)的安全。
綜上所述,在本發(fā)明中,利用了工作例程和主導(dǎo)例程這兩個(gè)概念,在系統(tǒng)中分別實(shí)現(xiàn)工作例程和主導(dǎo)例程對(duì)象。當(dāng)在本地、尤其是在遠(yuǎn)程需要啟動(dòng)/運(yùn)行一個(gè)線程/進(jìn)程時(shí),這種機(jī)制從操作系統(tǒng)這一底層軟件中進(jìn)行了密鑰驗(yàn)證,在實(shí)際功能的代理構(gòu)件中,服務(wù)方還可以進(jìn)一步設(shè)置密鑰,用以分別不同用戶對(duì)不同服務(wù)的需求,能夠提高網(wǎng)絡(luò)數(shù)據(jù)的安全性,完善了計(jì)算機(jī)系統(tǒng)啟動(dòng)/運(yùn)行線程/進(jìn)程的計(jì)算模型。
圖1為本發(fā)明工作例程與主導(dǎo)例程在操作系統(tǒng)中的用途與位置示意圖;圖2為本發(fā)明利用代理構(gòu)件在遠(yuǎn)程進(jìn)行安全地創(chuàng)建/執(zhí)行/退出線程的編程模型與工作例程工作機(jī)制關(guān)系圖;圖3為本發(fā)明利用進(jìn)程構(gòu)件在遠(yuǎn)程進(jìn)行安全地創(chuàng)建/執(zhí)行/退出進(jìn)程的編程模型與主導(dǎo)例程工作機(jī)制關(guān)系圖。
具體實(shí)施例方式
本發(fā)明利用提出的“工作例程”概念,把線程“運(yùn)行一段代碼”的概念轉(zhuǎn)化為“運(yùn)行一個(gè)工作例程對(duì)象”,利用主導(dǎo)例程概念,把進(jìn)程“加載運(yùn)行可執(zhí)行模塊”的概念轉(zhuǎn)化為“運(yùn)行一個(gè)主導(dǎo)例程對(duì)象”,其實(shí)際功能在代理構(gòu)件中實(shí)現(xiàn),將其應(yīng)用于“面向構(gòu)件”的編程環(huán)境中,能夠?yàn)樵诒镜?,尤其是在遠(yuǎn)程啟動(dòng)線程/進(jìn)程提供一種安全的技術(shù)方案,目前已經(jīng)在本發(fā)明中得到實(shí)現(xiàn)并應(yīng)用。
下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明的技術(shù)方案與有益效果做進(jìn)一步地說明。
在任何操作系統(tǒng)中,進(jìn)程與線程都在其中扮演著重要的角色,本發(fā)明的操作系統(tǒng)是建立在構(gòu)件化內(nèi)核基礎(chǔ)上、面向?qū)ο缶幊汰h(huán)境的操作系統(tǒng)。圖1表示,在本發(fā)明中,每個(gè)進(jìn)程對(duì)象都對(duì)應(yīng)著一個(gè)主導(dǎo)例程對(duì)象(MainApplet),每個(gè)線程對(duì)象都對(duì)應(yīng)著一個(gè)工作例程對(duì)象(WorkerApplet),進(jìn)程的啟動(dòng)/運(yùn)行是運(yùn)行一個(gè)主導(dǎo)例程對(duì)象,線程的啟動(dòng)/運(yùn)行是運(yùn)行一個(gè)工作例程對(duì)象。
具體實(shí)施例一參見圖2,本發(fā)明中的較佳實(shí)施例利用代理構(gòu)件在遠(yuǎn)程進(jìn)行安全地創(chuàng)建/執(zhí)行/退出線程的編程模型與工作例程工作機(jī)制關(guān)系圖。
在面向構(gòu)件的編程環(huán)境中,在本發(fā)明構(gòu)件化操作系統(tǒng)中,利用代理構(gòu)件在遠(yuǎn)程進(jìn)行安全地創(chuàng)建/執(zhí)行/退出線程的編程模型,及其與工作例程工作機(jī)制分析。圖2(a)為應(yīng)用程序流程圖部分,圖2(b)表示實(shí)現(xiàn)具體功能的代理構(gòu)件部分,圖2(c)表示遠(yuǎn)程操作系統(tǒng)的內(nèi)核支持部分。圖2從整體上示意了本發(fā)明的工作例程工作機(jī)制與“客戶”、“代理”、“系統(tǒng)”三者之間的關(guān)系。本實(shí)施例的主要從“面向構(gòu)件”這一編程模型來分析,涉及的主要步驟有步驟1在操作系統(tǒng)內(nèi)核中實(shí)現(xiàn)對(duì)工作例程機(jī)制的支持,對(duì)應(yīng)圖2(c)部分,其中已經(jīng)實(shí)現(xiàn)了默認(rèn)的工作例程對(duì)象;步驟2編寫代理構(gòu)件部分,在操作系統(tǒng)內(nèi)核中實(shí)現(xiàn)對(duì)工作例程機(jī)制的支持,對(duì)應(yīng)圖2(b)部分。這部細(xì)分為以下幾步1、編寫代理構(gòu)件,及其接口方法,其中必須包含或繼承工作例程接口,工作例程接口及其方法在操作系統(tǒng)內(nèi)核中已經(jīng)有默認(rèn)實(shí)現(xiàn),用戶在代理構(gòu)件中可以不直接寫出來,也可以寫出來并重載。文件保存為Agent.cdl,需要指出的是擴(kuò)展名為cdl的文件是本發(fā)明中使用的面向構(gòu)件的編程環(huán)境所支持的一種構(gòu)件自描述語(yǔ)言,也是與本發(fā)明相關(guān)的另一發(fā)明,利用編譯工具編譯此文件,即可自動(dòng)產(chǎn)生相應(yīng)的頭文件(Agent.h)與源程序文件框架(Agent.cpp)。
2、編寫服務(wù)端代理構(gòu)件方法的功能實(shí)現(xiàn),在自動(dòng)產(chǎn)生的源程序文件框架中填寫代理構(gòu)件各方法需要實(shí)現(xiàn)的具體功能,在啟動(dòng)方法中可以設(shè)置密鑰、是否進(jìn)行服務(wù)、服務(wù)類別的簽名驗(yàn)證,在完成方法中編寫服務(wù)確認(rèn)簽名的存留功能代碼。
3、在正確寫好方法的實(shí)現(xiàn)代碼,尤其涉及到數(shù)據(jù)安全問題時(shí),并包含了頭文件Agent.h之后,同時(shí)編譯Agent.cdl與Agent.cpp,此時(shí)即可生成代理構(gòu)件Agent.dll,可以把Agent.dll裝載到本地/遠(yuǎn)程計(jì)算機(jī)上。
步驟3編寫客戶端程序,參見圖2(a),主要有以下幾步1、在客戶端,首先要利用“和欣”系統(tǒng)的API函數(shù)來獲取指定的遠(yuǎn)程服務(wù)機(jī)器/系統(tǒng),并要指定在遠(yuǎn)程機(jī)器上的哪個(gè)具體進(jìn)程來服務(wù),函數(shù)ZeeGetRemoteProcess()可以返回指定機(jī)器、指定進(jìn)程的接口智能指針。
2、定義一個(gè)代理構(gòu)件CAgent的類智能指針CAgentRef,并用遠(yuǎn)程進(jìn)程的接口智能指針進(jìn)行實(shí)例化。
3、調(diào)用指定的遠(yuǎn)程進(jìn)程的接口智能指針的CreateThread()方法創(chuàng)建一個(gè)遠(yuǎn)程線程對(duì)象,并返回其接口智能指針。
4、設(shè)置遠(yuǎn)程系統(tǒng)的密鑰和/或代理構(gòu)件服務(wù)的私鑰以及線程執(zhí)行參數(shù),調(diào)用遠(yuǎn)程線程對(duì)象的啟動(dòng)方法開始執(zhí)行。執(zhí)行時(shí)首先進(jìn)入遠(yuǎn)程系統(tǒng)對(duì)應(yīng)進(jìn)程的指定線程對(duì)象,開始執(zhí)行該線程對(duì)象在當(dāng)前系統(tǒng)、當(dāng)前進(jìn)程、當(dāng)前環(huán)境之下的創(chuàng)建的默認(rèn)的工作例程對(duì)象,在其啟動(dòng)方法中解開參數(shù)包,進(jìn)行系統(tǒng)密鑰的驗(yàn)證,此處可以設(shè)置密鑰,進(jìn)行是否服務(wù)、服務(wù)類別的簽名驗(yàn)證,提高安全性。如果密鑰不正確,則系統(tǒng)可以提示警告、終止執(zhí)行,如果密鑰正確,則根據(jù)代理構(gòu)件是否對(duì)啟動(dòng)方法重載來決定是否直接調(diào)用DoWork()方法,如果沒有重載,則直接調(diào)用DoWork()方法,否則,轉(zhuǎn)而調(diào)用代理構(gòu)件中的啟動(dòng)方法;在代理構(gòu)件的啟動(dòng)方法中,也可以設(shè)置提供服務(wù)的私鑰和/或參數(shù)。然后由代理構(gòu)件決定是否提供進(jìn)一步服務(wù),和提供何種服務(wù)。例如本實(shí)施例中驗(yàn)證參數(shù)arg的前9個(gè)字節(jié)中的內(nèi)容是否為“Pass Word”字符串,只有通過驗(yàn)證,才調(diào)用DoWork()函數(shù),DoWork()函數(shù)用以提供打印該字符串的服務(wù)。
5、當(dāng)要線程要執(zhí)行完成之前,還要執(zhí)行工作例程對(duì)象的結(jié)束方法,此處用以作服務(wù)確認(rèn)的簽名,以及一些系統(tǒng)環(huán)境清理工作。
本發(fā)明中的對(duì)線程運(yùn)行的概念富于了新的含義,按照這種方式創(chuàng)建的線程不僅在創(chuàng)建時(shí)是直接取自于線程池(當(dāng)池中還有已經(jīng)創(chuàng)建、但還沒有使用的線程對(duì)象時(shí))中的線程對(duì)象,當(dāng)引入并實(shí)現(xiàn)工作例程概念之后,線程的執(zhí)行不再是執(zhí)行公知操作系統(tǒng)中的稱謂的“代碼段”,而是一個(gè)工作例程對(duì)象,這個(gè)對(duì)象包括其工作例程類和工作例程接口,系統(tǒng)已經(jīng)在面向構(gòu)件編程的編程環(huán)境中對(duì)其進(jìn)行了封裝,屏蔽了調(diào)用COM構(gòu)件對(duì)象過程的繁瑣細(xì)節(jié),簡(jiǎn)化了進(jìn)行遠(yuǎn)程創(chuàng)建/執(zhí)行線程的用戶編程,同時(shí)具有構(gòu)件升級(jí)的獨(dú)立性、本地/遠(yuǎn)程透明性、編程語(yǔ)言無(wú)關(guān)性。
本發(fā)明中的工作例程的重要特征還在于,設(shè)計(jì)其啟動(dòng)方法時(shí)帶有參數(shù)arg,這個(gè)參數(shù)在調(diào)用線程對(duì)象的啟動(dòng)方法時(shí)傳入,其設(shè)計(jì)目的不僅在于傳入一個(gè)普通的數(shù)據(jù),更為重要的是它可以用于對(duì)用戶,尤其是遠(yuǎn)程用戶的執(zhí)行線程請(qǐng)求作“簽名驗(yàn)證”,只要在服務(wù)端的代理構(gòu)件中設(shè)置密鑰和一張簽名注冊(cè)表,則可以根據(jù)不同客戶端的簽名決定是否提供服務(wù),或者提供何種服務(wù),甚至對(duì)同一方法的功能實(shí)現(xiàn)也可以根據(jù)不同的簽名來分別寫其代碼。服務(wù)端管理員需要時(shí)可以查閱、更改這張注冊(cè)表,以保證系統(tǒng)運(yùn)行的安全,如果真有不法分子訪問了工作例程對(duì)象,也可以從表中查出其是在何時(shí)何地以何密鑰來訪問的,從而盡可能地提高網(wǎng)絡(luò)數(shù)據(jù)的安全性。
具體實(shí)施例二參見圖3,本發(fā)明利用進(jìn)程構(gòu)件在遠(yuǎn)程進(jìn)行安全地創(chuàng)建/執(zhí)行/退出進(jìn)程的編程模型與主導(dǎo)例程工作機(jī)制關(guān)系圖。
在面向構(gòu)件的編程環(huán)境中,在本發(fā)明操作系統(tǒng)中,利用主導(dǎo)構(gòu)件在遠(yuǎn)程進(jìn)行安全地創(chuàng)建/執(zhí)行/退出線程的編程模型,及其與主導(dǎo)例程工作機(jī)制分析。
圖3(a)為應(yīng)用程序流程圖部分,圖3(b)表示實(shí)現(xiàn)具體功能的進(jìn)程構(gòu)件部分,圖3(c)表示遠(yuǎn)程操作系統(tǒng)的內(nèi)核支持部分。圖3從整體上示意了本發(fā)明的主導(dǎo)例程工作機(jī)制與“客戶”、“代理”、“系統(tǒng)”三者之間的關(guān)系。本實(shí)施例主要從“面向構(gòu)件”這一編程模型來分析,涉及的主要步驟有步驟1在操作系統(tǒng)內(nèi)核中實(shí)現(xiàn)對(duì)主導(dǎo)例程機(jī)制的支持,對(duì)應(yīng)圖3(c)部分,其中已經(jīng)實(shí)現(xiàn)了默認(rèn)的主導(dǎo)例程對(duì)象;步驟2編寫進(jìn)程構(gòu)件部分,對(duì)應(yīng)圖3(b)部分。具體為1、編寫進(jìn)程構(gòu)件,及其接口方法,其中必須包含或繼承主導(dǎo)例程接口,主導(dǎo)例程接口及其方法在操作系統(tǒng)內(nèi)核中已經(jīng)有默認(rèn)實(shí)現(xiàn),用戶在進(jìn)程構(gòu)件中可以不直接寫出來,也可以寫出來并重載。文件保存為Process.cdl。利用編譯工具編譯此文件,即可自動(dòng)產(chǎn)生相應(yīng)的頭文件(Process.h)與源程序文件框架(Process.cpp)。
2、編寫服務(wù)端進(jìn)程構(gòu)件方法的功能實(shí)現(xiàn),在自動(dòng)產(chǎn)生的源程序文件中填寫進(jìn)程構(gòu)件各方法需要實(shí)現(xiàn)的具體功能,在啟動(dòng)方法中可以設(shè)置密鑰、是否進(jìn)行服務(wù)、服務(wù)類別的簽名驗(yàn)證。
3、在正確寫好方法的實(shí)現(xiàn)代碼,尤其涉及到數(shù)據(jù)安全問題時(shí),并包含了頭文件Process.h之后,同時(shí)編譯Process.cdl與Process.cpp,此時(shí)即可生成主導(dǎo)構(gòu)件Process.dll,可以把Process.dll裝載到本地/遠(yuǎn)程計(jì)算機(jī)上;步驟3編寫客戶端程序,參見圖3(a)1、在客戶端,首先要利用本發(fā)明操作系統(tǒng)的API函數(shù)來獲取指定的遠(yuǎn)程服務(wù)機(jī)器/系統(tǒng),函數(shù)ZeeGetRemoteSystem()可以返回指定機(jī)器/系統(tǒng)的接口智能指針;2、定義一個(gè)進(jìn)程構(gòu)件CProcess的類智能指針CprocessRef,并用遠(yuǎn)程進(jìn)程的接口智能指針進(jìn)行實(shí)例化;
3、調(diào)用指定的遠(yuǎn)程系統(tǒng)的接口智能指針的CreateProcess()方法創(chuàng)建一個(gè)遠(yuǎn)程進(jìn)程對(duì)象,并返回其接口智能指針;4、設(shè)置遠(yuǎn)程系統(tǒng)的密鑰和/或進(jìn)程構(gòu)件服務(wù)的私鑰以及進(jìn)程執(zhí)行參數(shù),調(diào)用遠(yuǎn)程進(jìn)程對(duì)象的啟動(dòng)方法開始執(zhí)行。執(zhí)行時(shí)首先進(jìn)入遠(yuǎn)程系統(tǒng)的對(duì)應(yīng)進(jìn)程對(duì)象,開始執(zhí)行該進(jìn)程對(duì)象在當(dāng)前系統(tǒng)、當(dāng)前環(huán)境之下創(chuàng)建的默認(rèn)的主導(dǎo)例程對(duì)象,在其啟動(dòng)方法中解開參數(shù)包,進(jìn)行系統(tǒng)密鑰的驗(yàn)證,如果密鑰不正確,則系統(tǒng)可以提示警告、終止執(zhí)行,如果密鑰正確,則根據(jù)進(jìn)程構(gòu)件是否對(duì)啟動(dòng)方法重載來決定是否直接調(diào)用Function()方法,如果沒有重載,則直接調(diào)用Function()方法,否則,轉(zhuǎn)而調(diào)用進(jìn)程構(gòu)件中的啟動(dòng)方法;在進(jìn)程構(gòu)件的啟動(dòng)方法中,也可以設(shè)置提供服務(wù)的私鑰和/或參數(shù)。然后由進(jìn)程構(gòu)件決定是否提供進(jìn)一步服務(wù),和提供何種服務(wù)。例如本實(shí)施例中,可以驗(yàn)證參數(shù)arg的前9個(gè)字節(jié)中的內(nèi)容是否為“Pass Word”字符串,只有通過驗(yàn)證,才調(diào)用Function()函數(shù)來完成具體功能。
5、當(dāng)在進(jìn)程要執(zhí)行完成之前,還要執(zhí)行主導(dǎo)例程對(duì)象的結(jié)束方法,此處用以作服務(wù)確認(rèn)的簽名,以及一些系統(tǒng)環(huán)境清理工作。本實(shí)施例中的客戶端程序如下從具體實(shí)施例二可以看出本發(fā)明中的對(duì)進(jìn)程運(yùn)行的概念富于了新的含義,按照這種方式創(chuàng)建的進(jìn)程不僅在創(chuàng)建時(shí)是直接取自于進(jìn)程池(當(dāng)進(jìn)程池中還有已經(jīng)創(chuàng)建,但還沒有使用的進(jìn)程對(duì)象時(shí))中的進(jìn)程對(duì)象,當(dāng)引入并實(shí)現(xiàn)主導(dǎo)例程概念之后,進(jìn)程的執(zhí)行不再是加載/執(zhí)行一個(gè)程序模塊,而是一個(gè)主導(dǎo)例程對(duì)象,這個(gè)對(duì)象包括其主導(dǎo)例程類和主導(dǎo)例程接口,系統(tǒng)已經(jīng)在面向構(gòu)件編程的編程環(huán)境中對(duì)其進(jìn)行了封裝,屏蔽了調(diào)用COM構(gòu)件對(duì)象過程的繁瑣細(xì)節(jié),簡(jiǎn)化了進(jìn)行遠(yuǎn)程創(chuàng)建/執(zhí)行線程的用戶編程,同時(shí)具有構(gòu)件升級(jí)的獨(dú)立性、本地/遠(yuǎn)程透明性、編程語(yǔ)言無(wú)關(guān)性。
本發(fā)明中的主導(dǎo)例程的重要特征還在于,設(shè)計(jì)其啟動(dòng)方法時(shí)帶有參數(shù)arg,這個(gè)參數(shù)在調(diào)用線程對(duì)象的啟動(dòng)方法時(shí)傳入,其設(shè)計(jì)目的不僅在于傳入一個(gè)普通的數(shù)據(jù),更為重要的是它可以用于對(duì)用戶,尤其是遠(yuǎn)程用戶的運(yùn)行進(jìn)程請(qǐng)求作“簽名驗(yàn)證”,只要在服務(wù)端的進(jìn)程構(gòu)件中設(shè)置密鑰和一張簽名注冊(cè)表,則可以根據(jù)不同客戶端的簽名決定是否提供服務(wù),或者提供何種服務(wù),甚至對(duì)同一方法的功能實(shí)現(xiàn)也可以根據(jù)不同的簽名來分別寫其代碼。服務(wù)端管理員需要時(shí)可以查閱、更改這張注冊(cè)表,以保證系統(tǒng)運(yùn)行的安全,如果真有不法分子訪問了主導(dǎo)例程對(duì)象,也可以從表中查出其是在何時(shí)何地以何密鑰來訪問的,從而盡可能地提高網(wǎng)絡(luò)數(shù)據(jù)的安全性。
本發(fā)明在創(chuàng)造性地提出“工作例程”概念的基礎(chǔ)上,設(shè)計(jì)了一套可行的技術(shù)方案,并在本發(fā)明操作系統(tǒng)中得到實(shí)現(xiàn)與應(yīng)用。把工作例程概念應(yīng)用于面向構(gòu)件的編程環(huán)境中,為在本地,尤其是在遠(yuǎn)程進(jìn)行創(chuàng)建/運(yùn)行/退出線程提供了一條新的技術(shù)途徑,可以用于在本地、尤其在遠(yuǎn)程進(jìn)行創(chuàng)建/運(yùn)行/退出線程的安全性管理?;谕瑯拥脑?,利用“主導(dǎo)例程”的概念,設(shè)計(jì)了一套對(duì)遠(yuǎn)程進(jìn)程的創(chuàng)建/執(zhí)行/退出進(jìn)行安全控制的可行機(jī)制。這些工作從安全性方面及計(jì)算模型方面完善了遠(yuǎn)程線程/進(jìn)程創(chuàng)建/執(zhí)行的模型。
權(quán)利要求
1.一種基于工作例程/主導(dǎo)例程與代理構(gòu)件在本地/遠(yuǎn)程運(yùn)行線程/進(jìn)程的方法,其特征在于它包括在客戶端和服務(wù)端操作系統(tǒng)內(nèi)核中預(yù)先實(shí)現(xiàn)工作例程/主導(dǎo)例程對(duì)象,工作例程/主導(dǎo)例程對(duì)象至少有啟動(dòng)與結(jié)束兩個(gè)方法;根據(jù)客戶端需求在服務(wù)端創(chuàng)建線程/進(jìn)程時(shí),調(diào)用線程/進(jìn)程對(duì)象接口智能指針的啟動(dòng)方法啟動(dòng)服務(wù)端線程/進(jìn)程對(duì)象執(zhí)行,將線程運(yùn)行轉(zhuǎn)化為運(yùn)行工作例程對(duì)象;將進(jìn)程加載/運(yùn)行應(yīng)用程序的可執(zhí)行模塊轉(zhuǎn)化為運(yùn)行一主導(dǎo)例程對(duì)象;運(yùn)行結(jié)束時(shí),再調(diào)用線程/進(jìn)程對(duì)象接口智能指針的結(jié)束方法,結(jié)束線程/進(jìn)程。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于根據(jù)客戶端需求在服務(wù)端創(chuàng)建/運(yùn)行/結(jié)束線程時(shí),客戶端操作系統(tǒng)調(diào)用系統(tǒng)API,獲取指定接口智能指針,定義一個(gè)線程/進(jìn)程對(duì)象接口智能指針,并在服務(wù)端創(chuàng)建其實(shí)例,到服務(wù)端系統(tǒng);再利用服務(wù)端系統(tǒng)接口方法創(chuàng)建服務(wù)端線程/進(jìn)程對(duì)象,訪問服務(wù)端系統(tǒng)線程/進(jìn)程對(duì)象,服務(wù)端線程/進(jìn)程對(duì)象通過工作例程/主導(dǎo)例程的啟動(dòng)方法啟動(dòng),同時(shí)將接口智能指針返回客戶端;運(yùn)行結(jié)束時(shí),客戶端調(diào)用服務(wù)端線程/進(jìn)程對(duì)象接口智能指針的結(jié)束方法,訪問服務(wù)端工作例程/主導(dǎo)例程的結(jié)束方法,結(jié)束線程/進(jìn)程。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于客戶端或服務(wù)端為本地或遠(yuǎn)程。
4.根據(jù)權(quán)利要求1所述的基于工作例程/主導(dǎo)例程與代理構(gòu)件在本地/遠(yuǎn)程運(yùn)行線程/進(jìn)程的方法,其特征在于在客戶端和服務(wù)端之間設(shè)置代理構(gòu)件功能模塊,代理構(gòu)件功能模塊中包括對(duì)應(yīng)于應(yīng)用的功能方法以及工作例程/主導(dǎo)例程接口;工作例程/主導(dǎo)例程啟動(dòng)方法參數(shù)至少包括工作例程/主導(dǎo)例程對(duì)象的引用或包含工作例程/主導(dǎo)例程接口代理構(gòu)件功能模塊的類智能指針;在服務(wù)端創(chuàng)建/運(yùn)行結(jié)束線程/進(jìn)程時(shí),服務(wù)端利用工作例程/主導(dǎo)例程接口的方法,由代理構(gòu)件功能模塊中所提供應(yīng)用功能,調(diào)用功能函數(shù)完成某具體功能的執(zhí)行,客戶端工作例程/主導(dǎo)例程結(jié)束方法通知服務(wù)端結(jié)束,服務(wù)端工作例程/主導(dǎo)例程結(jié)束方法通知代理構(gòu)件結(jié)束,代理構(gòu)件功能模塊利用工作例程/主導(dǎo)例程結(jié)束方法結(jié)束執(zhí)行,并將信息返回服務(wù)端系統(tǒng)。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于服務(wù)端工作例程/主導(dǎo)例程啟動(dòng)方法執(zhí)行后,首先判斷是否有重載,如果有,則直接進(jìn)入代理構(gòu)件功能模塊工作例程/主導(dǎo)例程啟動(dòng)執(zhí)行某功能;如果沒有,則開始調(diào)用功能構(gòu)件方法,再進(jìn)行工作例程/主導(dǎo)例程啟動(dòng)。
6.根據(jù)權(quán)利要求3、4、5所述的方法,其特征在于代理構(gòu)件獨(dú)立于服務(wù)端或與服務(wù)端設(shè)置為一體,或者于客戶端為一體。
7.根據(jù)權(quán)利要求3、4、5所述的方法,其特征在于代理構(gòu)件內(nèi)除了可以選擇是否重載工作例程/主導(dǎo)例程的啟動(dòng)方法與結(jié)束方法外,其它是用戶或者代理構(gòu)件服務(wù)開發(fā)商所提供的具體的功能函數(shù)模塊的方法。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于代理構(gòu)件功能模塊僅包括工作例程/主導(dǎo)例程的啟動(dòng)與結(jié)束方法,代理構(gòu)件功能模塊成為工作例程/主導(dǎo)例程對(duì)象,采用代理構(gòu)件功能模塊繼承/包含一個(gè)工作例程接口直接執(zhí)行一個(gè)工作例程對(duì)象。
9.根據(jù)權(quán)利要求3、4、5所述的方法,其特征在于代理構(gòu)件功能模塊的工作例程/主導(dǎo)例程接口為包含或繼承的接口。
10.根據(jù)權(quán)利要求1所述的方法,其特征在于用戶指定工作例程/主導(dǎo)例程對(duì)象運(yùn)行時(shí)執(zhí)行程序的入口函數(shù),工作例程/主導(dǎo)例程對(duì)象的啟動(dòng)方法采用回調(diào)函數(shù)的方式來執(zhí)行用戶定義的入口函數(shù)。
11.根據(jù)權(quán)利要求1所述的方法,其特征在于服務(wù)端系統(tǒng)的工作例程/主導(dǎo)例程的啟動(dòng)方法參數(shù)還包括帶有密鑰和/或運(yùn)行參數(shù)的參數(shù),用以對(duì)用戶創(chuàng)建線程/進(jìn)程時(shí)的系統(tǒng)安全許可驗(yàn)證。
12.根據(jù)權(quán)利要求11所述的方法,其特征在于參數(shù)為字符串類型或數(shù)字類型或數(shù)據(jù)包格式。
13.根據(jù)權(quán)利要求11所述的方法,其特征在于工作例程啟動(dòng)方法中還包括有對(duì)當(dāng)前系統(tǒng)、當(dāng)前進(jìn)程、相關(guān)線程對(duì)象的運(yùn)行環(huán)境的參數(shù)設(shè)置,用以對(duì)客戶端遠(yuǎn)程創(chuàng)建線程時(shí)的系統(tǒng)安全許可驗(yàn)證。
14.根據(jù)權(quán)利要求1、11-13之一所述的方法,其特征在于在服務(wù)端系統(tǒng)上運(yùn)行線程/進(jìn)程時(shí),系統(tǒng)首先解開參數(shù)包,在內(nèi)核的工作例程/主導(dǎo)例程對(duì)象的啟動(dòng)方法中進(jìn)行系統(tǒng)密鑰驗(yàn)證,以確認(rèn)該遠(yuǎn)程用戶是否擁有訪問本機(jī)器/系統(tǒng)的權(quán)利,如果有,則可運(yùn)行;否則系統(tǒng)拒絕運(yùn)行。
15.根據(jù)權(quán)利要求14所述的方法,其特征在于密鑰驗(yàn)證還包括確認(rèn)該客戶端用戶是否擁有訪問本服務(wù)端機(jī)器/系統(tǒng)指定進(jìn)程的權(quán)利,如果有,則可運(yùn)行;否則系統(tǒng)拒絕運(yùn)行。
16.根據(jù)權(quán)利要求15所述的方法,其特征在于離開服務(wù)端系統(tǒng)前,在結(jié)束方法中進(jìn)行服務(wù)確認(rèn)的簽名工作,包括存留客戶名稱、服務(wù)時(shí)間、服務(wù)內(nèi)容、使用資源信息。
17.根據(jù)權(quán)利要求1-5之一所述的方法,其特征在于在代理構(gòu)件中設(shè)置服務(wù)權(quán)限控制密鑰,客戶端要求提供服務(wù)時(shí),創(chuàng)建/運(yùn)行線程/進(jìn)程,進(jìn)入代理構(gòu)件獲取構(gòu)件方法實(shí)際功能時(shí),首先解包,通過啟動(dòng)方法進(jìn)行密鑰驗(yàn)證,通過者,可獲取構(gòu)件方法實(shí)際功能,否則退出,拒絕創(chuàng)建/運(yùn)行線程/進(jìn)程。
18.根據(jù)權(quán)利要求17所述的方法,其特征在于密鑰驗(yàn)證包括實(shí)際功能服務(wù)要求和/或服務(wù)類型的私鑰驗(yàn)證。
19.根據(jù)權(quán)利要求4所述的方法,其特征在于在代理構(gòu)件功能模塊某功能服務(wù)結(jié)束時(shí),在結(jié)束方法中進(jìn)行服務(wù)確認(rèn)的簽名工作,包括存留客戶名稱、服務(wù)時(shí)間、服務(wù)程序,占用的系統(tǒng)資源。
20.根據(jù)權(quán)利要求1所述的方法,其特征在于在客戶端,接口智能指針返回客戶端后,包括設(shè)置安全密鑰和/或參數(shù),用于配合服務(wù)端系統(tǒng)和/或代理構(gòu)件端創(chuàng)建/運(yùn)行線程/進(jìn)程前安全機(jī)制的密鑰驗(yàn)證。
全文摘要
一種基于工作例程/主導(dǎo)例程與代理構(gòu)件在本地/遠(yuǎn)程運(yùn)行線程/進(jìn)程的方法,它包括在客戶端和服務(wù)端操作系統(tǒng)內(nèi)核中預(yù)先實(shí)現(xiàn)工作例程/主導(dǎo)例程對(duì)象,該對(duì)象至少有啟動(dòng)與結(jié)束兩個(gè)方法;在服務(wù)端創(chuàng)建線程/進(jìn)程時(shí),調(diào)用線程/進(jìn)程對(duì)象接口智能指針的啟動(dòng)方法啟動(dòng)服務(wù)端線程/進(jìn)程對(duì)象執(zhí)行,將線程運(yùn)行轉(zhuǎn)化為運(yùn)行工作例程對(duì)象;將進(jìn)程加載/運(yùn)行應(yīng)用程序的可執(zhí)行模塊轉(zhuǎn)化為運(yùn)行一主導(dǎo)例程對(duì)象;運(yùn)行結(jié)束時(shí),再調(diào)用結(jié)束方法,結(jié)束線程/進(jìn)程。本發(fā)明在面向構(gòu)件的編程環(huán)境中,客戶程序訪問系統(tǒng),經(jīng)過工作例程/主導(dǎo)例程運(yùn)行,執(zhí)行代理構(gòu)件功能,啟動(dòng)線程/進(jìn)程,滿足本地/遠(yuǎn)程應(yīng)用服務(wù),可實(shí)現(xiàn)服務(wù)功能的遠(yuǎn)程運(yùn)行、本地應(yīng)用,更適于下一代網(wǎng)絡(luò)服務(wù)。
文檔編號(hào)G06F9/46GK1519712SQ03100828
公開日2004年8月11日 申請(qǐng)日期2003年1月22日 優(yōu)先權(quán)日2003年1月22日
發(fā)明者陳榕, 林清洪, 陳志成, 陳 榕 申請(qǐng)人:北京科泰世紀(jì)科技有限公司