2.操作系统运行环境和运行机制

来源:互联网 发布:房屋装修设计软件 编辑:程序博客网 时间:2024/05/16 03:30

2.1处理器状态

中央处理器(CPU):由运算器控制器、一系列的寄存器高速缓存构成。

两类寄存器:

(1)用户可见寄存器:高级语言编译器通过优化算法分配并使用之,以减少程序访问内存次数;

(2)控制和状态寄存器:用于控制处理器的操作,通常由操作系统代码使用。

a.用于控制处理器的操作

b.在某种特权级别下可以访问、修改

常见的控制和状态寄存器:

a.程序计数器:记录将要取出的指令的地址

b.指令寄存器:记录最近取出的指令

c.程序状态字:记录处理器的运行状态如条件码、模式、控制位等信息

操作系统对硬件的需求——保护:需要硬件提供基本运行机制:(1)处理器具有特权级别,能在不同的特权级运行的不同指令集合

                                                                                                                (2)硬件机制可将os与用户程序隔离

因此,现代处理器通常将CPU状态设计划分为两种、三种或四种。在程序状态字寄存器PSW中专门设置一位,根据运行程序对资源和指令的使用权限而设置不同的CPU状态。

操作系统需要两种CPU状态:(1)内核态:运行操作系统程序——特权指令:只能由操作系统使用,用户程序不能使用的指令

                                                     (2)用户态:运行用户程序——非特权指令:用户程序可以使用的指令。

CPU状态之间的转换:(1)用户态——>内核态:唯一途径——>中断/异常/陷入机制,其中陷入指令又称访管指令,提供给用户程序的接口,用于调用操作系统的功能。例如(int,trap,syscall)

                                         (2)内核态——>用户态:设置程序状态字PSW

 2.2中断与异常机制

操作系统是由“中断驱动 ”或者“事件驱动”的。

中断/异常机制主要作用:

(1)及时处理设备发来的中断请求

(2)可使OS捕获用户程序提出的服务请求

(3)防止用户程序执行过程中的破坏性活动。    

中断/异常的概念:CPU对系统发生的事件作出的一种反应。

中断的引入是为了支持CPU和设备之间的并行操作,设备完成输入/输出后,通过向CPU发送中断报告此次结果。

异常的引入是表示CPU执行命令时本身出现的问题。如算术溢出、除零、取数时的纠错,这是硬件改变了CPU的执行流程,转到相应的错误处理程序或异常处理程序或执行系统调用。       

事件:(1)中断(外中断)

                    a.I/O中断

                    b.时钟中断

                    c.硬件故障

            (2)异常(内中断)               

                    a.系统调用

                    b.页故障/页错误

                    c.保护性异常

                    d.断点指令

                    e.其他程序性异常(如算术溢出等)

2.3中断/异常机制工作原理

中断/异常机制:硬件和软件相互配合而使计算机系统得以充分发挥能力。

硬件——中断/异常响应:捕获中断源发出的中断/异常请求,以一定方式响应,将处理器的控制权交给特定的处理程序。

软件——中断/异常处理程序:识别中断/异常类型并完成相应的处理。

中断响应:发现中断、接受中断的过程,由中断硬件部件完成。

处理器控制部件中设有中断寄存器。

中断响应过程:开始——>取下一条指令——>执行指令

中断向量表:由若干中断向量组成,即若干内存单元,存放中断处理程序入口地址和程序运行时所需的处理机状态字

中断处理程序:设计操作系统时,为每一类中断/异常事件编号相应的处理程序,并设置好中断向量表。

系统运行时若响应中断,终端硬件部件将CPU控制权转给中断处理程序:

(1)保存相关寄存器信息

(2)分析中断/异常的具体原因

(3)执行对应的处理功能

(4)恢复现场,返回被事件打断的程序。

2.4 X86处理器的中断/异常机制

中断:由硬件信号引发,分为可屏蔽中断和不可屏蔽中断。

异常:由指令执行引发的,比如除零异常,80X86处理器发布了大约20种不同的异常,对于某些异常,CPU会在执行异常处理程序之前产生硬件出错码,并压入内核态堆栈。

系统调用:特殊异常,从用户态到内核态的唯一入口

中断控制器(PIC或APIC):负责将硬件的中断信号转换为中断向量,并引发CPU中断。

实模式:中断向量表,存放中断服务程序的入口地址。入口地址=段地址左移4位+偏移地址;不支持CPU运行状态切换;中断处理与一般的过程调用相似。

保护模式:中断向量表改为中断描述符表,采用门描述符数据结构表示中断向量。

中断向量表/中断描述符表:

(1)任务门

 (2)中断门:a.给出段选择符,中断/异常程序的段内偏移量

                           b.通过中断门后系统会自动禁止中断

(3)陷阱门:a.与中断门类似,但通过陷阱门后系统不会自动禁止中断。

(4)调用门

中断/异常的硬件处理过程:(1)确定与中断或异常关联的向量i;

                                                 (2)通过IDTR寄存器找到IDT表,获得中断描述符

                                                 (3)从GDTR寄存器获得GDT的地址;结合中断描述符中的段选择符,在GDT表获取对应的段描述符;从该段描述符中得到中断或异常处理程序所在的段基址

                                                 (4)特权级检查

                                                 (5)检查是否发生了特权级的变化,如果是,则进行堆栈切换(必须使用与新的特权级相关的栈)

                                                 (6)硬件压栈,保存上下文环境;如果一场产生了硬件出错码,也将它保存在栈中

                                                 (7)如果是中断,清IF位

                                                 (8)通过中断描述符中的段内偏移量和段描述符中的基地址,找到中断/异常处理程序的入口地址,执行其第一条指令。

2.5系统调用机制——操作系统向用户程序提供的接口

系统调用:用户在编程时可以调用的操作系统功能。

系统调用的作用:

(1)系统调用是操作系统提供给编程人员的唯一接口

(2)使CPU状态从用户态陷入内核态

典型系统调用举例:每个操作系统都提供几百种系统调用(进程控制、进程通信、文件使用、目录操作、设备管理、信息维护等)

系统调用机制的设计:

(1)中断/异常机制:支持系统调用服务的实现

(2)选择一条特殊指令:陷入指令(亦称访管指令):引发异常,完成用户态到内核态的切换

(3)系统调用号和参数:每个系统调用都事先给定一个编号(功能号)
(4)系统调用表:存放系统调用服务例程的入口地址

参数传递过程问题:常用以下三种方法实现用户程序的参数传递给内核 :

(1)由陷入指令自带参数:陷入指令的长度有限,且还要携带系统调用功能号,只能自带有限的参数

(2)通过通用寄存器传递参数:这些寄存器是操作系统和用户程序都能访问的,但寄存器的个数会限制传递参数的数量,常用。

(3)在内存中开辟专用堆栈区来传递参数

系统调用的执行过程:当CPU执行到特殊的陷入指令时:

(1)中断/异常机制:硬件保护现场,通过查中断向量表,把控制权转给系统调用总入口程序;

(2)系统调用总入口程序:保存现场,将参数保存在堆栈里,通过查系统调用表把控制权转给相应的系统处理例程或内核函数;

(3)执行系统调用例程

(4)恢复现场,返回用户程序。


原创粉丝点击