进程调度

来源:互联网 发布:mac 命令行 删除软件 编辑:程序博客网 时间:2024/05/29 01:55

状态转换图
运行 受阻 就绪
进程调度是处理机管理中的主要工作之一
处理机管理是对CPU资源进行合理的分配使用
以提高处理机利用率,并使各用户公平地得到处理机资源,

小测:第8,9周 进程模型

灰色阶段:进程调度的耗费
进程切换:外部中断与时钟中断
调度程序本身不是进程,当某个事件发生时启用,是事件触发的
exit请求:系统调用,表达进程的退出意愿,进程申请的。发生了一个软中断,即陷入模式,INT trap指令 同步事件 sleep pause 自己引起的状态发生变化

外部的与执行异步的事件:没办法预料到来,不能预测 IO中断,时钟中断
同步事件:等待事件发生

策略与机制(大部分由硬件支持,如时间脉冲)::

最基本的策略 :

调度算法的考量:公平、优先(系统进程)、有限、响应时间、周转时间、吞吐量、均衡性、可预测性、meeting deadlines

Batch system :批处理系统 和用户交互不多
Interactive systems : 交互式系统,考虑到用户的感受
Realtime system:实时系统,调度系统和时间比较敏感
CPU密集:科学运算
IO密集
混合:shell命令解释器
实时

非抢占与抢占
FCFS 先来先服务 非抢占
就绪进程队列:放弃CPU资源为自愿的。 最基本的策略

时间片轮转:抢占型
所有进程排队,每个进程被分配一个相等的时间段(时间片)轮流占用CPU
如果在时间片结束时进程还在运行,则CPU将被剥夺,并分配给另一个进程
如果进程在时间片结束前阻塞或结束,则CPU当即进行切换
时钟中断:间隔时间固定,
确定时间片的长度:太长:周转慢,并发效果不好;太短:进程切换的系统开销大;结论:100-200ms
进程切换频繁,调进的资源,是热的。
进程平均周转时间=进程运行时间的总和/总的进程数
8+6+8+2
8+14+22+24=68 平均周转时间:17
对CPU密集型不是最优的,不时间片轮转:10+2+8+4 只要24

优先级调度
给不同类型的进程赋予不同级别的优先级
调度算法总是选优先级高的进程占用CPU

优先级低进程的饥饿问题
在低优先级进程排队时间长了,动态优先级,提高优先级补偿
在时间片环境下如何实现优先级
静态优先权法:用户进程低
动态优先权法
设定优先级的高低所考虑的因素:
占CPU时间短,较底层的进程优先级应该搞
IO密集型
高优先级进程运行一段时间后,其优先级可适当下降

UNIX进程调用的原则:
1.核心态下运行的进程不作强行切换
按进程优先数来动态计算进程的优先级。
进程的优先数 P_pri:
P_pri=min{127,(P_cpu/16+P_user+p_nice)}
占用CPU时间,进程的固定常量,用户设定的值

组合:优先级+时间片

多重队列调度:

最短进程优先算法:非抢占
非抢占型调度:
原则:选择最短的作业占用CPU
目的:缩短进程的平均运行时间

保证算法。。。

实时算法:
快速响应中断
抢占型的
快速上下文切换,灰色时间要小
硬实时和软实时

9状态图小测要考!!进程的内存管理;运行,用户态和内核态运行;内核态才能处理中断。单向线为什么没有反过来的??

两级调度法:
一般情况下正在运行的进程都在内存中。如果没有足够的内存,则某些进程的进程图将全部或部分地放在磁盘上。
就绪的,在内存中的。 低级调度—— 高级调度(磁盘与内存间的转移) 两者同时发生的。
将BLOCK的进程扔到磁盘上。

第二章的作业:::?????

用户级线程: 线程调度由库函数中的运行时系统完成
进程内部采用轮转或优先级调度(无中断控制)
挑线程来运行,运行时系统
时间片轮转:时钟
优先级抢占:IO设备的中断
用户级底下的程序有限制
被抢占: 就绪状态
运行不下去:申请BLOCK,down,pop信号量
调查:如何进入BLOCK状态

信号与信号量的分别:
中断的实现 :汇编语言相关
信号:C 指针 存储访问出错 野指针
A ——>B 单步执行 ,执行控制都和信号有关系
ctrl+C
alarm() 周而复始的闹钟 >>>>>…
与主流逻辑分开,主流与支流分开。
机制:系统和进程之间通信。异步事件的发生,都和信号有关系。
信号是有某些事件产生的
这些事件的发生时不可预见的
利用信号可以处理异步事件
他也可以作为进程间通信的一种方法
捕获信号 非捕获信号 : kill
信号的种类
trap是软中断指令 会保存当前现场
同步、异步:同步:等一等 异步:进程与信号来源没有相关性
信号在进程中如何切换到信号函数
信号的捕获;忽略;中止本操作
信号的各种状态:pending挂起,blocking屏蔽,masking signal有条件的屏蔽
与信号相关的系统调用
信号的注册:系统调用 signal()
kill()
pause()将本进程挂起,等待下一个信号的到来

0 0
原创粉丝点击