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