网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
优先级调度算法介绍
优先级调度算法既可以用于作业调度,又可以用于进程调度。该算法中的优先级用于描述作业或者进程的紧迫程度,主要思想是每次选取优先级最高的进程或者作业,将资源或者处理机分配给它使用。
两种情况
- 在作业调度中,优先级调度算法每次从后备作业队列中选择优先级最高的一个或者几个作业,将它们存入调入内存,分配必要的资源,创建进程并放入就绪队列。
- 在进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。
调度算法分类
根据新的更高优先级进程能否抢占正在执行的进程,可将该调度算法分为两类:
1)非抢占式优先级调度算法
当一个进程正在处理机上运行时,即使有某个优先级更高的进程进入就绪队列,仍让正在执行的进程继续执行下去,直到因为其自身的原因(任务完成或者发生等待事件),这才把处理机的使用权分配给其它优先级更高的进程
2)抢占式优先级调度算法
顾名思义,当有一个优先级更高的进程进入就绪队列时,立即暂停正在执行的进程,将处理机的使用权分配给优先级更高的进程,等其执行完毕方可继续执行本进程
优先级分类
根据进程创建后其优先级是否可以改变,可以将进程优先级分为一下两类:
1)静态优先级
优先级是在创建进程时就已经被确定的,且在进程运行的整个期间保持不变。主要根据进程类型、进程对资源的要求、用户的要求来确定静态优先级
2)动态优先级
在进程的运行过程中,根据进程情况的变化动态调整优先级。主要根据进程占有CPU时间的长短、就绪进程等待CPU时间的长短来确定动态优先级
实验内容与要求
进程是操作系统最重要的概念之一,进程调度是操作系统内核的重要功能,本实验要求用C语言编写一个进程调度模拟程序,使用优先级或时间片轮转法实现进程调度。本实验可加深对进程调度算法的理解。实验内容如下:
- 设计有5个进程并发执行的模拟调度程序,每个程序由一个PCB表示。
- 模拟调度程序可选择优先级调度算法或者时间片轮转调度算法
- 程序执行中应能在屏幕上显示出各进程的状态变化
- 使用C/C++语言进行模拟
实验步骤
调度算法总流程图
优先级调度算法流程图
实验代码
进程控制块PCB结构体如下:
typedef struct pcb{
int id;//进程的ID
int prior;//进程的优先级,允许为负,规定:-20表示进程已完成
int used;//已经使用的时间片
int need;//还需要的时间片
char status;//进程的状态 R,J,F分别表示进程正在运行、进程就绪、进程完成
}PCB;
完整代码:
/*
操作系统,进程调度算法的模拟
按照优先级算法进行进程调度
*/
#include"stdio.h"
#include"conio.h"
#include"stdlib.h"
#include<ctime>
//定义进程控制块PCB的结构体
typedef struct pcb{
![img](https://img-blog.csdnimg.cn/img_convert/f94f90429b5594f81d44f3a9822ae6b6.png)
![img](https://img-blog.csdnimg.cn/img_convert/55b8fb5e960a227c65e3f66098341daa.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**