7-1 银行家算法--安全性检查 (20 分)(思路+详解+知识分析)宝 你今天 AC了吗(1)

写在最后

在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。

需要完整版PDF学习资源私我

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

释放资源那么就会发生死锁,两个进程都无法进行下去

2.那么安全性算法就是使系统在分配资源时候一直处在安全的状态(即不会发生死锁)

那么我们在分配资源的时候就有了算法,即最终分配给各个进程的资源,都不会影响到

整个系统的安全状态,这时会出现一个进程的执行序列

3.具体解释算法过程

1>:几个变量

Max:一个进程所需的最大资源量

Allocation:系统已经给其分配了多少资源

Need:这个进程还需要多少资源

Available:这个系统还剩多少资源

2>:刚开始设置work = Available 将所有进程设置为 finish = false (相当于定义一个flag)

3>:找一个进程满足下列的条件

finish = false

need <= work(需要的资源得比系统剩余的要少)

4>:如果 3>的条件满足的话,我们就需要

将work += Allocation (每个进程执行完后需要释放资源)

finish = true (代表该进程完成)

返回步骤 3>继续寻找满足上诉条件的进程

5>:思考如何判定此时的系统状态是安全还是不安全的

安全:如果 3>的条件不满足 即此时的所有进程的 finsh = true 说明了所有的进程已经完成

不安全: 我们已经判断了所有的finish = false 的进程,但是仍未找到满足条件的

need < work 那么可以判定此状态为 不安全的状态

,否则

那么就是说明该系统处在不安全的状态(即会发生死锁)

4.处理数据

1>:这里我们选取的数据结构是结构体数组因为一个进程他对应好多属性,所以选取的是结构体

在结构体的属性当中 我们设置一个 max[] 和 allocation[] 目的是存放多个不同类型资源

2>:关于node[i].a[j],node[i].b[j],node[i].c[j]的理解,就是3个二维数组 就是这样的

*/

#include<bits/stdc++.h>

using namespace std;

struct Node{

string processName;//进程名

int a[100];//Max

int b[100];//allocation

int c[100];//need

bool finish;

}node[1000];

//关于重写 sort方法中的两个参数 都表示是一个结构体(即我们需要用两个结构体当中的数据进行比较)

bool sort_c(Node node1,Node node2){

return node1.c[0] < node2.c[0];

}

int main(){

int N,M;

int cnt = 0;//用于记进程完成的个数

vectorv1;//存总的资源总量

vectorv2;//存need需要的资源

vectorv3;//记录最后需要输出的Available

cin >> N >> M;

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

int resources;

cin >> resources;

v1.push_back(resources);

}

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

cin >> node[i].processName;

//输入Max

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

cin >> node[i].a[j];

}

//输入allocation

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

cin >> node[i].b[j];

v1[j] -= node[i].b[j];//这里是每次减去分配的资源 那么剩下的最后就是 available

}

//求取need

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

node[i].c[j] = node[i].a[j] - node[i].b[j];

}

node[i].finish = false;//将每个进程初始状态设为 false

}

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

v3.push_back(v1[i]);

}

// sort(node,node+N,sort_c);

//算法核心部分

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

int count = 0;

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

if(node[i].c[j] <= v1[j]){

count++;

}else{

break;//只要有一个不合适就 break 出去

}

}

if(node[i].finish == false && count == M) {//count == M说明剩余的各个资源总量大于该进程的所需要的

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

v1[j] += node[i].b[j];//那么此时剩余的资源总量为原来的加上 该进程释放其占有的资源

}

node[i].finish = true;

cnt++;//记录完成进程的个数

// cout << node[i].processName << ’ ';

//此处牛逼之处在于 只要我们找到满足条件的就从-1开始继续寻找满足条件的

i = -1;

}

}

// cout << endl;

int flag = 0;

cout << “name max allocation need available” << endl;

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

cout << node[i].processName << ’ ';

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

cout << node[i].a[j] << ’ ';

}

cout << "| ";

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

cout << node[i].b[j] << ’ ';

}

cout << "| ";

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

cout << node[i].c[j] << ’ ';

}

cout << “|”;

if(flag == 0){

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

if(j == 0)

cout << ’ ’ <<v3[j];

else

cout << ’ ’ <<v3[j] ;

}

flag = 1;

}

cout << endl;

}

if(cnt == N){

cout << “找到安全序列,处于安全状态。”;

}else{

cout << “找不到安全序列,处于不安全状态。”;

}

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

// cout << v1[i] << ’ ';

// }

// 验证数据

// for(int i = 0; i < N; i++){

//

// cout << node[i].processName << ’ ';

//

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

//

// cout << node[i].c[j] << ’ ';

// }

// cout << endl;

// }

}

//name max allocation need available

//P0 7 5 3 | 0 1 0 | 7 4 3 | 3 3 2

//P1 3 2 2 | 2 0 0 | 1 2 2 |

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

😝朋友们如果有需要的话,可以联系领取~

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

2️⃣视频配套工具&国内外网安书籍、文档
① 工具

② 视频

image1

③ 书籍

image2

资源较为敏感,未展示全面,需要的最下面获取

在这里插入图片描述在这里插入图片描述

② 简历模板

在这里插入图片描述

因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值