專利名稱:線程局部存儲(chǔ)實(shí)現(xiàn)方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種線程局部存儲(chǔ)(Thread Local Storage,簡(jiǎn) 稱TLS)實(shí)現(xiàn)方法和裝置。
背景技術(shù):
線程局部存儲(chǔ)是多線程執(zhí)行環(huán)境中,用于保存線程私有數(shù)據(jù)的存儲(chǔ)區(qū)域。多線程 技術(shù)是為了同步完成多個(gè)任務(wù),其中多個(gè)任務(wù)以更加靈活的方式來(lái)運(yùn)行,通過提高資源的 使用效率來(lái)提高系統(tǒng)的效率。如網(wǎng)絡(luò)編程中,當(dāng)監(jiān)聽到外部連接請(qǐng)求時(shí),主線程會(huì)首先產(chǎn) 生一個(gè)新線程,由新線程來(lái)處理具體的數(shù)據(jù)收發(fā)和數(shù)據(jù)包的解析;而主線程自身則繼續(xù)監(jiān) 聽數(shù)據(jù)的收發(fā)。如果我們使用單線程來(lái)實(shí)現(xiàn)數(shù)據(jù)的監(jiān)聽和收發(fā),由于代碼的順序執(zhí)行,當(dāng)線 程在進(jìn)行數(shù)據(jù)收發(fā)時(shí)就不能處理外部連接請(qǐng)求。此時(shí)網(wǎng)卡緩沖區(qū)中填滿了數(shù)據(jù),但其沒有 得到處理器的響應(yīng),那么網(wǎng)卡無(wú)法繼續(xù)工作。顯然,用多線程來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求的監(jiān)聽和數(shù)據(jù) 收發(fā),即使CPU在處理數(shù)據(jù)收發(fā),仍能被打斷并在響應(yīng)網(wǎng)絡(luò)請(qǐng)求后繼續(xù)處理數(shù)據(jù)收發(fā)。這樣 讓計(jì)算機(jī)系統(tǒng)中的多個(gè)部件在同一時(shí)刻都處于工作狀態(tài),以提高系統(tǒng)的效率。多個(gè)線程在執(zhí)行時(shí)往往需要保存線程私有數(shù)據(jù)。如線程在調(diào)用庫(kù)函數(shù),庫(kù)函數(shù)返 回時(shí)會(huì)對(duì)errno變量進(jìn)行設(shè)置,表示該調(diào)用是否成功。當(dāng)多個(gè)線程均會(huì)調(diào)用庫(kù)函數(shù)時(shí),需要 為每個(gè)線程提供一個(gè)私有的數(shù)據(jù)存儲(chǔ)區(qū)域,以保errno變量?jī)H僅代表本線程調(diào)用庫(kù)函數(shù)的 結(jié)果,而不是表示整個(gè)進(jìn)程中庫(kù)函數(shù)的調(diào)用結(jié)果。如果errno是全局變量,那么某個(gè)線程讀 取errno時(shí)很可能會(huì)獲取到其它線程調(diào)用庫(kù)函數(shù)的結(jié)果,導(dǎo)致程序執(zhí)行錯(cuò)誤。目前,許多系統(tǒng)通過在硬件上增加特殊的存儲(chǔ)結(jié)構(gòu)和特殊的指令來(lái)實(shí)現(xiàn)TLS。譬 如ARM中增加了 TLS寄存器,并加入了相應(yīng)的協(xié)處理器指令,可以直接對(duì)TLS寄存器進(jìn)行 訪問,即線程的私有數(shù)據(jù)都是存儲(chǔ)在TLS寄存器所指向的一片內(nèi)存中。X86體系結(jié)構(gòu)使用 LDT中的一個(gè)表項(xiàng)來(lái)存放線程的TLS。此外,在某些未加入特殊硬件支持的處理器中,還可以通過純軟件的方式來(lái)實(shí)現(xiàn) TLS0例如在每個(gè)線程創(chuàng)建之初,由庫(kù)函數(shù)通過操作系統(tǒng)提供的API為每個(gè)線程開辟一段 固定的存儲(chǔ)空間,并由進(jìn)程統(tǒng)一維護(hù)這些地址空間。當(dāng)一個(gè)線程需要獲取TLS中存放數(shù)據(jù) 的時(shí),首先需要通過線程號(hào)索引線程私有存儲(chǔ)空間的基地址,然后再用偏移加基地址的方 式訪問私有數(shù)據(jù)。
發(fā)明內(nèi)容
本發(fā)明提供了一種TLS實(shí)現(xiàn)方法和裝置,解決了 TLS實(shí)現(xiàn)過程中系統(tǒng)內(nèi)在訪問壓 力大和工作效率低的問題。一種TLS實(shí)現(xiàn)方法,包括從處理器的通用寄存器中,選擇至少一個(gè)通用寄存器作為TLS寄存器;通過專用操作命令管理所述TLS寄存器。進(jìn)一步的,所述專用操作命令包括寫入命令(set_tls)和讀取命令(get_tls),所
3述寫入命令用于向所述TLS寄存器寫入數(shù)據(jù),所述讀取命令用于從所述TLS寄存器讀取數(shù) 據(jù)。進(jìn)一步的,所述通過專用操作命令管理所述TLS寄存器包括通過所述寫入命令將當(dāng)前線程的線程私有數(shù)據(jù)寫入所述TLS寄存器;通過所述讀取命令從所述TLS寄存器中讀取當(dāng)前線程的線程私有數(shù)據(jù)。進(jìn)一步的,上述TLS實(shí)現(xiàn)方法還包括在當(dāng)前線程換出或進(jìn)行異常處理時(shí),從所述TLS寄存器中讀取所述當(dāng)前線程的線 程私有數(shù)據(jù),將所述當(dāng)前線程的線程私有數(shù)據(jù)存儲(chǔ)在該線程對(duì)應(yīng)的線程控制塊中。進(jìn)一步的,上述TLS實(shí)現(xiàn)方法還包括在線程恢復(fù)時(shí),讀取所述線程的線程控制塊中存儲(chǔ)的線程私有數(shù)據(jù),將所述線程 私有數(shù)據(jù)寫入所述TLS寄存器中。本發(fā)明還提供了一種TLS實(shí)現(xiàn)裝置,包括寄存器指定模塊,用于從處理器的通用寄存器中,選擇至少一個(gè)通用寄存器作為 TLS寄存器;TLS管理模塊,用于通過專用操作命令管理所述TLS寄存器。進(jìn)一步的,所述專用操作命令包括寫入命令和讀取命令,所述寫入命令用于向所 述TLS寄存器寫入數(shù)據(jù),所述讀取命令用于從所述TLS寄存器讀取數(shù)據(jù),所述TLS管理模塊 包括寫入單元,用于通過所述寫入命令將當(dāng)前線程的線程私有數(shù)據(jù)寫入所述TLS寄存 器;讀取單元,用于通過所述讀取命令從所述TLS寄存器中讀取當(dāng)前線程的線程私有 數(shù)據(jù)。進(jìn)一步的,上述TLS實(shí)現(xiàn)裝置還包括數(shù)據(jù)轉(zhuǎn)移模塊,用于在當(dāng)前線程換出或進(jìn)行異常處理時(shí),從所述TLS寄存器中讀 取所述當(dāng)前線程的線程私有數(shù)據(jù),將所述當(dāng)前線程的線程私有數(shù)據(jù)存儲(chǔ)在該線程對(duì)應(yīng)的線 程控制塊中。進(jìn)一步的,所述數(shù)據(jù)轉(zhuǎn)移模塊,還用于在線程恢復(fù)時(shí),讀取所述線程的線程控制塊 中存儲(chǔ)的線程私有數(shù)據(jù),將所述線程私有數(shù)據(jù)寫入所述TLS寄存器中。本發(fā)明提供的TLS實(shí)現(xiàn)方法和裝置,本發(fā)明的主要思想是選擇一個(gè)通用寄存器作 為TLS寄存器,通過專用操作命令管理所述TLS寄存器,不需要添加額外的硬件寄存器,也 不需要占用計(jì)算機(jī)系統(tǒng)內(nèi)存,解決了 TLS實(shí)現(xiàn)過程中系統(tǒng)內(nèi)在訪問壓力大和工作效率低的 問題。
圖1為本發(fā)明的實(shí)施例的應(yīng)用環(huán)境示意圖;圖2為本發(fā)明的實(shí)施例一提供的一種TLS實(shí)現(xiàn)方法的流程圖;圖3為本發(fā)明的實(shí)施例中寄存器使用情況示意圖;圖4為本發(fā)明的實(shí)施例二提供的一種TLS實(shí)現(xiàn)方法的流程圖;圖5為本發(fā)明的實(shí)施例提供的一種TLS實(shí)現(xiàn)裝置的結(jié)構(gòu)示意圖6為圖5中TLS管理模塊的結(jié)構(gòu)示意圖;圖7為本發(fā)明的又一實(shí)施例提供的一種TLS實(shí)現(xiàn)裝置的結(jié)構(gòu)示意圖。
具體實(shí)施例方式純軟件實(shí)現(xiàn)TLS的方式需要調(diào)用額外的庫(kù)函數(shù),并且需要額外地維護(hù)每個(gè)線程的 私有存儲(chǔ)區(qū)域;相比之下,具有硬件支持的處理器,可直接從寄存器中讀取TLS的基地址, 并通過偏移訪問線程局部數(shù)據(jù)。所以,具有硬件支持的TLS機(jī)制,可以減少通過線程號(hào)索引 線程局部存儲(chǔ)空間的開銷,免除進(jìn)程對(duì)這些線程局部地址空間的維護(hù)。此外直接對(duì)寄存器 進(jìn)行訪問,也能夠一定程度上減少內(nèi)存的訪問壓力。雖然具有特殊硬件支持的TLS機(jī)制,能夠減少TLS操作時(shí)的開銷,但是需要專有的 存儲(chǔ)結(jié)構(gòu)和特殊的操作指令,即需要修改體系結(jié)構(gòu)加入相應(yīng)的硬件邏輯。所以,一些較老的 體系結(jié)構(gòu),無(wú)法有效地直接使用硬件TLS機(jī)制保證多線程執(zhí)行環(huán)境的高效性。為了解決軟件實(shí)現(xiàn)TLS時(shí)內(nèi)存訪問壓力大和硬件實(shí)現(xiàn)TLS時(shí)系統(tǒng)工作效率低的問 題,本發(fā)明的實(shí)施例提供了一種TLS實(shí)現(xiàn)方法。下面結(jié)合附圖,對(duì)本發(fā)明的實(shí)施例提供的一種TLS實(shí)現(xiàn)方法進(jìn)行詳細(xì)介紹。圖1所示為本發(fā)明的實(shí)施例的應(yīng)用環(huán)境,包括編譯器101,TLS寄存器102,應(yīng)用程序103,操作系統(tǒng)104以及由set_tls和get_ tls組成的對(duì)TLS進(jìn)行操作的TLS庫(kù)函數(shù)105。其中,TLS寄存器為處理器的一個(gè)通用寄存器。操作系統(tǒng)104和處理器107共同 對(duì)上下文106進(jìn)行管理,如上下文切換等。應(yīng)用程序103工作在兩種不同類型的系統(tǒng)接口上首先應(yīng)用程序103可以使用庫(kù) 函數(shù)105 (BP set_tls和get_tls),直接作用于處理器107并訪問與TLS寄存器102 ;其次, 應(yīng)用程序103通過庫(kù)函數(shù)封裝的API,并利用操作系統(tǒng)內(nèi)核的上下文保存機(jī)制,將TLS的值 保存于線程控制塊中。本發(fā)明的實(shí)施例一提供了一種TLS實(shí)現(xiàn)方法,無(wú)需添加額外的硬件TLS寄存器,利 用現(xiàn)有的硬件資源,為計(jì)算機(jī)系統(tǒng)提供了靈活、高效的線程局部數(shù)據(jù)存儲(chǔ)機(jī)制。結(jié)合上述應(yīng)用環(huán)境,使用本發(fā)明實(shí)施例一提供的TLS實(shí)現(xiàn)方法在計(jì)算機(jī)系統(tǒng)中實(shí) 現(xiàn)TLS的流程如圖2所示,包括步驟201、從處理器的通用寄存器中,選擇至少一個(gè)通用寄存器作為TLS寄存器;本發(fā)明實(shí)施例中,處理器的通用寄存器具有多種用途,如圖3中的RO這一通用寄 存器即為傳參寄存器。即,當(dāng)函數(shù)的參數(shù)的個(gè)數(shù)為一個(gè)時(shí),該參數(shù)的值被放在RO中,函數(shù)內(nèi) 部可以直接讀取RO獲取參數(shù)。處理器的通用寄存器可以為來(lái)自于caller save的寄存器,也可以為來(lái)自于 callee save的寄存器。本步驟選擇的TLS寄存器為R16。被選作TLS寄存器的通用寄存器將不再接受函 數(shù)庫(kù)之外命令的操作。操作系統(tǒng)通過應(yīng)用程序,對(duì)TLS寄存器進(jìn)行操作。為保證TLS寄存器的專用性, 可對(duì)操作系統(tǒng)的編譯器進(jìn)行修改,在編譯器生成應(yīng)用程序時(shí),TLS寄存器對(duì)其他應(yīng)用不可見 (編譯器在生成二進(jìn)制代碼時(shí),對(duì)于普通的函數(shù)而言,被選出作為TLS寄存器不參與寄存器的分配),只有TLS專用操作命令可以管理操作所述TLS寄存器。本發(fā)明實(shí)施例所選擇的TLS寄存器可能為一個(gè),也可以為多個(gè),如果只選擇一個(gè) TLS寄存器,則可在該TLS寄存器中存放指向私有數(shù)據(jù)內(nèi)存位置的指針;如果選擇多個(gè)TLS 寄存器,更可以將私有數(shù)據(jù)直接存儲(chǔ)于TLS寄存器中,進(jìn)一步提高訪問效率。步驟202、通過專用操作命令管理所述TLS寄存器;本發(fā)明實(shí)施例中,專用操作命令具體指TLS庫(kù)函數(shù),包括寫入命令(set_tls)和讀 取命令(get_tls)。set_tls,使用一條mov指令,將RO的內(nèi)容寫入R16 ;同理,get_tls也 是使用一條mov指令,將R16的內(nèi)容寫入R0。本發(fā)明實(shí)施例提供了 一種TLS實(shí)現(xiàn)方法,選擇一個(gè)通用寄存器作為TLS寄存器,通 過專用操作命令管理所述TLS寄存器,在編譯器生成應(yīng)用程序時(shí),應(yīng)用程序中除了 TLS庫(kù)函 數(shù)能夠顯式地操作TLS寄存器外,其余所有與TLS無(wú)關(guān)的函數(shù)均不會(huì)使用到TLS寄存器;應(yīng) 用程序中對(duì)TLS寄存器的操作均由庫(kù)中提供的兩個(gè)函數(shù)set_tls和get_tls來(lái)實(shí)現(xiàn),不需 要添加額外的硬件寄存器,也不需要占用計(jì)算機(jī)系統(tǒng)內(nèi)存,解決了 TLS實(shí)現(xiàn)過程中系統(tǒng)內(nèi) 在訪問壓力大和工作效率低的問題。下面結(jié)合附圖,對(duì)本發(fā)明的實(shí)施例二進(jìn)行說(shuō)明。在上下文切換或進(jìn)行異常處理時(shí),都需要對(duì)TLS寄存器進(jìn)行操作,使用本發(fā)明實(shí) 施例提供的TLS實(shí)現(xiàn)方法完成上下文切換過程中線程私有數(shù)據(jù)處理的過程如圖4所示,包 括步驟401、在當(dāng)前線程換出或進(jìn)行異常處理時(shí),從所述TLS寄存器中讀取所述當(dāng) 前線程的線程私有數(shù)據(jù),將所述當(dāng)前線程的線程私有數(shù)據(jù)存儲(chǔ)在該線程對(duì)應(yīng)的線程控制塊 中。在線程換出時(shí)或進(jìn)行異常處理時(shí),由于TLS寄存器(R16)也屬于通用寄存器的范 疇,操作系統(tǒng)可以使用store指令,依次將所有R16中的全部數(shù)據(jù)寫入當(dāng)前線程的線程控制 塊中。本步驟中,還需要對(duì)相應(yīng)的上下文進(jìn)行保存。步驟402、在線程恢復(fù)時(shí),讀取所述線程的線程控制塊中存儲(chǔ)的線程私有數(shù)據(jù),將 所述線程私有數(shù)據(jù)寫入所述TLS寄存器中。在線程恢復(fù)換入時(shí),操作系統(tǒng)依次將該線程的線程控制塊中保存的私有線程數(shù) 據(jù),使用load指令依次寫回到TLS寄存器中。本步驟中,還需要恢復(fù)相應(yīng)的上下文。本發(fā)明的實(shí)施例提供了一種TLS實(shí)現(xiàn)方法,首先由編譯器生成應(yīng)用程序,應(yīng)用程 序中除了庫(kù)函數(shù)能夠顯示地操作TLS寄存器外,其余所有與TLS無(wú)關(guān)的函數(shù)均不會(huì)使用到 TLS寄存器;應(yīng)用程序中對(duì)TLS寄存器的操作均由庫(kù)中提供的兩個(gè)函數(shù)set_tls和get_tls 來(lái)實(shí)現(xiàn);在上下文切換時(shí)保存并恢復(fù)TLS寄存器的內(nèi)容,確保當(dāng)前正在執(zhí)行的線程的線程 私有數(shù)據(jù)一定存放在TLS寄存器中。其中對(duì)線程私有數(shù)據(jù)的保存和恢復(fù)操作,都附屬與線 程上下文的保存和恢復(fù)。所述編譯器在基于通用寄存器的輕量級(jí)TLS機(jī)制中,負(fù)責(zé)以下功能控制TLS寄存 器的使用。編譯器編譯并鏈接所有高級(jí)語(yǔ)言的代碼,并在匯編時(shí)保證TLS寄存器不參與寄 存器的分配。即將某個(gè)通用寄存器的功能加以限定,其他非TLS相關(guān)的指令中的源操作數(shù)和目的操作數(shù),都不會(huì)使用與TLS綁定的寄存器。在應(yīng)用被實(shí)例化為線程時(shí),TLS寄存器必須被賦予初值,可以與創(chuàng)建線程私有線程 數(shù)據(jù)一致,也可以在進(jìn)程創(chuàng)建時(shí)由編程人員手動(dòng)指定。兩種方式均是直接對(duì)線程控制塊進(jìn) 行操作,當(dāng)某個(gè)線程被調(diào)度執(zhí)行時(shí),以線程控制塊中的信息初始化TLS寄存器。本發(fā)明的實(shí)施例提供的TLS實(shí)現(xiàn)方法,引入了基于通用寄存器的輕量級(jí)TLS機(jī)制, 可以高效、靈活地支持多線程的執(zhí)行環(huán)境,特別是對(duì)于某些未能在硬件上對(duì)TLS直接提供 支持的處理器,減少了不必要的索引,避免軟件TLS的維護(hù)開銷。本發(fā)明的實(shí)施例還提供了一種TLS實(shí)現(xiàn)裝置,其結(jié)構(gòu)如圖5所示,包括寄存器指定模塊501,用于從處理器的通用寄存器中,選擇至少一個(gè)通用寄存器作 為TLS寄存器;TLS管理模塊502,用于通過專用操作命令管理所述TLS寄存器。進(jìn)一步的,所述專用操作命令包括寫入命令和讀取命令,所述寫入命令用于向所 述TLS寄存器寫入數(shù)據(jù),所述讀取命令用于從所述TLS寄存器讀取數(shù)據(jù),所述TLS管理模塊 502的結(jié)構(gòu)如圖6所示,包括寫入單元601,用于通過所述寫入命令將當(dāng)前線程的線程私有數(shù)據(jù)寫入所述TLS 寄存器;讀取單元602,用于通過所述讀取命令從所述TLS寄存器中讀取當(dāng)前線程的線程 私有數(shù)據(jù)。進(jìn)一步的,該裝置如圖7還包括數(shù)據(jù)轉(zhuǎn)移模塊503,用于在當(dāng)前線程換出或進(jìn)行異常處理時(shí),從所述TLS寄存器中 讀取所述當(dāng)前線程的線程私有數(shù)據(jù),將所述當(dāng)前線程的線程私有數(shù)據(jù)存儲(chǔ)在該線程對(duì)應(yīng)的 線程控制塊中。進(jìn)一步的,所述數(shù)據(jù)轉(zhuǎn)移模塊503,還用于在線程恢復(fù)時(shí),讀取所述線程的線程控 制塊中存儲(chǔ)的線程私有數(shù)據(jù),將所述線程私有數(shù)據(jù)寫入所述TLS寄存器中。上述TLS實(shí)現(xiàn)裝置,可集成于計(jì)算機(jī)的操作系統(tǒng)中,由處理器控制該TLS實(shí)現(xiàn)裝置 的開啟和關(guān)閉,以在適當(dāng)?shù)臅r(shí)候啟動(dòng)使用通用寄存器實(shí)現(xiàn)TLS的機(jī)制。與本發(fā)明的實(shí)施例 提供的一種TLS實(shí)現(xiàn)方法相結(jié)合,從處理器的至少一個(gè)通用寄存器中,選擇一個(gè)通用寄存 器作為TLS寄存器,通過專用操作命令管理所述TLS寄存器,不需要添加額外的硬件寄存 器,也不需要占用計(jì)算機(jī)系統(tǒng)內(nèi)存,解決了 TLS實(shí)現(xiàn)過程中系統(tǒng)內(nèi)在訪問壓力大和工作效 率低的問題。本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的全部或部分步驟可以使用計(jì)算機(jī)程 序流程來(lái)實(shí)現(xiàn),所述計(jì)算機(jī)程序可以存儲(chǔ)于一計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,所述計(jì)算機(jī)程序在 相應(yīng)的硬件平臺(tái)上(如系統(tǒng)、設(shè)備、裝置、器件等)執(zhí)行,在執(zhí)行時(shí),包括方法實(shí)施例的步驟 之一或其組合。可選地,上述實(shí)施例的全部或部分步驟也可以使用集成電路來(lái)實(shí)現(xiàn),這些步驟可 以被分別制作成一個(gè)個(gè)集成電路模塊,或者將它們中的多個(gè)模塊或步驟制作成單個(gè)集成電 路模塊來(lái)實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。上述實(shí)施例中的各裝置/功能模塊/功能單元可以采用通用的計(jì)算裝置來(lái)實(shí)現(xiàn), 它們可以集中在單個(gè)的計(jì)算裝置上,也可以分布在多個(gè)計(jì)算裝置所組成的網(wǎng)絡(luò)上。
上述實(shí)施例中的各裝置/功能模塊/功能單元以軟件功能模塊的形式實(shí)現(xiàn)并作為 獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。上述提到的計(jì)算機(jī) 可讀取存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤或光盤等。
權(quán)利要求
一種線程局部存儲(chǔ)實(shí)現(xiàn)方法,其特征在于,包括從處理器的通用寄存器中,選擇至少一個(gè)通用寄存器作為線程局部存儲(chǔ)(TLS)寄存器;通過專用操作命令管理所述TLS寄存器。
2.根據(jù)權(quán)利要求1所述的TLS實(shí)現(xiàn)方法,其特征在于,所述專用操作命令包括寫入命 令(set_tls)和讀取命令(get_tls),所述寫入命令用于向所述TLS寄存器寫入數(shù)據(jù),所述 讀取命令用于從所述TLS寄存器讀取數(shù)據(jù)。
3.根據(jù)權(quán)利要求2所述的TLS實(shí)現(xiàn)方法,其特征在于,所述通過專用操作命令管理所述 TLS寄存器包括通過所述寫入命令將當(dāng)前線程的線程私有數(shù)據(jù)寫入所述TLS寄存器; 通過所述讀取命令從所述TLS寄存器中讀取當(dāng)前線程的線程私有數(shù)據(jù)。
4.根據(jù)權(quán)利要求1所述的TLS實(shí)現(xiàn)方法,其特征在于,該方法還包括在當(dāng)前線程換出或進(jìn)行異常處理時(shí),從所述TLS寄存器中讀取所述當(dāng)前線程的線程私 有數(shù)據(jù),將所述當(dāng)前線程的線程私有數(shù)據(jù)存儲(chǔ)在該線程對(duì)應(yīng)的線程控制塊中。
5.根據(jù)權(quán)利根據(jù)4所述的TLS實(shí)現(xiàn)方法,其特征在于,該方法還包括在線程恢復(fù)時(shí),讀取所述線程的線程控制塊中存儲(chǔ)的線程私有數(shù)據(jù),將所述線程私有 數(shù)據(jù)寫入所述TLS寄存器中。
6.一種TLS實(shí)現(xiàn)裝置,其特征在于,包括寄存器指定模塊,用于從處理器的通用寄存器中,選擇至少一個(gè)通用寄存器作為TLS 寄存器;TLS管理模塊,用于通過專用操作命令管理所述TLS寄存器。
7.根據(jù)權(quán)利要求6所述的TLS實(shí)現(xiàn)裝置,其特征在于,所述專用操作命令包括寫入命令 和讀取命令,所述寫入命令用于向所述TLS寄存器寫入數(shù)據(jù),所述讀取命令用于從所述TLS 寄存器讀取數(shù)據(jù),所述TLS管理模塊包括寫入單元,用于通過所述寫入命令將當(dāng)前線程的線程私有數(shù)據(jù)寫入所述TLS寄存器; 讀取單元,用于通過所述讀取命令從所述TLS寄存器中讀取當(dāng)前線程的線程私有數(shù)據(jù)。
8.根據(jù)權(quán)利要求6所述的TLS實(shí)現(xiàn)裝置,其特征在于,該裝置還包括數(shù)據(jù)轉(zhuǎn)移模塊,用于在當(dāng)前線程換出或進(jìn)行異常處理時(shí),從所述TLS寄存器中讀取所 述當(dāng)前線程的線程私有數(shù)據(jù),將所述當(dāng)前線程的線程私有數(shù)據(jù)存儲(chǔ)在該線程對(duì)應(yīng)的線程控 制塊中。
9.根據(jù)權(quán)利要求6所述的TLS實(shí)現(xiàn)裝置,其特征在于,所述數(shù)據(jù)轉(zhuǎn)移模塊,還用于在線程恢復(fù)時(shí),讀取所述線程的線程控制塊中存儲(chǔ)的線程 私有數(shù)據(jù),將所述線程私有數(shù)據(jù)寫入所述TLS寄存器中。
全文摘要
本發(fā)明提供了一種線程局部存儲(chǔ)實(shí)現(xiàn)方法和裝置。涉及計(jì)算機(jī)領(lǐng)域;解決了TLS實(shí)現(xiàn)過程中系統(tǒng)內(nèi)在訪問壓力大和工作效率低的問題。該方法包括從處理器的通用寄存器中,選擇至少一個(gè)通用寄存器作為TLS寄存器;通過專用操作命令管理所述TLS寄存器。本發(fā)明提供的技術(shù)方案,適用于多線程執(zhí)行環(huán)境。
文檔編號(hào)G06F9/46GK101882091SQ20101020580
公開日2010年11月10日 申請(qǐng)日期2010年6月22日 優(yōu)先權(quán)日2010年6月22日
發(fā)明者吳棟霞, 程旭, 管雪濤, 鐘祺, 高海斌 申請(qǐng)人:北京北大眾志微系統(tǒng)科技有限責(zé)任公司