携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第N天,点击查看活动详情 >>
flowchart LR;
操作系统 --> 内核态和用户态;
操作系统 --> 中断;
中断 --> 软中断;
软中断 --> 软中断是什么;
软中断 --> 有哪些软中断;
中断 --> 中断是什么;
内核态 和 用户态
什么是内核
内核作为应用链接硬件设备的桥梁,相当于我们的 应用 → 内核 → 硬件;
内核的四大能力
- 进程(线程)管理和调度
- 内存的分配和回收
- 管理硬件设备,提供硬件和软件的通讯
- 提供系统调用的接口 (个人感觉和第三项会有重叠的部分)
内核空间 和 用户空间
操作系统把内存分成了两个区域:
- 内核空间,这个内存空间只有内核程序可以访问,内核程序可以访问 整个内存空间
- 用户空间,这个空间专门被应用程序使用,用户空间的应用程序只可以访问一个局部的内存
所以所谓的用户态和内核态,只是说操作系统在执行内核空间的代码 / 执行用户空间的代码
为什么要区分内核态和用户态
- 安全性:防止用户程序恶意或者不小心破坏系统/内存/硬件资源;
- 易用性:用户程序不需要实现更加底层的代码;
- 调度性能:如果多个用户程序都在等待键盘输入,这时就需要进行调度;统一交给操作系统调度更加方便。
用户态如何切换到内核态
其实本质上就是去要去执行一些存放在内核空间的代码
- 系统调用:用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现。
- 异常:当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。
- 中断:当硬件设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序
中断是什么
- 中断是操作系统从用户态转化成内核态的触发机制
flowchart LR;
用户程序 --> 调用操作系统API -- 中断 --> 执行系统调用 -- 中断 --> 返回结果 --> 继续用户程序;
- 中断是系统用来响应硬件设备请求的一种机制,操作系统收到硬件的中断请求,会打断正在执行的进程,然后调用内核中的中断程序来响应请求。
因为是中断了其他的进程,所以我们希望这个中断程序的花费的时间尽可能少。
- 中断时间太长,会影响其他进程调用
- 中断时间太长,会影响其他硬件的中断请求
软中断
为了解决 中断处理程序执行过长 和 中断丢失的问题,将中断过程分成两个阶段
- 上半部用来快速处理中断,它在中断禁止(解决中断丢失的问题)模式下运行,主要处理跟硬件紧密相关的或时间敏感的工作,也就是所谓的硬中断,要求快速执行。
- 下半部用来延迟处理上半部未完成的工作,通常以内核线程的方式运行,解决中断时间不能太长的问题,也就是所谓的软中断,可以慢一点执行~。
有哪些软中断 :网络接受中断、网络发送中断、定时中断、RCU中断、内核调度中断