資源簡介
模擬段式存儲管理的分配與回收,包括輸入給定的內存大小,進程的個數,每個進程的段數及段大小;當某進程提出申請空間的大小后,顯示能否滿足申請,以及為該進程分配資源后有關內存空間使用的情況。內含word文檔。希望計算機學院的同學下載后不要照抄照搬,在這里發布只是能給你一個啟發,希望對你有好處。

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include
struct?segment??????????????????????????//定義結構體段segment
{
long?capacity; //該段的長度
long?physicaddr; //物理地址
long?realaddr; //該段實際地址
};
struct?segmentTable //定義結構體段表segmentTable
{
segment?segments[10];???????????????//段表中每個段的屬性
char?tableName[50]; //段表名
int?Isdiaoyong; //是否被調度到內存
int?num; //該進程包含的段的數目
long?total; //該進程所占用的存儲空間
};
segmentTable?segmentTables[10];?????????//最多可有十個段表
long?memSize=0; //內存大小
int?segmentTablenum=0; //當前段表數即進程數
long?kongbai=0;
long?baseaddr=0;
void?chuangjian()??????????????????????//創建進程的函數
{
cout< printf(“請輸入要創建的進程名:“);
cin>>segmentTables[segmentTablenum+1].tableName;
printf(“請輸入該進程的段數:“);
cin>>segmentTables[segmentTablenum+1].num;
int?paddr=0;
for(int?j=1;j<=segmentTables[segmentTablenum+1].num;j++)
{
cout<<“請輸入該進程第“< cin>>segmentTables[segmentTablenum+1].segments[j].capacity?;
segmentTables[segmentTablenum+1].segments[j].physicaddr=paddr;
paddr=paddr+segmentTables[segmentTablenum+1].segments[j].capacity;
}
cout< segmentTables[segmentTablenum+1].Isdiaoyong=0;//創建進程后進程并沒有被調用
segmentTables[segmentTablenum+1].total=paddr;
segmentTablenum++;
}
void?xianshi(int?i)???????????????????//顯示進程信息的函數
{
cout< cout<<“名字:“< cout<<“該進程所占用的存儲空間:“< if(segmentTables[i].Isdiaoyong==0)
cout<<“進程狀態:未調用“< else
cout<<“進程狀態:已調用“< cout<<“____________________________________________“< cout<<“段?號????物理始址????內存始址????長度“< for(int?j=1;j<=segmentTables[i].num;j++)
{?????????????//每個進程即段表中對應的段從1開始
cout< if(segmentTables[i].Isdiaoyong==0)
cout< else?
cout< cout< }
cout<<“____________________________________________“< }
void?diaodu()???????????????//調度進程的函數
{
cout< cout<<“輸入要調度的進程:p“;
int?n;
cin>>n;
if(n<=0||n>segmentTablenum)//調度的進程要是創建好的
{
cout<<“請求的段表不存在!“< cout<<“請重新“;
diaodu();
}
else?if(segmentTables[n].Isdiaoyong==1)
cout<<“操作失敗,該進程已經被調入到內存!“< else?if(segmentTables[n].total>memSize-kongbai)
cout<<“內存空間不足,無法調度!“< else
{
for(int?j=1;j<=segmentTables[n].num;j++)
{
segmentTables[n].segments[j].realaddr=segmentTables[n].segments[j].physicaddr+kongbai;
}
kongbai=kongbai+segmentTables[n].total;
segmentTables[n].Isdiaoyong?=1;?????//進程調度完成
cout<<“調度后的結果是:“< xianshi(n);???????//進程調度后顯示相關的信息
}
}
int?main()
{
int?p;
cout<<“???????****************************************************************“< cou
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????4382??2010-01-20?19:58??模擬段式存儲管理的分配與回收\模擬段式存儲管理的分配與回收.txt
?????文件?????230912??2010-01-20?19:54??模擬段式存儲管理的分配與回收\報告.doc
?????文件???????4382??2010-01-20?19:55??模擬段式存儲管理的分配與回收\模擬段式存儲管理的分配與回收.cpp
?????目錄??????????0??2010-01-20?20:39??模擬段式存儲管理的分配與回收
-----------?---------??----------?-----??----
???????????????239676????????????????????4
- 上一篇:山東大學操作系統實驗1-8
- 下一篇:小煩內存搜索dll
評論
共有 條評論