进程调度的基本过程
- 🔎 进程是什么
- 🔎 进程管理
- 🔎 进程中结构体的属性
- 进程标识符(PID)
- 内存指针
- 文件描述符表
- 结构体中与进程调度相关的属性
- 进程的状态
- 进程的优先级
- 进程的上下文
- 进程的记账信息
- 🔎 总结
- 🔎 结尾
🔎 进程是什么
通过任务管理器
我们看到运行着的程序就是进程
在操作系统内部, 进程是操作系统进行资源分配的基本单位
🔎 进程管理
当进程过多时,需要对进程进行管理
进程管理包括两部分
(1)描述一个进程: 使用结构体, 把一个进程有哪些信息表示出来
(2)组织这些进程: 使用一定的数据结构, 把这些结构体组织起来
举个栗子🥝
一个学校, 有很多的学生
学生太多了如果不进行管理, 就容易产生一定的问题(打架, 逃课…)
于是就有了学生管理系统(进程管理)
学生管理系统包括两部分
(1)明确每个学生的相关信息(学号, 年龄, 性别…)
使用结构体, 把一个进程有哪些信息表示出来
(2)通过一定的数据结构, 将学生的信息组织起来(便于管理)
使用一定的数据结构, 把这些结构体组织起来
🔎 进程中结构体的属性
进程中的结构体, 简称PCB (process control block)
PCB 包括的属性较多, 以下列举几个较为重要的属性
进程标识符(PID)
进程标识符(PID)是每个进程的一个唯一的身份标识
操作系统里每打开一个程序都会创建一个进程ID,即PID
类似于每个人的身份证
内存指针
当前进程使用的内存是哪一部分
进程要运行, 就需要消耗一定的硬件资源, 比如内存
内存指针就是标识当前进程使用了哪一部分的内存
文件描述符表
文件: 硬盘上存储的数据, 通常是以文件为单位进行组织的
进程每打开一个文件, 就会产生一个文件描述符, 标识了这个被打开的文件
一个进程可能会打开多个文件, 就会产生多个文件描述符
把这些文件描述符整合到一定的数据结构里, 就构成了文件描述符表
结构体中与进程调度相关的属性
我们先来看一个栗子为下面的描述做铺垫
举个栗子🥝
滑稽老哥是个很有魅力的男人
他交往了三个女朋友
A: 有钱的
B: 漂亮的
C: 舔狗
每周一, 三, 五去和女朋友A约会
每周二, 四去和女朋友B约会
每周六去和女朋友C约会
每周日自己休息一天
进程的状态
就绪态
该进程随时可以上 cpu 执行
阻塞态
该进程暂时无法上 cpu 执行
解释
有一天女朋友A跟滑稽说她要出国一个月去处理公司上的业务
那么在这一个月内, 滑稽老哥就不能与A约会
此时的A就是阻塞态
虽然不能和A进行约会, 但是仍然能和女朋友B, C约会
此时的B, C就是就绪态
进程的优先级
进程之间的调度不一定是公平的, 有的进程需要优先调度
解释
滑稽老哥虽然是个有魅力的男人
但是他没有太多钱
所以他需要把一周的周一, 三, 五去和女朋友A(有钱的)约会, 这样他就不用花自己的钱
而一周的周二, 四去和女朋友B(漂亮的)约会,因为滑稽老哥喜欢漂亮的女生
最后把一周的周六拿来和女朋友C(舔狗)约会, 滑稽老哥也需要有人来关心, 照顾
针对上述描述
进程的调度不一定是公平的(A > B > C)
进程的上下文
上下文, 就是描述当前进程执行到哪里的"存档"
进程离开 CPU 时, 需要把当前运行的结果记录下来
等到下次该进程重新回到 CPU 上, 再根据之前的"存档", 继续向下执行
注意
当进程结束运行时, 就不再需要存档
解释
滑稽老哥由于同时交往了三个女朋友
每天都需要消耗大量的精力来面对
有时候在和女朋友A聊天时, 无意间说成了与女朋友B或C在一起发生的事情
这样就会露馅了
于是聪明的滑稽老哥每天都会将自己当天所发生的事情做一个简单的记录
这样当他面对不同的女朋友时, 便会很快的回忆起之前经历的事情
进程的记账信息
统计每个进程在 CPU 上执行的的时间
以此作为调度的参考依据
解释
由于滑稽老哥每次都只留一天给女朋友C
时间久了之后, C难免会有些生气
这时候滑稽老哥发现C很久不联系他了, 就会查找原因(看之前记录的约会信息)
发现是自己每周陪伴C的时间太短了
于是滑稽老哥最近就会多陪伴C
🔎 总结
🔎 结尾
创作不易,如果对您有帮助,希望您能点个免费的赞👍
大家有什么不太理解的,可以私信或者评论区留言,一起加油