操作系统(1)----操作系统的运行机制

目录

1.CPU指令

2.内核态、初始态的切换

3.中断机制的基本原理

4.中断的类型

异常:

总结:

中断:

总结:


1.CPU指令

CPU的指令类型有特权指令与非特权指令。应用程序只能使用“非特权指令”,如:加法指令,减法指令等。操作系统内核作为“管理者”,有时会让CPU执行一些“特权指令”,如:内存清零指令。这些指令影响重大只允许“管理者”一即操作系统内核来使用。

在CPU设计和生产的时候就划分了特权指令和非特权指令,因此CPU执行一条指令前就能判断出其类型,CPU是怎么判断出指令类型的呢?

CPU有两种状态,“内核态”和“用户态”CPU 中有一个寄存器叫程序状态字寄存器(PSW),其中有个二进制位,1表示“内核态”,0示“用户态”

处于内核态(核心态,管态)时,说明此时正在运行的是内核程序,此时可以执行特权指令

处于用户态(目态)时,i说明此时正在运行的是应用程序,此时只能执行非特权指令

2.内核态、初始态的切换

内核态--->用户态: 执行一条特权指令--修改PSW的标志位为“用户态”,这个动作意味着操作系统将主动让出CPU使用权

用户态--->内核态:由“中断”引发,硬件自动完成变态过程,触发中断信号意味着操作系统将强行夺回CPU的使用权,这种情况会发生在非法使用特权指令,或者操作系统需要开展某项管理工作,即操作系统需要介入,都需要触发中断信号。

举个例子:

(1)开机时,需要加载操作系统,进行操作系统的初始化工作,初始化工作就是由操作系统中某些内核程序完成的,所以CPU此时处在"内核态"

(2)开机完成后,用户可以启动某个应用程序。

(3)操作系统内核程序在合适的时候主动让出CPU,让该应用程序上CPU运行。操作系统内核在让出CPU之前,会用一条特权指令把 PSW 的标志位设置为“用户态”

(4)应用程序运行在“用户态”

(5)若此时植入一条特权指令,这个非法事件会引发一个中断信号,但CPU检查PSW的状态为“0”,处于“用户态”,CPU检测到中断信号后,会立即变为“核心态”,并停止运行当前的应用程序(拒绝执行这一植入的特权指令),转而运行处理中断信号的内核程序

(6)操作系统会对引发中断的事件进行处理,处理完了再把CPU使用权交给别的应用程序

3.中断机制的基本原理

CPU执行指令时,如果发生了异常或中断请求,必须进行相应的处理。从CPU 检测到异常或中断事件,到调出相应的处理程序,整个过程称为异常和中断响应。CPU对异常和中断响应的过程可分为:

关中断、保存断点和程序状态、识别异常和中断并转到相应的处理程序。

(1)关中断

在保存断点和程序状态期间,不能被新的中断打断,因此要禁止响应新的中断,即关中断通常通过设置“中断允许”(IF)触发器来实现,若IF置为1,则为开中断,表示允许响应中断。若IF置为0,则表示关中断,表示不允许响应中断。

(2)保存断点和程序状态

为了能在异常和中断处理后正确返回到被中断的程序继续执行,必须将程序的断点(返回地址)送到栈或特定寄存器中。通常保存在栈中,这是为了支持异常或中断的嵌套。异常和中断处理后可能还要回到被中断的程序继续执行,被中断时的程序状态字寄存器PSW的内容也需要保存在栈或特定寄存器中,在异常和中断返回时恢复到PSW中。

(3)识别异常和中断并转到相应的处理程序

异常和中断源的识别有软件识别硬件识别两种方式。异常和中断源的识别方式不同。异常采用软件识别方式,而中断可以采用软件识别方式或硬件识别方式。

软件识别方式:

CPU 设置一个异常状态寄存器,用于记录异常原因。操作系统使用一个统一的异常或中断查询程序,按优先级顺序查询异常状态寄存器,以检测异常和中断类型,先查询到的先被处理然后转到内核中相应的处理程序。

硬件识别方式:

硬件识别方式也称向量中断,异常或中断处理程序的首地址称为中断向量,所有中断向量都存放在中断向量表中。每个异常或中断都被指定一个中断类型号。在中断向量表中,类型号和中断向量一一对应,因而可以根据类型号快速找到对应的处理程序。


整个响应过程是不可被打断的。中断响应过程结束后,CPU就从PC中取出对应中断服务程序的第一条指令开始执行,直至中断返回,这部分任务是由CPU通过执行中断服务程序完成的。整个中断处理过程是由软/硬件协同实现的。

4.中断的类型

CPU内部产生的意外事件被称为异常。有些教材中也称内中断。由来自CPU外部的设向CPU发出的中断请求被称为中断,有些教材中也称外中断。异常是CPU执行一条指令时,由CPU在其内部检测到的、与正在执行的指令相关的同步事件。中断是一种典型的由外部设备触发的、与当前正在执行的指令无关的异步事件

异常:

异常有以下几种类型:

自陷

自陷也称陷阱或陷入,它是预先安排的一种“异常”事件,就像预先设定的“陷阱”一样。

通常的做法是:事先在程序中用一条特殊指令或通过某种方式设定特殊控制标志来人为设置一个“陷阱”,当执行到被设置了“陷阱”的指令时,CPU 在执行完自陷指令后,自动根据不同“陷阱”类型进行相应的处理,然后返回到自陷指令的下一条指令执行。注意,当自陷指令是转移指令并不是返回到下一条指令执行,而是返回到转移目标指令执行。
在x86机器中,用于程序调试“断点设置”和单步跟踪的功能就是通过陷阱机制实现的。此外,系统调用指令、条件自陷指令(如MIPS 中的 teq、teqi、tne、tnei等)等都属于陷阱指令,执行到这些指令时,无条件或有条件地自动调出操作系统内核程序进行执行。

故障

指在引起故障的指令启动后、执行结束前被检测到的异常事件。例如,指令译码时,出现“非法操作码”;取数据时,发生“缺段”或“缺页”;执行整数除法指令时,发现“除数为 0”等。对于“缺段”“缺页”等异常事件,经处理后,可将所需的段或页磁盘调入主存回到发生故障的指令继续执行,断点为当前发生故障的指令;对于“非法操作码”“除数为0”等,因为无法通过异常处理程序恢复故障,因此不能回到原断点执行,必须终止进程的执行。

终止

如果在执行指令的过程中发生了使计算机无法继续执行的硬件故障,如控制器出错、存储器校验错、总线错误等,那么程序将无法继续执行,只能终止。此时,调出异常服务程序来重启系统。这种异常与故障和自陷不同,不是由特定指令产生的,而是随机发生的。

异常的例子:

1.由非法植入的特权指令引起的中断(终止)

2.除法指令中发现除数为0,也会引起内中断(故障)。

3.有时候应用程序想请求操作系统内核的服务,此时会执行一条特殊的指令--陷入指令,该指令会引发一个内部中断信号。("系统调用"就是通过陷入指令完成的)

注:陷入指令是一条特殊的指令,不是特权指令

所以若当前执行的指令是非法的,则会引发一个异常/中断信号。

注:CPU在执行指令时会检查是否有异常发生

这里补充一下系统调用:

操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。主要包括命令接口和程序接口。其中,程序接口由一组系统调用组成。

“系统调用”是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以通过系统调用来请求获得操作系统内核的服务

系统调用的作用:

操作系统内核会对共享资源进行统一的管理,并向上提供“系统调用”,用户进程想要使用打印机这种共享资源,只能通过系统调用向操作系统内核发出请求。内核会对各个请求进行协调处理。

应用程序通过系统调用请求操作系统的服务。而系统中的各种共享资源都由操作系统内核统一掌管,因此凡是与共享资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。

高级语言的库函数,在底层也会使用到系统调用,所以系统调用是比高级语言的库函数更为底层的接口:

注:不是所有的库函数都需要涉及系统调用

不涉及系统调用的库函数:如的“取绝对值”的函数

涉及系统调用的库函数:如“创建一个新文件”的函数

系统调用的过程:

1.应用系统首先会执行传参指令,传参指令会将参数传递到寄存器中,传递多少参数取决于系统调用需要多少参数,操作系统会根据这些参数判断是哪种类型的服务。

2.参数传递完毕后,应用程序会执行陷入指令,触发内中断信号,转入相应的中断处理程序一即系统调用的入口程序

3.接下来CPU就会响应中断,进行系统调用入口程序的处理,此时CPU的状态由"用户态"转为"内核态",该程序会根据寄存器中的参数判断用户需要哪种系统调用服务。

4.接下来CPU就会转入响应的系统调用处理程序进行处理。

总结来讲就是:

传递系统调用参数--->执行陷入指令(用户态)--->执行相应的内核请求程序处理系统调用(核心态)---->返口应用程序

注意:

1.陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,使CPU进入核心态

2.发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行

总结:

故障:

在引起故障的指令启动后、执行结束前被检测到的异常事件。

例如,指令译码时,出现“非法操作码”;取数据时,发生“缺段”或“缺页”;执行整数除法指令时,发现“除数为 0”等。

① 对于“缺段”“缺页”等异常事件,经处理后,可将所需的段或页面从磁盘调入主存,回到发生故障的指令继续执行,断点为当前发生故障的指令

② 对于“非法操作码”“除数为0”等,因为无法通过异常处理程序恢复故障,因此不能回到原断点执行,必须终止进程的执行。

陷阱:

① 当执行到被设置了“陷阱”的指令时,CPU 在执行完自陷指令后,自动根据不同“陷阱”类型进行相应的处理,然后返回到自陷指令的下一条指令执行

② 当自陷指令是转移指令并不是返回到下一条指令执行,而是返回到转移目标指令执行

终止:如果在执行指令的过程中发生了使计算机无法继续执行的硬件故障,如控制器出错、存储器校验错、总线错误等,那么程序将无法继续执行,只能终止。此时,调出异常服务程序来重启系统。

中断:

中断是指来自 CPU 外部、与CPU执行指令无关的事件引起的中断,包括 I/O 设备发出的I/O中断(如键盘输入、打印机缺纸等),或发生某种特殊事件(如用户按 Esc 键、定时器计数时间到)等。外部 I/O 设备通过特定的中断请求信号线向 CPU 提出中断请求,CPU 每执行完一条指令检查中断请求信号线,如果检测到中断请求,则进人中断响应周期。

1.时钟中断---由时钟部件发来的中断信号。时钟部件每隔一个时间片(如 50ms) 会给CPU发送一个时钟中断信号,通过这个时钟中断信号就可以实现多道程序并发运行了。

假设系统中想要并发执行两个应用程序,应用程序1执行自己的应用程序,直到50ms,时钟部件会向CPU发送中断信号,CPU收到中断信号会将“用户态”转变为“内核态”,在内核态下执行内核程序,处理中断信号,并且决定让另一个应用程序上CPU运行。所以切换应用程序2上CPU运行。这样两个应用程序就可以实现交替运行。

2.I/O中断一一由输入/输出设备发来的中断信号。

当输入输出任务完成时,向CPU发送中断信号。CPU收到中断信号,就会处理I/O中断中的内核程序。

注:CPU在每一条指令执行结束后,都会理性检查是否有外中断信号。

中断可分为可屏蔽中断不可屏蔽中断

(1)可屏蔽中断

指通过可屏蔽中断请求线 INTR 向 CPU 发出的中断请求。CPU 可以通过在中断控制器中设置相应的屏蔽字来屏蔽它或不屏蔽它,被屏蔽的中断请求将不被送到 CPU。

(2)不可屏蔽中断

指通过专门的不可屏蔽中断请求线 NMI 向 CPU 发出的中断请求,通常是非常紧急的硬件故障,如电源掉电等。这类中断请求信号不可被屏蔽,以让 CPU 快速处理这类紧急事件。

中断和异常在本质上是一样的,但它们之间有以下两个重要的不同点:

(1) “缺页”或“溢出”等异常事件是由特定指令在执行过程中产生的,而中断不和任何指令相关联,也不阻止任何指令的完成。

(2) 异常的检测由 CPU 自身完成,不必通过外部的某个信号通知 CPU。对于中断,CPU必须通过中断请求线获取中断源的信息,才能知道哪个设备发生了何种中断。

根据识别中断服务程序地址的方式,可分为向量中断和非向量中断;根据中断处理过程是否可以被打断,还可分为单重中断和多重中断。

注:所有的异常和中断事件都是由硬件检测发现的。

总结:

(1)异常和中断处理过程:

异常和中断的处理过程基本是相同的,所以有些教材会将两者统称为中断:
若CPU在执行用户程序的第 i 条 指令时检测到一个异常事件,或者执行第 i 条指令后发现一个中断请求信号,则CPU打断当前程序,然后转去执行相应的异常或中断处理程序。

① 若异常或中断处理程序能够解决相应的问题,则在异常或中断处理程序的最后,CPU 通过执行异常或中断返回指令,回到被打断的用户程序的第 i 条指令(故障)或第 i+1 条指令继续执行(自陷);

② 若异常或中断处理程序发现是不可恢复的致命错误,则终止用户程序。通常情况下,对异常和中断的具体处理过程由操作系统(和驱动程序)完成。

(2)软件中断/硬件中断:

① 故障异常和自陷异常属于程序性异常(软件性异常)。

程序性异常也称软件中断,是指在CPU内部因执行指令而引起的异常事件。

故障:整除 0、溢出、非法指令(非法操作码)、栈溢出、地址越界、缺页等。

自陷:断点、单步跟踪等。

② 终止异常和外中断属于硬故障中断。

硬故障中是由硬连线出现异常引起的。

终止:控制器出错、存储器校验错、总线错误等。

外中断:I/O 设备发出的I/O中断(如键盘输入、打印机缺纸等),或发生某种特殊事件(如用户按 Esc 键、定时器计数时间到)等。

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值