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