2016-01-16 113 views
0

在xv6操作系統中context的用法是什麼? context中每個寄存器的工作是什麼?xv6中的上下文是什麼?

struct context { 
    uint edi; 
    uint esi; 
    uint ebx; 
    uint ebp; 
    uint eip; 
}; 
+0

要麼這裏的某個人需要知道xv6的內臟,否則我們需要更多的信息。人們會認爲上下文是保存和恢復寄存器值的結構。如果是這樣,每個寄存器的工作就是保持不變。 – user3344003

+0

如何擦除'struct context'的代碼並精確地查看它是如何使用的? –

回答

0

context是集信息,使您可以從停止的地方,由於上下文切換完全相同的點恢復任務的執行(即調度器選擇另一個任務運行,並掛起當前之一,因此它必須保存當前任務的執行信息並恢復下一個要運行的任務的信息)。

每個這些寄存器的的目的是:

  • edi:目的地索引,對於字符串操作
  • esi:源索引,對於字符串操作
  • ebx:基本索引,用於與陣列使用
  • ebp:堆棧基址指針,用於保存當前堆棧幀的地址
  • eip:指令指針,指向要執行的指令
+0

在結構中怎麼沒有EAX,ECX,EDX,EFLAGS,FPU寄存器?不需要在上下文切換時保存和恢復它們嗎? –

+0

eax,ecx,edx不會被保存,因爲在x86約定中它們將被調用者保存。我猜FPU寄存器同樣適用。對於EFLAGS而言,它們存儲在與流程相關的陷阱結構中(這是因爲你在xv6中沒有線程,萬一你有,那麼我認爲你應該把eflags放在上下文中)。 – mike

+0

發生硬件中斷(包括觸發進程和線程間切換的那些中斷)時,沒有調用者。代碼在任意點被中斷搶佔,你不能扔掉EAX或EFLAGS,因爲被中斷的代碼可能在中間。 ADD EBX,EDX和ADC EAX,ECX。所以,這些寄存器需要保存並在某處恢復。最有可能的陷阱框架。那麼,爲什麼不對所有這些regs使用陷阱幀(我們可以推遲FPU/SSE上下文切換並單獨處理)? –

2

此結構是正在運行的進程的內核上下文。

用戶模式上下文被保存到trapframe結構中。