计算机操作系统之调度算法
来源:互联网 发布:ubuntu终端常用命令 编辑:程序博客网 时间:2024/05/12 22:30
在多道程序环境中,内存中存在多个进程,数目往往多于处理机数目。这就要要求系统按照某种算法动态的将处理机分配给在就绪队列中等待的进程。
分配处理机的任务是由处理机调度程序完成的。处理机调度性能的好坏决定了大型系统运行时的性能。所以,处理机调度是操作系统至关重要的一部分。进程调度是处理机调度必不可少的一种调度。
》 处理机调度算法有几个共同的目标:
1.资源利用率:即CPU利用率
2.公平性:即诸进程都获得合理的CPU时间
3.平衡性:即对于不同类型的进程,保持系统资源的平衡性
4.策略强制执行:字面意思,对于某些策略(例如安全策略)应强制执行
》 进程调度的任务有三个:
1.保存处理机的现场信息
2.按照某种算法选取进程
3.把处理机分配给进程
接下来我们由进程调度的方式引入我们要着重分析的进程调度算法
》 进程调度有两种方式:非抢占方式:进程可以拥有处理机直至进程结束; 抢占方式:调度程序根据某种原则暂停某一个正在运行的进程把处理机分配给另一个进程。("抢占")
“抢占”也遵循了一定原则:1.优先权原则:某一进程优先级高则会先执行
2.短进程优先:短进程可以抢占当前长进程的处理机
3.时间片原则:进程按照时间片原则运行
》进程调度算法
一:时间片轮转法(RR)
原理:系统将所有就绪进程按FCFS(先来先服务算法)策略排成一个就绪队列,系统设定每隔一定时间进行一次中断,来激活进程调度程序来调度,把CPU分配给队首进程,进程只能执行一个时间片,运行结束后,把处理机分配给新的队首开始一个新的时间片。保证就绪队列的所有进程在一定的时间段内都能获得一个时间片的处理机时间。
进程切换中有两种情况:1.一个时间片未完进程已经运行结束:此时就立刻激活处理机调度程序,将结束的进程删除,再调度就绪队列中队首进程,开启一个新的时间片。 2.时间片已将结束进程未执行完:在时间片结束时就立刻激活处理机调度程序,,将未结束的进程送往就绪队列队尾。
时间片大小的设定对系统性能有很大的影响。时间片太短会导致过多的进程切换,时间片太长可能会引起对短作业的交互请求响应变差。
二、优先级调度算法
原理:把处理机分配给优先级较高的进程:1.非抢占式:若进程得到处理机则一直进行下去直到结束或者因为某事件而放弃处理机。2.抢占方式:将处理机分配给优先级较高的进程,若出现优先级更高的进程则将处理机分配给优先级高的进程。
优先级类型:特点:简单易行,系统开销小,但不够精确
$ 静态优先级:进程创建时即确定,并保持不变,有某一范围的整数来表示,整数称为优先数,确定进程优先级大小的依据有三个:1.进程类型:通常系统类型进程优先级高于一般用户进程; 2.进程对资源的需求:对资源要求少的进程优先级高;3.用户要求:根据用户要求确定优先级。
$动态优先级:进程创建初期先赋予一个优先级,随着进程的推进或等待时间的增加而改变。可以防止一个长作业长期垄断处理机。
三、多队列调度算法:可以满足系统不同用户对进程调度策略的不同要求
原理:将就绪队列拆分为若干个按类型和性质进行区分放在不同队列里,各个就绪队列可以采用不同的调度算法。
不仅对每个处理机的调度可以实施不同的调度算法,对于一个含有多线程的进程也可以根据要求将线程分配在一个就绪队列然后再一个处理机上工作。
四、多级反馈队列:不用知道进程执行时间,可以解决某些进程无法使用短作业优先和基于进程长度的抢占式调度算法的问题。
原理:$调度机制:
1.设置多个就绪队列:每个队列赋予不同的优先级,不同队列的进程所赋予的时间片大小也不同,优先级越高,则时间片越小。
2.每个队列使用FCFS算法:一个进程若能在其所在队列时间片内完成即可撤销,否则将其转入第二队列的末尾等待调度依次类推,在n队列中就采用RR方式运行。
3.按队列优先级调度:首先调度优先级最高的队列里的诸进程仅当第一队列空闲时才调度第二队列里的进程。若又有新进程进入任一优先级较高的队列,则把正在运行的进程放到第i队队尾,运行优先级高的进程。
$调度算法的性能:
如果规定的第一队列的时间片略大于人机交互所需处理的时间时就能很好的满足各类用户的需要。
1.终端性用户:由于终端性用户提交的作业多属于交互性作业,通常较小。
2.段批处理作业用户:如果能在第一队列中执行完成,即可获得与终端性作业一样的响应时间。稍长的作业也可在第二或第三队列周转时间也很短。
3.长批处理用户作业:可以依次在第1,2,3....n个队列中运行,然后再按轮转方式运行。
五、基于公平原则的调度算法:考虑调度的公平性,保证每个进程都获得相同的处理机时间1/n
原理:
$保证调度算法:对用户做出性能保证,一种较容易实现的保证是保证处理机分配的公平性,则必须具有这样一些功能:
1.跟踪计算每个进程自创建以来已经执行的处理时间。
2.计算每个进程应获得的处理及时间,自创建以来时间除以n
3.计算进程获得处理机的比率,即进程实际执行的处理时间和应获得的处理机时间之比
4.比较各个进程获得处理机时间的比率
5.调度程序选择比率最小的进程将处理机分配给它,知道超过最接近他的进程比率为止
$公平分享调度算法:考虑每个用户所拥有的进程数目,若用户拥有进程数差距很大,则用户拥有处理机不公平。采用强制调度序列就可以解决。
- 计算机操作系统之调度算法
- 操作系统之调度算法
- 计算机操作系统-进程的调度算法
- 操作系统之磁盘调度算法
- 操作系统之典型调度算法
- 计算机操作系统之处理机调度与死锁
- 将计算机思维故事化——之操作系统典型调度算法
- 操作系统算法 之 SCAN磁盘调度算法
- 计算机操作系统磁盘调度
- 计算机操作系统中常用的调度算法总结
- 计算机操作系统的进程调度的五种算法
- 计算机操作系统实验:作业调度算法的实现
- 操作系统实验三之进程调度算法
- 操作系统实验之作业调度算法
- 操作系统算法 之 进程调度(FCFS)
- 计算机操作系统之CPU调度、死锁(五)
- 【计算机操作系统】操作系统--时间片轮转(RR)进程调度算法
- 操作系统调度算法
- JAVA模拟内存分配与释放——首次适应算法
- hibernate的懒加载得到的代理对象里面有什么
- 项目实践:文件操作处理
- PPT常见问题及对策
- 使用 Matrix控制图片的变换
- 计算机操作系统之调度算法
- ReactJS学习系列课程(React Http网络数据读取)
- 手把手教你用java实现邮件发送及常见问题解决
- AndroidStudio初始化adb失败,无法显示Genymotion模拟器设备解决方法
- 互斥锁与条件变量的配合!
- ReactJS学习系列课程(React ref的使用)
- UITableView在Plain类型下,HeaderView和FooterView不悬浮和不停留的方法
- 虚拟机安装centos 7
- c++中指向类数据成员的指针