專利名稱:延緩裝載共享庫(kù)的系統(tǒng)和方法
本專利申請(qǐng)涉及名為“處理機(jī)間通信的方法和工具”的申請(qǐng),該申請(qǐng)的律師案卷號(hào)為AT993-024而申請(qǐng)系列號(hào)為XX/XXXXXX。它還涉及到“微核上多種并存操作系統(tǒng)特性的系統(tǒng)”,其律師案卷號(hào)為AT993-026而申請(qǐng)系列號(hào)為XX/XXXXX。這些申請(qǐng)都已轉(zhuǎn)讓給本發(fā)明的受讓人。
本發(fā)明涉及到信息處理系統(tǒng),特別涉及到操作系統(tǒng)。本發(fā)明尤其涉及到通過(guò)操作系統(tǒng)控制可執(zhí)行任務(wù)裝載的系統(tǒng)。
計(jì)算機(jī)操作系統(tǒng)用于控制計(jì)算機(jī)系統(tǒng)構(gòu)件的運(yùn)行。操作系統(tǒng)任務(wù)之一是裝載其他的程序,以便執(zhí)行之。通常這些其他程序是應(yīng)用程序,但也可能包括操作系統(tǒng)的成員程序。裝載程序時(shí),先在程序存儲(chǔ)媒體上找到被請(qǐng)示裝載的程序,該媒體通常是一個(gè)硬盤(pán)文件,然后,把該程序?qū)懭雰?nèi)存并把它準(zhǔn)備好,等待處理器執(zhí)行。
程序存儲(chǔ)器中的程序是以可執(zhí)行格式存儲(chǔ)的,這是把程序源碼編譯或匯編的結(jié)果??蓤?zhí)行格式中有一個(gè)裝載程序能識(shí)別的特定格式,其中包括處理可執(zhí)行程序所需信息。裝載程序完成的一個(gè)處理步驟是地址重定位。可執(zhí)行文件中的地址都表達(dá)為相對(duì)于起始地址的相對(duì)值。在程序裝入內(nèi)存之前這個(gè)起始地址或起始偏移是無(wú)法確定的。地址重定位是修改相對(duì)地址,以使它們指向系統(tǒng)中的實(shí)際可尋址的單元。一旦這些地址確定后,程序即已準(zhǔn)備可以隨時(shí)付諸運(yùn)行。
隨著系統(tǒng)用戶要求的不斷增多和系統(tǒng)能力的不斷增長(zhǎng),計(jì)算機(jī)程序也日益復(fù)雜。微機(jī)系統(tǒng)諸如IBM PS/2計(jì)算機(jī)系統(tǒng)(PS/2是IBM公司的注冊(cè)商標(biāo))的不斷增加的容量就是一例。不斷增加的處理器容量和功能允許開(kāi)發(fā)復(fù)雜的文字處理,擴(kuò)展圖表,數(shù)據(jù)庫(kù)和其他商務(wù)和科學(xué)上的應(yīng)用程序。然而復(fù)雜的應(yīng)用程序?qū)?dǎo)致可執(zhí)行文件的不斷增大。
生成大的可執(zhí)行文件時(shí),只要應(yīng)用程序或系統(tǒng)程序的一部分有變動(dòng),就將增加建立或?qū)徃膽?yīng)用程序或系統(tǒng)程序所需費(fèi)用和時(shí)間。解決此問(wèn)題的一個(gè)辦法曾經(jīng)是把應(yīng)用程序或系統(tǒng)程序分解成許多可動(dòng)態(tài)裝載的程序段。連接(確定地址)這些程序段的工作延緩到執(zhí)行時(shí)再做。每個(gè)程序段定義成包括源碼的特定部分,并編寫(xiě)成可以對(duì)應(yīng)于良好定義的接口。只要接口保持不變,其他程序段中訪問(wèn)特定程序段對(duì)象的程序就不必改動(dòng)或重新編譯。這就對(duì)操作系統(tǒng)和應(yīng)用程序的開(kāi)發(fā)和維護(hù)提供更大的靈活性。
動(dòng)態(tài)連接概念已在IBM OS/2操作系統(tǒng)產(chǎn)品中實(shí)現(xiàn)(OS/2是IBM公司的一個(gè)注冊(cè)商標(biāo))。OS/2動(dòng)態(tài)連接庫(kù)(或DLL)可以動(dòng)態(tài)連接,從而為操作系統(tǒng)或應(yīng)用程序提供所定義的功能(函數(shù))。而DLL的接口是規(guī)定的庫(kù)接口。使用動(dòng)態(tài)連接庫(kù)的程序包括一對(duì)該程序的庫(kù)接口調(diào)用。編譯程序?qū)⒆粉櫭恳粋€(gè)這樣的外部庫(kù)調(diào)用,并把它們包括在可執(zhí)行文件的一節(jié)中。在現(xiàn)有系統(tǒng)中,當(dāng)OS/2裝載程序裝載一個(gè)可執(zhí)行程序時(shí)(通常作為帶.EXE后綴名的文件存儲(chǔ)起來(lái)),它對(duì)該文件進(jìn)行掃描以找出所有的動(dòng)態(tài)連接庫(kù)調(diào)用。每個(gè)被調(diào)用的庫(kù)函數(shù)依次動(dòng)態(tài)裝載。裝載程序?qū)?duì)每一個(gè)這樣的庫(kù)進(jìn)行檢查,看它是否還依次調(diào)用其他庫(kù)函數(shù)。這個(gè)檢查和裝載過(guò)程一直如此循環(huán)地進(jìn)行下去,直至所有動(dòng)態(tài)連接調(diào)用得到解決。
現(xiàn)有OS/2操作系統(tǒng)為一個(gè)任務(wù)所調(diào)用的每一個(gè)庫(kù)函數(shù)分配內(nèi)存地址和用戶內(nèi)存空間。常用的DLL經(jīng)常調(diào)用別的DLL,而后者又會(huì)再調(diào)用更多其他的DLL。結(jié)果所形成的DLL長(zhǎng)鏈被定位并映射至每個(gè)任務(wù)。許多DLL被規(guī)定用于處理錯(cuò)誤或其他異常情況,因此,用得不多。這意味著大部分時(shí)間內(nèi)不需要大的裝載內(nèi)存。大的內(nèi)存分配也增加了系統(tǒng)開(kāi)銷,因?yàn)閮?nèi)存管理程序?yàn)榱舜_定在頁(yè)面系統(tǒng)中替代哪一塊區(qū)域,必須細(xì)查這大的已分配的內(nèi)存。
還有一個(gè)另外的問(wèn)題存在于微核系統(tǒng)中,例如卡內(nèi)基梅隆大學(xué)開(kāi)發(fā)有Mach操作系統(tǒng)。Mach微核為進(jìn)程間通信分配核端口識(shí)別程序。Mach核為每個(gè)DLL分配一個(gè)核端口識(shí)別程序,或是更有效地為每個(gè)DLL目標(biāo)程序分配識(shí)別程序。為不調(diào)用的端口進(jìn)行分配會(huì)干擾有效端口的確定。
以前提出過(guò)一些動(dòng)態(tài)子程序裝載方案,但每個(gè)方案都有缺點(diǎn)。1986年5月的IBM技術(shù)公開(kāi)月報(bào)中5535-5537頁(yè)上有一篇文章,名為“透明動(dòng)態(tài)子程序裝載程序”。所建議的技術(shù)需要一個(gè)特定用途的動(dòng)態(tài)裝載程序,后者和主程序連接在一起。裝載程序維持一個(gè)子程序調(diào)用表,并在調(diào)用時(shí)把這些子程序裝載。這個(gè)方案不是操作系統(tǒng)整體的一部分,同時(shí)不支持任務(wù)間的共享。追蹤和裝載只適用于特定任務(wù)。把動(dòng)態(tài)裝載程序和主程序連接時(shí)有一定要求,這限制了透明度。
1987年1月的IBM技術(shù)公開(kāi)月報(bào)中3521頁(yè)的名為“使用自修改存根的執(zhí)行時(shí)間裝載”的文章提出了略為不同的方案。這個(gè)方案要求把子程序存根加到每個(gè)主程序中。當(dāng)首次調(diào)用子程序時(shí),把庫(kù)復(fù)制件裝載完,并修改程序存根使之轉(zhuǎn)移到被裝載的庫(kù)復(fù)制件。這個(gè)方案有個(gè)缺點(diǎn),即要求特殊編碼技術(shù)和在執(zhí)行時(shí)間內(nèi)修改程序流。
最后,1991年11月的IBM技術(shù)公開(kāi)月報(bào)中209-210頁(yè)的名為“DOS環(huán)境下動(dòng)態(tài)連接庫(kù)機(jī)制”的文章提出了DOS環(huán)境下的“結(jié)束和駐留”(TSR)程序,用于管理一系列庫(kù)子程序。這些庫(kù)程序?qū)Α败浿袛唷弊鞒鲰憫?yīng),而該軟中斷是由插入主程序中的特定聯(lián)編調(diào)用所產(chǎn)生的。當(dāng)TSR程序接收到中斷后,檢查一個(gè)表,確定一個(gè)該函數(shù)以前是否已裝載,如果沒(méi)有裝載,該函數(shù)即被裝載并把表更新。然后控制即被交給該函數(shù)。這個(gè)方案的缺點(diǎn)是需要一個(gè)專門中斷處理程序來(lái)管理動(dòng)態(tài)庫(kù)。還需要在主程序中插入特定的中斷調(diào)用,這也限制了應(yīng)用的普遍性。
提出的技術(shù)問(wèn)題是要提供一個(gè)機(jī)制,它只在執(zhí)行過(guò)程中需要可執(zhí)行庫(kù)目標(biāo)程序時(shí)才把后者動(dòng)態(tài)地裝載。問(wèn)題的解決方案應(yīng)對(duì)應(yīng)用程序開(kāi)發(fā)人員和執(zhí)行程序都是透明的。也即,和庫(kù)函數(shù)與主程序連接在一起的情況相比較時(shí),應(yīng)顯不出任何差別。
本發(fā)明涉及一種系統(tǒng),該系統(tǒng)只當(dāng)執(zhí)行過(guò)程中需要庫(kù)目標(biāo)程序時(shí)才把后者動(dòng)態(tài)地裝載。該系統(tǒng)包括一種方法,用于延緩對(duì)不調(diào)用目標(biāo)程序的裝載,直至需要調(diào)用時(shí)才裝載它。本發(fā)明把這種性能加入系統(tǒng)裝載程序和執(zhí)行處理中,成為裝載程序的一部分,同時(shí)并不需要修改可執(zhí)行程序。
本發(fā)明包括一種系統(tǒng),該系統(tǒng)用于管理可執(zhí)行程序的內(nèi)存分配,該系統(tǒng)有一種方法,可在接到要求后把主可執(zhí)行程序裝入內(nèi)存;用于確定主可執(zhí)行程序所調(diào)用的次可執(zhí)行程序的方法;可以不把次可執(zhí)行程序裝入內(nèi)存而只給它分配內(nèi)存段的方法;用于檢測(cè)對(duì)已分配而未裝載的內(nèi)存段中的某一個(gè)的調(diào)用的方法;可在檢測(cè)到調(diào)用后產(chǎn)生一個(gè)檢測(cè)信號(hào)的方法;可對(duì)檢測(cè)信號(hào)作出響應(yīng),把已分配內(nèi)存段的可執(zhí)行程序裝入內(nèi)存的方法。
本發(fā)明的上面所述以及其他目的,性能和優(yōu)點(diǎn)將在下面的本發(fā)明最佳實(shí)施例的更專門的描述中得以明了,該實(shí)施例在附圖中都有描述,該附圖中相應(yīng)的參考數(shù)字代表了本發(fā)明的相應(yīng)部分。
圖1是用于描述一個(gè)可用于本發(fā)明的信息處理系統(tǒng)的框圖。
圖2是可執(zhí)行目標(biāo)程序結(jié)構(gòu)及相互間關(guān)系的圖例。
圖3是表示本發(fā)明的最佳實(shí)施例的各部分的框圖。
圖4是描述本發(fā)明的處理步驟的流程圖。
本發(fā)明和信息處理系統(tǒng)一起使用。圖1中100是該系統(tǒng)的一例。該系統(tǒng)有一個(gè)處理單元或CPU102,后者通過(guò)系統(tǒng)總線103和不同系統(tǒng)裝置相連。這些裝置包括,但不限于,硬盤(pán)存儲(chǔ)器104,隨機(jī)存取存儲(chǔ)器106,網(wǎng)絡(luò)接口108,輸入/輸出接口110。輸入/輸出接口協(xié)調(diào)來(lái)自鍵盤(pán)114和指向(pointing)裝置116的輸入,以及控制送至顯示器112的輸出。本系統(tǒng)還可以附加一些永久性存儲(chǔ)裝置,諸如軟盤(pán)驅(qū)動(dòng)器,磁帶驅(qū)動(dòng)器或CD-ROM光盤(pán)驅(qū)動(dòng)器。
在現(xiàn)有系統(tǒng)上運(yùn)行的信息處理系統(tǒng)最好是一個(gè)IBM PS/2計(jì)算機(jī)系統(tǒng)。所公開(kāi)的系統(tǒng)和方法并不局限于這類系統(tǒng),而可以在其他系統(tǒng)上運(yùn)行。這些系統(tǒng)可以是其他的微機(jī)系統(tǒng),工作站系統(tǒng)例如IBM RISC系統(tǒng)/6000工作站(RISC系統(tǒng)/6000是IBM公司的注冊(cè)商標(biāo)),或者主機(jī)系統(tǒng)例如IBM ES/9000計(jì)算機(jī)系統(tǒng)(ES/9000是IBM公司的注冊(cè)商標(biāo))。
本發(fā)明的最佳實(shí)施例是在一個(gè)支持動(dòng)態(tài)連接庫(kù)(DDL)的系統(tǒng)中實(shí)現(xiàn)的。這些庫(kù)的特點(diǎn)是每個(gè)庫(kù)的目標(biāo)程序可在裝載時(shí)重定位,也即,可由裝載程序賦予它任何地址。
每個(gè)可執(zhí)行模塊按規(guī)定格式存儲(chǔ)在永久存儲(chǔ)器中(例如,在硬盤(pán)上)。在本最佳實(shí)施例中,主可執(zhí)行文件和所有動(dòng)態(tài)連接庫(kù)都按照“LX-線性可執(zhí)行模塊”格式存儲(chǔ)起來(lái)。只要裝載程序能識(shí)別所有存儲(chǔ)格式,那么在主可執(zhí)行程序和動(dòng)態(tài)連接庫(kù)之間,或者甚至于在動(dòng)態(tài)連接庫(kù)內(nèi)部都可采用不同格式。
圖2中202是可執(zhí)行模塊的例子。主可執(zhí)行程序或者由操作系統(tǒng)或者直接由用戶首先調(diào)用,以完成一定功能。用戶調(diào)用的例子是由用戶在操作系統(tǒng)的命令提示下鍵入程序名稱,例如,鍵入MYPROGM將導(dǎo)致裝載并執(zhí)行MYPROGM.EXE。
可執(zhí)行模塊的首部包括眾多的裝載和執(zhí)行該程序時(shí)所需信息塊。這些包括模塊名稱,版本級(jí)別,CPU或操作系統(tǒng)的依賴關(guān)系,模塊大小,地址重定位時(shí)所需定位信息,和對(duì)于執(zhí)行過(guò)程中要引入的DLL模塊的引入模塊調(diào)用。
主可執(zhí)行程序通過(guò)引入模塊表來(lái)調(diào)用動(dòng)態(tài)連接庫(kù)。系統(tǒng)開(kāi)發(fā)人員插入程序中的顯式程序調(diào)用或者編譯程序在編譯時(shí)的插入操作都能產(chǎn)生DLL調(diào)用。如圖2所示,模塊202包括對(duì)DLL204和206中目標(biāo)程序的調(diào)用。模塊204包括對(duì)模塊208,210,和212的調(diào)用,而模塊206包括對(duì)模塊212和214的調(diào)用。
每個(gè)動(dòng)態(tài)連接庫(kù)(DLL)被分為一系列的目標(biāo)程序,它們包括正文,可共享的數(shù)據(jù),和實(shí)例數(shù)據(jù),可執(zhí)行目標(biāo)程序可包括幾個(gè)子程序,也可只包括一個(gè),這取決于建立目標(biāo)程序時(shí)的選項(xiàng)。每一個(gè)目標(biāo)程序在裝載時(shí)重定位,就是說(shuō),裝載時(shí)可賦予任何地址,每個(gè)目標(biāo)程序進(jìn)一步分為若干頁(yè)面,該頁(yè)面的尺寸對(duì)應(yīng)于計(jì)算機(jī)系統(tǒng)虛存管理程序所用頁(yè)面的大小。每一頁(yè)面有一相關(guān)連的“定位流”,后者識(shí)別并解譯模塊裝載時(shí)必須修改的地址。這些修改分為局部定位和外部定位,在局部定位中把目標(biāo)程序的起始地址加上偏移量就得到局部地址,在外部定位中把其他目標(biāo)程序或其他動(dòng)態(tài)連接庫(kù)的地址加上偏移量才得到所需地址。
本發(fā)明的最佳實(shí)施例是用一個(gè)具有OS/2操作系統(tǒng)性能的基于Mach微核的系統(tǒng)實(shí)現(xiàn)的。圖3顯示了該系統(tǒng)的主要功能部件。用戶302是一個(gè)在用戶空間運(yùn)行的程序。它可以是一個(gè)應(yīng)用程序,也可以是一個(gè)系統(tǒng)實(shí)用程序。OS/2服務(wù)器304包括的OS/2操作系統(tǒng)為可提供OS/2用戶接口并產(chǎn)生必要的對(duì)微核306的微核服務(wù)請(qǐng)求。文件服務(wù)器308管理磁盤(pán)文件或其他永久性存儲(chǔ)媒體。
OS/2服務(wù)器304包括三項(xiàng)和本發(fā)明有關(guān)的部件。任務(wù)管理程序310建立執(zhí)行任務(wù),以便執(zhí)行所請(qǐng)求的操作。裝載程序312完成的功能為向文件服務(wù)器308請(qǐng)求可執(zhí)行模塊,把這些可執(zhí)行模塊定位,并且把它們裝入內(nèi)存。內(nèi)存管理程序314利用微核內(nèi)存管理功能來(lái)管理內(nèi)存資源。微核有一個(gè)虛存系統(tǒng)316。虛存系統(tǒng)負(fù)責(zé)把VM頁(yè)面賦予內(nèi)存目標(biāo)程序,并檢測(cè)內(nèi)存頁(yè)面故障。當(dāng)一個(gè)任務(wù)請(qǐng)求內(nèi)存頁(yè)面而分配到頁(yè)面,但該頁(yè)面當(dāng)時(shí)并不在內(nèi)存中時(shí),就導(dǎo)致頁(yè)面故障。處理故障時(shí)應(yīng)對(duì)不用的或最近未用過(guò)的頁(yè)面執(zhí)行頁(yè)出操作,而對(duì)所請(qǐng)求頁(yè)面執(zhí)行頁(yè)入操作。
本發(fā)明的延緩裝載過(guò)程的操作將參照?qǐng)D4和圖3一起來(lái)描述。此過(guò)程從用戶空間對(duì)可執(zhí)行程序的初始化402的要求開(kāi)始。這導(dǎo)致任務(wù)管理程序310建立一個(gè)任務(wù)以便執(zhí)行,并虛存系統(tǒng)316登記該任務(wù)。接著任務(wù)管理程序讓裝載程序312啟動(dòng)404,裝載.EXE文件進(jìn)入內(nèi)存。裝載程序通過(guò)文件服務(wù)器308來(lái)存取.EXE文件。
裝載程序開(kāi)始裝載初始可執(zhí)行代碼406。裝載程序讀取.EXE首部并為該模塊建立模塊表登記項(xiàng)(MTE)。模塊表登記項(xiàng)向VM316進(jìn)行登記。裝載程序建立一個(gè).EXE文件所調(diào)用的所有DLL的列表。裝載程序?yàn)槊總€(gè)DLL目標(biāo)模塊確定一下該目標(biāo)模塊是否有MTE,如果沒(méi)有,裝載程序利用文件服務(wù)器訪問(wèn)該DLL,并為它裝載和建立一個(gè)MTE。該MTE向VM登記。
執(zhí)行任務(wù)后接著啟動(dòng)408。裝載過(guò)程中把和.EXE及所調(diào)用DLL有關(guān)連的數(shù)據(jù)頁(yè)面之每一頁(yè)都映射到用戶虛存空間,但在調(diào)用之前并不裝載循環(huán)頁(yè)面。調(diào)用一個(gè)并未裝載的虛存頁(yè)面將產(chǎn)生頁(yè)面故障410。有一個(gè)外部頁(yè)面管理程序用于處理內(nèi)存目標(biāo)頁(yè)面故障。該頁(yè)面管理程序可把所請(qǐng)求頁(yè)面裝入用戶內(nèi)存。一旦頁(yè)面裝載后,省缺的微核頁(yè)面管理程序就處理后續(xù)的裝載或卸載。
頁(yè)面故障410產(chǎn)生后,微核VM316確定目標(biāo)名稱,頁(yè)面和MTE412。對(duì)于有效頁(yè)面,外部頁(yè)面管理程序要求(416)裝載程序把該頁(yè)面定位并裝載(418)。在定位過(guò)程中可檢測(cè)任何附加的外部目標(biāo),也就是其他DLL目標(biāo),并確定該目標(biāo)是否已分配到內(nèi)存420。如果沒(méi)有,則請(qǐng)求一個(gè)大小合適的內(nèi)存段422,并把頁(yè)面映射到用戶地址空間424。
最佳實(shí)施例是在共享內(nèi)存系統(tǒng)中實(shí)現(xiàn)的,在該系統(tǒng)中多個(gè)任務(wù)能共享一定的內(nèi)存區(qū)域。當(dāng)另一個(gè)用戶任務(wù)調(diào)用早已分配給一個(gè)用戶的頁(yè)面時(shí)(414),系統(tǒng)核把核高速緩沖中該頁(yè)面的復(fù)制件給予第二個(gè)用戶,從而不必要求裝載程序?yàn)樵擁?yè)面定位。這種共享可節(jié)省為第二個(gè)用戶再次讀入并定位頁(yè)面所需開(kāi)銷。當(dāng)?shù)诙€(gè)用戶調(diào)用共享頁(yè)面上的目標(biāo)程序時(shí),將產(chǎn)生頁(yè)面保護(hù)故障,共享頁(yè)面上的目標(biāo)沒(méi)有裝載到用戶空間,因?yàn)闆](méi)有定位而只復(fù)制了被定位的頁(yè)面。服務(wù)器處理故障時(shí)把該目標(biāo)映射入第二用戶的地址空間430并重新啟動(dòng)用戶任務(wù)。
上述過(guò)程的結(jié)果是延緩評(píng)價(jià)庫(kù)目標(biāo)模塊要求。在庫(kù)目標(biāo)可被使用以前,裝載程序延緩對(duì)它的裝載。所有.EXE文件中的DLL目標(biāo)調(diào)用都在初始時(shí)裝載,因?yàn)槌跏紙?zhí)行時(shí)會(huì)包括這些目標(biāo)中的任何一個(gè),當(dāng)每個(gè)DLL目標(biāo)被調(diào)用時(shí),下一級(jí)被該目標(biāo)調(diào)用的DLL目標(biāo)就被處理。
本發(fā)明的優(yōu)點(diǎn)是限制內(nèi)存分配和裝載到只滿足所調(diào)用目標(biāo)的要求即可。它也限制應(yīng)分配的Mach端口和內(nèi)存頁(yè)面的數(shù)目,因而減少了總的系統(tǒng)開(kāi)銷。
最佳實(shí)施例是連同Mach微核一起描述的。然而,熟悉業(yè)務(wù)的人知道,延緩裝載過(guò)程并不限于此種操作系統(tǒng),這里所描述的過(guò)程可用于其他操作系統(tǒng),特別是那些支持虛存管理的系統(tǒng)。
從上面的描述可以明白,在不背離本發(fā)明真實(shí)本質(zhì)的情況下,本發(fā)明的最佳實(shí)施例可做不同修改和更動(dòng)。本描述本來(lái)只是為了解釋而用,因此不能局限地理解它。本發(fā)明的范圍應(yīng)只受下面權(quán)利要求書(shū)的文字所約束。
權(quán)利要求
1.一個(gè)管理可執(zhí)行程序的內(nèi)存分配的系統(tǒng),其特征包括用于接受把主可執(zhí)行程序裝入內(nèi)存的請(qǐng)求的裝置;用于確定所述主可執(zhí)行程序所調(diào)用的次可執(zhí)行程序的裝置;用于為所述次可執(zhí)行程序分配內(nèi)存段,但不把所述程序裝入內(nèi)存的裝置;用于檢測(cè)對(duì)于一個(gè)所述只分配而未裝載段的調(diào)用的裝置,所述用于檢測(cè)的裝置在檢測(cè)到調(diào)用時(shí)產(chǎn)生一個(gè)檢測(cè)信號(hào);和用于對(duì)所述檢測(cè)信號(hào)作出響應(yīng),從而把被分配了所述段的可執(zhí)行程序裝入內(nèi)存的裝置。
2.權(quán)利要求1的系統(tǒng),其特征在于所述用于裝載可執(zhí)行程序的裝置包括用于從存儲(chǔ)裝置中復(fù)制所述可執(zhí)行程序的裝置;用于把所述可執(zhí)行程序內(nèi)的調(diào)用進(jìn)行地址重定位的裝置;用于確定被所述可執(zhí)行程序調(diào)用的可執(zhí)行程序的裝置;和用于為所述被調(diào)用可執(zhí)行程序分配內(nèi)存段、但不把所述程序裝入內(nèi)存的裝置。
3.權(quán)利要求2的系統(tǒng),其特征在于所述用于檢測(cè)的裝置是一個(gè)頁(yè)面故障檢測(cè)系統(tǒng)。
4.權(quán)利要求1的系統(tǒng),其特征在于所述用于裝載的裝置是一個(gè)外部頁(yè)面管理程序。
5.權(quán)利要求3的系統(tǒng),其特征在于所述用于裝載的裝置是一個(gè)外部頁(yè)面管理程序。
6.一種用于動(dòng)態(tài)裝載可執(zhí)行程序的方法,其特征包括以下步驟接受一個(gè)把主可執(zhí)行程序裝入內(nèi)存的請(qǐng)求;建立一個(gè)被所述主可執(zhí)行程序所調(diào)用的全部程序表;為所述程序分配內(nèi)存區(qū)域,但不裝載所述程序;檢測(cè)到對(duì)所述已分配的內(nèi)存區(qū)域中的調(diào)用,并產(chǎn)生一個(gè)檢測(cè)信號(hào);和對(duì)所述檢測(cè)信號(hào)作出響應(yīng),把所述程序裝入所述已分配的內(nèi)存區(qū)域。
7.權(quán)利要求6的方法,其特征在于所述裝載步驟包括下列步驟從一個(gè)存儲(chǔ)裝置復(fù)制所述程序;對(duì)所述程序內(nèi)的調(diào)用作地址重定位;建立一個(gè)被所述已裝載程序所調(diào)用的程序表;和為所述被調(diào)用程序分配內(nèi)存區(qū)域,但不把所述程序裝入內(nèi)存。
8.權(quán)利要求6的方法,其特征在于所述檢測(cè)步驟包括檢測(cè)一個(gè)內(nèi)存頁(yè)面故障調(diào)用。
9.權(quán)利要求6的方法,其特征在于所述裝載步驟包括把控制交給一個(gè)外部頁(yè)面管理程序,以完成所述裝載步驟。
10.一種具有計(jì)算機(jī)可讀媒體的計(jì)算機(jī)程序產(chǎn)品,該媒體帶有已記錄的計(jì)算機(jī)程序邏輯,用于動(dòng)態(tài)地把可執(zhí)行程序裝入內(nèi)存,所述計(jì)算機(jī)程序產(chǎn)品的特征包括用于接受把主可執(zhí)行程序裝入內(nèi)存的請(qǐng)求的裝置;用于確定由所述主可執(zhí)行程序調(diào)用的次可執(zhí)行程序的裝置;用于為所述次可執(zhí)行程序分配內(nèi)存段、但不把所述程序裝入內(nèi)存的裝置;用于檢測(cè)對(duì)所述已分配但未裝載的內(nèi)存段中的調(diào)用的裝置,所述用于檢測(cè)的裝置在檢測(cè)到調(diào)用時(shí)產(chǎn)生一個(gè)檢測(cè)信號(hào);和對(duì)所述檢測(cè)信號(hào)作出響應(yīng)、把已分配了所述內(nèi)存段的所述可執(zhí)行程序裝入內(nèi)存的裝置。
11.權(quán)利要求10的計(jì)算機(jī)程序,其特征在于所述用于裝載可執(zhí)行程序的裝置包括用于從存儲(chǔ)裝置復(fù)制所述可執(zhí)行程序的裝置;用于在所述可執(zhí)行程序中對(duì)調(diào)用地址重定位的裝置。用于確定由所述可執(zhí)行程序調(diào)用的可執(zhí)行程序的裝置;和用于把內(nèi)存段分配給所述被調(diào)用的可執(zhí)行程序、但不把所述程序裝入內(nèi)存的裝置。
12.權(quán)利要求11的計(jì)算機(jī)程序,其特征在于所述用于檢測(cè)的裝置是一個(gè)頁(yè)面故障檢測(cè)系統(tǒng)。
13.權(quán)利要求10的計(jì)算機(jī)程序,其特征在于所述用于裝載的裝置是一個(gè)外部頁(yè)面管理程序。
14.權(quán)利要求12的計(jì)算機(jī)程序,其特征在于所述用于裝載的裝置是一個(gè)外部頁(yè)面管理程序。
全文摘要
對(duì)可執(zhí)行庫(kù)目標(biāo)程序延緩裝載是拖延對(duì)目標(biāo)程序的裝載,直到要調(diào)用該目標(biāo)程序時(shí)才裝載,這樣做可減少操作系統(tǒng)開(kāi)銷和減輕內(nèi)存負(fù)擔(dān)。初始任務(wù)裝載時(shí)只給主可執(zhí)行程序和由它調(diào)用的庫(kù)目標(biāo)程序分配內(nèi)存。被調(diào)用的次目標(biāo)程序不分配內(nèi)存。目標(biāo)程序調(diào)用那些已分配但未裝載的頁(yè)面時(shí)將產(chǎn)生頁(yè)面故障。處理頁(yè)面故障時(shí)對(duì)可執(zhí)行目標(biāo)裝載并定位。處理頁(yè)面故障時(shí)也確定目標(biāo)調(diào)用下一級(jí)的并為下一目標(biāo)級(jí)分配內(nèi)存。
文檔編號(hào)G06F12/08GK1101142SQ94102158
公開(kāi)日1995年4月5日 申請(qǐng)日期1994年2月24日 優(yōu)先權(quán)日1993年2月26日
發(fā)明者詹姆森·文德?tīng)枴ぐ⑻m德, 鮑爾·普拉西多·吉安格拉, 拉文德拉納斯·卡辛納斯·馬尼昆德拉姆, 多納爾德·羅伯特·帕吉特, 詹姆斯·邁克爾·弗蘭 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司