特黄特色三级在线观看免费,看黄色片子免费,色综合久,欧美在线视频看看,高潮胡言乱语对白刺激国产,伊人网成人,中文字幕亚洲一碰就硬老熟妇

學(xué)習(xí)啦>學(xué)習(xí)電腦>操作系統(tǒng)>操作系統(tǒng)基礎(chǔ)知識>

操作系統(tǒng)死鎖檢測算法

時間: 佳洲1085 分享

  操作系統(tǒng)中死鎖是可以進行檢測的,運用相關(guān)的算法我們可以檢測死鎖從而找到解決方法。下面由學(xué)習(xí)啦小編為大家整理了操作系統(tǒng)的死鎖檢測算法的相關(guān)知識,希望對大家有幫助!

  操作系統(tǒng)死鎖檢測算法

  模擬死鎖檢測算法

  1. 輸入:

  “資源分配表”文件,每一行包含資源編號、進程編號兩項(均用整數(shù)表示,并用空格分隔開),記錄資源分配給了哪個進程。

  “進程等待表”文件,每一行包含進程編號、資源編號兩項(均用整數(shù)表示,并用空格分隔開),記錄進程正在等待哪個資源。

  下面是一個示例:

  資源分配表:

  1 1

  2 2

  3 3

  進程等待表:

  1 2

  2 3

  3 1

  2. 處理要求:

  程序運行時,首先提示“請輸入資源分配表文件的文件名:”;再提示“請輸入進程等待表文件的文件名:”。

  輸入兩個文件名后,程序?qū)⒆x入兩個文件中的有關(guān)數(shù)據(jù),并按照死鎖檢測算法進行檢測。

  3. 輸出要求:

  第一行輸出檢測結(jié)果:有死鎖 或 無死鎖。

  第二行輸出進程循環(huán)等待隊列,即進程編號(如果有死鎖)。

  4. 文件名約定

  提交的源程序名字:resourceXXX.c或者resourceXXX.cpp(依據(jù)所用語言確定)

  輸入文件名字:可由用戶指定

  結(jié)果輸出到resultXXX.txt中

  其中:XXX為賬號。

  5. 死鎖檢測算法:當任一進程Pj申請一個已被其他進程占用的資源ri時,進行死鎖檢測。檢測算法通過反復(fù)查找進程等待表和資源分配表,

  來確定進程Pj對資源ri的請求是否導(dǎo)致形成環(huán)路,若是,便確定出現(xiàn)死鎖。

  6. 測試說明:測試教師將事先準備好一組文件(格式為*.txt),從中為每個程序隨機指定一至三個作為輸入文件

  (被測試者需從鍵盤輸入指定文件的文件名),并查看程序輸出結(jié)果。

  本程序包括:死鎖檢測算法

  VC++調(diào)試通過

  (C)copyright by Neo

  歡迎大家測試 請問題請Email:sony006@163.com*/

  #include<stdio.h>

  #include<iostream.h>

  #include<string.h>

  const int MAXQUEUE=100; //定義表的最大行數(shù)

  typedef struct node{

  int resource;

  int process;

  }cell;

  cell occupy[MAXQUEUE];

  int occupy_quantity;

  cell wait[MAXQUEUE];

  int wait_quantity;

  //初始化函數(shù)

  void initial()

  {

  int i;

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

  occupy[i].process=-1;

  occupy[i].resource=-1;

  wait[i].process=-1;

  wait[i].resource=-1;

  }

  occupy_quantity=0;

  wait_quantity=0;

  }

  //讀數(shù)據(jù)文件

  int readData()

  {

  FILE *fp;

  char fname[20];

  int i;

  cout<<"請輸入資源分配表文件的文件名:"<<endl;

  strcpy(fname,"10trouble1.txt");

  //cin>>fname;

  if((fp=fopen(fname,"r"))==NULL){

  cout<<"錯誤,文件打不開,請檢查文件名:)"<<endl;

  return 0;

  }

  else{

  while(!feof(fp)){

  fscanf(fp,"%d %d",&occupy[occupy_quantity].resource,&occupy[occupy_quantity].process);

  occupy_quantity++;

  }

  }

  cout<<"請輸入進程等待表文件的文件名:"<<e

  ndl;

  strcpy(fname,"10trouble2.txt");

  //cin>>fname;

  if((fp=fopen(fname,"r"))==NULL){

  cout<<"錯誤,文件打不開,請檢查文件名:)"<<endl;

  return 0;

  }

  else{

  while(!feof(fp)){

  fscanf(fp,"%d %d",&wait[wait_quantity].process,&wait[wait_quantity].resource);

  wait_quantity++;

  }

  }

  //輸出所讀入的數(shù)據(jù)

  cout<<endl<<endl<<"輸出所讀入的數(shù)據(jù)"<<endl;

  cout<<"━━━━━━━━━━━━━━━━━━━━━━━"<<endl;

  cout<<"資源分配表"<<endl;

  cout<<"資源編號 進程編號"<<endl;

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

  cout<<" "<<occupy[i].resource<<" "<<occupy[i].process<<endl;

  }

  cout<<"───────────────────────"<<endl;

  cout<<"進程等待表"<<endl;

  cout<<"進程編號 資源編號"<<endl;

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

  cout<<" "<<wait[i].resource<<" "<<wait[i].process<<endl;

  }

  return 1;

  }

  //檢測

  void check()

  {

  int table[MAXQUEUE][MAXQUEUE];

  int table1[MAXQUEUE][MAXQUEUE];

  int i,j,k;

  int flag,t,p;

  int max_process;

  //初始化表格

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

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

  table[i][j]=0;

  table1[i][j]=0;

  }

  }

  //先找到進程最大編號

  max_process=-1;

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

  if(occupy[i].process>max_process){

  max_process=occupy[i].process;

  }

  }

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

  if(wait[i].process>max_process){

  max_process=wait[i].process;

  }

  }

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

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

  if(wait[i].resource==occupy[j].resource){

  table[wait[i].process][occupy[j].process]=1;

  table1[wait[i].process][occupy[j].process]=1;

  }

  }

  }

  cout<<"初始等待占用表:"<<endl;

  for(i=0;i<max_process+1;i++){

  for(j=0;j<max_process+1;j++){

  cout<<table[i][j]<<" ";

  }

  cout<<endl;

  }

  cout<<endl;

  for(i=0;i<max_process+1;i++){

  for(j=0;j<max_process+1;j++){

  for(k=0;k<max_process+1;k++){

  table[i][j]=table[i][j]||(table[i][k]&&table[k][j]);

  }

  }

  }

  cout<<"檢測后的等待占用表:"<<endl;

  for(i=0;i<max_process+1;i++){

  for(j=0;j<max_process+1;j++){

  cout<<table[i][j]<<" ";

  }

  cout<<endl;

  }

  flag=-1;

  for(i=0;i<max_process+1;i++){

  if(table[i][i]==1){

  flag=i;

  break;

  }

  }

  cout<<endl<<endl<<"檢測結(jié)果"<<endl;

  cout<<"───────────────────"<<endl;

  if(flag!=-1){

  cout<<"存在死鎖"<<endl;

  cout<<"進程循環(huán)等待隊列:";

  p=flag; //存在進程循環(huán)等待隊列的那一進程

  //進程循環(huán)等待隊列中的所有進程是table表中的這一行是1的進程,只是順序要再確定

  t=1;

  while(t){

  cout<<p<<" ";

  for(j=0;j<max_process+1;j++){

  if(table1[p][j]==1){

  if(table[j][flag]==1){

  p=j;

  break;

  }

  }

  }

  if(p==flag)t=0;

  }

  cout<<flag<<endl;

  }

  else{

  cout<<"不存在死鎖"<<endl;

  }

  }

  //顯示版權(quán)信息函數(shù)

  void version()

  {

  cout<<endl<<endl;

  cout<<" ┏━━━━━━━

  ━━━━━━━━━━━━━━━━┓"<<endl;

  cout<<" ┃      死 鎖 檢 測 算 法         ┃"<<endl;

  cout<<" ┠───────────────────────┨"<<endl;

  cout<<" ┃   (c)All Right Reserved Neo       ┃"<<endl;

  cout<<" ┃      sony006@163.com          ┃"<<endl;

  cout<<" ┃     version 2004 build 1122      ┃"<<endl;

  cout<<" ┗━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;

  cout<<endl<<endl;

  }

  void main()

  {

  int flag;

  version();

  initial();

  flag=readData();

  if(flag)check();

  }

操作系統(tǒng)死鎖檢測算法

操作系統(tǒng)中死鎖是可以進行檢測的,運用相關(guān)的算法我們可以檢測死鎖從而找到解決方法。下面由學(xué)習(xí)啦小編為大家整理了操作系統(tǒng)的死鎖檢測算法的相關(guān)知識,希望對大家有幫助! 操作系統(tǒng)死鎖檢測算法 模擬死鎖檢測算法 1. 輸入: 資源分配表
推薦度:
點擊下載文檔文檔為doc格式

精選文章

  • 操作系統(tǒng)死鎖的危害
    操作系統(tǒng)死鎖的危害

    操作系統(tǒng)中發(fā)生死鎖是一個極其不好的情況,進程死鎖最后有可能造成嚴重的后果。下面由學(xué)習(xí)啦小編為大家整理了操作系統(tǒng)的死鎖的危害相關(guān)知識,希望

  • 操作系統(tǒng)死鎖的必要條件
    操作系統(tǒng)死鎖的必要條件

    操作系統(tǒng)中死鎖產(chǎn)生是需要條件的,這幾個條件缺一不可,是必要條件。下面由學(xué)習(xí)啦小編為大家整理了操作系統(tǒng)的死鎖產(chǎn)生的必要條件相關(guān)知識,希望對

  • 操作系統(tǒng)死鎖產(chǎn)生原因
    操作系統(tǒng)死鎖產(chǎn)生原因

    操作系統(tǒng)中死鎖產(chǎn)生的原因一般有多種。具體是哪幾種呢?下面由學(xué)習(xí)啦小編為大家整理了操作系統(tǒng)的死鎖的相關(guān)知識,希望對大家有幫助! 一、操作系統(tǒng)

  • 操作系統(tǒng)死鎖
    操作系統(tǒng)死鎖

    操作系統(tǒng)中死鎖是必考的一個題目。下面由學(xué)習(xí)啦小編為大家整理了操作系統(tǒng)的死鎖的相關(guān)知識,希望對大家有幫助! 一、操作系統(tǒng)死鎖的概念 所謂死鎖

3626613