1. 程式人生 > >linux程序切換和TSS結構

linux程序切換和TSS結構

     TSS 全稱為task state segment,是指在作業系統程序管理的過程中,程序切換時的任務現場資訊。   

      X86體系從硬體上支援任務間的切換。為此目的,它增設了一個新段:任務狀態段(TSS),它和資料段、程式碼段一樣也是一種段,記錄了任務的狀態資訊。  

      與其它段一樣,TSS也有描述它的結構:TSS描述符表,它記錄了一個TSS的資訊,同時還有一個TR暫存器,它指向當前任務的TSS。任務切換的時候,CPU會將原暫存器的內容寫出到相應的TSS,同時將新TSS的內容填到暫存器中,這樣就實現了任務的切換。

      TSS在任務切換過程中起著重要作用,通過它實現任務的掛起和恢復。所謂任務切換是指掛起當前正在執行的任務,恢復或啟動執行另一個任務。Linux任務切換是通過switch_to這個巨集來實現的,它利用長跳指令,當長跳指令的運算元是TSS描述符的時候,就會引起CPU的任務的切換,此時,CPU將所有暫存器的狀態儲存到當前任務暫存器TR所指向的TSS段中,然後利用長跳指令的運算元(TSS描述符)找到新任務的TSS段,並將其中的內容填寫到各個暫存器中,最後,將新任務的TSS選擇符更新到TR中。這樣系統就開始執行新切換的任務了。由此可見,通過在TSS中儲存任務現場各暫存器狀態的完整映象,實現了任務的切換。 task_struct中的tss成員就是記錄TSS段內容的。當程序被切換前,該程序用tss_struct儲存處理器的所有暫存器的當前值。當程序重新執行時,CPU利用tss恢復暫存器狀態。