共享和受管的存儲(chǔ)器統(tǒng)一訪問的制作方法
【專利說明】共享和受管的存儲(chǔ)器統(tǒng)一訪問
[0001]背景
[0002]計(jì)算機(jī)操作系統(tǒng)性能通常由操作系統(tǒng)在給定時(shí)間間隔期間可維持的最大輸入/輸出(I/o)操作速率(也稱為“I/O性能”)來表征。結(jié)果,操作系統(tǒng)采用各種公知機(jī)制來提升i/o性能。
[0003]傳統(tǒng)上,操作系統(tǒng)是使用向系統(tǒng)程序員提供對如何操縱存儲(chǔ)器的非常精細(xì)的控制的非受管語言(如匯編語言、C、C++)來編寫的。未經(jīng)檢查的指針的使用可被用來最小化操作系統(tǒng)開銷并允許增加的吞吐量或降低的等待時(shí)間。使用這些未經(jīng)檢查的指針的不利方面在于它們難以創(chuàng)建和推理,導(dǎo)致不可靠的軟件和安全弱點(diǎn)。
[0004]用受管編程語言編寫軟件提供了充足的正確性益處和開發(fā)時(shí)間效率。這些受管語言防止程序員創(chuàng)建許多種類的軟件缺陷,這造成改進(jìn)的軟件質(zhì)量和縮短的開發(fā)時(shí)間。操作系統(tǒng)正確性是用于遞送可靠且安全的計(jì)算體驗(yàn)的關(guān)鍵因素。因此,使用受管語言來創(chuàng)建操作系統(tǒng)是非常有說服力的主張,因?yàn)椴僮飨到y(tǒng)可靠性可以改進(jìn)且開發(fā)成本可被降低。
[0005]為了達(dá)到這些益處,受管編程語言在由程序員編寫的源代碼與物理計(jì)算機(jī)系統(tǒng)的原始機(jī)器資源之間插入抽象層。這一抽象層一般用于約束程序員被允許寫什么,并且通過這樣做消除了全部的各類潛在缺陷。不幸的是,這一抽象層引入可能損害所創(chuàng)建的軟件的性能的開銷。結(jié)果,普遍假定是受管語言用正確性缺陷來換取性能缺陷。因而,用受管語言編寫的軟件通常被認(rèn)為先天地慢于用非受管語言編寫的軟件。
[0006]影響受管代碼操作系統(tǒng)的具體問題是對在數(shù)據(jù)穿過系統(tǒng)時(shí)在各層之間復(fù)制數(shù)據(jù)的固有需求。這是由以下事實(shí)引起的:系統(tǒng)的不同組件存在于不同隔離上下文中并且沒有清晰的機(jī)制來擺脫這些隔離上下文。
【發(fā)明內(nèi)容】
[0007]根據(jù)本文描述的至少一個(gè)實(shí)施例,一種系統(tǒng)具有受管存儲(chǔ)器,其中多個(gè)計(jì)算實(shí)體各自具有服從垃圾收集的對應(yīng)的實(shí)體專用受管存儲(chǔ)器部分。不可變緩沖區(qū)位于受管存儲(chǔ)器之外。對于給定的計(jì)算實(shí)體,對應(yīng)的受管存儲(chǔ)器部分包含能由特定計(jì)算實(shí)體訪問但不能由具有它們自己的實(shí)體專用受管存儲(chǔ)器部分的其他多個(gè)計(jì)算實(shí)體訪問的一個(gè)或多個(gè)實(shí)體專用對象。
[0008]對于實(shí)體專用的受管存儲(chǔ)器部分中的一個(gè)或多個(gè),該部分還包括對共享存儲(chǔ)器的引用。在一個(gè)實(shí)施例中,該共享存儲(chǔ)器可以是不可變緩沖區(qū)。該引用被結(jié)構(gòu)化為被垃圾收集器忽略,盡管該引用可以表現(xiàn)為如受管存儲(chǔ)器部分中的正常對象那樣。例如,可能該引用是陣列元素。然而,垃圾收集器可以在其他對象和該引用之間進(jìn)行辨別。作為示例,垃圾收集器可以查找陣列中的地址,并且如果該地址是受管存儲(chǔ)器之外的位置,則垃圾收集器不對該引用執(zhí)行垃圾收集。
[0009]因而,制造統(tǒng)一的存儲(chǔ)器訪問模型是可能的,在其中用于計(jì)算實(shí)體訪問受管存儲(chǔ)器中的常規(guī)對象的方法與該計(jì)算實(shí)體如何訪問共享存儲(chǔ)器類似。該概述不意圖標(biāo)識所要求保護(hù)的主題的關(guān)鍵特征或基本特征,也不意圖被用來幫助確定所要求保護(hù)的主題的范圍。
[0010]附圖簡述
[0011]為了描述可獲得以上記載的及其他好處和特征的方式,將參照附圖呈現(xiàn)各個(gè)實(shí)施例的更具體描述。理解這些附圖僅描述樣本實(shí)施例,因此不應(yīng)被視為限制本發(fā)明的范圍,實(shí)施例將通過使用附圖以附加的具體性和細(xì)節(jié)來描述和解釋,附圖中:
[0012]圖1抽象地圖示了其中可采用此處所述的一些實(shí)施例的計(jì)算系統(tǒng);
[0013]圖2示出用于提供不可變緩沖區(qū)的方法的流程圖;
[0014]圖3A示出填充緩沖區(qū)的過程在其中發(fā)生的環(huán)境;
[0015]圖3B示出在其中使經(jīng)填充的緩沖區(qū)不可變的環(huán)境;
[0016]圖4示出用于使用不可變緩沖區(qū)的方法的流程圖;
[0017]圖5示出其中不同計(jì)算實(shí)體具有不可變緩沖區(qū)的不同視圖的環(huán)境;
[0018]圖6示出用于將不可變數(shù)據(jù)從一個(gè)計(jì)算實(shí)體傳遞到下一計(jì)算實(shí)體的方法的流程圖;
[0019]圖7示出其中數(shù)據(jù)流從流源提供給流緩沖區(qū)并隨后從流緩沖區(qū)提供給流消費(fèi)者的流傳輸環(huán)境;
[0020]圖8示出其中第二計(jì)算實(shí)體通過第一計(jì)算實(shí)體的高速緩存來獲取高速緩存的環(huán)境;
[0021]圖9示出第二計(jì)算實(shí)體從第一計(jì)算實(shí)體支持的高速緩存進(jìn)行第一次讀取的方法的流程圖;
[0022]圖10示出第二計(jì)算實(shí)體從第一計(jì)算實(shí)體支持的高速緩存進(jìn)行后續(xù)讀取的方法的流程圖;
[0023]圖11示出第一計(jì)算實(shí)體(或后備高速緩存)執(zhí)行逐出的方法的流程圖;
[0024]圖12示出示例受管代碼系統(tǒng);以及
[0025]圖13描繪正常受管字節(jié)陣列,它具有指向它的兩個(gè)不同的跨度并允許應(yīng)用將該陣列的各部分看作不同的類型。
【具體實(shí)施方式】
[0026]根據(jù)本文描述的各實(shí)施例,描述了促進(jìn)受管操作系統(tǒng)中的零復(fù)制輸入/輸出(I/O)語義的機(jī)制。這樣的機(jī)制中的一些可被用在非受管代碼操作系統(tǒng)中以及受管代碼操作系統(tǒng)中。各機(jī)制不是互斥的,因?yàn)橐粋€(gè)、一些、或甚至全部機(jī)制可被組合以進(jìn)一步促進(jìn)零復(fù)制I/O語義。
[0027]“零復(fù)制”指的是被設(shè)計(jì)成使數(shù)據(jù)能通過被寫入存儲(chǔ)器來進(jìn)入系統(tǒng)并在不必復(fù)制該數(shù)據(jù)的情況下傳播通過許多抽象層的體系結(jié)構(gòu)。零復(fù)制體系結(jié)構(gòu)不保證沒有數(shù)據(jù)復(fù)制發(fā)生。相反,它僅僅使機(jī)制就位以確保大多數(shù)I/O操作可以在無需復(fù)制的情況下完成。在本說明書和權(quán)利要求書中,“存儲(chǔ)器”被定義為任何隨機(jī)存取存儲(chǔ)器,它通常是易失性存儲(chǔ)器,但也可包括非易失性部分或可能可完全是非易失性的。在本說明書和權(quán)利要求書中,“存儲(chǔ)器”被定義為計(jì)算系統(tǒng)的主存儲(chǔ)介質(zhì),包括可由計(jì)算系統(tǒng)的微處理器訪問且可由硬件設(shè)備(如圖形控制器或網(wǎng)絡(luò)接口控制器)經(jīng)由DMA(直接存儲(chǔ)器訪問)機(jī)制訪問的可單獨(dú)尋址的位置。
[0028]首先,將描述使用共享數(shù)據(jù)的不可變緩沖區(qū)的不可變可共享零復(fù)制批量數(shù)據(jù)機(jī)制。這樣的機(jī)制允許在無需復(fù)制的情況下在計(jì)算系統(tǒng)中轉(zhuǎn)移數(shù)據(jù)的大型緩沖區(qū)。該機(jī)制將被進(jìn)一步擴(kuò)展到數(shù)據(jù)流在計(jì)算系統(tǒng)內(nèi)的共享使用,具有完全控制以允許高效的資源利用,這些全都在維持完整的零復(fù)制語義的同時(shí)進(jìn)行。盡管受管代碼系統(tǒng)的當(dāng)前類型安全性允許更直接地實(shí)現(xiàn)這些機(jī)制,但這些機(jī)制也可在非受管代碼系統(tǒng)中使用。
[0029]其次,將描述用于零復(fù)制高速緩存的機(jī)制。這樣的零復(fù)制高速緩存可被用于非受管代碼系統(tǒng)和受管代碼系統(tǒng)兩者中。零復(fù)制高速緩存使得可能創(chuàng)建表征進(jìn)入高速緩存的數(shù)據(jù)以及從高速緩存返回的數(shù)據(jù)的零復(fù)制語義的通用高速緩存體系結(jié)構(gòu)。
[0030]第三,將描述進(jìn)一步增強(qiáng)受管代碼系統(tǒng)的性能的若干機(jī)制,而不管這些系統(tǒng)是否采用不可變緩沖區(qū)或共享數(shù)據(jù)。這樣的受管代碼機(jī)制包括統(tǒng)一存儲(chǔ)器訪問和類型安全類型鑄造。統(tǒng)一存儲(chǔ)器訪問使受管代碼能夠使用一致且可組合的方法均勻地訪問受管存儲(chǔ)器和非受管存儲(chǔ)器(用于I/o緩沖區(qū))兩者。類型安全類型鑄造使受管代碼能夠執(zhí)行指針鑄造以允許給定存儲(chǔ)器區(qū)域被看作不同類型,同時(shí)維持完整的類型安全性。
[0031]將參照圖1描述計(jì)算系統(tǒng)的一些介紹性討論。隨后將按以上參考圖2-13提供的次序來描述以上列出的機(jī)制。
[0032]計(jì)算系統(tǒng)目前日益采取廣泛的形式。計(jì)算系統(tǒng)可以例如是手持設(shè)備、電器、膝上型計(jì)算機(jī)、臺式計(jì)算機(jī)、大型機(jī)、分布式計(jì)算系統(tǒng)、或者甚至是通常不被認(rèn)為是計(jì)算系統(tǒng)的設(shè)備。在該說明書以及在權(quán)利要求書中,術(shù)語“計(jì)算系統(tǒng)”被寬泛地定義為包括任何設(shè)備或系統(tǒng)(或其組合),所述設(shè)備或系統(tǒng)包括至少一個(gè)物理且有形的處理器、以及能在其上具有可由處理器執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的物理且有形的存儲(chǔ)器。存儲(chǔ)器可以采取任何形式并且可以取決于計(jì)算系統(tǒng)的性質(zhì)和形式。計(jì)算系統(tǒng)可以分布在網(wǎng)絡(luò)環(huán)境上并且可以包括多個(gè)組成的計(jì)算系統(tǒng)。
[0033]如圖1所示,在其最基本的配置中,計(jì)算系統(tǒng)100包括至少一個(gè)處理單元102和計(jì)算機(jī)可讀介質(zhì)104。計(jì)算機(jī)可讀介質(zhì)104可在概念上被認(rèn)為包括物理系統(tǒng)存儲(chǔ)器,它可以是易失性的、非易失性的、或這兩者的某種組合。計(jì)算機(jī)可讀介質(zhì)104還在概念上包括非易失性大容量存儲(chǔ)。如果計(jì)算系統(tǒng)是分布式的,則處理、存儲(chǔ)器和/或存儲(chǔ)能力也可以是分布式的。
[0034]如此處使用的,術(shù)語“可執(zhí)行模塊”或“可執(zhí)行組件”可以指可以在計(jì)算系統(tǒng)上執(zhí)行的軟件對象、例程或方法。此處描述的不同組件、模塊、引擎和服務(wù)可以被實(shí)現(xiàn)為在計(jì)算系統(tǒng)上執(zhí)行的對象或進(jìn)程(例如,作為分開的線程)。在其中實(shí)施類型安全性并且其中各進(jìn)程被分配了它們自己的不同存儲(chǔ)器對象的受管環(huán)境中執(zhí)行的情況下,這樣的可執(zhí)行模塊可以是受管代碼。在可執(zhí)行模塊用本機(jī)代碼(如C或C++)編寫的情況下,這樣的可執(zhí)行模塊還可以是非受管代碼。
[0035]在以下描述中,參照由一個(gè)或多個(gè)計(jì)算系統(tǒng)執(zhí)行的動(dòng)作描述了多個(gè)實(shí)施例。如果這種動(dòng)作用軟件來實(shí)現(xiàn),則執(zhí)行該動(dòng)作的相關(guān)計(jì)算系統(tǒng)的一個(gè)或多個(gè)處理器響應(yīng)于所執(zhí)行的計(jì)算機(jī)可執(zhí)行指令來引導(dǎo)計(jì)算系統(tǒng)的操作。例如,這種計(jì)算機(jī)可執(zhí)行指令可以體現(xiàn)于形成計(jì)算機(jī)程序產(chǎn)品的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)上。這一操作的示例包括數(shù)據(jù)的操縱。計(jì)算機(jī)可執(zhí)行指令(以及所操縱的數(shù)據(jù))可以被存儲(chǔ)于計(jì)算系統(tǒng)100的存儲(chǔ)器104中。計(jì)算系統(tǒng)100還可包含允許計(jì)算系統(tǒng)100例如通過網(wǎng)絡(luò)110與其他處理器通信的通信信道108。
[0036]此處描述的實(shí)施例可以包括或利用專用或通用計(jì)算機(jī),所述專用或通用計(jì)算機(jī)包括如以下進(jìn)一步詳細(xì)討論的諸如例如一個(gè)或多個(gè)處理器和系統(tǒng)存儲(chǔ)器這樣的計(jì)算機(jī)硬件。此處描述的實(shí)施例也包括用于實(shí)現(xiàn)或存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令和/或數(shù)據(jù)結(jié)構(gòu)的物理及其他計(jì)算機(jī)可讀介質(zhì)。這種計(jì)算機(jī)可讀介質(zhì)可以使可由通用或?qū)S糜?jì)算機(jī)系統(tǒng)訪問的任何可用介質(zhì)。存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)是物理存儲(chǔ)介質(zhì)。實(shí)現(xiàn)計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)是傳輸介質(zhì)。因此,通過示例但非限制,本發(fā)明的實(shí)施例可以包括至少兩種完全不同種類的計(jì)算機(jī)可讀介質(zhì):計(jì)算機(jī)存儲(chǔ)介質(zhì)和傳輸介質(zhì)。
[0037]計(jì)算機(jī)存儲(chǔ)介質(zhì)包括RAM、ROM、EEPROM、CD-ROM或其他光盤存儲(chǔ)、磁盤存儲(chǔ)或其他磁存儲(chǔ)設(shè)備、或可用于存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置且可由通用或?qū)S糜?jì)算機(jī)訪問的任何其他有形存儲(chǔ)介質(zhì)。
[0038]“網(wǎng)絡(luò)”被定義為允許計(jì)算機(jī)系統(tǒng)和/或模塊和/或其他電子設(shè)備間的電子數(shù)據(jù)傳輸?shù)囊粋€(gè)或多個(gè)數(shù)據(jù)鏈路。當(dāng)信息通過網(wǎng)絡(luò)或另一通信連接(或硬線、無線或