一、tast_struct結(jié)構(gòu)
它是一個(gè)數(shù)據(jù)結(jié)構(gòu),可以說,它代表了一個(gè)進(jìn)程。它有很多字段,大體有一下幾種:
標(biāo)識(shí)號(hào):進(jìn)程標(biāo)識(shí)、用戶標(biāo)識(shí)、組標(biāo)識(shí)。
狀態(tài): linux的進(jìn)程的四種基本狀態(tài)
調(diào)度信息:優(yōu)先級(jí)、時(shí)間片等
進(jìn)程鏈信息:父進(jìn)程、子進(jìn)程的指針
文件信息:打開文件、虛擬文件系統(tǒng)
上下文信息:進(jìn)程的運(yùn)行環(huán)境
二、I386體系的任務(wù)管理和調(diào)度
I386體系從硬件上支持任務(wù)間的切換。為此目的,增設(shè)了一種新段:任務(wù)狀態(tài)段(TSS),首先它和數(shù)據(jù)段、代碼段一樣也是一種段,其次它記錄了任務(wù)的狀態(tài)信息。
與其它段一樣,也有描述它的結(jié)構(gòu):TSS描述符表,它記錄了一個(gè)TSS的信息,同時(shí)還有一個(gè)TR寄存器,它指向當(dāng)前任務(wù)的TSS。任務(wù)切換的時(shí)候,cpu會(huì)將原寄存器的內(nèi)容寫出到相應(yīng)的TSS,同時(shí)將新TSS的內(nèi)容填到寄存器中,這樣就實(shí)現(xiàn)了任務(wù)的切換。
三、Linux進(jìn)程切換
Linux任務(wù)切換是通過switch_to這個(gè)宏實(shí)現(xiàn)的,它利用長(zhǎng)跳指令,當(dāng)長(zhǎng)跳指令的操作數(shù)是TSS描述符的時(shí)候,就會(huì)引起CPU的任務(wù)的切換,此時(shí),cpu將所有寄存器的狀態(tài)保存到當(dāng)前任務(wù)寄存器TR所指向的TSS段(當(dāng)前任務(wù)的任務(wù)狀態(tài)段)中,然后利用長(zhǎng)跳指令的操作數(shù)(TSS描述符)找到新任務(wù)的TSS段,并將其中的內(nèi)容填寫到各個(gè)寄存器中,最后,將新任務(wù)的TSS選擇符更新到TR中。這樣系統(tǒng)就正式開始運(yùn)行新切換的任務(wù)了。上面提到的task_struct中的tss成員就是記錄TSS段內(nèi)容的。
新聞熱點(diǎn)
疑難解答
圖片精選