private void DrawGridHighlight(int x, int y, Page.STATUS status) { int gridSize = 30; int gridSpace = 5; int gridBaseX = x * gridSize; int gridBaseY = y * gridSize; SolidBrush highlighter = new SolidBrush(Color.LimeGreen); switch (status) { case Page.STATUS.HIT: break; case Page.STATUS.MIGRATION: highlighter.Color = Color.Purple; break; case Page.STATUS.MIGRATIONII: highlighter.Color = Color.Purple; break; case Page.STATUS.PAGEFAULT: highlighter.Color = Color.Red; break; } g.FillRectangle(highlighter, new Rectangle( gridBaseX + (x * gridSpace), gridBaseY, gridSize, gridSize )); }
private void DrawBase(Core core, int windowSize, int dataLength) { /* parse window */ var psudoQueue = new LinkedList <char>(); g.Clear(Color.Black); for (int i = 0; i < dataLength; i++) // length { int psudoCursor = core.pageHistory[i].loc; char data = core.pageHistory[i].data; int psudoTemp = core.psudoTempII[i].refCount; Page.STATUS status = core.pageHistory[i].status; switch (status) { case Page.STATUS.PAGEFAULT: psudoQueue.AddLast(data); break; case Page.STATUS.MIGRATION: psudoQueue.RemoveFirst(); psudoQueue.AddLast(data); break; case Page.STATUS.MIGRATIONII: if (psudoTemp > 0 && psudoTemp < Int32.Parse(tbWindowSize.Text)) { RemoveAt(psudoQueue, psudoTemp); } psudoQueue.AddLast(data); break; } for (int j = 0; j <= windowSize; j++) // height - STEP { if (j == 0) { DrawGridText(i, j, data); } else { DrawGrid(i, j); } } DrawGridHighlight(i, psudoCursor, status); int depth = 1; foreach (char t in psudoQueue) { DrawGridText(i, depth++, t); } } }
public List <Page> GetPageInfo(Page.STATUS status) { List <Page> pages = new List <Page>(); foreach (Page page in pageHistory) { if (page.status == status) { pages.Add(page); } } return(pages); }
private void DrawBase(LFU core, int windowSize, int dataLength, int[] numb) { /* parse window */ var psudoQueue = new List <char>(); g.Clear(Color.Black); for (int i = 0; i < dataLength; i++) // length { int psudoCursor = core.pageHistory[i].loc; char data = core.pageHistory[i].data; Page.STATUS status = core.pageHistory[i].status; switch (status) { case Page.STATUS.PAGEFAULT: psudoQueue.Add(data); break; case Page.STATUS.MIGRATION: psudoQueue.RemoveAt(numb[i]); psudoQueue.Insert(numb[i], data); break; } for (int j = 0; j <= windowSize; j++) // height - STEP { if (j == 0) { DrawGridText(i, j, data); } else { DrawGrid(i, j); } } DrawGridHighlight(i, psudoCursor, status); int depth = 1; foreach (char t in psudoQueue) { DrawGridText(i, depth++, t); } } }
private void DrawBase(Core core, int windowSize, int dataLength) { /* parse window */ var psudoList = new List <char>(); int cursor = 0; List <char> store = new List <char>(); List <int> countsave = new List <int>(); List <bool> reference = new List <bool>(); List <int> recountsave = new List <int>(); g.Clear(Color.Black); for (int i = 0; i < dataLength; i++) // length { int psudoCursor = core.pageHistory[i].loc; char data = core.pageHistory[i].data; Page.STATUS status = core.pageHistory[i].status; Page.STATUS status1 = core.pageHistory[i].status; //fifo if (function == 0) { switch (status) { case Page.STATUS.PAGEFAULT: psudoList.Add(data); break; case Page.STATUS.MIGRATION: psudoList.RemoveAt(cursor); psudoList.Insert(cursor, data); cursor++; if (cursor == windowSize) { cursor = 0; } break; this.tbConsole.Clear(); } } //LRU if (function == 2) { switch (status) { case Page.STATUS.PAGEFAULT: psudoList.Add(data); break; case Page.STATUS.MIGRATION: for (int a = 0; a < psudoList.Count; a++) { int count = 0; for (int b = i; b >= 0; b--) { if (core.pageHistory.ElementAt(b).data == psudoList.ElementAt(a)) { countsave.Insert(a, count); char c = psudoList.ElementAt(a); break; } else { count++; } } } int big = countsave.ElementAt(0); int old = 0; for (int d = 1; d < countsave.Count; d++) { if (big < countsave.ElementAt(d)) { big = countsave.ElementAt(d); old = d; } } psudoList.RemoveAt(old); psudoList.Insert(old, data); countsave.Clear(); break; } } //optimal if (function == 1) { switch (status) { case Page.STATUS.PAGEFAULT: psudoList.Add(data); store.Add(data); break; case Page.STATUS.MIGRATION: for (int a = 0; a < psudoList.Count; a++) { int count = 0; for (int b = store.Count + 1; b < datalist.Count; b++) //store.Count+1 { if (psudoList.ElementAt(a).Equals(datalist.ElementAt(b))) { break; } else { count++; } } countsave.Insert(a, count); } int big = countsave.ElementAt(0); int old = 0; for (int a = 1; a < countsave.Count; a++) { if (big < countsave.ElementAt(a)) { big = countsave.ElementAt(a); old = a; } } psudoList.RemoveAt(old); psudoList.Insert(old, data); store.Add(data); countsave.Clear(); break; case Page.STATUS.HIT: store.Add(data); break; } } //second if (function == 3) { switch (status) { case Page.STATUS.PAGEFAULT: psudoList.Add(data); reference.Add(false); break; case Page.STATUS.MIGRATION: for (int re = 0; re < reference.Count; re++) { if (reference.ElementAt(cursor)) { reference[cursor] = false; cursor++; if (cursor == reference.Count) { cursor = 0; } } else { break; } } psudoList.RemoveAt(cursor); reference[cursor] = false; psudoList.Insert(cursor, data); cursor++; if (cursor == windowSize) { cursor = 0; } break; case Page.STATUS.HIT: int rhit; for (rhit = 0; rhit < psudoList.Count; rhit++) { if (psudoList.ElementAt(rhit) == data) { break; } } reference[rhit] = true; break; } } //LFU if (function == 4) { switch (status) { case Page.STATUS.PAGEFAULT: psudoList.Add(data); recountsave.Add(0); break; case Page.STATUS.MIGRATION: int big = recountsave.ElementAt(0); int old = 0; for (int rec = 1; rec < recountsave.Count; rec++) { if (big > recountsave.ElementAt(rec)) { big = recountsave.ElementAt(rec); old = rec; } } psudoList.RemoveAt(old); recountsave.RemoveAt(old); psudoList.Insert(old, data); recountsave.Insert(old, 0); break; case Page.STATUS.HIT: int rhit; for (rhit = 0; rhit < psudoList.Count; rhit++) { if (psudoList.ElementAt(rhit) == data) { break; } } // recount++; recountsave[rhit] = recountsave[rhit] + 1; break; } } // //MFU if (function == 5) { switch (status) { case Page.STATUS.PAGEFAULT: psudoList.Add(data); recountsave.Add(0); break; case Page.STATUS.MIGRATION: int big = recountsave.ElementAt(0); int old = 0; for (int rec = 1; rec < recountsave.Count; rec++) { if (big < recountsave.ElementAt(rec)) { big = recountsave.ElementAt(rec); old = rec; } } psudoList.RemoveAt(old); recountsave.RemoveAt(old); psudoList.Insert(old, data); recountsave.Insert(old, 0); break; case Page.STATUS.HIT: int rhit; for (rhit = 0; rhit < psudoList.Count; rhit++) { if (psudoList.ElementAt(rhit) == data) { break; } } // recount++; recountsave[rhit] = recountsave[rhit] + 1; break; } } // for (int j = 0; j <= windowSize; j++) // height - STEP { if (j == 0) { DrawGridText(i, j, data); } else { DrawGrid(i, j); } } DrawGridHighlight(i, psudoCursor, status); int depth = 1; foreach (char t in psudoList) { DrawGridText(i, depth++, t); } } }