国产精品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>

      處理器核心堆棧擴(kuò)展的制作方法

      文檔序號:6455025閱讀:248來源:國知局
      專利名稱:處理器核心堆棧擴(kuò)展的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及維持處理器的堆棧數(shù)據(jù)結(jié)構(gòu)。
      背景技術(shù)
      常規(guī)處理器維持包含若干控制指令的堆棧數(shù)據(jù)結(jié)構(gòu)("堆棧")。堆棧通常位于處理 器的核心內(nèi)。在處理器核心內(nèi)執(zhí)行的線程可對堆棧執(zhí)行兩個基本操作。控制單元可將控 制指令"推入"到堆棧上或從堆桟"彈出"控制指令。
      推入操作向堆棧的頂部添加控制指令,從而引起先前控制指令被沿著堆棧向下推 動。彈出操作移除且返回堆棧的當(dāng)前頂部控制指令,從而引起先前控制指令沿著堆棧向 上移動一個位置。因此,處理器核心的堆棧根據(jù)后進(jìn)先出(LIFO)方案而動作。
      由于處理器核心內(nèi)存儲器的有限大小,因此堆棧非常小。堆棧的小尺寸限制了可利 用的嵌套控制指令的數(shù)目。將太多控制指令推入到堆棧上導(dǎo)致堆棧溢出,其可引起線程 中的一者或一者以上故障或崩潰。

      發(fā)明內(nèi)容
      本發(fā)明大體上是針對用于控制堆棧溢出的技術(shù)。本文描述的技術(shù)利用位于處理器核 心外部的共用高速緩沖存儲器或存儲器的一部分作為堆棧擴(kuò)展。處理器核心在處理器核 心中的存儲器內(nèi)維持堆棧。處理器核心在處理器核心堆棧超過例如閾值條目數(shù)目的閾值 大小時(shí)將堆棧內(nèi)容的至少一部分轉(zhuǎn)移到駐存在處理器核心外部的堆棧擴(kuò)展。舉例來說, 處理器核心可在核心堆棧變?yōu)槌錆M時(shí)將堆棧內(nèi)容的至少一部分轉(zhuǎn)移到堆棧擴(kuò)展。堆棧擴(kuò) 展駐存在處理器核心外部的高速緩沖存儲器或其它存儲器內(nèi),且補(bǔ)充處理器核心內(nèi)可用 的有限堆棧大小。
      處理器核心還確定處理器核心內(nèi)的堆棧何時(shí)下降到例如閾值條目數(shù)目的閾值大小 以下。舉例來說,閾值條目數(shù)目可為零。在此情況下,當(dāng)堆棧變?yōu)榭諘r(shí),處理器核心將 維持在堆棧擴(kuò)展中的內(nèi)容的至少一部分轉(zhuǎn)移回到處理器核心內(nèi)的堆棧中。換句話說,處 理器核心用處理器核心外部的堆棧擴(kuò)展的內(nèi)容重新填充處理器核心內(nèi)的堆棧。因此,堆 棧內(nèi)容可在處理器核心與共用高速緩沖存儲器或其它存儲器之間來回交換,以允許擴(kuò)展和收縮堆棧的大小。以此方式,所述技術(shù)通過利用處理器核心外部的堆棧擴(kuò)展而防止了 在處理器核心內(nèi)執(zhí)行的線程的故障或崩潰。
      在一個實(shí)施例中,本發(fā)明提供一種方法,其包括確定處理器的核心內(nèi)的堆棧的內(nèi)容 是否超過閾值大小,以及當(dāng)所述堆棧的所述內(nèi)容超過所述閾值大小時(shí)將所述堆棧的所述 內(nèi)容的至少一部分轉(zhuǎn)移到所述處理器的核心外部的堆棧擴(kuò)展。
      在另一實(shí)施例中,本發(fā)明提供一種裝置,其包括具有處理器核心的處理器,所述處 理器核心包含控制單元,其用以控制所述處理器的操作;以及第一存儲器,其存儲所 述處理器核心內(nèi)的堆棧;以及第二存儲器,其存儲所述處理器核心外部的堆棧擴(kuò)展,其 中所述控制單元在所述堆棧的內(nèi)容超過閾值大小時(shí)將所述堆棧的內(nèi)容的至少一部分轉(zhuǎn) 移到所述堆棧擴(kuò)展。
      本發(fā)明的技術(shù)可使用硬件、軟件、固件或其任意組合來實(shí)施。如果以軟件實(shí)施,那 么本發(fā)明的技術(shù)可體現(xiàn)于包括指令的計(jì)算機(jī)可讀媒體上,所述指令在由處理器執(zhí)行時(shí)執(zhí) 行本發(fā)明中描述的技術(shù)中的一者或一者以上。如果以硬件實(shí)施,那么所述技術(shù)可實(shí)施于 一個或一個以上處理器、專用集成電路(ASIC)、現(xiàn)場可編程門陣列(FPGA)和/或其 它等效集成或離散邏輯電路中。
      在附圖和下文描述中陳述本發(fā)明的一個或一個以上實(shí)施例的細(xì)節(jié)。從描述和附圖以 及權(quán)利要求書中將明了本發(fā)明的其它特征、目的和優(yōu)點(diǎn)。


      圖1是說明根據(jù)本文描述的技術(shù)管理核心堆棧數(shù)據(jù)結(jié)構(gòu)的系統(tǒng)的框圖。 圖2是通過利用位于處理器核心外部的存儲器作為堆棧擴(kuò)展來控制堆棧溢出的另一 示系統(tǒng)的框圖。
      圖3是更詳細(xì)說明圖1的系統(tǒng)的框圖。
      圖4是更詳細(xì)說明核心堆棧和堆棧擴(kuò)展的框圖。
      圖5是說明將條目推入共用高速緩沖存儲器的堆棧擴(kuò)展以防止核心堆棧的堆棧溢出 的系統(tǒng)的示范性操作的流程圖。
      圖6是說明檢索存儲在堆棧擴(kuò)展上的條目的系統(tǒng)的示范性操作的流程圖。
      具體實(shí)施例方式
      圖1是說明根據(jù)本文描述的技術(shù)管理核心堆棧數(shù)據(jù)結(jié)構(gòu)的裝置8的框圖。裝置8通
      過利用位于處理器IO的處理器核心12外部的存儲器作為堆棧擴(kuò)展來控制堆棧溢出,因此允許裝置8擴(kuò)展堆棧的大小。為了實(shí)施例如循環(huán)/結(jié)束(LOOP/End)循環(huán)和調(diào)用/設(shè)定 (CALL/Ret)命令的嵌套動態(tài)流控制指令,例如處理器核心12內(nèi)的堆棧14是必要的。 核心堆棧14的大小決定了遞歸嵌套的數(shù)目,因此限制處理器針對任何應(yīng)用的能力。裝 置8經(jīng)濟(jì)地提供了其中可實(shí)施較大數(shù)目的嵌套流控制指令的環(huán)境。通過使用堆棧擴(kuò)展, 裝置8可支持較大數(shù)目的嵌套流控制指令。
      在圖l的實(shí)例中,處理器IO包括單個核心處理器。因此,處理器10包含單個處理 器核心12,其提供用于運(yùn)行例如多媒體應(yīng)用程序的軟件應(yīng)用程序的若干線程的環(huán)境。在 其它實(shí)施例中,處理器IO可包含多個處理器核心。處理器核心12可包含例如控制處理 器10的操作的控制單元、用以執(zhí)行算術(shù)和邏輯計(jì)算的算術(shù)邏輯單元(ALU)以及至少 一定量的存儲器,例如若干寄存器或高速緩沖存儲器。處理器核心12形成處理器10內(nèi) 的可編程處理單元。處理器10的其它部分,例如固定功能管線或共用工作單元,可位 于處理器核心12外部。再者,處理器IO可包含單個處理器核心或多個處理器核心。
      處理器核心12貢獻(xiàn)處理器核心12的局部存儲器的至少一部分作為核心堆棧數(shù)據(jù)結(jié) 構(gòu)14 (本文稱為"核心堆棧14")。核心堆棧14具有固定大小且含有與應(yīng)用程序的線程 相關(guān)聯(lián)的堆棧條目,例如控制指令或數(shù)據(jù)。核心堆棧14可例如經(jīng)配置以保持總共16個 條目、32個條目、64個條目或較大數(shù)目的條目。在一個實(shí)施例中,核心堆棧14可包括 處理器核心12的1級(Ll)高速緩沖存儲器的一部分。因此核心堆棧14的大小可受到 Ll高速緩沖存儲器或L1高速緩沖存儲器的專用于存儲控制指令的部分的大小所限制。
      核心堆棧4可配置成邏輯堆棧15A-15N ("邏輯堆棧15")。處理器核心12將核心 堆棧14動態(tài)細(xì)分為邏輯堆棧15以適應(yīng)與當(dāng)前應(yīng)用程序相關(guān)聯(lián)的多個線程。每一邏輯堆 棧15可對應(yīng)于當(dāng)前在處理器IO上運(yùn)行的應(yīng)用程序的線程之一。邏輯堆棧15的數(shù)目和 大小取決于當(dāng)前應(yīng)用程序中同時(shí)運(yùn)行的線程的數(shù)目。處理器核心12可基于與特定應(yīng)用 程序相關(guān)聯(lián)的同時(shí)線程的數(shù)目,針對每一應(yīng)用程序以不同方式細(xì)分核心堆棧14。
      針對應(yīng)用程序執(zhí)行的線程數(shù)目越大,邏輯堆棧15的數(shù)目越大且邏輯堆棧15的大小 越小。相反,針對應(yīng)用程序執(zhí)行的線程數(shù)目越小,邏輯堆棧15的數(shù)目越小且邏輯堆棧 15的大小越大。與應(yīng)用程序相關(guān)聯(lián)的線程的數(shù)目可例如根據(jù)特定多媒體應(yīng)用程序的資源 要求由軟件驅(qū)動程序確定。此類可配置性可最大化全部堆棧的利用,且提供不同應(yīng)用程 序需要的靈活性。邏輯堆棧15針對給定應(yīng)用程序一般將每一者具有相同大小,但針對 不同應(yīng)用程序大小可不同。
      在處理器核心12上運(yùn)行的線程將控制指令推入到核心堆棧14上和從核心堆棧14
      彈出控制指令以控制應(yīng)用程序的執(zhí)行。更具體來說,線程將控制指令推入到與線程相關(guān)聯(lián)的邏輯堆棧15上和從所述邏輯堆棧15彈出控制指令。因?yàn)楹诵亩褩?4和邏輯堆棧 15具有固定大小,所以線程可推入到堆棧上的控制指令的數(shù)目有限。將太多控制指令推 入到邏輯堆棧15中的一者上導(dǎo)致堆棧溢出,其可引起線程中的一者或一者以上故障和 崩潰。
      為了減少堆棧溢出的可能性,裝置8利用處理器核心12外部的存儲器作為堆棧擴(kuò) 展。裝置8可利用共用高速緩沖存儲器16的一部分、外部存儲器24或兩者作為堆棧擴(kuò) 展。共用高速緩沖存儲器16可由單個處理器核心使用或由多核心處理器內(nèi)的多個處理 器核心共享。
      共用高速緩沖存儲器16通常指位于處理器核心12外部的高速緩存存儲器。共用高 速緩沖存儲器16可位于處理器10內(nèi)部且經(jīng)由內(nèi)部總線20耦合到處理器核心12,如圖 1說明,且因此與其它內(nèi)部處理器資源使用相同的總線。共用高速緩沖存儲器16可例如 包括處理器10的2級(L2)高速緩沖存儲器,而核心堆棧14可包括處理器的1級(Ll) 高速緩沖存儲器。或者,共用高速緩沖存儲器16可位于處理器IO的外部,例如在處理 器10附接到的母板或其它特殊模塊上。
      作為另一替代例,外部存儲器24可單獨(dú)或結(jié)合共用高速緩沖存儲器16而用作補(bǔ)充 堆棧擴(kuò)展。存儲器24位于處理器IO外部,例如在處理器IO所附接到的母板或其它特 殊模塊上。處理器10經(jīng)由外部總線26耦合到存儲器24。外部總線26可以是處理器10 存取其它資源所使用的相同數(shù)據(jù)總線,且因此消除了額外硬件的需要。存儲器24可包 括例如通用隨機(jī)存取存儲器(RAM)。
      裝置8維持共用高速緩沖存儲器16內(nèi)的堆棧擴(kuò)展數(shù)據(jù)結(jié)構(gòu)18A-18N (圖1中標(biāo)記 為"堆棧擴(kuò)展18")。每一堆棧擴(kuò)展18對應(yīng)于邏輯堆棧15之一,且因此與在處理器核心 12中運(yùn)行的線程之一相關(guān)聯(lián)。當(dāng)線程想要將新控制指令推入到邏輯堆棧15中的相應(yīng)一 者(例如,邏輯堆棧15A)上,且邏輯堆棧15A超過例如閾值條目數(shù)目的閾值大小(例 如,當(dāng)邏輯堆棧15A充滿或接近充滿)時(shí),處理器核心12將相應(yīng)邏輯堆棧15A的內(nèi)容 的至少一部分轉(zhuǎn)移到共用高速緩沖存儲器16。更具體來說,處理器核心12將邏輯堆棧 15A的內(nèi)容寫入到與邏輯堆棧15A相關(guān)聯(lián)的堆棧擴(kuò)展18之一 (例如,堆棧擴(kuò)展18A) 中。在一個實(shí)施例中,處理器核心12可發(fā)出換出(swap-out)命令以將整個堆棧寫出到 共用高速緩沖存儲器16的堆棧擴(kuò)展18A。如果相應(yīng)的邏輯堆棧15A再次超過例如條目 數(shù)目的閾值大小,那么處理器核心12將邏輯堆棧15A的內(nèi)容的更多部分轉(zhuǎn)移到位于共 用高速緩沖存儲器16中的相應(yīng)堆棧擴(kuò)展18A,從而沿著堆棧擴(kuò)展18A進(jìn)一步向下推動 先前轉(zhuǎn)移的控制指令。
      11裝置8可例如在存儲器24內(nèi)維持額外的堆棧擴(kuò)展數(shù)據(jù)結(jié)構(gòu)22A-22N (圖1中標(biāo)記 為"堆棧擴(kuò)展22")。每一堆棧擴(kuò)展22與在處理器核心12中運(yùn)行的線程之一相關(guān)聯(lián)。堆 棧擴(kuò)展22可用以控制共用高速緩沖存儲器16中的堆棧擴(kuò)展18的溢出。當(dāng)共用高速緩 沖存儲器16的堆棧擴(kuò)展18變?yōu)槔绯錆M時(shí),裝置8可例如以類似于邏輯堆棧15A的內(nèi) 容向堆棧擴(kuò)展18A轉(zhuǎn)移的方式將堆棧擴(kuò)展18的內(nèi)容的至少一部分換出到存儲器24中的 堆棧擴(kuò)展22A。以此方式,裝置8可使用多級堆棧擴(kuò)展控制堆棧溢出,即其中堆棧擴(kuò)展 的第一級部分位于共用高速緩沖存儲器16內(nèi)且第二級部分位于存儲器24內(nèi)?;蛘撸?一些實(shí)施例中,裝置8可將邏輯堆棧15A的內(nèi)容直接轉(zhuǎn)移到存儲器24的堆棧擴(kuò)展22A 以控制邏輯堆棧15A的溢出。
      裝置8內(nèi)的軟件驅(qū)動程序可通過分配共用高速緩沖存儲器的一部分作為存儲器空間 來形成例如堆棧擴(kuò)展18的堆棧擴(kuò)展,所述存儲器空間具有開始地址和足夠大小以適應(yīng) 所需數(shù)目的具有已知長度的堆棧擴(kuò)展8。共用高速緩存存儲器存儲裝置的所分配部分可 以是鄰接的或不鄰接的。裝置8可以類似于核心堆棧14劃分為邏輯堆棧15的方式將所 分配的空間劃分為若干相等大小的堆棧擴(kuò)展18。堆棧擴(kuò)展18的數(shù)目和大小取決于在處 理器10內(nèi)執(zhí)行的應(yīng)用程序的線程數(shù)目,且因此取決于邏輯堆棧15的數(shù)目。當(dāng)邏輯堆棧 15被換出到共用高速緩沖存儲器16時(shí),裝置8將邏輯堆棧的內(nèi)容寫入以堆棧的開始地 址開始的相應(yīng)的堆棧擴(kuò)展18中??筛鶕?jù)以下等式計(jì)算開始地址
      開始地址=底部地址+虛擬計(jì)數(shù)器*堆棧條目的單位大小, (1)
      其中底部地址指堆棧擴(kuò)展18中的底部條目的地址,堆棧條目的單位大小指每一堆 棧條目的例如以字節(jié)為單位的單位大小,且虛擬計(jì)數(shù)器跟蹤將從邏輯堆棧15換出到共 用高速緩沖存儲器16中的堆棧擴(kuò)展的堆棧條目的數(shù)目。以此方式,裝置8借用共用高 速緩存存儲器存儲裝置的一部分用于堆棧擴(kuò)展。每一堆棧擴(kuò)展由軟件驅(qū)動程序指派固定 大小。當(dāng)邏輯堆棧15換出核心堆棧14時(shí),裝置8將邏輯堆棧的堆棧條目從開始地址起 逐個寫入虛擬堆??臻g。當(dāng)虛擬堆棧充滿時(shí),其內(nèi)容可交換到芯片外存儲器24中的另 一堆棧擴(kuò)展22。
      作為在核心堆棧14與共用高速緩沖存儲器16中的堆棧擴(kuò)展18之間來回交換邏輯 堆棧15的替代例,可以真實(shí)高速緩沖存儲器模式將高速緩沖存儲器16和核心堆棧14 處理為一個連續(xù)的可尋址堆棧。特定來說,裝置8可通過隨著跨越核心堆棧14和共用 高速緩沖存儲器16的組合堆棧的大小增長而自動分配共用高速緩沖存儲器16中的個別堆棧擴(kuò)展條目,來形成堆棧擴(kuò)展18。以此方式,真實(shí)堆棧擴(kuò)展由與裝置8相關(guān)聯(lián)的軟件 驅(qū)動程序分配,使得存取給定堆棧的內(nèi)容作為跨越處理器核心12內(nèi)的核心堆棧14中的 堆棧條目以及共用高速緩沖存儲器16中的堆棧條目的連續(xù)堆棧。換句話說,核心堆棧 14和共用高速緩沖存儲器16用以存儲連續(xù)跨度的堆棧條目作為共用堆棧,而不是通過 在核心堆棧14與共用高速緩沖存儲器16之間交換邏輯堆棧15。
      對于此替代性高速緩沖存儲器方法,處理器核心12針對每一堆棧擴(kuò)展18維持虛擬 計(jì)數(shù)器和開始地址。裝置8將每一堆棧條目映射到Ll高速緩沖存儲器條目的一部分(即, 核心堆棧14)上。以此方式,堆棧擴(kuò)展18可視為"虛擬"堆棧擴(kuò)展。當(dāng)向高速緩沖存 儲器條目寫入或從其讀取時(shí),如果存在L1高速緩沖存儲器命中,那么裝置8對核心堆 棧14中的高速緩沖存儲器條目寫入/讀出。如果存在高速緩沖存儲器未命中,那么裝置 8改為相對于共用高速緩沖存儲器16 (例如,L2高速緩沖存儲器)讀取或?qū)懭?。共用?速緩沖存儲器16將同一存儲器地址映射到L2高速緩沖存儲器的一部分上。如果存在 L2高速緩沖存儲器命中,那么裝置8將高速緩沖存儲器條目寫入L2高速緩沖存儲器中 或從L2高速緩沖存儲器讀取高速緩沖存儲器條目。如果在Ll或L2處沒有高速緩沖存 儲器命中,那么將高速緩沖存儲器條目丟棄或在可用時(shí)根據(jù)同一存儲器地址將其引導(dǎo)到 芯片外存儲器。存儲器地址到高速緩沖存儲器條目的映射可例如通過使用存儲器地址中 間的某些位作為指數(shù)且其它位作為標(biāo)簽(TAG)來檢查高速緩沖存儲器命中或未命中而 完成。
      通過進(jìn)一步參考高速緩沖存儲器交換方法,當(dāng)線程需要從邏輯堆棧15A彈出控制指 令時(shí),所述線程致使處理器核心12彈出位于堆棧頂部的控制指令,且執(zhí)行所述控制指 令指定的操作。換句話說,處理線程致使處理器核心12根據(jù)后進(jìn)先出(LIFO)方案彈 出控制指令。
      處理器核心12繼續(xù)針對線程彈出控制指令,直到相應(yīng)邏輯堆棧15A中的條目數(shù)目 下降到例如閾值條目數(shù)目的閾值大小以下。在一個實(shí)施例中,當(dāng)邏輯堆棧為空,即存在 零個條目時(shí)達(dá)到閾值。在其它實(shí)施例中,可選擇閾值以對應(yīng)于邏輯堆棧接近為空的狀態(tài)。
      當(dāng)邏輯堆棧15A下降到閾值以下時(shí),處理器核心12將共用高速緩沖存儲器16的相 應(yīng)堆棧擴(kuò)展18A的頂部部分轉(zhuǎn)移到邏輯堆棧15A中。處理器核心12可例如發(fā)出換入 (swap-in)命令以讀入共用高速緩沖存儲器16的堆棧擴(kuò)展15A的頂部部分。所述頂部 部分可經(jīng)大小設(shè)計(jì)以符合核心堆棧的大小。因此,處理器核心12用共用高速緩沖存儲 器16的相關(guān)聯(lián)堆棧擴(kuò)展18A中存儲的條目重新填充邏輯堆棧15A。邏輯堆棧15A可完 全填滿或僅部分填充有存儲在堆棧擴(kuò)展18A中的條目。類似地,當(dāng)堆棧擴(kuò)展或邏輯堆棧達(dá)到適用的閾值等級時(shí),存儲器24的堆棧擴(kuò)展22A 的條目可轉(zhuǎn)移到堆棧擴(kuò)展18A或邏輯堆棧15A中。當(dāng)堆棧擴(kuò)展18A中的條目數(shù)目下降 到閾值以下時(shí),裝置8可例如將堆棧擴(kuò)展22A的頂部部分轉(zhuǎn)移到堆棧擴(kuò)展18A。或者當(dāng) 邏輯堆棧15A中的條目數(shù)目下降到閾值以下時(shí),裝置8可例如將堆棧擴(kuò)展22A的頂部 部分轉(zhuǎn)移到邏輯堆棧15A。而且,轉(zhuǎn)移的部分可在適用時(shí)完全填滿或部分填充堆棧擴(kuò)展 22A或邏輯堆棧15A。
      處理器核心12繼續(xù)彈出和轉(zhuǎn)移控制指令,直到邏輯堆棧15A、堆棧擴(kuò)展18A和堆 棧擴(kuò)展22A的所有控制指令都已執(zhí)行或直到處理器資源轉(zhuǎn)移到在處理器核心12內(nèi)執(zhí)行 的線程中的另一者為止。其它線程致使處理器核心12以相同方式彈出和推入控制指令 到相關(guān)聯(lián)的邏輯堆棧15以及堆棧擴(kuò)展18和22。因此,處理器IO通過利用共用高速緩 沖存儲器16的一部分和/或存儲器24作為堆棧擴(kuò)展來控制堆棧溢出,從而允許處理器 IO實(shí)施大得多(如果不是無限的)數(shù)目的嵌套流控制指令。
      處理器核心12經(jīng)由內(nèi)部總線20從邏輯堆棧15向堆棧擴(kuò)展18轉(zhuǎn)移控制指令。內(nèi)部 總線20可以是由處理器核心12存取的其它資源使用的相同總線。處理器核心12可例 如使用內(nèi)部總線20將數(shù)據(jù)寫入到共用高速緩沖存儲器16的存儲緩沖器或寄存器。因此, 處理器核心12發(fā)出的換入和換出命令可使用其它資源存取的相同數(shù)據(jù)路徑,例如指令 提取和通用加載/存儲緩沖器或處理器核心12外部的虛擬寄存器堆。以此方式,處理器 核心12將控制指令轉(zhuǎn)移到共用高速緩沖存儲器16的堆棧擴(kuò)展18而不需要額外硬件。
      僅出于示范性目的而相對于實(shí)施增加數(shù)目的嵌套流控制指令來描述本發(fā)明的技術(shù)。 所述技術(shù)也可用以實(shí)施幾乎無限大小的堆棧以用于存儲不同數(shù)據(jù)。舉例來說,所述技術(shù) 可用以實(shí)施具有擴(kuò)展大小的堆棧,其經(jīng)由應(yīng)用程序開發(fā)者編程的顯式推入和彈出指令來 存儲應(yīng)用程序的數(shù)據(jù)。
      圖2是通過利用位于處理器核心外部的存儲器作為堆棧擴(kuò)展來控制堆棧溢出的裝置 27的框圖。裝置27包含多核心處理器28,其包含第一處理器核心29A和第二處理器核 心29B (統(tǒng)稱為"處理器核心29")。裝置27大體上符合圖1的裝置8,但裝置27包含 多個處理器核心29而不是單個處理器核心。裝置27且更特定來說每一處理器核心29 以與圖l所述相同的方式操作。特定來說,裝置27在每一處理器核心29內(nèi)維持核心堆 棧14,且使用共用高速緩沖存儲器16的堆棧擴(kuò)展18、存儲器26的堆棧擴(kuò)展22或堆棧 擴(kuò)展18和22的組合來控制核心堆棧14的堆棧溢出。用于不同處理器核心29的堆棧擴(kuò) 展18通常將不重疊。事實(shí)上是針對不同的處理器核心29維持單獨(dú)的堆棧擴(kuò)展18。
      圖3是進(jìn)一步詳細(xì)說明圖1的裝置8的框圖。裝置8利用處理器核心IO外部的存儲器作為堆棧擴(kuò)展來控制堆棧溢出。裝置8包含存儲器24和具有處理器核心12的處理 器10,處理器核心12包含控制單元30、核心堆棧14、邏輯堆棧計(jì)數(shù)器34A-34N ("邏 輯堆棧計(jì)數(shù)器34")、堆棧擴(kuò)展計(jì)數(shù)器36A-36N("堆棧擴(kuò)展計(jì)數(shù)器36")以及線程38A-38N ("線程38")。
      控制單元30控制處理器10的操作,包含調(diào)度線程38以在處理器IO上執(zhí)行。控制 單元30可例如使用固定優(yōu)先權(quán)調(diào)度、時(shí)間分割和/或任何其它線程調(diào)度方法來調(diào)度線程 38。存在的線程38的數(shù)目取決于正由處理器IO處理的特定應(yīng)用程序的資源要求。
      當(dāng)調(diào)度線程38中的一者(例如,線程38A)以在處理器核心12上運(yùn)行時(shí),線程38A 致使控制單元30將例如控制指令的堆棧條目推入到邏輯堆棧15A上或從邏輯堆棧15A 彈出條目。如上所述,控制單元30將邏輯堆棧15A的內(nèi)容的至少一部分且視情況而定 邏輯堆棧15A的整個內(nèi)容轉(zhuǎn)移到共用高速緩沖存儲器16的堆棧擴(kuò)展18、存儲器24的 堆棧擴(kuò)展22或兩者,以便防止邏輯堆棧15的溢出。
      對于每一線程38,處理器核心12維持邏輯堆棧計(jì)數(shù)器34和堆棧擴(kuò)展計(jì)數(shù)器36。 邏輯堆棧計(jì)數(shù)器34和堆棧擴(kuò)展計(jì)數(shù)器36分別跟蹤邏輯堆棧15以及堆棧擴(kuò)展18和22 中的控制指令的數(shù)目。舉例來說,邏輯堆棧計(jì)數(shù)器34A跟蹤邏輯堆棧15A中的控制指 令的數(shù)目,且堆棧擴(kuò)展計(jì)數(shù)器36A跟蹤堆棧擴(kuò)展18A中的控制指令的數(shù)目。堆棧擴(kuò)展 計(jì)數(shù)器36中的其它者可跟蹤堆棧擴(kuò)展22A中存儲的控制指令的數(shù)目。
      如上所述,處理器IO通過利用共用高速緩沖存儲器16的一部分作為堆棧擴(kuò)展來控 制堆棧溢出,從而允許處理器IO實(shí)施具有擴(kuò)展大小的堆棧(如果不是幾乎無限的大小)。 起初,控制單元30開始將新控制指令或與應(yīng)用程序相關(guān)聯(lián)的其它數(shù)據(jù)推入到邏輯堆棧 15A上以用于線程38A??刂茊卧?0遞增邏輯堆棧計(jì)數(shù)器34A以反映推入到邏輯堆棧 15A上的新控制指令??刂茊卧?0繼續(xù)將新控制指令推入到邏輯堆棧15A上用于線程 38A,直到邏輯堆棧15A超過閾值條目數(shù)目。在一個實(shí)施例中,控制單元30可將新控 制指令推入到邏輯堆棧15A上直到邏輯堆棧15A充滿為止。以此方式,處理器10減少 了其必須向堆棧擴(kuò)展18轉(zhuǎn)移邏輯堆棧15的內(nèi)容的次數(shù)。
      控制單元30可針對線程38A確定當(dāng)邏輯堆棧計(jì)數(shù)器34A達(dá)到最大閾值時(shí)邏輯堆棧 15A超過閾值。所述最大閾值可在核心堆棧14細(xì)分為邏輯堆棧15時(shí)得以確定,且可等 于每一邏輯堆棧15的大小。當(dāng)控制單元30需要將另一控制指令推入到邏輯堆棧15A上 但確定邏輯堆棧15A滿足或超過閾值時(shí),控制單元30將相應(yīng)邏輯堆棧15A的內(nèi)容的至 少一部分轉(zhuǎn)移到堆棧擴(kuò)展18A。在一個實(shí)施例中,控制單元30將邏輯堆棧15A的整個
      內(nèi)容轉(zhuǎn)移到堆棧擴(kuò)展18A。舉例來說,控制單元30可發(fā)出換出命令以將整個堆棧15A寫入到共用高速緩沖存儲器16中的堆棧擴(kuò)展18A?;蛘?,控制單元30可將堆棧15A的 內(nèi)容的僅一部分轉(zhuǎn)移到堆棧擴(kuò)展18A。舉例來說,控制單元30可僅將最底部控制指令 轉(zhuǎn)移到堆棧擴(kuò)展18A。
      類似地,控制單元30可以類似方式將堆棧擴(kuò)展18A的內(nèi)容的一部分轉(zhuǎn)移到堆棧擴(kuò) 展22A。換句話說,控制單元30可在共用高速緩沖存儲器16的堆棧擴(kuò)展18A變?yōu)槌錆M 時(shí)發(fā)出換出命令,以將共用高速緩沖存儲器16的堆棧擴(kuò)展18A的內(nèi)容的至少一部分轉(zhuǎn) 移到存儲器24的堆棧擴(kuò)展22A。以此方式,裝置8可使用多級堆棧擴(kuò)展來控制堆棧溢 出,即堆棧擴(kuò)展的一部分位于共用高速緩沖存儲器16內(nèi),且一部分位于存儲器24內(nèi)。 或者,控制單元30可將邏輯堆棧i5A的內(nèi)容直接轉(zhuǎn)移到存儲器24的堆棧擴(kuò)展22A以 控制邏輯堆棧15A的溢出。邏輯堆棧計(jì)數(shù)器34A和堆棧擴(kuò)展計(jì)數(shù)器36A經(jīng)調(diào)整以反映 內(nèi)容的轉(zhuǎn)移。
      控制單元30調(diào)整邏輯堆棧計(jì)數(shù)器34和堆棧擴(kuò)展計(jì)數(shù)器36以反映堆棧之間的條目 轉(zhuǎn)移。在一個實(shí)施例中,處理器核心12將與每一線程相關(guān)聯(lián)的邏輯堆棧計(jì)數(shù)器34和堆 棧擴(kuò)展計(jì)數(shù)器36實(shí)施為單個計(jì)數(shù)器。舉例來說,如果邏輯堆棧15A的大小是4個條目, 堆棧擴(kuò)展18A的大小是16個條目,且芯片外存儲器中的堆棧擴(kuò)展22A的大小是64個 條目,那么處理器核心12可使用一個具有六位的堆棧計(jì)數(shù)器。兩個最低有效位(即, 位0和1)表示邏輯堆棧15A中的條目數(shù)目,中間兩位(即,位2和3)表示共用高速 緩沖存儲器16中的堆棧擴(kuò)展18A中的條目數(shù)目,而兩個最高有效位(即,位4和5) 表示芯片外存儲器24中的堆棧擴(kuò)展22A中的條目數(shù)目。
      起初,計(jì)數(shù)器設(shè)定為-1,其表示在任一堆棧中都沒有條目。當(dāng)邏輯堆棧15A具有四 個條目時(shí),六位計(jì)數(shù)器的值等于3。當(dāng)將一新條目推入到邏輯堆棧15A時(shí),計(jì)數(shù)器的值 將等于4。此向中間兩位的進(jìn)位位將觸發(fā)換出命令,以將邏輯堆棧15A的整個內(nèi)容交換 到相應(yīng)的堆棧擴(kuò)展18A中。在交換之后,計(jì)數(shù)器的值等于4;最低兩位等于O,指示在 邏輯堆棧15A中存在一個條目,中間兩位等于l,指示所述一個邏輯堆棧已溢出到堆棧 擴(kuò)展15A中。
      當(dāng)邏輯堆棧已溢出三次時(shí),中間兩位等于3。下一次溢出發(fā)生時(shí),觸發(fā)換出命令以 將含有三個邏輯堆棧的內(nèi)容加上新溢出的邏輯堆棧內(nèi)容的堆棧擴(kuò)展18A的整個內(nèi)容交 換到芯片外存儲器24。接著最高兩位等于l,意味著堆棧擴(kuò)展一次溢出到芯片外存儲器 26中。中間兩位等于0,意味著沒有邏輯堆棧15A的副本在堆棧擴(kuò)展18A中。當(dāng)堆棧 彈出為空時(shí),適用的計(jì)數(shù)器以類似于從芯片外存儲器換入到堆棧擴(kuò)展18A且隨后到邏輯 堆棧15A的方式遞減計(jì)數(shù)??刂茊卧?0可將邏輯堆棧15A的控制指令作為一個連續(xù)數(shù)據(jù)塊轉(zhuǎn)移。換句話說, 控制單元30可以單個寫入操作將控制指令寫入到堆棧擴(kuò)展18A。或者,控制單元30可 使用一個以上寫入操作將控制指令寫入到堆棧擴(kuò)展18A。舉例來說,控制單元30可針 對邏輯堆棧15A的每一個別控制指令使用單獨(dú)的寫入操作將控制指令寫入到堆棧擴(kuò)展 18A。
      在控制單元30將邏輯堆棧15A的控制指令轉(zhuǎn)移到堆棧擴(kuò)展18A時(shí),控制單元30 將線程38A置于睡眠(SLEEP)隊(duì)列中,從而打開ALU槽供其它線程38使用。換句話 說,將線程38A置于空閑狀態(tài),因此允許線程38中的另一者使用處理器核心12的資源。 新線程再使用與處理器核心中其它線程相同的機(jī)制。舉例來說,在交換回?cái)?shù)據(jù)之前的指 令未命中或存儲器存取的情況下,當(dāng)前線程將移動到睡眠隊(duì)列中,且ALU槽將由其它 線程38使用。
      一旦控制指令的轉(zhuǎn)移完成,控制單元30就重新啟動線程38A,除非另一線程已被 給定較高優(yōu)先權(quán)。以此方式,處理器核心12更有效地使用其資源來執(zhí)行多個線程,因 此減少了在控制指令向堆棧擴(kuò)展18的轉(zhuǎn)移期間浪費(fèi)的處理循環(huán)數(shù)目。另外,控制單元 30遞增邏輯堆棧計(jì)數(shù)器34A和堆棧擴(kuò)展計(jì)數(shù)器36A以分別跟蹤邏輯堆棧15A和堆棧擴(kuò) 展18A內(nèi)的控制指令的數(shù)目或其它數(shù)據(jù)。
      請注意,在給定時(shí)間在處理器核心12中執(zhí)行的應(yīng)用程序的線程的數(shù)目不一定對應(yīng) 于與應(yīng)用程序相關(guān)聯(lián)的線程數(shù)目。在一個線程完成之后,核心堆棧14內(nèi)的線程空間和 邏輯堆棧空間可重新用于新線程。因此,在給定時(shí)間使用核心堆棧14的線程的數(shù)目不 是應(yīng)用程序的線程的總數(shù)。舉例來說,在一些實(shí)施例中,處理器核心12可經(jīng)配置以為 給定應(yīng)用程序的16個線程提供足夠的堆??臻g。然而同時(shí),所述應(yīng)用程序可能具有超 過1萬個線程。因此,處理器核心12在執(zhí)行應(yīng)用程序同時(shí)起始并完成許多線程,且不 限于固定數(shù)目的線程。事實(shí)上,線程在應(yīng)用程序執(zhí)行過程期間在重復(fù)性基礎(chǔ)上重新使用 相同的線程空間和邏輯堆??臻g。
      當(dāng)控制單元30需要從邏輯堆棧15A彈出控制指令以用于線程38A時(shí),控制單元30
      開始從邏輯堆棧15A的頂部彈出控制指令,并遞減邏輯堆棧計(jì)數(shù)器34A。當(dāng)邏輯堆棧
      15A下降到最小閾值以下時(shí),例如當(dāng)邏輯堆棧計(jì)數(shù)器34A為零時(shí),控制單元30確定是
      否與線程38A相關(guān)聯(lián)的任何控制指令位于堆棧擴(kuò)展18A中??刂茊卧?0可例如檢査堆
      棧擴(kuò)展計(jì)數(shù)器36A的值以確定是否任何控制指令保留在堆棧擴(kuò)展32中。如果堆棧擴(kuò)展
      18A中存在控制指令,那么控制單元30就從堆棧擴(kuò)展18A的頂部部分檢索控制指令以
      重新填充邏輯堆棧15A。控制單元30可例如發(fā)出換入命令以讀入共用高速緩沖存儲器
      1716的堆棧擴(kuò)展15A的頂部部分。當(dāng)邏輯堆棧15A為空時(shí)換入堆棧擴(kuò)展18A的內(nèi)容可減 少換入命令的數(shù)目。
      類似地,將存儲器24的堆棧擴(kuò)展22A的條目轉(zhuǎn)移到堆棧擴(kuò)展18A或邏輯堆棧15A 中。裝置8可例如在堆棧擴(kuò)展18A中的條目數(shù)目下降到閾值以下時(shí)將堆棧擴(kuò)展22A的 頂部部分轉(zhuǎn)移到堆棧擴(kuò)展18A?;蛘撸b置8可例如在邏輯堆棧15A中的條目數(shù)目下降 到閾值以下時(shí)將堆棧擴(kuò)展22A的頂部部分轉(zhuǎn)移到邏輯堆棧15A。堆棧擴(kuò)展18A或堆棧擴(kuò) 展22A的頂部部分可在大小上對應(yīng)于邏輯堆棧15A的大小。
      在控制單元30向堆棧15A轉(zhuǎn)移控制指令時(shí),控制單元30將線程38A置于空閑狀 態(tài),因此允許其它線程利用處理器12的資源。控制單元30可例如將線程38A置于睡眠 (SLEEP)隊(duì)列中,因此打開ALU槽供線程38的其它線程中的一者使用。 一旦控制單 元30檢索到控制指令,控制單元30就啟動線程38A,除非在線程38A空閑的時(shí)間期間 另一線程已被給定較高優(yōu)先權(quán)。而且,控制單元30調(diào)整堆棧擴(kuò)展計(jì)數(shù)器36A以考慮控 制指令從堆棧擴(kuò)展18A的移除。另外,控制單元30調(diào)整邏輯堆棧計(jì)數(shù)器34A以考慮置 于邏輯堆棧15A中的控制指令。
      控制單元30繼續(xù)從邏輯堆棧15A彈出并執(zhí)行控制指令以用于線程38A。此過程持 續(xù),直到維持在邏輯堆棧15A以及堆棧擴(kuò)展18A和22A中的所有控制指令都已被線程 38A讀取并執(zhí)行為止,或直到控制單元30將處理器核心12的資源分配給線程38中的 另一者為止。以此方式,處理器10可通過將控制指令推入到堆棧擴(kuò)展18和22并稍后 檢索這些控制指令來實(shí)施無限數(shù)目的嵌套控制指令。然而如上所述,處理器10可利用 本文所述的技術(shù)來實(shí)施具有擴(kuò)展大小的堆棧以存儲控制指令以外的數(shù)據(jù)。
      圖4是更詳細(xì)說明核心堆棧14和堆棧擴(kuò)展18的框圖。如上所述,核心堆棧14是 具有固定大小的數(shù)據(jù)結(jié)構(gòu),且駐存在處理器核心12中的存儲器內(nèi)。在圖4說明的實(shí)例 中,核心堆棧14經(jīng)配置以保持24個控制指令。核心堆棧14可經(jīng)配置以保持任意數(shù)目 的控制指令。然而核心堆棧14的大小可受到處理器核心12內(nèi)部的存儲器大小的限制。
      核心堆棧14可配置為一個或一個以上邏輯堆棧,其中每一邏輯堆棧對應(yīng)于應(yīng)用程 序的一個線程。如上所述,邏輯堆棧的數(shù)目和大小取決于當(dāng)前應(yīng)用程序的線程的數(shù)目, 其可根據(jù)特定應(yīng)用程序的資源要求由軟件驅(qū)動程序確定。換句話說,處理器核心12基 于與特定應(yīng)用程序相關(guān)聯(lián)的線程的數(shù)目,針對每一應(yīng)用程序以不同方式動態(tài)細(xì)分核心堆 棧14。
      在圖4說明的實(shí)例中,核心堆棧14配置為4個相等大小的邏輯堆棧15A-15D ("邏
      輯堆棧15")。邏輯堆棧15每一者保持6個條目,例如6個控制指令。然而如上所述,如果應(yīng)用程序包含較大數(shù)目的線程,那么核心堆棧14將細(xì)分為更多邏輯堆棧15。舉例 來說,如果應(yīng)用程序包含6個線程,那么核心堆棧14可配置為6個邏輯堆棧,其每一 者保持4個控制指令。相反,如果應(yīng)用程序包含較少數(shù)目的線程,那么核心堆棧14將 細(xì)分為更少邏輯堆棧15。所述可配置性可最大化全部堆棧的利用率,且提供針對不同應(yīng) 用程序需要的靈活性。
      處理器IO通過在處理器核心12內(nèi)的邏輯堆棧15與共用高速緩沖存儲器16內(nèi)的堆 棧擴(kuò)展18之間轉(zhuǎn)移控制指令來控制堆棧溢出。每一堆棧擴(kuò)展18對應(yīng)于邏輯堆棧15之 一。舉例來說,堆棧擴(kuò)展18A可對應(yīng)于邏輯堆棧15A。然而,堆棧擴(kuò)展18A可大于邏輯 堆棧15A。在圖4說明的實(shí)例中,堆棧擴(kuò)展18A是邏輯堆棧15A的四倍。因此,處理器 核心12可在堆棧擴(kuò)展18A充滿之前填充邏輯堆棧15A和從邏輯堆棧15A轉(zhuǎn)移控制指令 四次?;蛘撸褩U(kuò)展18A可與邏輯堆棧15A大小相同。在此情況下,處理器核心12 可僅轉(zhuǎn)移一個完整邏輯堆棧的控制指令。
      然而如果堆棧擴(kuò)展大于共用高速緩沖存儲器16的大小,那么共用高速緩沖存儲器 16可將數(shù)據(jù)交換到芯片外存儲器24中和從其換出?;蛘撸褩U(kuò)展的一部分可位于共 用高速緩沖存儲器16內(nèi)且一部分位于存儲器24內(nèi)。因此,處理器12可真實(shí)地以非常 低的成本實(shí)施無限數(shù)目的嵌套流控制指令。
      圖5是說明將控制指令推入共用高速緩沖存儲器的堆棧擴(kuò)展以防止核心堆棧的堆棧 溢出的處理器IO的示范性操作的流程圖。起初,控制單元30確定需要將新控制指令推 入到與例如線程38A的線程相關(guān)聯(lián)的邏輯堆棧15A上(40)。控制單元30可例如確定 必須執(zhí)行新的循環(huán)且需要推入控制指令以在新循環(huán)完成之后返回到當(dāng)前循環(huán)。
      控制單元30確定邏輯堆棧15A是否滿足或超過最大閾值(42)??刂茊卧?0可例 如將邏輯堆棧計(jì)數(shù)器34A的值與闡值進(jìn)行比較以確定邏輯堆棧15A是否充滿。所述閾 值可例如是邏輯堆棧15A的大小,其可基于核心堆棧14的大小和與當(dāng)前應(yīng)用程序相關(guān) 聯(lián)的線程數(shù)目來確定。
      如果邏輯堆棧15A中的條目數(shù)目不超過最大閾值,那么控制單元30將新控制指令 推入到邏輯堆棧15A上以用于線程38A (44)。另外,控制單元30遞增邏輯堆棧計(jì)數(shù)器 36以考慮置于邏輯堆棧15A上的新控制指令(46)。
      如果邏輯堆棧15A中的條目數(shù)目滿足或超過最大閾值,那么控制單元30將當(dāng)前線
      程置于空閑狀態(tài)(48)。在線程38A空閑時(shí),線程38A中的另一者將使用處理器核心12
      的資源。另外,控制單元30將邏輯堆棧15A的內(nèi)容的至少一部分轉(zhuǎn)移到共用高速緩沖
      存儲器16的相應(yīng)堆棧擴(kuò)展18A (50)??刂茊卧?0可例如將邏輯堆棧15A的整個內(nèi)容轉(zhuǎn)移到堆棧擴(kuò)展18A??刂茊卧?0可在單個寫入操作或在多個相繼寫入操作中轉(zhuǎn)移邏 輯堆棧15A的內(nèi)容。在邏輯堆棧15A的內(nèi)容被轉(zhuǎn)移到堆棧擴(kuò)展18A之后,控制單元30 重新啟動線程38A (52)。
      控制單元30遞增堆棧擴(kuò)展計(jì)數(shù)器36A以考慮轉(zhuǎn)移到堆棧擴(kuò)展18A的控制指令(54)。 在一個實(shí)施例中,控制單元30依據(jù)寫入操作的數(shù)目而遞增堆棧擴(kuò)展計(jì)數(shù)器36A。另外, 控制單元30調(diào)整邏輯堆棧計(jì)數(shù)器34A以考慮從邏輯堆棧15A轉(zhuǎn)移的控制指令(46)。 控制單元30可例如將邏輯堆棧計(jì)數(shù)器34A復(fù)位到零??刂茊卧?0可接著將新控制指令 推入到現(xiàn)在為空的邏輯堆棧15A上。
      如上所述,堆棧管理方案也可使用芯片外存儲器24作為另一堆棧擴(kuò)展。特定來說, 當(dāng)共用高速緩沖存儲器16的堆棧擴(kuò)展18A例如變?yōu)槌錆M時(shí),裝置8可以類似于向堆棧 擴(kuò)展18A轉(zhuǎn)移邏輯堆棧15A的內(nèi)容的方式將共用高速緩沖存儲器16的堆棧擴(kuò)展18A的 內(nèi)容的至少一部分換出到存儲器24的堆棧擴(kuò)展22A。以此方式,裝置8可使用多級堆 棧擴(kuò)展控制堆棧溢出,即,堆棧擴(kuò)展的一部份位于共用高速緩沖存儲器16內(nèi)且一部分 位于存儲器24內(nèi)?;蛘撸b置8可將邏輯堆棧15A的內(nèi)容直接轉(zhuǎn)移到存儲器24的堆棧 擴(kuò)展22A以控制邏輯堆棧15A的溢出。邏輯堆棧計(jì)數(shù)器34A和堆棧擴(kuò)展計(jì)數(shù)器36經(jīng)調(diào) 整以反映內(nèi)容的轉(zhuǎn)移。
      圖6是說明處理器10檢索存儲在堆棧擴(kuò)展上的控制指令的示范性操作的流程圖。 起初,如果線程想要從邏輯堆棧彈出控制指令(60),且所述邏輯堆棧非空(62),那么 從邏輯堆棧彈出所述控制指令(63),且調(diào)整邏輯堆棧計(jì)數(shù)器(76)。控制單元30確定 邏輯堆棧15A中的條目數(shù)目是否下降到最小閾值以下。在一個實(shí)施例中,控制單元30 確定邏輯堆棧15是否為空(62)。因此在此情況下,閾值為零??刂茊卧?0可確定例 如當(dāng)邏輯堆棧計(jì)數(shù)器34A等于零時(shí)邏輯堆棧15A為空。如果邏輯堆棧15A中的條目數(shù) 目下降到最小閾值以下,那么控制單元30嘗試從堆棧擴(kuò)展18A的頂部彈出后續(xù)控制指 令。
      如果邏輯堆棧15A中的條目數(shù)目滿足或下降到最小閾值以下,那么控制單元30確 定堆棧擴(kuò)展18A是否為空(64)??刂茊卧?0可確定例如如果堆棧擴(kuò)展計(jì)數(shù)器36A等 于零那么堆棧擴(kuò)展18A為空。如果堆棧擴(kuò)展18A為空,那么與線程38A相關(guān)聯(lián)的所有 控制指令已執(zhí)行,且控制單元30可啟動另一線程(66)。
      如果堆棧擴(kuò)展18A非空,那么控制單元30將線程38A置于空閑狀態(tài)(68)。在線
      程38A空閑時(shí),線程38A中的另一者將使用處理器核心12的資源??刂茊卧?0將共
      用高速緩沖存儲器16的相應(yīng)堆棧擴(kuò)展18A的頂部部分轉(zhuǎn)移到邏輯堆棧15A中(70)。在一個實(shí)施例中,控制單元30從堆棧擴(kuò)展18A檢索足夠的控制指令以填充邏輯堆棧 15A。換句話說,控制單元30用共用高速緩沖存儲器16的相關(guān)聯(lián)堆棧擴(kuò)展18A中存儲 的條目重新填充邏輯堆棧15A??刂茊卧?0重新啟動空閑線程38A (72)。
      而且,控制單元30調(diào)整堆棧擴(kuò)展計(jì)數(shù)器36A以考慮控制指令從堆棧擴(kuò)展18A的移 除(74)。另外,控制單元30調(diào)整邏輯堆棧計(jì)數(shù)器以考慮置于邏輯堆棧15A中的控制指 令(76)??刂茊卧?0繼續(xù)從邏輯堆棧15A彈出并執(zhí)行控制指令。
      盡管圖5和6的流程圖描述處理器10利用位于處理器10內(nèi)的共用高速緩沖存儲器 16內(nèi)的堆棧擴(kuò)展,但處理器IO可維持并利用位于處理器IO外部的外部高速緩沖存儲器 或存儲器中的堆棧擴(kuò)展,如圖2說明?;蛘?,處理器10可使用處理器10內(nèi)的共用高速 緩沖存儲器16以及處理器IO外部的高速緩沖存儲器或存儲器來維持多級堆棧擴(kuò)展。
      本發(fā)明中描述的技術(shù)提供若干優(yōu)點(diǎn)。舉例來說,所述技術(shù)向處理器或其它設(shè)備提供 經(jīng)由應(yīng)用程序開發(fā)者編程的顯式推入和彈出指令來經(jīng)濟(jì)地實(shí)施應(yīng)用程序的幾乎無限數(shù) 目的嵌套流控制指令或其它應(yīng)用程序數(shù)據(jù)的能力。而且,所述技術(shù)利用設(shè)備內(nèi)已存在的 資源。舉例來說,處理器或其它設(shè)備使用用于其它資源存取的數(shù)據(jù)路徑發(fā)出換入和換出 命令。處理器或其它設(shè)備還使用處理器核心外部的已可用的存儲器,例如共用高速緩沖 存儲器或外部存儲器。此外,所述技術(shù)對在處理器核心上運(yùn)行的驅(qū)動程序和應(yīng)用程序完 全透明。
      本發(fā)明中描述的技術(shù)可實(shí)施于硬件、軟件、固件或其任意組合中。舉例來說,所述
      技術(shù)的各個方面可實(shí)施于一個或一個以上微處理器、數(shù)字信號處理器(DSP)、專用集成
      電路(ASIC)、現(xiàn)場可編程邏輯陣列(FPGA)或任何其它等效集成或離散邏輯電路以及
      任何所述組件的組合中。術(shù)語"處理器"或"處理電路"可大體上指上述邏輯電路中的 任一者單獨(dú)或與其它邏輯電路的組合。
      當(dāng)實(shí)施于軟件中時(shí),歸屬于本發(fā)明中描述的系統(tǒng)和裝置的功能性可體現(xiàn)為計(jì)算機(jī)可 讀媒體上的指令,所述計(jì)算機(jī)可讀媒體例如為隨機(jī)存取存儲器(RAM)、只讀存儲器 (ROM)、非易失性隨機(jī)存取存儲器(NVRAM)、電可擦除可編程只讀存儲器(EEPROM)、 快閃存儲器、磁性媒體、光學(xué)媒體或類似物。執(zhí)行所述指令以支持本發(fā)明中描述的功能 性的一個或一個以上方面。
      已描述本發(fā)明的各種實(shí)施例。描述的實(shí)施例僅用于示范性目的。這些和其它實(shí)施例 在所附權(quán)利要求書的范圍內(nèi)。
      權(quán)利要求
      1. 一種方法,其包括確定處理器的核心內(nèi)的堆棧的內(nèi)容是否超過閾值大??;以及當(dāng)所述堆棧的所述內(nèi)容超過所述閾值大小時(shí),將所述堆棧的所述內(nèi)容的至少一部分轉(zhuǎn)移到所述處理器的所述核心外部的堆棧擴(kuò)展。
      2. 根據(jù)權(quán)利要求l所述的方法,其進(jìn)一步包括在所述處理器的所述核心內(nèi)維持多個堆棧,其中所述多個堆棧中的每一者對應(yīng)于 由所述處理器執(zhí)行的應(yīng)用程序的多個線程中的不同一者;以及在所述處理器的所述核心外部維持多個堆棧擴(kuò)展,其中所述堆棧擴(kuò)展中的每一者 對應(yīng)于所述處理器的所述核心內(nèi)的所述堆棧中的一者,其中轉(zhuǎn)移所述內(nèi)容的至少一部分包括將所述處理器的所述核心內(nèi)的所述堆棧中 一者的所述內(nèi)容的至少一部分轉(zhuǎn)移到相應(yīng)的堆棧擴(kuò)展。
      3. 根據(jù)權(quán)利要求2所述的方法,其中所述堆棧中的每一者具有相等大小,且所述堆棧 的數(shù)目對應(yīng)于所述線程的數(shù)目。
      4. 根據(jù)權(quán)利要求2所述的方法,其中所述堆棧中的每一者針對不同應(yīng)用程序具有不同 大小。
      5. 根據(jù)權(quán)利要求2所述的方法,其進(jìn)一步包括將所述處理器的所述核心內(nèi)的所述堆棧 中的第二者的所述內(nèi)容的至少一部分轉(zhuǎn)移到相應(yīng)的堆棧擴(kuò)展。
      6. 根據(jù)權(quán)利要求l所述的方法,其中所述處理器的所述核心內(nèi)的所述堆棧與應(yīng)用程序 的線程相關(guān)聯(lián),所述方法進(jìn)一步包括在所述處理器的所述核心內(nèi)的所述堆棧的所述 內(nèi)容被轉(zhuǎn)移到所述堆棧擴(kuò)展時(shí)將所述應(yīng)用程序的所述線程置于空閑狀態(tài)。
      7. 根據(jù)權(quán)利要求6所述的方法,其進(jìn)一步包括將所述堆棧擴(kuò)展的所述內(nèi)容轉(zhuǎn)移回到所 述堆棧,以及在所述堆棧擴(kuò)展的所述內(nèi)容被轉(zhuǎn)移回到所述堆棧時(shí)將所述應(yīng)用程序的 所述線程置于空閑狀態(tài)。
      8. 根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包括在將所述堆棧的所述內(nèi)容的至少一部分 轉(zhuǎn)移回到所述堆棧擴(kuò)展之后將新條目推入到所述處理器的所述核心內(nèi)的所述堆棧 上。
      9. 根據(jù)權(quán)利要求8所述的方法,其進(jìn)一步包括應(yīng)用堆棧計(jì)數(shù)器以跟蹤所述處理器的所述核心內(nèi)的所述堆棧中的條目數(shù)目;以及 當(dāng)所述堆棧計(jì)數(shù)器達(dá)到閾值時(shí)確定所述堆棧內(nèi)容超過所述閾值大小。
      10. 根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包括應(yīng)用共用堆棧計(jì)數(shù)器以跟蹤所述核心內(nèi) 的所述堆棧和所述堆棧擴(kuò)展兩者中的條目。
      11. 根據(jù)權(quán)利要求l所述的方法,其進(jìn)一步包括確定所述內(nèi)容下降到第二閾值大小以下;以及當(dāng)所述堆棧下降到所述第二閾值大小以下時(shí),將所述處理器的所述核心外部的所 述堆棧擴(kuò)展的至少一部分轉(zhuǎn)移到所述處理器的所述核心內(nèi)的所述堆棧。
      12. 根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包括調(diào)整計(jì)數(shù)器以跟蹤所述堆棧內(nèi)容的轉(zhuǎn)移 到所述堆棧擴(kuò)展的所述部分。
      13. 根據(jù)權(quán)利要求1所述的方法,其中轉(zhuǎn)移所述堆棧的所述內(nèi)容的至少一部分包括在由 所述處理器的其它資源利用的數(shù)據(jù)總線上轉(zhuǎn)移所述堆棧的所述內(nèi)容的所述部分。
      14. 根據(jù)權(quán)利要求1所述的方法,其中所述處理器的所述核心外部的所述堆棧擴(kuò)展包括 所述處理器的共用高速緩沖存儲器內(nèi)的堆棧擴(kuò)展。
      15. 根據(jù)權(quán)利要求1所述的方法,其中所述處理器的所述核心外部的所述堆棧擴(kuò)展包括 所述處理器外部的存儲器內(nèi)的堆棧擴(kuò)展。
      16. 根據(jù)權(quán)利要求1所述的方法,其中轉(zhuǎn)移所述堆棧的所述內(nèi)容的至少一部分包括轉(zhuǎn)移 所述堆棧的整個內(nèi)容。
      17.根據(jù)權(quán)利要求1所述的方法,其中所述堆棧擴(kuò)展包括第一堆棧擴(kuò)展,所述方法進(jìn)一步包括當(dāng)所述第一堆棧擴(kuò)展的所述內(nèi)容超過閾值大小時(shí)將所述第一堆棧擴(kuò)展的所 述內(nèi)容的至少一部分轉(zhuǎn)移到第二堆棧擴(kuò)展。
      18. 根據(jù)權(quán)利要求l所述的方法,其中所述核心是第一核心,所述堆棧是第一堆棧,且 所述堆棧擴(kuò)展是第一堆棧擴(kuò)展,所述方法進(jìn)一步包括確定所述處理器的第二核心內(nèi)的第二堆棧的內(nèi)容是否超過閾值大??;以及 當(dāng)所述第二堆棧的所述內(nèi)容超過所述閾值大小時(shí),將所述第二堆棧的所述內(nèi)容的至少一部分轉(zhuǎn)移到所述處理器的所述第二核心外部的第二堆桟擴(kuò)展。
      19. 根據(jù)權(quán)利要求1所述的方法,其中所述第一和第二堆棧擴(kuò)展駐存在共用高速緩存存 儲器內(nèi)。
      20. 根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包括將所述堆棧和所述堆棧擴(kuò)展作為連續(xù)的 高速緩沖存儲器來存取。
      21. —種裝置,其包括處理器,其具有處理器核心,所述處理器核心包含控制單元,其用以控制所述處理器的操作,以及第一存儲器,其存儲所述處理器核心內(nèi)的堆棧;以及 第二存儲器,其存儲所述處理器核心外部的堆棧擴(kuò)展,其中所述控制單元在所述堆棧的內(nèi)容超過閾值大小時(shí)將所述堆棧的內(nèi)容的至少 一部分轉(zhuǎn)移到所述堆棧擴(kuò)展。
      22. 根據(jù)權(quán)利要求21所述的裝置,其中所述堆棧包含所述處理器的所述核心內(nèi)的多個 堆棧,所述多個堆棧中的每一者對應(yīng)于由所述處理器執(zhí)行的應(yīng)用程序的多個線程中 的不同一者,所述堆棧擴(kuò)展包含所述處理器的所述核心外部的多個堆棧擴(kuò)展,所述 堆棧擴(kuò)展中的每一者對應(yīng)于所述處理器的所述核心內(nèi)的所述堆棧中的一者,且其中 所述控制單元將所述處理器的所述核心內(nèi)的所述堆棧中一者的內(nèi)容的至少一部分 轉(zhuǎn)移到相應(yīng)的堆棧擴(kuò)展。
      23. 根據(jù)權(quán)利要求22所述的裝置,其中所述堆棧中的每一者具有相等大小,且所述堆棧的數(shù)目對應(yīng)于所述線程的數(shù)目。
      24. 根據(jù)權(quán)利要求22所述的裝置,其中所述堆棧中的每一者針對不同應(yīng)用程序具有不 同大小。
      25. 根據(jù)權(quán)利要求22所述的裝置,其中所述控制單元將所述處理器的所述核心內(nèi)的所 述堆棧中的第二者的所述內(nèi)容的至少一部分轉(zhuǎn)移到相應(yīng)的堆棧擴(kuò)展。
      26. 根據(jù)權(quán)利要求21所述的裝置,其中所述處理器的所述核心內(nèi)的所述堆棧與應(yīng)用程 序的線程相關(guān)聯(lián),其中所述控制單元在所述處理器的所述核心內(nèi)的所述堆棧的內(nèi)容 被轉(zhuǎn)移到所述堆棧擴(kuò)展時(shí)將所述應(yīng)用程序的所述線程置于空閑狀態(tài)。
      27. 根據(jù)權(quán)利要求26所述的裝置,其中所述控制單元將所述堆棧擴(kuò)展的所述內(nèi)容轉(zhuǎn)移 回到所述堆棧,且在所述堆棧擴(kuò)展的所述內(nèi)容被轉(zhuǎn)移回到所述堆棧時(shí)將所述應(yīng)用程 序的所述線程置于空閑狀態(tài)。
      28. 根據(jù)權(quán)利要求21所述的裝置,其中所述控制單元在將所述堆棧內(nèi)容的至少一部分 轉(zhuǎn)移到所述堆棧擴(kuò)展之后將新條目推入到所述處理器的所述核心內(nèi)的所述堆棧上。
      29. 根據(jù)權(quán)利要求28所述的裝置,其中所述控制單元遞增堆棧計(jì)數(shù)器以跟蹤所述處理 器的所述核心內(nèi)的所述堆棧中的條目數(shù)目,且當(dāng)所述堆棧計(jì)數(shù)器達(dá)到閾值時(shí)確定所 述堆棧內(nèi)容超過所述閾值大小。
      30. 根據(jù)權(quán)利要求21所述的裝置,其中所述控制單元遞增共用堆棧計(jì)數(shù)器以跟蹤所述 核心內(nèi)的所述堆棧和所述堆棧擴(kuò)展兩者中的條目。
      31. 根據(jù)權(quán)利要求21所述的裝置,其中所述控制單元確定所述堆棧內(nèi)容下降到第二閾 值大小以下,且當(dāng)所述堆棧下降到所述第二閥值大小以下時(shí)將所述處理器的所述核 心外部的所述堆棧擴(kuò)展的至少一部分轉(zhuǎn)移到所述處理器的所述核心內(nèi)的所述堆棧。
      32. 根據(jù)權(quán)利要求21所述的裝置,其進(jìn)一步包括跟蹤所述堆棧內(nèi)容的轉(zhuǎn)移到所述堆棧 擴(kuò)展的所述部分的計(jì)數(shù)器。
      33. 根據(jù)權(quán)利要求21所述的裝置,其中所述控制單元在由所述處理器的其它資源利用 的數(shù)據(jù)總線上轉(zhuǎn)移所述堆棧內(nèi)容的所述部分。
      34. 根據(jù)權(quán)利要求21所述的裝置,其中所述處理器的所述核心外部的所述堆棧擴(kuò)展包 括所述處理器的共用高速緩沖存儲器內(nèi)的堆棧擴(kuò)展。
      35. 根據(jù)權(quán)利要求21所述的裝置,其中所述處理器的所述核心外部的所述堆棧擴(kuò)展包 括所述處理器外部的存儲器內(nèi)的堆棧擴(kuò)展。
      36. 根據(jù)權(quán)利要求21所述的裝置,其中所述控制單元轉(zhuǎn)移所述堆棧的整個內(nèi)容。
      37. 根據(jù)權(quán)利要求21所述的裝置,其中所述堆棧擴(kuò)展包括第一堆棧擴(kuò)展,且當(dāng)所述第 一堆棧擴(kuò)展的所述內(nèi)容超過閾值大小時(shí),所述控制單元將所述第一堆棧擴(kuò)展的所述 內(nèi)容的至少一部分轉(zhuǎn)移到第二堆棧擴(kuò)展。
      38. 根據(jù)權(quán)利要求21所述的裝置,其中所述核心是第一核心,所述堆棧是第一堆棧, 且所述堆棧擴(kuò)展是第一堆棧擴(kuò)展,且所述控制單元-確定所述處理器的第二核心內(nèi)的第二堆棧的內(nèi)容是否超過閾值大?。灰约?當(dāng)所述第二堆棧的所述內(nèi)容超過所述閾值大小時(shí),將所述第二堆棧的所述內(nèi)容的至少一部分轉(zhuǎn)移到所述處理器的所述第二核心外部的第二堆棧擴(kuò)展。
      39. 根據(jù)權(quán)利要求21所述的裝置,其中所述第一和第二堆棧擴(kuò)展駐存在共用高速緩存 存儲器內(nèi)。
      40. 根據(jù)權(quán)利要求21所述的裝置,其中所述控制單元將所述堆棧和所述堆棧擴(kuò)展作為 連續(xù)的高速緩沖存儲器來存取。
      41. 一種計(jì)算機(jī)可讀媒體,其包括致使處理器進(jìn)行以下操作的指令確定所述處理器的核心內(nèi)的堆棧的內(nèi)容是否超過閾值大?。灰约?當(dāng)所述堆棧的所述內(nèi)容超過所述閾值大小時(shí),將所述堆棧的所述內(nèi)容的至少一部 分轉(zhuǎn)移到所述處理器的所述核心外部的堆棧擴(kuò)展。
      42. 根據(jù)權(quán)利要求41所述的計(jì)算機(jī)可讀媒體,其中所述指令致使所述處理器在所述處理器的所述核心內(nèi)維持多個堆棧,其中所述多個堆棧中的每一者對應(yīng)于 由所述處理器執(zhí)行的應(yīng)用程序的多個線程中的不同一者;以及在所述處理器的所述核心外部維持多個堆棧擴(kuò)展,其中所述堆棧擴(kuò)展中的每一者 對應(yīng)于所述處理器的所述核心內(nèi)的所述堆棧中的一者,其中轉(zhuǎn)移所述內(nèi)容的至少一部分包括將所述處理器的所述核心內(nèi)的所述堆棧中 一者的所述內(nèi)容的至少一部分轉(zhuǎn)移到相應(yīng)的堆棧擴(kuò)展。
      43. 根據(jù)權(quán)利要求41所述的計(jì)算機(jī)可讀媒體,其中所述處理器的所述核心內(nèi)的所述堆 棧與應(yīng)用程序的線程相關(guān)聯(lián),且所述指令致使所述處理器在所述處理器的所述核心 內(nèi)的所述堆棧的所述內(nèi)容被轉(zhuǎn)移到所述堆棧擴(kuò)展時(shí)將所述應(yīng)用程序的所述線程置 于空閑狀態(tài)。
      44. 根據(jù)權(quán)利要求41所述的計(jì)算機(jī)可讀媒體,其中所述指令致使所述處理器將所述堆 棧擴(kuò)展的所述內(nèi)容轉(zhuǎn)移回到所述堆棧,以及在所述堆棧擴(kuò)展的所述內(nèi)容被轉(zhuǎn)移回到 所述堆棧時(shí)將所述應(yīng)用程序的所述線程置于空閑狀態(tài)。
      45. 根據(jù)權(quán)利要求41所述的計(jì)算機(jī)可讀媒體,其中所述指令致使所述處理器確定所述內(nèi)容下降到第二閾值大小以下;以及當(dāng)所述堆棧下降到所述第二閾值大小以下時(shí),將所述處理器的所述核心外部的所 述堆棧擴(kuò)展的至少一部分轉(zhuǎn)移到所述處理器的所述核心內(nèi)的所述堆棧。
      全文摘要
      本發(fā)明大體上是針對用于控制堆棧溢出的技術(shù)。本文描述的技術(shù)利用位于處理器核心外部的共用高速緩沖存儲器或存儲器的一部分作為堆棧擴(kuò)展。處理器核心監(jiān)視所述處理器核心內(nèi)的堆棧,并在所述處理器核心堆棧超過最大條目數(shù)目時(shí)將所述堆棧的內(nèi)容轉(zhuǎn)移到所述處理器外部的所述堆棧擴(kuò)展。當(dāng)所述處理器核心確定所述處理器核心內(nèi)的所述堆棧下降到最小條目數(shù)目以下時(shí),所述處理器核心將維持在所述堆棧擴(kuò)展中的所述內(nèi)容的至少一部分轉(zhuǎn)移到所述處理器核心內(nèi)的所述堆棧中。所述技術(shù)通過利用所述處理器核心外部的堆棧擴(kuò)展而防止了在所述處理器核心內(nèi)執(zhí)行的線程的故障和崩潰。
      文檔編號G06F9/50GK101460927SQ200780020616
      公開日2009年6月17日 申請日期2007年5月17日 優(yōu)先權(quán)日2006年6月6日
      發(fā)明者春 于, 云 杜, 焦國方 申請人:高通股份有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1