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