Page 63 - 《软件学报》2021年第6期
P. 63

马智  等:面向 SPARC 处理器架构的操作系统异常管理验证                                                  1637


         也将导致窗口的切换.图中右上角的 WIM 寄存器用来表示每个窗口被使用的状态,每个窗口在 WIM 中对应 1
         个 bit 位.当寄存器窗口都被使用时,如果再发生一个额外的 SAVE 指令则会超过窗口的容量,此时将触发一个窗
         口寄存器溢出陷阱;与之相反,当发生 RESTORE 或 RETT 指令时,如果 WIM 寄存器对应 bit 位无效,此时将触发
         一个窗口寄存器下溢陷阱.






























                                         Fig.5    SPARC window register
                                           图 5   SPARC 窗口寄存器

             异常管理涉及的内存内容的改变由两部分组成:一是内存中的全局变量,二是内存堆栈.我们使用 M 来表示
         内存中的全局变量(MemoVar):
                                     (MemoVar )  M  :: nest tcb ossm swflag=  |  |  |
                                     (TcbAddr )      tcb  :: CurTcb PreTcb=  |
                                               O =
                                     (Offset )           :: 0| 4| 8 |...|128
                                     (HeapStack H O∈→  sp , where  sp =  L o
                                                                  ( 6)

                                             )
         其中,
             •   nest 表示异常嵌套次数;
             •   tcb 表示任务控制块指针,由 CurTcb 与 PreTcb 组成:前者指向当前运行任务的 Tcb 地址,后者指向前一
                个任务运行的 Tcb 地址.当任务发生切换时,会使用它们;
             •   ossm 表示异常信号表,异常信号表中保存着系统中所有异常处理函数的入口地址;
             •   swflag 用来判断 ESR 中是否发生了任务切换:若其值为 1,则发生任务切换;否则不发生;
             •   H 表示异常管理中使用到的内存堆栈地址;
             •   sp 表示栈顶指针,在 SPARC 中,使用当前窗口寄存器的 o6 表示 sp 的值;
             •   O 则表示异常管理中系统设置的地址偏移量.
             计算机的运行过程中,系统的某些状态根据寄存器中内容的变换而改变,需要对这些状态进行形式化描述.
         程序状态寄存器中的 ET 位为 0 时,系统进入异常屏蔽状态;否则,系统正常响应异常.除了状态的定义,我们对异
         常管理中使用的一些基本操作在此进行定义,如打开异常响应(en_Exce)、关闭异常响应(dis_Exce)、寄存器窗
         口左移动 win_TL(L))、右移 win_TR(L)等:
   58   59   60   61   62   63   64   65   66   67   68