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

調(diào)試多線程代碼的制作方法

文檔序號:6360208閱讀:236來源:國知局
專利名稱:調(diào)試多線程代碼的制作方法
調(diào)試多線程代碼
背景技術(shù)
本申請一般地涉及改進(jìn)的數(shù)據(jù)處理裝置和方法,更具體地說,涉及為調(diào)試多線程代碼提供支持的機(jī)制。
在本領(lǐng)域的目前情況下,編寫在多個線程中運(yùn)行的計(jì)算機(jī)程序是用于改進(jìn)應(yīng)用性能的公認(rèn)方法。與根據(jù)程序順序依次執(zhí)行指令的單線程應(yīng)用不同,多線程應(yīng)用通過在系統(tǒng)的各種處理組件上同時運(yùn)行多個線程來改進(jìn)性能。性能改進(jìn)是因?yàn)槎鄠€處理器或硬件線程通常運(yùn)行多線程代碼,從而幫助應(yīng)用以較短的時間完成其任務(wù)。然而,多線程應(yīng)用的開發(fā)仍是一項(xiàng)困難的任務(wù),因?yàn)槌绦騿T通常必須插入同步代碼以使線程以所需方式運(yùn)行,以便計(jì)算作為順序程序運(yùn)行的應(yīng)用的等效結(jié)果。此類同步代碼可能難以編寫和維護(hù)。開發(fā)多線程應(yīng)用代碼的另一個困難是組織在線程之間共享數(shù)據(jù)。如果沒有精心組織線程如何在它們自身之間共享數(shù)據(jù),則應(yīng)用中的線程可能覆蓋彼此在存儲器中的數(shù)據(jù)項(xiàng)更改,或者可能產(chǎn)生不可預(yù)測的結(jié)果,因?yàn)槲磳ν粩?shù)據(jù)項(xiàng)的讀取和寫入進(jìn)行正確排序。這種情況通常被稱為“數(shù)據(jù)競爭”或簡稱“競爭條件”。已經(jīng)發(fā)明了許多同步基元(primitive)以幫助程序員開發(fā)多線程應(yīng)用。例如,信號、鎖和監(jiān)視器通常是用于強(qiáng)制共享數(shù)據(jù)訪問順序并確保線程以可預(yù)測的方式彼此交互的公認(rèn)技術(shù)。當(dāng)正確編寫的并行程序使用這些結(jié)構(gòu)時,它通常將產(chǎn)生正確的結(jié)果并以確定的方式運(yùn)行。然而,即使使用這些結(jié)構(gòu)和基元,開發(fā)多線程代碼的任務(wù)也不是一項(xiàng)簡單的任務(wù)。程序員可能由于未引入正確的同步代碼而忘記保護(hù)對共享數(shù)據(jù)項(xiàng)的訪問。此類未受保護(hù)的訪問被稱為惡魔訪問(demonic access),并且在運(yùn)行時非常難以跟蹤。因?yàn)闆]有應(yīng)用代碼實(shí)際上可以被認(rèn)為在實(shí)現(xiàn)時是正確的,所以在代碼開發(fā)之后通常是調(diào)試和測試階段。在此階段內(nèi),應(yīng)用運(yùn)行測試套件(通常被稱為回歸測試),并檢查結(jié)果以查看是否可以發(fā)布應(yīng)用。如果結(jié)果顯示應(yīng)用代碼中出現(xiàn)錯誤,則通過多種技術(shù)調(diào)試應(yīng)用代碼,例如將錯誤返回與其起源相聯(lián)系直到確定并糾正錯誤源。這種技術(shù)(在順序調(diào)試中已很困難)在多線程代碼中甚至更難以使用,因?yàn)閼?yīng)用代碼通常不是確定性的。例如,如果存在共享數(shù)據(jù)的惡魔訪問,則針對惡魔訪問運(yùn)行應(yīng)用可能具有不同的可能調(diào)度,其中某些調(diào)度可能根本不產(chǎn)生錯誤。因此,在調(diào)試多線程代碼中,重復(fù)執(zhí)行應(yīng)用以查找錯誤并不是一種可行的方法。缺乏可以幫助調(diào)試多線程應(yīng)用的工具加重了此問題。與順序代碼(其中當(dāng)代碼在程序的不同階段運(yùn)行時,程序員可以使用工具觀察代碼的行為)不同,并行程序可能不會每次都以相同方式執(zhí)行。因此,將存在以下情況錯誤有時自己顯現(xiàn),或者更糟糕的是錯誤可能很少自己顯現(xiàn),從而使其難以被發(fā)現(xiàn)。此外,用于順序調(diào)試的許多常規(guī)技術(shù)可能擾亂并行程序的計(jì)時,以致在調(diào)試會話開啟時掩蓋錯誤的出現(xiàn),使錯誤僅在隨后脫離調(diào)試工具時才出現(xiàn)。

發(fā)明內(nèi)容
在一個示例性實(shí)施例中,提供了一種在數(shù)據(jù)處理系統(tǒng)的處理器中用于調(diào)試應(yīng)用代碼的方法。所述方法包括在所述處理器的硬件単元中接收指令,所述指令具有所述指令正在嘗試訪問的目標(biāo)存儲器地址。所述方法還包括捜索與所述硬件単元關(guān)聯(lián)的內(nèi)容可尋址存儲器(CAM)以查找所述CAM中指定包括所述目標(biāo)存儲器地址的地址范圍的表項(xiàng)。此外,所述方法包括響應(yīng)于在所述CAM中找到指定包括所述目標(biāo)存儲器地址的地址范圍的表項(xiàng)而判定所述表項(xiàng)中的信息是否將所述指令標(biāo)識為感興趣的指令。此外,所述方法包括響應(yīng)于所述表項(xiàng)將所述指令標(biāo)識為感興趣的指令而生成異常并將所述異常發(fā)送到異常處理機(jī)或調(diào)試器應(yīng)用之一。所述方法還包括程序員為與所述硬件關(guān)聯(lián)的所述CAM加載包括在所述程序中各種線程之間共享的變量的地址范圍。此外,所述方法包括根據(jù)本發(fā)明的一個實(shí)施例設(shè)置運(yùn)行應(yīng)用線程的每個硬件線程的CAM。然后運(yùn)行所述程序,并 且如果線程訪問在所述CAM中指定的范圍內(nèi)的變量,則調(diào)試器驗(yàn)證所述應(yīng)用在訪問所述變量之前已獲得必需的同步結(jié)構(gòu)。訪問沒有保護(hù)的變量可能出現(xiàn)同步錯誤,此同步錯誤在常規(guī)調(diào)試中難以檢測。在其他示例性實(shí)施例中,提供了一種計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品包括具有計(jì)算機(jī)可讀程序的計(jì)算機(jī)可用或可讀介質(zhì)。當(dāng)所述計(jì)算機(jī)可讀程序在計(jì)算設(shè)備上執(zhí)行時,導(dǎo)致所述計(jì)算設(shè)備執(zhí)行上面關(guān)于所述方法示例性實(shí)施例概述的各種操作和它們的組

ロ ο在另ー個示例性實(shí)施例中,提供了一種系統(tǒng)/裝置。所述系統(tǒng)/裝置可以包括一個或多個處理器和耦合到所述ー個或多個處理器的存儲器。所述存儲器可以包括指令,當(dāng)所述指令由所述ー個或多個處理器執(zhí)行時,導(dǎo)致所述ー個或多個處理器執(zhí)行上面關(guān)于所述方法示例性實(shí)施例概述的各種操作和它們的組合。本發(fā)明的這些和其他特性和優(yōu)點(diǎn)將在以下對本發(fā)明的實(shí)例實(shí)施例的詳細(xì)說明中進(jìn)行描述,或者鑒于以下對本發(fā)明的實(shí)例實(shí)施例的詳細(xì)說明,本發(fā)明的這些和其他特性和優(yōu)點(diǎn)將對本領(lǐng)域的技術(shù)人員變得顯而易見。


現(xiàn)在僅通過實(shí)例的方式參考附圖描述本發(fā)明的各實(shí)施例,這些附圖是圖I是其中可以實(shí)現(xiàn)示例性實(shí)施例的各方面的處理器架構(gòu)的實(shí)例圖;圖2是根據(jù)一個示例性實(shí)施例的加載/存儲單元的實(shí)例方塊圖;以及圖3是概述根據(jù)ー個示例性實(shí)施例的加載/存儲單元的實(shí)例操作的流程圖。
具體實(shí)施例方式示例性實(shí)施例提供ー種為多線程計(jì)算機(jī)代碼提供調(diào)試支持的機(jī)制。示例性實(shí)施例的機(jī)制提供使得應(yīng)用能夠跟蹤對存儲器中多個范圍的存儲器訪問的硬件支持。所述硬件支持包括內(nèi)容可尋址存儲器(CAM)結(jié)構(gòu),其可以由所述應(yīng)用或控制所述應(yīng)用的調(diào)試器設(shè)置。所述CAM結(jié)構(gòu)中的每個表項(xiàng)都具有起始地址,其指定被監(jiān)視的存儲器范圍的起始地址。所述表項(xiàng)還包括長度字段、存儲位(或S位)和加載位(或L位),所述長度字段指定對應(yīng)于所述表項(xiàng)的被監(jiān)視的存儲器范圍的大小,所述存儲位和加載位使能分別檢測對由所述起始地址和長度定義的存儲器范圍的存儲器存儲和加載。在硬件級別,處理器在運(yùn)行的線程中檢查對存儲器的毎次訪問。如果存儲器訪問的地址與CAM中的表項(xiàng)之一匹配,即所述地址在與所述CAM中的表項(xiàng)對應(yīng)的存儲器范圍內(nèi),則硬件發(fā)出異常。所述異常導(dǎo)致存儲堆棧中的線程的狀態(tài),并執(zhí)行跳轉(zhuǎn)到軟件中的異常處理例程。如果存儲器訪問是存儲(store),并且對應(yīng)的地址位于由對應(yīng)S位被設(shè)置為預(yù)定值(例如I)的CAM表項(xiàng)之ー確定的范圍內(nèi),則發(fā)生訪問地址與CAM中的表項(xiàng)的匹配。如果存儲器訪問是加載(load),并且對應(yīng)的地址位于由對應(yīng)L位被設(shè)置為預(yù)定值(例如I)的CAM表項(xiàng)之ー確定的范圍內(nèi),則也會發(fā)生匹配。如果所述S位或所述L位未被設(shè)置為預(yù)定值(例如,所述S位或L位被設(shè)置為0),并且所述訪問分別是存儲或加載,則忽略匹配。為了調(diào)試應(yīng)用,所述應(yīng)用或控制所述應(yīng)用的調(diào)試器可以將被監(jiān)視的存儲器范圍設(shè)置成CAM表項(xiàng)之一,并且可以提供異常處理機(jī)以處理對被監(jiān)視范圍的任何存儲器訪問時生成的異常。所述異常處理機(jī)可以用于例如通過記錄出現(xiàn)異常時特定變量的狀態(tài)以及例如可以由性能計(jì)數(shù)器生成的其他執(zhí)行參數(shù)等而確定在執(zhí)行期間在應(yīng)用代碼中 的何處修改了所述變量。所述CAM結(jié)構(gòu)允許硬件同時監(jiān)視多個存儲器范圍,而沒有任何可以導(dǎo)致執(zhí)行擴(kuò)張的性能開銷。為了調(diào)試多線程應(yīng)用,所述應(yīng)用或調(diào)試器可以將異常處理機(jī)設(shè)置為檢查當(dāng)另一線程在訪問之前已獲得保護(hù)同步對象(例如鎖)時,所接收的指令是否對變量的存儲器地址執(zhí)行存儲或加載。如果沒有,則出現(xiàn)競爭條件或?qū)蚕碜兞康膼耗гL問,它們很常見并且難以在多線程應(yīng)用中發(fā)現(xiàn)錯誤。如果在訪問之前已獲得保護(hù)同步對象,則尚未遇到競爭條件或?qū)蚕碜兞康膼耗гL問??梢允褂檬纠詫?shí)施例的硬件機(jī)制發(fā)現(xiàn)其他類型的難以發(fā)現(xiàn)的錯誤,以便提供支持以生成調(diào)試異常并將執(zhí)行轉(zhuǎn)移到適當(dāng)?shù)漠惓L幚頇C(jī),從而收集跟蹤信息以用于調(diào)試目的。示例性實(shí)施例的機(jī)制可以用于許多不同類型的數(shù)據(jù)處理系統(tǒng)和處理器架構(gòu)。示例性實(shí)施例可以用于單處理器順序處理架構(gòu)和多處理器、多線程數(shù)據(jù)處理系統(tǒng)架構(gòu),以便為計(jì)算機(jī)程序的調(diào)試提供硬件支持。然而,出于此說明的目的,將假設(shè)其中實(shí)現(xiàn)示例性實(shí)施例的機(jī)制的數(shù)據(jù)處理系統(tǒng)是提供多線程硬件的多處理器(或多核)數(shù)據(jù)處理系統(tǒng)。然而,應(yīng)理解,示例性實(shí)施例和本發(fā)明并不限于此。如本領(lǐng)域的技術(shù)人員將理解的,本發(fā)明可以體現(xiàn)為系統(tǒng)、方法或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可以采取完全硬件實(shí)施例、完全軟件實(shí)施例(包括固件、駐留軟件、微代碼等)或組合了軟件和硬件方面的實(shí)施例的形式,所有這些實(shí)施例在此通??梢员环Q為“電路”、“模塊”或“系統(tǒng)”。此外,本發(fā)明可以采取體現(xiàn)在任何有形表達(dá)介質(zhì)(在介質(zhì)中包含計(jì)算機(jī)可用程序代碼)中的計(jì)算機(jī)程序產(chǎn)品的形式??梢允褂靡粋€或多個計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)的任意組合。所述計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)例如可以是(但不限干)電、磁、光、電磁、紅外線或半導(dǎo)體系統(tǒng)、裝置、設(shè)備或傳播介質(zhì)。所述計(jì)算機(jī)可讀介質(zhì)的更具體的實(shí)例(非窮舉列表)將包括以下項(xiàng)具有一條或多條線的電連接、便攜式計(jì)算機(jī)軟盤、硬盤、隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)、可擦寫可編程只讀存儲器(EPR0M或閃存)、光纖、便攜式光盤只讀存儲器(⑶ROM)、光存儲設(shè)備、諸如那些支持因特網(wǎng)或內(nèi)聯(lián)網(wǎng)的傳輸介質(zhì)或磁存儲設(shè)備。要指出的是,所述計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)甚至可以是程序被打印在其上的紙張或其他適合的介質(zhì),因?yàn)樗龀绦蚩梢酝ㄟ^例如光掃描所述紙張或其他介質(zhì)被電子地捕獲,然后被編譯、解釋或另外以適合的方式被處理(如果必要),然后被存儲在計(jì)算機(jī)存儲器中。在本文檔的上下文中,計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)可以是任何能夠包含、存儲、傳送、傳播或傳輸由指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用或與指令執(zhí)行系統(tǒng)、裝置或設(shè)備結(jié)合的程序的介質(zhì)。所述計(jì)算機(jī)可用介質(zhì)可以包括其中包含計(jì)算機(jī)可用程序代碼(在基帶中或作為載波的一部分)的傳播數(shù)據(jù)信號??梢允褂萌魏芜m當(dāng)?shù)慕橘|(zhì)(包括但不限于無線、線纜、光纜、射頻(RF)等)來傳輸所述計(jì)算機(jī)可用程序代碼。用于執(zhí)行本發(fā)明的操作的計(jì)算機(jī)程序代碼可以使用包含一種或多種編程語言的任意組合來編寫,所述編程語言包括諸如J ava 、Smalltalk 、C++之類的面向?qū)ο蟮木幊陶Z言或者諸如“C”編程語言或類似的編程語言之類的常規(guī)過程編程語言。所述程序代碼可以完全地在用戶計(jì)算機(jī)上執(zhí)行、部分地在用戶計(jì)算機(jī)上執(zhí)行、作為獨(dú)立的軟件包、部分地在用戶計(jì)算機(jī)上井部分地在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行,或者完全地在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在后者的情況中,所述遠(yuǎn)程計(jì)算機(jī)可以通過包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)的任何類型網(wǎng)絡(luò)與用戶的計(jì)算機(jī)相連,也可以與外部計(jì)算機(jī)進(jìn)行連接(例如,使用因特網(wǎng)服務(wù)提供商通過因特網(wǎng)連接)。此外,所述程序代碼可以包含在所述服務(wù)器或所述遠(yuǎn)程計(jì)算機(jī)上的計(jì)算機(jī)可讀存儲介質(zhì)中,并通過網(wǎng)絡(luò)下載到所述遠(yuǎn)程計(jì)算機(jī)或所述用戶計(jì)算機(jī)的計(jì)算機(jī)可讀存儲介質(zhì)中以便存儲和/或執(zhí)行。此外,通過網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算系統(tǒng)或數(shù)據(jù)處理系統(tǒng)下載所述程序代碼之后,任何計(jì)算系統(tǒng)或數(shù)據(jù)處理系統(tǒng)都可以將所述程序代碼存儲在計(jì)算機(jī)可讀存儲介質(zhì)中。下面參考根據(jù)本發(fā)明的示例性實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方塊圖對示例性實(shí)施例進(jìn)行描述。將理解,所述流程圖和/或方塊圖的每個方塊以及所述流程圖和/或方塊圖中的方塊的組合可以由計(jì)算機(jī)程序指令來實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可以被提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置的處理器以產(chǎn)生機(jī)器,以便通過所述計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置的處理器執(zhí)行的所述指令產(chǎn)生用于實(shí)現(xiàn)ー個或多個流程圖和/或方塊圖方塊中指定的功能/操作的裝置。這些計(jì)算機(jī)程序指令也可以被存儲在能夠引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置以特定方式執(zhí)行功能的計(jì)算機(jī)可讀介質(zhì)中,以便存儲在所述計(jì)算機(jī)可讀介質(zhì)中的所述指令產(chǎn)生一件包括實(shí)現(xiàn)在ー個或多個流程圖和/或方塊圖方塊中指定的功能/操作的指令裝置的制品。所述計(jì)算機(jī)程序指令還可被加載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置,以導(dǎo)致在所述計(jì)算機(jī)或其他可編程裝置上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的過程,從而在所述計(jì)算機(jī)或其他可編程裝置上執(zhí)行的指令提供用于實(shí)現(xiàn)在ー個或多個流程圖和/或方塊圖方塊中指定的功能/操作的過程。附圖中的流程圖和方塊圖示出了根據(jù)本發(fā)明的各種實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)施方式的架構(gòu)、功能和操作。在此方面,所述流程圖或方塊圖中的每個方塊都可以表示代碼的模塊、段或部分,所述代碼包括用于實(shí)現(xiàn)指定的邏輯功能(多個)的一個或多個可執(zhí)行指令。還應(yīng)指出,在某些備選實(shí)施方式中,在方塊中說明的功能可以不按圖中說明的順序發(fā)生。例如,示為連續(xù)的兩個方塊可以實(shí)際上被基本同時地執(zhí)行,或者某些時候,取決于所涉及的功能,可以以相反的順序執(zhí)行所述方塊。還將指出,所述方塊圖和/或流程圖的每個方塊以及所述方塊圖和/或流程圖中的方塊的組合可以由執(zhí)行指定功能或操作的基于專用硬件的系統(tǒng)或?qū)S糜布陀?jì)算機(jī)指令的組合來實(shí)現(xiàn)。
參考圖1,根據(jù)示例性實(shí)施例示出了顯示功能単元和寄存器的雙線程處理器設(shè)計(jì)的示例性方塊圖。處理器100例如可以實(shí)現(xiàn)為多線程數(shù)據(jù)處理系統(tǒng)架構(gòu)中的ー個或多個處理單元。即,處理器100可以包括支持同時執(zhí)行多個線程的一個或多個處理器核心。例如,處理器100可以包括單個集成電路超標(biāo)量微處理器,其具有也可以以單線程模式運(yùn)行的雙線程同步多線程(SMT)。因此,如下面進(jìn)ー步討論的那樣,處理器100包括各種單元、寄存器、緩沖器、存儲器和其他部分,它們?nèi)坑杉呻娐沸纬?。?yīng)理解,盡管在此出于示例目的參考特定處理器架構(gòu)和特定多線程能力,但示例性實(shí)施例的機(jī)制適用于支持任何級別的多線程(例如,雙線程、四線程等)的任何處理器架構(gòu)。如圖I中所示,指令取回単元(IFU) 102連接到指令高速緩存104。指令高速緩存104保存多個待執(zhí)行程序(線程)的指令。指令高速緩存104還具有到2級(L2)高速緩存/儲器106的接ロ。IFU 102根據(jù)指令地址從指令高速緩存104請求指令,并將指令傳遞到指令解碼單元108。在一個示例性實(shí)施例中,IFU 102可以同時針對最多兩個線程從指令高速緩存104請求多個指令。指令解碼單元108同時針對最多兩個線程對多個指令進(jìn)行 解碼,并將解碼后的指令傳遞到指令定序器単元(ISU) 109。處理器100還可以包括發(fā)出隊(duì)列110,發(fā)出隊(duì)列110從ISU 109接收解碼后的指令。當(dāng)?shù)却峙傻竭m當(dāng)?shù)膱?zhí)行單元時,指令被存儲在發(fā)出隊(duì)列110中。為了使亂序處理器以順序方式運(yùn)行,ISU 109可以選擇性地使用每個指令之間的偽相關(guān)性快速發(fā)出指令。例如在寫后讀相關(guān)性中,如果指令沒有產(chǎn)生數(shù)據(jù),則ISU 109可以按指令添加額外的源操作數(shù)(也被稱為消費(fèi)者)以指向上一個目標(biāo)指令(也被稱為產(chǎn)生者)。當(dāng)發(fā)出產(chǎn)生者吋,發(fā)出隊(duì)列110則可以喚醒消費(fèi)者以便發(fā)出。通過引入偽相關(guān)性,可以創(chuàng)建相關(guān)指令鏈,而指令則可以僅順序發(fā)出。ISU 109使用添加的消費(fèi)者實(shí)現(xiàn)指令調(diào)度目的,并且當(dāng)執(zhí)行指令時,實(shí)際上不使用來自添加的相關(guān)性的數(shù)據(jù)。一旦ISU 109選擇性地添加了任何所需的偽相關(guān)性,發(fā)出隊(duì)列110就接管并針對每個線程順序發(fā)出指令,然后針對每個線程將指令輸出或發(fā)出到處理器的執(zhí)行單元 112、114、116、118、120、122、124、126 和 128。在一個示例性實(shí)施例中,處理器的執(zhí)行單元可以包括分支単元112、加載/存儲單元(LSUA) 114和(LSUB) 116、定點(diǎn)執(zhí)行單元(FXUA) 118和(FXUB) 120、浮點(diǎn)執(zhí)行單元(FPUA)122和(FPUBH24,以及向量多媒體擴(kuò)展單元(VMXA)126和(VMXB)128。執(zhí)行單元112、114、116、118、120、122、124、126和128完全在兩個線程之間共享,意味著執(zhí)行單元112,114,116、118、120、122、124、126和128可以從ー個或兩個線程接收指令。所述處理器包括多個寄存器組130、132、134、136、138、140、142、144和146,它們也可以被稱為架構(gòu)式寄存器文件(ARF)。ARF是在指令完成執(zhí)行之后存儲完成的數(shù)據(jù)的文件。ARF 130、132、134、136、138、140、142、144和146可以針對兩個線程中的每個線程単獨(dú)存儲數(shù)據(jù),并可以按指令類型存儲數(shù)據(jù),即,通用寄存器(GPR) 130和132、浮點(diǎn)寄存器(FPR) 134和136、專用寄存器(SPR)138和140,以及向量寄存器(VR) 144和146。按類型和按線程単獨(dú)存儲完成的數(shù)據(jù)有助于在處理指令時減少處理器競爭。所述處理器另外包括ー組共享專用寄存器(SPR) 142以便保存程序狀態(tài),例如指令指針、堆棧指針或處理器狀態(tài)字,它們可以用于來自ー個或兩個線程的指令。執(zhí)行單元112、114、116、118、120、122、124、126和128通過簡化的內(nèi)部總線結(jié)構(gòu)149連接到ARF 130、132、134、136、138、140、142、144 和 146。為了執(zhí)行浮點(diǎn)指令,F(xiàn)PUA 122和FPUB 124從FPR 134和136檢索寄存器源操作數(shù)信息,此信息是執(zhí)行指令所需的輸入數(shù)據(jù),前提是執(zhí)行指令所需的指令數(shù)據(jù)完整或者數(shù)據(jù)已經(jīng)過管道中的清倉點(diǎn)(flushing point)。完整數(shù)據(jù)是指在指令完成執(zhí)行之后由執(zhí)行單元生成并存儲在ARF (例如ARF 130、132、134、136、138、140、142、144和146)中的數(shù)據(jù)。不完整數(shù)據(jù)是指在其中指令尚未完全執(zhí)行的指令執(zhí)行期間生成的數(shù)據(jù)。FPUA122和FPUB 124根據(jù)每個執(zhí)行指令所屬的線程輸入它們的數(shù)據(jù)。例如,F(xiàn)PUA 122將完成的數(shù)據(jù)輸入到FPR134,F(xiàn)PUB 124將完成的數(shù)據(jù)輸入到FPR 136,因?yàn)镕PUA 122,FPUB 124以及FPR 134和136是線程特定的。 在指令執(zhí)行期間,當(dāng)指令已在管道中經(jīng)過清倉點(diǎn)時,F(xiàn)PUA 122和FPUB 124將其目的地寄存器操作數(shù)數(shù)據(jù)或在指令執(zhí)行期間生成的指令數(shù)據(jù)輸出到FPR 134和136。在指令執(zhí)行期間,當(dāng)指令已在管道中經(jīng)過清倉點(diǎn)時,F(xiàn)XUA 118、FXUB 120、LSUA 114和LSUB 116將其目的地寄存器操作數(shù)數(shù)據(jù)或在指令執(zhí)行期間生成的指令數(shù)據(jù)輸出到GPR 130和132。在指令子集的執(zhí)行期間,當(dāng)指令已在管道中經(jīng)過清倉點(diǎn)時,F(xiàn)XUA 118、FXUB120和分支單元112將其目的地寄存器操作數(shù)數(shù)據(jù)輸出到SPR 138、140和142。存儲在SPR 138和140中的程序狀態(tài)(例如指令指針、堆棧指針或處理器狀態(tài)字)指示到達(dá)ISU 109的線程優(yōu)先級152。在指令執(zhí)行期間,當(dāng)指令已在管道中經(jīng)過清倉點(diǎn)時,VMXA 126和VMXB 128將其目的地寄存器操作數(shù)數(shù)據(jù)輸出到VR 144和146。數(shù)據(jù)高速緩存150還可以具有與之關(guān)聯(lián)的非緩存單元(未示出),所述非緩存單元接受來自處理器的數(shù)據(jù)并將其直接寫入2級高速緩存/儲器106。通過這種方式,所述非緩存單元繞過存儲到高速緩存所需的一致性協(xié)議。響應(yīng)于從指令高速緩存104輸入并由指令解碼單元108解碼的指令,ISU 109選擇性地將指令分派到發(fā)出隊(duì)列110,然后針對指令類型和線程分派到執(zhí)行單元112、114、116、118、120、122、124、126 和 128。接著,執(zhí)行單元 112、114、116、118、120、122、124、126 和 128執(zhí)行具有特定指令類別或類型的一個或多個指令。例如,F(xiàn)XUA 118和FXUB 120針對寄存器源操作數(shù)執(zhí)行定點(diǎn)數(shù)學(xué)運(yùn)算,例如加法、減法、“與”運(yùn)算、“或”運(yùn)算和“異或”運(yùn)算。FPUA122和FPUB 124針對寄存器源操作數(shù)執(zhí)行浮點(diǎn)數(shù)學(xué)運(yùn)算,例如浮點(diǎn)乘法和除法。LSUA 114和LSUB 116執(zhí)行加載和存儲指令,這些指令在數(shù)據(jù)高速緩存150與ARF 130、132、134和136之間移動操作數(shù)數(shù)據(jù)。VMXA 126和VMXB 128執(zhí)行包括多個數(shù)據(jù)的單指令運(yùn)算。分支單元112執(zhí)行分支指令,這些指令通過修改IFU 102使用的指令地址以便從指令高速緩存104請求指令而有條件地改變程序的執(zhí)行流程。指令完成單元154監(jiān)視內(nèi)部總線結(jié)構(gòu)149以確定在執(zhí)行單元112、114、116、118、120、122、124、126和128中執(zhí)行的指令何時完成將其操作數(shù)結(jié)果寫入ARF 130、132、134、136、138、140、142、144 和 146。由分支單元 112、FXUA 118、FXUB 120、LSUA 114 和 LSUB116執(zhí)行的指令需要相同數(shù)量的周期以便執(zhí)行,而由FPUA 122,FPUB 124,VMXA 126和VMXB128執(zhí)行的指令需要可變且更大數(shù)量的周期以便執(zhí)行。因此,分組在一起并同時開始執(zhí)行的指令不一定冋時完成執(zhí)彳丁。指令的“完成”意味著指令在執(zhí)打單兀112、114、116、118、120、122、124、126或128之一中完成執(zhí)行、已經(jīng)過清倉點(diǎn),并且已經(jīng)以架構(gòu)狀態(tài)更新所有較舊的指令(因?yàn)橹噶畋仨氻樞蛲瓿?。因此,指令現(xiàn)在可以完成并更新架構(gòu)狀態(tài),這意味著在指令完成時更新數(shù)據(jù)的最終狀態(tài)。架構(gòu)狀態(tài)僅可順序更新,即指令必須順序完成,并且必須在每個指令完成時更新完成的數(shù)據(jù)。指令完成單元154監(jiān)視指令的完成,并將控制信息156發(fā)送到ISU 109以通知ISU109可以將更多的指令組分派到執(zhí)行單元112、114、116、118、120、122、124、126和128。ISU109發(fā)送分派信號158,此信號用作節(jié)流閥以將更多指令沿管道帶給所述分派單元、IFU102和指令解碼單元108,以便指示它已準(zhǔn)備好接收更多解碼后的指令。盡管處理器100提供了單個集成電路超標(biāo)量微處理器的詳細(xì)說明,所述微處理器具有也可以以單線程模式運(yùn)行的雙線程同步多線程(SMT),但示例性實(shí)施例并不限于此類微處理器。S卩,示例性實(shí)施例可以以使用管道技術(shù)的任何類型的處理器實(shí)現(xiàn)。在圖I中所示的架構(gòu)中,可以增加一個或多個加載/存儲單元114和 116以包括硬件內(nèi)容可尋址存儲器(CAM)結(jié)構(gòu)和邏輯以便實(shí)現(xiàn)示例性實(shí)施例的機(jī)制。內(nèi)容可尋址存儲器(CAM)是一種特殊類型的硬件搜索引擎,其對于搜索密集型應(yīng)用而言遠(yuǎn)快于算術(shù)方法。CAM包括常規(guī)半導(dǎo)體存儲器(通常為SRAM)并添加了使得搜索操作能夠在單個處理器時鐘周期內(nèi)完成的比較電路。有關(guān)CAM的更多信息,請參考Pagiamtzis等人的“Content-Addressable Memory(CAM)Circuits and Architectures:ATutorial andSurvey (內(nèi)容可尋址存儲器(CAM)電路和架構(gòu)教程和調(diào)查)” (IEEE固態(tài)電路期刊,第41卷第3期,第712-727頁,2006年3月)。所述加載/存儲單元的邏輯及其CAM結(jié)構(gòu)可由應(yīng)用、調(diào)試器等配置,以便定義存儲器(例如主存儲器)范圍,針對此存儲器范圍的加載和/或存儲操作應(yīng)為此范圍生成異常以便促進(jìn)收集調(diào)試信息。所述處理器增加了特殊指令以允許調(diào)試器或應(yīng)用訪問CAM結(jié)構(gòu),以便例如為CAM結(jié)構(gòu)加載范圍并設(shè)置對應(yīng)的S和L位。此外,該指令允許應(yīng)用在不發(fā)生調(diào)試時完全關(guān)閉CAM以節(jié)省能源。所述應(yīng)用或調(diào)試器在CAM結(jié)構(gòu)中創(chuàng)建表項(xiàng),此表項(xiàng)指定存儲器范圍的起始地址、存儲器范圍的長度,以及到此存儲器范圍的加載、存儲或加載和存儲是否生成異常以便由異常處理機(jī)或調(diào)試器應(yīng)用來處理。此信息被存儲在CAM結(jié)構(gòu)內(nèi)的表項(xiàng)中,并可根據(jù)訪問操作的地址搜索以判定所述訪問操作的地址是否落入由CAM結(jié)構(gòu)中的表項(xiàng)之一指定的范圍之內(nèi)。如果是,并且所述訪問操作是被指示為生成異常的訪問操作,則可以生成異常并由異常處理機(jī)或調(diào)試器處理異常以便收集調(diào)試信息和/或執(zhí)行應(yīng)用的實(shí)際調(diào)試。無論應(yīng)用是否為多線程應(yīng)用,都可以執(zhí)行此操作。異常處理機(jī)或調(diào)試器可以被配置為在多線程應(yīng)用中標(biāo)識難以發(fā)現(xiàn)的錯誤,例如競爭條件或?qū)蚕碜兞康膼耗гL問。例如,為了檢查競爭條件或惡魔訪問,異常處理機(jī)或調(diào)試器可以進(jìn)行檢查以查看提交訪問操作的線程是否在嘗試所述訪問操作之前已獲得由所述訪問操作中的地址指定的存儲器位置上的鎖。如果是,則調(diào)試器或異常處理機(jī)可以不執(zhí)行任何操作并且允許應(yīng)用繼續(xù)執(zhí)行。然而,如果嘗試所述訪問操作的線程沒有首先獲得存儲器位置的鎖,則調(diào)試器或異常處理機(jī)可以接管應(yīng)用的執(zhí)行并檢索調(diào)試或跟蹤信息以便在分析中使用,從而標(biāo)識應(yīng)用代碼中的潛在錯誤。如果所述訪問操作不是被指示為生成異常的訪問操作,或者所述訪問操作的地址未落入由CAM中的表項(xiàng)定義的存儲器范圍之一內(nèi),則可以執(zhí)行所述訪問操作而不生成異

巾O
圖2是根據(jù)一個示例性實(shí)施例的加載/存儲單元的實(shí)例方塊圖。如圖2中所示,增加了加載/存儲單元230以包括內(nèi)容可尋址存儲器(CAM),其具有一個或多個CAM表項(xiàng)和搜索邏輯249。每個CAM表項(xiàng)包括起始地址242、長度244、存儲位(S位)246和加載位(L位)248。起始地址242和長度244定義使用CAM 240監(jiān)視的存儲器的地址范圍。起始地址242和長度244可以按照有效地址、虛擬地址、實(shí)地址或物理地址等指定,具體取決于特定的實(shí)施方式。S位246和L位248指定是監(jiān)視針對由對應(yīng)起始地址242和長度244指定的存儲器地址范圍的存儲和加載指令/操作之一還是兩者,即,應(yīng)生成需要異常處理的異常。應(yīng)指出,在示例性實(shí)施例的某些實(shí)施方式中,可以使用單個CAM結(jié)構(gòu)240處理由在處理器架構(gòu)中執(zhí)行的所有線程所執(zhí)行的所有加載/存儲指令。備選地,可以針對每個線程提供單獨(dú)的CAM結(jié)構(gòu)240,以便CAM結(jié)構(gòu)240與線程上下文關(guān)聯(lián)。因此,加載/存儲單元230可以具有多個CAM結(jié)構(gòu)240,在處理器中執(zhí)行的每個線程具有一個CAM結(jié)構(gòu)240。備選地,在具有多個加載/存儲單元230的架構(gòu)中,每個加載/存儲單元230可以針對它們處理的每個線程具有一個或多個CAM結(jié)構(gòu)240。在多個CAM結(jié)構(gòu)240的情況下,每個線程具有一個結(jié)構(gòu),哪個CAM結(jié)構(gòu)240對應(yīng)于哪個線程可以在特定線程的線程上下文信息中指定。 應(yīng)用或調(diào)試器280可以在CAM 240中生成表項(xiàng),以便監(jiān)視特定存儲器地址范圍,并監(jiān)視針對被監(jiān)視存儲器地址范圍的特定指令,例如存儲和/或加載指令。應(yīng)理解,使用示例性實(shí)施例的機(jī)制,不需要監(jiān)視被監(jiān)視存儲器的所有部分。相反,示例性實(shí)施例的機(jī)制允許應(yīng)用或調(diào)試器280針對存儲器的個體部分,即存儲器的個體地址范圍,以便可以執(zhí)行有針對性的跟蹤和調(diào)試。例如,CAM中的表項(xiàng)可以與對應(yīng)于特定變量的存儲器地址范圍關(guān)聯(lián),因此,示例性實(shí)施例的機(jī)制可以用于根據(jù)此特定變量來跟蹤和調(diào)試應(yīng)用代碼的執(zhí)行。CAM 240的搜索邏輯249用于在同一處理器周期內(nèi)快速搜索CAM240中的所有表項(xiàng),并判定是否具有輸入地址的匹配表項(xiàng)。具體地說,響應(yīng)于發(fā)出隊(duì)列210向加載/存儲單元230發(fā)出指令220,搜索邏輯249接收與指令220關(guān)聯(lián)的輸入地址222。指令220可以是加載或存儲指令。響應(yīng)于接收到指令220及其輸入地址222,搜索邏輯249搜索由CAM 240中的每個表項(xiàng)的起始地址242和長度244指定的地址范圍,以判定輸入地址222是否落入CAM 240中的表項(xiàng)的地址范圍之內(nèi)。如果是,則確定匹配表項(xiàng)的S位246和L位248的狀態(tài)并將其與加載或存儲指令220的操作碼比較。如果指令220的操作碼指示所述指令是存儲指令,并且對應(yīng)的匹配CAM表項(xiàng)的S位246被設(shè)置為預(yù)定值(例如1),則CAM 240的邏輯可以生成異常250。同樣,如果指令220的操作碼指示所述指令是加載指令,并且對應(yīng)的匹配CAM表項(xiàng)的L位248被設(shè)置為預(yù)定值(例如1),則CAM 240的邏輯也可以生成異常250。如果所述指令是加載指令或存儲指令,并且對應(yīng)的S位246或L位248未被設(shè)置為預(yù)定值,則不生成異常,并且所述指令的執(zhí)行簡單地通過加載/存儲單元230以正常方式繼續(xù)。應(yīng)指出,針對提交加載/存儲指令220的每個線程執(zhí)行此對CAM 240中的表項(xiàng)的檢查。因此,可以在處理器中執(zhí)行多個線程,并且每個線程都由其對應(yīng)的CAM結(jié)構(gòu)以上述方式檢查,以判定加載/存儲指令220是否針對感興趣的地址范圍并且是否是感興趣的指令。因此,可以基本上同時監(jiān)視多個線程,而不必如現(xiàn)有技術(shù)需要的那樣按線程序列化對線程的監(jiān)視。此外,CAM結(jié)構(gòu)240允許針對存儲器的個體地址范圍以及個體指令類型,例如加載、存儲或加載和存儲兩者。如果CAM 240生成異常250,則可以將該異常提供給異常處理機(jī)260。備選地,可以將該異常直接發(fā)送到應(yīng)用或調(diào)試器280而不是具有單獨(dú)的異常處理機(jī)260??梢灶A(yù)先注冊異常處理機(jī)260或應(yīng)用/調(diào)試器208以代表執(zhí)行應(yīng)用接收異常。這可以使用諸如UNIX的ptrace O系統(tǒng)調(diào)用或UNIX和UNIX式系統(tǒng)的信號處理機(jī)制之類的傳統(tǒng)操作系統(tǒng)技術(shù)來執(zhí)行。操作系統(tǒng)負(fù)責(zé)將異常引導(dǎo)到適當(dāng)?shù)膶?shí)體(調(diào)試器或應(yīng)用)以及適當(dāng)?shù)拇a處理器,如在本領(lǐng)域中執(zhí)行的那樣。如果生成異常250,則將應(yīng)用代碼的執(zhí)行轉(zhuǎn)移到異常處理機(jī)260或應(yīng)用/調(diào)試器280,它們?nèi)缓罂梢赃\(yùn)行以在跟蹤數(shù)據(jù)結(jié)構(gòu)270中收集跟蹤/調(diào)試信息。應(yīng)用/調(diào)試器280可以針對跟蹤數(shù)據(jù)結(jié)構(gòu)270運(yùn)行以執(zhí)行分析并標(biāo)識應(yīng)用代碼中的潛在錯誤。例如,應(yīng)用/調(diào)試器280可以通過基本上同時訪問同一存儲器地址范圍的多個線程而標(biāo)識潛在的競爭條件或惡魔訪問。競爭條件或惡魔訪問可能對應(yīng)用代碼的執(zhí)行造成嚴(yán)重的問題,因?yàn)閿?shù)據(jù)可能損壞或以其他方式對于嘗試訪問此數(shù)據(jù)的一個或多個線程而言變得不正確,這歸因于一個線程正在修改數(shù)據(jù),而另一個線程正在嘗試使用該數(shù)據(jù)或以不同方式修改該數(shù)據(jù)。例如,第一線程的類型可以為 Lock(I);V+= I;Unlock (I);第二線程的類型可以為v+=2 ; //惡魔變量訪問如果在進(jìn)入第一線程之前v==3,則在退出之后v==4、v==5、v==6均有可能。如果在進(jìn)入第二線程之前v==2,則同樣如此。此外,如果在進(jìn)入第二線程之前v==3,則也可能v==5和v==6。因此,如果并行執(zhí)行第一和第二線程,則當(dāng)在第一和第二線程中V值相同時,可能發(fā)生競爭條件或惡魔訪問。可以針對線程2檢測此類競爭條件或惡魔訪問,因?yàn)榫€程2沒有在嘗試訪問存儲器位置之前獲得此位置上的鎖。這是一個簡單的實(shí)例,但它示出了可能的問題。多線程應(yīng)用中發(fā)生的實(shí)際錯誤通常比這更復(fù)雜,但同樣可以使用示例性實(shí)施例的CAM結(jié)構(gòu)和異常處理來檢測。應(yīng)用/調(diào)試器280可以提供調(diào)試器輸出290,其詳述了應(yīng)用/調(diào)試器280針對存儲在跟蹤數(shù)據(jù)結(jié)構(gòu)270中的跟蹤信息執(zhí)行的分析的結(jié)果。例如,應(yīng)用/調(diào)試器280可以按線程標(biāo)識可能的競爭條件或惡魔訪問,標(biāo)識涉及的線程以及引起競爭條件/惡魔訪問的指令等。根據(jù)在跟蹤數(shù)據(jù)結(jié)構(gòu)270中收集的跟蹤信息以及應(yīng)用/調(diào)試器280執(zhí)行的分析,可以提供各種類型的調(diào)試器輸出290。圖3是概述根據(jù)一個示例性實(shí)施例的加載/儲單元的實(shí)例操作的流程圖,此流程圖關(guān)于當(dāng)加載和/或存儲指令(無論線程為何)嘗試訪問感興趣的存儲器地址范圍時,使用內(nèi)容可尋址存儲器(CAM)觸發(fā)異常。圖3中的操作假設(shè)加載/存儲單元中存在CAM結(jié)構(gòu),并使用指定調(diào)試器感興趣的存儲器地址范圍的一個或多個表項(xiàng)填充所述CAM結(jié)構(gòu)。如上所述,調(diào)試器可以向CAM結(jié)構(gòu)中寫入表項(xiàng)以標(biāo)識調(diào)試器感興趣的存儲器地址范圍,并可以針對調(diào)試器感興趣的指令類型設(shè)置適當(dāng)?shù)腟位和/或L位??梢韵蛳到y(tǒng)注冊調(diào)試器以便處理由CAM結(jié)構(gòu)生成的異常,如上面討論的那樣。如圖3中所示,所述操作始于在加載/存儲單元中接收加載或存儲指令(步驟310)。在CAM中執(zhí)行查找操作或搜索以獲得在所述加載或存儲指令中指定的地址,以便判定所指定的地址是否在所述CAM中的表項(xiàng)之一定義的地址范圍內(nèi)(步驟320)。判定是否存在匹配表項(xiàng)(步驟330)。如果有,則根據(jù)所述匹配表項(xiàng)的S位和L位的設(shè)置判定是否生成異常(步驟340)。例如,如上所述,如果所述指令是存儲并且設(shè)置了 S位,或者如果所述指令是加載并且設(shè)置了 L位,則可以生成異常。否則,不生成異常。如果要生成異 常,則生成異常并將其發(fā)送到異常處理機(jī)或調(diào)試器(步驟350)。將發(fā)出加載或存儲指令的線程的狀態(tài)存儲在堆棧中(步驟360),并針對生成異常的線程收集調(diào)試或跟蹤信息(步驟370)。然后由異常處理機(jī)或調(diào)試器處理所述異常(步驟380)。例如,異常處理機(jī)可以分析收集的調(diào)試/跟蹤信息并判定是否檢測到已發(fā)生競爭條件或惡魔訪問。其中可以檢測此類情況的一種方法是判定發(fā)出加載或存儲指令的線程是否在嘗試針對存儲器位置執(zhí)行所述加載或存儲之前,獲得CAM中的對應(yīng)表項(xiàng)的地址范圍上的鎖,或者至少由加載或存儲指令中的地址標(biāo)識的特定存儲器位置上的鎖。如果是,則沒有競爭條件或惡魔訪問。如果沒有獲得鎖,則可能發(fā)生競爭條件或惡魔訪問。因此,示例性實(shí)施例提供硬件機(jī)制,以便提供CAM結(jié)構(gòu)以幫助調(diào)試應(yīng)用代碼。示例性實(shí)施例的機(jī)制尤其適用于幫助調(diào)試多線程應(yīng)用代碼,因?yàn)榭梢蕴峁┛膳c特定線程上下文關(guān)聯(lián)的一個或多個CAM結(jié)構(gòu),以便每當(dāng)處理器嘗試訪問存儲器地址范圍時生成異常,而無論嘗試所述訪問的特定線程為何。通過這種方式,可以針對感興趣的特定地址范圍和針對感興趣的特定指令類型同時監(jiān)視多個并行運(yùn)行的線程。應(yīng)理解,盡管按照在處理器的加載/存儲單元中提供用于監(jiān)視對特定存儲器地址范圍的加載和/或存儲的CAM結(jié)構(gòu)描述了示例性實(shí)施例,但示例性實(shí)施例并不限于此。相反,可以在處理器的其他功能單元中提供類似的CAM結(jié)構(gòu),以便監(jiān)視在處理器中執(zhí)行的不同類型的指令。例如,可以在圖I的分支單元112、浮點(diǎn)單元122或124等中提供類似的CAM結(jié)構(gòu),以便監(jiān)視不同類型的指令并生成對應(yīng)的異常,從而生成調(diào)試或跟蹤信息。關(guān)鍵概念是使用硬件CAM結(jié)構(gòu)指定感興趣的存儲器地址沮圍和感興趣的指令類型,并在感興趣的指令針對感興趣的地址范圍時生成異常,而無論哪個線程執(zhí)行所述指令。如上所述,應(yīng)理解,示例性實(shí)施例可以采取完全硬件實(shí)施例、完全軟件實(shí)施例或包含了硬件和軟件元素的實(shí)施例的形式。在一個實(shí)例實(shí)施例中,示例性實(shí)施例的機(jī)制以軟件或程序代碼實(shí)現(xiàn),所述軟件或程序代碼包括但不限于固件、駐留軟件、微代碼等。適合于存儲和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng)將包括至少一個直接或通過系統(tǒng)總線間接連接到存儲器元件的處理器。所述存儲器元件可以包括在程序代碼的實(shí)際執(zhí)行期間采用的本地存儲器、大容量存儲裝置以及提供至少某些程序代碼的臨時存儲以減少必須在執(zhí)行期間從大容量存儲裝置檢索代碼的次數(shù)的高速緩沖存儲器。輸入/輸出或I/O設(shè)備(包括但不限于鍵盤、顯示器、指點(diǎn)設(shè)備等)可以直接或通過中間I/o控制器與系統(tǒng)相連。網(wǎng)絡(luò)適配器也可以被連接到系統(tǒng)以使所述數(shù)據(jù)處理系統(tǒng)能夠通過中間專用或公共網(wǎng)絡(luò)變得與其他數(shù)據(jù)處理系統(tǒng)或遠(yuǎn)程打印機(jī)或存儲設(shè)備相連。調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器和以太網(wǎng)卡只是當(dāng)前可用的網(wǎng)絡(luò)適配器類型中的少數(shù)幾種。出于示例和說明目的給出了對本發(fā)明的描述,并且所述描述并非旨在是窮舉的或是將本發(fā)明限于所公開的形式。對于本領(lǐng)域的技術(shù)人員來說,許多修改和變化都將是顯而易見的。實(shí)施例的選擇和描述是為了最佳地解釋本發(fā)明的原理、實(shí)際應(yīng)用,并且當(dāng)適合于所構(gòu)想的特定使用時,使得本領(lǐng)域的其他技術(shù)人員能夠理解本發(fā)明的具有各種修改的各種實(shí)施例。
權(quán)利要求
1.一種在數(shù)據(jù)處理系統(tǒng)的處理器中用于調(diào)試應(yīng)用代碼的方法,包括 在所述處理器的硬件單元中接收指令,所述指令具有在所述數(shù)據(jù)處理系統(tǒng)的存儲器中的所述指令正在嘗試訪問的目標(biāo)存儲器地址; 搜索與所述硬件單元關(guān)聯(lián)的內(nèi)容可尋址存儲器(CAM)以查找所述CAM中與所述目標(biāo)存儲器地址對應(yīng)的表項(xiàng); 響應(yīng)于在所述CAM中找到與所述目標(biāo)存儲器地址對應(yīng)的表項(xiàng),判定所述表項(xiàng)中的信息是否將所接收的指令標(biāo)識為感興趣的指令;以及 響應(yīng)于所述表項(xiàng)將所接收的指令標(biāo)識為感興趣的指令,生成異常并將所述異常發(fā)送到異常處理機(jī)或調(diào)試器應(yīng)用之一。
2.根據(jù)權(quán)利要求I的方法,其中搜索所述CAM包括搜索所述CAM中的表項(xiàng)以查找具有與所述目標(biāo)存儲器地址所在的存儲器地址范圍對應(yīng)的起始地址和長度的表項(xiàng)。
3.根據(jù)權(quán)利要求I的方法,其中判定所述表項(xiàng)中的信息是否將所述指令標(biāo)識為感興趣的指令包括 確定所接收的指令的類型; 判定所述表項(xiàng)中的值是否指示所接收的指令的類型是應(yīng)針對其生成異常的指令類型;以及 響應(yīng)于所述表項(xiàng)中的所述值指示所接收的指令的類型是應(yīng)針對其生成異常的指令類型,確定所接收的指令是感興趣的指令。
4.根據(jù)權(quán)利要求I的方法,其中所接收的指令的類型是加載指令或存儲指令之一,并且其中所述表項(xiàng)中的所述值指示加載指令或存儲指令是否是感興趣的指令。
5.根據(jù)權(quán)利要求I的方法,其中由所述調(diào)試器應(yīng)用創(chuàng)建所述CAM中的表項(xiàng)以標(biāo)識所述存儲器中出于調(diào)試目的而被監(jiān)視的地址范圍。
6.根據(jù)權(quán)利要求I的方法,其中所述異常處理機(jī)通過記錄出現(xiàn)異常時特定變量的狀態(tài)而確定在應(yīng)用代碼的執(zhí)行期間在所述應(yīng)用代碼中的何處修改了該變量。
7.根據(jù)權(quán)利要求I的方法,其中所述異常處理機(jī)通過檢查當(dāng)另一線程在所接收的指令嘗試訪問變量的目標(biāo)地址之前已獲得保護(hù)同步對象時,所接收的指令是否針對所述變量的所述目標(biāo)地址執(zhí)行操作來檢查競爭條件,并且其中在以下情況下不存在競爭條件所接收的指令未針對這樣的變量的目標(biāo)地址執(zhí)行操作對于所述變量的所述目標(biāo)地址,另一線程在所接收的指令嘗試訪問所述變量的所述目標(biāo)地址之前已獲得保護(hù)同步對象。
8.根據(jù)權(quán)利要求I的方法,其中所述處理器維護(hù)多個CAM,針對所述處理器支持的每個執(zhí)行線程維護(hù)一個CAM。
9.根據(jù)權(quán)利要求I的方法,其中所述CAM中的表項(xiàng)包括起始地址、長度,以及標(biāo)識感興趣的指令的類型的一個或多個位,其中將所述一個或多個位設(shè)置為預(yù)定值指示對應(yīng)類型的指令是要針對其生成異常的感興趣的指令。
10.根據(jù)權(quán)利要求I的方法,其中所述異常處理機(jī)檢查所接收的指令是否在未獲得對應(yīng)同步對象的情況下針對變量的目標(biāo)地址執(zhí)行操作。
11.一種數(shù)據(jù)處理系統(tǒng),包括 處理器,包括具有內(nèi)容可尋址存儲器(CAM)的硬件單元;以及 耦合到所述處理器的存儲器,其中所述處理器被配置為執(zhí)行權(quán)利要求I至10中的任一權(quán)利要求的步驟。
12.—種計(jì)算機(jī)程序產(chǎn)品,包括具有記錄在其上的計(jì)算機(jī)可讀程序的計(jì)算機(jī)可記錄介質(zhì),其中當(dāng)所述計(jì)算機(jī)可讀程序在計(jì)算設(shè)備上執(zhí)行時,導(dǎo)致所述計(jì)算設(shè)備執(zhí)行權(quán)利要求I至10中的任一權(quán)利要求的步驟。
全文摘要
提供了使用內(nèi)容可尋址存儲器調(diào)試應(yīng)用代碼的機(jī)制。所述機(jī)制在數(shù)據(jù)處理系統(tǒng)的處理器的硬件單元中接收指令,所述指令具有所述指令正在嘗試訪問的目標(biāo)存儲器地址。搜索與所述硬件單元關(guān)聯(lián)的內(nèi)容可尋址存儲器(CAM)以查找所述CAM中與所述目標(biāo)存儲器地址對應(yīng)的表項(xiàng)。響應(yīng)于在所述CAM中找到與所述目標(biāo)存儲器地址對應(yīng)的表項(xiàng),判定所述表項(xiàng)中的信息是否將所述指令標(biāo)識為感興趣的指令。響應(yīng)于所述表項(xiàng)將所述指令標(biāo)識為感興趣的指令,生成異常并將其發(fā)送到異常處理機(jī)或調(diào)試器應(yīng)用之一。通過這種方式,可以以高效的方式執(zhí)行多線程應(yīng)用的調(diào)試。
文檔編號G06F11/36GK102844744SQ201180019490
公開日2012年12月26日 申請日期2011年3月31日 優(yōu)先權(quán)日2010年4月19日
發(fā)明者E·N·埃爾諾扎伊, A·蓋特 申請人:國際商業(yè)機(jī)器公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
西充县| 太和县| 新宁县| 礼泉县| 汝州市| 依兰县| 福建省| 江源县| 伊春市| 岗巴县| 金塔县| 汉阴县| 岳阳县| 武安市| 承德市| 赣州市| 山阴县| 渝中区| 浑源县| 灵丘县| 图片| 吉林市| 黔东| 邯郸县| 安岳县| 米脂县| 德保县| 运城市| 广宁县| 临邑县| 昆山市| 城固县| 东城区| 根河市| 南城县| 监利县| 松滋市| 正蓝旗| 乐至县| 嘉善县| 寻甸|