?? memory.cpp
字號:
// Memory.cpp: implementation of the CMemory class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "os.h"
#include "Memory.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMemory::CMemory(CShowosDlg * dlg)
{
int i=0;
for(i=0;i<64;i++){//初始化模擬內存(memory),并建立idle進程(閑逛進程)
memory.index[i]=0;
}
for(i=0;i<64;i++){
for(int j=0;j<8;j++){
memory.usememory[i][j]=0;
}
}
for(i=1;i<11;i++){
memory.pcb[i].full=FALSE;
}
///////////////////////////////////////////////////////////////////////////
memory.pcb[0].full=TRUE; //建立idle進程(閑逛進程)
memory.pcb[0].pcb.ID=99999;
memory.pcb[0].pcb.idictaterun=0;
memory.pcb[0].pcb.istate=1;
memory.pcb[0].pcb.strname="idle";
memory.pcb[0].pcb.pdictate[0].strename="idle";
for(i=0;i<8;i++){
memory.pcb[0].pcb.isavereg[i]=0;
}
memory.pcb[0].pcb.idictatenum=1;
memory.pcb[0].pcb.pdictate[0].strename="idle";
//////////////////////////////////////////////////////////////////////////
pdlg=dlg;
A=B[0]=B[1]=C[0]=C[1]=0; //初始化設備,標為未用
}
CMemory::~CMemory()
{
}
//////////////////////////////////////////////////////////////////////////
//創建指令
///////////////////////////////////////////////////////////////////////////////
Sdictate CMemory::CreateOtherdictate(CString str){//創建其他進程指令
Sdictate dic;
dic.strename=str;
dic.iparstate[0]=0; //無參數
return dic;
}
///////////////////////////////////////////////////////////////////////////////
Sdictate CMemory::CreateAdddictate(CString str1,CString str2){//創建Add進程指令
Sdictate dic;
dic.strename="add";
dic.iparstate[0]=2; //有兩個參數
dic.iparstate[1]=2; //第一個參數為CString
dic.iparstate[2]=2; //第二個參數為CString
dic.strpar[0]=str1; //第一個參數
dic.strpar[1]=str2; //第二個參數
return dic;
}
////////////////////////////////////////////////////////////////////////////////
Sdictate CMemory::CreateAdddictate(CString str1,int i){//創建Add進程指令
Sdictate dic;
dic.strename="add";
dic.iparstate[0]=2; //有二個參數
dic.iparstate[1]=2; //第一個參數為CString
dic.iparstate[2]=1; //第二個參數為int
dic.strpar[0]=str1; //第一個參數
dic.ipar[0]=i; //第二個參數
return dic;
}
////////////////////////////////////////////////////////////////////////////////
Sdictate CMemory::CreateSubdictate(CString str1,CString str2){//創建Sub進程指令
Sdictate dic;
dic.strename="sub";
dic.iparstate[0]=2; //有兩個參數
dic.iparstate[1]=2; //第一個參數為CString
dic.iparstate[2]=2; //第二個參數為CString
dic.strpar[0]=str1; //第一個參數
dic.strpar[1]=str2; //第二個參數
return dic;
}
////////////////////////////////////////////////////////////////////////////////
Sdictate CMemory::CreateSubdictate(CString str1,int i){//創建Sub進程指令
Sdictate dic;
dic.strename="sub";
dic.iparstate[0]=2; //有二個參數
dic.iparstate[1]=2; //第一個參數為CString
dic.iparstate[2]=1; //第二個參數為int
dic.strpar[0]=str1; //第一個參數
dic.ipar[0]=i; //第二個參數
return dic;
}
////////////////////////////////////////////////////////////////////////////////
Sdictate CMemory::CreateMovdictate(CString str1,CString str2){//創建Mov進程指令
Sdictate dic;
dic.strename="mov";
dic.iparstate[0]=2; //有兩個參數
dic.iparstate[1]=2; //第一個參數為CString
dic.iparstate[2]=2; //第二個參數為CString
dic.strpar[0]=str1; //第一個參數
dic.strpar[1]=str2; //第二個參數
return dic;
}
////////////////////////////////////////////////////////////////////////////////
Sdictate CMemory::CreateMovdictate(CString str1,int i){//創建Add進程指令
Sdictate dic;
dic.strename="mov";
dic.iparstate[0]=2; //有二個參數
dic.iparstate[1]=2; //第一個參數為CString
dic.iparstate[2]=1; //第二個參數為int
dic.strpar[0]=str1; //第一個參數
dic.ipar[0]=i; //第二個參數
return dic;
}
////////////////////////////////////////////////////////////////////////////////
Sdictate CMemory::CreateMuldictate(CString str){//創建Mul進程指令
Sdictate dic;
dic.strename="mul";
dic.iparstate[0]=1; //有一個參數
dic.iparstate[1]=2; //第一個參數為CString
dic.strpar[0]=str; //第一個參數
return dic;
}
////////////////////////////////////////////////////////////////////////////////
Sdictate CMemory::CreateDivdictate(CString str){//創建Div進程指令
Sdictate dic;
dic.strename="div";
dic.iparstate[0]=1; //有一個參數
dic.iparstate[1]=2; //第一個參數為CString
dic.strpar[0]=str; //第一個參數
return dic;
}
//////////////////////////////////////////////////////////////////////////
//創建進程子函數
/////////////////////////////////////////////////////////////////////////
Sprocess CMemory::CreateFile(){ //創建創建文件進程
Sprocess spr;
spr.idictatenum=3; //指令個數
spr.idictaterun=0; //執行位置
spr.iequipment=0; //是否分配設備
for(int i=0;i<8;i++){ //保存設計
spr.isavereg[i]=0;
}
spr.istate=1; //進程狀態:就緒
spr.waittime=0; //等待時間
spr.strname="Create new File"; //進程名
CString a="ax",b="ax";
spr.pdictate[0]=CreateAdddictate(a,12);
a="bx";
spr.pdictate[1]=CreateMovdictate(a,b);
spr.pdictate[2]=CreateMuldictate(a);
return spr;
}
/////////////////////////////////////////////////////////////////////////
Sprocess CMemory::Createcopy(){ //創建拷貝文件進程
Sprocess spr;
spr.idictatenum=3; //指令個數
spr.idictaterun=0; //執行位置
spr.iequipment=0; //是否分配設備
for(int i=0;i<8;i++){ //保存設計
spr.isavereg[i]=0;
}
spr.istate=1; //進程狀態:就緒
spr.waittime=0; //等待時間
spr.strname="Copy File"; //進程名
CString a="copy file",b="needinput";
spr.pdictate[0]=CreateOtherdictate(a);
spr.pdictate[1]=CreateOtherdictate(a);
spr.pdictate[2]=CreateOtherdictate(a);
return spr;
}
/////////////////////////////////////////////////////////////////////////
Sprocess CMemory::Cteatedelete(){ //創建刪除文件進程
Sprocess spr;
spr.idictatenum=1; //指令個數
spr.idictaterun=0; //執行位置
spr.iequipment=0; //是否分配設備
for(int i=0;i<8;i++){ //保存設計
spr.isavereg[i]=0;
}
spr.istate=1; //進程狀態:就緒
spr.waittime=0; //等待時間
spr.strname="Delete File"; //進程名
CString a="Delete file";
spr.pdictate[0]=CreateOtherdictate(a);
return spr;
}
/////////////////////////////////////////////////////////////////////////
Sprocess CMemory::Cteatemove(){ //創建移動文件進程
Sprocess spr;
spr.idictatenum=3; //指令個數
spr.idictaterun=0; //執行位置
spr.iequipment=0; //是否分配設備
for(int i=0;i<8;i++){ //保存設計
}
spr.istate=1; //進程狀態:就緒
spr.waittime=0; //等待時間
spr.strname="Move File"; //進程名
CString a="Move file",b="needinput";
spr.pdictate[0]=CreateOtherdictate(a);
spr.pdictate[1]=CreateOtherdictate(a);
spr.pdictate[2]=CreateOtherdictate(a);
return spr;
}
/////////////////////////////////////////////////////////////////////////
Sprocess CMemory::Cteatetype(){ //創建顯示文件進程
Sprocess spr;
spr.idictatenum=2; //指令個數
spr.idictaterun=0; //執行位置
spr.iequipment=0; //是否分配設備
for(int i=0;i<8;i++){ //保存設計
spr.isavereg[i]=0;
}
spr.istate=1; //進程狀態:就緒
spr.waittime=0; //等待時間
spr.strname="Type File"; //進程名
CString a="Type file";
spr.pdictate[0]=CreateOtherdictate(a);
spr.pdictate[1]=CreateOtherdictate(a);
return spr;
}
/////////////////////////////////////////////////////////////////////////
Sprocess CMemory::Cteateedit(){ //創建編輯文件進程
Sprocess spr;
spr.idictatenum=3; //指令個數
spr.idictaterun=0; //執行位置
spr.iequipment=0; //是否分配設備
for(int i=0;i<8;i++){ //保存設計
spr.isavereg[i]=0;
}
spr.istate=1; //進程狀態:就緒
spr.waittime=0; //等待時間
spr.strname="Teat File"; //進程名
CString a="Teat file";
spr.pdictate[0]=CreateOtherdictate(a);
spr.pdictate[1]=CreateOtherdictate(a);
spr.pdictate[2]=CreateOtherdictate(a);
return spr;
}
///////////////////////////////////////////////////////////////////////////
Sprocess CMemory::Cteatechange(){ //創建改變文件屬性進程
Sprocess spr;
spr.idictatenum=1; //指令個數
spr.idictaterun=0; //執行位置
spr.iequipment=0; //是否分配設備
for(int i=0;i<8;i++){ //保存設計
spr.isavereg[i]=0;
}
spr.istate=1; //進程狀態:就緒
spr.waittime=0; //等待時間
spr.strname="Change File"; //進程名
CString a="Change file";
spr.pdictate[0]=CreateOtherdictate(a);
return spr;
}
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
Sprocess CMemory::Cteatemakdir(){ //創建建立目錄進程
Sprocess spr;
spr.idictatenum=1; //指令個數
spr.idictaterun=0; //執行位置
spr.iequipment=0; //是否分配設備
for(int i=0;i<8;i++){ //保存設計
spr.isavereg[i]=0;
}
spr.istate=1; //進程狀態:就緒
spr.waittime=0; //等待時間
spr.strname="Cteatemakdir"; //進程名
CString a="cteatemakdir";
spr.pdictate[0]=CreateOtherdictate(a);
return spr;
}
/////////////////////////////////////////////////////////////////////////
Sprocess CMemory::Cteatechadir(){ //創建改變目錄路徑進程
Sprocess spr;
spr.idictatenum=1; //指令個數
spr.idictaterun=1; //執行位置
spr.iequipment=0; //是否分配設備
for(int i=0;i<8;i++){ //保存設計
spr.isavereg[i]=0;
}
spr.istate=1; //進程狀態:就緒
spr.waittime=0; //等待時間
spr.strname="Change dir"; //進程名
CString a="change dir",b="needinput";
spr.pdictate[0]=CreateOtherdictate(a);
return spr;
}
/////////////////////////////////////////////////////////////////////////
Sprocess CMemory::Cteaterdir(){ //創建刪除空目錄進程
Sprocess spr;
spr.idictatenum=1; //指令個數
spr.idictaterun=0; //執行位置
spr.iequipment=0; //是否分配設備
for(int i=0;i<8;i++){ //保存設計
spr.isavereg[i]=0;
}
spr.istate=1; //進程狀態:就緒
spr.waittime=0; //等待時間
spr.strname="Delete dir"; //進程名
CString a="cteater dir";
spr.pdictate[0]=CreateOtherdictate(a);
return spr;
}
/////////////////////////////////////////////////////////////////////////
Sprocess CMemory::Cteatedeldir(){ //創建刪除目錄進程
Sprocess spr;
spr.idictatenum=1; //指令個數
spr.idictaterun=0; //執行位置
spr.iequipment=0; //是否分配設備
for(int i=0;i<8;i++){ //保存設計
spr.isavereg[i]=0;
}
spr.istate=1; //進程狀態:就緒
spr.waittime=0; //等待時間
spr.strname="Delete dir"; //進程名
CString a="delete";
spr.pdictate[0]=CreateOtherdictate(a);
return spr;
}
/////////////////////////////////////////////////////////////////////////
Sprocess CMemory::Cteatefidisk(){ //創建磁盤分區命令進程
Sprocess spr;
spr.idictatenum=1; //指令個數
spr.idictaterun=0; //執行位置
spr.iequipment=0; //是否分配設備
for(int i=0;i<8;i++){ //保存設計
spr.isavereg[i]=0;
}
spr.istate=1; //進程狀態:就緒
spr.waittime=0; //等待時間
spr.strname="FiDisk"; //進程名
CString a="fidisk";
spr.pdictate[0]=CreateOtherdictate(a);
return spr;
}
//////////////////////////////////////////////////////////////////////////
Sprocess CMemory::Cteateother(CString name){ //創建其他命令進程
Sprocess spr;
if(!name.Compare("needa")||!name.Compare("needb")||!name.Compare("needc")||!name.Compare("needinput")){
spr.idictatenum=1; //指令個數
spr.idictaterun=0; //執行位置
spr.iequipment=0; //是否分配設備
for(int i=0;i<8;i++){ //保存設計
spr.isavereg[i]=0;
}
spr.istate=1; //進程狀態:就緒
spr.waittime=0; //等待時間
spr.strname=name; //進程名
CString a=name;
spr.pdictate[0]=CreateOtherdictate(a);
return spr;
}
else{
spr.idictatenum=10; //指令個數
spr.idictaterun=0; //執行位置
spr.iequipment=0; //是否分配設備
for(int i=0;i<8;i++){ //保存設計
spr.isavereg[i]=0;
}
spr.istate=1; //進程狀態:就緒
spr.waittime=0; //等待時間
spr.strname=name; //進程名
CString a=name,b="ax";
spr.pdictate[0]=CreateAdddictate(b,21);
b="bx";
spr.pdictate[1]=CreateAdddictate(b,20);
b="cx";
spr.pdictate[2]=CreateAdddictate(b,10);
b="cs";
spr.pdictate[3]=CreateAdddictate(b,30);
b="ds";
spr.pdictate[4]=CreateAdddictate(b,15);
b="bx";
spr.pdictate[5]=CreateAdddictate(b,13);
b="ax";
spr.pdictate[6]=CreateAdddictate(b,21);
b="cx";
spr.pdictate[7]=CreateMuldictate(b);
b="cx";
spr.pdictate[8]=CreateSubdictate(b,10);
b="cx";
spr.pdictate[9]=CreateDivdictate(b);
return spr;
}
}
/////////////////////////////////////////////////////////////////////
//創建進程
/////////////////////////////////////////////////////////////////////
bool CMemory::Seekroom(int &index,int room) //在主存中找room大小空間,index為首地址索引號
{
int big,i;
big=0;
for(i=0;i<64;i++)
{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -