2-MOOC-操作系统运行环境与运行机制-发布版

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

北京大学计算机科学技术系陈向群DepartmentofcomputerscienceandTechnologyPekingUniversity2015春季程序的执行启动程序、执行程序以及程序结束的工作完成与体系结构相关的工作完成应用程序所需的共性任务提供各种基本服务性能、安全、健壮等问题应用程序-----------------------虚拟机器界面操作系统-----------------------物理机器界面硬件操作系统运行环境CPU状态中断/异常机制操作系统运行机制系统调用处理器由运算器、控制器、一系列的寄存器以及高速缓存构成两类寄存器:用户可见寄存器:高级语言编译器通过优化算法分配并使用之,以减少程序访问内存次数控制和状态寄存器:用于控制处理器的操作通常由操作系统代码使用用于控制处理器的操作在某种特权级别下可以访问、修改常见的控制和状态寄存器程序计数器(PC:ProgramCounter),记录将要取出的指令的地址指令寄存器(IR:InstructionRegister),记录最近取出的指令程序状态字(PSW:ProgramStatusWord),记录处理器的运行状态如条件码、模式、控制位等信息从操作系统的特征考虑并发、共享提出要求→实现保护与控制需要硬件提供基本运行机制:处理器具有特权级别,能在不同的特权级运行的不同指令集合硬件机制可将OS与用户程序隔离现代处理器通常将CPU状态设计划分为两种、三种或四种在程序状态字寄存器PSW中专门设置一位,根据运行程序对资源和指令的使用权限而设置不同的CPU状态例:X86架构中的EFLAGS寄存器描述符中也设置了权限级别特权(privilege)指令:只能由操作系统使用、用户程序不能使用的指令非特权指令:用户程序可以使用的指令•下列哪些是特权指令?哪些是非特权指令?–启动I/O控制转移内存清零修改程序状态字设置时钟算术运算允许/禁止中断访管指令取数指令停机操作系统需要两种CPU状态内核态(KernelMode):运行操作系统程序用户态(UserMode):运行用户程序X86支持4个处理器特权级别特权环:R0、R1、R2和R3从R0到R3,特权能力由高到低R0相当于内核态;R3相当于用户态;R1和R2则介于两者之间不同级别能够运行的指令集合不同目前大多数基于x86处理器的操作系统只用了R0和R3两个特权级别用户态→内核态唯一途径→中断/异常/陷入机制内核态→用户态设置程序状态字PSW一条特殊的指令:陷入指令(又称访管指令)提供给用户程序的接口,用于调用操作系统的功能(服务)例如:int,trap,syscall,sysenter/sysexit因为内核态也被称为supervisormode操作系统的驱动力……中断/异常对于操作系统的重要性就好比:汽车的发动机、飞机的引擎→→可以说操作系统是由“中断驱动”或者“事件驱动”的主要作用及时处理设备发来的中断请求可使OS捕获用户程序提出的服务请求防止用户程序执行过程中的破坏性活动……等等CPU对系统发生的某个事件作出的一种反应CPU暂停正在执行的程序,保留现场后自动转去执行相应事件的处理程序,处理完成后返回断点,继续执行被打断的程序•事件的发生改变了处理器的控制流特点:•是随机发生的•是自动处理的•是可恢复的何时?何处?硬件完成这一过程在以后某个时刻继续历史背景中断的引入:为了支持CPU和设备之间的并行操作当CPU启动设备进行输入/输出后,设备便可以独立工作,CPU转去处理与此次输入/输出不相关的事情;当设备完成输入/输出后,通过向CPU发中断报告此次输入/输出的结果,让CPU决定如何处理以后的事情异常的引入:表示CPU执行指令时本身出现的问题如算术溢出、除零、取数时的奇偶错,访存地址时越界或执行了“陷入指令”等,这时硬件改变了CPU当前的执行流程,转到相应的错误处理程序或异常处理程序或执行系统调用操作系统要好好学习今天要学习的内容是中断哎呀,来电话了!接个电话先再来看书放个书签在这里处理电话请叫我书签大人接着学习中断知识操作系统要好好学习今天要学习的内容是异常口渴了喝口水再来学在这里要放个书签请叫我书签大人异常处理接着学习异常知识中断:外部事件,正在运行的程序所不期望的异常:由正在执行的指令引发中断(外中断)异常(内中断)I/O中断时钟中断系统调用页故障/页错误保护性异常断点指令其他程序性异常(如算术溢出等)事件硬件故障举例类别原因异步/同步返回行为中断Interrupt来自I/O设备、其他硬件部件异步总是返回到下一条指令陷入Trap故障Fault终止Abort有意识安排的可恢复的错误不可恢复的错误同步同步同步返回到下一条指令返回到当前指令不会返回硬件做什么?软件怎么做?……中断/异常机制是现代计算机系统的核心机制之一硬件和软件相互配合而使计算机系统得以充分发挥能力硬件该做什么事?——中断/异常响应捕获中断源发出的中断/异常请求,以一定方式响应,将处理器控制权交给特定的处理程序软件要做什么事?——中断/异常处理程序识别中断/异常类型并完成相应的处理处理器控制部件中设有中断寄存器CPU何时响应中断?中断响应:发现中断、接收中断的过程由中断硬件部件完成开始取下一条指令执行指令检查指令处理中断取指周期执行周期中断周期禁止中断允许中断在每条指令执行周期的最后时刻扫描中断寄存器,查看是否有中断信号?若无中断信号,继续执行下一条指令若有中断,中断硬件将该中断触发器内容按规定编码送入PSW的相应位,称为中断码,通过查中断向量表引出中断处理程序中断向量:一个内存单元,存放中断处理程序入口地址和程序运行时所需的处理机状态字执行流程按中断号/异常类型的不同,通过中断向量表转移控制权给中断处理程序中断向量表中断处理程序向量范围用途0~19不可屏蔽中断和异常20~31Intel保留32~127外部中断(IRQ)128(0x80)用于系统调用的可编程异常129~238外部中断239本地APIC时钟中断240本地APIC高温中断241~250Linux保留251~253处理器间中断254本地APIC错误中断255本地APIC伪中断不可屏蔽中断/异常0--除零1--单步调试4--算术溢出6--非法操作数12--栈异常13--保护性错误14--缺页异常①设备发中断信号②硬件保存现场③根据中断码查表④把中断处理程序入口地址等推送到相应的寄存器⑤执行中断处理程序设计操作系统时,为每一类中断/异常事件编好相应的处理程序,并设置好中断向量表系统运行时若响应中断,中断硬件部件将CPU控制权转给中断处理程序:保存相关寄存器信息分析中断/异常的具体原因执行对应的处理功能恢复现场,返回被事件打断的程序软件提前设置好硬件部件来执行以设备输入输出中断为例:打印机给CPU发中断信号CPU处理完当前指令后检测到中断,判断出中断来源并向相关设备发确认信号CPU开始为软件处理中断做准备:处理器状态被切换到内核态在系统栈中保存被中断程序的重要上下文环境,主要是程序计数器PC、程序状态字PSW硬件硬件CPU根据中断码查中断向量表,获得与该中断相关的处理程序的入口地址,并将PC设置成该地址,新的指令周期开始时,CPU控制转移到中断处理程序中断处理程序开始工作在系统栈中保存现场信息检查I/O设备的状态信息,操纵I/O设备或者在设备和内存之间传送数据等等中断处理结束时,CPU检测到中断返回指令,从系统栈中恢复被中断程序的上下文环境,CPU状态恢复成原来的状态,PSW和PC恢复成中断前的值,CPU开始一个新的指令周期硬件软件硬件通常分为两类处理:I/O操作正常结束若有程序正等待此次I/O的结果,则应将其唤醒若要继续I/O操作,需要准备好数据重新启动I/OI/O操作出现错误需要重新执行失败的I/O操作重试次数有上限,达到时系统将判定硬件故障X86处理器对中断/异常的支持中断由硬件信号引发的,分为可屏蔽和不可屏蔽中断异常由指令执行引发的,比如除零异常80x86处理器发布了大约20种不同的异常对于某些异常,CPU会在执行异常处理程序之前产生硬件出错码,并压入内核态堆栈系统调用异常的一种,用户态到内核态的唯一入口中断控制器(PIC或APIC)负责将硬件的中断信号转换为中断向量,并引发CPU中断实模式:中断向量表(InterruptVector)存放中断服务程序的入口地址入口地址=段地址左移4位+偏移地址不支持CPU运行状态切换中断处理与一般的过程调用相似保护模式:中断描述符表(InterruptDescriptorTable)采用门(gate)描述符数据结构表示中断向量中断向量表/中断描述符表四种类型门描述符任务门(TaskGate)中断门(InterruptGate)给出段选择符(SegmentSelector)、中断/异常程序的段内偏移量(Offset)通过中断门后系统会自动禁止中断陷阱门(TrapGate)与中断门类似,但通过陷阱门后系统不会自动禁止中断调用门(CallGate)段选择符格式索引特权级GDT/LDT中断描述符表→全局描述符表→IDTGDT(GlobalDescriptorTable)中断服务程序入口地址=段基址+偏移中断描述符格式段描述符格式中断/异常的硬件处理过程:确定与中断或异常关联的向量i通过IDTR寄存器找到IDT表,获得中断描述符(表中的第i项)从GDTR寄存器获得GDT的地址;结合中断描述符中的段选择符,在GDT表获取对应的段描述符;从该段描述符中得到中断或异常处理程序所在的段基址特权级检查检查是否发生了特权级的变化,如果是,则进行堆栈切换(必须使用与新的特权级相关的栈)硬件压栈,保存上下文环境;如果异常产生了硬件出错码,也将它保存在栈中如果是中断,清IF位通过中断描述符中的段内偏移量和段描述符中的基地址,找到中断/异常处理程序的入口地址,执行其第一条指令IDTRGDTR段描述符中断处理程序IDTGDT中断描述符中断向量号内存段基址偏移段选择符偏移量操作系统向用户程序提供的接口系统调用是什么?系统调用的作用典型系统调用举例系统调用:用户在编程时可以调用的操作系统功能系统调用是操作系统提供给编程人员的唯一接口使CPU状态从用户态陷入内核态每个操作系统都提供几百种系统调用(进程控制、进程通信、文件使用、目录操作、设备管理、信息维护等)Linux操作系统提供多少个系统调用?应用程序C函数库/API接口内核系统调用系统调用与C库函数/API函数的关系系统调用与内核函数的关系中断/异常机制支持系统调用服务的实现①选择一条特殊指令:陷入指令(亦称访管指令)引发异常,完成用户态到内核态的切换②系统调用号和参数每个系统调用都事先给定一个编号(功能号)③系统调用表存放系统调用服务例程的入口地址④怎样实现用户程序的参数传递给内核?常用的3种实现方法:由陷入指令自带参数:陷入指令的长度有限,且还要携带系统调用功能号,只能自带有限的参数通过通用寄存器传递参数:这些寄存器是操作系统和用户程序都能访问的,但寄存器的个数会限制传递参数的数量在内存中开辟专用堆栈区来传递参数高级语言汇编语言write()……movl$4,%eax……int$0x80……编译#includeunistd.hintmain(){charstring[5]={‘H’,‘e’,‘l’,‘l’,‘o’,‘!’,‘\n’};write(1,string,7);return0;}输出结果:Hello!高级语言视角1..section.data2.output:3..ascii“Hello!\n”4.output_end:5..equlen,output_end-output6..section.text7..globl_start8._start:9.movl$4,%eax#eax存放系统调用号10

1 / 66
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功