计算机操作系统实验报告

时间:2024.4.14

河北传媒学院

学生实践报告书

学    院    河北传媒学院                                            

专业班级    计算机科学与技术 

学生学号    130809010129     

学生姓名       张众谦        

实践课程    计算机操作系统   

: 要求附加学生作品、音视频资料、实验步骤登记表(教师自行制定,记录学生实验步骤完成情况)以作为教师评定成绩的依据。


第二篇:计算机操作系统-处理机调度实验报告


中南大学

实验名称:处理机调度

课程名称:计算机操作系统

学生姓名            盛 希 玲               

学    号           0903060215              

学    院        信息科学与工程学院         

专业班级         电子信息工程0602          

完成时间         20##年10月12日          

目   录

一 实验内容... 2

二 实验目的... 2

三 实验题目... 2

四 基本思想... 2

五 算法分析... 2

六 流程图... 3

七 算法描述... 4

八 运行输出结果... 9

一 实验内容

选择一个调度算法,实现处理机调度。

二 实验目的

多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优先占用处理机。本实验模拟实现处理机调度,以加深了解处理机调度的工作。

三 实验题目

设计一个按优先权调度和时间片轮转算法实现处理机调度的程序。

四 基本思想

    先选择时间片的个数和每个时间片需要的时间,正在运行的进程每运行一秒其优先权数目加一,即其优先权减小。每个时间片运行结束后,选择进入时间片进程优先权数目最小的进程,开始下一个时间片的运行。如果有进程运行结束,则离开,再在就绪队列中选择优先权数目最小的进程进入。在运行期间,如果有新的进程来到,按优先权大小放入就绪队列中。

五 算法分析

    定义一个结构体,此包含了PCB的信息:

 struct PCB

{

 char PID[5];     /*进程名*/

 int needtime;    /*要求运行的时间*/

 int cputime;     /*已运行时间*/

 int priority;     /*优先权(越小越高)*/

 int starttime;    /*进入就绪队列的时间*/

 int overtime;    /*运行完成的时间*/

 int state;       /*状态:1就绪2运行3完成*/

 struct PCB *next;

};

子函数struct PCB *create(int num,int n)用来建立一个按优先级大小排列的就绪进程链表和一个按时间先后循序排列的将进入就绪进程的链表。

main()函数中用一while循环输出进入时间片的进程状态。

六 流程图

七 算法描述

#define NULL 0

#define LEN sizeof(struct PCB)

#include"stdio.h"

#include"stdlib.h"

struct PCB

{

 char PID[5];     /*进程名*/

 int needtime;    /*要求运行的时间*/

 int cputime;     /*已运行时间*/

 int priority;     /*优先权(越小越高)*/

 int starttime;    /*进入就绪队列的时间*/

 int overtime;    /*运行完成的时间*/

 int state;       /*状态:1就绪2运行3完成*/

 struct PCB *next;

};

struct PCB *create(int num,int n)

/*创建进程,并将进程按优先级顺序插入队列中*/

{

 struct PCB *head,*p,*p1,*p2;

 int i;

 head=NULL;                    /*头指针指零*/

 for(i=1;i<=num;i++)              /*循环建立所有进程*/

 {

  printf("请输入第%d个进程的信息\n",i);

  p=(struct PCB *)malloc(LEN);    /*开辟一个空间*/   

  printf("进程名:");              /*输入进程名*/

  scanf("%s",p->PID);

  printf("要求运行的时间:");      /*输入要运行的时间*/

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

  p->cputime=0;                 /*占用处理机的时间赋为零*/

  printf("优先权:");              /*输入优先权*/

  scanf("%d",&p->priority);

  if(n==1)

  p->starttime=0;                /*进入就绪队列的时间赋为零*/

  else

  {

   printf("进入就绪队列时间:");      /*输入进入就绪队列的时间*/

   scanf("%d",&p->starttime);

  }

  p->overtime=-1;                 /*运行没有结束所以运行完成的时间赋为-1*/

  p->state=1;                     /*状态赋为就绪状态*/

  p1=head;                       /*p1指针指向头指针*/

  if(head==NULL)           /*如果头指针为零将头指针指向新建立的进程*/    

  {head=p;head->next=NULL;}

  else                           /*头指针不为零的情况*/

  {

   if(n==1)

   while(p1!=NULL&&p->priority>p1->priority)  /*查找插入点*/

   {p2=p1;

    p1=p1->next;

   }

   else

   while(p1!=NULL&&p->starttime>p1->starttime)  /*查找插入点*/

   {p2=p1;

    p1=p1->next;

   }

   if(head==p1)                   /*优先权的值最小作为表头*/

   {p->next=head;p2=head=p;}

   else                          /*否则的话插入*/

   {p2->next=p;p->next=p1;}

  }

 }

 return(head);

}

void main()

{

 char now[5];

 int cho,num,num1,timepiece,time,i,j,k,flag,choo,clock=0;

 struct PCB *head,*head1,*over,*later,*l,*l1,*l2,*p,*p0,*p1,*p2,*q,*q1,*q2,*q3;

 over=NULL;

 printf("初始化进程...\n");

 printf("输入总的就绪进程数:");

 scanf("%d",&num);

 head=create(num,1);               /*建立就绪进程的链表*/

 printf("输入将会就绪的进程数:");

 scanf("%d",&num1);              /*建立将会进入就绪进程的链表*/

 later=create(num1,2);

 printf("cpu是否开始运行:1是 2不是--");

 scanf("%d",&cho);

 if(cho==1)                 /*处理机开始进行调度*/

 {

  printf("现在的时间是:");

  scanf("%s",now);

  printf("显示所有就绪的进程:\n");

  p2=head;

  printf("进程名\t要求运行时间\t已运行时间\t优先权\t状态(1就绪2运行3结束)\n");

  while(p2!=NULL)

  {

printf("%s\t%d\t\t%d\t\t%d\t%d\n",p2->PID,p2->needtime,p2->cputime,p2->priority,p2->state);

p2=p2->next;

  }

  printf("请输入时间片总数:");

  scanf("%d",&timepiece);

  printf("请输入时间片的时间:");

  scanf("%d",&time);

  printf("运行正式开始!\n");

  head1=head;           

  printf("\t\t进程名\t要求运行时间\t已运行时间\t优先权\t状态\n");

  for(i=1;i<=timepiece;i++)        /*将进入时间片运行的进程用头指针head1指示,并改变就绪进程头指针head的指向*/  

  {

   if(head!=NULL)

   {

    p=head;

    head=head->next;

   }

   else break;

  }

  p->next=NULL;

 while(head1!=NULL)   /*就绪进程头指针不为零就循环*/

 {  

  head1->state=2;      /*状态:1就绪2运行3完成*/ 

  for(j=1;j<=time;j++)  /*每个时间片所需时间的循环*/

  {

   clock++;          /*定时器每秒加1*/

   if(later!=NULL&&clock==later->starttime)

 /*如果将进入就绪队列的进程时间到达加入就绪队列*/

   {l=later;

    l1=head;

    later=later->next;

    if(head==NULL)

    {head=l;head->next=NULL;}

    else

    {

     while(l1!=NULL&&l1->priority<=l->priority)

     {l2=l1;l1=l1->next;}

     if(l1==head)

     {

      l->next=head;

      head=l;

     }

     else

     {

      l2->next=l;

      l->next=l1;

     }

    }

   }

   flag=0;

   printf("\n%3d秒 时间片第%d秒  ",clock,j);

   q=head1;

   if(head1->needtime>head1->cputime)  /*以运行时间和优先权都加1*/

   {

    head1->cputime++;

    head1->priority++;

   

    while(q)                        /*运行队列不为零输出其信息*/

    {if(q==head1)

     printf("%s\t%d\t\t%d\t\t%d\t%d\n",q->PID,q->needtime,q->cputime,q->priority,q->state);

     else

     printf("\t\t   %s\t%d\t\t%d\t\t%d\t%d\n",q->PID,q->needtime,q->cputime,q->priority,q->state);

     q=q->next;   

    }

   }

   if(head1->needtime==head1->cputime)  

/*运行完成将其放入over为头指针的链表中*/

   {

    head1->state=3;

    head1->overtime=clock;

    if(over==NULL)

    {over=head1;head1=head1->next;over->next=NULL;}

    else

     if(over!=NULL&&head1!=NULL)

     {

      p1=head1->next;

      p0=over;

      over=head1;

      over->next=p0;

      head1=p1;

     }

     flag=1;

   }

   if(flag==1) break;

  }

  if(flag==1)         /*有进程结束的情况*/

  {

   if(head!=NULL)   /*就绪队列不为零将优先权最高的放入运行链表中*/

   {q1=head;

    head=head->next;

    q2=head1;

    while(q2!=NULL&&q2->priority<=q1->priority)

    {q3=q2;q2=q2->next;}

    if(q2==head1)

    {

     q1->next=head1;

     head1=q1;

    }

    else

    {

     q3->next=q1;

     q1->next=q2;

    }

   }

  }

  else               /*无进程结束的情况,寻找优先权最高的运行*/

  {

   head1->state=1;

   q1=head1;

   head1=head1->next;

   q2=head1;

   while(q2!=NULL&&q2->priority<=q1->priority)

   {q3=q2;q2=q2->next;}

   if(q2==head1)

   {q1->next=head1;head1=q1;}

   else

   {q3->next=q1;q1->next=q2;}

  }

 }

 }

printf("cpu结束运行!\n");

printf("是否输出所有结束的进程:1是2不是--");

scanf("%d",&choo);

if(choo==1)       /*输出所有完成运行的进程*/

{

 printf("开始时间:%s\n",now);

 printf("进程名\t要求运行时间\t进入就绪队列的时间\t运行完成的时间\n");

 while(over!=NULL)

 {

  printf("%s\t%d\t\t%d\t\t\t%d\n",over->PID,over->needtime,over->starttime,over->overtime);

  over=over->next;

 }

}

}

八 运行输出结果

初始化进程如右图

显示现在的时间和所有就绪的进程

输入时间片的总数和每个时间片的时间

运行时显示的信息

更多相关推荐:
计算机操作系统课程设计报告

《操作系统原理》实验报告院(部):管理工程学院专业:信息管理与信息系统实验项目:实验一二三五班级:信管102姓名:**学号:**引言操作系统是信息管理与信息系统专业一门重要的专业理论课程,了解和掌握操作系统的基…

计算机操作系统进程调度实验报告

操作系统实验题设计一若干并发进程的进程调度程序一实验目的无论是批处理系统分时系统还是实时系统用户进程数一般都大于处理机数这将导致用户进程互相争夺处理机这就要求进程调度程序按一定的策略动态地把处理及分配给处于就绪...

操作系统课程设计(完整报告,已给老师验收成功)

计算机科学技术学院操作系统原理课程设计报告题目进程管理系统专业班级姓名学号指导老师年月日117操作系统原理课程设计任务书一课程设计题目任选一个题目1模拟进程管理2模拟处理机调度3模拟存储器管理4模拟文件系统5模...

计算机操作系统课程设计报告

《操作系统原理》实验报告院(部):管理工程学院专业:信息管理与信息系统实验项目:实验一二三五班级:信管102姓名:学号:目录引言.........................................…

计算机操作系统实验报告

重庆交通大学计算机操作系统实验报告班级信息与计算科学二班姓名凯学号6311220xx203实验室逸夫楼指导老师杨际祥实验完成时间20xx年5月日实验一处理机调度算法实验内容选择一个调度算法实现处理机调度实验...

计算机操作系统实验报告

一实验目的1通过模拟实现几种基本页面置换的算法了解虚拟存储技术的特点2掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想并至少用三种算法来模拟实现3通过对几种置换算法页面的比较来对比他们的优缺点并通过...

计算机操作系统实验报告

实验报告实验课程计算机操作系统学生姓名学号6100511015专业班级管理科学与工程类111班20xx年6月7日128目录实验一Linux的文件系统和基本操作命令3实验二熟悉Linux开发环境5实验三Linux...

实验报告1-计算机操作系统

大一计算机基础实验报告1计算机操作系统Windows7实验目的1掌握Windows7的基本操作2熟练掌握资源管理器文件与文件夹的管理方法3Windows7控制面板的使用实验内容和步骤一Windows7基本操作和...

华中科技大学计算机操作系统实验报告

实验目的掌握Linux操作系统的使用方法了解Linux系统内核代码结构掌握实例操作系统的实现方法一实验要求1掌握Linux操作系统的使用方法包括键盘命令系统调用掌握在Linux下的编程环境编一个C程序其内容为实...

计算机操作系统实验报告(文件基本操作)

数学与计算机科学系实验报告课程计算机操作系统地点软件实验室二时间20xx年月日

计算机操作系统实验报告1实例

河南城建学院计算机操作系统实验报告实验名称实验1系统的开启与关闭用户的登录与退出及编程入门成绩专业班级0814121学号081412119姓名高胜超实验日期20xx年09月25日实验器材一台装有Windows操...

计算机操作系统银行家算法实验报告

计算机操作系统实验报告一实验名称银行家算法二实验目的银行家算法是避免死锁的一种重要方法通过编写一个简单的银行家算法程序加深了解有关资源申请避免死锁等概念并体会和了解死锁和避免死锁的具体实施方法三问题分析与设计1...

计算机操作系统实验报告(30篇)