《用ZYNQ MPSoC玩DOOM!.docx》由会员分享,可在线阅读,更多相关《用ZYNQ MPSoC玩DOOM!.docx(7页珍藏版)》请在第一文库网上搜索。
1、用ZYNQMPSoC玩DOOM!通过这篇有趣的教程,熟悉运行在赛灵思ZynqU1traSca1e+MPSoC上的Xen管理程序。赛灵思和DornerWorks的系统软件团队在赛灵思的ZynqU1trasca1e+MPSoC上启动GProject管理程序时,我们发现可通过运行当年叱诧一时的流行电壬游戏Doom来演示和测试系统。神马?!你不知道DOOM?(CS你总知道吧如何针对ZynqU1traSca1e+MPSoC通过QEMU在Xen上运行Doom呢,在详细介绍具体步骤之前,我们先来了解什么是管理程序,以及它们如何与ZynqU1traSca1e+MPSoC上的处理器协同工作。管理程序及其工作原理
2、管理程序是一种可虚拟化处理器的计算机程序。运行在虚拟化处理器上的应用程序和操隹系统似乎完全拥有系统,但事实上管理程序负责管理虚拟处理器对物理机资源(例如存储器和处理内核)的访问。管理程序之所以流行,是因为能实现设计分区以及系统上运行的独立软件元素之间的隔离。为了支持虚拟化,物理处理器必须提供一个供管理程序运行的特殊“模式”。因此,介绍处理器模式有助于理解管理程序如何完成处理器魔法。所有处理器都有一些指令,这些指令可操作寄谴中存储的值,并可读写存储器。处理器的模式是指令和寄存器的集合,以及利用指令访问寄存器和存储器时要遵守的规则。为了便于解释,我们以通用处理器为例来介绍,并使用与结构无关的术语。
3、在这个实例中,处理器具有特定的寄存器、指令和模式。寄存器包括RegisterARegisterBRegisterCUserPrograinCounterRegister-Super和SuperProgramCountero指令包括以下内容。ADDRegister3Register1Register2将Register1与Register2相加,并把结果存入Register3,即Register3=Register1+Register20MOVTORegister2Register1将Register1中地址所指向的存储器内容移动到Register2oMOVFROMRegister2Regist
4、er1将Register1的内容移动到Register2中地址所指向的存储器。Entersuper进入处理器的super模式。Exitsuper退出super模式并进入user模式。在USER模式下,处理器的指令的功能受到限制。本例中,指令可对除RegisterSuper和SuperProgramCounter以外的所有寄存器进行读和写操作,处理器可执行除Exitsuper以外的所有指令。此外,在user模式下,所有指令只能读和写一部分存储器,例如从地址0x0000_0100到OXOFFF_FFFF。在USER模式下,如果程序尝试执行不应该执行的指令,或者访问无权访问的寄存器或存储器位置,那么
5、处理器将暂停出错指令(offendinginstruction)oSUPER模式下,处理器的指令可以读/写上述所有寄存器,包括RegisterSuper和SuperProgramCountero以上所列的所有指令,包括EXITSUPER,都可以执行,另外,附加的指令ENTERHYPER也可执行(后面详细介绍该指令)。此外,在SUPER模式下,指令可以访问系统中的全部存储器(从0x0000_0000到0x7FFF_FFFF)。采用带模式的处理器,使我们可以利用设计分区来更简单地解决软件工程设计问题。以上实例中,只有一种方法进入super模式:执行Entersuper指令。同样,只有一种方法退出s
6、uper模式:执行ExitsupeRo此外,在USER模式下程序只能访问机器的部分存储器。有了这种方案,我们可编写一个程序让处理器同时运行多个USER模式程序。这个“操作系统”(OS)程序运行在SUPER模式,并管理在USER模式中运行的程序。当OS运行时,会查看需要运行的所有USER模式程序,选择一个运行,然后使用Exitsuper这样的指令通知处理器切换到user模式以运行程序。所选的程序会一直运行,直到有事件导致处理器切回super模式。这类事件可以是来自user模式程序的Entersuper指令,或外部事件,例如定时器,它可以不提醒正在USER模式下运行的程序将处理器切换到SUPER模
7、式。无论切换如何发生,每当事件发生时,我们都可构建OS以根据相应策略相继选择和运行程序。当切换快速进行时,用户认为USER程序同时运行。USERHYPER模式的用处是让很多SUPER程序运行。SUPER模式下的每个程序都可以是OS;这些OS本身会让很多USER程序并行运行。SUPER处理器模式还能防止USER程序干扰运行在SUPER模式的程序或其他USER模式程序。USER模式程序的任何错误或违规都可被控制在该程序自身的实例中,不会破坏或干扰为SUPER模式操作保留的系统存储器和寄存器。听起来很好,但能否用另一个模式实现一些功能?对我们的机器稍加扩展,就可以引入HYPER模式。HYPER模式可
8、以读/写所有初始寄存器(RegiStcrA、RegisterBRegiSterC、UserProgramCounterRegisterSuper和SUPerPrograInCoUnter)以及两个附加寄存器:RegisterHyper和HyperProgramCounteroHYPER模式下的指令包括初始集以及下面的斜体字。ADDRegister3Register1Register2将Register1与Register2相加并把结果放在Register3中,即Register3=Register1+Register20MOVTORegister2Register1将Register1中地址所
9、指向的存储器内容移到Register20MOVFROMRegister2Register1将Register1的内容移到Register2中地址所指向的存储器。MOVTOPHYSRegiSter2RegiSter1将Register1中物理地址指向的存储器内容移到Register2oM0VFR0MPHYSRegiSter2RegiSter1将RegiSter1的内容移到Register2中地址指向的物理存储器。Entersuper进入处理器的super模式。Exitsuper退出super模式并进入user模式。ENTERHYPER进入处理器的HYPER模式。exithyper退出处理器的hy
10、per模式。SwitchsuperRegiSterHyPer切换到super程序,该程序将使用RegisterHyper中的值来执行下一个SUPER程序。HYPER模式中的附加指令和寄存器允许处理器切换哪个程序在SUPER模式中运行,就像SUPER模式允许处理器切换哪个程序在USER模式中运行一样。HYPER模式的一个特性是能够切换哪个存储器SUPER模式能看到;当一个在HYPER模式中运行的程序执行SWITCHSUPERRegiSterHyPer时,底层存储器完全断开。这就是说当hyper模式中的程序执行了exithyper之后,下个SUPER程序运行之时,SUPER模式看到的实际物理存储器
11、与运行在SUPER模式中的另一个程序使用的物理存储器不同。SUPER模式程序仍使用相同地址访问存储器,但是该地址指向不同的物理位置。图1显示了执行SWITCHSUPERRegisterHyper前后的处理器存储器视图。HYPER模式很有用,是因为它允许很多个SUPER程序运行。SUPER模式中每个程序都可以是0S;这些OS本身可以让很多USER程序并列运行.这意味着,我们可以在相同硬件上运行多个0S,例如Windows和1inux;在一个处理器上运行20个1inUX实例;或者之间的任意组合。由于每个虚拟OS实例无法看到另一个OS实例,因此如果一个崩溃,不会使另一个实例也崩溃。HYPER模式的特
12、性还有其他应用:我们可以在多个OS之间对系统资源分区;监测HYPER模式下每个OS的执行,以在崩溃时重启;以及在虚拟OS运行时密切关注系统状态。BeforeProcessorModeIHyPaIAddress/10x(XXX).0000、JOx(XX)0.0004MemorySUPERmodeseesPhysica1Memory0x010x02030x01002030x7FFFFFF80x7FFF_FFFC0x070070x09008OxOAOB0x0COxOEOF0xPhysica1Memory0010x0203AddressOXOOooJ)OOOOXOooOJ)OO40x7FFF.FFF8
13、0x7FFF.FFFC0x0607AfterProssorModeIHyPer图1:HYPER模式下执行SWITCHSUPERRegiSterHyPer的前后区别随着处理器从USER切换到SUPER模式,再从SUPER切换到HYPER模式,机器会赋予执行代码更多特权。本例中,USER模式程序只有权使用四个寄存器(RegiSterA、RegisterBRegisterC和USerPrOgramCOUnter)和四个指令:(ADD、MOVTOMoVFROM和IENTER-SUPER)。此外,USER程序只能读写0x0000_0100至OxOFFF_FFFF的存储器。一旦进入SUPER模式,处理器允
14、许指令与RegisterSuper和SuperProgramCounter对话,并允许执行Exitsuper和enterhypero此外,super程序可以访问从OXoOooJ)Ooo至0x7FFFFFFF的存储器。最后,一旦处理器进入HYPER模式,其指令就可以操作RegisterHyper和HyPerPrOgramCOUnter,而且程序可执行SWITCH-SUPER和EXITHYPER0图2:各种模式如如彩所示HYPER模式还允许处理器读写所有虚拟存储器,OXooooJ)OoO至OXFFFF_FFFF,以及读写实际物理存储器。这些特权等级通常被直观地用环形来描述(囱2)o主环,即HYPE
15、R环为特权等级较低的环赋予权限,最终可控制整个系统。理论结合实践ARM创建处理器设计,供ARM合作伙伴构建芯片用。ARM处理器包含一个或多个内核。每个内核实现一个ARM架构。例如,ZynqU1traSca1e+MPSoC包含一个ARMCortex1M53处理器及四个RMv8-A物理内核(图3)。当查看ARM处理器的文档和代码时,这种区别很重要;为了全面理解具有一个ARM内核的“芯片”,可参考有关架构(如RMv8-A)和处理器(如Corte-A53)的文档。ARMv8架构中有四个例外等级(来源:ARM架构参考手册,D1-1404):1、例外等级0(E1O),无需特权即可执行;2、例外等级1(E11),执行OS以及任何执行特权指令的内容;3、例外等级2(E12),允许硬件被虚拟化;以及4、例外等级3(E13),允许在安全与非安全处理器状态之间切换。以下程序通常在这些模式下运行,如ARM架构参考手册(D1-1404)中所述:E1O,应用程序;E1I,OS内核以及通常所描述的相关特权函数;E12,管理程序;E13,安全监控器。我们的理论实例直接对应ARMv8执行模式E1O至E12:USER对应E10,SUPER对应E1I,HYPER对应E12。ARM添加第四个特权等级,即E13;利用这个特权等