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