程序地带

用户态和内核态 中断处理机制


操作系统
一、操作系统基础知识
1.1 用户态和内核态
1.1.1 定义:什么是用户态和内核态?

Kernel 运行在超级权限模式(Supervisor Mode)下,所以拥有很高的权限。按照权限管理的原则,多数应用程序应该运行在最小权限下。因此,很多操作系统,将内存分成了两个区域:


内核空间(Kernal Space),这个空间只有内核程序可以访问;

用户空间(User Space),这部分内存专门给应用程序使用。


image-20210114145732019


1.1.2 用户态和内核态

用户空间中的代码被限制了只能使用一个局部的内存空间,我们说这些程序在用户态(User Mode) 执行。


内核空间中的代码可以访问所有内存,我们称这些程序在内核态(Kernal Mode) 执行。


系统调用过程 如果用户态程序需要执行系统调用,就需要切换到内核态执行。下面我们来讲讲这个过程的原理。



如上图所示:内核程序执行在内核态(Kernal Mode),用户程序执行在用户态(User Mode)。当发生系统调用时,用户态的程序发起系统调用。因为系统调用中牵扯特权指令,用户态程序权限不足,因此会中断执行,也就是 Trap(Trap 是一种中断)。


发生中断后,当前 CPU 执行的程序会中断,跳转到中断处理程序。内核程序开始执行,也就是开始处理系统调用。内核处理完成后,主动触发 Trap,这样会再次发生中断,切换回用户态工作。


1.2 中断
1.2.1 中断机制的产生

早期计算机各个程序只能串行执行、系统资源利用低。为了解决上述问题,人们就发明了操作系统,引入了中断机制,实现了多道程序的并发执行,提高了系统资源的利用率。


中断是多程序并发执行的前提条件。


(1) 以两个进程并发运行为例,进程1在用户态运行了一段时间后,CPU会接收到计时部件(操作系统内核的时钟管理部件)发出的中断信号,表示进程1已经用完了一个时间片,CPU会切换到内核态,把CPU的使用权限交还给操作系统,操作系统内核就会对刚才的中断进行处理,操作系统知道进程1的时间片用完,就需要切换进程,在完成切换进程的一系列工作后,操作系统又会将CPU的使用权交还给用户进程。 (2) 接着进程2拿到CPU执行权就会在用户态下执行,进程2执行一段时间后,进程2发出系统调用(内中断信号),请求输出,主动要求操作系统介入工作,CPU会立即切换到内核态,把权限交还给操作系统,操作系统内核接管进程2系统调用请求,调用IO设备开始输出工作,然后操作系统交还CPU执行权,IO设备也会并行执行,进程2需要等待IO操作完成,所以进程1拿到CPU执行权开始运行。当执行一段时间后,IO操作完成,IO设备向CPU发送一个中断信号,此时CPU由用户态再次转换为内核态,对刚才的中断信号处理,由于IO操作完成,所以操作系统知道进程2可以恢复运行了,以完成后续工作,所以操作系统再次交还CPU执行权,让进程2再次运行。


(1) 当中断发生时,CPU立即进入内核态。 (2) 当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进程处理。 (3) 对于不同的中断信号,会进行不同的处理。


1.2.2 中断的本质

发生中断就意味着需要操作系统介入,开展管理工作。 当发生了中断,就意味着需要操作系统的介入,开展管理工作。由于操作系统的管理工作(**如进程切换、分配IO设备)需要使用特权指令,因此CPU要从用户态转换为核心态。**中断就可以使CPU从用户态转换为核心态,使操作系统获得计算机的控制权。因此,有了中断,才能实现多道程序并发执行。 用户态到核心态的转换就是通过中断机制实现的,并且中断是唯一途径。 核心态到用户态的切换时通过执行一个特权指令,将程序状态字(PSW)标志位设置为用户态。


1.2.3 中断的分类
1.2.3.1 内中断和关中断

中断可以分为:内中断和外中断。 内中断:内中断的信号来源于CPU内部、与当前执行的指令有关。如整数除0。


除数为零、操作数溢出等算术异常:简单处理,报告用户;也可以由用户编写中断续元程序处理

非法指令、用户态使用特权指令、地址越界、非法存取等指令异常:终止进程

终止进程指令:终止进程

虚拟地址异常:调整内存后重新执行指令

外中断:外中断的信号来源于CPU外部、与当前执行的指令无关。如用户强制结束一个进程、IO设备完成操作发生的中断信号。

由外围设备发出的信号引起的中断事件


时钟中断、间隔时钟中断:记时与时间片处理设备报到与结束中断:调整设备表键盘/鼠标信号中断:根据信号做出相应反映关机/重启动中断:写回文件,停止设备与CPU
1.2.3.2 开中断和关中断

​ 关中断和开中断其实就是像我们生活中的开关一样。 关中断是为了保护一些不能中途停止执行的程序而设计的,计算机的CPU进行的是时分复用,即每个时钟周期内,CPU只能执行一条指令。在多道程序设计的环境下(就是我们通常所说的多个程序同时运行时),CPU是不断地交替地将这些程序的指令一条一条的分别执行,这样从宏观上看我们就感觉多个程序是在同时执行,但从微观上看则是CPU在不同的时间段(极短)内执行着不同程序的单条指令。而CPU在这些指令之间的切换就是通过中断来实现的。


​ 关中断就是为了让CPU在一段时间内执行同一程序的多条指令而设计的,比如在出现了非常事件后又恢复正常时,CPU就会忙于恢复非常事件出现之前计算机的工作环境(通常叫做恢复现场),在恢复现场的时候,CPU是不允许被其他的程序打扰的,此时就要启动关中断,不再相应其他的请求。当现场恢复完毕后,CPU就启动开中断,其他等待着的程序的指令就开始被CPU执行,计算机恢复正常。


1.2.4 中断的处理过程

情况一:对于某些中断,在处理完毕后,直接返回刚刚被中断的进程

情况二:对于其他一些中断,要中断当前进程的运行,调整进程队列,启动进程调度,选择下一个执行的进程并恢复其执行

(1) 执行完每个指令后,CPU都要检查当前是否有外部中断信号。 (2) 如果检测到外部中断信号,则需要保护被中断进程的CPU环境(如程序状态字PSW、程序计数器、各种通用寄存器)。 (3) 根据中断信号类型转入相应的中断处理程序。 (4) 恢复进程的CPU环境并退出中断,返回原进程继续往下执行。



【中断屏蔽】


当计算机检测到中断时,中断装置通过中断屏蔽位决定是否响应已发生的中断有选择的响应中断

【中断优先级】


当计算机同时检测到多个中断时,中断装置响应中断的顺序有优先的的响应中断一种可能的处理次序
处理机硬件故障中断事件、自愿性中断事件、程序性中断事件、时钟中断等外部中断事件、输入输出中断事件、重启动和关机中断事件 不同类型的操作系统有不同的中断优先级

【中断的嵌套处理】


当计算机响应中断后,在中断处理过程中,可以再响应其他中断操作系统是性能攸关程序,且中断响应处理有硬件要求,考虑系统效率和实现代价问题,中断的嵌套处理应限制在一定层数内,如3层中断的嵌套处理改变中断处理次序,先响应的有可能后处理

【多中断的响应与处理】


决定中断处理次序的因素
中断屏蔽可以使中断装置不响应某些中断中断优先级决定了中断装置响应中断的次序中断可以嵌套处理,但嵌套的层数应有限制中断的嵌套处理改变了中断处理的次序

【多重中断处理-1】


X、Y两个中断同时发生先响应X因Y被屏蔽,继续处理X再响应并处理Y


【多重中断处理-2】


X、Y两个中断同时发生根据中断优先级,先响应X因未屏蔽Y,再响应并处理YY处理完成后,再处理X


1.2.5 中断、异常和系统异常区别
狭义的中断来源于处理器之外的中断事件,即与当前运行指令无关的中断事件,如I/O中断、时钟中断、外部信号中断等异常(来源于CPU内部的中断事件,和狭义共同构成广义的中断)指当前运行指令引起的中断事件,如地址异常、算术异常、处理器硬件故障等系统异常与硬件无关,系统异常指执行陷入指令而触发系统调用引起的中断事件,如请求设备、请求I/O、创建进程等
1.2.5 总结

(1) 中断是为了实现多道程序并发执行而引入的一种技术。 (2) 中断的本质就是发生中断时需要操作系统介入开展管理工作。 (3) 发生CPU会立即进入核心态,针对不同的中断信号,采取不同的处理方式。 (4) 中断是CPU从用户态进入核心态的唯一途径。 (5) 中断分为内中断和外中断。 (6) 进程中断时,操作系统会保存CPU的运行环境,如程序状态字(PSW)、程序计数器、各种通用寄存器,这是为了当进程再次运行时可以从中断的状态处继续运行。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41688840/article/details/112689490

随机推荐

Go语言学习

Go语言基础之环境安装及变量运行:gorunxxx.go(main函数)打包:gobuild用于测试编译包,在项目目录下生成可执行文件(有mai...

jose0925 阅读(558)

Max左 -Max右的最大绝对值问题

一、业务分析题1、Max左-Max右的最大绝对值问题,当有一个数组怎么划分这个数组才能使Max左-Max右的绝对值最大?解答:首先从题目中Max左和Max右可...

aiyang6666 阅读(216)

Linux第三天

2.1强大好用的SHELL通常来讲,计算机硬件是由运算器、控制器、存储器、输入/输出设备等共同组成的,而让各种硬件设备各司其职且又能协同运行的东西就是系统内核。Linux系...

qq_15129057 阅读(604)

使用注解开发

使用注解开发

注解在接口上实现底层主要应用反射publicinterfaceUserMapper{@Select("select*fromuser")List<UUser>get...

DBAA12138 阅读(486)

第九章 ERP实施

第九章ERP实施一、BPRbusinessprocessmanagement,企业流程管理,通过图形化的流程模型描绘和控制信息的交换记忆交易的发生,对商业伙伴...

zero静 阅读(401)

Simple to GRU

Simple to GRU

在学习GRU之前应该先学习LSTM的原理,因为GRU就是Lstm的变体,而GRU以轻便简洁的优势应用于更多的场合。原论文GRU结构和LSTM不同,GRU主要由...

shun-ripking 阅读(629)