进程管理模拟程序设计总结时间片(进程调度模拟程序)

2024-07-03 01:50:00 8

进程管理模拟程序设计总结时间片(进程调度模拟程序)

本文目录

进程调度模拟程序

这几个题是我这学期的操作系统实验里面,变了两个月才弄出来的,现在跟你分享一下(运行过了 没问题的)

先来先服务:c语言编写的

#include 《stdio.h》

#include 《malloc.h》

typedef struct jinchen  //定义结构体

{

 char name;

 int tijiaoshijian;

 int reachtime;

 int runtime;

 int beirun;

 int accomplishtime;

 char state;

 int flag;

 struct jinchen *next;

}PCB;

PCB *finish,*ready;//定义队列 一个完成一个就绪

int time=0;

int t=0;

int num;

void InitPcb()    //进程初始化

{

 int i,j=0;

 PCB *p,*q,*l,*m,*k,*n;

 printf("请输入进程个数:");

 scanf("%d",&num);

 ready=(PCB *)malloc(sizeof(PCB));

 ready-》next=NULL;

 finish=(PCB *)malloc(sizeof(PCB));

 finish-》next=NULL;

 l=(PCB *)malloc(sizeof(PCB));

 l-》next=NULL;

 p=l;

 for(i=0;i《num;i++)

 {

  q=(PCB *)malloc(sizeof(PCB));

  printf("\n进程号 %d:\n",i);

  printf("请输入进程名:");

  scanf("%s",q-》name);

  q-》reachtime=0;

  printf("请输入提交时间:");

  scanf("%d",&(q-》tijiaoshijian));

  printf("请输入运行时间:");

  scanf("%d",&(q-》runtime));

  q-》beirun=q-》runtime;

  q-》state=’R’;

  q-》flag=0;

  if(i!=0)       //链接就绪进程

  {

   //q-》next=NULL;

   q-》next=p-》next;

   p-》next=q;

   p=p-》next;

  }

  else    //第一个进程插入就绪队列

  {

   p-》next=q;

   p=p-》next;

   p-》next=NULL;

   

  }

 }

 p=l-》next;

 k=ready;

 for(i=0;i《num;i++)   //按照提交时间排序

 {

     q=l-》next;

  t=1000;

  while(q!=NULL)

  {

   if(q-》tijiaoshijian《t&&q-》flag==0)

   {

    t=q-》tijiaoshijian;

    m=(PCB *)malloc(sizeof(PCB));

    m-》next=NULL;

    m-》accomplishtime=q-》accomplishtime;

    m-》beirun=q-》beirun;

    m-》flag=q-》flag;

    for(j=0;j《5;j++)

    m-》name;

    m-》reachtime=q-》reachtime;

    m-》runtime=q-》runtime;

    m-》state=q-》state;

    m-》tijiaoshijian=q-》tijiaoshijian;

    n=q;

   }

  

  q=q-》next; 

  }

  p=p-》next;

  n-》flag=1;

  m-》flag=1;

  k-》next=m;

  k=k-》next;

 }

 k-》next=NULL;

}

void display()   //函数作用:计算和显示相关输出

{

 PCB *p;

 int m,n=0,k=0,l;

 p=finish-》next;

 while(p!=NULL)

 {

  

  printf("进程名 :%s",p-》name);

  m=p-》accomplishtime-p-》tijiaoshijian;

  printf("周转时间:%d",m);

  l=m/(p-》beirun);

  printf("带权周转时间:%d",l);

  printf("\n");

  n=m+n;

  k=l+k;

  p=p-》next;

 }

 printf("平均周转时间:%d\n",n/num);

 printf("平均带权周转时间:%d\n",k/num);

}

void Use()//进程调用

{

 int j;

 PCB *p=ready-》next,*k=ready,*q,*n=finish;

 while(k-》next!=NULL)

 {

  p=ready-》next;

  for(j=0;j《num&&p!=NULL;j++)

  { 

   time++;

   //printf("%d\n\n",++t);

   if(p-》reachtime==0) 

    p-》reachtime=time;

   if(p-》state!=’C’)

    {

     printf("正在运行:%s\n",p-》name);

     p-》runtime--;

     if(p-》runtime!=0)    //进程没有运行完,放入队列最后

     {

      q=p;

      while(q-》next!=NULL)

       q=q-》next;

      ready-》next=p-》next;

      q-》next=p;

      p=ready-》next;

      q=q-》next;

      q-》next=NULL;

     }

     else    //进程运行完,放入完成队列

     {

      p-》state=’C’;

      printf("%s进程完成\n",p-》name);

      p-》accomplishtime=time;

      n-》next=p;

      n=p;

      ready-》next=p-》next;

      p-》next=NULL;

       

     }

    }

  }

 }

}

int main()

{

 PCB *p;

 InitPcb();

 Use();

 display();

 p=finish-》next;

 printf("运行完毕!*说明:已运行完成的进程放入完成队列,未运行完成的进程放在队列最后");

}

运行结果见图

按最高优先级算法:C++程序

#include 《stdio.h》

#include 《stdlib.h》

#include 《conio.h》

#define getpch(type) (type*)malloc(sizeof(type))  

struct pcb{           

 char name;    

 char state;       

 int super;        

 int needtime; 

 int rtime;

 int tijiaotime;  

    int starttime;  

    int ftime; 

    int zztime;

    int dzztime;

 struct pcb* link;    

}*ready=NULL, *p;

typedef struct pcb PCB;   

float pzztime=0;

float pdzztime=0;

int n;

int time=20;

void sort()           

{

 PCB *first, *second;   

 int insert=0;                                     

 if((ready==NULL)||((p-》super)《(ready-》super)))    

 {     

  p-》link=ready;                                

  ready=p;

 }

 else   

 {

  first=ready;          

  second=first-》link;    

  while(second!=NULL)

  {

   if((p-》super)《(second-》super)) 

   {

    p-》link=second;

    first-》link=p;

    second=NULL;

    insert=1;        

   }

   else

   {

    first=first-》link;     

    second=second-》link;  

   }

  }

  if(insert==0) first-》link=p; 

 }

}

void input()              

{

 int i;

 PCB *q;

 printf("请输入进程数:");

 scanf("%d",&n);

 for(i=0;i《n;i++)

 {

  printf("\n第%d个进程:\n",i);

  p=getpch(struct pcb);

  printf("\n 进程名:");

   scanf("%s",&p-》name);

  printf("\n 优先级:");

  scanf("%d",&p-》super);

  printf("\n 运行时间:");

  scanf("%d",&p-》needtime);

  printf("\n提交时间:");

  scanf("%d",&p-》tijiaotime);

  p-》rtime=0;

  p-》state=’R’;     

  p-》link=NULL;  

  

 sort();

 }

 q=ready;

 

}

int space() 

{

 int l=0;

 PCB *pr=ready;    

 while(pr!=NULL)  

 {

  l++;

  pr=pr-》link;

 }

 return(l);

}

void disp(PCB *p2)    

{

 

time = p2-》tijiaotime 》 time? p2-》tijiaotime:time;

 p2-》starttime=time;

 time+=p2-》needtime;

 p2-》state=’R’; 

 p2-》ftime=time;

 p2-》zztime=p2-》ftime-p2-》tijiaotime;

p2-》dzztime=p2-》zztime/p2-》needtime;

pzztime=p2-》zztime+pzztime;

pdzztime=p2-》dzztime+pdzztime;

 printf("周转时间:%d\n",p-》zztime);

  printf("带权周转时间为 %d\n",p-》dzztime); 

}

void destroy()    

 free(p);

}

void running()    

{

 p-》rtime=p-》rtime+1;

 if(p-》rtime==p-》needtime)   

 { p-》state=’C’;

 

 printf("%s",p-》name);

 printf("运行完毕\n");

    disp(p);

  destroy();

 }

 else                    

 {

  (p-》super)++;   

  sort(); 

  printf("正在运行进程%s\n",p-》name);

 

 }

}

void main()   

{

 int len,h=0;

 input();       

 len=space();   

 while((len!=0)&&(ready!=NULL))   

 {

  

  h++;

  p=ready; 

  ready=p-》link;

  p-》link=NULL;   

  running();  

 

 }

 pzztime=pzztime/n;

    pdzztime=pdzztime/n;

  printf("\n平均周转时间:%f\n平均带权周转时间为%f\n",pzztime,pdzztime);

 

}

如何用C语言编写:设计一个时间片轮转调度算法实现处理机调度的程序

实验三 进程调度 一、实验目的 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理机数时,就必须依照某种策略来决定那些进程优先占用处理机。本实验模拟在单处理机情况下的处理机调度,帮助学生加深了解处理机调度的工作。 二、实验内容 设计一个时间片轮转调度算法实现处理机调度的程序。 三、实验指导 1.实验中使用的数据结构: 1)PCB进程控制块 其中包括参数①进程名name;②要求运行时间runtime;③优先数prior;④状态state;⑤已运行时间runedtime。 2)为简单起见,只设运行队列,就绪链表两种数据结构,进程的调度在这两个队列中切换,如图3.1所示。 图3.1PCB链表 2.运行结果,包括各个进程的运行顺序,每次占用处理机的运行时间 3.每个进程运行时间随机产生,为1~20之间的整数。 4.时间片的大小由实验者自己定义,可为3或5。 四、实验要求 1.在上机前写出全部源程序; 2.能在机器上正确运行程序。 五、程序清单 六、运行结果 七、调试分析及实验心得我的回答和这位老兄的差不多

求一个时间片进程调度算法!望高手指点!

只帮你写点开头,后面你应该会的#include 《stdio.h》#include 《stdlib.h》#include 《string.h》#include 《iostream.h》typedef struct node{char name; int prio; int round; int cputime; int needtime; int count; char state; struct node *next; }PCB;PCB *finish,*ready,*tail,*run,; //队列指针int N; //进程数void zhunbei(){run=ready; //就绪队列头指针赋值给运行头指针run-》state=’G’; //进程状态变为运行态]ready=ready-》next; //就绪队列头指针后移到下一进程}//输出标题函数void output1(char a){if(toupper(a)==’P’) //优先级法 cout《《" "《《endl;cout《《"进程名 占用CPU时间 已运行时间 还要的时间 轮转时间片 状态"《《endl;}

“时间片如果进程在时间片结束前结束,则CPU当即进行切换”怎么理解

  时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。  如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。  在宏观上:我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。

时间片轮转调度设计一个有N个进程并发的进程调度程序每个进程有一

cpu进程调度模拟四个队列是优先级队列(优先级高的在前面)可以使用结构体做队列的节点时间片轮转就是指定一个执行时间,时间一到就处理下一个进程,将当前进程进行状态转换(也就是换着状态需要向其放入相应的队列中,优先级队列)理清头绪的话程序不算太复杂但也很麻烦

进程管理模拟程序设计总结时间片(进程调度模拟程序)

本文编辑:admin

更多文章:


float的形容词(漂浮的词性漂浮的词性是什么)

float的形容词(漂浮的词性漂浮的词性是什么)

大家好,今天小编来为大家解答以下的问题,关于float的形容词,漂浮的词性漂浮的词性是什么这个很多人还不知道,现在让我们一起来看看吧!本文目录漂浮的词性漂浮的词性是什么请问这里的around 和 accidental-like分别是什么词性

2024年7月2日 13:11

jquery实现特效(网页设计高手看过来:这个jquery特效怎么用)

jquery实现特效(网页设计高手看过来:这个jquery特效怎么用)

本文目录网页设计高手看过来:这个jquery特效怎么用怎样用jquery实现弹出框的弹出时渐渐增大,最小化时渐渐变小的特效,在此先感谢!jQuery实现列表内容的动态载入特效jquery的手风琴特效使用JQuery在线制作ppt并在线演示源

2024年7月13日 03:50

核酸检测结果怎么打印成纸质版(核酸检测证明纸质版怎么弄)

核酸检测结果怎么打印成纸质版(核酸检测证明纸质版怎么弄)

本文目录核酸检测证明纸质版怎么弄纸质核酸报告去哪里打印,在哪里打印核酸检测结果核酸检测结果怎么打印,核酸检测如何自己打印核酸检测报告打印流程,核酸证明如何打印核酸检测报告如何打印社区做的核酸检测报告怎么打印如何自己打印核酸检测报告,做完核酸

2024年6月25日 20:21

stripe手续费(为什么说用Qbit趣比汇平台进行独立站收款成本较低)

stripe手续费(为什么说用Qbit趣比汇平台进行独立站收款成本较低)

本文目录为什么说用Qbit趣比汇平台进行独立站收款成本较低跨境收款选Airwallex空中云汇还是stripe跨境收款第三方平台哪个好除了stripe,还有其他的第三方平台推荐吗为什么说用Qbit趣比汇平台进行独立站收款成本较低是的,我那会

2024年7月19日 10:38

coriander(Coriander是什么颜色)

coriander(Coriander是什么颜色)

本篇文章给大家谈谈coriander,以及Coriander是什么颜色对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录Coriander是什

2024年7月11日 08:24

router路由器设置(路由器的设置方法)

router路由器设置(路由器的设置方法)

本文目录路由器的设置方法路由器怎么设置怎么设置路由器wifi设置教程怎么路由器的设置步骤联通3g wifi router路由器怎么设置华硕路由器怎么设置怎么设置路由器呢怎么设置路由器路由器的设置方法1、在手机或电脑的浏览器地址栏输入路由器登

2024年6月10日 03:12

如何快速学好英语(如何简单快速学好英语)

如何快速学好英语(如何简单快速学好英语)

本文目录如何简单快速学好英语怎么快速学好英语怎样才能快速学好英语如何快速学好英语零基础如何快速学好英语如何简单快速学好英语1.每天一词;2.尽可能多地讲英语;3.听外语之声或看外语电视; 4.在单语词典里查找你不认识的词;5.犯了错误立即纠

2024年7月21日 13:27

unity3d教程pdf下载(如何下载 unity3d2017版官方素材)

unity3d教程pdf下载(如何下载 unity3d2017版官方素材)

大家好,如果您还对unity3d教程pdf下载不太了解,没有关系,今天就由本站为大家分享unity3d教程pdf下载的知识,包括如何下载 unity3d2017版官方素材的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文

2024年8月30日 11:01

aspen plus安装(win7旗舰版如何安装aspen plus7.2)

aspen plus安装(win7旗舰版如何安装aspen plus7.2)

本文目录win7旗舰版如何安装aspen plus7.2aspen plus 11.1 安装问题aspen plus v7.2 安装过程错误Aspen Plus怎么安装aspenplus 能安装在win11系统上吗aspen plus安装时

2024年7月20日 10:31

spring钢琴多少钱一台(钢琴多少钱一台)

spring钢琴多少钱一台(钢琴多少钱一台)

各位老铁们,大家好,今天由我来为大家分享spring钢琴多少钱一台,以及钢琴多少钱一台的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录钢琴多少钱一台

2024年8月7日 02:00

汇编指令点亮一个led(汇编语言 单片机 一个开关控制一盏LED的亮灭)

汇编指令点亮一个led(汇编语言 单片机 一个开关控制一盏LED的亮灭)

各位老铁们,大家好,今天由我来为大家分享汇编指令点亮一个led,以及汇编语言 单片机 一个开关控制一盏LED的亮灭的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开

2024年7月24日 15:56

operating(operating怎么读)

operating(operating怎么读)

其实operating的问题并不复杂,但是又很多的朋友都不太了解operating怎么读,因此呢,今天小编就来为大家分享operating的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录operating怎么读o

2024年8月8日 00:35

directions染发膏(凯维斯果染膏染发梳安全吗可以用吗)

directions染发膏(凯维斯果染膏染发梳安全吗可以用吗)

本文目录凯维斯果染膏染发梳安全吗可以用吗头发染渐变一定要用渐变染发膏吗纯春堂汉斯染发膏怎么用染发膏怎么用如何正确使用染发膏维特丝染发膏vcoo是什么颜色染发剂排名英歌染发膏有害处吗direction染发膏是蜡染吗维特丝染发剂安全吗凯维斯果染

2024年7月23日 18:44

php判断是否为空(PHP中如何判断一个对象是否为空)

php判断是否为空(PHP中如何判断一个对象是否为空)

本文目录PHP中如何判断一个对象是否为空PHP怎样判断一个数组中是否有的键值为空php怎么样判断多个post值是否为空PHP怎么用if语句写一个判断文本框中内容是否为空的语句php如何检测输入框里是否为空php多维数组如何确定是否为空php

2024年5月21日 06:54

password密码是多少(血欲password密码是多少)

password密码是多少(血欲password密码是多少)

其实password密码是多少的问题并不复杂,但是又很多的朋友都不太了解血欲password密码是多少,因此呢,今天小编就来为大家分享password密码是多少的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录血欲

2024年8月18日 12:40

免费网站转app(在手机上编写了个网页,怎么转成App安装)

免费网站转app(在手机上编写了个网页,怎么转成App安装)

这篇文章给大家聊聊关于免费网站转app,以及在手机上编写了个网页,怎么转成App安装对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录在手机上编写了个网页,怎么转成App安装靠比较件软件免费下载大全app网站怎么将在自己网站转为

2024年8月24日 22:30

如何做粽子?易买网购物车结算用jsp怎么做

如何做粽子?易买网购物车结算用jsp怎么做

“怎么做”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看如何做粽子?易买网购物车结算用jsp怎么做!本文目录如何做粽子易买网购物车结算用jsp怎么做大学生怎么做兼职挣钱如何做和做什么的区别是什么啊如何做冷饮在计算机原理中,二

2024年7月6日 06:04

textarea换行问题(请教 关于文本框textarea中的换行问题)

textarea换行问题(请教 关于文本框textarea中的换行问题)

本文目录请教 关于文本框textarea中的换行问题如何处理textarea换行关于textarea换行的问题textarea回车换行问题请教 关于文本框textarea中的换行问题《textarea rows=“5“ cols=“40“

2024年7月3日 02:08

前端基础面试题(问下前端行业的同学,现在只会html,css,js,jquery,JS只是懂基础可以在广州找份工作吗)

前端基础面试题(问下前端行业的同学,现在只会html,css,js,jquery,JS只是懂基础可以在广州找份工作吗)

本文目录问下前端行业的同学,现在只会html,css,js,jquery,JS只是懂基础可以在广州找份工作吗Web前端面试题面试技巧有哪些前端面试,面试官问都看过哪些书是要问什么前端转行软件测试,面试应该怎么说即将面试《今日头条》的前端实习

2024年6月27日 02:10

安卓软件开发框架(android 五大应用开发框架是什么)

安卓软件开发框架(android 五大应用开发框架是什么)

本文目录android 五大应用开发框架是什么android开发框架有哪些开发android app有什么架构吗安卓应用开发顶级框架大盘点,有适合你的那一款吗在Android开发过程中搭建一个自己的应用框架有几个步骤android软件开发的

2024年7月9日 02:22

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1155
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1152
标签列表

热门搜索