一、tast_struct結構
它是乙個資料結構,可以說,它代表了乙個程序。它有很多字段,大體有一下幾種:
標識號:程序標識、使用者標識、組標識。
狀態: linux的程序的四種基本狀態
排程資訊:優先順序、時間片等
程序鏈資訊:父程序、子程序的指標
檔案資訊:開啟檔案、虛擬檔案系統
上下文資訊:程序的執行環境
二、i386體系的任務管理和排程
i386體系從硬體上支援任務間的切換。為此目的,增設了一種新段:任務狀態段(tss),首先它和資料段、**段一樣也是一種段,其次它記錄了任務的狀態資訊。
與其它段一樣,也有描述它的結構:tss描述符表,它記錄了乙個tss的資訊,同時還有乙個tr暫存器,它指向當前任務的tss。任務切換的時候,cpu會將原暫存器的內容寫出到相應的tss,同時將新tss的內容填到暫存器中,這樣就實現了任務的切換。
三、linux程序切換
linux任務切換是通過switch_to這個巨集實現的,它利用長跳指令,當長跳指令的運算元是tss描述符的時候,就會引起cpu的任務的切換,此時,cpu將所有暫存器的狀態儲存到當前任務暫存器tr所指向的tss段(當前任務的任務狀態段)中,然後利用長跳指令的運算元(tss描述符)找到新任務的tss段,並將其中的內容填寫到各個暫存器中,最後,將新任務的tss選擇符更新到tr中。這樣系統就正式開始執行新切換的任務了。上面提到的task_struct中的tss成員就是記錄tss段內容的。
程序切換原理
linux是乙個多工作業系統,它支援遠大於cpu核心數的任務同時進行。當然,這些任務並不是真的同時在執行,而是因為系統在很短的時間內,將cpu輪流分配給它們,造成多工同時執行的錯覺。每個任務在執行前,cpu都需要知道任務從哪來載入,又從 開始執行,也就是說,需要事先幫它們設定好cpu暫存器和程式計數...
linux程序解析 程序切換
為了控制程序的執行,linux核心必須有能力掛起正在cpu上執行的程序,換入想要切換的程序,也就是恢復以前某個掛起的程序,這就是linux的程序切換。1程序切換的時機 一般來說,程序切換都是發生在從中斷或者系統呼叫返回使用者態的時候,最常見的是時鐘中斷。在允許核心搶占的情況下,系統呼叫被中斷打斷也有...
linux程序解析 程序切換
為了控制程序的執行,linux核心必須有能力掛起正在cpu上執行的程序,換入想要切換的程序,也就是恢復以前某個掛起的程序,這就是linux的程序切換。1程序切換的時機 一般來說,程序切換都是發生在從中斷或者系統呼叫返回使用者態的時候,最常見的是時鐘中斷。在允許核心搶占的情況下,系統呼叫被中斷打斷也有...