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