本文已参与「新人创作礼」活动,一起开启掘金创作之路。
这篇文章接收进程的上下文切换
上下文切换是对哪些内容?
进程的上下文切换不仅包含了虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的资源。
上下文切换是什么?
- 对原来运行进程各种数据的保存
- 对新的进程各种数据的恢复
触发上下文切换的场景:
- 调度(时间片or遇到优先级更高的进程)
- 进程在系统资源不足(比如内存不足)时,要等到资源满足后才可以运行,这个时候进程也会被挂起,并由系统调度其他进程运行;
- 运行sleep挂起,自然也会重新调度;
- 发生硬件中断时,CPU 上的进程会被中断挂起,转而执行内核中的中断服务程序;
进程调度算法
常见的调度算法如下:
- 先来先服务调度算法
- 最短作业优先调度算法
- 高响应比优先调度算法
- 时间片轮转调度算法
- 最高优先级调度算法
- 多级反馈队列调度算法
高响应比优先调度算法:
- 也叫【响应比】
多级反馈队列调度算法:
- 「多级」表示有多个队列,每个队列优先级从高到低,同时优先级越高时间片越短。
- 「反馈」表示如果有新的进程加入优先级高的队列时,立刻停止当前正在运行的进程,转而去运行优先级高的队列;
- 设置了多个队列,赋予每个队列不同的优先级,每个队列优先级从高到低,同时优先级越高时间片越短;
- 新的进程会被放入到第一级队列的末尾,按先来先服务的原则排队等待被调度,如果在第一级队列规定的时间片没运行完成,则将其转入到第二级队列的末尾,以此类推,直至完成;
- 只有当较高优先级的队列为空,才调度较低优先级的队列中的进程运行。如果进程运行时,有新进程进入较高优先级的队列,则停止当前运行的进程并将其移入到原队列的末尾,接着让较高优先级的进程运行;
该算法很好的兼顾了长短作业,同时有较好的响应时间。