概述:
fcse(fast context switch extension,快速上下文切換)位於cpu和mmu之間,如果兩個程序使用了同樣的虛擬位址空間,則對cpu而言,兩個程序使用了同樣的虛擬位址空間。快速上下文切換機構對各程序的虛擬位址進行變換,這樣系統中除了cpu之外的部分看到的是經過快速上下文切換機構變換的虛擬位址。快速上下文切換機構將各程序的虛擬空間變換成不同的虛擬空間,這樣在進行程序間切換時就不需要進行虛擬位址到實體地址的重對映。
快速上下文切換(fcse)通過修改系統中不同程序的虛擬位址,避免在進行程序間切換時造成的虛擬位址到實體地址的重對映,這樣就減少了重建mmu、使cache和tlb無效、重建cache和tlb內容等操作的巨大開銷,從而提高系統的效能。
fcse原理:
在arm系統中,4gb的虛擬空間被分成128個程序空間塊,每個程序空間塊大小為32mb。每個程序空間塊中可以包含乙個程序,該程序可以使用虛擬位址空間0x00000000~0x01ffffff,這個位址範圍也就是cpu看到的程序的虛擬空間。系統128個程序空間塊的編號為0~127,編號為i的程序空間塊中的程序實際使用的虛擬位址空間為i*0x02000000到i*0x02000000+ 0x01ffffff,這個位址空間是系統中除了cpu之外的其他部分看到的該程序所占用的虛擬位址空間。
快速上下文切換機構將cpu發出的每個虛擬位址按照上述的規則進行變換,然後傳送到系統中的其他部分,變換過程如圖5-1所示。
位址va到mva的變換演算法如下:
if (va[31:25] == 0b0000000) then
mva = va | (pid <<25)
else
mva = va
如果va[31:25]不等於0,說明位址va是本程序用於訪問其他程序中的資料和指令的虛擬位址,此時被訪問程序的pid不能為0。相反如果va[31:25]等於0,說明要訪問的位址va在該程序自身位址空間內,所以要進行程序上下文切換,將va轉換成mva,其中上面公式中的pid是該程序的pid號。
fcse程式設計介面:
arm處理器用cp15協處理器的c13暫存器來實現fcse功能,c13暫存器的介紹詳見第4.1.2節「cp15暫存器介紹」。當要進行程序切換時,首先清空寫快取,再把新程序的頁表位址寫入cp15的c2暫存器,然後把新程序的pid號寫入cp15的c13暫存器的最高7位即可。如果處理器不支援fcse功能,那麼使cache和tlbs無效,然後系統要重建cache和tlbs。下面我們比較一下xscale處理器以及armv6處理器中程序切換中的記憶體切換操作函式的區別:
xscale處理器程序切換中的記憶體切換操作函式如下所示:
.align 5
entry(cpu_xscale_switch_mm)
clean_d_cache r1, r2 ;使r1所指位址到r2所指位址之間資料cache無效
mcr p15, 0, ip, c7, c5, 0 ;使系統全部指令cache無效
mcr p15, 0, ip, c7, c10, 4 ;清空寫快取write buffer
mcr p15, 0, r0, c2, c0, 0 ;裝入新的頁表位址
mcr p15, 0, ip, c8, c7, 0 ;使系統全部資料和指令tlbs cache無效
cpwait_ret lr, ip ;返回
armv6處理器程序切換中的記憶體切換操作函式如下所示:
entry(cpu_v6_switch_mm)
mov r2, #0
ldr r1, [r1, #mm_context_id] ;獲取新程序的pid號,該pid號其實就是新程序的struct mm_struct結構中的mm_context_t成員結構context的id
mcr p15, 0, r2, c7, c10, 4 ;清空寫快取write buffer
mcr p15, 0, r0, c2, c0, 0 ;裝入新的頁表位址
mcr p15, 0, r1, c13, c0, 1 ;設定上下文pid號
mov pc, lr ;返回
在arm處理器中只有armv6以上版本的處理器才支援fcse功能。
程序上下文切換與處理器上下文切換
3 處理器模式切換 4系統任務與使用者程序 1 程序上下文與中斷上下文程序上下文 所謂的 程序上下文 就是乙個程序在執行的時候,cpu的所有暫存器中的值 程序的狀態以及堆疊上的內容 暫存器位於cpu上,速度快,堆疊位於記憶體上,速度慢 當核心需要切換到另乙個程序時,它需要儲存當前程序的所有狀態,即儲...
ARM處理器的快速上下文切換技術FCSE
fcse 概述 fcse fast context switch extension,快速上下文切換 位於 cpu 和 mmu 之間,如果兩個程序使用了同樣的虛擬位址空間,則對 cpu而言,兩個程序使用了同樣的虛擬位址空間。快速上下文切換機構對各程序的虛擬位址進行變換,這樣系統中除了 cpu 之外的...
上下文切換
1 系統呼叫 一次系統呼叫其實是發生了兩次cpu上下文的切換 首先將使用者態的cpu暫存器中的指令儲存在系統核心中。為了執行核心態 需要將暫存器更新為核心態指令的位置,然後跳轉到核心空間去執行任務。當核心態的指令執行完成的時候,cpu暫存器將恢復儲存在系統核心中的上一次執行的使用者態,然後切換到使用...