Os学习笔记之处理机调度
首先搞清楚两个概念:作业(用户提交的任务)和进程(作业在处理过程中分成的活动单位)。作业调度是指选择哪一个作业分配资源建立作业对应的进程。
进程调度则确定进程何时取得处理机。
1.作业调度
1.1 作业状态
提交,后备,执行和完成状态。
1.2 作业调度功能
确定数据结构(分配JCB作业控制块)、确定调度算法(由作业调度程序完成)、分配资源(由进程调度程序完成)、善后处理
注:作业调度程序只保证被选中的作业具有使用处理机的资格,而具体的分配由进程调度程序完成
1.3 调度性能的衡量
平均周转时间:周转时间的平均值
平均带权周转时间:带权周转时间的平均值。周转时间和实际执行时间的平均值
1.4 作业调度算法
1) 先来先调度
2)短作业优先调度
3)响应比高者优先 (响应比=1+作业等待时间/执行时间)
4)优先调度算法 按照优先数
2.进程调度
进程调度可细分为调度和分派两个功能,调度负责将进程插入现有队列并且按一定原则保持队列结构。分派程序是将进程从就绪队列中移除并且
建立他的执行的机器状态。
2.1 进程调度的功能
1)记录和保持系统中所有进程的有关情况和状态特征(通过登记PCB控制块的信息)
进程进入就绪队列的排序原则体现了调度算法
2)决定分配策略
由队列排序原则体现
3)实施处理机的分配和回收
2.2 调度方式
抢占式和非剥夺
2.3 CPU受限制的进程和I/O受限制的进程
CPU受限制的进程多为计算量较大的进程,I/O消耗性的进程则为和用户互交性比较高的进程
2.4 进程优先数调度算法
Linux实现了基于动态优先级的方法,一开始,每个进程被设置默认的优先级(Nice值)。如果运行过程中在I/O等待上花费的时间多,说明是
I/O消耗型的进程,则优先级会被动态提高。
时间片是一个轮转调度中一个进程所获得的占用处理机 的时间片段,在一个进程的 时间片变为0时,其处理机的占用权会被抢占。
※下面简单介绍下Linux中优先数和时间片的计算:
调度程序中最基本的数据结构是运行队列。可执行队列是给定处理器上的可执行进程的链表,每个处理器一个。每个运行队列有两个优先级数
组。
一个过期的一个活跃的,在活跃的优先级数组中的进程的时间片全部用尽之后,就被接入过期的优先级数组中,当活跃的优先级数组中已经为空
的时候,就直接把活跃的优先级数组和过期的优先级数组交换。这样Linux的调度核心就是O(1)级的
在动态计算进程的 优先级的时候,Linux通过一个关于静态优先级和进程交互性的函数关系计算而来。交互性强的 程序会获得较多的优先级
奖励,而交互性弱的程序优先级则会比初始优先级低。
在Linux中,通过sleep_avg来记录进程的休眠和执行的时间,如果一个进程休眠时间长,sleep_avg↑,执行则↓。所以如果一个进程占用处
理 器时间大幅上升,则sleep_avg的值下降,要获得更大的优先级。
2.5 循环轮转调度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述