資源簡介
用c語言實現了操作系統的銀行家算法,功能比較全面,注釋很豐富。有多種判錯機制,幾乎沒有崩潰的情況。內附課設報告流程圖
編輯軟件為codeblocks.

代碼片段和文件信息
#include
#include
#include
#include?
#include?
#include?
#include?
#include?
#include
#include?
#include?
#define?n?3????????????????????????????????????????//進程的個數
#define?m?5?????????????????????????????????//資源的種類數
#define?source?????20???????????????????????????????//定義系統給定的每種資源的總量
#define?FALSE?0????????????????????????????????????//布爾變量
#define?TRUE???1
int?semid[m];??????????????????????????????????????//定義m個信號量標志符
/************全局數據結構的定義**********/
int?Resource[m];???????????????????????????????????//系統中每種資源的總量
int?*Available[m];?????????????????????????????????//沒有分配的每種資源的總量
int?Work[m];?????????????????????????????????????//長度為m的工作向量
int?Finish[n];?????????????????????????????????????//長度為n的工作向量
int?a[n];?????????????????????????????????????????//安全序列
int?flag?=?0;??????????????????????????????????????//定義全局變量,用于確定系統是否是安全的
int?availableid[m];????????????????????????????????//定義共享內存的虛擬地址(針對系統可利用的資源)
/**************************************/
/***********進程控制塊的定義************/
typedef?struct
{
char?name[10];????????????????????????????//進程名(最長為10個字母)
int?id;?????????????????????????????????????//進程ID號
char?statue;???????????????????????????????//進程狀態(r:為處于臨界區)(f:為處于退出區)
int?Need[m];???????????????????????????????//每個進程對每種資源的最大需求
int?Allocation[m];??????????????????????????//當前分配情況
int?Request[m];????????????????????????????//定義了進程對資源的請求情況
}?Pcb;
Pcbp[n];???????????????????????????????????????//聲明一個存儲進程的結構體數組
/**************************************/
/*****************函數聲明*************/
int?Init_Resource();????????????????????????????//初始化系統提供的各種資源的總量
int?Create_Process();???????????????????????????//創建進程并實現信號量機制的資源分配
int?Create_Semaphore();????????????????????????//創建信號量
int?Semaphore_P(intsem_id);????????????????????//信號量的P操作
int?Semaphore_V(intsem_id);????????????????????//信號量的V操作
void?SafeCheck();??????????????????????????????//安全性檢測算法
int?Share_Memory();???????????????????????????//共享內存的函數
int?Rand_Distribution();????????????????????????//隨機分配資源
/************************************/
/***初始化系統提供的各種資源的總量****/
int?Init_Resource()
{
int?i?k?j;
for(i?=?0;?i?{
Resource[i]?=?source;?????????????????????//每種資源給定的系統值的大小
}
//以下是輸出系統給定的資源總量到屏幕上(結構化輸出)
printf(“系統給每個資源的總量為:\?n“);
for(k?=?0;?k?{
printf(“資源%d\t“?k);
}
printf(“\?n“);
for(j?=?0;?j?{
printf(“%d\t“?Resource[j]);
}
printf(“\?n“);
return?0;
}
/***********************************/
/***定義一個內存共享(可利用資源)***/
int?Share_Memory()
{
int?j;
for(j?=?0;?j?{
availableid[j]?=?shmget(IPC_PRIVATE?sizeof(int)?*?(2?*?m)IPC_CREAT?|?0666);
}
for(j?=?0;?j?{
Available[j]?=?(int*)?shmat(availableid[j]?0?0);
*Available[j]?=?Resource[j];??????????????????????????//初始時沒有分配的每種資源的總量
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1094??2018-07-04?09:21??123\123.cbp
?????文件????????350??2018-07-08?12:52??123\123.depend
?????文件????????321??2018-07-08?13:20??123\123.layout
?????文件?????976813??2018-07-04?22:37??123\bin\Debug\123.exe
?????文件??????12763??2018-07-02?09:44??123\main.c
?????文件???????7341??2018-07-04?09:24??123\main.cpp
?????文件??????27788??2018-07-04?22:37??123\obj\Debug\main.o
?????文件?????478044??2018-07-08?13:14??123\操作系統課設流程圖.docx
?????目錄??????????0??2018-07-08?11:29??123\bin\Debug
?????目錄??????????0??2018-07-08?11:29??123\obj\Debug
?????目錄??????????0??2018-07-08?11:29??123\bin
?????目錄??????????0??2018-07-08?11:29??123\obj
?????目錄??????????0??2018-07-08?13:20??123
-----------?---------??----------?-----??----
??????????????1504514????????????????????13
評論
共有 條評論