ARM存儲(chǔ)器之:存儲(chǔ)管理單元MMU
(2)一個(gè)快速上下文切換的例子
圖15.39顯示了一個(gè)從任務(wù)1切換到任務(wù)2之前和之后的存儲(chǔ)器布局。
任務(wù)1正在運(yùn)行
任務(wù)2正在運(yùn)行
圖15.39快速上下文切換擴(kuò)展例子
從圖中可以看出,任務(wù)1和任務(wù)2都運(yùn)行在0x00000000~0x01ffffff的地址空間。從任務(wù)1切換到任務(wù)2域控制要做相應(yīng)的改變。通過在CPU和MMU之間加FCSE使系統(tǒng)的虛擬地址空間映射沒有改變,所以不需要清除(Flush)或清理(Clean)Cache或TLB。
使用FCSE時(shí)執(zhí)行一次上下文切換需要的步驟:
①保存執(zhí)行任務(wù)的上下文,并將執(zhí)行任務(wù)設(shè)置為睡眠態(tài);
②將喚醒任務(wù)的進(jìn)程ID寫到CP15的寄存器c13中;
③通過寫CP15的寄存器c3,將當(dāng)前任務(wù)的域設(shè)置為不可訪問,而喚醒任務(wù)的域設(shè)置為客戶訪問;
④恢復(fù)喚醒任務(wù)的上下文;
⑤繼續(xù)執(zhí)行被恢復(fù)的任務(wù)。
下面是關(guān)于FCSE的一些提示。
①任務(wù)在大小上有固定的最大32MB的限制。
②存儲(chǔ)管理必須使用有固定起始地址(32MB的倍數(shù))的固定32MB分區(qū)。
③除非想為每個(gè)任務(wù)管理一個(gè)異常向量表,否則使用CP15寄存器c1的V位將異常向量表放置在虛擬地址0xffff0000。
④必須定義和使用一個(gè)活躍的域控制系統(tǒng)。
⑤如果使用域來保護(hù)各個(gè)任務(wù),則除非修改一級(jí)頁表中域的相應(yīng)位,并在上下文切換時(shí)清除TLB,否則最多只能有16個(gè)并發(fā)任務(wù)。
存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理
評(píng)論