目录1.题目要求编辑2.安全性检查算法描述初始化查找可执行进程执行进程并更新状态判断系统安全性3.代码实现4.运行结果1.题目要求2.安全性检查算法描述初始化设置两个向量工作向量Work和布尔向量Finish。Work表示系统可提供给进程继续运行所需的各类资源数目初始化为当前可用资源数量Available。Finish表示系统是否有足够的资源分配给进程使之运行完成初始化为false。查找可执行进程从进程集合中找到一个满足以下条件的进程Finish[i]false且Need[i]Work。如果找到这样的进程则执行步骤3否则执行步骤4。执行进程并更新状态假设进程Pi获得资源后可顺利执行直至完成并释放出分配给它的资源。更新Work向量WorkAllocation[i]。将Finish[i]设置为true表示进程Pi已完成。返回步骤2继续查找下一个可执行进程。判断系统安全性如果所有进程的Finish[i]都为true则表示系统处于安全状态否则系统处于不安全状态。3.代码实现#includestdio.h #includemath.h #includestdlib.h #includestring.h #define SOURNUM 3 #define MAX 5 char* safeList[5]; typedef struct PCB { char name[2]; //进程名 int max[SOURNUM]; //所需最大资源数 int allocation[SOURNUM]; //已分配资源数 int need[SOURNUM]; //当前所需资源数 int finish; //完成状态 }pcb; pcb pro[MAX] { {P0,{7, 5, 3}, {0, 1 ,0},{7, 4 ,3},-1}, {P1,{3 ,2, 2}, {2, 0, 0},{1, 2 ,2},-1}, {P2,{9, 0, 2}, {3, 0 ,2},{6, 0 ,0},-1}, {P3,{2 ,2, 2}, {2, 1 ,1},{0, 1, 1},-1}, {P4,{4 ,3 ,3}, {0 ,0, 2},{4, 3, 1},-1} }; int checkSafe(pcb pro[], int *available, int proNumber, int sourNumber) { int i, j, numsour 0; int safeListnum 0; while (safeListnum proNumber) { int flag -1;//判断这一轮有没有至少找到一个 for (i 0; i proNumber; i) { numsour 0; if (pro[i].finish -1) { for (j 0; j sourNumber; j) { if (pro[i].need[j] available[j]) numsour; } if (numsour sourNumber) { for (j 0; j sourNumber; j) { available[j] pro[i].allocation[j];//释放资源 } pro[i].finish 1; flag 1; safeList[safeListnum] pro[i].name;//加入到安全序列 if (safeListnum proNumber)//已经找到了一个安全序列 return 1; } } } if (flag -1)//这轮一个都没有找到 return -1; } } int main() { int proNumber MAX, sourNumber SOURNUM; int available[SOURNUM] { 3,3,2 }; int flag checkSafe(pro, available, proNumber, sourNumber); if (flag 1) { printf(找到了一个安全序列); for (int i 0; i proNumber; i) { if (i ! proNumber-1) printf(%s-, safeList[i]); else printf(%s, safeList[i]); } printf(T0时刻系统是处于安全状态。\n); } else printf(找不到安全序列T0时刻系统处于不安全状态。); return 0; }4.运行结果