📄 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.isavereg[i]=0;
}
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 + -