国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      存儲管理的方法和裝置的制作方法

      文檔序號:6408462閱讀:216來源:國知局
      專利名稱:存儲管理的方法和裝置的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明主要涉及的領(lǐng)域是計算機存儲系統(tǒng),尤其涉及一種控制和優(yōu)化使用計算機存儲器的存儲管理系統(tǒng)。
      背景技術(shù)
      通常的計算機系統(tǒng)由許多模塊或元件組成。計算機系統(tǒng)包括一個諸如微處理器的中央處理器(CPU)。微處理器是一個程序控制設(shè)備,能獲得、解譯和執(zhí)行指令。計算機系統(tǒng)還包括用于存儲系統(tǒng)操作軟件、應(yīng)用程序指令和數(shù)據(jù)的存儲元件。這些存儲元件可以是只讀存儲器(ROM)、隨機存取存儲器(RAM),或者象磁盤或磁帶等大容量存儲器,或者任何其它合適的存儲裝置。
      計算機系統(tǒng)的運行是由一系列稱之為“操作系統(tǒng)”的指令來控制的。操作系統(tǒng)用來控制諸如輸入/輸出等計算機系統(tǒng)的基本功能,并且一般存儲在ROM這種永久性的存儲元件或以后會裝入RAM并在RAM中運行的磁盤存儲器中。操作系統(tǒng)的例子有MS-DOS或PC-DOS。計算機系統(tǒng)用來執(zhí)行應(yīng)用程序。
      在一些處理操作過程中,當對某些數(shù)據(jù)執(zhí)行指令時,CPU可能還需要暫時存儲這些數(shù)據(jù)。另外,CPU必須可以訪問控制處理的應(yīng)用程序和控制該程序運行的操作系統(tǒng)。一種稱為“主存儲器”的RAM就為CPU提供了這種信息。
      稱為主存儲器的存儲元件是一種不足的資源,它需動態(tài)地分配給用戶、數(shù)據(jù)、程序或處理過程。爭奪該不足資源的存儲用戶有應(yīng)用程序、TSR(“中斷駐留”程序)和其他處理過程。例如,應(yīng)用程序包括文字處理程序、電子表格、繪圖程序、數(shù)據(jù)庫等等。某些應(yīng)用程序可以存儲在ROM中。但一般把應(yīng)用程序存儲在諸如磁盤驅(qū)動器等大容量的存儲設(shè)備中。在初始化的基礎(chǔ)上,把CPU將要執(zhí)行的應(yīng)用程序從大容量存儲器傳送到RAM。
      計算機系統(tǒng)上也使用中斷駐留程序。這種程序提供“熱鍵”和“彈出型窗口”,并且用來進行后臺作業(yè),如在視頻顯示器的角落中顯示一鐘,或者監(jiān)測磁盤驅(qū)動器的活動情況等。已為許多其他的應(yīng)用程序編寫了TSR,而且用戶常常希望同時在他們的計算機里駐留幾個TSR。由于每個TSR都需要其存放的存儲空間,所以把TSR加至系統(tǒng)上也要增加對主存儲器的存儲需求。
      主存儲器一般是諸如RAM的硅底存儲器。換句話說,動態(tài)隨機存取存儲器(DRAM)可用作主存儲器。主存儲器RAM可以作為常規(guī)存儲區(qū)(conventional memory)、擴充存儲區(qū)(extended memory)和擴展存儲區(qū)(expanded memory)來訪問。常規(guī)存儲區(qū)常規(guī)存儲區(qū)是RAM中CPU最易訪問的一個區(qū)域。常規(guī)存儲區(qū)中最好存儲CPU所需的數(shù)據(jù)和指令。但是,常規(guī)存儲區(qū)的大小是有限的,這會限制常規(guī)存儲區(qū)中數(shù)據(jù)和指令的存儲量。
      早期的微機有16位地址總線,它們提供64K的地址空間。隨著應(yīng)用程序?qū)Υ鎯α啃枨蟮脑鲩L,微機必須克服16位地址總線的局限。這樣,IBM個人計算機便引進了一種支持20位地址總線的分段尋址方案(segmented addressing scheme)。20位地址總線提供1024K或1M的地址空間,該空間是16位總線的16倍。原來設(shè)計的IBM PC機和系統(tǒng)軟件人為地限制了常規(guī)存儲區(qū)為640K。從640K到1M的384K地址空間留作將來使用,主要留給ROM使用。由于把以后的計算機設(shè)計成與原始IBM PC機是向下兼容的,并且使用相同的PC-DOS、MS-DOS操作系統(tǒng),所以在現(xiàn)代計算機上,常規(guī)存儲區(qū)640K的限制繼續(xù)約束著應(yīng)用程序所能使用的存儲量。擴充存儲區(qū)擴充存儲區(qū)是大于1024千字節(jié)的RAM,若微處理器有足夠數(shù)量的地址線的話,則可直接對其尋址。例如,Intel 80286微處理器具有24位的尋址能力,而且可以對第一個1M存儲區(qū)以上的15M擴充存儲區(qū)尋址。Intel 80386和80486微處理器具有32位的尋址能力,并且可以對第一個1M存儲區(qū)以上大約4千兆字節(jié)的擴充存儲區(qū)尋址。擴展存儲區(qū)擴展存儲區(qū)也稱為“擴展存儲規(guī)范(expanded memory specifi-cation)”(EMS),它保留一部分不能直接訪問的擴充存儲區(qū)作為擴展存儲區(qū),并將其分成頁面。每次向CPU可直接訪問的地址空間換入一頁擴展存儲區(qū),這樣EMS能夠虛擬地訪問無限量的存儲區(qū)。但是,EMS轉(zhuǎn)換頁面要花時間。如果所需的數(shù)據(jù)不在位于可直接訪問的存儲區(qū)內(nèi)的EMS頁面中,那么EMS必須調(diào)出頁面中的當前內(nèi)容,并且從擴展存儲區(qū)調(diào)入包含所需數(shù)據(jù)的頁面。由于這種換頁需要時間,所以會降低計算機的處理速度。再有,EMS一般并不適用于所有的應(yīng)用軟件。如果可行,必須為利用EMS特地編寫應(yīng)用軟件。存儲1描繪了一常規(guī)計算機上主存儲器RAM的存儲圖,即是一個基于微處理器8088/8086族并在MS-DOS下運行的計算機,如IBM個人計算機等。

      圖1的存儲圖不是唯一可能的存儲圖,但是一例典型的存儲圖。存儲圖自底向上管理,存儲單元零(101)位于底部,連續(xù)向上一直到頂部存儲器中的最高單元。存儲圖有三個基本區(qū)。第一區(qū)包括最低存儲區(qū)640K,稱為常規(guī)存儲區(qū)102。盡管并非所有系統(tǒng)都包括整個640K,并且可把一些存儲空間留著不用,但常規(guī)存儲區(qū)102完全由RAM組成,允許讀操作和寫操作。
      常規(guī)存儲區(qū)102用來存儲系統(tǒng)軟件、應(yīng)用軟件、用戶數(shù)據(jù)以及其它代碼和數(shù)據(jù),還有TSR和設(shè)備驅(qū)動程序。如圖1所示,MS-DOS用存儲區(qū)的最低部分來存儲其本身代碼106及相關(guān)數(shù)據(jù)107。在此之上,MS-DOS存儲應(yīng)用軟件、TSR和設(shè)備驅(qū)動程序,圖中用單元112集中表示。
      常規(guī)存儲區(qū)以上是384K保留存儲區(qū)103,它位于640K RAM界和1024K之間的存儲地址中。保留存儲區(qū)103主要被ROM占據(jù),是只讀設(shè)備。保留存儲區(qū)中的ROM包括系統(tǒng)ROM、顯示ROM,也許還有其它諸如硬盤驅(qū)動器或網(wǎng)終接口等外圍設(shè)備用的ROM。除了ROM以外,保留存儲區(qū)103還包括其它特定類型的存儲器,如視頻畫面貼緩沖器(video frame buffer)等。
      系統(tǒng)ROM支持計算機的基本操作,一般占據(jù)(例如)保留存儲區(qū)103中從960K至1024K的最高的64K。保留存儲區(qū)103中剩余的空間或者不用,或者用于其它目的,包括支持其它外圍設(shè)備或EMS頁面的ROM。
      如上所述,擴充存儲區(qū)111包括1M以上的所有存儲區(qū)。諸如80286等具有24位尋址能力的微處理器可以對16M存儲區(qū)尋址,即除了1M的保留存儲區(qū)103和常規(guī)存儲區(qū)102之外還可包括15M的擴充存儲區(qū)。諸如80386和80486等具有32位尋址能力的微處理器可以對4G存儲區(qū)尋址,即除了1M的保留存儲區(qū)103和常規(guī)存儲區(qū)102之外還可包括4095M的擴充存儲區(qū)。擴充存儲區(qū)111的區(qū)域剛好位于1M以上,有時稱為高位存儲區(qū)(high memory area)113。
      隨著TSR的增多及應(yīng)用程序變大,常規(guī)存儲區(qū)中空間爭奪更為激烈。最好在保持使用TSR的同時為應(yīng)用程序提供更多的常規(guī)存儲區(qū)。
      可以通過減少TSR使用的存儲量、減少TSR的數(shù)目,或者通過把TSR重新定位在常規(guī)存儲區(qū)以外的存儲區(qū)中,來增加應(yīng)用程序可采用的常規(guī)存儲量。
      人們不希望減少TSR的數(shù)目,因為這會減少功能或降低性能。減少每個TSR所用的常規(guī)存儲量是不實際的,因為這需要重寫每個TSR。
      由于TSR占據(jù)了一些原可由應(yīng)用軟件使用的常規(guī)存儲空間,所以如果把這些程序移至常規(guī)存儲區(qū)102以外的存儲區(qū),則可有更多的存儲空間為應(yīng)用軟件使用。有一種現(xiàn)有技術(shù)方法,它通過把TSR從常規(guī)存儲區(qū)102移至保留存儲區(qū)103,來增加可為應(yīng)用程序使用的常規(guī)存儲區(qū)102的存儲量。
      為了實現(xiàn)該目的,必須首先確定保留存儲區(qū)103中未使用的存儲量。還必須確定TSR占據(jù)常規(guī)存儲區(qū)的存儲量。然后,必須把擴充存儲區(qū)中足夠多未分配的RAM映射到保留存儲區(qū),從而為TSR提供存儲空間。接著,把TSR重新定位到保留存儲區(qū)103的有效存儲區(qū)中。
      該種現(xiàn)有技術(shù)方法有缺點。首先,它只能使用未分配的保留存儲空間。它不能使用已經(jīng)分配給ROM、視頻畫面幀緩沖器或作其它使用的保留存儲區(qū)。還有,對TSR的再定位必須保證所有對它們的引用都再指向其新的單元。
      另一種從常規(guī)存儲區(qū)再定位的現(xiàn)有技術(shù)方法稱為“覆蓋(over-lay)”。覆蓋是把程序可執(zhí)行部分按需要換入和換出存儲區(qū)。覆蓋的缺點是要求使用覆蓋的程序與一覆蓋管理器連接,該覆蓋管理器對存取位于覆蓋區(qū)中的函數(shù)和數(shù)據(jù)進行控制。
      圖2A和2B描繪了一例覆蓋方案。首先參看圖2A,第一個1024字節(jié)的、CPU可作訪問的RAM用存儲塊201表示。存儲塊201包括一常規(guī)存儲區(qū)102。常規(guī)存儲區(qū)102在較低的地址處包括區(qū)域202,用來存儲諸如DOS等操作系統(tǒng)代碼。常規(guī)存儲區(qū)102的剩余部分112在DOS區(qū)202以上、保留存儲區(qū)103以下,用來存儲應(yīng)用程序、TSR和設(shè)備驅(qū)動程序等等。
      有些應(yīng)用程序太大,不能完全存儲在常規(guī)存儲區(qū)112中。例如,Word Perfect就是這樣的應(yīng)用程序,它是一個字處理應(yīng)用程序。因此,在任何一個時刻,只有一部分Word Perfect被存儲在存儲區(qū)112中。其余部分則被存儲在諸如磁盤存儲器204等其它存儲器中。當需要部分應(yīng)用程序時,把它們從磁盤存儲器204傳送至存儲區(qū)112。
      在圖2A的例子中,塊A203表示一部分應(yīng)用程序,其存儲在存儲區(qū)112中。塊B205和塊C206是應(yīng)用程序分成的其它兩個部分,它們存儲在磁盤存儲器中。磁盤存儲器204通過一總線或其它傳輸裝置207與RAM201耦合。
      當正在調(diào)用或使用塊A203中的功能時,塊A203駐留在存儲區(qū)112中。當需要其他功能時,必須把提供該功能的代碼從磁盤存儲器204傳送給存儲區(qū)201。現(xiàn)在參看圖2B,塊B205從磁盤存儲器204傳送至存儲區(qū)112。由此,把原先駐留在存儲區(qū)112中的應(yīng)用程序部分塊A203傳送至磁盤存儲器204。圖中示出塊B205比塊A203占據(jù)了更多的存儲區(qū)112。諸塊不需要一樣大小,但其存儲空間不能超過存儲區(qū)112中可使用的地址空間。
      覆蓋的缺點是,它們要從一磁盤文件換進換出,這會加長執(zhí)行時間并降低性能。某些程序需要一些代碼和數(shù)據(jù)總是駐留在常規(guī)存儲區(qū)中。而覆蓋不提供任何識別常駐常規(guī)存儲區(qū)代碼和數(shù)據(jù)的方法。當交換塊A203和塊B205時,它們被整個調(diào)換。塊A203沒有任何部分會留在存儲區(qū)112中。因此,這種程序不能使用覆蓋方案。某些TSR不能轉(zhuǎn)變成覆蓋區(qū)。這些TSR包括那些提供內(nèi)部DOS功能的TSR。例如,由猶他(Utah)州普羅沃(Provo)的Novell股份有限公司生產(chǎn)的Netware DOS客戶軟件。
      因此,現(xiàn)有技術(shù)沒有提供一種系統(tǒng),這種系統(tǒng)能減少TSR使用的常規(guī)存儲量但不犧牲性能。

      發(fā)明內(nèi)容
      本發(fā)明提供DOS可執(zhí)行的程序,這些程序如此構(gòu)造,即它們能夠與其它相似構(gòu)造的程序協(xié)調(diào)共享其部分代碼或數(shù)據(jù)使用的存儲區(qū)。這減少了對常規(guī)存儲區(qū)的總需求。在本發(fā)明中,這些程序被稱為模塊,它們可以是應(yīng)用程序、TSR或任何其它轉(zhuǎn)變成該模塊格式的可執(zhí)行文件。模塊包括可從常規(guī)存儲區(qū)換出的瞬態(tài)代碼和數(shù)據(jù),以及不可交換并駐留在常規(guī)存儲區(qū)中的全局代碼和數(shù)據(jù)。
      通過提供駐留在存儲區(qū)中的全局數(shù)據(jù)塊,本發(fā)明的模塊能夠調(diào)用其它模塊以及中斷處理程序和其它外部或異步使用的代碼或數(shù)據(jù)。因此,本發(fā)明比覆蓋技術(shù)支持更多的程序設(shè)計接口。
      本發(fā)明允許模塊共享單塊常規(guī)存儲區(qū),這就減少了對常規(guī)存儲區(qū)的需求。無論模塊有多少,分給它們使用的常規(guī)存儲塊的大小是一樣的。分配的存儲塊要足夠大,足以存儲共享常規(guī)存儲塊的模塊中最大塊的瞬態(tài)代碼或數(shù)據(jù)。
      不把模塊瞬態(tài)塊換入和換出磁盤存儲器,而把瞬態(tài)塊在常規(guī)存儲區(qū)和擴充或擴展存儲區(qū)間交換。這與覆蓋方案相比大大地減少了傳送時間,提高了性能。
      附圖概述圖1是一存儲圖,示出了一常規(guī)計算機系統(tǒng)的存儲管理。
      圖2A和2B示出了一現(xiàn)有技術(shù)的覆蓋方案。
      圖3示出了本發(fā)明的模塊結(jié)構(gòu)。
      圖4A-4E示出了存儲管理器的操作。
      圖5是一流程圖,示出了本發(fā)明的預(yù)初始(pre—init)操作。
      圖6是一流程圖,示出了本發(fā)明的實初始(real—init)操作。
      圖7是一本發(fā)明調(diào)用模塊的流程圖。
      圖8是一實現(xiàn)本發(fā)明的計算機系統(tǒng)的方框圖。
      圖9示出了一VMCB數(shù)據(jù)塊。
      本發(fā)明的最佳實施方式現(xiàn)將描述一種更有效地使用計算機系統(tǒng)常規(guī)存儲區(qū)的方法。在以下描述中,為了更全面地闡述本發(fā)明,將詳細描述諸如計算機系統(tǒng)類型、存儲地址單元、存儲量等許多具體的內(nèi)容。但是,對于本領(lǐng)域的熟練技術(shù)人員,顯然不需要這些具體內(nèi)容就可以實踐本發(fā)明。在其它情況下,為了不使理解本發(fā)明有不必要的困難,這里不再詳述眾所周知的特性。
      本發(fā)明為TSR和其它程序提供了一種共享常規(guī)存儲空間的方法和裝置,其減少了對常規(guī)存儲區(qū)的需求。將TSR和諸程序構(gòu)成“模塊”,并且模塊管理器控制模塊換入和換出常規(guī)存儲區(qū)。在本發(fā)明的較佳實施例中,常規(guī)存儲區(qū)每次只駐留一個模塊。其余模塊存儲在擴充存儲區(qū)或擴展存儲區(qū)中,這避免了時間的浪費,減少了與磁盤的交換。
      圖4A-4E示出了模塊管理器的運行。圖4A描繪了關(guān)于常規(guī)存儲區(qū)、保留存儲區(qū)、擴充存儲區(qū)和擴展存儲區(qū)的存儲圖。常規(guī)存儲區(qū)102在較低的存儲區(qū)包括DOS存儲區(qū)202,在常規(guī)存儲區(qū)102中DOS區(qū)202的上面是專供模塊管理器401之用的空間。在模塊管理器401以上是一區(qū)域,專供系統(tǒng)用到模塊的全局代碼和數(shù)據(jù)之用。存儲在全局代碼和數(shù)據(jù)區(qū)402以上的是一專供模塊的瞬態(tài)塊之用的區(qū)域。瞬態(tài)塊模塊403有一上界404,該上界是在系統(tǒng)中保持不變且由系統(tǒng)中任何模塊的最大瞬態(tài)塊來確定的。在常規(guī)存儲區(qū)102中,上界404以上和保留存儲區(qū)以下的空間由其它應(yīng)用程序和處理過程使用。
      保留存儲區(qū)103用于ROM和擴展存儲區(qū)406。在保留存儲區(qū)103以上是擴充存儲區(qū)111(1024千字節(jié)以上)。擴充存儲器111存儲著模塊A的瞬態(tài)塊405。擴展存儲區(qū)406包括模塊B和C各自的瞬態(tài)塊407和408。
      在把全局代碼和數(shù)據(jù)存入全局區(qū)402中并限定了瞬態(tài)塊403的上界404之后,模塊管理器就可以在調(diào)用模塊時訪問它們。參看圖4B,考慮需要模塊B的情況。模塊B可能包括常駐在全局區(qū)402中的代碼。當調(diào)用模塊B時,模塊管理器把模塊B的瞬態(tài)塊407從擴展存儲區(qū)406轉(zhuǎn)移到常規(guī)存儲區(qū)102的瞬態(tài)塊403中。這時,其它模塊的任何瞬態(tài)塊都被換出常規(guī)存儲區(qū)。然后,調(diào)用模塊B的過程便可訪問它,就好象模塊B一直駐留在常規(guī)存儲區(qū)中。如圖4B所示,模塊B的瞬態(tài)塊407并不使用瞬態(tài)塊403中所有可使用的地址空間。但,瞬態(tài)塊403的上界404保持不動。
      圖4C-4E描繪了一個模塊調(diào)用另一模塊的過程。如圖4C所示,模塊C的瞬態(tài)塊408駐留在常規(guī)存儲區(qū)102的瞬態(tài)塊403中。模塊C通過模塊管理器調(diào)用模塊A。模塊管理器跟蹤調(diào)用模塊和目的模塊。模塊C的瞬態(tài)塊408與模塊A的瞬態(tài)塊405交換。參看圖4D,現(xiàn)在模塊A的瞬態(tài)塊405存儲在瞬態(tài)塊403中。注意,模塊A的瞬態(tài)塊405占據(jù)了瞬態(tài)塊403所有的地址空間。當模塊A執(zhí)行其被調(diào)用的功能后,如圖4E所示,模塊管理器再把模塊A的瞬態(tài)塊405與模塊C的瞬態(tài)塊408交換。模塊結(jié)構(gòu)在本發(fā)明中,把模塊的代碼和數(shù)據(jù)構(gòu)成不同的種類,從而提供一般管理常規(guī)存儲區(qū)中模塊的辦法。這些類包括一功能調(diào)度表(轉(zhuǎn)移表)、瞬態(tài)代碼和數(shù)據(jù)、全局代碼和數(shù)據(jù),以及啟動代碼和數(shù)據(jù)。圖3示出了模塊的格式。
      模塊301的結(jié)構(gòu)包括302、303和304三個區(qū)域。區(qū)域302包括一轉(zhuǎn)移表305和一瞬態(tài)組(transient group)306。區(qū)域303包含全局代碼和數(shù)據(jù),而區(qū)域304包括啟動代碼和數(shù)據(jù)。瞬態(tài)區(qū)302包括“可交換的”代碼和數(shù)據(jù)。也就是說,該數(shù)據(jù)可在常規(guī)存儲區(qū)和增強存儲區(qū)(擴充或擴展)之間換入和換出。轉(zhuǎn)移表轉(zhuǎn)移表305表示模塊支持的功能。任何時候都可把轉(zhuǎn)移表(也稱為瞬態(tài)代碼)換出。因此中斷處理程序(或任何可直接訪問的代碼段)不能存在于瞬態(tài)代碼段中。轉(zhuǎn)移表中的第一入口(first entry)是模塊初始程序的指針。轉(zhuǎn)移表至少由四個預(yù)定義功能的指針組成,其中預(yù)定義功能是所有模塊共用的,它們是初始(init)、轉(zhuǎn)儲、版本(version)和統(tǒng)計功能。
      初始初始化功能是模塊中一初始化程序,該初始化程序進行預(yù)初始(pre—init),為初始模塊獲得必要的參數(shù),并隨后進行實初始(real—init),把模塊真正裝入適當?shù)亩?。掛鉤向量就是在該實初始過程中進行的。
      轉(zhuǎn)儲轉(zhuǎn)儲功能有利于資源的釋放。如果對轉(zhuǎn)儲安全性的檢查(CX=FFFh)以后返回的是一臨界區(qū)狀態(tài),則轉(zhuǎn)儲請求會失敗。如果模塊工作良好,則沒有理由失敗,于是對轉(zhuǎn)儲安全的檢查返回一個零值,這表示實轉(zhuǎn)儲是安全的。實轉(zhuǎn)儲的請求不能失敗。如果一模塊的轉(zhuǎn)儲檢查失敗了,那么通知所有先前檢查的模塊轉(zhuǎn)儲取消。(即CX=FFFEh)。
      版本版本功能獲取模塊的主要版本和次要版本。該功能提供模塊間的通用性。該版本功能的其它子功能也在模塊間建立通用性。其余子功能(01h=0Bh)還有助于模塊相互間有關(guān)連接建立、斷開等的通信(多點播送multi—casting)。
      例如,在第一任務(wù)終止時有一多點播送調(diào)用(即_Notify處理程序子功能01h,PSP終止)。該子功能是預(yù)定主功能的一部分。
      統(tǒng)計統(tǒng)計功能獲取對模塊的統(tǒng)計。該功能是可選的。統(tǒng)計用于模塊調(diào)試。統(tǒng)計結(jié)構(gòu)是一長度優(yōu)先的緩沖器,統(tǒng)計結(jié)構(gòu)表的第一個字表示有效統(tǒng)計信息的字節(jié)數(shù)。其它所有的統(tǒng)計信息需要被記錄在統(tǒng)計大小(stat size)和統(tǒng)計端字段(stat end field)之間。
      可以為模塊提供其它特定的功能,它們跟在這些預(yù)定義的功能之后。終止零(DDO)跟在轉(zhuǎn)移表中模塊定義的公共功能和所有其它功能之后。這讓模塊管理器知道模塊支持多少功能,從而避免超出該數(shù)目的請求。瞬態(tài)數(shù)據(jù)類似于瞬態(tài)代碼,瞬態(tài)數(shù)據(jù)有特殊的要求。某些類型的數(shù)據(jù)不能存在于瞬態(tài)組中。這些受限制的類型包括堆棧和轉(zhuǎn)到另一模塊的數(shù)據(jù)。為了性能方面的原因,所有非全局數(shù)據(jù)應(yīng)該位于瞬態(tài)數(shù)據(jù)段中。瞬態(tài)數(shù)據(jù)在增強存儲區(qū)和常規(guī)存儲區(qū)之間交換。全局代碼和數(shù)據(jù)全局區(qū)303存儲那些必須常駐在常規(guī)存儲區(qū)內(nèi)的代碼和數(shù)據(jù)。例如,可存儲在全局區(qū)303中的代碼和數(shù)據(jù)包括使用全局代碼的中斷處理程序,不經(jīng)過模塊管理器存取的遠調(diào)用處理程序(far callhandler)、堆棧,以及轉(zhuǎn)到其它模塊去的數(shù)據(jù)??梢詣?chuàng)建一個在全局區(qū)中無存儲器的模塊。啟動區(qū)啟動區(qū)包括初始化代碼。代碼提供預(yù)初始和實初始操作。在預(yù)初始期間,每個模塊向一模塊管理器提供一VMCB結(jié)構(gòu)的數(shù)據(jù)塊。模塊利用初始程序通過該VMCB結(jié)構(gòu)報告所需的初始存儲量(包括全局和瞬態(tài)存儲段)。特別是,VMCB_InitImageParaLength參數(shù)定義了預(yù)裝入的總大小。
      模塊管理器用VMCB_InitImageParaLength確定在實初始和運行期間有多少存儲量會換入和換出。這種確定模塊存儲分配的方法避免了混淆,并簡化了使存儲段保持獨立的過程。當同時運行全局數(shù)據(jù)段和保護模式數(shù)據(jù)段時,保持存儲段獨立是有用的。如果模塊依賴于其它正在裝入的模塊,那么在預(yù)初始階段可檢查模塊的依賴性。將偽初始標起(AX=-1)傳入該過程。
      在實初始期間,要求模塊把全局代碼/數(shù)據(jù)從其存儲的單元移走。當模塊管理器在實初始時調(diào)用初始功能時,BX寄存器中定義了該組的目的地。此過程之后,模塊必須執(zhí)行任何轉(zhuǎn)移全局組所必需的安排。執(zhí)行這些安排以確保數(shù)據(jù)參考新的位置而不是DOS裝入的組。模塊管理器管理各個模塊和多路轉(zhuǎn)接器(multiplexor)的便是模塊管理器。應(yīng)用程序向模塊管理器提出所有的調(diào)用請求,模塊管理器把請求引向其適當?shù)哪康牡兀还苣康牡厥橇硪粋€模塊(子女)或多路轉(zhuǎn)接器。模塊管理器還保證把回答返回到它們合適的調(diào)用程序處。
      每個模塊通過模塊管理器調(diào)用其它模塊。既使一模塊正在調(diào)用其特定層的多路轉(zhuǎn)接器,它也向模塊管理器提出調(diào)用請求,然后由模塊管理器調(diào)用特定的多路轉(zhuǎn)接器。類似地,當某一調(diào)用從一特定模塊返回時,該調(diào)用從多路轉(zhuǎn)接器經(jīng)過模塊管理器返回特定的模塊。
      模塊管理器的一項任務(wù)是保證其余段間的API調(diào)用按正確路線進行。因此,模塊管理器必須知道是否已經(jīng)裝入了某一給定的用戶應(yīng)用程序所需的模塊。經(jīng)監(jiān)管調(diào)用其它模塊的模塊。模塊管理器還處理異步調(diào)用的模塊和功能。
      模塊管理器可使API用數(shù)字編號調(diào)用功能和模塊。模塊管理器還通過調(diào)用程序模塊標識符(ID)得知誰在調(diào)用那個功能。模塊標識符(ID)是預(yù)先派定的。由于模塊管理在編號的基礎(chǔ)上處理所有的API,所以模塊管理器與模塊中的單個功能沒有內(nèi)在的依賴關(guān)系或相互聯(lián)系。因而,非請求型(Requester model)部分的模塊可把模塊用作TSR存儲管理器。這就是給予模塊管理器的支持各種各樣TSR的能力。
      模塊管理器提供所有模塊都需要的基本服務(wù),尤其是那些允許和有利于所有被裝模塊間調(diào)用的服務(wù)。因此,模塊管理器擁有所有層次的請求型。
      模塊管理器不僅裝入和轉(zhuǎn)儲每一模塊(包括多路轉(zhuǎn)接器),它還為所有模塊處理存儲服務(wù)(分配和管理)。模塊管理器為其模塊采取存儲交換。
      模塊管理器決定給定的模塊是否使用擴展存儲區(qū)、擴充存儲區(qū)、常規(guī)存儲區(qū)或任何支持的存儲類型,但不影響模塊本身。因此,可把單個子女模塊從這些相關(guān)的存儲區(qū)中釋放出來。
      子女模塊仍必須符合某些對存儲使用的需求。一旦如此,它們便可獲得所有由模塊管理器為其處理存儲機制的好處。
      模塊管理器還負責裝入時間—配置API。任何模塊都可配置。例如,連接表想要一定數(shù)量的連接,或者IPX想支持許多ECB,或較大或較小的緩沖器。在這些例子中,模塊管理器為模塊做工作。
      另外,為了優(yōu)化性能,一用戶可能想把一模塊裝在不交換的存儲區(qū)中,而不管正在使用的存儲類型。理想的情況是由模塊管理器來管理最佳配置的變化。為需要該能力的模塊配備一個API。
      由于模塊管理器不能得知所有可能的配置交換,所以請求器(Requester)包括一API,在該API中模塊可以規(guī)定其本身配置的選項,包括識別這些選項的令牌(token)。這是一個由表驅(qū)動的API,可在啟動模塊時調(diào)用,以便從NET·CFG文件分析配置信息。
      當模塊管理器裝載時,它從當前或其它特定目錄內(nèi)的某一文件讀取其將要裝入的模塊。模塊管理器按文件規(guī)定的次序裝入那些模塊。
      裝載模塊時,默認使用當前目錄。如果你想從一不同的目錄裝入模塊,那么你可以在配置文件中用該模塊=命令來指定目錄。比如VLM=C\NWCLIENT\CONN·VLM你還可以在模塊命令行上為配置文件規(guī)定路徑。比如VLM\C=C\NWCLIENT\NET·CFG
      有一組默認模塊被硬編碼至模塊管理器中,它們提供基本功能。但,可用NET·CFG覆蓋默認選項。調(diào)用模塊管理為了邦模塊管理器遠調(diào)用處理程序找到地址,應(yīng)用程序用AX寄存器的7A20h和BX=0h實行中斷2Fh。模塊管理器返回ESBX中的一個地址,它是遠調(diào)用地址(模塊管理器)的指針。將AX清零,讓應(yīng)用程序知道模塊管理器處理了調(diào)用。用編號調(diào)用系統(tǒng)模塊管理器使用一種唯一識別系統(tǒng)中模塊的編號調(diào)用系統(tǒng)。功能也由編號調(diào)用。該協(xié)議要求應(yīng)用程序向模塊管理器提供三條基本信息,包括CALLER_ID,DEST_ID和DEST_FUNC。這三個編號的大小都與WORD相同。
      CALLER_ID和DEST_ID是唯一識別特定模塊的編號。模塊管理器用這些編號換入適當?shù)哪K并適當調(diào)度調(diào)用。
      DEST_FUNC表示調(diào)用程序想執(zhí)行哪個功能。目的功能被定義在單個模塊中。這些功能由模塊轉(zhuǎn)換表區(qū)域305定義。
      這三個所需的單元共同工作于本系統(tǒng)管理的每一個功能調(diào)用。當某一應(yīng)用程序提出一模塊調(diào)用時,模塊管理器必須獲得遠調(diào)用地址。下列代碼例舉了應(yīng)用程序是如何檢索遠調(diào)用地址的。data segmentvlmCallAddress dword 0data endscodesegment。。。
      mov ax,7A20hmov bx,0int 2Fhor ax,axjnz NO_VLMmov word Ptr vlmCalLAddress,bxmov word ptr vlmCallAddress+2,ES。

      。NO_VLM。
      。
      。code ends下列代碼例舉了一非模塊應(yīng)用程序利用遠調(diào)用地址進行_VLMNotify請求,從而返回模塊管理器模塊的版本。movax,0push ax;CALLER_IDmovax,VLM_ID_VLM;(01h)push ax;DEST_IDmovax,VLM_NOTIFY;(01h)push ax;DEST_FUNCmovbx,0 ;GET VERSION SUB-FUNCcall VLMCallAddress概括地說,調(diào)用程序首先將其自己的標識符(ID)推上堆棧。(模塊的CALLER_ID用非零,而應(yīng)用程序用零)然后,調(diào)用程序推入想要調(diào)用的目的標識符,尤其是多路轉(zhuǎn)接器的標識符或特定子女模塊的標識符。最后,調(diào)用程序推入希望的功能編號。
      有兩個保留的(或者唯系統(tǒng)的)功能功能零和功能二,分別用于初始化和轉(zhuǎn)儲。功能一和三也自始至終為各種模塊使用。一和三分別用于帶有多子功能和模塊統(tǒng)計的一般通知功能。
      返回時,模塊管理器從堆棧中清除CALLER_ID、DEST_ID和DEST_FUNC,所以應(yīng)用程序不必這樣做。這通常稱為Pascal調(diào)用規(guī)則。
      模塊管理器使用AX和BP兩個寄存器。BP供模塊管理器內(nèi)部使用。應(yīng)用程序不可用BP進行任何參數(shù)請求。BP可用來把三個所需的值推上堆棧。應(yīng)用程序只能用AX來返回代碼。
      模塊管理器還提供一種處理異步調(diào)用的方法。調(diào)用功能為一存儲塊提供一指針,該存儲塊包括目的標識符、目的功能、調(diào)用程序標識符,還有任何調(diào)用所需建立的寄存器。于是,可進行請求,并在以后的某個時間執(zhí)行該請求。當模塊管理器確定無法執(zhí)行所需代碼時,模塊管理器可以推遲執(zhí)行代碼。功能的調(diào)用程序可在功能實際完成之前收回控制。模塊管理器預(yù)初始圖5示出了本發(fā)明預(yù)初始操作的流程圖。在步驟501,模塊管理器進行自身配置(NET.CFG,和VLM=文件)。配置可包括一新的或附加的模塊表。然后,在步驟502,模塊管理器每次裝入一個當前表上的模塊。步驟503用裝入覆蓋API(load overlay API)裝入模塊。步驟504在“偽初始”標志設(shè)置時,調(diào)用初始功能。在步驟505,正在裝入的模塊為模塊管理器提供一VMCB數(shù)據(jù)塊。在步驟506,模塊管理器讀取模塊的存儲需求,即初始化存儲需求、任何全局存儲需求,以及瞬態(tài)存儲需求。
      在步驟507,模塊管理器將模塊用的參數(shù)存入一模塊參數(shù)表。參數(shù)包括初始化存儲需求、全局存儲需求(如果有)、瞬態(tài)存儲需求,以及模塊的功能數(shù)目。
      模塊管理器進入判斷塊508。在判定塊508,提出“是最后模塊嗎?”的問題。如果該命題為假,則表示要獲得更多的模塊存儲信息,并且模塊管理器返回步驟505。如果判定塊508的命題為真,則表示已經(jīng)獲得了所有模塊的存儲需求,并且模塊管理器進入步驟509。
      在步驟509,模塊管理器從模塊參數(shù)表收集數(shù)據(jù),以確定全局數(shù)據(jù)所需的存儲區(qū)。然后,模塊管理器把常規(guī)存儲區(qū)中的地址空間分配給全局數(shù)據(jù)儲存。
      在步驟510,模塊管理器識別待裝模塊的最大瞬態(tài)存儲需求。最大瞬態(tài)塊的大小定義了常規(guī)存儲區(qū)中瞬態(tài)塊403的大小。在步驟510,模塊管理器為某一大小的瞬態(tài)存儲塊分配至少與待裝模塊的最大塊一樣大的RAM。
      在步驟511,模塊管理器確定用哪個地址空間存儲各模塊的瞬態(tài)塊。優(yōu)先的次序是首先為擴充存儲區(qū),然后是擴展存儲器,再后是常規(guī)存儲區(qū)。用戶對模塊管理器進行配置,以特別使用某一種類型的存儲區(qū)。模塊管理器在步驟512確定某一種存儲區(qū)類型是否能用。如果某種存儲類型不能用,則模塊管理器選擇前面試探的存儲類型。
      圖9示出了一例VMCB數(shù)據(jù)塊。模塊管理器實初始在預(yù)初始程序后,再在不設(shè)置偽初始標志的情況下裝入模塊,從而執(zhí)行實初始程序。圖6顯示了實初始程序的運行。在步驟601,模塊管理器將偽初始標志設(shè)為零。在步驟602,裝入第一模塊。在步驟603,調(diào)用初始化程序。在步驟604,掛上任何用于該模塊的中斷向量。在步驟605,分配模塊的其它資源。在步驟606,將全局代碼和數(shù)據(jù)移至分配的地址空間。在步驟607,將模塊的瞬態(tài)塊復(fù)制到分配給該模塊瞬態(tài)塊(在擴充、擴展或常規(guī)存儲區(qū)中)的地址空間內(nèi)。在制定塊608,提出“是否最后模塊”的命題。如果命題為真,則實初始過程于步驟609結(jié)束,模塊管理器中止并駐留于此。如果判定塊608處的命題為假,則系統(tǒng)返回步驟602。裝模塊圖7示出了裝模塊的流程圖。在步驟701,模塊管理器收到一調(diào)用,以訪問一模塊。在判定塊702,提出“正在服務(wù)其它請求嗎?”的命題。如果命題為真,則模塊管理器于步驟703存儲當前標識符,從而當結(jié)束調(diào)用退出時,可以進行新的調(diào)用。
      如果判定塊702處的命題為假,則系統(tǒng)進入判定塊704,并提出“DEST標識符有效嗎?”的命題。如果命題為真,則模塊管理器進入判定塊705。如果命題為假,則模塊管理器返回一出錯。在判定塊705,提出“功能有效嗎?”的命題。如果命題為真,則系統(tǒng)進入判定塊706。如果命題為假則模塊管理器返回出錯。
      在判定塊706,提出“調(diào)用程序標識符=0?”的命題。如果命題為真,則用當前模塊標識符代替調(diào)用程序標識符,并且系統(tǒng)進入步驟707。如果命題為假,則系統(tǒng)進入步驟707。
      在步驟707,將當前位于瞬態(tài)塊中的任何模塊復(fù)制到為其在增強存儲區(qū)內(nèi)分配的地址空間內(nèi)。因此在“本地(home)”地址空間(該模塊的分配地址空間)中更新任何對該模塊的代碼或數(shù)據(jù)的改變。在步驟708,從增強存儲區(qū)中分配的地址空間映射被調(diào)用模塊的瞬態(tài)塊。在步驟709,參考現(xiàn)有存儲在瞬態(tài)存儲區(qū)中轉(zhuǎn)移表內(nèi)的被調(diào)功能編號。在步驟710,調(diào)用功能。返回時,于711檢查調(diào)用程序標識符。如果必要,把調(diào)用模塊映象至瞬態(tài)塊中。在步驟712,控制返回調(diào)用功能或調(diào)用過程。
      當一應(yīng)用程序調(diào)用一模塊功能時,上例便可應(yīng)用。當一模塊的全局存儲器正在調(diào)入一瞬態(tài)存儲功能,并且當瞬態(tài)存儲區(qū)中的一模塊調(diào)用另一模塊的瞬態(tài)塊時,也可使用本發(fā)明。在全局對瞬態(tài)調(diào)用中,運行過程與圖7中應(yīng)用程序調(diào)用過程相同。全局請求者的調(diào)用程序標識符為零。在瞬態(tài)對瞬態(tài)調(diào)用時,將適當?shù)恼{(diào)用程序標識符推入,從而當映象返回調(diào)用程序并返回控制時,請求瞬態(tài)代碼實際上在存儲器中。否則,可能會有一些其它過程被映象回存儲器,這會給計算機系統(tǒng)造成不穩(wěn)定的環(huán)境。
      本發(fā)明可在任何計算機系統(tǒng)上運行。圖8示出了一典型的實行本發(fā)明的計算機系統(tǒng)。計算機系統(tǒng)包括一CPU801、RAM(主存儲器)802、ROM(只讀存儲器)803,以及與系統(tǒng)總線807都耦合的I/O(輸入/輸出)804。I/O塊804通過總線805訪問諸如大容量存儲器806等其它系統(tǒng)。
      CPU801控制計算機、執(zhí)行指令并處理數(shù)據(jù)CPU801通過系統(tǒng)總線807與其余的部件通信。CPU通過系統(tǒng)總線807從計算機其余的部件接收輸入數(shù)據(jù),并通過系統(tǒng)總線向計算機其余部件發(fā)送輸出數(shù)據(jù)。系統(tǒng)總線807通常包括一地址總線、一數(shù)據(jù)總線和其它各種控制線。地址和數(shù)據(jù)總線的寬度與控制線的數(shù)目和類型一樣從一種計算機系統(tǒng)到另一種計算機系統(tǒng)都有所變化。
      計算機系統(tǒng)的每個部件(包括RAM802、ROM803和存儲映象I/O804)包含許多單個存儲器單元。為了允許CPU801訪問這些單元,給每個單元分配一特定的地址。每一地址是可由地址總線傳輸?shù)亩M制值的特定組合。由于多數(shù)存儲設(shè)備的單元多于一個,所以通常把單個存儲器所有單元的地址分配成一相連塊。也常以相連的方式給這些塊分配地址(被映射入存儲器)。
      但可能存在未分配的地址間隙或留作將來利用的地址。
      圖8的計算機系統(tǒng)只是作為一個例子。本發(fā)明可在任何計算機系統(tǒng)上實行。
      因此,描述了一種用于存儲管理的方法和裝置。
      權(quán)利要求
      1.一種將一計算機系統(tǒng)第一存儲地址范圍中的應(yīng)用程序再定位的方法,其特征在于,包括下列步驟識別所述應(yīng)用程序的第一部分,該部分作為一全局塊需位于所述第一存儲地址范圍中;分配所述第一存儲地址范圍中的地址空間,以存儲所述全局塊;識別所述應(yīng)用程序的第二部分,該部分作為一瞬態(tài)塊無需位于所述第一存儲地址范圍中;分配第二存儲地址范圍中而非所述第一存儲地址范圍中的地址空間,以存儲所述瞬態(tài)塊;分配所述第一存儲地址范圍中的地址空間,以暫時存儲所述瞬態(tài)塊。
      全文摘要
      本發(fā)明為DOS可執(zhí)行程序或“模塊”提供了一個環(huán)境,其中這樣構(gòu)造程序或模塊,使它們與其它類似構(gòu)造的程序協(xié)作共享其代碼或數(shù)據(jù)所使用的存儲區(qū)。這減少了對常規(guī)存儲區(qū)(102)的總需求。模塊包括可換出常規(guī)存儲區(qū)的瞬態(tài)代碼和數(shù)據(jù)(403)和不可交換并駐留常規(guī)存儲區(qū)的全局代碼和數(shù)據(jù)(402)。本發(fā)明不把模塊瞬態(tài)塊換入和換出磁盤存儲器(204),而在常規(guī)存儲區(qū)和擴充存儲區(qū)(111)或擴展存儲區(qū)406間交換瞬態(tài)塊。與覆蓋方案相比,這大大降低了傳遞時間,提高了性能。
      文檔編號G06F12/02GK1120867SQ94191425
      公開日1996年4月17日 申請日期1994年3月8日 優(yōu)先權(quán)日1993年3月9日
      發(fā)明者格蘭特·G·??茽査?申請人:諾威爾股份有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1