專利名稱:虛擬存儲系統(tǒng)中的直接輸入/輸出的制作方法
本發(fā)明一般涉及虛擬存儲系統(tǒng)。由于其工作方式,使得計算系統(tǒng)處理器允許程序訪問輸入/輸出(I/O)設(shè)備。在先有技術(shù)中,計算機(jī)系統(tǒng)上運行的每一個程序都有其自己的虛擬地址空間。這使系統(tǒng)復(fù)雜化,且性能不為最佳。例如,要為每個程序保留一個單獨的頁表,該頁表用于將虛擬存儲地址映象到存儲器中的物理地址單元。此外,如果每個程序有其自己的虛擬地址空間,則每次變換計算機(jī)上的程序時,都必須使前一程序的轉(zhuǎn)換緩沖區(qū)和隱含存儲器(cache)入口無效。
另外,在先有技術(shù)的虛擬存儲系統(tǒng)中,有兩種方法可以訪問I/O設(shè)備。第一種方法是在計算機(jī)的指令集內(nèi)提供控制I/O設(shè)備的特殊指令。第二種方法即所謂的內(nèi)存映象I/O,是為每個I/O設(shè)備保留特定的地址。為每個I/O設(shè)備保留的地址稱做其地址空間。在內(nèi)存映象I/O系統(tǒng)中,當(dāng)處理器對I/O設(shè)備的I/O地址空間內(nèi)的地址做讀或?qū)懖僮鲿r,I/O設(shè)備將進(jìn)行檢測并譯碼。I/O設(shè)備的每個寄存器都與地址空間內(nèi)的一個地址相關(guān)聯(lián)。對寄存器的操作是這樣實現(xiàn)的,即每當(dāng)對I/O設(shè)備地址空間內(nèi)的一個地址做讀或?qū)懖僮鲿r,其結(jié)果就是對與該地址相關(guān)聯(lián)的I/O設(shè)備中的寄存器做讀或?qū)懖僮?。這樣,對I/O設(shè)備地址空間內(nèi)地址的讀、寫操作可以用來控制I/O設(shè)備。
使用內(nèi)存映象I/O系統(tǒng)的一個優(yōu)點是,高級語言寫的過程可以訪問I/O設(shè)備。在某些先有技術(shù)的計算機(jī)結(jié)構(gòu)中,應(yīng)用程序可以直接訪問計算機(jī)I/O設(shè)備的全部或部分地址空間。但在多種任務(wù)環(huán)境中,這種方法會帶來某些困難。例如,如果一個應(yīng)用程序誤初始化了可以進(jìn)行直接內(nèi)存訪問(DMA)傳輸?shù)腎/O設(shè)備,這將導(dǎo)致I/O設(shè)備讀或?qū)懛峙浣o其它應(yīng)用程序的內(nèi)存空間,從而使系統(tǒng)的安全性受到破壞。
在某些先有技術(shù)方案中,為避免在多任務(wù)環(huán)境中破壞系統(tǒng)的安全性,采用了不允許應(yīng)用程序直接訪問I/O設(shè)備地址空間的措施。所有I/O地址只能被特權(quán)過程訪問。這些過程稱做I/O驅(qū)動程序。這種方法雖然提供了高級別的系統(tǒng)安全性,但也極大地增加了軟件開銷,效率不高并受到許多限制。
根據(jù)本發(fā)明的優(yōu)選實施例,虛擬存儲系統(tǒng)中的地址空間是全程的。全程的意味著,不管處理器上運行的是什么程序,物理存儲單元映象到相同的虛擬地址空間。由寫禁止位伴隨的訪問碼用于控制程序訪問不同的地址。
另外,虛擬存儲系統(tǒng)的屬性用于控制對I/O設(shè)備地址空間的訪問。在虛擬存儲系統(tǒng)中,對處理器地址空間中頁的訪問分配在每個應(yīng)用程序中。這種訪問可以是讀地址空間中存儲的信息(讀訪問),也可以是讀地址空間中存儲的信息并向地址空間中寫入信息(讀、寫訪問)。
在本發(fā)明的優(yōu)選實施例中,分配給每個I/O設(shè)備兩頁的地址空間,其中一頁是特權(quán)頁,另一頁是非特權(quán)頁。由于頁可以很大,例如一頁可以包含512個地址,以致每一頁地址空間中的許多地址并沒有I/O設(shè)備的寄存器與其相關(guān)聯(lián)。
但是,每個I/O設(shè)備寄存器都與它的I/O設(shè)備兩頁地址空間中每一頁的一個地址相關(guān)聯(lián)。所有與某單個寄存器相關(guān)聯(lián)的各自頁中的地址都有相同的對該頁的偏移量。寄存器可以是特權(quán)的或非特權(quán)的。如果一個寄存器用于控制I/O設(shè)備的DMA操作,或用于對處理器產(chǎn)生中斷,或可用于其它破壞系統(tǒng)安全性的操作,則該寄存器被認(rèn)為是特權(quán)寄存器。
非特權(quán)寄存器可在特權(quán)頁和非特權(quán)頁中做完全操作。在特權(quán)頁和非特權(quán)頁中的完全操作意味著,對特權(quán)頁或非特權(quán)頁中與非特權(quán)寄存器相關(guān)聯(lián)的地址的讀或?qū)懀浣Y(jié)果都是對非特權(quán)寄存器的讀或?qū)憽?br>特權(quán)寄存器只能在特權(quán)頁中做完全操作。這就是說,對與特權(quán)寄存器相關(guān)聯(lián)的地址的讀或?qū)?,只有在特?quán)頁中才導(dǎo)致對特權(quán)寄存器的讀或?qū)?。對?yīng)不同的設(shè)置,特權(quán)寄存器在非特權(quán)頁中可以是只能讀不能寫,或者是既不能讀也不能寫。
圖1示出了耦合到總線上的系統(tǒng)處理器、系統(tǒng)存儲器和各種I/O設(shè)備。
圖2A和圖2B示出了存儲器地址空間中的一頁。
圖3示出了與本發(fā)明優(yōu)選實施例對應(yīng)的計算機(jī)存儲器地址空間。
圖4示出了圖1中各種I/O設(shè)備之一的方框圖。
圖5示出了用于將虛擬存儲地址轉(zhuǎn)換為物理存儲地址的表的兩個入口。
圖6示出了圖1中系統(tǒng)處理器的控制寄存器。
圖7示出了包括圖5中入口的表。
圖8示出了與圖7中的表耦合的散列設(shè)備。
圖1所示為一個計算系統(tǒng)。該計算系統(tǒng)包括系統(tǒng)處理器101,系統(tǒng)存儲器102,輸入/輸出(I/O)設(shè)備103,I/O設(shè)備104,I/O設(shè)備105,I/O設(shè)備106和I/O設(shè)備107,這些設(shè)備都耦合到總線100上。系統(tǒng)處理器101通過向為I/O設(shè)備103-107保留的地址空間讀、寫數(shù)據(jù)與I/O設(shè)備103-107通訊。
圖3給出了圖1所示計算系統(tǒng)中地址空間370的分配方法。地址空間370可尋址232字節(jié)數(shù)據(jù)(或230個32位字的數(shù)據(jù))。地址空間370中的371段是為存儲地址保留的。371段中的371b子段是為存儲地址保留的,而沒有設(shè)置。371段中的371a子段由在處理器101上運行的操作系統(tǒng)和用戶程序使用并設(shè)置。一般地,371b子段比371a子段大得多。地址空間370中的373段分配給I/O設(shè)備使用。370所有存儲器被分成頁,包括圖示的301頁和302頁。每一頁可尋址512個32位字。
用圖7所示表550入口處相連的訪問識別(AID)值可以限制對存儲器頁的訪問。表550將虛擬存儲器頁地址轉(zhuǎn)換為系統(tǒng)存儲器102中物理存儲空間的存儲器頁地址。表550包括若干聯(lián)接列表,如示于框圖550中的聯(lián)接列表702,聯(lián)接列表703,聯(lián)接到表704和聯(lián)接到表705。圖5給出了聯(lián)接列表702中的入口501和入口511。入口501和入口511都包含四個32位的存儲單元。
入口501中503單元的內(nèi)容是指向入口511的地址。入口501還包含504和505單元,其中內(nèi)容是虛擬頁地址,系統(tǒng)處理器101利用表550的入口501單元得到504和505單元中存儲的虛擬頁地址所對應(yīng)的物理存儲空間。入口501還包含506單元。506單元包含16位的訪問權(quán)力段507和15位的508段,508段包括AID值和一位的509段,其內(nèi)容恒為邏輯0。
入口511包含513單元,513單元的內(nèi)容是指向聯(lián)接列表702中下一個入口的地址。入口511還包含514和515單元,其內(nèi)容為虛擬頁地址。系統(tǒng)處理器101利用表550中入口511單元得到514和515單元中存儲的虛擬頁地址所對應(yīng)的物理存儲地址。入口511還包含516單元。516單元包括16位的訪問權(quán)力段517和15位的518段。518段包括AID值和一位的519段,其內(nèi)容恒為邏輯0。
系統(tǒng)處理器101包含四個控制寄存器601,611,621和631,這些寄存器含有當(dāng)前運行程序的AID值。寄存器601的602段,寄存器611的612段,寄存器621的622段以及寄存器631的632段每一個都可以包含一個15位的AID值。寄存器601的603段,寄存器611的613段,寄存器621的623段和寄存器631的633段都包含一位的寫禁止值(WD)。
當(dāng)在系統(tǒng)處理器101上運行的程序要訪問存儲器的物理頁時,可以利用表550將存儲器頁的虛擬地址轉(zhuǎn)換為物理頁地址。圖7所示的散列設(shè)備701接收并散列虛擬地址,以根據(jù)表550中聯(lián)接列表第一入口的位置產(chǎn)生物理頁地址。例如,散列一虛擬頁地址可以產(chǎn)生對應(yīng)于表550中入口501的物理地址。被散列的虛擬地址與入口501的504和505單元中的虛擬地址比較,如果匹配,物理頁就已經(jīng)映象到虛擬頁中。
檢查訪問權(quán)力段507中的訪問碼。這個訪問碼指出哪一個級別的程序允許讀、寫或訪問物理頁。然后檢查508單元中的AID值。如果508單元中的AID值是0,或與控制寄存器601,611,621或631之一的AID值匹配,則允許程序訪問存儲器中的物理頁。如果匹配的控制寄存器601、611、621或631的WD值是邏輯1,則不允許程序做寫訪問。如果508單元的AID值不與控制寄存器601、611、621或631的AID值匹配,或如果508單元的AID值不等于0,則不允許程序訪問存儲器中的物理頁。
如果被散列的虛擬地址與504和505單元中的虛擬地址不匹配,則考慮聯(lián)接列表702中的下一個入口-入口511。散列的虛擬地址與入口511的514和515單元中的虛擬地址比較,如果匹配,則檢查訪問權(quán)力段517中的訪問碼。鑒定當(dāng)前特權(quán)級別程序以確定允許對該程序采用什么形式的訪問然后將518單元中的AID值與控制寄存器601、611、621和631的AID值比效。如此等等。
圖8所示散列設(shè)備701和表550。散列設(shè)備701包括散列發(fā)生器720和散列表801。散列發(fā)生器720接收虛擬地址,并生成散列表地址。檢查散列表地址的內(nèi)容。如果其內(nèi)容是一空指針,則由虛擬地址尋址的數(shù)據(jù)不在主存儲器內(nèi);如果其內(nèi)容是表550中的一個地址,則按如上所述搜索以表550中地址為起始地址的聯(lián)接列表,直到找到包括該虛擬地址的入口或找到空指針為止。此處空指針仍指出由虛擬地址尋址的數(shù)據(jù)不在主存儲器內(nèi)。如果尋址的數(shù)據(jù)不在主存儲器內(nèi),則產(chǎn)生頁錯誤,并由軟件將數(shù)據(jù)從磁盤或其它存儲設(shè)備調(diào)入。
如圖所示表550是一個頁目錄。表550在入口PDIRO處有一基地址。PDIRO對應(yīng)地址空間370底部的某個地址。表550中的正向入口此時對應(yīng)存儲器中371段的頁。地址空間370中373段的頁亦需通過表550中的入口來尋址。為避免在表550中有大量未使用的入口段對應(yīng)371段中未使用的371b子段,可利用表550中的負(fù)向入口來尋址表370中373段的地址。例如,PDIR-1對應(yīng)地址空間370頂部的地址。用這種方法,尋址地址空間370中的373段時,就不必在表550中保留對應(yīng)地址空間370中未使用的371b子段的大量空白。
圖3A給出了373段中物理地址位的分配方法。381段包含地址380的高四位。373段在地址空間370的頂部;因此,381段中的每一位都是邏輯1,表示某個I/O設(shè)備寄存器被尋址。382段包含16位的地址380,382段中的16位值確定哪個I/O設(shè)備被尋址。本實施例中,其地址空間可用于216(約為65000)個I/O設(shè)備。位元383指出被尋址的是特權(quán)頁還是非特權(quán)頁。地址380中384段各位指出I/O設(shè)備中哪一個特定寄存器被尋址。385段的位包含地址380中的2位。385段中的2位均為邏輯0,因為本實施例中寄存器是按32位字尋址,而地址空間允許按8位字節(jié)尋址。
如圖4所示,I/O設(shè)備107包括I/O適配器410和設(shè)備接口411。為描述方便,寄存器400,寄存器401,寄存器402,寄存器403,寄存器404,寄存器405和緩沖器406均示于I/O適配器410中。寄存器400包含一個地址,該地址被寫時,即向系統(tǒng)處理器101發(fā)生中斷。寄存器401接收命令,這些命令用于使I/O設(shè)備107初始化設(shè)備接口411,從設(shè)備接口411讀數(shù)據(jù),或向設(shè)備接口411寫數(shù)據(jù)。寄存器402的內(nèi)容為一表示系統(tǒng)存儲器102中地址的數(shù)值,I/O適配器410以此為起始地址執(zhí)行直接內(nèi)存訪問(DMA)傳輸。寄存器403的內(nèi)容為一個一字節(jié)的計數(shù)值,利用(DMA)傳輸方式指出要向系統(tǒng)存儲器102傳輸?shù)臄?shù)據(jù)數(shù)。寄存器404接收命令,以啟動或終止DMA傳輸。寄存器405中包含I/O適配器410和系統(tǒng)存儲器402之間最后一次DMA傳輸?shù)臓顟B(tài)信息。
圖2A示出了與I/O設(shè)備107相關(guān)聯(lián)的地址空間301中的一個非特權(quán)頁。圖2B示出了與I/O設(shè)備107相關(guān)聯(lián)的地址空間302中的一個特權(quán)頁。
寄存器400-405中的每一個都與301頁和302頁中的一個地址相關(guān)聯(lián)。例如,301頁中的地址IPO與寄存器400相關(guān)聯(lián),301頁中的地址1P1與寄存器401相關(guān)聯(lián),301頁中的地址1P2與寄存器402相關(guān)聯(lián),301頁中的地址1P3與寄存器403相關(guān)聯(lián),301頁中的地址1P4與寄存器404相關(guān)聯(lián),301頁中的地址1P5與寄存器405相關(guān)聯(lián);302頁中的地址2P0與寄存器400相關(guān)聯(lián),302頁中的地址2P1與寄存器401相關(guān)聯(lián),302頁中的地址2P2與寄存器402相關(guān)聯(lián),302頁中的地址2P3與寄存器403相關(guān)聯(lián),302頁中的地址2P4與寄存器404相關(guān)聯(lián),302頁中的地址2P5與寄存器405相關(guān)聯(lián)。非特權(quán)頁301中的其余地址,即地址1P6-1P8,1P29-1P31,1P505-1P511,與特權(quán)頁302中的其余地址,即地址2P6-2P8,2P29-2P31,2P505-2P511,可以不與寄存器相關(guān)聯(lián),因此可以是未設(shè)置的地址空間。
雖然寄存器400-405中的每一個都與非特權(quán)頁301及特權(quán)頁302中的某個地址相關(guān)聯(lián),但并非寄存器400-405在非特權(quán)頁301和特權(quán)頁302中都能做完全操作。例如,只能在特權(quán)頁302中對寄存器400,402和403做完全操作。對這些寄存器的非授權(quán)訪問可能破壞系統(tǒng)的安全性,因為寄存器400可直接用于中斷處理器101,而寄存器402和403則與對系統(tǒng)存儲器102的DMA處理有關(guān)。根據(jù)不同的設(shè)置,可以允許通過非特權(quán)頁301對寄存器400,402和403做讀訪問。寄存器401用于設(shè)備接口411和I/O適配器410之間的處理。做這些處理不會破壞系統(tǒng)的安全性,因此既可在特權(quán)頁302中也可在非特權(quán)頁301中對寄存器401做完全操作。雖然寄存器404和405用于DMA傳輸,但如果系統(tǒng)設(shè)計合理,這些寄存器可以使用而不會破壞系統(tǒng)的安全性。例如,特權(quán)寄存器(如寄存器403)中的一位可以用于使能DMA處理,這樣只有當(dāng)特權(quán)程序使能DMA處理后,寄存器404才能啟動DMA處理。
對特權(quán)與非特權(quán)寄存器的設(shè)置應(yīng)使讀這些寄存器時不會對系統(tǒng)產(chǎn)生其它副作用。例如,讀不應(yīng)引起新的I/O操作。這就使得用戶程序可以觀察并監(jiān)測I/O活動,但不允許用戶程序影響正在執(zhí)行的I/O設(shè)備。
特權(quán)與非特權(quán)寄存器的設(shè)置還應(yīng)使得系統(tǒng)不管對未設(shè)置地址的寫操作,或當(dāng)做對同一頁中的某個設(shè)置地址寫入未定義數(shù)據(jù)來處理。
此處描述的實施例為設(shè)備的分配提供了極大的靈活性并允許系統(tǒng)保護(hù),但上述實施的多種變型也是可以實現(xiàn)的。例如,每個I/O設(shè)備可以映象到兩個存儲頁中-一個特權(quán)頁和一個非特權(quán)頁,但每個寄存器只在一個頁中設(shè)置。這可能會影響處理器的軟件性能,因為用這種方法時,要做兩頁的訪問才能訪問到一個I/O設(shè)備的所有控制寄存器。另一種可選擇的方法是,每個用戶設(shè)備都可映象到一頁中。這使得可以在一頁中訪問到一個I/O設(shè)備的所有寄存器,但只對只有非特權(quán)寄存器的I/O設(shè)備提供安全保護(hù)。
權(quán)利要求
1.計算設(shè)備,包括執(zhí)行多個程序的處理裝置;使多個程序可以分時共享上述處理裝置的分時裝置;用于存儲數(shù)據(jù)的局部存儲器裝置,局部存儲器裝置包括第一類物理存儲單元;用于存儲附加數(shù)據(jù)的遠(yuǎn)程存儲器裝置,遠(yuǎn)程存儲器裝置包括第二類物理存儲單元;用于將虛擬地址分配到可被多個程序中任意一個訪問的局部存儲器裝置和遠(yuǎn)程存儲器裝置的物理存儲單元的映象裝置,其中對應(yīng)局部存儲器裝置和遠(yuǎn)程存儲器裝置中每一物理存儲單元的虛擬地址對于多個程序中的任意一個都是相同的。
2.根據(jù)權(quán)利要求
1中所述的計算設(shè)備,其中虛擬地址被分組成頁,每一頁都有一個與其相關(guān)聯(lián)的訪問碼。
3.根據(jù)權(quán)利要求
2中所述的計算設(shè)備,其中每個程序都有一組與其相關(guān)聯(lián)的訪問碼,其中處理裝置將不允許有第一類訪問碼的第一類程序訪問有第一訪問碼的第一頁中的第一虛擬地址,除非該第一訪問碼與第一類訪問碼中的第二訪問碼匹配。
4.根據(jù)權(quán)利要求
3中所述的計算設(shè)備,還包括了與第一程序相關(guān)聯(lián)的寫禁止裝置,以防止第一程序?qū)Φ谝豁撟鰧懖僮鳌?br>5.根據(jù)權(quán)利要求
3中所述的計算設(shè)備,其中第一頁中的第一虛擬地址分配給第一物理存儲單元,第一物理存儲單元用做輸入/輸出設(shè)備的控制寄存器。
6.根據(jù)權(quán)利要求
5中所述的計算設(shè)備,其中第二頁中的第二虛擬地址也分配給第一物理存儲單元。
7.根據(jù)權(quán)利要求
6中所述的計算設(shè)備,其中第一程序可以讀第一物理存儲單元的內(nèi)容,但不能修改第一物理存儲單元的內(nèi)容。
8.根據(jù)權(quán)利要求
6中所述的計算設(shè)備,其中第一程序與一寫禁止裝置相關(guān)聯(lián),以防止第一程序?qū)Φ谝豁撟鰧懖僮鳌?br>9.計算機(jī)中的虛擬存儲系統(tǒng),該虛擬存儲系統(tǒng)包括用于將存儲系統(tǒng)內(nèi)的虛擬地址分頁的分頁裝置;允許在計算機(jī)上運行的第一程序訪問虛擬存儲地址第一頁的訪問裝置;用于防止第一程序修改用第一頁中虛擬地址尋址的物理存儲單元之內(nèi)容的禁止裝置。
10.權(quán)利要求
9中所述的虛擬存儲系統(tǒng)還包括用于將I/O設(shè)備寄存器映象到第一頁中的第一虛擬存儲地址及第二頁中第二虛擬存儲地址的裝置。
11.根據(jù)權(quán)利要求
10中所述的虛擬存儲系統(tǒng),其中第一虛擬存儲地址在第一頁的第一偏移量處,第二虛擬存儲地址在第二頁的第二偏移量處,第一偏移量與第二偏移量相同。
12.計算系統(tǒng),包括外部設(shè)備,該外部設(shè)備包括第一寄存器;存儲管理系統(tǒng),該存儲管理系統(tǒng)包括分為若干頁的地址空間、一個含有第一類地址的第一頁和一個含有第二類地址的第二頁;控制程序訪問上述頁的訪問裝置;用于使第一類地址中的第一地址與第一寄存器相關(guān)聯(lián)的映象裝置。
13.根據(jù)權(quán)利要求
12中所述的計算系統(tǒng),其中映象裝置使第二類頁的第二地址與第一寄存器相關(guān)聯(lián)。
14.根據(jù)權(quán)利要求
13中所述的計算系統(tǒng),其中訪問裝置允許第一程序訪問第一頁。
15.根據(jù)權(quán)利要求
14中所述的計算系統(tǒng),其中訪問裝置禁止第一程序訪問第二頁。
16.根據(jù)權(quán)利要求
15中所述的計算系統(tǒng),其中第一程序可以從第一寄存器中讀數(shù)據(jù),但不能向第一寄存器寫數(shù)據(jù)。
17.根據(jù)權(quán)利要求
15中所述的計算系統(tǒng),其中當(dāng)?shù)谝怀绦驈牡谝患拇嫫髦凶x數(shù)據(jù)時,這一操作向第一程序返回信息,但對外部設(shè)備沒有其它影響。
18.根據(jù)權(quán)利要求
12中所述的計算系統(tǒng),其中第一類地址中的第三地址不與物理存儲單元相關(guān)聯(lián)。
19.根據(jù)權(quán)利要求
18中所述的計算系統(tǒng),其中對第三地址做寫操作時,第一程序不對物理存儲單元產(chǎn)生影響。
20.根據(jù)權(quán)利要求
18中所述的計算系統(tǒng),其中當(dāng)?shù)谝怀绦驅(qū)Φ谌刂纷鰧懖僮鲿r,計算系統(tǒng)向與第一類地址中第四地址相關(guān)聯(lián)的物理單元寫數(shù)據(jù)。
專利摘要
根據(jù)本發(fā)明的優(yōu)選實施例,虛擬存儲系統(tǒng)用于控制對I/O設(shè)備地址空間的訪問。在虛擬存儲系統(tǒng)中,對處理器地址空間頁的訪問分配在每個應(yīng)用程序中。每個I/O設(shè)備分配有兩頁地址空間,一頁是特權(quán)頁,另一頁是非特權(quán)頁。每個I/O設(shè)備寄存器與其兩頁I/O設(shè)備地址空間中每一頁的一個地址相關(guān)聯(lián)。地址空間是全程的。全程的意味著,不管什么程序在處理器上運行,物理存儲單元都映象到相同的虛擬地址空間。帶有寫禁止位的訪問碼用于控制程序?qū)Ω鞣N地址的訪問。
文檔編號G06F12/02GK86103675SQ86103675
公開日1986年12月24日 申請日期1986年6月2日
發(fā)明者史蒂文·C·貝特納, 威廉·R·布里格, 戴維·V·詹姆斯, 劉作凱, 邁克爾·J·馬洪, 特雷斯·C·米勒, 小威廉·S·沃利 申請人:惠普公司導(dǎo)出引文BiBTeX, EndNote, RefMan