欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

代碼堆棧管理的制作方法_2

文檔序號:9794007閱讀:來源:國知局
作為尋址基址并且增 加偏移8192以計(jì)算位于偏移2*4KB(即,來自該蹦床函數(shù)的執(zhí)行代碼的兩個頁面)處的關(guān)聯(lián) 數(shù)據(jù)區(qū)域的地址以把將用作函數(shù)地址的地址加載至要傳遞控制的指令。指令"Id rll,8200 (r 11)"加載來自關(guān)聯(lián)至寄存器r 11的數(shù)據(jù)區(qū)域的值,該值用作靜態(tài)鏈值。指令"mtctr r 12" 將容納與嵌套函數(shù)相對應(yīng)的程序性代碼的函數(shù)的起始地址加載到ctr(計(jì)數(shù)寄存器)中并且 指令"bctr"分支到ctr中的值,即,將控制傳遞至已編譯函數(shù)。
[0027] 在一些實(shí)施例中,在代碼棧103中使用非齊次代碼,以及每個代碼棧條目具有單獨(dú) 并且不同的大小。在其它實(shí)施例中,代碼棧條目各自包括齊次蹦床函數(shù),使得可以通過建立 每個蹦床函數(shù)的關(guān)聯(lián)數(shù)據(jù)區(qū)域113以及消除跟蹤蹦床函數(shù)大小的必要以對蹦床函數(shù)進(jìn)行配 置。在一些實(shí)施例中,如果需要許多不同代碼序列,則可以將各自與不同代碼序列相對應(yīng)的 多個齊次代碼棧保持在存儲器105中。在代碼棧103包括齊次代碼棧的實(shí)施例中,當(dāng)新蹦床 函數(shù)的條目分配到代碼棧103上時(shí),由于蹦床函數(shù)已經(jīng)存在于已經(jīng)初始化以保持固定代碼 序列的代碼棧存儲器區(qū)域107中,則不需要對所分配代碼棧條目進(jìn)行寫入。先前存在的蹦床 函數(shù)引用與代碼棧條目相關(guān)聯(lián)的存儲器105的單獨(dú)數(shù)據(jù)區(qū)段中的數(shù)據(jù)區(qū)域113。因此,當(dāng)創(chuàng) 建指向嵌套函數(shù)的新函數(shù)指針時(shí),代碼棧條目的分配包括初始化與數(shù)據(jù)區(qū)域113中的蹦床 函數(shù)相關(guān)聯(lián)的數(shù)據(jù)(諸如函數(shù)地址和靜態(tài)鏈)。這在下面關(guān)于圖6進(jìn)行了更詳細(xì)的討論。
[0028] 在一些實(shí)施例中,預(yù)填充的蹦床函數(shù)的代碼棧103與位于存儲器105中每個蹦床函 數(shù)的固定偏移處的數(shù)據(jù)區(qū)(諸如數(shù)據(jù)區(qū)域113)相關(guān)聯(lián)。在一些實(shí)施例中,偏移對所有蹦床函 數(shù)都一樣;在表格1A中圖示了這種實(shí)施例,其中與代碼棧103中的代碼棧條目相關(guān)聯(lián)的每個 數(shù)據(jù)區(qū)域113在來自由bl .+4指令加載的地址的8192個字節(jié)處開始,該bl .+4指令加載指令 地址、當(dāng)前指令地址和下一個指令地址中的一個的值。在一些實(shí)施例中,與代碼棧條目相關(guān) 聯(lián)的數(shù)據(jù)區(qū)域113保存初始化嵌套函數(shù)在通過指向引用代碼棧中存儲的蹦床函數(shù)的嵌套函 數(shù)的函數(shù)指針調(diào)用時(shí)的執(zhí)行環(huán)境需要的信息。在一些實(shí)施例中,通過加載嵌套函數(shù)指針環(huán) 境創(chuàng)建函數(shù)指針,諸如,例如指向容納指向該嵌套函數(shù)靜態(tài)作用域的動態(tài)實(shí)例的嵌套函數(shù) 的指針的環(huán)境的靜態(tài)鏈,該靜態(tài)作用域存儲在與由bl.+4加載的值偏移8200處(與兩個4KB 頁面加8個字節(jié)相對應(yīng))。另外,嵌套函數(shù)與其為之創(chuàng)建環(huán)境的函數(shù)的入口地址相關(guān)聯(lián),使得 入口點(diǎn)位于距由bl .+4加載的值8192處(與兩個4KB頁面相對應(yīng)),即,在靜態(tài)鏈之前雙字處。 [0029]在一些實(shí)施例中,通過對距容納蹦床函數(shù)代碼的代碼棧條目限定(靜態(tài))偏移距離 處的固定大小數(shù)據(jù)區(qū)域進(jìn)行分配以使蹦床函數(shù)代碼與容納附加配置邏輯的數(shù)據(jù)區(qū)域113相 關(guān)聯(lián)。然而,當(dāng)代碼棧的大小超過偏移時(shí),由于進(jìn)一步擴(kuò)展將要求數(shù)據(jù)區(qū)域113與先前分配 的代碼棧條目重疊,因此達(dá)到進(jìn)一步擴(kuò)展的極限。在一些實(shí)施例中,可以根據(jù)需要改變該距 離并且當(dāng)偏移改變時(shí)移動代碼棧條目和數(shù)據(jù)區(qū)域中的至少一個,如表格1A所示,進(jìn)一步更 新蹦床函數(shù)的所有偏移,該蹦床函數(shù)與偏移8192和8200相對應(yīng)。在一些實(shí)施例中,可以移動 數(shù)據(jù)區(qū)域113,并且由于移動代碼需要對指向存儲在代碼棧條目中的代碼的所有指針進(jìn)行 更新,因此不移動代碼棧條目。
[0030] 在其它實(shí)施例中,不通過固定偏移而是通過邏輯關(guān)聯(lián)在代碼棧條目與數(shù)據(jù)區(qū)域之 間形成對應(yīng)。例如,起始于地址cb-i*CS(其中cb是代碼?;刂?,即,空代碼棧的代碼棧指 針的初始值,i是已經(jīng)被分配的第i個棧幀以及cs是代碼棧的固定代碼的預(yù)定義代碼大?。?的第i個代碼棧條目可以與數(shù)據(jù)地址db-i*ds(其中db是數(shù)據(jù)庫地址,即,與第一代碼棧條 目相關(guān)聯(lián)的第一數(shù)據(jù)區(qū)域113的起點(diǎn)、終點(diǎn)或者其它對應(yīng)地址,i是已經(jīng)被分配的第i個數(shù)據(jù) 區(qū)域113,以及ds是數(shù)據(jù)區(qū)域113的預(yù)定義大小)處的第i個關(guān)聯(lián)數(shù)據(jù)區(qū)域相關(guān)聯(lián)。當(dāng)ds相對 較小時(shí),可以在必須移動代碼棧的代碼棧條目或者數(shù)據(jù)區(qū)域113之前分配(db-cb)/ds棧幀。 在下面的表格1B中,示出了使用函數(shù)對應(yīng)計(jì)算偏移的蹦床函數(shù)代碼的示例,其中為每個條 目計(jì)算每個偏移以使得偏移=i * (ds+cs) + (ds_cs)+調(diào)節(jié)量。
[0031] 表格1B:示例蹦床函數(shù)代碼
[0033]在另一個實(shí)施例中,為了避免由于代碼棧條目與數(shù)據(jù)區(qū)域沖突而移動數(shù)據(jù)區(qū)域, 代碼棧沿一個方向增長,以及數(shù)據(jù)區(qū)域沿另一個方向增長,例如,代碼棧條目被分配在遞減 地址(cb_i * cs)處以及關(guān)聯(lián)數(shù)據(jù)區(qū)域113分配在遞增地址(db+i * ds)處。在一些實(shí)施例中, db = cb。在一些實(shí)施例中,還在與每個代碼棧條目相關(guān)聯(lián)的數(shù)據(jù)區(qū)域113中設(shè)置另外的環(huán)境 信息(諸如調(diào)試和展開信息)以使能調(diào)試和異常處理。
[0034]圖2A-C圖示了數(shù)據(jù)棧和代碼棧的實(shí)施例200A-C。圖2A和2B示出了與圖1的數(shù)據(jù)棧 102相對應(yīng)的數(shù)據(jù)棧201,以及與圖1的代碼棧103相對應(yīng)的代碼棧203。數(shù)據(jù)棧201包括多個 棧幀202A-N。棧幀202A-N的每個棧幀保存與應(yīng)用104的函數(shù)相對應(yīng)的一個或者多個變量。數(shù) 據(jù)棧201中的棧幀202A-N由處理器101自動地管理;即,響應(yīng)于由應(yīng)用104執(zhí)行的代碼,如應(yīng) 用104所需要的對代碼棧203中的棧幀202A-N進(jìn)行自動分配和解除分配。代碼棧203包括多 個代碼棧條目204A-N,容納例如蹦床函數(shù)代碼或者可以以LIF0方式管理的其它動態(tài)生成的 代碼。在一些實(shí)施例中,代碼棧203中的每個代碼棧條目容納指向數(shù)據(jù)棧201中的關(guān)聯(lián)棧幀 的指針(例如,存儲在與代碼棧條目相對應(yīng)并且指示創(chuàng)建代碼棧條目的函數(shù)的棧幀的數(shù)據(jù) 區(qū)域113中);如圖2A所示,代碼棧條目204B包括指向引用棧幀202B的關(guān)聯(lián)棧幀的指針207A, 以及代碼棧條目204D包括指向引用棧幀202D的關(guān)聯(lián)棧幀的指針207B。數(shù)據(jù)棧指針206引用 數(shù)據(jù)棧201中的最近條目(例如,棧幀202N)并且用于管理數(shù)據(jù)棧20UCSP 205引用代碼棧 203中的最近條目(例如,代碼棧條目204N)并且用于管理代碼棧203。圖2B示出了包括代碼 棧條目204N的代碼棧203的實(shí)施例200B,該代碼棧條目204N具有不指向數(shù)據(jù)棧201中有效棧 幀202N的指向關(guān)聯(lián)棧幀的指針207C。在下面關(guān)于圖3對圖2B進(jìn)行更詳細(xì)的討論。僅為了圖示 目的示出了圖2A-B;數(shù)據(jù)棧201和代碼棧203可以各自包括任何適當(dāng)數(shù)量的條目。此外,盡管 在圖2A-B中數(shù)據(jù)棧201和代碼棧203示出為向下增長,但是數(shù)據(jù)棧201和代碼棧203可以各自 在存儲器105中沿任何適當(dāng)方向增長。
[0035]圖2C示出了與棧幀202A-N和代碼棧條目204A-N相關(guān)聯(lián)的信息的實(shí)施例。與棧幀 202A-N的棧幀相對應(yīng)的棧幀210包括多個示例數(shù)據(jù)變量VAR1-VAR3。這些變量可以包括任何 類型的任何適當(dāng)變量,并且在棧幀210中可以有任何適當(dāng)數(shù)量的變量。如圖2C所示,代碼棧 條目204A-N的每個代碼棧條目可以包括具有關(guān)聯(lián)代碼棧頭212的代碼棧條目211。在一些實(shí) 施例中,代碼棧頭212包括代碼棧屏障(CSB)213。代碼棧頭212還包括指向關(guān)聯(lián)棧幀(諸如與 代碼棧條目211相關(guān)聯(lián)的棧幀210)的指針215。在各種實(shí)施例中,代碼棧頭212可以位于如圖 2C所示代碼棧203中的代碼棧頭的相應(yīng)代碼棧條目211內(nèi),或者,在其它實(shí)施例中,可以是位 于代碼棧203外部(例如,在數(shù)據(jù)區(qū)域113中)的單獨(dú)數(shù)據(jù)結(jié)構(gòu)。在一些實(shí)施例中,CSB 213可 以保持在單獨(dú)寄存器中或者作為棧幀210中的變量。代碼棧條目211還包括代碼區(qū)段216。代 碼區(qū)段216包括可執(zhí)行計(jì)算機(jī)代碼;在一些實(shí)施例中,代碼區(qū)段216包括與指向嵌套函數(shù)的 函數(shù)指針相對應(yīng)的蹦床函數(shù)代碼。在一些實(shí)施例中,蹦床函數(shù)代碼可以通過將靜態(tài)鏈加載 到寄存器中以及隨后將控制傳遞至位于代碼棧203外部的函數(shù)以初始化靜態(tài)嵌套函數(shù)的環(huán) 境。
[0036] 可以由處理器101對數(shù)據(jù)棧201中的棧幀202A-N進(jìn)行自動管理(即,分配和解除分 配)。在一些實(shí)施例中,如下所述可以關(guān)于用于圖3中圖示的代碼棧同步的方法300進(jìn)行代碼 棧203中的代碼棧條目204A-N的管理。在將新代碼棧條目分配在代碼棧203上之前,可以執(zhí) 行方法300以從代碼棧203移除任何無效條目。首先,在圖3的塊301中,對于最近代碼棧條目 (例如,圖2B的代碼棧條目204N),檢索指向關(guān)聯(lián)棧幀的指針(例如,如圖2B所示,指向被解除 分配的或者無效的棧幀的指針207C)。代碼棧203中的最近代碼棧條目是由CSP 205指向的 代碼棧條目。接著,在塊302中,判斷所檢索的指向關(guān)聯(lián)棧幀的指針是否指向數(shù)據(jù)棧201中的 有效棧幀。這可以通過將指向塊301中檢索的關(guān)聯(lián)棧幀的指針與數(shù)據(jù)棧指針206進(jìn)行比較來 判斷。在數(shù)據(jù)棧201和代碼棧203向下增長的實(shí)施例中,如果指向關(guān)聯(lián)棧幀的指針具有的值 小于數(shù)據(jù)棧指針206的值,則在塊302中確定指向關(guān)聯(lián)棧幀的指針不指向數(shù)據(jù)棧201中的有 效條目。例如,如圖2B所示,由于指向關(guān)聯(lián)棧幀的指針207C指向位于數(shù)據(jù)棧指針206下面 (即,小于數(shù)據(jù)棧指針206)的存儲器區(qū)域,因此指向與代碼棧條目204N相關(guān)聯(lián)的棧幀的指針 207C不指向數(shù)據(jù)棧201中的有效條目。如果在塊302中確定指向關(guān)聯(lián)棧幀的指針不指向數(shù)據(jù) 棧201中的有效棧幀,則流程從塊302進(jìn)行至塊303,其中代碼棧中的最近條目從代碼棧203 解除分配。這可以通過將CSP 205在代碼棧203中向上移動一個條目來完成。例如,在塊303 中,如圖2B所示,將CSP 205向上移動以指向代碼棧條目204M,并且代碼棧條目204N被解除 分配。流程從塊303隨后返回至塊301,并且重復(fù)方法300直到在塊302中確定指向與代碼棧 203中最近代碼棧條目相關(guān)聯(lián)的關(guān)聯(lián)棧幀的指針指向數(shù)據(jù)棧201中的有效棧幀,此時(shí)流程從 塊
當(dāng)前第2頁1 2 3 4 5 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
黎川县| 平遥县| SHOW| 宣化县| 湾仔区| 堆龙德庆县| 郁南县| 东阿县| 龙山县| 日照市| 武定县| 巴里| 柞水县| 张家口市| 孙吴县| 靖安县| 固阳县| 襄樊市| 成都市| 宝兴县| 寿阳县| 黄浦区| 无极县| 灵台县| 双牌县| 织金县| 白沙| 萨嘎县| 化德县| 同心县| 阿合奇县| 日土县| 平顺县| 扬州市| 保亭| 永仁县| 宁都县| 瑞昌市| 凭祥市| 清水县| 哈密市|