进程调度的基本过程

 一、什么是进程

进程就是跑起来的程序。

例:安装了qq,电脑上就多出了个 qq.exe 这样的可执行程序(或可执行文件),当双击运行 qq.exe 时,操作系统就会把可执行程序加载到内存中,并形成一个进程。

同时,进程是分配硬件资源的基本单位

二、进程的管理

1.先描述:使用 PCB ( 进程控制块 ,Process Control Block) 结构表示出进程的各种属性。

// 以下代码是 Java 代码的伪码形式,重在说明,无法直接运行
class PCB {
// 进程的唯一标识 —— pid;
// 进程关联的程序信息,例如哪个程序,加载到内存中的区域等
// 分配给该资源使用的各个资源
// 进度调度信息(留待下面讲解)
}

这样,每一个 PCB 对象,就代表着一个实实在在运行着的程序,也就是进程。

2.后组织:使用双向链表,把这些 PCB 结构给串起来。

所以,

创建一个进程,就是创建一个 PCB 结构,然后插入到链表;

销毁一个进程,就是直接从链表上删掉一个节点;

查看进程列表,就是对双向链表进行遍历。

PCB 中的比较重要的属性:

1.pid (进程标识符):

用来区分进程在同一时间点,同一台机器上,每个进程的pid都是不重复的。

2.内存指针 (进程持有的内存资源):

进程在运行时需要一定的内存资源,需要内存指针指出哪边用来存储指令,哪边用来存储代码,哪边存储数据,哪边存储临时结果。

3.文件描述符表 (进程持有的硬盘资源):

文件是硬盘的抽象表示,计算机操作硬盘是借助文件进行操作

4.状态、优先级、上下文、记账信息 (进程持有的 CPU 资源,用来完成“进程调度”)

三、进程的调度

为什么要对进程进行调度?怎么实现进程调度?

进程太多,cpu 核心数太少,就需要让这些进程轮番在 cpu 上执行。

通过 PCB 的状态、优先级、上下文、记账信息,来实现“进程调度”。

1.状态

就绪状态:这个进程随时可以去 cpu 上执行 或 这个进程正在 cpu 上执行。

阻塞状态:例如:控制台等待用户输入,用户不输入,程序就只有阻塞等待,直到用户输入

2.优先级

例如:打游戏和qq挂后台,优先给游戏分配更多运算资源,确保游戏不要卡顿,给qq分配相对少的资源,保证其能正常接收消息即可

3.上下文

跟游戏里存档、读档一样。

进程从 cpu 离开之前,需要保存现场,把当前cpu 中各种寄存器状态,都记录到内存中,等到下次进程回到 cpu 上执行的时候,就可以把保存的这些寄存器的值恢复回去,进程就会沿着上次执行到的位置,继续往后执行。

cpu 中有些寄存器没有特定含义,就只是用来保存运算的中间结果的,还有些寄存器,是有特定含义,特定作用的,比如:

1.保存当前执行到哪个指令的寄存器(程序计数器)

存的是一个2/4/8字节整数,这个整数表示的是一个内存地址(程序下一条要执行的指令所在的位置),这个值保存好,就能在下次进程恢复的时候,知道当前进程运行到哪一个指令,然后从上次运行位置继续往后执行。

例:qq.exe 这个可执行程序里面就包含了 指令 和 数据,把 qq.exe 运行起来,操作系统就会把指令和数据加载到内存中(产生内存地址),CPU 就会先从 内存 中取指令,然后再执行指令。每次取完一条指令,程序计数器的值就会自动更新,默认情况下,直接指向下一条(顺序执行),但是如果遇到 跳转类指令(jmp,jxmp,call...),就会被设置成跳转到的地址。

2.维护栈相关的寄存器

通过这一组(一般是两个)维护当前程序的“调用栈”。

比如:ebp 始终指向栈顶,esp 始终指向栈底(修改 esp 的值就可以实现“入栈” / “出栈” )

有了这个,才知道一个方法执行完毕之后,回到哪里执行

3.其他的通用寄存器

往往是用来保存计算的中间结果。

例:程序正在计算 10 + 20 + 30 + 40,假设在算完 10 + 20 之后,还没来得及算后面,进程调度走了,就需要把保存 10 + 20 的寄存器的值备份到上下文中,保证下次程序恢复之后,能找出刚才保存好的值,继续往下算 + 30。

4.记账信息

通过优先级机制,对不同的进程分配了不同权重的资源,但有可能会出现极端的情况,所有的资源都给某个进程,其他进程一点没捞着...

为了避免这种情况发生,就有了记账信息。

记账信息,会记录当前进程持有 cpu 的情况(在 cpu 执行多久了),作为操作系统调度进程的参考依据。

如果操作系统发现当前某个进程消耗的特别少,就会进行调整,避免出现极端的,某个进程一直不能执行导致卡死的情况。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值