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

1636                                     Journal of Software  软件学报 Vol.32, No.6,  June 2021

         路将一个固定的地址写入指令寄存器中,CPU 从该地址处读取并执行指令.在指令的执行过程中,CPU 硬件逻辑
         根据所取到的指令完成状态的改变,这种改变由两部分组成:(1) CPU 自身状态的改变,包括指令寄存器、通用寄
         存器、状态寄存器以及控制寄存等的改变;(2)  内存内容的改变,包括全局变量、任务堆栈等.指令寄存器的更新
         也就是通常所说的“指令地址加 1”或“转移地址生成”,系统运行的推动力正是由这种自动更新所形成的.在这种
         力的推动下,CPU 按顺序在指令序列上移动,我们称之为“执行流”.在执行流的流动过程中,CPU 不断地改变自
         身和外部的状态,这就是我们通常所说的“程序的运行”.因此,计算机的运行的状态可以使用一个两元组来表示,
         即〈寄存器状态,内存状态〉.为了对异常管理进行细粒度的建模,我们将两元组扩展为五元组:〈G,L,S,M,H〉,其
         中,G,L,S 表示不同类型的寄存器状态,M,H 表示不同类型的内存成员,在第 3.1 节中对其进行详细解释.

         3.1   基本数据类型定义
             寄存器的种类与使用方法与硬件平台密切相关,本文重点关注采用 SPARC 体系的操作系统,将严格按照
         SPARC 标准对寄存器模型进行数学建模.SPARC 处理器中包含 32 个通用寄存器,其中有 8 个寄存器是全局寄
         存器,另外 24 个寄存器是窗口寄存器.这 24 个窗口寄存器可以被分为 3 组:out,in,local,SPARC 处理器中含有 8
         个窗口,执行时将按照 0 到 7 的顺序依次切换窗口.在任务运行时,窗口寄存器中保存着当前任务的上下文信息.
         在任意时刻,任务只使用一组窗口寄存器.当发生系统异常时,处理器会在不同的寄存器窗口之间移动,以保存
         当前上下文环境.对全局寄存器和窗口寄存器的形式化定义如下所示:
                                   (GlobReg )      ::G =  g 0 | 1|...| 7g  g
                                   (WindReg )  W  :: 0|...| 7 | 0|...| 7 | 0|...| 7l=  l  i  i  o  o
                                   (SpecReg )      ::  |S =  psr wim  | |  |tbr pc npc
                                   (PsrReg )       psr ::   |PIL CWP=   |  ET
                                   (TbrReg )       tbr  :: TBA tta=   |  |  ttb
                                   (CWinReg )     L W∈  →  ( S CWP )
         其中,
             •   G 表示全局寄存器(GlobReg);
             •   W 表示窗口寄存器(WindReg);
             •   S 用来表示 SPARC 的特殊寄存器(SpecReg);
             •   psr 表示程序状态寄存器(PsrReg),PsrReg(processor state register)是一个 32 位的寄存器,它包含了 11 个
                字段,这些字段保存着处理器的状态信息.与异常管理密切相关的主要有 3 个字段:
                 ¾   PSR_enable_traps(ET)字段,表示处理器此时是否可以响应异常:当 ET 为 0 时,处理器处于异常屏
                     蔽状态;ET 为 1 时,处理器处于异常响应状态;
                 ¾   PSR_proc_interrupt_level(PIL)表示处理器目前可以接受异常的最低优先级;
                 ¾   PSR_current_window_pointer(CWP)字段可以理解为指向当前寄存器窗口的指针,表示系统目前
                     正在使用的寄存器窗口是哪一个;
             •   wim 为窗口无效屏蔽寄存器,表示窗口寄存器的使用状态,通常用来判断窗口溢出或下溢;
             •   tbr 为异常基址标志寄存器(TbrReg),用来表示异常的基本属性,其中,TBA 表示异常的标志号,tta 表示异
                常的种类(同步或异步),ttb 表示异常的优先级;
             •   pc 和 npc 表示程序计数器:pc 保存着系统正在执行的指令的地址,npc 保存着将要被执行的下一条指令
                的地址.
             为了描述窗口寄存器中的旋转动作,我们使用 L 来表示当前窗口寄存器,CWP 指向的寄存器窗口即为系统
         当前使用的 WindReg,当 CWP 的值发生改变时,便伴随着窗口的旋转.图 5 中展示了窗口寄存器的这些特征,存
         在 8 个寄存器窗口,分别是 0 到 7(用 w0~w7 标记),每个窗口对应了 24 个寄存器,其中 16 个与相邻的窗口共用.
         这些寄存器窗口是交迭的,以循环圈的方式连接起来.SPARC 执行 RESTORE 和 SAVE 指令时,将导致窗口切
         换,CWP 指针用来指向当前正在使用的窗口.特权模式下的 RETT 指令(return from trap)和异常事件(TRAP 指令)
   57   58   59   60   61   62   63   64   65   66   67