《计算机操作系统原理》课外实验报告
《计算机操作系统原理》课外实验报告
的多篇精编范文,供大家学习参考!设计思路和内容
先用随机函数初始化PCB结构体,从而模拟3个进程的特性,然后void ProInsert(PCB * p) /*优先数插入算法,将进程p按其优先级插入到就绪队列中相应位置*/、void PrintPCB(PCB *q)// 输出进程控制字信息、void PrintLine(PCB *head) /*输出以p为队首的队列中所有PCB信息*/、void PrintAll()//输出某一时刻进程队列信息、void FirstIn()/*将就绪队列中进程调入运行队列*/等函数体,实现进程调度过程中最基本的功能。在主函数中先调用void CreatePCB() /*随机产生n个进程,并对各个进程随机赋予初值*/,从而创建了就绪队列,为进程调度做好准备。而后void SP() /*静态优先级抢占式调度策略*/、void DP() /*动态优先级抢占式调度策略*/、void RR() /*时间片轮转调度策略*/等来分别实现静态优先级抢占式调度策略、动态优先级抢占式调度策略和时间片轮转调度策略三种功能。而最后的多级反馈调度策略实现因为与前三者有很大的不同,所以在同一cpp中我几乎是重新重构了所有的基本算法来帮助快速实现多级调度策略的。
首先,对于时间的复杂性,我在进程调度实验中忽略了运行队列(CPU处理器的模拟)处理程序是依据进程进入就绪队列的时间来调度的,所以1、静态优先级抢占式调度策略最基本的思想是循环将就绪队列中程序调入到运行队列中,再在运行队列中执行对进程的操作。2、动态优先级抢占式调度策略的基本思想是循环的调度就绪队列中进程程序,然后再运行队列中对进程的优先级进行动态的操作,如每执行一次进程,它的优先级就相应的减2.,如果没有运行完,就将其重新按照优先级重新插入到就绪队列中,从而模拟出调度返回这一操作。3、时间片轮转调度策略,我预先确定时间片的长度为2,在循环从就绪队列中调度进程时,在运行队列中将其执行2个时间点,若没有执行完,则重新插入。4、而对于多级队列调度策略,则首先建立PCB *ready1,*ready2,*ready3,*ready4;//多级调度队列策略时建立的四个就绪队列,再将这些就绪队列逐渐分别(从高优先级到低优先级就绪队列)“时间片轮转法”。最后输出运行、就绪队列1、就绪队列2、就绪队列3、就绪队列4、结束队列5个队列中进程。
我将进程随进入运行队列时间的影响与进程调度分开编写程序,进程阻塞实验来模拟进程进入CPU时,遇到阻塞情况下进入到阻塞队列中,从而简化了程序的书写。
以下是关于
核心数据结构设计和操作函数设计
的多篇精编范文,供大家学习参考!typedef struct node{
char name[10]; /*进程名*/
char ID; /*进程标识名*/
int priority; /*优先级*/
char state; /*进程状态标志*/
int in_time; /*进程进入CPU的时间*/
int all_time; /*进程需要的总时间*/
int run_time; /*进程已运行的时间*/
int block_time; /*进程被阻塞的时间点*/
int weak_time; /*进程被唤醒的时间点*/
int round; /*进程时间轮转时间片*/
struct node * next; /*下个PCB指针*/
}PCB; /*进程控制块结构字*/
PCB *run,*ready,*finish,*tail_r,*tail_f; /*队列指针,依次定义运行队列、就绪队列、结束队列*/
PCB *ready1,*ready2,*ready3,*ready4;//多级调度队列策略时建立的四个就绪队列
void SP() /*静态优先级抢占式调度策略*/
{
printf("现在开始静态优先级抢占式调度模拟\n\n");
finish=NULL;
while(ready!=NULL)
{
FirstIn();
PrintAll();
run->run_time+=1;
if(run->all_time-run->run_time<=0)
{
run->next=finish;
finish=run;
finish->state='F';
run=NULL;
}
else
ProInsert(run);
}
PrintAll();
}
void DP() /*动态优先级抢占式调度策略*/
{
printf("现在开始动态优先级抢占式调度模拟\n\n");
finish=NULL;
while(ready!=NULL)
{
FirstIn();
PrintAll();
run->run_time+=1;
run->priority-=2; /*每运行一次优先数降低2个单位*/
if(run->all_time-run->run_time<=0) /*如所需时间为0将其插入完成队列*/
{
run->next=finish;
finish=run;
run->state='F'; /*置状态为完成态*/
run=NULL; /*运行队列头指针为空*/
}
else /*没有运行完,则将其变为就绪态插入到就绪队列*/
ProInsert(run);
}
PrintAll();
}
void RR() /*时间片轮转调度策略*/
{
printf("现在开始时间片轮转调度策略\n\n");
int R_time=2;//时间片轮转调度法中时间为2
finish=NULL;
while(ready!=NULL)
{
FirstIn();
PrintAll();//就绪队列中进程进入到运行队列中后 队列的显示
for(int i=1;i<=R_time;i++)
{
run->run_time+=1;
run->priority-=1;
if(run->all_time-run->run_time<=0) /*如所需时间为0将其插入完成队列*/
{
run->next=finish;
finish=run;
run->state='F'; /*置状态为完成态*/
run=NULL;
break;
}
if(i==R_time&&run->all_time-run->run_time>0)
ProInsert(run);
}
}
PrintAll();
}
void MLFQ() /*多级反馈队列调度策略*/
{
printf("现在开始多级反馈队列调度策略模拟\n\n"); …… 此处隐藏:1024字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [经典范文]薪酬管理工作总结(优秀6篇)
- [经典范文]小学演讲稿【精选10篇】
- [经典范文]计算机专业实习报告 专业实践报告1500
- [经典范文]七年级思想品德教学计划(优秀7篇)
- [经典范文]海选比赛自我介绍
- [经典范文]初中英语比赛自我介绍
- [经典范文]新来的老师自我介绍
- [经典范文]初中美术老师自我介绍
- [经典范文]参加模特比赛自我介绍
- [经典范文]老师向幼儿自我介绍
- [经典范文]老师自我介绍经典范例
- [经典范文]高中政治老师自我介绍
- [经典范文]科任老师的自我介绍
- [经典范文]计算机老师的自我介绍
- [经典范文]销售房产面试自我介绍
- [经典范文]初中自我介绍400字
- [经典范文]新音乐教师的自我介绍
- [经典范文]应聘英语口语自我介绍
- [经典范文]大学英语自我介绍范本
- [经典范文]新老师向领导自我介绍
- 木材收购合同(共15篇)(木材收购需要
- 最标准的二手车买卖合同(精选6篇)(最
- 关于聘用教师的协议(整理15篇)(教师
- 产品销售协议范本(精选17篇)(产品合
- 描写桥的词语(精选6篇)(描写桥的词语
- 合同物流(精选11篇)(合同物流企业)
- 六年级语文下册第四单元测验题(锦集5
- 新年祝老师什么新春祝福语(精选16篇)
- 英语座右铭(锦集5篇)(经典英文座右铭
- 流动人口管理工作汇报(集锦17篇)(流
- 美食遇见诗词(共8篇)(美食遇见诗词)
- 河北省技术市场条例(推荐7篇)(河北省
- 形容一个人的伤感句子(精选4篇)(形容
- 婚假请假条模板(共12篇)(婚假请假条
- 广告策划书的撰写之国内的代表主张(通
- 五一劳动节美容院活动方案(精选18篇)
- 发挥个人简历的价值(精选11篇)(个人
- 形容娘俩感情好的句子(共4篇)(形容娘
- 初二学生上课睡觉检讨书(精选15篇)(
- 简短新婚祝词送朋友(锦集5篇)(简短新




