资源描述:
《(mips体系结构剖析,编程与实践)第4章 mips 异常与中断处理文库》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、(MIPS体系结构剖析,编程与实践)第4章MIPS异常和中断处理文库MIPS异常和中断处理(ExceptionandInterrupthandling)任何一个CPU都要提供一个详细的异常和中断处理机制。一个软件系统,如操作系统,就是一个时序逻辑系统,通过时钟,外部事件来驱动整个预先定义好的逻辑行为。这也是为什么当写一个操作系统时如何定义时间的计算是非常重要的原因。大家都非常清楚UNIX提供了一整套系统调用(SystemCall)。系统调用其实就是一段EXCEPTION处理程序。我们可能要问:为什么CPU要提供Excpetion和InterruptHandling呢?*处
2、理illegalbehavior,例如,TLBFault,or,wesay,thePagefault;CacheError;*Provideanapproachforaccessingpriviledgedresources,forexample,CP0registers.Asweknow,foruserleveltasks/processes,theyarerunningwiththeUserModepriviledgeandareprohibilitedtodirectlycontrolCPO.CPUneedprovideamechanismforthemtotrap
3、tokernelmodeandthensafelymanipulateresourcesthatareonlyavailablewhenCPUrunsinkernelmode.*Providehandlingforexternal/internalinterrupts.Forinstance,thetimerinterruptsandwatchdogexceptions.Thosetwointerrupt/exceptionsareveryimportantforanembeddedsystemapplicances.Nowlet'sgetbacktohowMIPSsup
4、portsitsexceptionandinterrupthandling.Forsimplicty,allinformationbelowwillbebasedonR7KCPU,whichisderivedfromtheR4kfamily.*ThefirstthingforunderstandingMIPSexceptionhandlingis:MIPSadopts**PreciseExceptions**mechanisms.Whatthatmeans?Hereistheexplainationfromthebookof"SeeMIPSRun":"Inaprecise
5、-exceptionCPU,onanyexceptionwegetpointedatoneinstruction(theexceptionvictim).Allinstructionsprecedingtheexceptionvictiminexecutionsequencearecomplete;anyworkdoneonthevictimandonanysubsequentinstructions(BNNNOTE:pipelineeffects)hasnosideeffectsthatthesoftwareneedworryabout.Thesoftwarethath
6、andlesexceptionscanignoreallthetimingeffectsoftheCPU'simplementations"上面的意思其实很简单:在发生EXCEPTION之前的一切计算行为会**FINISH**。在发生EXCEPTION之后的一切计算行为将不需考虑。对绝大多数情况而言,如你要写一个系统调用(SystemCall),你只要记住:MIPS已经把syscall这条指令的地址压在了EPC寄存器里。换句话说,在MIPS里,compardtothePowerPCCPUsrr1register,你需要**explicitely**refilltheEPC
7、registerbyEPC<-----EPC+4,beforeyouusetheeret中断返回。只有这样,你才能从系统调用中正确返回。异常/中断向量(Exception/InterruptVector)MIPS的Exception/InterruptVector的organizaionisnotasgoodasPowerPCCPUs.ForPPC,everydetailedexceptioncauseisdirectedtoaunqiuevectoraddress.MIPSisotherwise.Belowisarecapo