資源簡介
實驗二 存儲管理
一、目的和要求
1. 實驗目的
(1)掌握時間片輪換的進程調度算法;
(2)掌握帶優先級的進程調度算法;
(3)選用面向對象的編程方法。
2、實驗學時:2學時
3、實驗要求
(1)自定義PCB的數據結構;
(2)使用帶優先級的時間片輪轉法調度進程,每運行一個時間片,優先級減半。
(3)命令集
A)create 隨機創建進程,進程的優先級與所需要的時間片隨機決定;
B)ps 查看當前進程狀態
C)sleep 命令將進程掛起
D)kill 命令殺死進程
E)quit命令退出
二、實驗內容
根據教師指定的實驗課題,完成設計、編碼、測試工作。

代碼片段和文件信息
#include?
#include?
#include
#include
#include?
using?namespace?std;
int?YeCount=100;???//內存物理塊數,0未使用,1已使用???
int?Use[100]={0};???//={0}
int?UnUse=100;
class?Course{
public:
void?Init();
void?AssignYe(Course?*TempC);
void?FreeYe(Course?*TempC);
void?PrintResult(Course?*TempC);
void?ShowCourse();
string?name;
????int?number;
int?Ye[100];?????//由0開始
????Course?*next;
};
void?Course::Init()
{
srand((unsigned)time(NULL));?????//用系統時間當種子,對隨機函數初始化
int?c=rand()%50+1;???????????????//判斷已用物理塊數
for?(int?i=1;i<=c;i++)
{
int?m=rand()%100;???????????????//不包括100以內的隨機數
Use[m]=1;
UnUse--;
}
}
void?Course::AssignYe(Course?*TempC)
{
string?CourseName;
int?YeNumberm;
Course?*TempP;
bool?flag;
m=0;
flag=true;
cout<<“請輸入進程名字:“;
cin>>CourseName;
cout<<“請輸入頁數:“;
cin>>YeNumber;
TempP=new?Course;
TempP->name=CourseName;
TempP->number=YeNumber;
????for?(int?i=0;i {
if(Use[i]==0)
{
Use[i]=1;
TempP->Ye[m]=i;
m++;
UnUse--;
YeNumber--;
if((UnUse==0)&&(YeNumber!=0))
{
cout<<“申請的頁數已超過可分配的頁數!“<<“\n“;
flag=false;
break;
}
if(YeNumber==0)
break;
}
}
if(flag==true)
{
if((TempC!=NULL)&&(TempC->next==NULL))
{
TempC->next=new?Course;
*TempC->next=*TempP;
TempC->next->next=NULL;
cout<<“申請進程成功!“<<“\n“;
}
else
{
while(TempC->next!=NULL)
{
TempC=TempC->next;
}
TempC->next=new?Course;
*TempC->next=*TempP;
TempC->next->next=NULL;
cout<<“申請進程成功!“<<“\n“;
}
}
}
void?Course::FreeYe(Course?*TempC)
{
string?CourseName;
int?m;
Course?*TempP*HeadP;
bool?flag=false;
m=1;
cout<<“請輸入釋放進程名字:“;
cin>>CourseName;
HeadP=TempC;
TempP=TempC;
TempC=TempC->next;
while(TempC!=NULL)
{
if?(TempC->name==CourseName)
{
if?(HeadP!=TempP)
{
TempP->next=TempC->next;
UnUse=UnUse+TempC->number;
for(int?i=0;inumber;i++)
Use[TempC->Ye[i]]=0;
delete?TempC;
flag=true;
break;
}
else
{
TempP->next=TempC->next;
UnUse=UnUse+TempC->number;
for(int?i=0;inumber;i++)
Use[TempC->Ye[i]]=0;
delete?TempC;
flag=true;
break;
}
}
TempP=TempC;
TempC=TempC->next;
}
if(flag==false)
{
cout<<“無法釋放進程!“<<“\n“;
}
else
cout<<“釋放進程成功!“<<“\n“;
}
//輸出內存物理塊分配情況
void?Course::PrintResult(Course?*TempC)???
{???
int?i=0;
cout<<“\n內存物理塊分配情況:\n“;
Course?*TempP;
TempP=TempC->next;
cout<<“各進程信息:“;
cout<<“\n進程名稱\t進程頁數\t所用物理塊\n“;
while(TempP)
{
cout<name<<“\t\t“<number<<“\t\t“;
for(i=0;inumber;i++)
cout<Ye[i]<<“?“;
cout<<“\n“;
TempP=TempP->next;
}
}
//顯示內存塊使用情況???
void?Course::ShowCourse()
{
int?i=0;
cout<<“\n內存塊使用情況:\n“;
for(i=0;i {
cout< if(i%10==9)
cout<<“\n“;
}
co
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????4449??2011-12-03?16:06??存儲管理.cpp
?????文件??????86528??2012-01-15?12:16??存儲管理——基本分頁存儲管理.doc
-----------?---------??----------?-----??----
????????????????90977????????????????????2
評論
共有 條評論