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时执行一次上下文切换需要的步骤:
①保存执行任务的上下文,并将执行任务设置为睡眠态;
②将唤醒任务的进程ID写到CP15的寄存器c13中;
③通过写CP15的寄存器c3,将当前任务的域设置为不可访问,而唤醒任务的域设置为客户访问;
④恢复唤醒任务的上下文;
⑤继续执行被恢复的任务。
下面是关于FCSE的一些提示。
①任务在大小上有固定的最大32MB的限制。
②存储管理必须使用有固定起始地址(32MB的倍数)的固定32MB分区。
③除非想为每个任务管理一个异常向量表,否则使用CP15寄存器c1的V位将异常向量表放置在虚拟地址0xffff0000。
④必须定义和使用一个活跃的域控制系统。
⑤如果使用域来保护各个任务,则除非修改一级页表中域的相应位,并在上下文切换时清除TLB,否则最多只能有16个并发任务。
存储器相关文章:存储器原理
评论