MIPS启动过程分析
启动
关于在CPU上软件可见的效果,复位几乎和异常完全一样,当然是一种不会返回叫的异常。在最初的MIPS体系结构中,这样做主要是一种经济上的节约实现成本和文档。但是后来的CPU已经提供了从冷复位一直到不可屏蔽中断几种不同级别层次的复位。在MIPS中,复位和异常条件在不知不觉地互相影响着。 我们要复用常规异常的机制,在复位后EPC指向检测到复位时正在执行的指令,大多数寄存器的值都被保留。但是复位破坏了正常的操作,复位发生时正在加载的寄存器或正在写入或重填的高速缓存位置上的值可能被废弃数据填充。
用经过复位仍然保持不变的状态来实现某些有用的死机后的验户调试是可能的,但是需要你的硬件工程师帮忙。CPU无法区分复位发生于正在运行的系统还是刚刚上电。死机重启后的验尸调试留给天才的读者作为作业;我们重点放在系统从头开始启动的情形。
CPU响应复位时从地址0xBFC00000处开始取指。这是不用高速缓存的kseg1区的物理地址0x1FC0 0000。
复位之后,CPU控制寄存器有足够的状态已经确定,可以让CPU执行非高速缓存的指令。“足够的状态”解释为最少刚刚够;注意以下几点:
l SR中只能保证三样东西:CPU处于核心态;中断是禁止的;异常被指引到不经高速缓存的入口点——即SR (BEV)=1。在现代的CPU上,保证前两个(以及更多)的条件的典型做法就是将异常模式位SR (EXL)置位,把复位看作异常其实已经隐含了这一层意思。
l 高速缓存处于随机的、无意义的状态,所以从高速缓存的加载可能不读取存储器而直接返回叫垃圾。
TLB处于随机的状态,在初始化之前绝对不能访问(在有些CPU上硬件对TLB表项重复的可能风险只有最少的保护,结果可能是TLB关闭,只能通过再一次复位才能修复)。 |
|