導航:首頁 > 源碼編譯 > linux銀行家演算法

linux銀行家演算法

發布時間:2022-06-02 11:31:59

Ⅰ 怎麼學好linux的內核應該從什麼地方入手

C c++ 數據結構,演算法

Ⅱ 操作系統判斷題!求大神!

雖然曾經學過計算機操作系統,但是畢竟好多年沒有摸過了。這里根據自己的一點兒理解寫一下判斷題的答案,僅供你個人參考。

1、對;2、錯;3、錯;4、對;5、對;6、對;7、錯;8、對;9、對;10、錯。

Ⅲ 進程同步及銀行家演算法的模擬實現 有會的大俠們幫幫忙吧 這個要求實在是太多 不太懂 答的好的追100


銀行家演算法=-- -

1. 安全狀態: 在某時刻系統中所有進程可以排列一個安全序列:,剛稱此時,系統是安全的.
所謂安全序列是指對於P2,都有它所需要剩餘資源數量不大於系統掌握的剩餘的空間資源與所有Pi(j<i)所佔的資源之和.
2.不安全狀態可能產生死鎖.
目前狀態 最大需求 尚需
P1 3 9 6
P2 5 10 5
P3 2 4 2

在每一次進程中申請的資源,判定一下,若實際分配的話,之後系統是否安全.
3.銀行家演算法的思路:
1),進程一開始向系統提出最大需求量.
2),進程每次提出新的需求(分期貸款)都統計是否超出它事先提出的最大需求量.
3),若正常,則判斷該進程所需剩餘剩餘量(包括本次申請)是否超出系統所掌握的
剩餘資源量,若不超出,則分配,否則等待.
4.銀行家演算法的數據結構.
1),系統剩餘資源量A[n],其中A[n]表示第I類資源剩餘量.
2),各進程最大需求量,B[m][n],其中B[j][i]表示進程j對i
類資源最大需求.
3),已分配資源量C[m][n],其中C[j][i]表示系統j程已得到的第i資源的數量.
4),剩餘需求量.D[m][n],其中D[j][i]對第i資源尚需的數目.
5.銀行家演算法流程:當某時刻,某進程時,提出新的資源申請,系統作以下操作:
1),判定E[n]是否大於D[j][n],若大於,表示出錯.
2),判定E[n]是否大於系統剩餘量A[n],若大於,則該進程等待.
3),若以上兩步沒有問題,嘗試分配,即各變數作調整.
4),按照安全性推測演算法,判斷,分配過後,系統是否安全,若安全,則實際分配,否則,撤消分配,讓進程等待.
6."安全性檢測"演算法
1),先定義兩個變數,用來表示推算過程的數據.
F[n]=A[n],表示推算過程中,系統中剩餘資源量的變化.
J[n]=False表示推算過程中各進程是否假設"已完成"
2),流程:
在"剩餘"的進程中(在推算)過程中,一些進程假設已完成,查找D[j][n]<=F[n]的進程,找到後令J[j]=True
(假設該進程完成),F[n]+D[j][n](該進程所佔資源釋放),如此循環執行.
若最後,所有的F[n]=True(在推算過程中,所有進程均可以完成),則表示(分配過後)系統是安全的,否則系統是不安全的.

#include "malloc.h"
#include "stdio.h"
#define alloclen sizeof(struct allocation)
#define maxlen sizeof(struct max)
#define avalen sizeof(struct available)
#define needlen sizeof(struct need)
#define finilen sizeof(struct finish)
#define pathlen sizeof(struct path)
struct allocation
{
int value;
struct allocation *next;
};
struct max
{
int value;
struct max *next;
};
struct available
{
int value;
struct available *next;
};
struct need
{
int value;
struct need *next;
};
struct path
{
int value;
struct path *next;
};
struct finish
{
int stat;
struct finish *next;
};
int main()
{
int row,colum,status=0,i,j,t,temp,processtest;
struct allocation *allochead,*alloc1,*alloc2,*alloctemp;
struct max *maxhead,*maxium1,*maxium2,*maxtemp;
struct available *avahead,*available1,*available2,*availabletemp,*workhead,*work1,*work2,*worktemp,*worktemp1;
struct need *needhead,*need1,*need2,*needtemp;
struct finish *finihead,*finish1,*finish2,*finishtemp;
struct path *pathhead,*path1,*path2,*pathtemp;
char c;
printf("\nPlease enter the type of sources the system has:\n");
scanf("%d",&colum);
printf("Please enter the number of processes now in the memory:\n");
scanf("%d",&row);
printf("Please enter the allocation array:\n");
for(i=0;i<row;i++)
{
printf("The allocation for process p%d:\n",i);
for (j=0;j<colum;j++)
{
printf("The type %c system resource allocated:\n",'A'+j);
if(status==0)
{
allochead=alloc1=alloc2=(struct allocation*)malloc(alloclen);
alloc1->next=alloc2->next=NULL;
scanf("%d",&allochead->value);
status++;
}
else
{
alloc2=(struct allocation *)malloc(alloclen);
scanf("%d,%d",&alloc2->value);
if(status==1)
{
allochead->next=alloc2;
status++;
}
alloc1->next=alloc2;
alloc1=alloc2;
}
}
}
alloc2->next=NULL;
status=0;
printf("Please enter the max array:\n");
for(i=0;i<row;i++)
{
printf("The max needed from process p%d:\n",i);
for (j=0;j<colum;j++)
{
printf("The type %c maxium system resource may needed:\n",'A'+j);
if(status==0)
{
maxhead=maxium1=maxium2=(struct max*)malloc(maxlen);
maxium1->next=maxium2->next=NULL;
scanf("%d",&maxium1->value);
status++;
}
else
{
maxium2=(struct max *)malloc(maxlen);
scanf("%d,%d",&maxium2->value);
if(status==1)
{
maxhead->next=maxium2;
status++;
}
maxium1->next=maxium2;
maxium1=maxium2;
}
}
}
maxium2->next=NULL;
status=0;
printf("Please enter the available array now exists in the system:\n");
for (j=0;j<colum;j++)
{
printf("The type %c available system resource number:\n",'A'+j);
if(status==0)
{
avahead=available1=available2=(struct available*)malloc(avalen);
workhead=work1=work2=(struct available*)malloc(avalen);
available1->next=available2->next=NULL;
work1->next=work2->next=NULL;
scanf("%d",&available1->value);
work1->value=available1->value;
status++;
}
else
{
available2=(struct available*)malloc(avalen);
work2=(struct available*)malloc(avalen);
scanf("%d,%d",&available2->value);
work2->value=available2->value;
if(status==1)
{
avahead->next=available2;
workhead->next=work2;
status++;
}
available1->next=available2;
available1=available2;
work1->next=work2;
work1=work2;
}
}
available2->next=NULL;
work2->next=NULL;
status=0;
alloctemp=allochead;
maxtemp=maxhead;
for(i=0;i<row;i++)
for (j=0;j<colum;j++)
{
if(status==0)
{
needhead=need1=need2=(struct need*)malloc(needlen);
need1->next=need2->next=NULL;
need1->value=maxtemp->value-alloctemp->value;
status++;
}
else
{
need2=(struct need *)malloc(needlen);
need2->value=(maxtemp->value)-(alloctemp->value);
if(status==1)
{
needhead->next=need2;
status++;
}
need1->next=need2;
need1=need2;
}
maxtemp=maxtemp->next;
alloctemp=alloctemp->next;
}
need2->next=NULL;
status=0;
for(i=0;i<row;i++)
{
if(status==0)
{
finihead=finish1=finish2=(struct finish*)malloc(finilen);
finish1->next=finish2->next=NULL;
finish1->stat=0;
status++;
}
else
{
finish2=(struct finish*)malloc(finilen);
finish2->stat=0;
if(status==1)
{
finihead->next=finish2;
status++;
}
finish1->next=finish2;
finish1=finish2;
}
}
finish2->next=NULL; /*Initialization compleated*/
status=0;
processtest=0;
for(temp=0;temp<row;temp++)
{
alloctemp=allochead;
needtemp=needhead;
finishtemp=finihead;
worktemp=workhead;
for(i=0;i<row;i++)
{
worktemp1=worktemp;
if(finishtemp->stat==0)
{
for(j=0;j<colum;j++,needtemp=needtemp->next,worktemp=worktemp->next)
if(needtemp->value<=worktemp->value)
processtest++;
if(processtest==colum)
{
for(j=0;j<colum;j++)
{
worktemp1->value+=alloctemp->value;
worktemp1=worktemp1->next;
alloctemp=alloctemp->next;
}
if(status==0)
{
pathhead=path1=path2=(struct path*)malloc(pathlen);
path1->next=path2->next=NULL;
path1->value=i;
status++;
}
else
{
path2=(struct path*)malloc(pathlen);
path2->value=i;
if(status==1)
{
pathhead->next=path2;
status++;
}
path1->next=path2;
path1=path2;
}
finishtemp->stat=1;
}
else
{
for(t=0;t<colum;t++)
alloctemp=alloctemp->next;
finishtemp->stat=0;
}
}
else
for(t=0;t<colum;t++)
{
needtemp=needtemp->next;
alloctemp=alloctemp->next;
}
processtest=0;
worktemp=workhead;
finishtemp=finishtemp->next;
}
}
path2->next=NULL;
finishtemp=finihead;
for(temp=0;temp<row;temp++)
{
if(finishtemp->value==0)
{
printf("\nWARNING,the system is in nonsafe status!\n");
exit(0);
}
finishtemp=finishtemp->next;
}
printf("\nThe system is in safe status!\n");
printf("\nThe safe sequence is: \n");
do
{
printf("p%d ",pathhead->value);
}
while(pathhead=pathhead->next);
}

Ⅳ 操作系統計算題該怎麼學

我是計科專業的 學過操作系統 感覺貌似沒有啥計算題 操作系統中pv操作挺重要的
還有就是死鎖那部分的題 說到計算磁碟存儲忘記是不是操作系統學的了 還有 文件存儲 可能會涉及計算吧 希望對你有幫助

Ⅳ 考計算機專業的研究生時考的操作系統是什麼系統,是windows、linux、還是unix啊

操作系統考研不針對具體系統,而是針對於操作系統理論知識,當然,可能會涉及到諸如linux和windows中的某些細微的機制。
例如2010年的考綱是這樣的:
【考查目標】
1、了解操作系統在計算機系統中的作用、地位、發展和特點。
2、理解操作系統的基本概念、原理,掌握操作系統設計方法與實現技術。
3、能夠運用所學的操作系統原理、方法與技術分析問題和解決問題。
一)操作系統概述
(一)操作系統的概念、特徵、功能和提供的服務
(二)操作系統的發展與分類
(三)操作系統的運行環境
二)進程管理
(一) 進程與線程
1、進程概念
2、進程的狀態與轉換
3、進程式控制制
4、進程組織
5、進程通信:共享存儲系統、消息傳遞系統和管道通信。
6、線程概念與多線程模型
(二)處理機調度
1、調度的基本概念
2、調度時機、切換與過程
3、調度的基本准則
4、調度方式
5、典型調度演算法:先來先服務調度演算法、短作業(短進程、短線程)優先調度演算法優先調度演算法、時間片輪轉調度演算法、優先順序調度演算法、高響應比優先調度演算法和多級反饋隊列調度演算法。
(三)進程同步
1、進程同步的基本概念
2、實現臨界區互斥的基本方法:軟體實現方法和硬體實現方法。
3、信號量
4、管程
5、經典同步問題:生產者-消費者問題、讀者-寫者問題、哲學家進餐問題。
(四)死鎖
1、死鎖的概念
2、死鎖處理策略
3、死鎖預防
4、死鎖避免:系統安全狀態(銀行家演算法)
5、死鎖檢測和解除
三)內存管理
(一)內存管理基礎
1、內存管理概念
程序裝入與鏈接;邏輯地址與物理地址空間;內存保護。
2、交換與覆蓋
3、連續分配管理方式
4、非連續分配管理方式
分頁管理方式;分段管理方式;段頁式管理方式。
(二)虛擬內存管理
1、虛擬內存基本概念
2、請求分頁管理方式
3、頁面置換演算法:最佳置換演算法(OPT)、先進先出置換演算法(FIFO)、最近最少使用置換演算法(LRU)、時鍾置換演算法(CLOCK)。
4、頁面分配策略
5、抖動:抖動現象、工作集。
6、請求分段管理方式
7、請求段頁式管理方式
四)文件管理
(一)文件系統基礎
1、文件概念
2、文件結構:順序文件、索引文件、索引順序文件。
3、目錄結構:文件控制塊和索引節點、單級目錄結構和兩級目錄結構、樹形目錄結構、圖形目錄結構。
4、文件共享
5、文件保護
(二)文件系統實現
1、文件系統層次結構
2、目錄實現
3、文件實現
(三)磁碟組織與管理
1、磁碟的結構
2、磁碟調度演算法
3、磁碟的管理
五)輸入輸出(I/O)管理
(一)I/O管理概述
1、I/O設備
2、I/O管理目標
3、I/O管理功能
4、I/O應用介面
5、I/O控制方式
(二)I/O核心子系統
1、I/O調度概念
2、高速緩存與緩沖區
3、設備分配與回收
4、假離線技術(SPOOLing)
5、出錯處理

Ⅵ 哪個操作系統採用銀行家演算法windows xp linux freebsd unix none of the above

在主窗體mainwindow.cpp文件中添加槽函數on_btn_RadioButton_clicked():
/****槽函數:設置RadioButton1為選中狀態****/
void MainWindow::on_btn_RadioButton_clicked()
{
ui->radioButton->setChecked(true);//設置radioButton為選中狀態

/****設置label顯示「RadioButton1 is Checked!」****/
ui->label->setText("RadioButton1 is Checked!");
}

在主窗體mainwindow.cpp文件中添加槽函數on_btn_CheckBox_clicked():
/****槽函數:顯示被選中的CheckBox****/
void MainWindow::on_btn_CheckBox_clicked()

閱讀全文

與linux銀行家演算法相關的資料

熱點內容
程序員的平凡理想 瀏覽:236
floyd最短路徑演算法c 瀏覽:383
新湖app在哪裡下載 瀏覽:704
計算機圖形學涉及的演算法 瀏覽:370
阿里雲linux一鍵web 瀏覽:26
彈性雲伺服器注冊 瀏覽:170
垃圾程序員寫出垃圾代碼 瀏覽:761
帝國時代java下載 瀏覽:54
數據結構的經典演算法題 瀏覽:197
逍遙安卓多開管理器是干什麼的 瀏覽:917
程序員收玉米一天多少錢 瀏覽:358
程序員很可愛根據哪本小說改編的 瀏覽:987
游戲舊版安卓怎麼玩 瀏覽:266
冗餘單片機 瀏覽:852
cad抽殼命令怎麼用 瀏覽:30
伺服器第一地址怎麼改 瀏覽:499
單片機最小系統電路設計流程圖 瀏覽:670
steam源碼 瀏覽:36
關於對數的運演算法則及公式 瀏覽:782
明星談如何緩解壓力 瀏覽:148