ARM基礎學習 快速上下文切換技術

2021-07-31 16:38:29 字數 1766 閱讀 2222

fcse的原理

快速上下文切換技術(fcse)通過修改系統中不同程序的虛擬位址,避免在進行程序間切換時造成虛擬位址到實體地址的重對映,從而提高系統效能;

通常情況下,如果兩個程序占用的虛擬位址空間重疊,系統在這兩個程序之間進行切換時,必須進行虛擬位址到實體地址的重對映。而虛擬位址到實體地址的重對映涉及到重建mmu中的頁表,而且cache 及tlb中的內容都必須使無效(通過設定協處理器暫存器的相關位)。這些操作將帶類巨大的系統開銷,一方面重建mmu和使無效cache及tlb的內容需要很大的開銷,另一方面重建cache和tlb內容也需要很大的開銷。

如果兩個程序使用了同樣的虛擬位址空間,則對cpu而言,兩個程序使用了同樣的虛擬位址空間;快速上下文切換機構對各程序的虛擬位址進行變換,這樣的系統中除了cpu之外的部分看到的是經過快速上下文切換機構變換的虛擬位址。快速上下文切換機構將各程序的虛擬位址空間變換成不同的虛擬位址空間。這樣在進行程序間切換時就不需要進行虛擬位址到實體地址的重對映。

arm系統中,4gb的虛擬空間被分成了128個程序空間塊,每乙個程序空間塊大小為32mb。每個程序空間塊中可以包含乙個程序,該程序可以使用虛擬位址空間0x0~0x01ffffff,這個位址範圍也就是cpu看到的程序的虛擬空間。系統128個程序空間塊的編號0~127。 標號為x的程序空間塊中的程序實際使用的虛擬位址空間為:

(x 0x02000000)到(x**0x02000000+0x01ffffff),這個位址空間是系統中除了cpu 之外的其他部分看到的該程序所占用的虛擬位址空間。

注:雖然虛擬空間被分成了128個程序空間塊,每個程序空間塊的大小為32mb,但這只是針對虛擬空間而言。在經過mmu轉換以後,實際的物理空間塊的大小可能只有1m,因為虛擬位址是被劃分成段的

快速上下文切換機構將cpu發出的每個虛擬位址按照上述的規則進行變換,然後傳送到系統的其他部分。變換過程如下圖:

由位址va到mva的變換演算法如下所示;

if (va[31:25]==0b0000000)then

mva=va|(pid<<25)

else

mva=va

其中。pid為當前程序的所在程序空間的編號,即當前程序的程序識別符號。其取值為0~127。

系統中,每個程序都使用虛擬位址空間0x0~0x01ffffff,當程序訪問本程序的指令和資料時,它產生的為虛擬位址va的高7位為0;快速上下文切換機構用該程序的程序標示符代替va的高7位,從而得到變換後的虛擬位址mva,這個mva在該程序對應的程序空間塊內。

當va的高7位不全是0時,mva=va。這種va是本程序用於訪問別的程序中的資料和指令的虛擬位址,注意這時被訪問的程序識別符號不能為0.

cp15中的暫存器c13用於快速上下文切換。其編碼格式如下所示。

訪問暫存器c13的指令格式如下所示。

mcr p15, 0,,,c0,0

mrc p15,0,,,c0,0

其中, 在讀操作時,結果中位[31::25]返回pid,其他位 的數值是不可以預知的。寫操作將設定pid的值。

當pid的值為0時,mva=va,相當於禁止了fcse。系統復位後pid即為0.

當pid的值不為0時,相當於使能了fcse。

上下文切換

1 系統呼叫 一次系統呼叫其實是發生了兩次cpu上下文的切換 首先將使用者態的cpu暫存器中的指令儲存在系統核心中。為了執行核心態 需要將暫存器更新為核心態指令的位置,然後跳轉到核心空間去執行任務。當核心態的指令執行完成的時候,cpu暫存器將恢復儲存在系統核心中的上一次執行的使用者態,然後切換到使用...

上下文切換

上下文切換 有時也稱做程序切換或任務切換 是指 cpu 從乙個程序或執行緒切換到另乙個程序或執行緒。上下文切換與模式切換 上下文切換只能發生在核心態中。核心態是 cpu 的一種有特權的模式,在這種模式下只有核心執行並且可以訪問所有記憶體和其他系統資源。其他的程式,如應用程式,在最開始都是執行在使用者...

上下文切換

vmstat cs 每秒上下文切換次數 的疑惑 in 每秒cpu中斷次數 shell vmstat 1 procs memory swap io system cpu r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 0 45939...