最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

操作系统实验二(银行家算法)实验报告

来源:动视网 责编:小OO 时间:2025-09-29 23:22:12
文档

操作系统实验二(银行家算法)实验报告

实验二实验报告实验源码:#include"stdio.h"#include#include#defineFalse0//定义False#defineTrue1//定义TrueintMax[100][100]={0};//各进程所需各类资源的最大需求intAvaliable[100]={0};//系统可用资源charname[100]={0};//资源的名称intAllocation[100][100]={0};//系统已分配资源intNeed[100][100]={0};//还需要资源intR
推荐度:
导读实验二实验报告实验源码:#include"stdio.h"#include#include#defineFalse0//定义False#defineTrue1//定义TrueintMax[100][100]={0};//各进程所需各类资源的最大需求intAvaliable[100]={0};//系统可用资源charname[100]={0};//资源的名称intAllocation[100][100]={0};//系统已分配资源intNeed[100][100]={0};//还需要资源intR
实验二实验报告

实验源码:

#include "stdio.h"

#include

#include

#define False 0                     // 定义False

#define True 1                      // 定义True

int Max[100][100] = {0};            // 各进程所需各类资源的最大需求

int Avaliable[100] = {0};           // 系统可用资源

char name[100] = {0};               // 资源的名称

int Allocation[100][100] = {0};     // 系统已分配资源

int Need[100][100] = {0};           // 还需要资源

int Request[100] = {0};             // 请求资源向量

int temp[100] = {0};                // 存放安全序列

int Work[100] = {0};                // 存放系统可提供资源

int M = 100;                        // 作业的最大数为100

int N = 100;                        // 资源的最大数为100

// 显示资源矩阵

void showdata()

{

    int i,j;

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

    // 显示表头

    printf("             Max      Allocation     Need     Avaliable\\n");

    printf("PCB          ");

    // 显示作业名称

for(j = 0;j < 4;j++){

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

            printf("%c ",name[i]);

        printf("      ");

    }

    printf("\\n");

    // 显示当前作业资源分配情况

for(i = 0;i < M;i++){

        printf(" %d           ",i);

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

            printf("%d ",Max[i][j]);

        printf("      ");

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

            printf("%d ",Allocation[i][j]);

        printf("      ");

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

            printf("%d ",Need[i][j]);

        if(i == 0){ 

            printf("      ");

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

                printf("%d ",Avaliable[j]);

        }

    printf("\\n");

    }

}

// 进行资源分配

int changdata(int i)

    int j;

for (j = 0;j < M;j++) {

        Avaliable[j] = Avaliable[j] - Request[j];

        Allocation[i][j] = Allocation[i][j] + Request[j];

        Need[i][j] = Need[i][j] - Request[j];

    }

    return 1;

}

// 安全性算法

int safe()

{

    int i,d,k = 0,m,h,s,apply,Finish[100] = {0};

    int j;

    int flag = 0;

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

        Work[i] = Avaliable[i];

    printf("  安全性检查  \\n");

    printf("             Work      Need     Allocation     Work+Allocation     Finish\\n");

    printf("PCB        ");

    // 显示作业名称

for(j = 0;j < 4;j++){

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

            printf("%c ",name[i]);

        printf("      ");

    }

    printf("\\n");

    // 显示当前作业资源分配情况

for(i = 0;i < M;i++){

        apply = 0;

     for(j = 0;j < N;j++){

         if (Finish[i] == False && Need[i][j] <= Work[j])

            {

                apply++;

                if(apply == N)

                {

                    printf(" %d         ",i);

                 for(d = 0;d < N;d++)

                        printf("%d ",Work[d]);

                    printf("      ");

                 for(d = 0;d < N;d++)

                        printf("%d ",Need[i][d]);

                    printf("      ");

                 for(d = 0;d < N;d++)

                        printf("%d ",Allocation[i][d]);

                    printf("      ");

                 for(m = 0;m < N;m++)

                    { 

                        Work[m] = Work[m] + Allocation[i][m];

                        printf("%d ",Work[m]);

                            

                    }// 变分配数

                    Finish[i] = True;

                    temp[k] = i;

                    printf("              ");

                    printf("true ");

                    printf("\\n");

                    

                    i = -1; 

                    k++;

                    flag++;

                }

            }

        }

    }

    

for(i = 0;i < M;i++){

        if(Finish[i] == False){

         for(j = 0;j < N;j++){

                Avaliable[j] = Avaliable[j] + Request[j];;

                Allocation[i][j] = Allocation[i][j] - Request[j];;

                Need[i][j] = Need[i][j] + Request[j];    

            }

            printf("\\n系统进入不安全状态!此时系统不分配资源!\\n");        // 不成功系统不安全    

            return 0;

        }

    }

    printf("\\n此时系统是安全的!\\n");         // 如果安全,输出成功

    printf("安全序列为:");

for(i = 0;i    {

        printf("%d",temp[i]);

     if(i < M - 1)

         printf("->");

    }

    printf("\\n");

    return 0;

}

// 利用银行家算法对申请资源对进行判定

void share()

{

    char ch;

    int i = 0,j = 0;

    ch = 'y';

    printf("\\n请输入要求分配的资源进程号(0 - %d):",M - 1);

    scanf("%d",&i);                          // 输入须申请的资源号

    printf("\\n请输入进程 %d 申请的资源:\\n",i);

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

    {

        printf("%c:",name[j]);

        scanf("%d",&Request[j]);             // 输入需要申请的资源

    }

for (j = 0;j < N;j++){

     if(Request[j] > Need[i][j]) // 判断申请是否大于需求,若大于则出错

        { 

            printf("\\n进程 %d 申请的资源大于它需要的资源",i);

            printf(" 分配不合理,不予分配!\\n");

            ch = 'n';

            break;

        } else {

         if(Request[j] > Avaliable[j]) // 判断申请是否大于当前资源,若大于则

            {// 出错

                printf("\\n进程 %d 申请的资源大于系统现在可利用的资源",i);

                printf(" 分配出错,不予分配!\\n");

                ch = 'n';

                break;

            }

        }

    }

    if(ch == 'y') {

        changdata(i);         // 根据进程需求量变换资源

        showdata();           // 根据进程需求量显示变换后的资源

        safe();               // 根据进程需求量进行银行家算法判断

    }

}

// 主函数

int main()

{

    int t = 1,i,j,number,choice,m,n,flag;

    char ming;

    printf("\\n请首先输入系统可供资源种类的数量:");

    scanf("%d",&n);

    N = n;

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

    {

        printf("资源 %d 的名称:",i + 1);

        scanf("%s",&ming);

        name[i] = ming;

        printf("资源的数量:");

        scanf("%d",&number);

        Avaliable[i] = number;

    }

    printf("\\n");

    printf("请输入作业的数量:");

    scanf("%d",&m);

    M = m;

    printf("\\n请输入各进程的最大需求量( %d * %d 矩阵)[Max]:\\n",m,n);

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

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

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

    do{

        flag = 0;

        printf("\\n请输入各进程已经申请的资源量( %d * %d 矩阵)[Allocation]:\\n",m,n);

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

         for(j = 0;j < n;j++){

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

             if(Allocation[i][j] > Max[i][j])

                flag = 1;

                Need[i][j] = Max[i][j] - Allocation[i][j];

            }

        if(flag)

            printf("\\n申请的资源大于最大需求量,请重新输入!\\n\\n");

    }while(flag);

    

    showdata();        // 显示各种资源

    safe();            // 用银行家算法判定系统是否安全

    while(1){

        if(t == 1){

            printf("\\n  利用银行家算法预分配资源   \\n");

            share();

            t = 0;

        }

        else break;

        printf("\\n 是否继续银行家算法?(按 1 键继续,按其它任意键退出):");

        scanf("%d",&t);

        printf("\\n");

    }

    return 1;

}

实验结果截图:

运行程序:

输入相应数据并完成首次自检:

进程1请求资源Request(1,0,2):

进程4请求资源Request(3,3,0):

进程0请求资源Request(0,2,0):

文档

操作系统实验二(银行家算法)实验报告

实验二实验报告实验源码:#include"stdio.h"#include#include#defineFalse0//定义False#defineTrue1//定义TrueintMax[100][100]={0};//各进程所需各类资源的最大需求intAvaliable[100]={0};//系统可用资源charname[100]={0};//资源的名称intAllocation[100][100]={0};//系统已分配资源intNeed[100][100]={0};//还需要资源intR
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top