进程调度实验报告

更新时间:2023-05-20 14:34:17 阅读: 评论:0

测试过程:(实验中出现的问题、错误、解决方法)
1. 在短作业优先和先来先服务中如何实现排序,即实现链表中的排序比较麻烦,方法有待改正
2. 由于此试验模仿的是多个进程调度,就绪队列为五个进程,所以一次调度后就绪对列为空,此时要在新建进程,所以此时要保证进程的为节点跟头结点相同,且都指向空
3. 每次调度后对就绪队列的修改对不同调度方法都不同,当只剩下一个进程时特殊处理
4. 开始时pcb的名字用数组存储,但在排序时不好实现交换,就改为字符串类型的名字
实验总结:
写程序时必须要自己明白思路,明白下一步应该这样运行和使用,要不不能将程序很好的写出
并且基础要扎实,要对C++基础掌握好才能很好地应用
圣诞快乐 英语
签名    孙发玉
2012年 4月 25日
评语与成绩:






教师签名:
年      月      日
洛阳师范学院信息技术学院
软件实验报告
专业:软件工程                      课程:操作系统
学号:101164030    姓名:孙发玉    班级:10软件工程
实验名称
进程的调度
实验类型
验证性
实验时间
2012425
实验环境
Windows7+DEV c++
实验目的与要求:加深对进程概念的理解,明确进程和程序的区别,深入理解系统如何组织进程,创建进程,进一步认识如何实现处理机调度。
实验内容:编写程序完成单处理机系统中的进程调度,要求采用“先来先服务”、“短作业优先”、最高优先数优先、“时间片轮转”等调度算法之一对五个进程进行调度。实验具体包括:首先确定进程控制块的内容和组成方式;然后完成进程创建原语和进程调度原语;最后编写主函数对所做工作进行测试
实验步骤:(算法描述、源程序、操作步骤和方法)
1.创建进程,即创建PCB结构体,假定系统有五个进程,每一个进程用一个进程控制块PCB来代表,进程控制块的格式为:进程名,指针,要求运行时间,已运行时间,优先数,进程大小,其中,进程名——作为进程的标识,假设五个进程的进程名分别为P1P2P3P4P5。指针——根据算法要求建立五个进程的队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为“0”。
要求运行时间——假设进程需要运行的单位时间数。
已运行时间——假设进程已经运行的单位时间数,初始值为“0”。
优先数——赋予进程的优先数,调度时总是选取优先数大的进程先执行。
状态——可假设有两种状态,“就绪”状态和“执行”状态。五个进程的初始状态都为“就绪”,用“R”表示 ,手动创建
2.进程调度:
  包含四种调度算法:先来先服务,短作业优先,时间片轮转,最高优先级优先,每调度一次后显示就就绪队列中的进程情况,先来先服务和短作业优先是非抢占式,每个进程都一次性运行完,时间片轮转和优先级对被选中的进程并不实际的启动运行,而是执行:优先数-1,要求运行时间-1,已运行时间+1,来模拟进程的一次运行,表示进程已经运行过一个单位的时间
源程序:
  #include<iostream>
#include<string>
using namespace std;
void creatPCB();//进程创建
void diaodu();//进程调度
void ff();//先来先服务
void sf();//短作业优先
void tf();//时间片轮转
void pf();//优先级优先
void runFirst();
void show();
void paixu(int x);
typedef struct PCB你是我的梦中情人
{
string name;    //作为进程的标识,假设五个进程的进程名分别为P1P2P3P4P5 
  struct PCB *next;//根据算法要求建立五个进程的队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为"0"
  int needTime;//假设进程需要运行的单位时间数
  int finishTime;//假设进程已经运行的单位时间数,初始值为"0"
  int daxiao;//作业大小
  int priority;// 优先级 
  char state; //状态   
        }PCB;
  PCB *head;//建立就绪对列头 结点
  PCB *rear; //建立就绪对列尾 结点
 
 
  int main(){
        head=rear=new PCB;
        head->next=NULL;
        while(1){
      cout<<"***************************"<<endl;
      cout<<"*    1. 创建进程          *"<<endl;
      cout<<"*                        *"<<endl;
      cout<<"*    2.进程调度          *"<<endl;
      cout<<"*                        *"<<endl;
      cout<<"***************************"<<endl;
      cout<<"请先创建进程 ,请选择:";
      char a;
      cin>>a;
      switch(a){
        ca '1':
            creatPCB();
            break;       
               
        ca '2':
            diaodu();   
            break; 
        default:cout<<"error\n";break;
                }}
        system("pau");
2014年12月英语六级
      }
void creatPCB(){
      cout<<"创建5个进程到就绪对列,请输入:"<<endl;
      for(int i=1;i<=5;i++){
      PCB *p;
      p=new PCB;
      cout<<""<<i<<"个进程的名字"<<":";
      cin>>p->name;
      cout<<"要求运行时间:";
      cin>>p-> needTime;
     
      p->finishTime = 0;
      cout<<"进程大小:";
      cin>>p->daxiao;
      cout<<"优先级:";
      cin>>p->priority;
      p->state = 'R';
      rear->next=p;
      rear=p;
      rear->next=NULL;
     
      }
     
      cout<<"创建进程成功"<<endl;
     
      }
  void diaodu(){
      while(1){
    cout<<"***************************************"<<endl;
    cout<<"*                                    *"<<endl; 
    cout<<"*    1.先来先服务                    *"<<endl; 
    cout<<"*    2.短作业优先                    *"<<endl;
    cout<<"*    3.时间片轮转                    *"<<endl;
    cout<<"*    4.最高优先数优先和时间片轮转    *"<<endl; 
    cout<<"*    5.退出                          *"<<endl; 
    cout<<"***************************************"<<endl; 
  cout<<"请选择调度算法:";
  char b;
  cin>>b;
  switch(b){
    ca'1':
            ff();
            return; 
    ca'2':
            sf();
            return; 
    ca'3':tf();
          return;   
    ca'4':pf();
            return; 
    ca'5':
            return;       
}    }
      }
void ff(){
      cout<<"初始状态为:"<<endl; 
      show();
    int times=0;
    while(head->next!=NULL){
          if(head->next->next!=NULL){
          times++;
          cout<<""<<times<<"次调度后就绪队列为:"<<endl; 
                                      }               
          PCB* p1;
          p1=head->next;
          if(p1==rear){
              head->next=p1->next;
              rear=head;       
                      }
          head->next=p1->next;
                       
          PCB* p2;
          p2=head->next;
          cout<<"名字"<<"\t"<<"大小"<<"\t"<<"状态"<<endl;
          while(p2!=NULL){                         
              cout<<p2->name<<"\t"<<p2->daxiao<<"\t"<<p2->state<<endl;         
              p2=p2->next;           
                          }                 
                            }
                        }
                       
bonnyvoid sf(){               
    int times=0;
    while(head->next != NULL){     
    cout<<""<<times<<"次调度后就绪队列为:"<<endl;
    times++;
    paixu(1);
    cout<<"名字"<<"\t"<<"所需时间"<<"\t"<<"状态"<<endl;   
    PCB* p2;
    p2=head->next;
    while(p2!=NULL){
              cout<<p2->name<<"\t"<<p2->needTime<<"\t\t"<<p2->state<<endl;         
              p2=p2->next;           
                    }                 
    head->next=head->next->next;
    if(head->next==NULL)
    rear=head;             
                    }
    cout<<""<<times<<"次调度后就绪队列为空"<<endl;
                      }       
void tf(){
    cout<<"初始状态为:"<<endl; 
    show();
    int times= 0;
   
    while(head->next != NULL){
        times++;
        cout<<""<<times<<"次调度后就绪队列为:"<<endl;
        runFirst();                   
                              }
                                    }
void pf(){
    cout<<"初始状态为:"<<endl;
    paixu(2); 
    show();
    int times= 0;
    while(head->next!= NULL){
        times++;
        cout<<""<<times<<"次调度后就绪队列为:"<<endl;
        head->next->priority--;
        head->next->needTime--;
        head->next->finishTime++;
        if(head->next->needTime==0){
          小沈阳补办婚礼
        head->next=head->next->next;
        if(head->next==NULL)
            rear=head;      }
           
        paixu(2);
        if(head->next!=NULL)                 
        show();           
        el
        cout<<"就绪队列为空"<<endl; 
                      }   
          }
                                           
void runFirst(){
    PCB* first = head->next;
    first->needTime--;
    first->finishTime++;
   
   
    if(first->needTime == 0){
          head->next = first->next;
          if(first->next==NULL){
          head->next = first->next;
          rear=head;  }           
          }
    el{
          if(first->next!=NULL){ 
              PCB* node = first->next;
              rear->next = first;
              first->next = NULL;
              rear = first; 
              head->next =node;           
          }
    }
      show();
}
void show(){
    PCB* p1 = head->next;
    cout<<"名字"<<"\t"<<"需要总时间"<<"\t"<<"已运行时间"<<"\t"<<"大小"<<"\t"<<"优先级"<<"\t"<<"状态"<<endl;
    while(p1!=NULL) {           
        cout<<p1->name<<"\t"<<p1->needTime<<"\t\t"<<p1->finishTime<<"\t\t"<<p1->daxiao<<"\t"<<p1->priority<<"\t"<<p1->state<<endl;                 
        p1=p1->next;               
quo    }   
}
void paixu(int x){
    PCB* p1;
    PCB* p2;
    PCB* p3;
    PCB* p4; 
    p3=rear;
    while(head->next->next!=NULL&&p3!=head->next->next){
        p1=head;
        p2=p1->next;
        while(p2!=p3){
                  switch(x){
                  ca 1:
                      {口译英语
                            p1=p2; 
                            p2=p2->next;
                      if(p1->needTime>p2->needTime){
                          string name1;  圣诞快乐 英语
                            int needTime1;
                            int finishTime1;
                            int daxiao1;                       
                            name1=p1->name;
                            p1->name=p2->name;
                            p2->name=name1;
                            needTime1=p1->needTime;
                            p1->needTime=p2->needTime;
                            p2->needTime=needTime1; 
                            finishTime1=p1->finishTime;
                            p1->finishTime=p2->finishTime;
                            p2->finishTime=finishTime1;
                            daxiao1=p1->daxiao;
                            p1->daxiao=p2->daxiao;                     
                            p2->daxiao=daxiao1;               
                                  }
                            }
                            break;
                  ca 2:
                      {
                            p1=p2; 
                            p2=p2->next;
                      if(p1->priority<p2->priority){
                          string name1; 
                            int needTime1;
                            int finishTime1;
                            int daxiao1;
番禺英语培训                            int priority1;                       
                            name1=p1->name;
                            p1->name=p2->name;
                            p2->name=name1;
                            needTime1=p1->needTime;
                            p1->needTime=p2->needTime;
                            p2->needTime=needTime1; 
                            finishTime1=p1->finishTime;
                            p1->finishTime=p2->finishTime;
                            p2->finishTime=finishTime1;
                            daxiao1=p1->daxiao;
                            p1->daxiao=p2->daxiao;
                            p2->daxiao=daxiao1;
                            priority1=p1->priority;
                            p1->priority=p2->priority;                   
                            p2->priority=priority1;
                                                    }
                            }
                            break;
                     
                                                        }         
                             
                      }
            p3=p1;         
                     
    }
   
abc教育集团    }

本文发布于:2023-05-20 14:34:17,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/708423.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进程   调度   运行   时间
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图