亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

用于在安全飛地頁面高速緩存中使安全飛地的進(jìn)程分叉和建立子飛地的指令和邏輯的制作方法

文檔序號:11288517閱讀:588來源:國知局
用于在安全飛地頁面高速緩存中使安全飛地的進(jìn)程分叉和建立子飛地的指令和邏輯的制造方法與工藝

本公開涉及處理邏輯、微處理器以及相關(guān)聯(lián)的指令集架構(gòu)領(lǐng)域,當(dāng)由處理器或其他處理邏輯執(zhí)行該指令集架構(gòu)時,該指令集架構(gòu)執(zhí)行加載、存儲、邏輯、數(shù)學(xué)或其他功能性操作。具體而言,本公開涉及用于在安全飛地頁面高速緩存中使進(jìn)程分叉(fork)和建立子飛地的指令和邏輯。



背景技術(shù):

用于支持諸如語音、視頻、事務(wù)以及私有數(shù)據(jù)之類的新使用模型和服務(wù)的應(yīng)用和高性能網(wǎng)絡(luò)在安全領(lǐng)域提出了新的挑戰(zhàn)。出于保密和完整性的目的而保護(hù)存儲器中的或在傳輸途中的數(shù)據(jù)的需求是重要的,但為了支持高速加密操作和維持對受保護(hù)的代碼和/或數(shù)據(jù)的安全訪問所需的存儲器,增加了復(fù)雜性最終增加了成本。

一種用于創(chuàng)建和維持安全、受保護(hù)或隔離的分區(qū)或環(huán)境的技術(shù)被稱為建立飛地(enclave)。飛地是信息和處理能力的集合,其可作為一組來保護(hù)。信息和處理能力可包括網(wǎng)絡(luò)、主機(jī)或應(yīng)用。當(dāng)飛地的數(shù)據(jù)和/或指令從外部存儲器被加載時,它們被解密、認(rèn)證并且然后被存儲或高速緩存到受保護(hù)的存儲器中。類似地,當(dāng)飛地的數(shù)據(jù)和/或指令從受保護(hù)的存儲器被驅(qū)逐時,它們在被存儲回外部存儲器之前被加密。安全飛地數(shù)據(jù)被分配到特定進(jìn)程并且與該進(jìn)程的唯一飛地標(biāo)識符相關(guān)聯(lián),使得對安全飛地數(shù)據(jù)的訪問僅限于經(jīng)授權(quán)的進(jìn)程。甚至操作系統(tǒng)也不被允許訪問與不同進(jìn)程的飛地標(biāo)識符相關(guān)聯(lián)的經(jīng)解密的飛地數(shù)據(jù)。

因此,當(dāng)已經(jīng)被分配了安全飛地的進(jìn)程希望利用操作系統(tǒng)調(diào)用,fork(),來創(chuàng)建其本身的副本以作為子進(jìn)程時,操作系統(tǒng)不能訪問與父進(jìn)程相關(guān)聯(lián)的經(jīng)解密的飛地數(shù)據(jù)。因此,當(dāng)分配給父進(jìn)程的安全飛地仍然活動時,操作系統(tǒng)不能為子進(jìn)程復(fù)制父進(jìn)程的狀態(tài)。此外,當(dāng)操作系統(tǒng)正在為安全飛地執(zhí)行存儲器頁面的置入分頁(即加載)和/或移出分頁(即驅(qū)逐和寫回)時,必須對全部頁面執(zhí)行加密操作,頁面的尺寸通常為4kb。因此,用于安全飛地的頁面復(fù)制操作可能需要數(shù)以萬計個處理周期。如果分頁進(jìn)程被中斷,則可能需要重新執(zhí)行分頁進(jìn)程,但是如果在安全飛地的分頁操作完成之前不允許對中斷的服務(wù),則對中斷的延遲服務(wù)可能導(dǎo)致一些服務(wù)(諸如語音、視頻和實(shí)時事務(wù))中的不可接受的小故障。

因此,復(fù)制父進(jìn)程的安全飛地的數(shù)據(jù)和狀態(tài)的頁面以分叉出子進(jìn)程提出了一系列獨(dú)特的安全性、用戶體驗(yàn)和性能挑戰(zhàn)。到目前為止,尚未充分探索解決這些挑戰(zhàn)、潛在的性能受限問題以及實(shí)時復(fù)雜度的解決方案。

附圖說明

在所附附圖的多個圖中以示例方式而非限制方式示出本發(fā)明。

圖1a是執(zhí)行用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令的系統(tǒng)的一個實(shí)施例的框圖。

圖1b是執(zhí)行用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令的系統(tǒng)的另一實(shí)施例的框圖。

圖1c是執(zhí)行用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令的系統(tǒng)的另一實(shí)施例的框圖。

圖2是執(zhí)行用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令的處理器的一個實(shí)施例的框圖。

圖3a示出根據(jù)一個實(shí)施例的緊縮數(shù)據(jù)類型。

圖3b示出根據(jù)一個實(shí)施例的緊縮數(shù)據(jù)類型。

圖3c示出根據(jù)一個實(shí)施例的緊縮數(shù)據(jù)類型。

圖3d示出根據(jù)一個實(shí)施例的編碼為用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令。

圖3e示出根據(jù)另一實(shí)施例的編碼為用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令。

圖3f示出根據(jù)另一實(shí)施例的編碼為用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令。

圖3g示出根據(jù)另一實(shí)施例的編碼為用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令。

圖3h示出使用兩個字段來編碼指令的實(shí)施例。

圖3j示出根據(jù)另一實(shí)施例的編碼為用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令。

圖4a示出用于執(zhí)行在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令的處理器微架構(gòu)的一個實(shí)施例的要素。

圖4b示出用于執(zhí)行在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令的處理器微架構(gòu)的另一個實(shí)施例的要素。

圖5是用于執(zhí)行在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令的處理器的一個實(shí)施例的框圖。

圖6是用于執(zhí)行在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令的計算機(jī)系統(tǒng)的一個實(shí)施例的框圖。

圖7是用于執(zhí)行在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令的計算機(jī)系統(tǒng)的另一實(shí)施例的框圖。

圖8是用于執(zhí)行在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令的計算機(jī)系統(tǒng)的另一實(shí)施例的框圖。

圖9是用于執(zhí)行在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令的片上系統(tǒng)的一個實(shí)施例的框圖。

圖10是用于執(zhí)行在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令的處理器的實(shí)施例的框圖。

圖11是在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的ip核開發(fā)系統(tǒng)的一個實(shí)施例的框圖。

圖12示出在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的架構(gòu)仿真系統(tǒng)的一個實(shí)施例。

圖13示出對用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令進(jìn)行轉(zhuǎn)換的系統(tǒng)的一個實(shí)施例。

圖14a示出用于使用飛地子創(chuàng)建指令來在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的處理系統(tǒng)的實(shí)施例。

圖14b示出用于使用飛地子復(fù)制指令來在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的處理系統(tǒng)的另一實(shí)施例。

圖15示出處理器中的用于使用用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令的裝置的實(shí)施例。

圖16示出用于在安全飛地頁面高速緩存中使計算進(jìn)程分叉和建立子飛地的過程的一個實(shí)施例的流程圖。

圖17a示出使用飛地子創(chuàng)建指令來在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的過程的一個實(shí)施例的流程圖。

圖17b示出使用飛地子復(fù)制指令來在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的過程的一個實(shí)施例的流程圖。

圖18a示出使用飛地子創(chuàng)建指令來在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的可中斷過程的一個實(shí)施例的流程圖。

圖18b示出使用飛地子復(fù)制指令來在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的可中斷過程的一個實(shí)施例的流程圖。

具體實(shí)施方式

以下描述公開了用于在處理器、計算機(jī)系統(tǒng)或其他處理設(shè)備中、或與處理器、計算機(jī)系統(tǒng)或其他處理設(shè)備一起結(jié)合以在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令和處理邏輯。

在特殊高速緩存或高速緩存的僅保持(例如與飛地相關(guān)聯(lián)的)私有或受保護(hù)數(shù)據(jù)的一部分中,對未加密的私有或受保護(hù)數(shù)據(jù)的訪問可僅限于經(jīng)授權(quán)的處理器核、硬件線程或邏輯處理器。此類飛地私有存儲器可被稱為飛地頁面高速緩存(epc)存儲器。如同其它物理存儲器一樣,通過按照需要將數(shù)據(jù)和/或代碼置入分頁和移出分頁,可使epc支持更大的私有或受保護(hù)的地址空間。指令為epc中的分配給父進(jìn)程和子進(jìn)程的飛地的安全存儲指定地址以存儲安全飛地控制結(jié)構(gòu)數(shù)據(jù)、應(yīng)用數(shù)據(jù)、應(yīng)用代碼等等。在一些實(shí)施例中,父進(jìn)程可以執(zhí)行,或系統(tǒng)軟件防護(hù)擴(kuò)展(sgx)庫可以執(zhí)行指令以將父安全飛地控制結(jié)構(gòu)(secs)復(fù)制到子進(jìn)程的安全存儲區(qū)域、對唯一子飛地id進(jìn)行初始化并且鏈接到父secs/飛地id。在一些實(shí)施例中,子進(jìn)程可以執(zhí)行,或系統(tǒng)sgx庫可以執(zhí)行指令以將頁面從父飛地復(fù)制到子飛地,其中父飛地和子飛地具有相同密鑰,如果被中斷,然后還將epc映射的條目設(shè)置為部分完成,以及記錄子飛地中的頁面狀態(tài)。因此,可以恢復(fù)用于從父飛地復(fù)制頁面的指令。

在一些實(shí)施例中,本文中所公開的指令和邏輯能夠在用于使進(jìn)程分叉的secs復(fù)制中以及在安全飛地內(nèi)的頁面復(fù)制操作中被中斷和恢復(fù)。在一些實(shí)施例中,此類指令指定分配到安全飛地(例如,已經(jīng)在安全epc中)的頁面地址。將理解,通過使用此類飛地指令來在安全epc中使進(jìn)程分叉和建立子飛地,父進(jìn)程可以在安全epc中創(chuàng)建(即分叉出)子進(jìn)程并且為子進(jìn)程飛地建立副本。還將理解,在不具有對此類指令的處理器支持的情況下,用于完成相同(或類似)技術(shù)效果的任何軟件系統(tǒng)安全特征(如果真的可行)會是過于昂貴的和/或性能受限的,以致可以不利地接受更少的安全性措施。

在以下描述中,陳述了諸如處理邏輯、處理器類型、微架構(gòu)條件、事件、啟用機(jī)制等眾多特定細(xì)節(jié),以提供對本發(fā)明實(shí)施例的更透徹理解。然而,本領(lǐng)域技術(shù)人員將領(lǐng)會,沒有這些具體細(xì)節(jié)也可實(shí)施本發(fā)明。此外,沒有詳細(xì)示出一些公知的結(jié)構(gòu)、電路等,以避免不必要地使本發(fā)明的多個實(shí)施例模糊。

雖然參照處理器來描述下列各實(shí)施例,但是,其他實(shí)施例也適用于其他類型的集成電路和邏輯器件。本發(fā)明的實(shí)施例的類似技術(shù)和教導(dǎo)可應(yīng)用于其他類型的電路或半導(dǎo)體器件,這些其他類型的電路或半導(dǎo)體器件可受益于更高的流水線吞吐量和改善的性能。本發(fā)明的實(shí)施例的教導(dǎo)適用于執(zhí)行數(shù)據(jù)操縱的任何處理器或機(jī)器。然而,本發(fā)明不限于執(zhí)行512位、256位、128位、64位、32位或16位數(shù)據(jù)操作的處理器或機(jī)器,并且可適用于執(zhí)行數(shù)據(jù)操縱或管理的任何處理器和機(jī)器。另外,下列描述提供了示例,并且為了進(jìn)行說明,所附附圖示出各種示例。然而,這些示例不應(yīng)當(dāng)被理解為是限制性意義的,因?yàn)樗鼈儍H僅旨在提供本發(fā)明的諸個實(shí)施例的示例,而并非提供本發(fā)明的實(shí)施例的所有可能實(shí)現(xiàn)的詳盡列表。

雖然下述的示例描述了在執(zhí)行單元和邏輯電路的情境中的指令處理和分配,但是也可通過存儲在機(jī)器可讀有形介質(zhì)上的數(shù)據(jù)和/或指令來完成本發(fā)明的其他實(shí)施例,這些數(shù)據(jù)和/或指令在由機(jī)器執(zhí)行時使得該機(jī)器執(zhí)行與本發(fā)明的至少一個實(shí)施例相一致的功能。在一個實(shí)施例中,與本發(fā)明的多個實(shí)施例相關(guān)聯(lián)的功能被具體化在機(jī)器可執(zhí)行指令中。這些指令可用來使通過這些指令而被編程的通用處理器或?qū)S锰幚砥鲌?zhí)行本發(fā)明的步驟。本發(fā)明的多個實(shí)施例也可以作為計算機(jī)程序產(chǎn)品或軟件來提供,該計算機(jī)程序產(chǎn)品或軟件可包括其上存儲有指令的機(jī)器或計算機(jī)可讀介質(zhì),這些指令可被用來對計算機(jī)(或其他電子設(shè)備)進(jìn)行編程以執(zhí)行根據(jù)本發(fā)明的多個實(shí)施例的一個或多個操作。或者,本發(fā)明的多個實(shí)施例的多個步驟可由包含用于執(zhí)行這些步驟的固定功能邏輯的專用硬件組件來執(zhí)行,或由經(jīng)編程的計算機(jī)組件以及固定功能硬件組件的任何組合來執(zhí)行。

可將用于對邏輯進(jìn)行編程以執(zhí)行本發(fā)明的多個實(shí)施例的指令存儲在系統(tǒng)中的存儲器(諸如,dram、高速緩存、閃存、或其他存儲設(shè)備)內(nèi)。此外,指令可經(jīng)由網(wǎng)絡(luò)或通過其他計算機(jī)可讀介質(zhì)來分配。因此,機(jī)器可讀介質(zhì)可包括用于以機(jī)器(例如,計算機(jī))可讀的形式存儲或發(fā)送信息的任何機(jī)制,但不限于:軟盤、光盤、緊致盤只讀存儲器(cd-rom)、磁光盤、只讀存儲器(rom)、隨機(jī)存取存儲器(ram)、可擦除可編程只讀存儲器(eprom)、電可擦除可編程只讀存儲器(eeprom)、磁卡或光卡、閃存、或在互聯(lián)網(wǎng)上經(jīng)由電、光、聲、或其他形式的傳播信號(例如,載波、紅外信號、數(shù)字信號等)發(fā)送信息中所使用的有形的機(jī)器可讀存儲器。因此,計算機(jī)可讀介質(zhì)包括適用于存儲或發(fā)送機(jī)器(例如,計算機(jī))可讀形式的電子指令或信息的任何類型的有形的機(jī)器可讀介質(zhì)。

設(shè)計會經(jīng)歷多個階段,從創(chuàng)建到仿真到制造。表示設(shè)計的數(shù)據(jù)可以用多種方式來表示該設(shè)計。首先,像仿真中有用的那樣,可以使用硬件描述語言或另一功能性描述語言來表示硬件。此外,可以在設(shè)計過程的一些階段產(chǎn)生具有邏輯和/或晶體管門的電路級模型。此外,大多數(shù)設(shè)計在某個階段都達(dá)到表示硬件模型中各種設(shè)備的物理布置的數(shù)據(jù)的層級。在使用常規(guī)半導(dǎo)體制造技術(shù)的情況下,表示硬件模型的數(shù)據(jù)可以是指定在用于制造集成電路的掩模的不同掩模層上存在或不存在各種特征的數(shù)據(jù)。在任何設(shè)計表示中,數(shù)據(jù)可以被存儲在任何形式的機(jī)器可讀介質(zhì)中。存儲器或者磁或光存儲設(shè)備(諸如,盤)可以是存儲經(jīng)由光或電波發(fā)送的信息的機(jī)器可讀介質(zhì),調(diào)制或以其他方式生成這些光或電波以發(fā)送這些信息。當(dāng)發(fā)送指示或承載代碼或設(shè)計的電載波達(dá)到實(shí)現(xiàn)該電信號的復(fù)制、緩沖或重新發(fā)送的程度時,即產(chǎn)生了新的副本。因此,通信提供商或網(wǎng)絡(luò)提供商可在有形的機(jī)器可讀介質(zhì)上至少臨時地存儲具體化本發(fā)明的多個實(shí)施例的技術(shù)的制品(諸如,被編碼成載波的信息)。

在現(xiàn)代處理器中,將多個不同的執(zhí)行單元用于處理和執(zhí)行各種代碼和指令。并不是所有指令都被同等地創(chuàng)建,因?yàn)橐恍┲噶罡斓赝瓿啥渌噶羁赡苄枰鄠€時鐘周期來完成。指令的吞吐量越快,則處理器的總體性能越好。因此,使許多指令盡可能快地執(zhí)行將會是有利的。然而,存在具有更大的復(fù)雜度,并在執(zhí)行時間和處理器資源方面要求更多的某些指令。例如,存在浮點(diǎn)指令、加載/存儲操作、數(shù)據(jù)移動等。

因?yàn)楦嗟挠嬎銠C(jī)系統(tǒng)被用于互聯(lián)網(wǎng)、文本以及多媒體應(yīng)用,所以已逐漸地引進(jìn)了附加的處理器支持。在一個實(shí)施例中,指令集可與一個或多個計算機(jī)架構(gòu)相關(guān)聯(lián),一個或多個計算機(jī)架構(gòu)包括:數(shù)據(jù)類型、指令、寄存器架構(gòu)、尋址模式、存儲器架構(gòu)、中斷和異常處理以及外部輸入和輸出(i/o)。

在一個實(shí)施例中,指令集架構(gòu)(isa)可由一個或更多微架構(gòu)來執(zhí)行,微架構(gòu)包括用于實(shí)現(xiàn)一個或多個指令集的處理器邏輯和電路。替代實(shí)施例可以通過微代碼、擴(kuò)展微代碼或微代碼輔助、管理程序、二進(jìn)制轉(zhuǎn)換、硬件重新編譯等來實(shí)現(xiàn)isa。因此,具有不同微架構(gòu)的多個處理器可共享公共指令集的至少一部分。例如,奔騰四(pentium4)處理器、酷睿(coretm)處理器、以及來自加利福尼亞州桑尼威爾(sunnyvale)的超微半導(dǎo)體有限公司(advancedmicrodevices,inc.)的多個處理器執(zhí)行幾乎相同版本的x86指令集(在更新的版本中加入了一些擴(kuò)展),但具有不同的內(nèi)部設(shè)計。類似地,由其他處理器開發(fā)公司(諸如,arm控股有限公司、mips或它們的授權(quán)方或兼容方)設(shè)計的多個處理器可共享至少一部分公共指令集,但可包括不同的處理器設(shè)計。例如,isa的相同寄存器架構(gòu)在不同的微架構(gòu)中可使用新的或公知的技術(shù)以不同方法來實(shí)現(xiàn),包括專用物理寄存器、使用寄存器重命名機(jī)制(例如,使用寄存器別名表(rat)、重排序緩沖器(rob)以及引退寄存器堆)的一個或多個動態(tài)分配物理寄存器。在一個實(shí)施例中,寄存器可包括:可由軟件編程者尋址或不可由軟件編程者尋址的一個或多個寄存器、寄存器架構(gòu)、寄存器堆、或其他寄存器集合。

在一個實(shí)施例中,指令可包括一個或多個指令格式。在一個實(shí)施例中,指令格式可指示多個字段(位的數(shù)量、位的位置等)以指定將要被執(zhí)行的操作以及將要對其執(zhí)行操作的操作數(shù)等。一些指令格式可進(jìn)一步由指令模板(或子格式)細(xì)分定義。例如,給定指令格式的指令模板可被定義為具有指令格式字段的不同的子集,和/或被定義為具有以不同方式進(jìn)行解釋的給定字段。在一個實(shí)施例中,使用指令格式(并且,如果定義過,則以該指令格式的指令模板中的給定的一個)來表示指令,并且該指令指定或指示操作以及該操作將操作的操作數(shù)。

科學(xué)應(yīng)用、金融應(yīng)用、自動向量化通用應(yīng)用、rms(識別、挖掘和合成)應(yīng)用以及視覺和多媒體應(yīng)用(例如,2d/3d圖形、圖像處理、視頻壓縮/解壓縮、語音識別算法和音頻處理)可能需要對大量數(shù)據(jù)項執(zhí)行相同的操作。在一個實(shí)施例中,單指令多數(shù)據(jù)(simd)指的是使得處理器對多個數(shù)據(jù)元素執(zhí)行一個操作的指令類型??蓪imd技術(shù)用于可將寄存器中的多個位邏輯地劃分為多個固定尺寸或可變尺寸的數(shù)據(jù)元素(每個數(shù)據(jù)元素表示單獨(dú)的值)的處理器中。例如,在一個實(shí)施例中,可將64位寄存器中的多個位組織為包含四個單獨(dú)的16位數(shù)據(jù)元素的源操作數(shù),每個數(shù)據(jù)元素表示單獨(dú)的16位的值。該數(shù)據(jù)類型可被稱為“緊縮”數(shù)據(jù)類型或“向量”數(shù)據(jù)類型,并且該數(shù)據(jù)類型的操作數(shù)被稱為緊縮數(shù)據(jù)操作數(shù)或向量操作數(shù)。在一個實(shí)施例中,緊縮數(shù)據(jù)項或向量可以是存儲在單個寄存器中的緊縮數(shù)據(jù)元素的序列,并且緊縮數(shù)據(jù)操作數(shù)或向量操作數(shù)可以是simd指令(或“緊縮數(shù)據(jù)指令”或“向量指令”)的源操作數(shù)或目的地操作數(shù)。在一個實(shí)施例中,simd指令指定了將要對兩個源向量操作數(shù)執(zhí)行以生成具有相同或不同尺寸的、具有相同或不同數(shù)量的數(shù)據(jù)元素的、具有相同或不同數(shù)據(jù)元素順序的目的地向量操作數(shù)(也被稱為結(jié)果向量操作數(shù))的單個向量操作。

諸如由酷睿(coretm)處理器(具有包括x86、mmxtm、流simd擴(kuò)展(sse)、sse2、sse3、sse4.1、sse4.2指令的指令集)、arm處理器(諸如,arm處理器族,具有包括向量浮點(diǎn)(vfp)和/或neon指令的指令集)和mips處理器(諸如,中國科學(xué)院計算機(jī)技術(shù)研究所(ict)開發(fā)的龍芯處理器族)所采用的simd技術(shù)之類的simd技術(shù)在應(yīng)用性能上帶來了極大的提高(coretm和mmxtm是加利福尼亞州圣克拉拉市的英特爾公司的注冊商標(biāo)或商標(biāo))。

在一個實(shí)施例中,目的地寄存器/數(shù)據(jù)和源寄存器/數(shù)據(jù)是表示對應(yīng)數(shù)據(jù)或操作的源和目的地的通用術(shù)語。在一些實(shí)施例中,它們可由寄存器、存儲器或具有與所描繪的那些名稱或功能不同的名稱或功能的其他存儲區(qū)域來實(shí)現(xiàn)。例如,在一個實(shí)施例中,“dest1”可以是臨時存儲寄存器或其他存儲區(qū)域,而“src1”和“src2”可以是第一和第二源存儲寄存器或其他存儲區(qū)域,等等。在其他實(shí)施例中,src和dest存儲區(qū)域中的兩個或更多可對應(yīng)于相同存儲區(qū)域中的不同數(shù)據(jù)存儲元素(例如,simd寄存器)。在一個實(shí)施例中,通過例如將對第一和第二源數(shù)據(jù)執(zhí)行的操作的結(jié)果寫回至兩個源寄存器中作為目的地寄存器的那個寄存器,源寄存器中的一個也可以作為目的地寄存器。

圖1a是根據(jù)本發(fā)明的一個實(shí)施例的示例性計算機(jī)系統(tǒng)的框圖,該計算機(jī)系統(tǒng)被形成為具有包括用于執(zhí)行指令的執(zhí)行單元的處理器。根據(jù)本發(fā)明,諸如在本文中所描述的實(shí)施例中,系統(tǒng)100包括諸如處理器102之類的組件,該處理器102用于使用包括邏輯的執(zhí)行單元以執(zhí)行算法來處理數(shù)據(jù)。系統(tǒng)100代表基于可從美國加利福尼亞州圣克拉拉市的英特爾公司獲得的iii、4、xeontm、xscaletm和/或strongarmtm微處理器的處理系統(tǒng),不過也可使用其它系統(tǒng)(包括具有其它微處理器的pc、工程工作站、機(jī)頂盒等)。在一個實(shí)施例中,樣本系統(tǒng)100可執(zhí)行可從美國華盛頓州雷蒙德市的微軟公司獲得的windowstm操作系統(tǒng)的一個版本,不過也可使用其它操作系統(tǒng)(例如unix和linux)、嵌入式軟件、和/或圖形用戶界面。因此,本發(fā)明的各實(shí)施例不限于硬件電路和軟件的任何具體組合。

諸實(shí)施例不限于計算機(jī)系統(tǒng)。本發(fā)明的替代實(shí)施例可用于其他設(shè)備,諸如手持式設(shè)備和嵌入式應(yīng)用。手持式設(shè)備的某些示例包括蜂窩電話、網(wǎng)際協(xié)議設(shè)備、數(shù)碼相機(jī)、個人數(shù)字助理(pda)以及手持式pc。嵌入式應(yīng)用可包括微控制器、數(shù)字信號處理器(dsp)、芯片上系統(tǒng)、網(wǎng)絡(luò)計算機(jī)(netpc)、機(jī)頂盒、網(wǎng)絡(luò)集線器、廣域網(wǎng)(wan)交換機(jī)、或能夠執(zhí)行根據(jù)至少一個實(shí)施例的一條或多條指令的任何其他系統(tǒng)。

圖1a是計算機(jī)系統(tǒng)100的框圖,計算機(jī)系統(tǒng)100被形成為具有處理器102,處理器102包括一個或多個執(zhí)行單元108用于執(zhí)行算法,從而執(zhí)行根據(jù)本發(fā)明的一個實(shí)施例的至少一條指令??稍趩翁幚砥髯烂婊蚍?wù)器系統(tǒng)的情境中描述一個實(shí)施例,但是可將替代實(shí)施例包括在多處理器系統(tǒng)中。系統(tǒng)100是“中樞”系統(tǒng)架構(gòu)的示例。計算機(jī)系統(tǒng)100包括用于處理數(shù)據(jù)信號的處理器102。處理器102可以是復(fù)雜指令集計算機(jī)(cisc)微處理器、精簡指令集計算(risc)微處理器、超長指令字(vliw)微處理器、實(shí)現(xiàn)多個指令集組合的處理器或任意其他處理器設(shè)備(例如,數(shù)字信號處理器)。處理器102耦合至處理器總線110,該處理器總線可在處理器102和系統(tǒng)100內(nèi)的其他組件之間傳輸數(shù)據(jù)信號。系統(tǒng)100的多個要素執(zhí)行為熟悉本領(lǐng)域的人員所共知的它們的常規(guī)功能。

在一個實(shí)施例中,處理器102包括第一級(l1)內(nèi)部高速緩存存儲器104。取決于架構(gòu),處理器102可具有單個內(nèi)部高速緩存或多級內(nèi)部高速緩存?;蛘?,在另一個實(shí)施例中,高速緩存存儲器可駐留在處理器102的外部。其他實(shí)施例也可包括內(nèi)部高速緩存和外部高速緩存的組合,這取決于特定實(shí)現(xiàn)和需求。寄存器堆106可將不同類型的數(shù)據(jù)存儲在各種寄存器(包括整數(shù)寄存器、浮點(diǎn)寄存器、狀態(tài)寄存器、指令指針寄存器)中。

執(zhí)行單元108(包括用于執(zhí)行整數(shù)和浮點(diǎn)操作的邏輯)也駐留在處理器102中。處理器102還包括存儲用于某些宏指令的微代碼的微代碼(ucode)rom。對于一個實(shí)施例,執(zhí)行單元108包括用于處理緊縮指令集109的邏輯。通過將緊縮指令集109包括在通用處理器102以及用于執(zhí)行指令的相關(guān)聯(lián)的電路的指令集中,可以使用通用處理器102中的緊縮數(shù)據(jù)來執(zhí)行由許多多媒體應(yīng)用使用的操作。因此,通過將處理器數(shù)據(jù)總線的完整寬度用于對緊縮數(shù)據(jù)執(zhí)行操作,可加速并更高效地執(zhí)行許多多媒體應(yīng)用。這能消除跨處理器數(shù)據(jù)總線傳輸更小數(shù)據(jù)單元以便一次對一個數(shù)據(jù)元素執(zhí)行一個或多個操作的需求。

執(zhí)行單元108的替代實(shí)施例也可被用于微控制器、嵌入式處理器、圖形設(shè)備、dsp以及其他類型的邏輯電路。系統(tǒng)100包括存儲器120。存儲器120可以是動態(tài)隨機(jī)存取存儲器(dram)設(shè)備、靜態(tài)隨機(jī)存取存儲器(sram)設(shè)備、閃存設(shè)備或其他存儲器設(shè)備。存儲器120可存儲由可由處理器102執(zhí)行的數(shù)據(jù)信號來表示的指令和/或數(shù)據(jù)。

系統(tǒng)邏輯芯片116耦合至處理器總線110和存儲器120。在所示出的實(shí)施例中的系統(tǒng)邏輯芯片116是存儲器控制器中樞(mch)。處理器102可經(jīng)由處理器總線110來與mch116通信。mch116提供至存儲器120的高帶寬存儲器路徑118,用于指令和數(shù)據(jù)存儲,并且用于圖形命令、數(shù)據(jù)和紋理的存儲。mch116用于在處理器102、存儲器120與系統(tǒng)100中的其他組件之間引導(dǎo)數(shù)據(jù)信號,并且用于在處理器總線110、存儲器120與系統(tǒng)i/o122之間橋接數(shù)據(jù)信號。在一些實(shí)施例中,系統(tǒng)邏輯芯片116可提供用于耦合至圖形控制器112的圖形端口。mch116通過存儲器接口118耦合至存儲器120。圖形卡112通過加速圖形端口(agp)互連114耦合至mch116。

系統(tǒng)100使用專有中樞接口總線122以將mch116耦合至i/o控制器中樞(ich)130。ich130經(jīng)由本地i/o總線來提供到某些i/o設(shè)備的直接連接。本地i/o總線是用于將外圍設(shè)備連接到存儲器120、芯片組以及處理器102的高速i/o總線。一些示例是音頻控制器、固件中樞(閃存bios)128、無線收發(fā)機(jī)126、數(shù)據(jù)存儲設(shè)備124、包括用戶輸入和鍵盤接口的傳統(tǒng)i/o控制器、串行擴(kuò)展端口(諸如,通用串行總線(usb))以及網(wǎng)絡(luò)控制器134。數(shù)據(jù)存儲設(shè)備124可以包括硬盤驅(qū)動器、軟盤驅(qū)動器、cd-rom設(shè)備、閃存設(shè)備、或其他大容量存儲設(shè)備。

對于系統(tǒng)的另一個實(shí)施例,根據(jù)一個實(shí)施例的指令可以與芯片上系統(tǒng)一起使用。芯片上系統(tǒng)的一個實(shí)施例包括處理器和存儲器。一個這樣的系統(tǒng)的存儲器是閃存。閃存可以位于與處理器和其他系統(tǒng)組件相同的管芯上。另外,諸如存儲器控制器或圖形控制器的其他邏輯塊也可以位于芯片上系統(tǒng)上。

圖1b示出數(shù)據(jù)處理系統(tǒng)140,該數(shù)據(jù)處理系統(tǒng)140實(shí)現(xiàn)本發(fā)明的一個實(shí)施例的原理。本領(lǐng)域的技術(shù)人員將容易理解,本文描述的多個實(shí)施例可用于替代的處理系統(tǒng),而不背離本發(fā)明的多個實(shí)施例的范圍。

計算機(jī)系統(tǒng)140包括能夠執(zhí)行根據(jù)一個實(shí)施例的至少一條指令的處理核159。對于一個實(shí)施例,處理核159表示任何類型的架構(gòu)(包括但不限于,cisc、risc或vliw類型架構(gòu))的處理單元。處理核159也可適于以一種或多種處理技術(shù)來制造,并且通過足夠詳細(xì)地表示在機(jī)器可讀介質(zhì)上可適用于促進(jìn)所述制造。

處理核159包括執(zhí)行單元142、一組寄存器堆145以及解碼器144。處理核159也包括對于理解本發(fā)明的實(shí)施例不是必需的附加電路(未示出)。執(zhí)行單元142用于執(zhí)行處理核159接收到的指令。除了執(zhí)行典型的處理器指令外,執(zhí)行單元142也可執(zhí)行緊縮指令集143中的指令,以便對緊縮數(shù)據(jù)格式執(zhí)行操作。緊縮指令集143包括用于執(zhí)行本發(fā)明的多個實(shí)施例的指令以及其他緊縮指令。執(zhí)行單元142通過內(nèi)部總線耦合至寄存器堆145。寄存器堆145表示處理核159上用于存儲包括數(shù)據(jù)的信息的存儲區(qū)域。如前文所述,可以理解,將該存儲區(qū)域用于存儲緊縮數(shù)據(jù)并不是關(guān)鍵的。執(zhí)行單元142耦合至解碼器144。解碼器144用于將處理核159接收到的指令解碼為控制信號和/或微代碼進(jìn)入點(diǎn)。響應(yīng)于這些控制信號和/或微代碼進(jìn)入點(diǎn),執(zhí)行單元142執(zhí)行合適的操作。在一個實(shí)施例中,將解碼器用于解釋指令的操作碼,該操作碼將指示應(yīng)當(dāng)對該指令內(nèi)所指示的對應(yīng)數(shù)據(jù)執(zhí)行什么操作。

處理核159與總線141耦合,用于與各種其他系統(tǒng)設(shè)備進(jìn)行通信,其他系統(tǒng)設(shè)備可包括但不限于:例如,同步動態(tài)隨機(jī)存取存儲器(sdram)控制器146、靜態(tài)隨機(jī)存取存儲器(sram)控制器147、猝發(fā)閃存接口148、個人計算機(jī)存儲卡國際協(xié)會(pcmcia)/緊致閃存(cf)卡控制器149、液晶顯示器(lcd)控制器150、直接存儲器存取(dma)控制器151、以及替代的總線主接口152。在一個實(shí)施例中,數(shù)據(jù)處理系統(tǒng)140也可包括i/o橋154,用于經(jīng)由i/o總線153與各種i/o設(shè)備進(jìn)行通信。此類i/o設(shè)備可包括但不限于:例如,通用異步接收機(jī)/發(fā)射機(jī)(uart)155、通用串行總線(usb)156、藍(lán)牙無線uart157、以及i/o擴(kuò)展接口158。

數(shù)據(jù)處理系統(tǒng)140的一個實(shí)施例提供了移動通信、網(wǎng)絡(luò)通信和/或無線通信,并提供了能夠執(zhí)行包括文本串比較操作的simd操作的處理核159。可利用各種音頻、視頻、成像和通信算法對處理核159進(jìn)行編程,這些算法包括:離散變換(諸如walsh-hadamard變換、快速傅立葉變換(fft)、離散余弦變換(dct)以及它們相應(yīng)的逆變換);壓縮/解壓縮技術(shù)(例如,色彩空間變換、視頻編碼運(yùn)動估計或視頻解碼運(yùn)動補(bǔ)償);以及調(diào)制/解調(diào)(modem)功能(例如,脈沖編碼調(diào)制(pcm))。

圖1c示出能夠執(zhí)行用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令的數(shù)據(jù)處理系統(tǒng)的另外的替代實(shí)施例。根據(jù)一個替代實(shí)施例,數(shù)據(jù)處理系統(tǒng)160可包括主處理器166、simd協(xié)處理器161、高速緩存存儲器167以及輸入/輸出系統(tǒng)168。輸入/輸出系統(tǒng)168可以可選地耦合至無線接口169。simd協(xié)處理器161能夠執(zhí)行包括根據(jù)一個實(shí)施例的指令的操作。處理核170可適用于以一種或多種處理技術(shù)來制造,并且通過足夠詳細(xì)地表示在機(jī)器可讀介質(zhì)上,可適用于促進(jìn)包括處理核170的數(shù)據(jù)處理系統(tǒng)160的全部或部分的制造。

對于一個實(shí)施例,simd協(xié)處理器161包括執(zhí)行單元162以及一組寄存器堆164。主處理器166的一個實(shí)施例包括解碼器165,該解碼器165用于識別包括根據(jù)一個實(shí)施例的、用于由執(zhí)行單元162執(zhí)行的指令的指令集163中的多條指令。對于替代實(shí)施例,simd協(xié)處理器161也包括用于對指令集163中的多條指令進(jìn)行解碼的解碼器165b的至少部分。處理核170也包括對于理解本發(fā)明的實(shí)施例不是必需的附加電路(未示出)。

在操作中,主處理器166執(zhí)行控制通用類型的數(shù)據(jù)處理操作(包括與高速緩存存儲器167和輸入/輸出系統(tǒng)168之間的交互)的數(shù)據(jù)處理指令流。simd協(xié)處理器指令被嵌入到該數(shù)據(jù)處理指令流中。主處理器166的解碼器165將這些simd協(xié)處理器指令識別為應(yīng)當(dāng)由附連的simd協(xié)處理器161來執(zhí)行的類型。因此,主處理器166在協(xié)處理器總線171上發(fā)布這些simd協(xié)處理器指令(或表示simd協(xié)處理器指令的控制信號),由任何附連的simd協(xié)處理器從該協(xié)處理器總線171接收到這些指令。在這種情況下,simd協(xié)處理器161將接受并執(zhí)行任何接收到的針對該simd協(xié)處理器的simd協(xié)處理器指令。

可經(jīng)由無線接口169接收數(shù)據(jù)以通過simd協(xié)處理器指令進(jìn)行處理。對于一個示例,能以數(shù)字信號的形式接收到語音通信,可由simd協(xié)處理器指令處理該數(shù)字信號以便重新生成表示該語音通信的數(shù)字音頻樣本。對于另一個示例,能以數(shù)字位流的形式接收到被壓縮的音頻和/或視頻,可由simd協(xié)處理器指令處理該數(shù)字位流以便重新生成數(shù)字音頻樣本和/或運(yùn)動視頻幀。對于處理核170的一個實(shí)施例,主處理器166和simd協(xié)處理器161被集成在單個處理核170中,該單個處理核170包括執(zhí)行單元162、一組寄存器堆164以及用于識別包括根據(jù)一個實(shí)施例的多條指令的指令集163中的多條指令的解碼器165。

圖2是處理器200的微架構(gòu)的框圖,該處理器200包括用于執(zhí)行根據(jù)本發(fā)明的一個實(shí)施例的指令的邏輯電路。在一些實(shí)施例中,可將根據(jù)一個實(shí)施例的指令實(shí)現(xiàn)為對具有字節(jié)尺寸、字尺寸、雙字尺寸、四字尺寸等并具有諸多數(shù)據(jù)類型(例如,單精度和雙精度整數(shù)和浮點(diǎn)數(shù)據(jù)類型)的數(shù)據(jù)元素進(jìn)行操作。在一個實(shí)施例中,有序前端201是處理器200的部分,該部分取出要被執(zhí)行的指令,并準(zhǔn)備這些指令以便稍后在處理器流水線中使用。前端201可以包括若干單元。在一個實(shí)施例中,指令預(yù)取器226從存儲器中取出指令,并將這些指令饋送至指令解碼器228,指令解碼器228進(jìn)而解碼或解釋這些指令。例如,在一個實(shí)施例中,該解碼器將接收到的指令解碼為機(jī)器可執(zhí)行的、被稱為“微指令”或“微操作”(也稱為微op或uop)的一個或多個操作。在其他實(shí)施例中,該解碼器將指令解析為可由微架構(gòu)用于執(zhí)行根據(jù)一個實(shí)施例的多個操作的操作碼以及對應(yīng)的數(shù)據(jù)和控制字段。在一個實(shí)施例中,追蹤高速緩存230獲取經(jīng)解碼的uop,并且在uop隊列234中將它們組合為程序排序的序列或蹤跡,以用于執(zhí)行。當(dāng)追蹤高速緩存230遇到復(fù)雜指令時,微代碼rom232提供完成操作所需的uop。

一些指令被轉(zhuǎn)換為單個微op,而其他指令需要若干個微op以完成完整的操作。在一個實(shí)施例中,如果需要多于四個微op來完成指令,則解碼器228訪問微代碼rom232以執(zhí)行該指令。對于一個實(shí)施例,可將指令解碼為少量的微op,以便在指令解碼器228處進(jìn)行處理。在另一實(shí)施例中,如果需要許多微op來完成操作,則可將指令存儲在微代碼rom232中。追蹤高速緩存230參考進(jìn)入點(diǎn)可編程邏輯陣列(pla)來確定正確的微指令指針,以從微代碼rom232中讀取微代碼序列來完成根據(jù)一個實(shí)施例的一條或多條指令。在微代碼rom232完成對指令的微op進(jìn)行的序列化操作之后,該機(jī)器的前端201恢復(fù)從追蹤高速緩存230中取出微op。

亂序執(zhí)行引擎203是準(zhǔn)備指令以進(jìn)行執(zhí)行的地方。亂序執(zhí)行邏輯具有許多緩沖器,這些緩沖器用于使指令流平滑并且重新排序該指令流,以便在這些指令流沿流水線向下并經(jīng)調(diào)度供執(zhí)行時優(yōu)化性能。分配器邏輯分配每一個uop為了執(zhí)行所需的機(jī)器緩沖器和資源。寄存器重命名邏輯將諸個邏輯寄存器重命名為寄存器堆中的條目。分配器還在指令調(diào)度器(存儲器調(diào)度器、快速調(diào)度器202、慢速/通用浮點(diǎn)調(diào)度器204以及簡單浮點(diǎn)調(diào)度器206)之前,在兩個uop隊列(一個用于存儲器操作,而另一個用于非存儲器操作)中的一個uop隊列中,為每一個uop分配條目。uop調(diào)度器202、204、206基于它們的從屬輸入寄存器操作數(shù)源的準(zhǔn)備就緒以及uop完成它們的操作所需的執(zhí)行資源的可用性來確定uop何時準(zhǔn)備好用于執(zhí)行。一個實(shí)施例的快速調(diào)度器202可以在主時鐘周期的每半個時鐘周期上進(jìn)行調(diào)度,而其他調(diào)度器在每個主處理器時鐘周期上僅可調(diào)度一次。調(diào)度器對分派端口仲裁以調(diào)度uop來執(zhí)行。

寄存器堆208、210位于調(diào)度器202、204、206與執(zhí)行塊211中的執(zhí)行單元212、214、216、218、220、222、224之間。也存在單獨(dú)的寄存器堆208、210,分別用于整數(shù)和浮點(diǎn)操作。一個實(shí)施例中的每個寄存器堆208、210也包括旁路網(wǎng)絡(luò),該旁路網(wǎng)絡(luò)可以繞開還未被寫入到寄存器堆中的、剛完成的結(jié)果或者將這些結(jié)果轉(zhuǎn)發(fā)到新的從屬uop中。整數(shù)寄存器堆208和浮點(diǎn)寄存器堆210也能夠彼此傳遞數(shù)據(jù)。對于一個實(shí)施例,將整數(shù)寄存器堆208劃分為兩個單獨(dú)的寄存器堆,一個寄存器堆用于數(shù)據(jù)的低階32位,第二個寄存器堆用于數(shù)據(jù)的高階32位。一個實(shí)施例中的浮點(diǎn)寄存器堆210具有128位寬的條目,因?yàn)楦↑c(diǎn)指令通常具有從64至128位寬度的操作數(shù)。

執(zhí)行塊211包括執(zhí)行單元212、214、216、218、220、222和224,實(shí)際在這些執(zhí)行單元中執(zhí)行指令。該區(qū)塊包括存儲微指令執(zhí)行所需的整數(shù)和浮點(diǎn)數(shù)據(jù)操作數(shù)值的寄存器堆208和210。一個實(shí)施例的處理器200包括許多執(zhí)行單元:地址生成單元(agu)212、agu214、快速alu216、快速alu218、慢速alu220、浮點(diǎn)alu222、浮點(diǎn)移動單元224。對于一個實(shí)施例,浮點(diǎn)執(zhí)行塊222和224執(zhí)行浮點(diǎn)、mmx、simd、sse以及其他操作。一個實(shí)施例中的浮點(diǎn)alu222包括用于執(zhí)行除法、平方根和余數(shù)微op的64位除64位的浮點(diǎn)除法器。對于本發(fā)明的諸個實(shí)施例,涉及浮點(diǎn)值的指令可使用浮點(diǎn)硬件來處理。在一個實(shí)施例中,alu操作去往高速alu執(zhí)行單元216和218。一個實(shí)施例中的快速alu216和218可以執(zhí)行有效等待時間為半個時鐘周期的快速操作。對于一個實(shí)施例,大多數(shù)復(fù)雜的整數(shù)操作去往慢速alu220,因?yàn)槁賏lu220包括用于長等待時間類型操作的整數(shù)執(zhí)行硬件,例如,乘法器、移位器、標(biāo)志邏輯和分支處理設(shè)備。存儲器加載/存儲操作由agu212和214來執(zhí)行。對于一個實(shí)施例,在對64位數(shù)據(jù)操作數(shù)執(zhí)行整數(shù)操作的情境中描述整數(shù)alu216、218和220。在替代實(shí)施例中,alu216、218、220可被實(shí)現(xiàn)為支持多種數(shù)據(jù)位,包括16、32、128、256等等。類似地,浮點(diǎn)單元222、224可被實(shí)現(xiàn)為支持具有多種寬度的位的一系列操作數(shù)。對于一個實(shí)施例,浮點(diǎn)單元222和224可結(jié)合simd以及多媒體指令對128位寬的緊縮數(shù)據(jù)操作數(shù)進(jìn)行操作。

在一個實(shí)施例中,在父加載完成執(zhí)行之前,uop調(diào)度器202、204和206分派從屬操作。由于在處理器200中推測性地調(diào)度并執(zhí)行uop,因此處理器200也包括用于處理存儲器未命中的邏輯。如果數(shù)據(jù)加載在數(shù)據(jù)高速緩存中未命中,則在流水線中會存在將臨時不正確的數(shù)據(jù)留給調(diào)度器的運(yùn)行中的從屬操作。重放機(jī)制跟蹤并重新執(zhí)行使用不正確的數(shù)據(jù)的指令。僅僅從屬操作需要被重放,而允許獨(dú)立操作完成。處理器的一個實(shí)施例的調(diào)度器和重放機(jī)制也被設(shè)計為捕捉在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令。

術(shù)語“寄存器”可指代被用作指令的一部分以標(biāo)識操作數(shù)的板上處理器存儲位置。換句話說,寄存器可以是從處理器外部(從編程者的角度來看)可用的那些。然而,不應(yīng)當(dāng)將實(shí)施例中的寄存器限制于意指特定類型的電路。相反,實(shí)施例中的寄存器能夠存儲并提供數(shù)據(jù),并且能夠執(zhí)行本文中所述的功能。本文所描述的寄存器可利用任何數(shù)量的不同技術(shù),由處理器中的電路來實(shí)現(xiàn),這些不同技術(shù)諸如,專用物理寄存器、使用寄存器重命名的動態(tài)分配的物理寄存器、專用和動態(tài)分配的物理寄存器的組合等。在一個實(shí)施例中,整數(shù)寄存器存儲32位整數(shù)數(shù)據(jù)。一個實(shí)施例的寄存器堆還包含用于緊縮數(shù)據(jù)的八個多媒體simd寄存器。對于以下討論,寄存器應(yīng)被理解為設(shè)計成保存緊縮數(shù)據(jù)的數(shù)據(jù)寄存器,諸如來自美國加利福尼亞州圣克拉拉市的英特爾公司的啟用了mmx技術(shù)的微處理器的64位寬mmxtm寄存器(在一些實(shí)例中也稱為“mm寄存器”)。這些mmx寄存器(在整數(shù)和浮點(diǎn)形式兩者中是可用的)可與伴隨simd和sse指令的緊縮數(shù)據(jù)元素一起操作。類似地,涉及sse2、sse3、sse4或更新的技術(shù)(統(tǒng)稱為“ssex”)的128位寬xmm寄存器也可被用于保持此類緊縮數(shù)據(jù)操作數(shù)。在一個實(shí)施例中,在存儲緊縮數(shù)據(jù)和整型數(shù)據(jù)時,寄存器不需要區(qū)分兩種數(shù)據(jù)類型。在一個實(shí)施例中,整數(shù)和浮點(diǎn)可被包括在相同的寄存器堆中,或被包括在不同的寄存器堆中。此外,在一個實(shí)施例中,浮點(diǎn)和整型數(shù)據(jù)可以存儲在不同的寄存器中或相同的寄存器中。

在下述附圖的示例中,描述了多個數(shù)據(jù)操作數(shù)。圖3a示出了根據(jù)本發(fā)明的一個實(shí)施例的多媒體寄存器中的各種緊縮數(shù)據(jù)類型表示。圖3a示出用于128位寬操作數(shù)的緊縮字節(jié)310、緊縮字320以及緊縮雙字(dword)330的數(shù)據(jù)類型。本示例的緊縮字節(jié)格式310是128位長,并且包含十六個緊縮字節(jié)數(shù)據(jù)元素。字節(jié)在此被定義為8位數(shù)據(jù)。每一個字節(jié)數(shù)據(jù)元素的信息被存儲為:對于字節(jié)0存儲在位7到位0,對于字節(jié)1存儲在位15到位8,對于字節(jié)2存儲在位23到位16,最后對于字節(jié)15存儲在位120到位127。因此,在該寄存器中使用了所有可用的位。該存儲配置提高了處理器的存儲效率。同樣,因?yàn)樵L問了十六個數(shù)據(jù)元素,所以現(xiàn)在可并行地對十六個數(shù)據(jù)元素執(zhí)行一個操作。

通常,數(shù)據(jù)元素是與具有相同長度的其他數(shù)據(jù)元素一起被存儲在單個寄存器或存儲器位置中的單獨(dú)的數(shù)據(jù)片。在涉及ssex技術(shù)的緊縮數(shù)據(jù)序列中,存儲在xmm寄存器中的數(shù)據(jù)元素的數(shù)目是128位除以單獨(dú)的數(shù)據(jù)元素的位長。類似地,在涉及mmx和sse技術(shù)的緊縮數(shù)據(jù)序列中,存儲在mmx寄存器中的數(shù)據(jù)元素的數(shù)目是64位除以單獨(dú)的數(shù)據(jù)元素的位長。雖然圖3a中所示的數(shù)據(jù)類型是128位長,但本發(fā)明的多個實(shí)施例也可操作64位寬、256位寬、512位寬或其他尺寸的操作數(shù)。本示例中的緊縮字格式320是128位長,并且包含八個緊縮字?jǐn)?shù)據(jù)元素。每個緊縮字包含十六位的信息。圖3a的緊縮雙字格式330是128位長,并且包含四個緊縮雙字?jǐn)?shù)據(jù)元素。每個緊縮雙字?jǐn)?shù)據(jù)元素包含三十二位的信息。緊縮四字是128位長,并包含兩個緊縮四字?jǐn)?shù)據(jù)元素。

圖3b示出替代的寄存器內(nèi)數(shù)據(jù)存儲格式。每個緊縮數(shù)據(jù)可包括多于一個的獨(dú)立數(shù)據(jù)元素。示出了三種緊縮數(shù)據(jù)格式:緊縮半數(shù)據(jù)元素341、緊縮單數(shù)據(jù)元素342和緊縮雙數(shù)據(jù)元素343。緊縮半數(shù)據(jù)元素341、緊縮單數(shù)據(jù)元素342和緊縮雙數(shù)據(jù)元素343的一個實(shí)施例包含固定點(diǎn)數(shù)據(jù)元素。對于替代實(shí)施例,緊縮半數(shù)據(jù)元素341、緊縮單數(shù)據(jù)元素342和緊縮雙數(shù)據(jù)元素343中的一個或多個可包含浮點(diǎn)數(shù)據(jù)元素。緊縮半數(shù)據(jù)元素341的一個替代實(shí)施例是一百二十八位長的,并且包含八個16位數(shù)據(jù)元素。緊縮單數(shù)據(jù)元素342的一個實(shí)施例是一百二十八位長的,并且包含四個32位數(shù)據(jù)元素。緊縮雙數(shù)據(jù)元素343的一個實(shí)施例是一百二十八位長的,并且包含兩個64位數(shù)據(jù)元素。將會理解,可進(jìn)一步將此類緊縮數(shù)據(jù)格式擴(kuò)展至其他寄存器長度,例如,96位、160位、192位、224位、256位、512位或更長。

圖3c示出了根據(jù)本發(fā)明的一個實(shí)施例的多媒體寄存器中的各種有符號和無符號緊縮數(shù)據(jù)類型表示。無符號緊縮字節(jié)表示344示出將無符號緊縮字節(jié)存儲在simd寄存器中。每一個字節(jié)數(shù)據(jù)元素的信息被存儲為:對于字節(jié)0存儲在位7到位0,對于字節(jié)1存儲在位15到位8,對于字節(jié)2存儲在位23到位16,等等,最后對于字節(jié)15存儲在位120到位127。因此,在該寄存器中使用了所有可用的位。該存儲配置可提高處理器的存儲效率。同樣,因?yàn)樵L問了十六個數(shù)據(jù)元素,所以現(xiàn)在能以并行方式對十六個數(shù)據(jù)元素執(zhí)行一個操作。有符號緊縮字節(jié)表示345示出了有符號緊縮字節(jié)的存儲。注意,每個字節(jié)數(shù)據(jù)元素的第八位是符號指示符。無符號緊縮字表示346示出了如何將字7到字0存儲在simd寄存器中。有符號緊縮字表示347類似于無符號緊縮字寄存器內(nèi)表示346。注意,每個字?jǐn)?shù)據(jù)元素的第十六位是符號指示符。無符號緊縮雙字表示348示出了如何存儲雙字?jǐn)?shù)據(jù)元素。有符號緊縮雙字表示349類似于無符號緊縮雙字寄存器內(nèi)表示348。注意,必要的符號位是每個雙字?jǐn)?shù)據(jù)元素的第三十二位。

圖3d是與可從美國加利福尼亞州圣克拉拉市的英特爾公司的萬維網(wǎng)(www)intel.com/products/processor/manuals/上獲得的“64和ia-32英特爾架構(gòu)軟件開發(fā)者手冊組合卷2a和2b:指令集參考a-z(64andia-32intelarchitecturesoftwaredeveloper’smanualcombinedvolumes2aand2b:instructionsetreferencea-z)”中描述的操作碼格式類型相對應(yīng)的、具有32或更多位的操作編碼(操作碼)格式360以及寄存器/存儲器操作數(shù)尋址模式的一個實(shí)施例的描繪。在一個實(shí)施例中,可通過字段361和362中的一個或多個對指令進(jìn)行編碼。可以對于每條指令標(biāo)識多至兩個操作數(shù)位置,包括多至兩個源操作數(shù)標(biāo)識符364和365。對于一個實(shí)施例,目的地操作數(shù)標(biāo)識符366與源操作數(shù)標(biāo)識符364相同,而在其他實(shí)施例中它們不相同。對于替代實(shí)施例,目的地操作數(shù)標(biāo)識符366與源操作數(shù)標(biāo)識符365相同,而在其他實(shí)施例中它們不相同。在一個實(shí)施例中,由源操作數(shù)標(biāo)識符364和365標(biāo)識的源操作數(shù)中的一個被指令的結(jié)果覆寫,而在其他實(shí)施例中,標(biāo)識符364對應(yīng)于源寄存器元件,而標(biāo)識符365對應(yīng)于目的地寄存器元件。對于一個實(shí)施例,操作數(shù)標(biāo)識符364和365可被用于標(biāo)識32位或64位的源和目的地操作數(shù)。

圖3e是具有四十個或更多位的另一個替代操作編碼(操作碼)格式370的描繪。操作碼格式370對應(yīng)于操作碼格式360,并包括可選的前綴字節(jié)378。根據(jù)一個實(shí)施例的指令可通過字段378、371和372中的一個或多個來編碼。通過源操作數(shù)標(biāo)識符374和375以及通過前綴字節(jié)378,可對每條指令標(biāo)識多至兩個操作數(shù)位置。對于一個實(shí)施例,前綴字節(jié)378可被用于標(biāo)識32位或64位的源和目的地操作數(shù)。對于一個實(shí)施例,目的地操作數(shù)標(biāo)識符376與源操作數(shù)標(biāo)識符374相同,而在其他實(shí)施例中它們不相同。對于替代實(shí)施例,目的地操作數(shù)標(biāo)識符376與源操作數(shù)標(biāo)識符375相同,而在其他實(shí)施例中它們不相同。在一個實(shí)施例中,指令對由操作數(shù)標(biāo)識符374和375所標(biāo)識的操作數(shù)中的一個或多個進(jìn)行操作,并且通過該指令的結(jié)果覆寫由操作數(shù)標(biāo)識符374和375所標(biāo)識的一個或多個操作數(shù),而在其他實(shí)施例中,將由標(biāo)識符374和375標(biāo)識的操作數(shù)寫入另一寄存器中的另一數(shù)據(jù)元素中。操作碼格式360和370允許由mod字段363和373以及由可選的比例-索引-基址(scale-index-base)和位移(displacement)字節(jié)部分地指定的寄存器到寄存器尋址、存儲器到寄存器尋址、由存儲器對寄存器尋址、由寄存器對寄存器尋址、由立即數(shù)對寄存器尋址、寄存器到存儲器尋址。

接下來轉(zhuǎn)到圖3f,在一些替代實(shí)施例中,64位(或128位、或256位、或512位或更多位)單指令多數(shù)據(jù)(simd)算術(shù)操作可經(jīng)由協(xié)處理器數(shù)據(jù)處理(cdp)指令來執(zhí)行。操作編碼(操作碼)格式380描繪了具有cdp操作碼字段382和389的一條此類cdp指令。對于替代實(shí)施例,可由字段383、384、387和388中的一個或多個對cdp指令操作的這種類型進(jìn)行編碼。可以對每個指令標(biāo)識多至三個操作數(shù)位置,包括多至兩個源操作數(shù)標(biāo)識符385和390以及一個目的地操作數(shù)標(biāo)識符386。協(xié)處理器的一個實(shí)施例可對8位、16位、32位和64位的值進(jìn)行操作。對于一個實(shí)施例,對整數(shù)數(shù)據(jù)元素執(zhí)行指令。在一些實(shí)施例中,可使用條件字段381,有條件地執(zhí)行指令。對于一些實(shí)施例,可通過字段383來對源數(shù)據(jù)尺寸進(jìn)行編碼。在一些實(shí)施例中,可對simd字段執(zhí)行零(z)、負(fù)(n)、進(jìn)位(c)和溢出(v)檢測。對于一些指令,可通過字段384對飽和類型進(jìn)行編碼。

接下來轉(zhuǎn)到圖3g,其描繪了根據(jù)另一個實(shí)施例的用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的另一個替代操作編碼(操作碼)格式397,該替代操作編碼(操作碼)格式397對應(yīng)于可在萬維網(wǎng)(www)intel.com/products/processor/manuals/上從加利福尼亞州圣克拉拉市的英特爾公司獲得的“高級向量擴(kuò)展編程參考”(“advancedvectorextensionsprogrammingreference”)中所描述的操作碼格式類型。

原始x86指令集向1字節(jié)操作碼提供各種格式的地址字節(jié)(syllable)以及被包括在在附加字節(jié)中的立即操作數(shù),其中可從第一個“操作碼”字節(jié)中獲知附加字節(jié)的存在。此外,存在作為對該操作碼的修飾符而保留的某些字節(jié)值(被稱為前綴(prefix),因?yàn)楸仨殞⑺鼈冎糜谥噶钪?。當(dāng)256個操作碼字節(jié)的原始調(diào)配(包括這些特殊的前綴值)耗盡時,將單個字節(jié)專用于去往256個操作碼的新集合的跳出方式(escape)。因?yàn)樘砑恿讼蛄恐噶?例如,simd),因此,即便通過使用前綴進(jìn)行擴(kuò)展,也產(chǎn)生了對更多操作碼的需求,并且“兩字節(jié)”操作碼映射也是不夠的。為此,將新指令加入附加的映射中,該附加的映射將兩字節(jié)加上可選的前綴用作標(biāo)識符。

此外,為了便于在64位模式中實(shí)現(xiàn)額外的寄存器,可在前綴和操作碼(以及確定該操作碼所必需的任何跳出字節(jié))之間使用附加的前綴(被稱為“rex”)。在一個實(shí)施例中,該rex可具有4個“有效負(fù)荷”位,以指示在64位模式中使用附加的寄存器。在其他實(shí)施例中,該rex可具有少于或多于4位。至少一個指令集的通用格式(其通常對應(yīng)于格式360和/或格式370)被一般地示出如下:

[prefixes][rex]escape[escape2]opcodemodrm(等等)

操作碼格式397對應(yīng)于操作碼格式370,并包括替代大部分的其他公共使用的傳統(tǒng)指令前綴字節(jié)和跳出代碼的、可選的vex前綴字節(jié)391(在一個實(shí)施例中,以十六進(jìn)制的c4開始)。例如,圖3h示出了使用兩個字段來編碼指令的實(shí)施例,可在第二跳出代碼存在于原始指令中時,或者在需要使用rex字段中的額外位(例如,xb和w字段)時使用該實(shí)施例。在圖3h所示的實(shí)施例中,傳統(tǒng)跳出由新的跳出值來表示,傳統(tǒng)前綴被完全壓縮為“有效負(fù)荷(payload)”字節(jié)的部分,傳統(tǒng)前綴被重新申明并可用于未來的擴(kuò)展,第二跳出代碼被壓縮在“映射(map)”字段中且未來的映射或特征空間可用,并且加入新的特征(例如,增加的向量長度以及附加的源寄存器區(qū)分符)。

根據(jù)一個實(shí)施例的指令可通過字段391和392中的一個或多個來進(jìn)行編碼。通過字段391結(jié)合源操作數(shù)標(biāo)識符374和375,并且結(jié)合可選的比例-索引-基址(sib)標(biāo)識符393、可選的位移標(biāo)識符394以及可選立即數(shù)字節(jié)395,可以為每條指令標(biāo)識多至四個操作數(shù)位置。對于一個實(shí)施例,vex前綴字節(jié)391可被用于標(biāo)識32位或64位的源和目的地操作數(shù)和/或128位或256位simd寄存器或存儲器操作數(shù)。對于一個實(shí)施例,由操作碼格式397提供的功能可與操作碼格式370形成冗余,而在其他實(shí)施例中它們不同。操作碼格式370和397允許由mod字段373以及由可選的(sib)標(biāo)識符393、可選的位移標(biāo)識符394以及可選的立即數(shù)字節(jié)395部分地指定的寄存器到寄存器尋址、存儲器到寄存器尋址、由存儲器對寄存器尋址、由寄存器對寄存器尋址、由立即數(shù)對寄存器尋址、寄存器到存儲器尋址。

接下來轉(zhuǎn)到圖3j,描繪了根據(jù)另一實(shí)施例的用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的另一替代操作編碼(操作碼)格式398。操作碼格式398對應(yīng)于操作碼格式370和397,并包括替代大部分的其他公共使用的傳統(tǒng)指令前綴字節(jié)和跳出代碼并提供附加的功能的、可選的evex前綴字節(jié)396(在一個實(shí)施例中,以十六進(jìn)制的62開始)。根據(jù)一個實(shí)施例的指令可通過字段396和392中的一個或多個來進(jìn)行編碼。通過字段396結(jié)合源操作數(shù)標(biāo)識符374和375,并且結(jié)合可選比例-索引-基址(sib)標(biāo)識符393、可選的位移標(biāo)識符394以及可選的立即數(shù)字節(jié)395,可以為每條指令標(biāo)識多至四個操作數(shù)位置以及標(biāo)識掩碼。對于一個實(shí)施例,evex前綴字節(jié)396可被用于標(biāo)識32位或64位的源和目的地操作數(shù)和/或128位、256位或512位simd寄存器或存儲器操作數(shù)。對于一個實(shí)施例,由操作碼格式398提供的功能可與操作碼格式370或397形成冗余,而在其他實(shí)施例中它們不同。操作碼格式398允許由mod字段373以及由可選的(sib)標(biāo)識符393、可選的位移標(biāo)識符394以及可選的立即數(shù)字節(jié)395部分地指定的、利用掩碼的寄存器到寄存器尋址、存儲器到寄存器尋址、由存儲器對寄存器尋址、由寄存器對寄存器尋址、由立即數(shù)對寄存器尋址、寄存器到存儲器尋址。至少一個指令集的通用格式(其通常對應(yīng)于格式360和/或格式370)被一般地示出如下:

evex1rxbmmmmmwvvvlppevex4opcodemodrm[sib][disp][imm]

對于一個實(shí)施例,根據(jù)evex格式398來編碼的指令可具有額外的“有效載荷(payload)”位,這些額外的“有效載荷”位可用于通過附加的新特征來在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地,所述附加的新特征諸如例如用戶可配置掩碼寄存器、附加的操作數(shù)、從128位、256位或512位向量寄存器的選擇或待選擇的更多的寄存器等等。例如,在vex格式397可以用于不具有掩碼的指令的場合,evex格式398可以用于具有顯式用戶可配置掩碼的指令。此外,在vex格式397可用于使用128位或256位向量寄存器的指令的場合,evex格式398可用于使用128位、256位、512位或更大(或更小)的向量寄存器的指令。

用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的示例指令或命令通過下列示例示出:

以上示例指令可以隱式地或顯式地為epc中的分配給父進(jìn)程和子進(jìn)程的飛地的安全存儲指定地址以存儲安全飛地控制結(jié)構(gòu)數(shù)據(jù)、應(yīng)用數(shù)據(jù)、應(yīng)用代碼等等。在一些實(shí)施例中,父進(jìn)程可以執(zhí)行,或系統(tǒng)軟件防護(hù)擴(kuò)展(sgx)庫可以執(zhí)行指令以將父安全飛地控制結(jié)構(gòu)(secs)復(fù)制到子進(jìn)程的安全存儲區(qū)域、對唯一子飛地id進(jìn)行初始化并且鏈接到父進(jìn)程的secs/飛地id。在一些實(shí)施例中,子進(jìn)程可以執(zhí)行,或系統(tǒng)sgx庫可以執(zhí)行指令以將頁面從父飛地復(fù)制到子飛地,其中父飛地和子飛地具有相同密鑰,如果被中斷,然后還將epc映射的條目設(shè)置為部分完成,以及記錄子飛地中的頁面狀態(tài)。因此,可以恢復(fù)用于從父飛地復(fù)制頁面的指令。

在一些實(shí)施例中,本文中所公開的指令和邏輯能夠在用于使進(jìn)程分叉的secs復(fù)制中以及在安全飛地內(nèi)的頁面復(fù)制操作中被中斷和恢復(fù)。因此,可以保證使進(jìn)程分叉和建立安全飛地的頁面的子副本的向前進(jìn)展,并且服務(wù)(諸如語音、視頻和實(shí)時事務(wù))中的不可接受的擾動可以通過及時服務(wù)待定中斷來避免。在一些實(shí)施例中,還可以設(shè)置結(jié)束復(fù)制(end-of-copy)標(biāo)志來指示用于將頁面從父飛地復(fù)制到子飛地的最后指令。當(dāng)設(shè)置結(jié)束復(fù)制標(biāo)志時,在指令成功完成時,可以將到父secs/飛地id的鏈接從子secs移除。在一些實(shí)施例中,應(yīng)用可能不能從子進(jìn)程的飛地訪問/執(zhí)行,直到到父secs/飛地id的鏈路已經(jīng)被移除。將理解,通過使用此類飛地指令來在安全epc中使進(jìn)程分叉和建立子飛地,父進(jìn)程可以在epc中安全地創(chuàng)建(即分叉出)子進(jìn)程并且為子進(jìn)程飛地建立副本。還將理解,在不具有對此類指令的處理器支持的情況下,用于完成相同(或類似)技術(shù)效果的任何軟件系統(tǒng)安全特征可能(如果真的可行)是過于昂貴的和/或性能受限的,以致可以不利地接受更少的安全性措施。

還將理解,管理許可、物理存儲器和/或改變映射仍可通過操作系統(tǒng)(os)管理,但當(dāng)存儲器內(nèi)容受保護(hù)時(例如在安全飛地中),os未被許可或未被信任來訪問飛地私有存儲器的實(shí)際受保護(hù)的內(nèi)容。利用在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令和處理邏輯,可在不能信任os的情況下實(shí)現(xiàn)確保私有存儲器內(nèi)容的安全性和/或完整性并且管理使進(jìn)程分叉和建立頁面的子副本的技術(shù)限制,無需精巧的硬件支持和/或設(shè)計努力。

圖4a是示出根據(jù)本發(fā)明的至少一個實(shí)施例的有序流水線以及寄存器重命名級、亂序發(fā)布/執(zhí)行流水線的框圖。圖4b是示出根據(jù)本發(fā)明的至少一個實(shí)施例的、要被包括在處理器中的有序架構(gòu)核以及寄存器重命名邏輯、亂序發(fā)布/執(zhí)行邏輯的框圖。圖4a中的實(shí)線框示出了有序流水線,而虛線框示出了寄存器重命名的、亂序發(fā)布/執(zhí)行流水線。類似地,圖4b中的實(shí)線框示出了有序架構(gòu)邏輯,而虛線框示出了寄存器重命名邏輯以及亂序發(fā)布/執(zhí)行邏輯。

在圖4a中,處理器流水線400包括取出級402、長度解碼級404、解碼級406、分配級408、重命名級410、調(diào)度(也被稱為分派或發(fā)布)級412、寄存器讀取/存儲器讀取級414、執(zhí)行級416、寫回/存儲器寫入級418、異常處理級422和提交級424。

在圖4b中,箭頭指示兩個或更多個單元之間的耦合,并且箭頭的方向指示那些單元之間的數(shù)據(jù)流的方向。圖4b示出了包括耦合到執(zhí)行引擎單元450的前端單元430的處理器核490,且執(zhí)行引擎單元和前端單元兩者都耦合到存儲器單元470。

核490可以是精簡指令集計算(risc)核、復(fù)雜指令集計算(cisc)核、超長指令字(vliw)核或混合或替代核類型。作為又一選項,核490可以是專用核,例如,網(wǎng)絡(luò)或通信核、壓縮引擎、圖形核等。

前端單元430包括耦合至指令高速緩存單元434的分支預(yù)測單元432,指令高速緩存單元434耦合至指令轉(zhuǎn)換后備緩沖器(tlb)436,指令轉(zhuǎn)換后備緩沖器436耦合至指令取出單元438,指令取出單元438耦合至解碼單元440。解碼單元或解碼器可解碼指令,并生成從原始指令中解碼出的、或以其他方式反映原始指令的、或從原始指令中導(dǎo)出的一個或多個微操作、微代碼進(jìn)入點(diǎn)、微指令、其他指令或其他控制信號作為輸出??墒褂酶鞣N不同的機(jī)制來實(shí)現(xiàn)解碼器。合適的機(jī)制的示例包括但不僅限于,查找表、硬件實(shí)現(xiàn)、可編程邏輯陣列(pla)、微代碼只讀存儲器(rom)等等。指令高速緩存單元434進(jìn)一步耦合到存儲器單元470中的第2級(l2)高速緩存單元476。解碼單元440耦合至執(zhí)行引擎單元450中的重命名/分配器單元452。

執(zhí)行引擎單元450包括耦合至引退單元454的重命名/分配器單元452以及一組一個或多個調(diào)度器單元456。調(diào)度器單元456表示任何數(shù)目的不同調(diào)度器,包括預(yù)留站、中央指令窗等。調(diào)度器單元456耦合到物理寄存器堆單元458。物理寄存器堆單元458中的每一個表示一個或多個物理寄存器堆,其中不同的物理寄存器堆存儲一個或多個不同的數(shù)據(jù)類型(諸如標(biāo)量整數(shù)、標(biāo)量浮點(diǎn)、緊縮整數(shù)、緊縮浮點(diǎn)、向量整數(shù)、向量浮點(diǎn)、等等)、狀態(tài)(諸如,指令指針,其是將要被執(zhí)行的下一個指令的地址)等等。物理寄存器堆單元458被引退單元454所覆蓋,以示出可實(shí)現(xiàn)寄存器重命名和亂序執(zhí)行的多種方式(諸如,使用重排序緩沖器和引退寄存器堆、使用未來文件(futurefile)、歷史緩沖器以及引退寄存器堆;使用寄存器映射和寄存器池等等)。通常,架構(gòu)寄存器從處理器外部或從編程者的視角來看是可見的。這些寄存器不限于任何已知的特定的電路類型。各種不同類型的寄存器可適用,只要它們能夠存儲并提供本文中所述的數(shù)據(jù)。合適的寄存器的示例包括但不限于:專用物理寄存器、使用寄存器重命名的動態(tài)分配物理寄存器、專用物理寄存器和動態(tài)分配物理寄存器的組合等等。引退單元454和物理寄存器堆單元458耦合至執(zhí)行群集460。執(zhí)行群集460包括一組一個或多個執(zhí)行單元462和一組一個或多個存儲器訪問單元464。執(zhí)行單元462可以對各種類型的數(shù)據(jù)(例如,標(biāo)量浮點(diǎn)、緊縮整數(shù)、緊縮浮點(diǎn)、向量整數(shù)、向量浮點(diǎn))執(zhí)行各種操作(例如,移位、加法、減法、乘法)。盡管一些實(shí)施例可以包括專用于特定功能或功能組的數(shù)個執(zhí)行單元,但是其他實(shí)施例可以僅包括一個執(zhí)行單元或全部都執(zhí)行所有功能的多個執(zhí)行單元。調(diào)度器單元456、物理寄存器堆單元458和執(zhí)行群集460被示出為可能是復(fù)數(shù)個,因?yàn)槟承?shí)施例為某些數(shù)據(jù)/操作類型創(chuàng)建了多個單獨(dú)流水線(例如,均具有各自調(diào)度器單元、物理寄存器堆單元和/或執(zhí)行群集的標(biāo)量整數(shù)流水線、標(biāo)量浮點(diǎn)/緊縮整數(shù)/緊縮浮點(diǎn)/向量整數(shù)/向量浮點(diǎn)流水線和/或存儲器訪問流水線;以及在單獨(dú)的存儲器訪問流水線的情況下,某些實(shí)施例被實(shí)現(xiàn)為僅僅該流水線的執(zhí)行群集具有存儲器訪問單元464)。還應(yīng)當(dāng)理解,在使用分開的流水線的情況下,這些流水線中的一個或多個可以是亂序發(fā)布/執(zhí)行的,而其余的是有序的。

存儲器訪問單元464的集合耦合到存儲器單元470,該存儲器單元包括耦合到數(shù)據(jù)高速緩存單元474的數(shù)據(jù)tlb單元472,其中數(shù)據(jù)高速緩存單元耦合到第2級(l2)高速緩存單元476。在一個示例性實(shí)施例中,存儲器訪問單元464可包括加載單元、存儲地址單元和存儲數(shù)據(jù)單元,其中的每一個均耦合至存儲器單元470中的數(shù)據(jù)tlb單元472。l2高速緩存單元476被耦合到一個或多個其他級的高速緩存,并最終被耦合到主存儲器。

作為示例,示例性寄存器重命名的、亂序發(fā)布/執(zhí)行核架構(gòu)可以如下實(shí)現(xiàn)流水線400:1)指令取出438執(zhí)行取出和長度解碼級402和404;2)解碼單元440執(zhí)行解碼級406;3)重命名/分配器單元452執(zhí)行分配級408和重命名級410;4)調(diào)度器單元456執(zhí)行調(diào)度級412;5)物理寄存器堆單元458和存儲器單元470執(zhí)行寄存器讀取/存儲器讀取級414;執(zhí)行群集460執(zhí)行執(zhí)行級416;6)存儲器單元470和物理寄存器堆單元458執(zhí)行寫回/存儲器寫入級418;7)各單元可牽涉到異常處理級422;以及8)引退單元454和物理寄存器堆單元458執(zhí)行提交級424。

核490可支持一個或多個指令集(諸如,x86指令集(具有增加有更新版本的一些擴(kuò)展)、加利福尼亞州桑尼威爾的mips技術(shù)公司的mips指令集、加利福尼亞州桑尼威爾的arm控股公司的arm指令集(具有可選附加擴(kuò)展,諸如neon))。

應(yīng)當(dāng)理解,核可以支持多線程操作(執(zhí)行兩個或更多個并行的操作或線程的集合),并且可以按各種方式來完成該多線程操作,各種方式包括時分多線程操作、同步多線程操作(其中,單個物理核為物理核正在同步進(jìn)行多線程操作的多個線程中的每一個線程提供邏輯核)或其組合(例如,時分取出和解碼以及此后諸如利用超線程技術(shù)的同步多線程操作)。

盡管在亂序執(zhí)行的上下文中描述了寄存器重命名,但是,應(yīng)當(dāng)理解,寄存器重命名可以用于有序架構(gòu)中。雖然處理器的所示出的實(shí)施例也包括單獨(dú)的指令和數(shù)據(jù)高速緩存單元434/474以及共享的l2高速緩存單元476,但替代實(shí)施例可具有用于指令和數(shù)據(jù)兩者的單個的內(nèi)部高速緩存,諸如例如,第1級(l1)內(nèi)部高速緩存或多個層級的內(nèi)部高速緩存。在一些實(shí)施例中,系統(tǒng)可以包括內(nèi)部高速緩存以及在核和/或處理器外部的外部高速緩存的組合。或者,全部高速緩存都可以在核和/或處理器的外部。

圖5是根據(jù)本發(fā)明的多個實(shí)施例的具有集成的存儲器控制器和圖形器件的單核處理器和多核處理器500的框圖。圖5的實(shí)線框示出了處理器500,其具有單個核502a、系統(tǒng)代理510、一組一個或多個總線控制器單元516,而可選附加的虛線框示出了替代的處理器500,其具有多個核502a-n、位于系統(tǒng)代理單元510中的一組一個或多個集成存儲器控制器單元514的以及集成圖形邏輯508。

存儲器層次結(jié)構(gòu)包括核內(nèi)的一個或多個層級的高速緩存、一組或一個或多個共享高速緩存單元506以及耦合到集成存儲器控制器單元514的集合的外部存儲器(未示出)。共享高速緩存單元506的集合可以包括一個或多個中級高速緩存,諸如,第2級(l2)、第3級(l3)、第4級(l4),或其他層級的高速緩存,末級高速緩存(llc),和/或上述各項的組合。雖然在一個實(shí)施例中,基于環(huán)的互連單元512將集成圖形邏輯508、共享高速緩存單元的集合506和系統(tǒng)代理單元510進(jìn)行互連,但替代的實(shí)施例也可使用任何數(shù)量的公知技術(shù)來互連此類單元。

在一些實(shí)施例中,核502a-n中的一個或多個能夠?qū)崿F(xiàn)多線程操作。系統(tǒng)代理510包括協(xié)調(diào)并操作核502a-n的那些組件。系統(tǒng)代理單元510可包括例如功率控制單元(pcu)和顯示單元。pcu可以是或可包括用于調(diào)節(jié)核502a-n和集成圖形邏輯508的功率狀態(tài)所需的邏輯和組件。顯示單元用于驅(qū)動一個或多個從外部連接的顯示器。

核502a-n在架構(gòu)和/或指令集方面可以是同構(gòu)或異構(gòu)的。例如,核502a-n中的一些可以是有序的,而另一些是亂序的。作為另一個示例,核502a-n中的兩個或更多能夠執(zhí)行相同的指令集,而其他核僅能夠執(zhí)行該指令集的子集或不同的指令集。

處理器可以是通用處理器,諸如酷睿(coretm)i3、i5、i7、2duo和quad、至強(qiáng)(xeontm)、安騰(itaniumtm)、xscaletm或strongarmtm處理器,這些均可以從加利福尼亞圣克拉拉市的英特爾公司獲得?;蛘撸幚砥骺梢詠碜粤硪粋€公司,諸如來自arm控股公司、mips等。處理器可以是專用處理器,諸如,例如,網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、協(xié)處理器、嵌入式處理器,等等。該處理器可以被實(shí)現(xiàn)在一個或多個芯片上。處理器500可以是一個或多個襯底的一部分,和/或可以使用諸如例如bicmos、cmos或nmos等的多個工藝技術(shù)中的任何一個技術(shù)將該處理器實(shí)現(xiàn)在一個或多個襯底上。

圖6-8是適于包括處理器500的示例性系統(tǒng),而圖9是可包括核502中的一個或多個的示例性芯片上系統(tǒng)(soc)。本領(lǐng)域已知的對膝上型設(shè)備、臺式機(jī)、手持pc、個人數(shù)字助理、工程工作站、服務(wù)器、網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)集線器、交換機(jī)、嵌入式處理器、數(shù)字信號處理器(dsp)、圖形設(shè)備、視頻游戲設(shè)備、機(jī)頂盒、微控制器、蜂窩電話、便攜式媒體播放器、手持設(shè)備以及各種其它電子設(shè)備的其它系統(tǒng)設(shè)計和配置也是合適的。一般地,能夠包含本文中所公開的處理器和/或其它執(zhí)行邏輯的多個系統(tǒng)或電子設(shè)備一般都是合適的。

現(xiàn)在參考圖6,所示出的是根據(jù)本發(fā)明一個實(shí)施例的系統(tǒng)600的框圖。系統(tǒng)600可以包括耦合至圖形存儲器控制器中樞(gmch)620的一個或多個處理器610、615。在圖6中以虛線表示附加的處理器615的可選的性質(zhì)。

每個處理器610、615可以是處理器500的某個版本。然而,應(yīng)當(dāng)注意,集成圖形邏輯和集成存儲器控制單元不太可能出現(xiàn)在處理器610和615中。圖6示出了gmch620可以耦合至存儲器640,該存儲器640可以是例如動態(tài)隨機(jī)存取存儲器(dram)。對于至少一個實(shí)施例,dram可以與非易失性高速緩存相關(guān)聯(lián)。

gmch620可以是芯片組或芯片組的部分。gmch620可以與處理器610、615進(jìn)行通信,并控制處理器610、615與存儲器640之間的交互。gmch620還可擔(dān)當(dāng)處理器610、615和系統(tǒng)600的其他元件之間的加速總線接口。對于至少一個實(shí)施例,gmch620經(jīng)由諸如前端總線(fsb)695之類的多點(diǎn)總線與處理器610、615進(jìn)行通信。

此外,gmch620耦合至顯示器645(諸如平板顯示器)。gmch620可包括集成圖形加速器。gmch620進(jìn)一步耦合至輸入/輸出(i/o)控制器中樞(ich)650,該輸入/輸出(i/o)控制器中樞(ich)650可用于將各種外圍設(shè)備耦合至系統(tǒng)600。在圖6的實(shí)施例中作為示例示出了外部圖形設(shè)備660以及另一外圍設(shè)備670,該外部圖形設(shè)備660可以是耦合至ich650的分立圖形設(shè)備。

替代地,附加的或不同的處理器也可存在于系統(tǒng)600中。例如,附加的處理器615可以包括與處理器610相同的附加的處理器、與處理器610異構(gòu)的或不對稱的附加的處理器、加速器(例如,圖形加速器或數(shù)字信號處理(dsp)單元)、現(xiàn)場可編程門陣列或任何其他處理器。在物理資源610和615之間會存在包括架構(gòu)、微架構(gòu)、熱和功耗特征等的一系列品質(zhì)度量方面的各種差異。這些差異可以有效顯示為處理器610和615之間的不對稱性和異構(gòu)性。對于至少一個實(shí)施例,各種處理器610和615可駐留在同一管芯封裝中。

現(xiàn)在參照圖7,所示出的是根據(jù)本發(fā)明實(shí)施例的第二系統(tǒng)700的框圖。如圖7所示,多處理器系統(tǒng)700是點(diǎn)對點(diǎn)互連系統(tǒng),并且包括經(jīng)由點(diǎn)對點(diǎn)互連750而被耦合的第一處理器770和第二處理器780。處理器770和780中的每一個可以是處理器500的某個版本(如處理器610、615中的一個或多個)。

雖然僅以兩個處理器770、780來示出,但是應(yīng)當(dāng)理解本發(fā)明的范圍不限于此。在其他實(shí)施例中,在給定處理器中可存在一個或多個附加處理器。

處理器770和780示出為分別包括集成存儲器控制器單元772和782。處理器770還包括點(diǎn)對點(diǎn)(p-p)接口776和778作為其總線控制器單元的部分;類似地,第二處理器780包括p-p接口786和788。處理器770、780可以經(jīng)由使用點(diǎn)對點(diǎn)(p-p)接口電路778、788的p-p接口750來交換信息。如圖7所示,imc772和782將處理器耦合至相應(yīng)的存儲器,即,存儲器732和存儲器734,它們可以是本地連接到相應(yīng)的處理器的主存儲器的部分。

處理器770、780可各自經(jīng)由使用點(diǎn)對點(diǎn)接口電路776、794、786、798的各個p-p接口752、754與芯片組790交換信息。芯片組790還可以經(jīng)由高性能圖形接口739與高性能圖形電路738交換信息。

共享高速緩存(未示出)可被包括在任一處理器中,或在兩個處理器的外部但經(jīng)由p-p互連與這些處理器連接,從而如果處理器被置于低功率模式,則任一個或這兩個處理器的本地高速緩存信息可被存儲在該共享的高速緩存中。

芯片組790可經(jīng)由接口796耦合至第一總線716。在一個實(shí)施例中,第一總線716可以是外圍組件互連(pci)總線,或諸如pciexpress總線或其它第三代i/o互連總線之類的總線,但本發(fā)明的范圍并不受此限制。

如圖7所示,各種i/o設(shè)備714可連同總線橋718一起耦合到第一總線716,總線橋718將第一總線716耦合到第二總線720。在一個實(shí)施例中,第二總線720可以是低引腳數(shù)(lpc)總線。在一個實(shí)施例中,各種設(shè)備可以耦合至第二總線720,包括例如,鍵盤和/或鼠標(biāo)722、通信設(shè)備727以及存儲單元728(諸如,可包括指令/代碼和數(shù)據(jù)730的盤驅(qū)動器或其他大容量存儲設(shè)備)。此外,音頻i/o724可以被耦合到第二總線720。注意,其他架構(gòu)是可能的。例如,代替圖7的點(diǎn)對點(diǎn)架構(gòu),系統(tǒng)可以實(shí)現(xiàn)多分支總線或其他此類架構(gòu)。

現(xiàn)在參照圖8,所示出的是根據(jù)本發(fā)明實(shí)施例的第三系統(tǒng)800的框圖。圖7和圖8中的類似元件使用類似附圖標(biāo)記,且在圖8中省略了圖7的某些方面以避免使圖8的其他方面模糊。

圖8示出處理器870和880可分別包括集成存儲器和i/o控制邏輯(“cl”)872和882。對于至少一個實(shí)施例,cl872和882可包括諸如以上結(jié)合圖5和7所描述的集成存儲器控制器單元。此外,cl872、882還可以包括i/o控制邏輯。圖8示出不僅存儲器832和834耦合至cl872和882,而且i/o設(shè)備814也耦合至控制邏輯872和882。傳統(tǒng)i/o設(shè)備815被耦合至芯片組890。

現(xiàn)在參照圖9,所示出的是根據(jù)本發(fā)明的實(shí)施例的soc900的框圖。圖5中相似的部件具有同樣的附圖標(biāo)記。另外,虛線框是更先進(jìn)的soc的可選特征。在圖9中,互連單元902被耦合至:應(yīng)用處理器910,其包括一組一個或多個核502a-n以及共享高速緩存單元506;系統(tǒng)代理單元510;總線控制器單元516;集成存儲器控制器單元514;一組一個或多個媒體處理器920,其可包括集成圖形邏輯508、用于提供靜止和/或視頻照相功能的圖像處理器924、用于提供硬件音頻加速的音頻處理器926、用于提供視頻編碼/解碼加速的視頻處理器928;靜態(tài)隨機(jī)存取存儲器(sram)單元930;直接存儲器存取(dma)單元932;以及顯示單元940,其用于耦合至一個或多個外部顯示器。

圖10示出處理器,包括中央處理單元(cpu)和圖形處理單元(gpu),該處理器可執(zhí)行根據(jù)一個實(shí)施例的至少一條指令。在一個實(shí)施例中,執(zhí)行根據(jù)至少一個實(shí)施例的操作的指令可由cpu來執(zhí)行。在另一實(shí)施例中,指令可以由gpu來執(zhí)行。在又一實(shí)施例中,指令可以由gpu和cpu所執(zhí)行的操作的組合來執(zhí)行。例如,在一個實(shí)施例中,根據(jù)一個實(shí)施例的指令可被接收,并被解碼,以便在gpu上執(zhí)行。然而,經(jīng)解碼的指令中的一個或多個操作可由cpu來執(zhí)行,并且結(jié)果被返回到gpu,以便進(jìn)行指令的最終引退。相反,在一些實(shí)施例中,cpu可作為主處理器,而gpu作為協(xié)處理器。

在一些實(shí)施例中,受益于高度并行化的吞吐量處理器的指令可由gpu來執(zhí)行,而受益于處理器(這些處理器受益于深度流水線架構(gòu))性能的指令可由cpu來執(zhí)行。例如,圖形、科學(xué)應(yīng)用、金融應(yīng)用以及其他并行工作負(fù)荷可受益于gpu的性能并相應(yīng)地被執(zhí)行,而更多的序列化應(yīng)用(例如,操作系統(tǒng)內(nèi)核或應(yīng)用代碼)更適于cpu。

在圖10中,處理器1000包括,cpu1005、gpu1010、圖像處理器1015、視頻處理器1020、usb控制器1025、uart控制器1030、spi/sdio控制器1035、顯示設(shè)備1040、高清晰度多媒體接口(hdmi)控制器1045、mipi控制器1050、閃存存儲器控制器1055、雙數(shù)據(jù)率(ddr)控制器1060、安全引擎1065、i2s/i2c(集成跨芯片聲音/跨集成電路)接口1070。其他邏輯和電路(包括更多的cpu或gpu以及其他外圍設(shè)備接口控制器)可被包括在圖10的處理器中。

至少一個實(shí)施例的一個或多個方面可由存儲在表示處理器內(nèi)的各種邏輯的機(jī)器可讀介質(zhì)上的表示性數(shù)據(jù)來實(shí)現(xiàn),當(dāng)機(jī)器讀取該表示性數(shù)據(jù)時,該表示性數(shù)據(jù)使得該機(jī)器用于制造執(zhí)行本文所述的技術(shù)的邏輯??蓪⒋祟惐硎?即所謂“ip核”)存儲在有形的機(jī)器可讀介質(zhì)(“磁帶”)上,并將其提供給各種顧客或生產(chǎn)設(shè)施,以便加載到實(shí)際制作該邏輯或處理器的制造機(jī)器中。例如,ip核(諸如由arm控股公司所開發(fā)的cortextm處理器族以及由中國科學(xué)院計算機(jī)技術(shù)研究所(ict)所開發(fā)的龍芯ip核)可被授權(quán)或銷售給各種客戶或受許可方,諸如德州儀器、高通、蘋果、或三星,并被實(shí)現(xiàn)在由這些客戶或受許可方生產(chǎn)的處理器中。

圖11示出根據(jù)一個實(shí)施例的ip核開發(fā)的框圖。存儲設(shè)備1130包括仿真軟件1120和/或硬件或軟件模型1110。在一個實(shí)施例中,表示ip核設(shè)計的數(shù)據(jù)可經(jīng)由存儲器1140(例如,硬盤)、有線連接(例如,互聯(lián)網(wǎng))1150或無線連接1160而被提供給存儲設(shè)備1130。由仿真工具和模型所生成的ip核信息可隨后被發(fā)送到生產(chǎn)設(shè)施,可由第三方在該生產(chǎn)設(shè)施中制造該ip核以執(zhí)行根據(jù)至少一個實(shí)施例的至少一條指令。

在一些實(shí)施例中,一條或多條指令可以對應(yīng)于第一類型或架構(gòu)(例如,x86),并且可在不同類型或架構(gòu)(例如,arm)的處理器上被轉(zhuǎn)換或仿真。根據(jù)一個實(shí)施例,因此可在任何處理器或處理器類型(包括arm、x86、mips、gpu或其他處理器類型或架構(gòu))上執(zhí)行指令。

圖12示出了根據(jù)一個實(shí)施例的第一類型的指令如何被不同類型的處理器仿真。在圖12中,程序1205包含可執(zhí)行與根據(jù)一個實(shí)施例的指令相同或基本相同的功能的一些指令。然而,程序1205的指令可以是與處理器1215不同或不兼容的類型和/或格式,這意味著不能夠由處理器1215原生地執(zhí)行程序1205中的類型的指令。然而,借助于仿真邏輯1210,將程序1205的指令轉(zhuǎn)換成能夠由處理器1215原生執(zhí)行的指令。在一個實(shí)施例中,仿真邏輯被具體化在硬件中。在另一實(shí)施例中,將仿真邏輯具體化在有形的機(jī)器可讀介質(zhì)中,該機(jī)器可讀介質(zhì)包含用于將程序1205中的該類指令轉(zhuǎn)換為能由處理器1215原生地執(zhí)行的類型的軟件。在其他實(shí)施例中,仿真邏輯是固定功能或可編程硬件和存儲在有形的機(jī)器可讀介質(zhì)上的程序的組合。在一個實(shí)施例中,處理器包含仿真邏輯,而在其他實(shí)施例中,仿真邏輯在處理器之外,并且由第三方提供。在一個實(shí)施例中,通過執(zhí)行被包括在處理器中或者與該處理器相關(guān)聯(lián)的微代碼或固件,處理器能夠加載被具體化在包含軟件的有形的機(jī)器可讀介質(zhì)中的仿真邏輯。

圖13是根據(jù)本發(fā)明的實(shí)施例的對照使用軟件指令轉(zhuǎn)換器將源指令集中的二進(jìn)制指令轉(zhuǎn)換成目標(biāo)指令集中的二進(jìn)制指令的框圖。在所示的實(shí)施例中,指令轉(zhuǎn)換器是軟件指令轉(zhuǎn)換器,但作為替代,該指令轉(zhuǎn)換器可以用軟件、固件、硬件或其各種組合來實(shí)現(xiàn)。圖13示出可使用x86編譯器1304來編譯利用高級語言1302的程序,以生成可由具有至少一個x86指令集核的處理器1316原生地執(zhí)行的x86二進(jìn)制代碼1306。具有至少一個x86指令集核的處理器1316表示任何處理器,這些處理器能通過兼容地執(zhí)行或以其他方式處理以下內(nèi)容來執(zhí)行與具有至少一個x86指令集核的英特爾處理器基本相同的功能:1)英特爾x86指令集核的指令集的本質(zhì)部分,或2)目標(biāo)為在具有至少一個x86指令集核的英特爾處理器上運(yùn)行以取得與具有至少一個x86指令集核的英特爾處理器基本相同的結(jié)果的應(yīng)用或其他程序的目標(biāo)代碼版本。x86編譯器1304表示用于生成x86二進(jìn)制代碼1306(例如,目標(biāo)代碼)的編譯器,該x86二進(jìn)制代碼1306可利用或不利用附加的鏈接處理而在具有至少一個x86指令集核的處理器1316上執(zhí)行。類似地,圖13示出可以使用替代的指令集編譯器1308來編譯高級語言1302的程序以生成可由不具有至少一個x86指令集核的處理器1314(例如,具有執(zhí)行加利福尼亞州桑尼維爾市的mips技術(shù)公司的mips指令集和/或執(zhí)行加利福尼州桑尼維爾市的arm控股公司的arm指令集的核的處理器)原生地執(zhí)行的替代的指令集二進(jìn)制代碼1310。指令轉(zhuǎn)換器1312用于將x86二進(jìn)制代碼1306轉(zhuǎn)換成可以由不具有x86指令集核的處理器1314原生地執(zhí)行的代碼。該轉(zhuǎn)換后的代碼不大可能與替代的指令集二進(jìn)制代碼1310相同,因?yàn)槟軌蜻@樣做的指令轉(zhuǎn)換器難以制造;然而,轉(zhuǎn)換后的代碼將完成通用操作,并且將由來自替代指令集的指令構(gòu)成。因此,指令轉(zhuǎn)換器1312表示軟件、固件、硬件或它們的組合,這些軟件、固件、硬件或它們的組合通過仿真、模擬或任何其他過程允許不具有x86指令集處理器或核的處理器或其他電子設(shè)備執(zhí)行x86二進(jìn)制代碼1306。

圖14a示出用于為安全飛地頁面高速緩存epc1460提供多處理能力的處理系統(tǒng)1401的實(shí)施例,包括使用飛地子創(chuàng)建指令以在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地。系統(tǒng)1401包括系統(tǒng)存儲器1490和處理器1402。處理器1402包括第一硬件線程或邏輯處理器1420和第二硬件線程或邏輯處理器1430。將會理解,雖然出于簡化的目的將處理器1402示為包括兩個邏輯處理器,每個邏輯處理器表示單個硬件線程,但本發(fā)明不限于此。例如,諸如處理器1402之類的處理器或本文中示出的其它處理器具有若干邏輯處理器核是常見的,這些邏輯處理器核可能或可能不共享一些物理資源(例如epc1460)和/或電路系統(tǒng)(例如se單元1470),每個邏輯處理器或處理器核具有能夠同時或并發(fā)執(zhí)行軟件線程的多個硬件線程。

處理器1402還包括安全飛地(se)單元1470和飛地頁面高速緩存epc1460。對于一些實(shí)施例,epc1460可以是更大的高速緩存單元(例如一個或多個一級高速緩存1440和1450或二級高速緩存(未示出))的一部分。對于其它實(shí)施例,epc1460可以是由多個硬件線程、邏輯處理器或處理核共享的單獨(dú)結(jié)構(gòu)或分布式結(jié)構(gòu)(例如高速緩存1440和高速緩存1450),以存儲用于頁面(例如1442、1446和1452)的地址或與其相關(guān)聯(lián)的安全數(shù)據(jù),頁面被分配給一個或多個安全飛地且可由硬件線程、邏輯處理器或處理核訪問。在一些實(shí)施例中,os可以驅(qū)逐一個頁面或多個頁面(例如頁面1442、1446或1452)、加密數(shù)據(jù)、并且將它們寫回到存儲器(例如經(jīng)加密的頁面1495)或到非易失性存儲器。在一些實(shí)施例中,os然后可從存儲器或非易失性存儲器讀取新頁面(例如頁面1410)、解密數(shù)據(jù)并將經(jīng)解密的頁面存儲在epc1460中。分頁過程(例如其中,安全飛地頁面高速緩存存儲器內(nèi)容被加密并被寫回、新頁面從存儲器被加載并解密、tlb條目被轉(zhuǎn)儲清除并替換等)可被以處理器核或邏輯處理器(例如邏輯處理器1420和1430)僅短暫中斷(例如通過ipi)并且然后恢復(fù)直到分頁過程完成的方式來完成。

se單元1470還可包括:由多個硬件線程、邏輯處理器或處理核所共享的單獨(dú)的結(jié)構(gòu)或分布式結(jié)構(gòu)(例如se單元1427和1437),并具有加密單元、完整性保護(hù)單元、訪問控制單元、范圍寄存器、飛地頁面高速緩存映射、時期(epoch)計數(shù)器存儲位置等等。se單元1470還支持用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的飛地子創(chuàng)建指令。

在該示例中,邏輯處理器1420具有解碼級1422、讀取級1424、一個或多個執(zhí)行單元(例如執(zhí)行單元1426)以及寫入級1428。邏輯處理器1420還具有tlb1425,其中可安裝轉(zhuǎn)換以訪問epc1460。邏輯處理器1430具有解碼級1432、讀取級1434、一個或多個執(zhí)行單元(例如執(zhí)行單元1436)以及寫入級1438。邏輯處理器1430還具有tlb1435,其中可安裝轉(zhuǎn)換以訪問epc1460。邏輯處理器1420和1430的實(shí)施例還可包括其它流水線級(例如如流水線400中所示的),用于執(zhí)行飛地指令以為安全飛地頁面高速緩存epc1460提供多處理能力。邏輯處理器1420和1430的實(shí)施例還可支持用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的飛地子創(chuàng)建指令。

在邏輯處理器1420和1430的實(shí)施例中,響應(yīng)于經(jīng)解碼的飛地子創(chuàng)建指令,一個或多個執(zhí)行單元(例如執(zhí)行單元1426和/或1436)可以將第一安全控制結(jié)構(gòu)(secs)從第一安全存儲區(qū)域(例如1442)復(fù)制到第二安全存儲區(qū)域(例如1452)。進(jìn)一步響應(yīng)于經(jīng)解碼的飛地子創(chuàng)建指令,一個或多個執(zhí)行單元(例如執(zhí)行單元1426和/或1436)可以利用與新創(chuàng)建的子進(jìn)程相關(guān)聯(lián)的唯一飛地標(biāo)識符(例如1453)來初始化第二secs數(shù)據(jù),并且在第二secs數(shù)據(jù)(例如在1452處)中記錄到第一secs數(shù)據(jù)(例如在1442處)的第二secs鏈路1444。在一些實(shí)施例中,鏈路1444還可以是到第二secs數(shù)據(jù)(例如在1452處)的雙向鏈路并且也被記錄在第一secs數(shù)據(jù)(例如在1442處)中。

圖14b示出用于為安全飛地頁面高速緩存epc1460提供多處理能力的處理系統(tǒng)1402的另一實(shí)施例,包括使用飛地子復(fù)制指令以在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地。

在該第二示例中,邏輯處理器1420和1430的實(shí)施例還可以支持飛地子復(fù)制指令,飛地子復(fù)制指令用于通過將應(yīng)用數(shù)據(jù)頁面、應(yīng)用代碼頁面、飛地庫代碼頁面等從分配給父進(jìn)程的安全飛地安全地復(fù)制到分配給子進(jìn)程的安全飛地,在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地。在邏輯處理器1420和1430的實(shí)施例中,響應(yīng)于經(jīng)解碼的飛地子復(fù)制指令,一個或多個執(zhí)行單元(例如執(zhí)行單元1426和/或1436)可以標(biāo)識存儲在第二安全存儲區(qū)域(例如1452)的第二secs數(shù)據(jù)中的到第一安全存儲區(qū)域(例如1442)的第一secs數(shù)據(jù)的鏈路(例如1444),并且如果鏈路被標(biāo)識,則將安全數(shù)據(jù)從epc1460中的第一安全存儲區(qū)域(例如在1446處)復(fù)制到epc1460中的第二安全存儲區(qū)域(例如在1456處)。在一些實(shí)施例中,標(biāo)識存儲在第二安全存儲區(qū)域的第二secs數(shù)據(jù)中的到第一secs數(shù)據(jù)的鏈路還可以包括驗(yàn)證兩個secs與相同的加密密鑰相關(guān)聯(lián)。

在邏輯處理器1420和1430的實(shí)施例中,響應(yīng)于經(jīng)解碼的飛地子復(fù)制指令,如果設(shè)置了結(jié)束復(fù)制標(biāo)志,則在飛地子復(fù)制指令執(zhí)行成功地完成后,一個或多個執(zhí)行單元(例如執(zhí)行單元1426和/或1436)還可以將到第一安全存儲區(qū)域的第一安全控制結(jié)構(gòu)數(shù)據(jù)的鏈路(例如1444)從第二安全存儲區(qū)域的第二安全控制結(jié)構(gòu)數(shù)據(jù)移除。在邏輯處理器1420和1430的實(shí)施例中,應(yīng)用可能不能訪問epc1460中的第二安全存儲區(qū)域(例如在1456處),直到至第一安全控制結(jié)構(gòu)數(shù)據(jù)的鏈路(例如1444)被移除。

在邏輯處理器1420和1430的一些替代實(shí)施例中,響應(yīng)于經(jīng)解碼的飛地子復(fù)制指令,一個或多個執(zhí)行單元(例如執(zhí)行單元1426和/或1436)最初可以將第一安全控制結(jié)構(gòu)(secs)從第一安全存儲區(qū)域(例如1442)復(fù)制到第二安全存儲區(qū)域(例如1452)、利用與新創(chuàng)建的子進(jìn)程相關(guān)聯(lián)的唯一飛地標(biāo)識符(例如1453)來初始化第二secs數(shù)據(jù)、以及在第二secs數(shù)據(jù)(例如在1452處)中記錄到第一secs數(shù)據(jù)(例如在1442處)的第二secs鏈路1444和/或也在第一secs數(shù)據(jù)(例如在1442處)中記錄到第二secs數(shù)據(jù)(例如在1452處)的第二secs鏈路1444。

將理解,通過使用包括用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令的飛地指令,父進(jìn)程可以在安全飛地頁面高速緩存(例如epc1460)中創(chuàng)建(即分叉出)子進(jìn)程并且為子進(jìn)程飛地建立副本。還將理解,用于完成相同(或類似)技術(shù)效果的任何軟件系統(tǒng)安全特征可能(如果真的可行)是過于昂貴的和/或性能受限的,以致可以不利地接受更少的安全性措施。

圖15示出處理器核1501中的裝置的實(shí)施例,用于使用指令來為安全飛地頁面高速緩存提供多處理能力,包括在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地。該裝置包括安全飛地(se)單元1502和飛地頁面高速緩存epc1520。對于一些實(shí)施例,epc1520可以是更大的高速緩存單元(例如一級高速緩存l11540或二級高速緩存(未示出))的一部分。對于其它實(shí)施例,epc1520可以是由多個硬件線程、邏輯處理器或處理核共享的單獨(dú)結(jié)構(gòu)或分布式結(jié)構(gòu),以存儲用于頁面(例如1542、1546、1552和1556)的地址的或與其相關(guān)聯(lián)的安全數(shù)據(jù),頁面被分配給一個或多個安全飛地(例如父飛地1504和/或子飛地1505)且可由硬件線程、邏輯處理器或處理核(例如處理器核1501)訪問。se單元1502可以包括加密單元1510、完整性保護(hù)單元1512、訪問控制單元1514、范圍寄存器1516和飛地頁面高速緩存映射epc1518。se單元1502還可包括飛地分叉指令1503,包括:echildcreate指令1532、echildcopy指令1534、echildcopyr指令1536以及未示出的其它飛地指令(例如aex指令、eload指令、ewriteback指令、eexit指令、eenter指令、eresume指令等等)。

處理器核1501還包括tlb1525,其中可安裝轉(zhuǎn)換以訪問epc1520。處理器核1501還包括解碼級1522、讀取級1524、一個或多個執(zhí)行單元(例如執(zhí)行單元1526)以及寫入級1528。處理器核1501的實(shí)施例還可包括其它流水線級(例如如流水線400中所示),用于執(zhí)行飛地分叉指令1503以提供多處理能力,包括中斷和恢復(fù)用于在安全飛地頁面高速緩存epc1520中使進(jìn)程分叉和建立子飛地的指令。

在一個實(shí)施例中,echildcreate指令1532指定epc1520中的(第二)安全存儲區(qū)域作為目的地頁面1552地址操作數(shù)(例如安全存儲區(qū)域的有效地址可以被隱式地或顯式地指定為諸如rcx的寄存器中的間接目的地操作數(shù))。響應(yīng)于經(jīng)解碼的echildcreate指令1532,處理器核1501的實(shí)施例中的一個或多個執(zhí)行單元(例如執(zhí)行單元1526)可以將第一安全控制結(jié)構(gòu)(secs)從第一安全存儲區(qū)域(例如1542)復(fù)制到第二安全存儲區(qū)域(例如1552)。echildcreate指令1532的實(shí)施例還可以隱式地或顯式地指定第一安全存儲區(qū)域的有效地址作為寄存器(例如諸如rbx)中的間接源操作數(shù)。進(jìn)一步響應(yīng)于經(jīng)解碼的echildcreate指令1532,一個或多個執(zhí)行單元(例如執(zhí)行單元1526)可以利用與新創(chuàng)建的子進(jìn)程相關(guān)聯(lián)的唯一飛地標(biāo)識符(例如1553)來初始化第二secs數(shù)據(jù),并且在第二secs數(shù)據(jù)(例如在1552處)中記錄到第一secs數(shù)據(jù)(例如在1542處)的第二secs鏈路1544。在一些實(shí)施例中,鏈路1544還可以是到第二secs數(shù)據(jù)(例如在1552處)的雙向鏈路并且也被記錄在第一secs數(shù)據(jù)(例如在1542處)中。

在一個實(shí)施例中,被分配給父進(jìn)程的對應(yīng)的安全飛地1504的第一安全存儲區(qū)域(例如在1542和/或1546處)會與第一密鑰(例如用于加密和/或解密安全數(shù)據(jù))相關(guān)聯(lián),并且被分配給子進(jìn)程的對應(yīng)的第二安全飛地1505的第二安全存儲區(qū)域(例如在1552和/或1556處)也會與相同的第一密鑰相關(guān)聯(lián)。一些飛地分叉指令1503的實(shí)施例還可以包括驗(yàn)證兩個secs與相同的加密密鑰相關(guān)聯(lián)。處理器核1501的實(shí)施例可以支持飛地子復(fù)制指令(例如echildcopy指令1534和/或echildcopyresume指令1536),以通過將應(yīng)用數(shù)據(jù)頁面、應(yīng)用代碼頁面、飛地庫代碼頁面等從分配給父進(jìn)程的安全飛地1504安全地復(fù)制到分配給子進(jìn)程的安全飛地1505來中斷和恢復(fù)用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令。

在一個實(shí)施例中,echildcopy指令1534指定epc1520中的(第一)安全存儲區(qū)域作為源頁面1546地址操作數(shù)。在處理器核1501的實(shí)施例中,響應(yīng)于經(jīng)解碼的echildcopy指令1534(或echildcopyr指令1536),一個或多個執(zhí)行單元(例如執(zhí)行單元1526)可以標(biāo)識存儲在第二安全存儲區(qū)域(例如子飛地1505的1552)的第二secs數(shù)據(jù)中的到第一安全存儲區(qū)域(例如父飛地1504的1542)的第一secs數(shù)據(jù)的鏈路(例如1544),并且如果鏈路被標(biāo)識,則將安全數(shù)據(jù)從epc1560中的第一安全存儲區(qū)域(例如在父飛地1504的1546處)復(fù)制到epc1560中的第二安全存儲區(qū)域(例如在子飛地1505的1556處)。在一些實(shí)施例中,標(biāo)識存儲在第二安全存儲區(qū)域(例如在子飛地1505的1556處)的第二secs數(shù)據(jù)(例如在1552處)中的到第一secs數(shù)據(jù)(例如在1542處)的鏈路(例如1544)還可以包括驗(yàn)證兩個secs與相同的加密密鑰相關(guān)聯(lián)。

在處理器核1501的實(shí)施例中,響應(yīng)于經(jīng)解碼的echildcopy指令1534(或echildcopyr指令1536),如果設(shè)置了結(jié)束復(fù)制標(biāo)志,則在echildcopy指令1534(或echildcopyr指令1536)執(zhí)行成功地完成后,一個或多個執(zhí)行單元(例如執(zhí)行單元1526)還可以將到第一安全存儲區(qū)域(例如1504)的第一secs數(shù)據(jù)的鏈路(例如1544)從第二安全存儲區(qū)域(例如1505)的secs數(shù)據(jù)移除。在處理器核1501的實(shí)施例中,應(yīng)用可能不能訪問epc1560中的第二安全存儲區(qū)域(例如在子飛地1505的1556處),直到至第一secs數(shù)據(jù)的鏈路(例如1544)被移除。

在處理器核1501的一些替代實(shí)施例中,響應(yīng)于經(jīng)解碼的echildcopy指令1534,一個或多個執(zhí)行單元(例如執(zhí)行單元1526)最初可以將第一secs從第一安全存儲區(qū)域(例如父飛地1504的1542)復(fù)制到第二安全存儲區(qū)域(例如子飛地1505的1552)、利用與新創(chuàng)建的子進(jìn)程相關(guān)聯(lián)的唯一飛地標(biāo)識符(例如1553)來初始化第二secs數(shù)據(jù)、以及在第二secs數(shù)據(jù)(例如在1552處)中記錄到第一secs數(shù)據(jù)(例如在1542處)的第二secs鏈路1544和/或也在第一secs數(shù)據(jù)(例如在1542處)中記錄到第二secs數(shù)據(jù)(例如在1552處)的第二secs鏈路1544。

將理解,管理許可、物理存儲器和/或改變映射仍可通過操作系統(tǒng)(os)管理,但當(dāng)存儲器內(nèi)容受保護(hù)時(例如在安全飛地中),os未被許可或未被信任來訪問飛地私有存儲器的實(shí)際受保護(hù)的內(nèi)容以在飛地私有存儲器中使進(jìn)程分叉和創(chuàng)建進(jìn)程的子副本。利用在安全飛地頁面高速緩存中使安全飛地進(jìn)程分叉和建立子飛地的指令和處理邏輯,可在不能信任os的情況下,實(shí)現(xiàn)確保私有存儲器內(nèi)容的安全性和/或完整性并且管理使進(jìn)程分叉和建立安全應(yīng)用頁面的子副本等的技術(shù)限制,無需額外的精巧的硬件支持和/或設(shè)計努力。

圖16示出用于在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的過程1601的一個實(shí)施例的流程圖。通過處理塊來執(zhí)行過程1601和本文中公開的其他過程,這些處理塊可包括專用硬件或可由通用機(jī)器或?qū)S脵C(jī)器或通用機(jī)器和專用機(jī)器兩者的組合執(zhí)行的軟件或固件操作代碼。

在過程1601的處理塊1610中,父進(jìn)程1604執(zhí)行對系統(tǒng)軟件防護(hù)擴(kuò)展(sgx)庫的分叉調(diào)用。例如,可以對特殊庫(例如sgxlib1648,稱為libsgx)作出來自飛地1604的ocall(os調(diào)用)而不是常見的分叉系統(tǒng)調(diào)用。結(jié)果,在處理塊1620中,執(zhí)行echildcreate命令或指令(例如echildcreate指令1532)。在一個實(shí)施例中,echildcreate命令或指令指定epc中的安全存儲區(qū)域作為目的地頁面1652地址操作數(shù)(例如安全存儲區(qū)域的有效地址可以被隱式地或顯式地指定為諸如rcx的寄存器中的間接目的地操作數(shù))。響應(yīng)于echildcreate命令或指令,在處理塊1630中,一個或多個執(zhí)行單元(例如執(zhí)行單元1426、1436或1526)將第一安全控制結(jié)構(gòu)(secs)從父安全存儲區(qū)域(例如飛地1604的1642)復(fù)制到子安全存儲區(qū)域(例如到飛地1605的1652)。echildcreate命令或指令的實(shí)施例還可以隱式地或顯式地指定父安全存儲區(qū)域的有效地址作為寄存器(例如諸如rbx)中的間接源操作數(shù)。進(jìn)一步響應(yīng)于echildcreate命令或指令,處理塊1640中的一個或多個執(zhí)行單元利用與新創(chuàng)建的子進(jìn)程相關(guān)聯(lián)的唯一飛地標(biāo)識符(例如1653)來初始化第二secs數(shù)據(jù)(例如在1652中),并且在第二secs數(shù)據(jù)(例如在1652處)中記錄到第一secs數(shù)據(jù)(例如在1642處)的第二secs鏈路1644。在一些實(shí)施例中,鏈路1644還可以是到第二secs數(shù)據(jù)(例如在1652處)的雙向鏈路并且也被記錄在第一secs數(shù)據(jù)(例如在1642處)中。

在一個實(shí)施例中,被分配給父進(jìn)程的對應(yīng)的安全飛地1604的第一安全存儲區(qū)域(例如在1642和/或1646處)會與第一密鑰(例如用于加密和/或解密安全數(shù)據(jù))相關(guān)聯(lián),并且被分配給子進(jìn)程的對應(yīng)的第二安全飛地1605的第二安全存儲區(qū)域(例如在1652和/或1656處)也會與相同的第一密鑰相關(guān)聯(lián)。一些飛地分叉指令的實(shí)施例還可以包括直接地或間接地驗(yàn)證兩個secs與相同的加密密鑰相關(guān)聯(lián)。

在處理塊1650中,執(zhí)行一個或多個echildcopy命令或指令(例如echildcopy指令1534)。在一個實(shí)施例中,echildcopy命令或指令指定epc中的安全存儲區(qū)域作為源頁面(例如1646、1647或1648)地址操作數(shù)。在一些實(shí)施例中,響應(yīng)于echildcopy命令或指令,一個或多個執(zhí)行單元(例如執(zhí)行單元1426、1436或1526)可以標(biāo)識存儲在第二安全存儲區(qū)域(例如子飛地1605的1652)的第二secs數(shù)據(jù)中的到第一安全存儲區(qū)域(例如父飛地1604的1642)的第一secs數(shù)據(jù)的鏈路(例如1644),并且如果鏈路被標(biāo)識,則將安全數(shù)據(jù)從epc中的第一安全存儲區(qū)域(例如在父飛地1604的1646處)復(fù)制到epc中的第二安全存儲區(qū)域(例如在子飛地1605的1656處)。在一些實(shí)施例中,標(biāo)識存儲在第二安全存儲區(qū)域(例如在子飛地1605的1656處)的第二secs數(shù)據(jù)(例如在1652處)中的到第一secs數(shù)據(jù)(例如在1642處)的鏈路(例如1644)還可以包括驗(yàn)證兩個secs與相同的加密密鑰相關(guān)聯(lián)。

在處理塊1660中,執(zhí)行最后的echildcopy命令或指令(例如echildcopy指令1534或echildcopyr指令1536)。在一些實(shí)施例中,響應(yīng)于最后的echildcopy命令或指令,在最后的echildcopy命令或指令成功完成后(例如當(dāng)設(shè)置了結(jié)束復(fù)制標(biāo)志時),一個或多個執(zhí)行單元(例如執(zhí)行單元1426、1436或1526)還可以將到第一安全存儲區(qū)域(例如1504)的父secs數(shù)據(jù)的echild鏈路(例如1644)從第二安全存儲區(qū)域(例如1505)的secs數(shù)據(jù)移除。在一些實(shí)施例中,應(yīng)用可能不能訪問epc中的第二安全存儲區(qū)域(例如在子飛地1605的1656、1657或1658處),直到至父secs數(shù)據(jù)的echild鏈路(例如1644)被移除。

在一些實(shí)施例中,本文中所公開的指令和邏輯在用于使進(jìn)程分叉的secs復(fù)制操作(諸如echildcreate命令或指令(例如echildcreate指令1532))中以及在安全飛地內(nèi)的頁面復(fù)制操作(諸如echildcopy命令或指令(例如echildcopy指令1534或echildcopyr指令1536))中能夠被中斷和恢復(fù)。因此,可以保證使進(jìn)程分叉和建立安全飛地的頁面的子副本的向前進(jìn)展,并且服務(wù)(諸如語音、視頻和實(shí)時事務(wù))中的不可接受的小故障可以通過及時服務(wù)待定中斷來避免。將理解,通過使用此類飛地指令來在安全epc中使進(jìn)程分叉和建立子飛地,父進(jìn)程可以在epc中安全地創(chuàng)建(即分叉出)子進(jìn)程并且為子進(jìn)程飛地建立副本。還將理解,在不具有對此類指令的處理器支持的情況下,用于完成相同(或類似)技術(shù)效果的任何軟件系統(tǒng)安全特征可能(如果真的可行)是過于昂貴的和/或性能受限的,以致可以不利地接受更少的安全性措施。

圖17a示出使用飛地子創(chuàng)建指令來在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的過程1701的一個實(shí)施例的流程圖。在處理塊1710中,對飛地子創(chuàng)建指令進(jìn)行解碼。飛地子創(chuàng)建指令的一些實(shí)施例可以將以下參數(shù)隱式地或顯式地指定為操作數(shù):飛地頁面高速緩存(epc)中的分配給父進(jìn)程的對應(yīng)的第一安全飛地的用于存儲第一安全控制結(jié)構(gòu)(secs)的第一安全存儲區(qū)域,以及epc中的分配給子進(jìn)程的對應(yīng)的第二安全飛地的用于存儲第二secs的第二安全存儲區(qū)域。例如,飛地子創(chuàng)建指令的實(shí)施例可以指定第一安全存儲區(qū)域的有效地址作為諸如rbx的寄存器中的間接操作數(shù)。飛地子創(chuàng)建指令的實(shí)施例可以指定第二安全存儲區(qū)域的有效地址作為諸如rcx的寄存器中的間接操作數(shù)。在處理塊1720中,驗(yàn)證epc中的任何被指定的參數(shù)。如果在處理塊1725中確定epc中的任意被指定的參數(shù)是無效的,則處理前進(jìn)至處理塊1790,其中返回失敗錯誤。否則,處理前進(jìn)至處理塊1730,其中訪問epc以將第一secs從第一安全存儲區(qū)域復(fù)制到子進(jìn)程的第二安全存儲區(qū)域。在處理塊1740中,利用與子進(jìn)程相關(guān)聯(lián)的唯一飛地標(biāo)識符來初始化子進(jìn)程的第二secs。在處理塊1750中,記錄第一源secs與第二子secs之間的鏈接(例如在第二子secs中和/或在第一源secs中)。在處理塊1755中,判斷是否成功地執(zhí)行了用于使進(jìn)程分叉和建立子飛地的飛地子創(chuàng)建指令。如果是,則在處理塊1780中引退飛地子創(chuàng)建指令。如果否,則處理前進(jìn)至處理塊1790,其中返回失敗錯誤。

將理解,雖然本文中所公開的過程1701和其他過程的處理塊示出為以迭代方式執(zhí)行,但是只要有可能,可以優(yōu)選地實(shí)現(xiàn)以替代順序、或并發(fā)地、或并行地執(zhí)行。在一些實(shí)施例中,還可以設(shè)置結(jié)束復(fù)制標(biāo)志來指示用于將頁面從父飛地復(fù)制到子進(jìn)程的飛地的最后飛地子復(fù)制指令。當(dāng)設(shè)置結(jié)束復(fù)制標(biāo)志時,在飛地子復(fù)制指令成功完成時,可以將到父secs/飛地id的鏈路從子secs移除。在一些實(shí)施例中,應(yīng)用可能不能從子進(jìn)程的飛地訪問/執(zhí)行,直到至父secs/飛地id的鏈路已經(jīng)被移除。

圖17b示出使用飛地子復(fù)制指令來在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的過程1702的一個實(shí)施例的流程圖。在處理塊1712中,對飛地子復(fù)制指令進(jìn)行解碼。飛地子復(fù)制指令的一些實(shí)施例可以將以下參數(shù)隱式地或顯式地指定為操作數(shù):epc中的分配給父進(jìn)程的對應(yīng)的第一安全飛地的用于存儲第一secs并且用于存儲頁面地址的安全數(shù)據(jù)的第一安全存儲區(qū)域,以及epc中的分配給子進(jìn)程的對應(yīng)的第二安全飛地的用于存儲第二secs并且用于存儲頁面地址的安全數(shù)據(jù)的副本的第二安全存儲區(qū)域。例如,飛地子復(fù)制指令的實(shí)施例可以指定第一安全存儲區(qū)域的有效地址作為諸如rbx的寄存器中的間接操作數(shù)。飛地子復(fù)制指令的實(shí)施例可以指定第二安全存儲區(qū)域的有效地址作為諸如rcx的寄存器中的間接操作數(shù)。在處理塊1722中,驗(yàn)證epc中的任何被指定的參數(shù)。在飛地子復(fù)制指令的一些實(shí)施例中,驗(yàn)證epc中的被指定的參數(shù)可以包括標(biāo)識存儲在第二secs中的到第一secs的鏈接。如果在處理塊1727中確定epc中的任意被指定的參數(shù)是無效的,則處理前進(jìn)至處理塊1790,其中返回失敗錯誤。否則,處理前進(jìn)至處理塊1732,其中如果標(biāo)識了該鏈接,則將來自epc中的第一安全存儲區(qū)域源頁面地址的安全數(shù)據(jù)內(nèi)容復(fù)制到epc中的第二安全存儲區(qū)域。在處理塊1742中,將源頁面地址的飛地頁面高速緩存映射(epcm)條目復(fù)制到子進(jìn)程的epcm條目。在處理塊1752中,將子進(jìn)程的新epcm條目更新至與子進(jìn)程相關(guān)聯(lián)的唯一飛地標(biāo)識符。

在處理塊1752中,判斷是否設(shè)置了結(jié)束復(fù)制(eoc)標(biāo)志。例如,飛地子復(fù)制指令的實(shí)施例可以隱式地或顯式地指定eoc標(biāo)志(即在最后飛地子復(fù)制指令上)作為諸如rdx的寄存器中的操作數(shù)。如果在處理塊1757中確定設(shè)置了eoc標(biāo)志,則在處理塊1762中,在飛地子復(fù)制指令執(zhí)行成功地完成后,移除從第二secs到第一secs的鏈接,并且在處理塊1770中引退飛地子復(fù)制指令。另一方面,如果在處理塊1757中確定未設(shè)置eoc標(biāo)志,則處理直接前進(jìn)至處理塊1770,其中在飛地子復(fù)制指令執(zhí)行成功地完成后引退飛地子復(fù)制指令。

在一些實(shí)施例中,本文中所公開的指令和邏輯能夠在用于使進(jìn)程分叉的secs復(fù)制中以及在安全飛地內(nèi)的頁面復(fù)制操作中被中斷和恢復(fù)。因此,可以保證使進(jìn)程分叉和建立安全飛地的頁面的子副本的向前進(jìn)展,并且服務(wù)(諸如語音、視頻和實(shí)時事務(wù))中的不可接受的小故障可以通過及時服務(wù)待定中斷來避免。將理解,通過使用此類飛地指令來在安全epc中使進(jìn)程分叉和建立子飛地,父進(jìn)程可以在epc中安全地創(chuàng)建(即分叉出)子進(jìn)程并且為子進(jìn)程飛地建立副本。還將理解,在不具有對此類指令的處理器支持的情況下,用于完成相同(或類似)技術(shù)效果的任何軟件系統(tǒng)安全特征可能(如果真的可行)是過于昂貴的和/或性能受限的,以致可以不利地接受減少的安全性措施。

圖18a示出使用飛地子創(chuàng)建指令來在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的可中斷過程1801的一個實(shí)施例的流程圖。在處理塊1810中,對飛地子創(chuàng)建指令進(jìn)行解碼。飛地子創(chuàng)建指令的一些實(shí)施例可以將以下參數(shù)隱式地或顯式地指定為操作數(shù):飛地頁面高速緩存(epc)中的分配給父進(jìn)程的對應(yīng)的第一安全飛地的用于存儲第一安全控制結(jié)構(gòu)(secs)的第一安全存儲區(qū)域,以及epc中的分配給子進(jìn)程的對應(yīng)的第二安全飛地的用于存儲第二secs的第二安全存儲區(qū)域,從而可以驗(yàn)證epc中的任何被指定的參數(shù)。例如,飛地子創(chuàng)建指令的實(shí)施例可以指定第一安全存儲區(qū)域的有效地址作為諸如rbx的寄存器中的間接操作數(shù)。飛地子創(chuàng)建指令的實(shí)施例可以指定第二安全存儲區(qū)域的有效地址作為諸如rcx的寄存器中的間接操作數(shù)。在處理塊1831中,訪問epc,并且向前進(jìn)展以將第一secs從第一安全存儲區(qū)域復(fù)制到子進(jìn)程的第二secs。

在處理塊1835中,判斷將第一secs從第一安全存儲區(qū)域復(fù)制到子進(jìn)程的第二secs是否已經(jīng)完成。如果是,則處理前進(jìn)至處理塊1840,其中利用與子進(jìn)程相關(guān)聯(lián)的唯一飛地標(biāo)識符來初始化子進(jìn)程的第二secs。在處理塊1850中,記錄第一源secs與第二子secs之間的鏈接(例如在第二子secs中和/或在第一源secs中),并且在處理塊1880中,引退飛地子創(chuàng)建指令。

否則,如果在處理塊1835中,將第一secs從第一安全存儲區(qū)域復(fù)制到子進(jìn)程的第二secs還未完成,則在處理塊1821中判斷飛地子創(chuàng)建指令是否被中斷。如果否,則處理可以在處理塊1831中繼續(xù)開始。另一方面,如果飛地子創(chuàng)建指令被中斷,則存在待定中斷,并且處理前進(jìn)至處理塊1822,其中對第一secs的復(fù)制操作的狀態(tài)被設(shè)定檢查點(diǎn)(例如分頁操作的部分完成可以被記錄在飛地頁面高速緩存映射條目中,并且頁面狀態(tài)信息的一部分可以被存儲在對應(yīng)的子頁面的高速緩存行中或一些其他安全存儲設(shè)備中等等)。在處理塊1823中,可以返回咨詢代碼(例如,指示中斷可以被服務(wù))。在處理塊1824中中斷被服務(wù),并且在處理塊1825中飛地子創(chuàng)建指令會被恢復(fù)到會被從第一安全存儲區(qū)域的第一secs復(fù)制的頁面上。處理然后在處理塊1831中重復(fù)開始,直到在處理塊1835中將第一secs從第一安全存儲區(qū)域復(fù)制到子進(jìn)程的第二secs已經(jīng)完成,并且處理前進(jìn)至處理塊1840。

圖18b示出使用飛地子復(fù)制指令來在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的可中斷過程1802的一個實(shí)施例的流程圖。在處理塊1812中,對飛地子復(fù)制指令進(jìn)行解碼。飛地子復(fù)制指令的一些實(shí)施例可以將以下參數(shù)隱式地或顯式地指定為操作數(shù):epc中的分配給父進(jìn)程的對應(yīng)的第一安全飛地的、用于存儲第一secs并且用于存儲頁面地址的安全數(shù)據(jù)的第一安全存儲區(qū)域,以及epc中的分配給子進(jìn)程的對應(yīng)的第二安全飛地的、用于存儲第二secs并且用于存儲頁面地址的安全數(shù)據(jù)的副本的第二安全存儲區(qū)域,從而可以驗(yàn)證epc中的任何被指定的參數(shù),包括標(biāo)識存儲在第二secs中的到第一secs的鏈接。例如,飛地子復(fù)制指令的實(shí)施例可以指定第一安全存儲區(qū)域的有效地址作為諸如rbx的寄存器中的間接操作數(shù)。飛地子復(fù)制指令的實(shí)施例可以指定第二安全存儲區(qū)域的有效地址作為諸如rcx的寄存器中的間接操作數(shù)。在處理塊1820中,子進(jìn)程的飛地頁面高速緩存映射(epcm)條目被檢查/被設(shè)置為與子進(jìn)程相關(guān)聯(lián)的唯一飛地標(biāo)識符。在處理塊1832中,如果標(biāo)識了該鏈接,則訪問epc并且向前進(jìn)展以將安全數(shù)據(jù)內(nèi)容從epc中的第一安全存儲區(qū)域源頁面地址復(fù)制到epc中的第二安全存儲區(qū)域。

在處理塊1835中,判斷將安全數(shù)據(jù)內(nèi)容從第一安全存儲區(qū)域源頁面地址復(fù)制到子進(jìn)程的第二安全存儲區(qū)域是否已經(jīng)完成。如果是,則處理前進(jìn)至處理塊1857,其中判斷是否設(shè)置了結(jié)束復(fù)制(eoc)標(biāo)志。例如,飛地子復(fù)制指令的實(shí)施例可以隱式地或顯式地指定eoc標(biāo)志(即在最后飛地子復(fù)制指令上)作為諸如rdx的寄存器中的操作數(shù)。如果在處理塊1857中確定設(shè)置了eoc標(biāo)志,則在處理塊1862中,在飛地子復(fù)制指令執(zhí)行成功地完成后,移除從第二secs到第一secs的鏈接,并且在處理塊1870中引退飛地子復(fù)制指令。另一方面,如果在處理塊1857中確定未設(shè)置eoc標(biāo)志,則處理直接前進(jìn)至處理塊1870,其中在飛地子復(fù)制指令執(zhí)行成功地完成后引退飛地子復(fù)制指令。

否則,如果在處理塊1835中,將安全數(shù)據(jù)內(nèi)容從第一安全存儲區(qū)域源頁面地址復(fù)制到子進(jìn)程的第二安全存儲區(qū)域還未完成,則在處理塊1821中判斷飛地子復(fù)制指令是否被中斷。如果否,則處理可以在處理塊1820中繼續(xù)開始。另一方面,如果飛地子復(fù)制指令被中斷,則存在待定中斷,并且處理前進(jìn)至處理塊1826,其中epcm被設(shè)置為指示復(fù)制操作的部分完成。在處理塊1827中,頁面狀態(tài)信息的一部分可以被存儲(例如在對應(yīng)的子頁面的末級高速緩存行中或一些其他安全存儲設(shè)備中等等)。在處理塊1828中,中斷被服務(wù),并且在處理塊1829中飛地子復(fù)制指令會被恢復(fù)到會被從第一安全存儲區(qū)域源頁面地址復(fù)制到子進(jìn)程的第二安全存儲區(qū)域的頁面上。處理然后在處理塊1820中重復(fù)開始,直到在處理塊1835中將第一安全存儲區(qū)域源頁面地址復(fù)制到子進(jìn)程的第二安全存儲區(qū)域已經(jīng)完成,并且處理前進(jìn)至處理塊1857。

因此,管理許可、物理存儲器和/或改變映射仍可通過操作系統(tǒng)(os)管理,但當(dāng)存儲器內(nèi)容受保護(hù)時(例如在安全飛地中),os未被許可或未被信任來訪問飛地私有存儲器的實(shí)際受保護(hù)的內(nèi)容。利用在安全飛地頁面高速緩存中使進(jìn)程分叉和建立子飛地的指令和處理邏輯,可在不能信任os的情況下實(shí)現(xiàn)確保私有存儲器內(nèi)容的安全性和/或完整性并且管理使進(jìn)程分叉和建立頁面的子副本的技術(shù)限制,無需精巧的硬件支持和/或設(shè)計努力。

將理解,在過程1802的一些替代實(shí)施例中以及在本文所公開的其它過程中,在可能時,被示為按照特定順序的處理塊也可按照另一順序或并發(fā)地或彼此并行地執(zhí)行。

本文公開的機(jī)制的各實(shí)施例可以被實(shí)現(xiàn)在硬件、軟件、固件或這些實(shí)現(xiàn)方法的組合中。本發(fā)明的實(shí)施例可實(shí)現(xiàn)為在可編程系統(tǒng)上執(zhí)行的計算機(jī)程序或程序代碼,該可編程系統(tǒng)包括至少一個處理器、存儲系統(tǒng)(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入設(shè)備以及至少一個輸出設(shè)備。

可將程序代碼應(yīng)用于輸入指令以執(zhí)行本文描述的功能并產(chǎn)生輸出信息??梢园匆阎绞綄⑤敵鲂畔?yīng)用于一個或多個輸出設(shè)備。為了本申請的目的,處理系統(tǒng)包括具有諸如例如數(shù)字信號處理器(dsp)、微控制器、專用集成電路(asic)或微處理器之類的處理器的任何系統(tǒng)。

程序代碼可以用高級程序化語言或面向?qū)ο蟮木幊陶Z言來實(shí)現(xiàn),以便與處理系統(tǒng)通信。在需要時,也可用匯編語言或機(jī)器語言來實(shí)現(xiàn)程序代碼。事實(shí)上,本文中描述的機(jī)制不限于任何特定編程語言的范圍。在任一情形下,該語言可以是編譯語言或解釋語言。

至少一個實(shí)施例的一個或多個方面可以由存儲在機(jī)器可讀介質(zhì)上的表示性指令來實(shí)現(xiàn),指令表示處理器中的各種邏輯,指令在被機(jī)器讀取時使得該機(jī)器制作用于執(zhí)行本文所述的技術(shù)的邏輯??蓪⒈环Q為“ip核”的此類表示存儲在有形的機(jī)器可讀介質(zhì)上,并將其提供給各種客戶或生產(chǎn)設(shè)施以加載到實(shí)際制造該邏輯或處理器的制造機(jī)器中。

此類機(jī)器可讀存儲介質(zhì)可以包括但不限于通過機(jī)器或設(shè)備制造或形成的制品的非瞬態(tài)的有形安排,其包括存儲介質(zhì),諸如:硬盤;任何其他類型的盤,包括軟盤、光盤、緊致盤只讀存儲器(cd-rom)、緊致盤可重寫(cd-rw)以及磁光盤;半導(dǎo)體器件,例如只讀存儲器(rom)、諸如動態(tài)隨機(jī)存取存儲器(dram)和靜態(tài)隨機(jī)存取存儲器(sram)之類的隨機(jī)存取存儲器(ram)、可擦除可編程只讀存儲器(eprom)、閃存、電可擦除可編程只讀存儲器(eeprom);磁卡或光卡;或適于存儲電子指令的任何其他類型的介質(zhì)。

因此,本發(fā)明的各實(shí)施例還包括非暫態(tài)有形機(jī)器可讀介質(zhì),該介質(zhì)包含指令或包含設(shè)計數(shù)據(jù),諸如硬件描述語言(hdl),它定義本文中描述的結(jié)構(gòu)、電路、裝置、處理器和/或系統(tǒng)特征。這些實(shí)施例也被稱為程序產(chǎn)品。

在一些情形下,指令轉(zhuǎn)換器可用來將指令從源指令集轉(zhuǎn)換至目標(biāo)指令集。例如,指令轉(zhuǎn)換器可以變換(例如使用靜態(tài)二進(jìn)制變換、包括動態(tài)編譯的動態(tài)二進(jìn)制變換)、變形、仿真或以其它方式將指令轉(zhuǎn)換成將由核來處理的一個或多個其它指令。指令轉(zhuǎn)換器可以用軟件、硬件、固件、或其組合實(shí)現(xiàn)。指令轉(zhuǎn)換器可以在處理器上、在處理器外、或者部分在處理器上且部分在處理器外。

因此,公開了用于執(zhí)行根據(jù)至少一個實(shí)施例的一條或多條指令的技術(shù)。雖然已經(jīng)描述并在附圖中示出了某些示例性實(shí)施例,但是應(yīng)當(dāng)理解,此類實(shí)施例僅僅是對本寬泛發(fā)明的說明而非限制,并且本發(fā)明不限于所示出和所描述的特定結(jié)構(gòu)和配置,因?yàn)楸绢I(lǐng)域技術(shù)人員在研究了本公開文本之后可以料知到各種其他修改。在諸如本申請這樣的、發(fā)展迅速且進(jìn)一步的進(jìn)展難以預(yù)見的技術(shù)領(lǐng)域中,所公開的多個實(shí)施例在通過啟用技術(shù)進(jìn)步所促成的配置和細(xì)節(jié)上是容易修改的,同時不背離本公開的原理和所附權(quán)利要求書的范圍。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1