第1章操作系统运行的硬件基础1.1中央处理器(CPU)1.2中断技术1.3系统调用1.4存储器1.5I/O端口寻址与访问控制1.1中央处理器(CPU)1.单处理器与多处理器系统一个计算机系统只有一个处理器,称之为单处理器系统如果有多个处理器称之为多处理器系统处理器由运算器、控制器、一组寄存器和高速缓存构成。程序计数器PC指令寄存器IR处理器状态字PSW堆栈指示器SP指令译码器IDI/O控制逻辑工作寄存器地址寄存器数据寄存器ALU控制器CU1.1中央处理器(CPU)指令译码器ID:是控制器中的主要部件之一,分析指令操作码,以决定执行的操作。程序计数器PC:程序计数器是用于存放下一条指令的主存单元地址。单片机及汇编语言中常称作PC(ProgramCounter)。程序开始执行前,必须将它的起始地址,即程序开始执行指令的内存单元地址送入PCPSW:状态寄存器,存放指令的执行状态:CPU执行状态、溢出、中断屏蔽码等。例:32位机器的CPU寄存器2.寄存器分类两类寄存器:用户可见寄存器(工作寄存器):对所有程序都是可用的,包括系统程序和用户程序。控制和状态寄存器:用于控制处理器的操作,大部分对用户不可见,由OS的特权代码使用。1.1中央处理器(CPU)(1)用户可见寄存器用户程序可以访问到的寄存器,包括数据寄存器、地址寄存器等。数据寄存器(dataregister)又称通用寄存器,主要用于各种算术逻辑指令和访存指令。地址寄存器(addressregister)用于存储指令或数据的内存地址。变址寄存器段寄存器栈指针(2)控制和状态寄存器用于控制处理器的操作,对于用户不可见的(用户不可以使用)。常见的控制和状态寄存器:程序计数器(PC:ProgramCounter),记录将要取出的指令的地址。指令寄存器(IR:InstructionRegister),包含最近取出的指令。程序状态字(PSW:ProgramStatusWord),记录处理器的运行模式信息。条件码寄存器:保存CPU操作结果的各种标记位,如算术运算产生的溢出、符号等等。机器指令只能通过隐式访问来读取该寄存器的各个位,不能显示访问修改。)中断寄存器3.处理器状态根据运行程序对资源和机器指令的使用权限,将处理器设置为不同的工作状态。多数系统将处理器工作状态划分为内核态和用户态:内核态:操作系统管理(核心)程序运行时的CPU状态,又称为特权态、系统态、管态或核心态用户态:用户程序运行时的CPU状态,又称为普通态或目态。有些系统将处理器状态划分核心状态,管理状态和用户程序状态三种。实例:x86系列CPU386、486、Pentium系列都支持4个处理器特权级别(特权环:R0、R1、R2和R3)从R0到R3特权能力依次降低R0相当于双状态系统的内核态R3相当于用户态R1和R2则介于两者之间,它们能够运行的指令集合具有包含关系:3210RRRRIIII各个级别有保护性检查(地址校验、I/O限制),并分别运行不同级别的程序:R0-运行操作系统核心代码R1-运行关键设备驱动程序和I/O处理例程R2-运行其它受保护共享代码,如语言系统运行环境R3-运行各种用户程序现有基于x86处理器的操作系统,多数UNIX、Linux以及Windows系列大都只用了R0和R3两个特权级别实例:x86系列处理器4.特权指令和非特权指令特权指令:只能由操作系统内核执行的指令,如:I/O设备使用指令:如启动I/O设备、测试I/O设备工作状态、控制I/O设备动作的指令系统资源的分配和管理指令:包括改变系统工作方式,检测用户的访问权限,修改主存管理的段表、页表,清内存和建立存储保护指令任务的创建和切换指令存取特殊寄存器的指令:如存取IDTR、GDTR、LDTR、时钟寄存器(脉冲计数)等指令。非特权指令:系统程序和应用程序都可以执行的指令。在单用户单任务的计算机系统,可以不区分特权指令和非特权指令,一般用户可以使用指令系统中的全部指令。但是,在使用多道程序设计技术的计算机系统必须要区分为特权指令和非特权指令(why?)内核态和用户态的比较处理器处于内核态时可以执行全部指令(包括特权指令)可使用系统所有资源具有改变cpu状态的能力处理器处于用户态时只能执行非特权指令特权级别不同,可运行的指令集合也不同特权级别越高,可以运行的指令集合越大,高特权级别可运行指令集合包含低特权级的可运行指令。1.1中央处理器(CPU)操作系统内核功能主要包括:时钟管理:脉冲计数,指令周期生成中断机制:中断向量表维护和中断响应原语:由若干条机器指令构成,用于完成特定功能的一段程序。原语具有不可分割性,即原语在执行过程中不允许被中断。由系统控制的数据结构管理,如主存页表、进程控制块表、消息队列、缓冲队列等。1.1中央处理器(CPU)5.程序状态字PSW程序状态字(PSW):用来指示处理器执行条件和状态的寄存器。不同机器的PSW格式和信息不完全相同。PSW的信息一般包括:CPU工作状态码——指明内核态还是用户态。条件码——条件码是CPU根据运算结果由硬件设置的位(或位段),指示当前指令执行结果的各种状态信息,如:算术运算产生的正、负、零或溢出等的结果中断屏蔽码——指出是否允许中断用户态→内核态:转换的唯一途径是通过中断。内核态→用户态:通过修改PSW中的CPU工作状态码来实现。系统屏蔽钥EMWP中断码ILCCC程序屏蔽指令地址0711153133353963例:IBM370的PSW钥:用于存储保护EMWP:E表示机器控制方式(同步控制、异步控制),M表示机器校验方式(奇偶、CRC),W表示等待状态位,P表示处理器的工作状态。ILC:上一次执行指令的长度。CC:条件值。系统屏蔽:指出CPU是否接受特定通道的中断(I/O设备)。程序屏蔽:指示CPU是否接受某种程序性中断(系统调用)。1.2中断技术操作系统是“中断驱动”的。中断对操作系统的重要性相当于机械系统中的驱动齿轮。中断协调计算机系统对各种外部事件的响应和处理。中断是多任务实现的必要条件。什么是中断?为什么要引入中断?中断是如何响应和执行的?为什么要引入中断?解决主机与I/O设备并行工作的问题提高系统可靠性实现多机联系方便应用程序,实现实时控制中断:CPU对系统内外发生的异步事件的响应过程。中断源(中断事件):引起中断发生的事件。中断处理程序:处理中断的程序代码,也称中断例程,如:键盘输入除溢出错误的处理程序设备故障处理程序缺页中断处理程序等1.基本概念异步事件是指无一定时序关系随机发生的事件。2.中断分类(1)中断:又称I/O中断或异步中断,由来自处理器和主存之外的中断源引起的中断,如时钟中断,键盘中断等来自于外部设备的中断都属于外中断。外中断是一种强迫性中断,可屏蔽。(2)异常:也成同步中断,应用程序执行过程中发生的意想不到的行为,不可屏蔽。如:非法指令或内存出错导致当前指令执行失败(3)系统调用:应用程序主动向操作系统发出的服务请求,是战役中自愿性中断,可同步或异步响应。如读文件等。3.中断系统中断系统=中断硬件+中断软件中断硬件——中断系统的机制部分,负责中断扫描和响应。在CPU初始化时设置中断使能标志根据中断事件设置中断标志(获取中断号)访问中断向量表,调用相应的中断服务例程中断软件——中断系统的策略部分,执行相应的中断处理指令。现场保存中断服务处理(中断服务例程)清除中断标记(中断服务例程)现场恢复中断处理过程中断请求中断判优中断响应中断服务中断返回中断硬件中断处理程序中断处理过程t=0t=7一一一一一一一一一一一一打印机中断服务程序用户程序t=40中断响应中断返回(1)中断硬件的基本功能识别中断源:通常用一个寄存器来存储每个中断源的状态信息,该寄存器的内容称为中断字。断点保护:程序计数器和PSW的内容入栈。why?提供中断处理程序入口地址映射表(中断向量表)等数据结构。非屏蔽中断请求中断逻辑中断指令INTn溢出中断INT0除法错中断单步中断TF=1中断控制器8259A可屏蔽性中断请求…INTRNMIIBM-PC中断逻辑和中断源示意图(2)中断逻辑当多个中断源请求同时发生时,由中断逻辑电路按中断优先级的高低来判定应响应哪个中断请求。一次只能响应当前优先级最高的一个中断。(2)中断逻辑接受和响应中断源的中断请求的方法因机器而异,在PC中:可屏蔽中断请求INTR:来自输入输出设备的I/O中断,通过对PSW中的中断屏蔽位可以屏蔽所有的I/O中断。不可屏蔽中断请求:属于机器故障中断,包括内存奇偶校验错以及掉电等中断源产生的中断。程序性中断(如溢出、除法错都可以引起中断)和软件中断等。为了区分和不丢失中断信号,用固定触发器来寄存每个中断源的中断信号。一般规定:值为1时,表示有中断信号,为0时表示无中断信号。所有中断源的触发器组成中断寄存器,每个触发器对应中断寄存器中的一个中断位。(3)中断寄存器集成于CPU控制部件中,用于检测是否有中断发生的机构。在每条指令执行周期的最后时刻(中断周期)扫描中断寄存器,询问是否有中断信号。若无中断信号,继续执行下一条指令;否则,中断硬件将该中断触发器内容按规定编码送入PSW的相应位(中断码)。(4)中断扫描机构允许中断开始取下一条指令执行指令停止检查处理中断不允许中断中断周期执行周期取指周期(5)中断响应CPU接收到来自于不同中断源的中断请求后,需要及时地响应中断。中断响应是中断硬件对中断事件做出响应的过程。任一时刻,CPU只能响应一个中断。中断系统需要按照各个中断源的优先级,选择具有最高优先级的中断进行响应,这个过程称为中断判优。如何响应当前选择的中断,执行相应的中断服务例程?(5)中断响应CPU如何响应中断,两个问题:CPU何时响应中断?通常在CPU执行了一条指令以后,更确切地,在指令周期最后时刻扫描中断寄存器,接受中断请求。如何获知提出中断请求的设备或中断源?用软件指令去查询各设备接口,比较费时(非向量中断)。使用“中断向量表”(向量中断)。非向量中断:总是转向中断查询程序的入口地址,执行终端查询程序,以确定被优先批准的中断源,然后分支进入相应的中断服务程序。每个中断有一个唯一的中断向量号(通常为中断类型号)。中断向量号通常按照从小到大的顺序存放在中断向量表中。中断向量表一般存放在主存储器的固定区域中。(6)中断向量(6)中断向量…向量地址…排队器输出显示器服务程序打印机服务程序JMP400JMP300JMP200…………主存12H13H14H200300向量地址入口地址入口地址设备编码器1000…000100100100…00010011由硬件产生中断向量地址,再由中断向量地址找到中断服务程序的入口地址。例:8088的中断向量表255号向量…32号向量31号向量5号向量4号向量(溢出)3号向量(断点)2号向量(NMI)1号向量(单步)0号向量(除法错)…003FFH003FCH00080H0007CH00014H00012H0000CH00008H00004H00000H专用中断向量(5个)系统保留中断向量(27个)用户可用中断向量(224个)8088系统的中断向量表占用了系统主存最低端的1KB的空间,共存储了256个中断向量(7)中断处理过程中断源发出一个中断信号CPU完成当前指令的执行,扫描中断信号CPU发送中断应答信号CPU将PSW、IP和CS压入栈中(断点)保存剩余的处理器状态信息恢复中断前的PSW、IP和CS开中断处理中断中断服务程序的入口地址送入IP和CS硬件操作中断处理子程序关闭中断恢复处理器状态信息中断隐指令----CPU响应中断之后,经过某些操作转去执行中断服务程序,这些操作是由硬件直接实现,称为中断隐指令。中断隐指令是指不在指令系统中的指令,其功能包括保护程序断点、硬件关中断、向量地址送PC(硬件向量法)或中断识别程序入口地