操作系统 李治军 进程与线程(三:CPU调度--信号量的引入)

进程与线程

L14 CPU调度策略

在这里插入图片描述
就是next下面一个进程到底是谁
在这里插入图片描述
在这里插入图片描述
操作系统在调度的时候,关键是折中,需要综合考虑。
响应时间小,是切换次数多,是因为要很快切回来。切换时间就是内耗,内耗大,吞吐量就小。
在这里插入图片描述
IO约束型就是word类似的,就是一直需要IO
CPU约束就是GCC MATLAB计算类的
IO优先级较高,是因为往往是前台任务,和用户有交互。然后也可以实现并行计算。但是CPU约束性高的话,CPU一直运行,IO无法运行。
在这里插入图片描述
在这里插入图片描述
短作业优先
在这里插入图片描述
短作业优先,是周转时间最短
因为p1乘数最多,所以总时间小
在这里插入图片描述
时间片小,切换次数多,吞吐量就小。
在这里插入图片描述
只要有前台任务,就不执行后面的。前台轮转调度,后面短作业调度,这就是优先级调度。产生饥饿
在这里插入图片描述
轮转调度为核心,又要保证前台优先级。
在这里插入图片描述
需要不断的调整优先级。

L15 一个实际的schedule函数

在这里插入图片描述
在这里插入图片描述
counter就是优先级。counter也是时间片轮转。两个调度使用一个变量,核心是如何修改counter。
在这里插入图片描述
阻塞态回复就绪的counter大,比直接等待转就绪的大。
do_timer时钟中断
在这里插入图片描述
在这里插入图片描述
IO长时间不做的,阻塞时间越长,优先级就越高。具有IO特征的优先级就高。
在这里插入图片描述
每个进程最长也就是2P,保证了边界。
在这里插入图片描述

L16 进程同步与信号量

在这里插入图片描述
多进程同步就是进程之间的合作变得合理有序,是通过信号量实现进程的同步。
在这里插入图片描述
从信号到信号量是一个很大的进步,
在这里插入图片描述
等待是进程图的核心,阻堵塞在这里插入图片描述
在这里插入图片描述
停是更重要的
在这里插入图片描述
只发信号还是不可以的,因为信号表达的内容不够丰富。
上面的解释应该是就像传热,只有换热表面换热大,也就是两边热阻很大。信号没有深入到内部。
一个counter无法表达到底几个生产者
在这里插入图片描述
不能只记录睡眠和唤醒。
缺一个变成-1,又缺一个,sem表示有两个进程等待了
在这里插入图片描述
根据信号量决定是否喊醒,信号只能表达0 1
为什么不用counter作为信号量?用大于小于之类的判断,这就有点像counter+sem,可能这样就不方便了。
在这里插入图片描述
等待队列
在这里插入图片描述
在这里插入图片描述
p,v是系统调用。这边都是生产,但是没有考虑消费边界的问题。

empty是空闲缓冲区数量。full表示可消费的内容个数。
P是test测试的意思,V是增加。
mutex互斥信号量,就是表示一次只能一个人用。要么是一个生产,要么一个消费。
在这里插入图片描述
这个互斥有点像一个厕所 上面显示有人没人。
类比:
3个厨师,3个消费者。
厨师上菜,首先看有没有空位置(empty)
然后呢看有没有人在吃
接着上菜呢要先通知大家我在上菜,不要吃,也不要上菜(full菜的个数)
然后我上菜

P是看看要不要这个状态的东西要阻塞等待
V是起到唤醒作用,唤醒肯定是唤醒对面的。所以v()括号里的是和所在进程合作的另一个进程的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值