您的位置:百味书屋 > 范文大全 > 经典范文 > 《计算机操作系统原理》课外实验报告 正文 本文移动端:《计算机操作系统原理》课外实验报告

《计算机操作系统原理》课外实验报告

2018-10-16 13:41:40 来源网站: 百味书屋

《计算机操作系统原理》课外实验报告

  设计思路和内容

  先用随机函数初始化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");

  int time1=1,time2=2,time3=3,time4=4;//设置每个就绪队列所分配到的时间片长度

  ready1=ready;

  finish=NULL;

  while(ready1!=NULL)

  {

  FirstIn_Demo1();

  PrintAll_MLFQ();

  for(int i=1;i<=time1;i++)

  {

  run->run_time+=1;

  if(run->all_time-run->run_time<=0) /*如所需时间为0将其插入完成队列*/

  {

  run->next=finish;

  finish=run;

  run->state='F'; /*置状态为完成态*/

  run=NULL;

  break;

  }

  if(i==time1&&run->all_time-run->run_time>0)

  LineInsert2(run);

  }

  }

  while(ready2!=NULL)

  {

  FirstIn_Demo2();

  PrintAll_MLFQ();

  for(int i=1;i<=time2;i++)

  {

  run->run_time+=1;

  if(run->all_time-run->run_time<=0) /*如所需时间为0将其插入完成队列*/

  {

  run->next=finish;

  finish=run;

  run->state='F'; /*置状态为完成态*/

  run=NULL;

  break;

  }

  if(i==time2&&run->all_time-run->run_time>0)

  LineInsert3(run);

  }

  }

  while(ready3!=NULL)

  {

  FirstIn_Demo3();

  PrintAll_MLFQ();

  for(int i=1;i<=time3;i++)

  {

  run->run_time+=1;

  if(run->all_time-run->run_time<=0) /*如所需时间为0将其插入完成队列*/

  {

  run->next=finish;

  finish=run;

  run->state='F'; /*置状态为完成态*/

  run=NULL;

  break;

  }

  if(i==time3&&run->all_time-run->run_time>0)

  LineInsert4(run);

  }

  }

  while(ready4!=NULL)

  {

  FirstIn_Demo4();

  PrintAll_MLFQ();

  run->run_time+=1;

  if(run->run_time-run->run_time<=0)

  {

  run->next=finish;

  finish=run;

  run->state='F';

  run=NULL;

  ready4=ready4->next;

  }

  }

  PrintAll_MLFQ();

  }


《计算机操作系统原理》课外实验报告》出自:百味书屋
链接地址:http://www.850500.com/news/183036.html
转载请保留,谢谢!
相关文章
  • 反射定律的应用

    光的反射定律及应用逍遥回中2010年物理复习教案第四章在光的世界里一 教学内容:1光的传播2光的反射定律二 重点、难点:1 理解光沿直线传播及其应用。2 认识光反射的规律,了...

  • 近视眼的成因及矫正原理

    近视的成因及矫正探究近视的成因及矫正探究摘要:随着社会发展,电子产品的普及,近视问题日渐严重,在我国的青少年中近视发病率已达50%-60%。近视不仅导致眼球突出,影响美观;视...

  • 政治必修四原理方法论

    政治必修四原理及方法论经典总结《生活与哲学》原理及方法论一、世界的物质统一性原理及方法论1、〖原理〗:辩证唯物主义认为,世界的本质是物质,世界上先有物质后有意识,物质决...

  • 真空相变加热炉使用维护规范

    真空相变加热炉使用维护规范真空相变加热炉使用维护规范1范围本规范规定了真空相变加热炉的使用维护规范。本规范适用于油田原油集输工艺中,加热介质为油、水及油水混合物的700kW...

  • 读恩格斯共产主义原理有感

    读《共产主义原理》有感读《共产主义原理》有感读《共产主义原理》有感余斌老师读原著在《共产主义原理》中恩格斯介绍了无产阶级在历史上的出现,比较了无产阶级与奴隶和农奴的差...

  • 网上评卷语文答题卡样卡

    网上评卷语文答题卡样卡湖南*实验中学2014-2015学年度第一学期期考七年级语文·答题卡二、阅读与鉴赏(41分)9 答:(2分)班级:________姓名:_______正确填涂注意事项:1 2 学...

  • 液压螺栓拉伸器原理

    液压螺栓拉伸器原理西安工业大学《制造工程师》实验班《普通型液压螺栓拉伸器》作业课题姓名:郭帆学号:110208106专业:机械设计制造及其自动化指导教师:丁峰日期:2014年12月1...

  • 自动控制原理选择填空

    自动控制原理选择填空(含答案)一、填空题(每空1分,共15分)1、反馈控制又称偏差控制,其控制作用是通过2、复合控制有两种基本形式:即按控制。3、自动控制:自动装置代替手动,...

  • 自动控制原理选择填空

    自动控制原理选择填空(含答案)一、填空题(每空1分,共15分)1、反馈控制又称偏差控制,其控制作用是通过2、复合控制有两种基本形式:即按控制。3、自动控制:自动装置代替手动,...

  • 什么是快速阅读—快速阅读的定

    快速阅读的原理及特点原理人的大脑分为左、右两大部分。左脑主要用来处理语言、逻辑、数字、文字等非图像化的信息。进行传统阅读时,主要使用左脑。而右脑主要是对图像进行记忆和...

推荐范文