執行緒上下文資料結構

2021-09-19 12:36:07 字數 1573 閱讀 2911

windows 中定義了乙個context 結構,該結構包含了特定處理器上的暫存器資料。系統使用context 結構執行各種內部操作。目前,已經存在為intel 、mips 、alpha 和powerpc 處理器定義的context 結構。若要了解這些結構的定義,可以去看winnt.h 。

該結構並沒有說明結構體內的成員,也沒有描述這些成員是誰,因為這些成員要取決於windows 執行在哪個平台上。在windows 定義的所有資料結構中,context 結構是特定於cpu 的唯一結構。

在context 結構中,它包含了主機cpu 上的每個暫存器的資料結構。在x86 計算機上,資料成員是eax ,ebx ,ecx ,edx 等等。如果是alpha 處理器,那麼資料成員包括intv0,intt0,intt1,ints0,intra 和intzero 等等。下面的**演示了x86 cpu 完整的context 結構。

typedef struct _context

context;

可以使用

bool getthreadcontext(handle,pcontext);

函式來取得乙個執行緒的上下文。

contextflags 用於指定你關注此資料結構中哪些暫存器值。可以是如下定義

context_control

context_integer

context_segments

context_floating_point

context_debug_registers

context_extended_registers;

另外,在winnt.h 中還定義了乙個context_full 定義如下

#ifdefine _x86

#define context_full \

context_control|context_integer|context_segments

#endif

#ifdefine _alpha

#define context_full \ context_control|context_floating_point|context_integer

#endif

同樣我們可以通過setthreadcontext(handle,pcontext); 來修改乙個執行緒的暫存器值。步驟如下。

1、將要操作的執行緒掛起。

2、定義乙個context 結構變數,將其contextflags 初始化,標記你關注哪些值。

3、使用getthreadcontext 取得上下文。

4、修改你想修改的暫存器值。

5、用setthreadcontext 更新系統中線程的上下文。

6、喚醒執行緒

另外,對於指令指標和堆疊指標暫存器x86 和alpha 機器上是不一樣的。

x86 是eip 和esp ,而alpha 中是fir 和intsp 。在使用的時候,應該根據具體情況分析。。當然,上面的操作在一般的應用程式中不會使用。若你想編寫除錯程式,偵錯程式等才有可能用到。

posted @

2010-07-02 08:47

麒麟子(alex) 閱讀(

...)

編輯收藏

程序上下文與執行緒上下文

6.1.2 執行緒上下文 作業系統管理很多程序的執行。有些程序是來自各種程式 系統和應用程式的單獨程序,而某些程序來自被分解為很多程序的應用或程式。當乙個程序從核心中移出,另乙個程序成為活動的,這些程序之間便發生了上下文切換。作業系統必須記錄重啟程序和啟動新程序使之活動所需要的所有資訊。這些資訊被稱...

上下文 上下文棧

全域性 函式 區域性 在執行全域性 前將window確定為全域性執行上下文 對全域性資料進行預處理 var定義的全域性變數 undefined,新增為window的屬性 function宣告的全域性函式 賦值 fun 新增為window的方法 this 賦值 window 開始執行全域性 在呼叫函式...

中斷上下文 程序上下文

在學習與作業系統相關的知識時候,我們經常遇到程序上下文 中斷上下文,看似熟悉又感覺不是特別清晰。這裡我們從如下幾個方面進行描述。上下文是從英文中context翻譯過來的,指的是一種環境。上下文我們看起來不怎麼熟悉,但是我們可以看context的中文翻譯,或者我們能更加的情形些。context n 語...