中断机制
文章目录
中断机制
目的
目的: 1.硬件的中断响应—->内核驱动中的中断 2.系统调用的函数响应(sys ca11)–>系统调用 3.自定义中断—–>软件的软中断模式 4.信号中断(kil1-signalnum)—->对了解信号的使用创建等 5.系统的异常和错误—–》系统的异常获取了解系统异常的作用
- Linux的中断机制
- 分类:硬件中断软件中断
- 硬中断:由电脑主机的8259类似的硬件中断控制芯片发出的中断、 ARM中断控制器发出的中断
- 软中断:异常第一类:CPU自行保留的中断系统调用异常
- 分类:硬件中断软件中断
代码结构:
asm.s trap.c system_call.s fork.c signal.c exit.c sys.c
中断的工作流程: 1. 1 中断流程
- 做CPU工作模式的转化
- 进行寄存器的拷贝与压栈
- 设置中断异常向量表
- 保存正常运行的函数返回值
- 跳转到对应的中断服务函数上运行
1.2 linux 中的工作流程
- 将所有的寄存器值入栈, 8086
- 将异常码入栈 (中断号)
- 将当前行数返回值进行入栈,为了在中断执行后能够找到在哪里中断的,能够复原
- 调用对应的中断服务函数
- 出栈函数返回值
- 返回所有入栈的寄存器值
多道程序处理
-
cpu 有两类工作,处理 I/O ,(输入输出) 和进行计算
-
对于一个进程: $p=Io等待/进程在内存停留时间$
-
n个进程都在 I/o wait 的概率为 (cpu空转的概率 $p^n$
-
cpu 利用率为 $1-p^n$ ,简单理解为n是并行的进程数目
进程和线程
- 在进程中创造一种更加轻量的执行单位,他们共享进程的绝大部分信息,拥有独立的程序指针、堆栈、寄存器、状态字等。
线程切换过程
- 线程主动交出控制器 (yield), 或终止
- 保存信息(线程表)
- 本地选择另一个线程执行
|
|
互斥–屏蔽中断
屏蔽中断可以阻止进程切换,下面的打印临界区程序有问题,因为打印的时候,可能会被中断打断,导致程序出错 , 可以使用信号量来屏蔽中断
|
|
临界区
- 访问共享资源的程序片段
- 而资源并不能被同时使用(如打印机,打印机同一时间只能被一个人使用)
graph TB
进程1 --> a
进程2 --> b
a --> b1
a --> b2
b --> b2
b --> b3
b1 --> c1
b2 --> c1
b2 --> c4
b3 --> c4
style b2 fill:red
style b2 color:white
操作系统调度算法
- 调度问题应用广泛,不仅仅是操作系统领域
- yarn调度 hadoop 集群
- quartz调度任务
- spring调度请求响应
- React Fiber 调度绘制任务
- Apache Flink 调度作业
对于调度算法的理解
- 资源的稀缺
- 根据不同的场景找到最优解(类似于动态规划问题)
调度(关心什么?)
- 被调度任务的特征 (计算密集型 vs IO 密集型)
- 执行时机
- 新任务何时执行
- 任务临时终止如何选择下一个任务
- 任务阻塞如何选择下一个任务
- 发生中断时候(外部环境变化时) 如何响应
graph TB
运行 --> 就绪
就绪 --> 运行
运行 --> 阻塞
阻塞 -->就绪
kernel参考文章
其他笔记
[[post/03.基础学科/01.操作系统/1.进程和线程 | 进程和线程知识]]
[[post/14.新语言学习记录/linux/linux基础原理杂记/cpp语言使用/linux下 进程控制【fork】 |fork机制]]
文章作者 lyr
上次更新 2022-04-27