在 Zynq MPSoC 上运行 DOOM 游戏
听起来很好,但能否用另一个模式实现一些功能?
本文引用地址://m.amcfsurvey.com/article/201608/294978.htm对我们的机器稍加扩展,就可以引入 HYPER 模式。HYPER 模式可以读/写所有初始寄存器(RegisterA、RegisterB、RegisterC、UserProgramCounter、RegisterSuper 和 SuperProgramCounter)以及两个附加寄存器:RegisterHyper 和 HyperProgramCounter。HYPER 模式下的指令包括初始集以及下面的斜体字。
ADD Register3 Register1 Register2 将 Register1 与 Register2 相加并把结果放在 Register3 中,即 Register3 = Register1 + Register2。
MOVTO Register2 Register1 将 Register1 中地址所指向的存储器内容移到 Register2。
MOVFROM Register2 Register1 将 Register1 的内容移到 Register2 中地址所指向的存储器。
MOVTOPHYS Register2 Register1 将 Register1 中物理地址指向的存储器内容移到 Register2。
MOVFROMPHYS Register2 Register1 将 Register1 的内容移到 Register2 中地址指向的物理存储器。
ENTERSUPER 进入处理器的 SUPER 模式。
EXITSUPER 退出 SUPER 模式并进入 USER 模式。
ENTERHYPER 进入处理器的 HYPER 模式。
EXITHYPER 退出处理器的 HYPER 模式。
SWITCHSUPER RegisterHyper 切换到 SUPER 程序,该程序将使用 RegisterHyper 中的值来执行下一个 SUPER 程序。
HYPER 模式中的附加指令和寄存器允许处理器切换哪个程序在 SUPER 模式中运行,就像 SUPER 模式允许处理器切换哪个程序在 USER 模式中运行一样。HYPER 模式的一个特性是能够切换哪个存储器 SUPER 模式能看到;当一个在 HYPER 模式中运行的程序执行 SWITCHSUPER RegisterHyper 时,底层存储器完全断开。这就是说当 HYPER 模式中的程序执行了 EXITHYPER 之后,下个 SUPER 程序运行之时,SUPER 模式看到的实际物理存储器与运行在 SUPER 模式中的另一个程序使用的物理存储器不同。SUPER 模式程序仍使用相同地址访问存储器,但是该地址指向不同的物理位置。图 1 显示了执行 SWITCHSUPER RegisterHyper 前后的处理器存储器视图。
HYPER 模式很有用,是因为它允许很多个 SUPER 程序运行。SUPER 模式中每个程序都可以是 OS;这些 OS 本身可以让很多 USER 程序并列运行.这意味着,我们可以在相同硬件上运行多个 OS,例如 Windows 和 Linux;在一个处理器上运行 20 个 Linux 实例;或者之间的任意组合。由于每个虚拟 OS 实例无法看到另一个 OS 实例,因此如果一个崩溃,不会使另一个实例也崩溃。HYPER 模式的特性还有其他应用:我们可以在多个 OS 之间对系统资源分区;监测 HYPER 模式下每个 OS 的执行,以在崩溃时重启;以及在虚拟 OS 运行时密切关注系统状态。
![](http://m.amcfsurvey.com/editerupload/201608/b2d601ba4368c5d529a829882a7bd66e.png)
图 1:HYPER 模式下执行 SWITCHSUPER RegisterHyper 的前后区别
随着处理器从 USER 切换到 SUPER 模式,再从 SUPER 切换到 HYPER 模式,机器会赋予执行代码更多特权。本例中,USER 模式程序只有权使用四个寄存器(RegisterA、RegisterB、RegisterC 和 UserProgramCounter)和四个指令:(ADD、MOVTO、MOVFROM和ENTER-SUPER)。此外,USER 程序只能读写 0x0000_0100 至 0x0FFF_ FFFF 的存储器。一旦进入 SUPER 模式,处理器允许指令与 RegisterSuper 和 SuperProgramCounter 对话,并允许执行 EXITSUPER 和 ENTERHYPER。此外,SUPER 程序可以访问从 0x0000_0000 至 0x7FFF_FFFF 的存储器。
评论