📄 lruc.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
namespace WindowsApplication1.classes
{
public class LRUC
{
public List<addInstruction> lla = new List<addInstruction>();
// public Queue<int> qi = new Queue<int>();
public List<int> lruList = new List<int>();
int mm = -1;
int outnu=-1;
int count = 4;
public LRUC()
{
}
public void mekeFifo(instructionProgram lip)
{
int pagenum = lip._pageNumber;
if (findPageNum(pagenum)==true)
{
makeTrue(pagenum,lip);
}
else
{
makeIntrrupt(pagenum,lip);
makeTrueAno(pagenum, lip,outnu);
}
}
public bool findPageNum(int pagenum)
{
bool rs = false;
foreach (fifoProgram lp in pageTable.lf)
{
int pagenumber = lp._pageNumber;
int pagemark = lp._pageMark;
if (pagenum == pagenumber && pagemark == 1)
{
rs = true;
return rs;
}
else
{
continue;
}
}
return rs;
}
//却页中断处理方法
public void makeIntrrupt(int pagenum, instructionProgram lip)
{
if (lruList.Count >= count)
{
int[] ary = lruList.ToArray();
int i = ary[0];
if (lruList.Remove(pagenum))
{
lruList.Add(pagenum);
}
else
{
if(lruList.Remove(i))
lruList.Add(pagenum);
}
foreach (fifoProgram fp in pageTable.lf)
{
if (fp._pageNumber == i)
{
fp._pageMark=0;
mm = fp._memoryNumber;
outnu = fp._pageNumber;
fp._memoryNumber = 0;
continue;
}
else
{
continue;
}
}
foreach (fifoProgram fp in pageTable.lf)
{
if (fp._pageNumber == pagenum)
{
fp._pageMark = 1;
fp._memoryNumber = mm;
continue;
}
else
{
continue;
}
}
}
else
{
foreach (fifoProgram fp in pageTable.lf)
{
if (fp._pageNumber == pagenum)
{
fp._pageMark = 1;
}
}
if (lruList.Remove(pagenum))
{
lruList.Add(pagenum);
}
else
{
lruList.Add(pagenum);
}
}
}
public void makeTrueAno(int pagenum, instructionProgram lip, int tt)
{
if (lip._operateCode.Equals("write"))
{
foreach (fifoProgram fp in pageTable.lf)
{
if (fp._pageNumber == pagenum)
{
fp._ifChange = 1;
}
}
}
if (lruList.Count<count)
{
if (lruList.Remove(pagenum))
{
lruList.Add(pagenum);
}
else
{
lruList.Add(pagenum);
}
addInstruction ai = new addInstruction();
ai._operateCode = lip._operateCode;
ai._outNumber = tt;
ai._pageNumber = lip._pageNumber;
ai._position = makePosition(lip, pagenum);
lla.Add(ai);
}
else
{
if (lruList.Remove(pagenum))
{
lruList.Add(pagenum);
}
else
{
lruList.Add(pagenum);
}
addInstruction ai = new addInstruction();
ai._operateCode = lip._operateCode;
ai._outNumber = tt;
ai._pageNumber = lip._pageNumber;
ai._position = makePosition(lip, pagenum);
lla.Add(ai);
}
}
//处理命中方法
public void makeTrue(int pagenum, instructionProgram lip)
{
//if (qi.Count > 4)
//{
if (lruList.Count <count)
{
if (lruList.Remove(pagenum))
{
lruList.Add(pagenum);
}
else
{
lruList.Add(pagenum);
}
addInstruction ai = new addInstruction();
ai._operateCode = lip._operateCode;
ai._outNumber = -1;
ai._pageNumber = lip._pageNumber;
ai._position = makePosition(lip, pagenum);
lla.Add(ai);
}
else
{
if (lruList.Remove(pagenum))
{
lruList.Add(pagenum);
}
else
{
lruList.Add(pagenum);
}
addInstruction ai = new addInstruction();
ai._operateCode = lip._operateCode;
ai._outNumber = -1;
ai._pageNumber = lip._pageNumber;
ai._position = makePosition(lip, pagenum);
lla.Add(ai);
}
}
public int makePosition(instructionProgram lip, int pagenum)
{
int rs=0;
foreach (fifoProgram lp in pageTable.lf)
{
int pagenumber = lp._pageNumber;
int pagemark = lp._pageMark;
if (pagenum == pagenumber && pagemark == 1)
{
rs = lp._memoryNumber * 128 + lip._unitNumber;
return rs;
}
else
{
continue;
}
}
return rs;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -