当前位置: 首页 > news >正文

扶风做网站马鞍山专业网站制作

扶风做网站,马鞍山专业网站制作,海外公司推广,不懂代码wordpress1.设计目的与要求 1.1设计目的 了解银行家算法中使用的数据结构和求安全序列算法#xff0c;并进一步加深对避免死锁算法及其实现过程的理解。 1.2设计要求 通过编写和调试一个系统动态分配资源的简单模拟程序#xff0c;观察死锁产生的条件#xff0c;并采用适当的算法并进一步加深对避免死锁算法及其实现过程的理解。 1.2设计要求 通过编写和调试一个系统动态分配资源的简单模拟程序观察死锁产生的条件并采用适当的算法有效地防止和避免死锁的发生。 2.设计思想及系统平台 2.1设计思想 基本思想分为两个模块一是银行家算法模块二是安全性检查模块。当有进程申请资源时先检查系统是否能够满足进程的请求此时程序进入安全性检查模块如果安全就分配不安全就拒绝申请。 本算法的数据结构 1可利用资源向量Available。这是一个含有m个元素的数组其中的每一个元素代表一类可利用的资源数目。 2最大需求矩阵Max。这是一个n×m的矩阵定义了系统中n个进程中的每一个进程对m类资源的最大需求。 3分配矩阵Allocation。这也是一个n×m的矩阵定义了系统中每一类资源当前已分配给每一进程的资源数。 4需求矩阵Need。这也是一个n×m的矩阵用以表示每一个进程尚需的各类资源数。 由数学知识可知Need[i,j]Max[i,j]-Allocation[i,j]。 2.2系统平台及使用语言 CodeBlocksC 3.详细算法描述 1初始化函数Init() 用户输入数据初始化可利用资源向量矩阵AVAILABLE、最大需求矩阵MAX、分配矩阵ALLOCATION、 需求矩阵NEED。 2银行家算法Order() 当进程Pi发出资源请求后系统按以下步骤进行检查 ①如果Request[i,j]Need[i,j]便转向步骤②否则出错因为它请求的资源数已超过它的需求最大值。 ②如果Request[i,j]Available[j]便转向步骤③否则表示当前资源不足Pi须等待 ③系统试探着把资源分配给进程Pi并修改下面数据结构中的数值Available[j] Available[j]-Request i[j]、Allocation[i,j] Allocation[i,j]Request[i,j]、Need[i,j] Need[i,j]-Request[i,j] ④系统执行安全性算法检查此次资源分配后系统是否处于安全状态。若安全才正式将资源分配给进程Pi否则恢复原来的资源分配状态让进程Pi等待。 3安全性检查算法Safecheck() ①设置两个向量工作向量Work表示系统可提供给进程继续运行所需的各类资源数目初始化WorkAvailableFinish表示系统是否有足够的资源分配给进程初始化Finish[i]false当有足够资源分配给进程时再令Finish[i]true。 ②从进程集合中找到一个能满足下述条件的进程Finish[i]falseNeed[i,j]≤Work[j]若找到执行步骤③否则执行步骤④。 ③假设进程Pi获得资源后可顺利执行直至完成并释放出分配给它的资源故应执行Work[j] Work[j]Allocation[i,j]Finish[i]truego to step ② ④如果所有进程的Finish[i]true都满足则表示系统处于安全状态否则系统处于不安全状态。 4.源代码 #include iostream #include vector using namespace std; #define MAX 20 int n_process;//表示进程的个数 int n_resource;//表示资源的个数 int Resource[MAX];//表示资源的总数 int Max[MAX][MAX];//表示进程对每类资源的最大需求量 int Allocation[MAX][MAX];//表示系统给进程已分配每类资源的数目 int Need[MAX][MAX];//表示进程还需各类资源数目 int Available[MAX];//表示系统当前剩下的资源 int Work[MAX];//表示安全性检查的中间变量 bool Finish[MAX];//表示资源是否被安全性检查过 vectorint Safeorder;//表示安全序列 void Menu() {cout ------------银行家算法---------------- endl;cout * 1.初始化数据 * endl;cout * 2.申请资源 * endl;cout * 3.显示资源分配情况 * endl;cout * 4.退出 * endl;cout -------------------------------------- endl;cout 请选择; } //检查初始化数值是否合理 void checkInit() {if (n_resource)for (int i 0; i n_process; i){for (int j 0; j n_resource; j){if (Max[i][j] 0){cout Max[ i ][ j ]输入值小于0 endl;}if (Allocation[i][j] 0){cout Allocation[ i ][ j ]输入值小于0 endl;}if (Allocation[i][j]Max[i][j]){cout Allocation[ i ][ j ]的值大于Max[ i ][ j ]输入值 endl;}}}for (int i 0; i n_resource; i){if (Available[i]0){cout Available[ i ]的值小于0 endl;}}cout 检查完毕输入无误 endl; } //初始化进程和资源 int Init() {if (n_resource ! 0 n_process ! 0){cout 已经初始化过了 endl;return 1;}cout 请分别输入资源个数和进程个数中间用空格隔开 endl;cin n_resource n_process;cout 请输入各个资源的总拥有量 endl;for (int i 0; i n_resource; i){cin Resource[i];}for (int i 0; i n_process; i){cout P i 对各个资源的最大需求量 endl;for (int j 0; j n_resource; j){cin Max[i][j];}cout P i 各个资源已分配量 endl;for (int j 0; j n_resource; j){cin Allocation[i][j];}for (int j 0; j n_resource; j){Need[i][j] Max[i][j] - Allocation[i][j];}}for (int i 0; i n_resource; i){int sum[MAX] { 0 };for (int j 0; j n_process; j){switch(i){case 0:case 1:case 2:sum[i] Allocation[j][i];break;}}Available[i] Resource[i] - sum[i];}checkInit();return 1; } //安全性检查 bool Safecheck() {//清空原来的安全序列Safeorder.clear();//Work初始化为Availablefor (int i 0; i n_resource; i){Work[i] Available[i];}//还没开始检查设置标志为falsefor (int i 0; i n_process; i){Finish[i] false;}//开始安全性检查int count 0;for (int k 0; k n_process; k){for (int i 0; i n_process; i){if (Finish[i] false){count 0;for (int j 0; j n_resource; j){if (Need[i][j] Work[j])count;}//如果进程所需的各个资源数都没有超过系统现有的对应资源数if (count n_resource){for (int j 0; j n_resource; j){//将Work赋值为 第i个进程各个已分配资源数系统现有的对应资源数Work[j] Work[j] Allocation[i][j];}Finish[i] true;Safeorder.push_back(i);//加入到安全序列}}}}count 0;//安全的进程数for (int i 0; i n_process; i){if (Finish[i] true)count;}if (count n_process)return true;elsereturn false; } //请求进程 int Order() {int n -1; //请求资源的进程号int *Request new int[n_resource];//表示请求的各个资源数量cout 请输入你要请求的进程号;cin n;cout 请输入你要请求各个资源的数量中间用空格隔开 endl;for (int i 0; i n_resource; i){cin Request[i];}//开始判断//请求量大于该进程的最大需求量出错for (int i 0; i n_resource; i){if (Need[n][i] Request[i]){cout 输入错误请求量不能比该进程的最大需求量还大 endl;return 1;}}//请求量大于当前空闲资源量出错for (int i 0; i n_resource; i){if (Available[i] Request[i]){cout 拒绝当前空闲资源不够 endl;return 1;}}//请求量合理试图分配资源给请求进程并做安全性检查for (int i 0; i n_resource; i){Available[i] - Request[i];Allocation[n][i] Request[i];Need[n][i] - Request[i];}//安全性检查bool Is_safeSafecheck();if (Is_safe true){cout 系统已经分配资源给P n 进程了 endl;cout 其中一个安全序列为 endl;for (int i 0; i Safeorder.size(); i){cout P Safeorder.at(i) -;}cout End endl ;}//不安全恢复试分配之前的现场else{cout 不能分配资源否则系统会处于不安全状态 endl;for (int i 0; i n_resource; i){Available[i] Request[i];Allocation[n][i] - Request[i];Need[n][i] Request[i];}}return 1; } //显示资源分配情况 void Display() {cout endl;cout 进程 \t Max \t Allocation\tNeed\tAvailable endl;for (int i 0; i n_process; i){cout P i \t;for (int j 0; j n_resource; j){cout Max[i][j] ;}cout \t ;for (int j 0; j n_resource; j){cout Allocation[i][j] ;}cout \t;for (int j 0; j n_resource; j){cout Need[i][j] ;}cout \t ;for (int j 0; i0j n_resource; j){cout Available[j] ;}cout endl;}cout endl; }int main() {int choose 0;while (1){Menu();cin choose;switch (choose){case 1:Init();break;case 2:Order();break;case 3:Display();break;case 4:cout 系统已退出;return 1;default:cout 输错了重输 endl;break;}} } 实验报告https://download.csdn.net/download/sjhdxpz/88212618
http://wiki.neutronadmin.com/news/18368/

相关文章:

  • 驻马店做网站公司wordpress seo模块
  • 宜昌最权威网站建设公司网络营销与直播电商专业就业方向
  • 网站建设对网络营销的影响万网网站设计
  • 在软件定义网络架构中管理员深圳网站建设专业乐云seo
  • 做美食推广的网站有哪些长沙营销型网站建设费用
  • 福州做企业网站wordpress哪个主题好
  • php网站架设教程网片钢筋生产厂家
  • 应聘网站开发题目室内设计软件自学
  • 网站建设验收wordpress 获取分类文章列表
  • 深圳手机网站建设牛商网做公司网站的公司
  • 做电子手抄报的网站伊春网络推广
  • 王晴儿网站建设方案盐山做网站价格
  • 上海做网站的深圳龙华新区
  • 电子政务网站系统内蒙古乌海建设局网站
  • 互联网运营培训课程重庆seo整站优化外包服务
  • 深圳手机网站建设服务新余公司做网站
  • 网站推广的方式与技巧专业网站开发软件
  • 用什么软件来建网站重庆装修公司口碑排名
  • 网站直接做标准曲线专业做网络推广
  • 网站建设需要上传数据库吗网站流量的重要性
  • 科普互联网站建设北京最近发布会直播
  • 有什么兼职做it的网站模板网站外链做不起来
  • 劳务公司网站怎么做如何在网站后台备份数据库表
  • dw中网站统计总访问量怎么做响应式网站做法
  • 网站建设高考题设计一个自己的电商网站
  • 网站建设与制作视频教学com域名的网站
  • 数据网站建设导航网站搭建
  • php网站开发什么网站流量50g
  • 哪个网站做数学题赚钱企业网页制作平台
  • 抚州网站seo一个专门做ppt的网站