操作系统C 进程调度算法实验报告

时间:2024.4.9

华北科技学院计算机系综合性实验

实 验 报 告

课程名称            操作系统C                

实验学期    2012    2013   学年 第  2 学期

学生所在系部             计算机系             

年级    2010       专业班级     网络B10     

学生姓名             学号      

任课教师              杜杏菁                 

实验成绩                                      

计算机系制


《操作系统C》课程综合性实验报告

开课实验室:  基础六机房                                      2013  6  3


第二篇:操作系统实验报告--C语言实现银行家算法


 

附录3

程序源代码:

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

# define m 50

int no1;  //进程数

int no2;  //资源数

int r;

int allocation[m][m],need[m][m],available[m],max[m][m];

char name1[m],name2[m];                               //定义全局变量

void main()

{

    void check();

    void print();

    int i,j,p=0,q=0;

    char c;

    int request[m],allocation1[m][m],need1[m][m],available1[m];

    printf("**********************************************\n");

    printf("*           银行家算法的设计与实现           *\n");

    printf("**********************************************\n");

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

    scanf("%d",&no1);

    printf("请输入资源种类数:\n");

    scanf("%d",&no2);

    printf("请输入Max矩阵:\n");

    for(i=0;i<no1;i++)

       for(j=0;j<no2;j++)

           scanf("%d",&max[i][j]);   //输入已知进程最大资源需求量

    printf("请输入Allocation矩阵:\n");

    for(i=0;i<no1;i++)

       for(j=0;j<no2;j++)

       scanf("%d",&allocation[i][j]);  //输入已知的进程已分配的资源数

   

    for(i=0;i<no1;i++)

       for(j=0;j<no2;j++)

       need[i][j]=max[i][j]-allocation[i][j]; //根据输入的两个数组计算出need矩阵的值

  

    printf("请输入Available矩阵\n");

    for(i=0;i<no2;i++)

       scanf("%d",&available[i]);       //输入已知的可用资源数

   

    print();  //输出已知条件

    check();  //检测T0时刻已知条件的安全状态

    if(r==1)  //如果安全则执行以下代码

    {

       do{

q=0;

            p=0;

printf("\n请输入请求资源的进程号(0~4):\n");

           for(j=0;j<=10;j++)

           {

              scanf("%d",&i);

              if(i>=no1)

              {

                  printf("输入错误,请重新输入:\n");

                  continue;     

               }

              else break;

           }

           printf("\n请输入该进程所请求的资源数request[j]:\n");

           for(j=0;j<no2;j++)

              scanf("%d",&request[j]);

           for(j=0;j<no2;j++)

              if(request[j]>need[i][j]) p=1; 

              //判断请求是否超过该进程所需要的资源数

              if(p)

                  printf("请求资源超过该进程资源需求量,请求失败!\n");

              else

              {

                  for(j=0;j<no2;j++)

                  if(request[j]>available[j]) q=1; 

//判断请求是否超过可用资源数

                  if(q)

                     printf("没有做够的资源分配,请求失败!\n");

                  else                             //请求满足条件

                  {

                     for(j=0;j<no2;j++) 

                     {

                         available1[j]=available[j]; 

                         allocation1[i][j]=allocation[i][j];

                         need1[i][j]=need[i][j];   

                  //保存原已分配的资源数,仍需要的资源数和可用的资源数

                         available[j]=available[j]-request[j]; 

                         allocation[i][j]+=request[j];

                         need[i][j]=need[i][j]-request[j];

                            //系统尝试把资源分配给请求的进程

                     }

                     print();

                     check();     //检测分配后的安全性

                     if(r==0)   //如果分配后系统不安全

                     {

                         for(j=0;j<no2;j++)

                         {

                            available[j]=available1[j]; 

                             allocation[i][j]=allocation1[i][j];

                             need[i][j]=need1[i][j];

                    //还原已分配的资源数,仍需要的资源数和可用的资源数

                         }

                         printf("返回分配前资源数\n");

                         print();

                     }

                  }

              }printf("\n你还要继续分配吗?Y or N ?\n");  

              //判断是否继续进行资源分配

                  c=getche();

       }while(c=='y'||c=='Y');

    }

}

void check()   //安全算法函数

{

    int k,f,v=0,i,j;

    int work[m],a[m];

    bool finish[m];

    r=1;

    for(i=0;i<no1;i++)

       finish[i]=false;   // 初始化进程均没得到足够资源数并完成

    for(i=0;i<no2;i++)

        work[i]=available[i];//work[i]表示可提供进程继续运行的各类资源数

    k=no1;

    do{

       for(i=0;i<no1;i++)

       {

           if(finish[i]==false)

           {

              f=1;

              for(j=0;j<no2;j++)

                  if(need[i][j]>work[j])

                     f=0;

                  if(f==1)      //找到还没有完成且需求数小于可提供进程继续运行的资源数的进程

                  {

                     finish[i]=true;

                     a[v++]=i;   //记录安全序列号

                     for(j=0;j<no2;j++)

                         work[j]+=allocation[i][j];  //释放该进程已分配的资源

                  }

           }

       }

       k--;      //每完成一个进程分配,未完成的进程数就减1

    }while(k>0);

    f=1;

    for(i=0;i<no1;i++)    //判断是否所有的进程都完成

    {

       if(finish[i]==false)  

       {

           f=0;

           break;

       }

    }

    if(f==0)       //若有进程没完成,则为不安全状态

    {

       printf("系统处在不安全状态!");

       r=0;

    }

    else

    {

       printf("\n系统当前为安全状态,安全序列为:\n");

       for(i=0;i<no1;i++)

           printf("p%d  ",a[i]);  //输出安全序列

    }

}

void print()  //输出函数

{

    int i,j;

    printf("\n");

    printf("*************此时刻资源分配情况*********************\n");

    printf("进程名/号   |   Max     | Allocation  |     Need    |\n");

    for (i = 0; i < no1; i++)  

       {

           printf("   p%d/%d      ",i,i);

              

           for (j = 0; j < no2; j++)

              {printf("%d   ",max[i][j]);}

           for (j = 0; j < no2; j++)

               {printf(" %d   ",allocation[i][j]);}

          

           for (j = 0; j < no2; j++)

               {printf(" %d   ",need[i][j]);}

   

           printf("\n");

       }

        printf("\n");

       printf("各类资源可利用的资源数为:");

       for (j = 0; j < no2; j++)

           {printf(" %d",available[j]);}

       printf("\n");

}

(程序结束)

附录 4

程序运行调试结果:

1、  程序初始化

2、检测系统资源分配是否安全结果

更多相关推荐:
操作系统进程调度实验报告

操作系统进程调度实验报告一实验目的用高级语言编写和调试一个进程调度程序以加深对进程的概念及进程调度算法的解进程调度时进程管理的主要内容之一通过设计编制调试一个简单的进程调度模拟系统对进程调度进程运行状态变换加深...

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

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

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

实验一进程调度实验专业XXXXX学号XXXXX姓名XXX实验日期20XX年XX月XX日一实验目的通过对进程调度算法的模拟加深对进程概念和进程调度算法的理解二实验要求编写程序实现对5个进程的调度模拟要求至少采用两...

操作系统实验进程调度

实验二进程调度实验内容进程调度模拟实验实验目的通过模拟进程调度算法了解进程调度的过程并比较不同的调度算法的区别实验题目设计一段程序来模拟优先级调度算法和时间片轮转算法要求可以指定进程的数量各进程需要CPU的时间...

操作系统进程调度模拟程序实验报告

目录1课程设计目的32课程设计要求33相关知识34需求分析45概要设计56详细设计67测试修改及运行结果138参考文献159结束语1510附件1511课程设计的目的理解操作系统进程管理中进行进程调度的过程和编程...

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

计算机操作系统课程实验报告题目实验一进程调度计算机学院计算机科学与技术学院专业姓班学名级号20xx年10月21日1实验一进程调度1实验目的通过对进程调度算法的模拟进一步理解进程的基本概念加深对进程运行状态和进程...

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

实验报告课程名称计算机操作系统实验名称班级学号姓名成绩指导教师赵安科实验日期20xx年5月21日一实验题目进程及其管理二实验内容设计一个简单的进程调度算法模拟OS中的进程调度过程三实验要求进程数不少于5个进程调...

操作系统模拟实验:单处理机系统的进程调度实验报告

数学与计算机学院单处理机系统的进程调度实验报告年级07学号20xx429023姓名王阳成绩专业信计实验地点主楼402指导教师王硕实验项目单处理机系统的进程调度实验日期实验报告要求一实验目的1加深对进程概念的理解...

操作系统原理---进程调度实验报告

一实验目的通过对进程调度算法的设计深入理解进程调度的原理进程是程序在一个数据集合上运行的过程它是系统进行资源分配和调度的一个独立单位进程调度分配处理机是控制协调进程对CPU的竞争即按一定的调度算法从就绪队列中选...

操作系统实验进程调度

实验三进程调度一实验目的加深理解并模拟实现进程作业调度算法1熟悉常用的进程调度算法如FCFSSPFFPF高响应比优先时间片轮转2结合所学的数据结构及编程知识选择三种进程调度算法予以实现二实验属性该实验为设计性实...

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

算机操作系统实验二作业进程调度算法设计与实现一实验目的调度是操作系统的主要功能本实验通过自行设计实现的调度程序使同学们加深对作业进程调度功能的理解从而掌握操作系统的基本原理同时还可以提高同学们的编程能力二实验要...

华师操作系统实验一——进程调度的设计与实现实验报告

院系计算机学院实验课程操作系统实验实验项目进程调度的设计与实现指导老师冯刚开课时间20xx20xx年度第2学期专业网络工程班级11本6班学生卢伟柱学号20xx2100175华南师范大学教务处华南师范大学实验报告...

操作系统进程调度实验报告(37篇)