public Page.STATUS FIFO(char data) { Page newPage; PageRef refTemp = new PageRef(); refTemp.refCount = 0; if (this.frame_window.Any <Page>(x => x.data == data)) { newPage.pid = Page.CREATE_ID++; newPage.data = data; newPage.status = Page.STATUS.HIT; this.hit++; int i; for (i = 0; i < this.frame_window.Count; i++) { if (this.frame_window.ElementAt(i).data == data) { break; } } newPage.loc = i + 1; } else { newPage.pid = Page.CREATE_ID++; newPage.data = data; if (frame_window.Count >= p_frame_size) { newPage.status = Page.STATUS.MIGRATION; this.frame_window.RemoveFirst(); cursor = p_frame_size; this.migration++; this.fault++; } else { newPage.status = Page.STATUS.PAGEFAULT; cursor++; this.fault++; } newPage.loc = cursor; frame_window.AddLast(newPage); } pageHistory.Add(newPage); psudoTempII.Add(refTemp); return(newPage.status); }
public Page.STATUS Lru(char data) { Page newPage; PageTime timeTemp = new PageTime(); PageRef refTemp = new PageRef(); if (this.frame_window.Any <Page>(x => x.data == data)) { newPage.pid = Page.CREATE_ID++; newPage.data = data; newPage.status = Page.STATUS.HIT; this.hit++; int i; for (i = 0; i < this.frame_window.Count; i++) { if (this.frame_window.ElementAt(i).data == data) { notUsedTime.ElementAt(i).notUsedTime = 0; refTemp.refCount = -2; break; } } for (int n = 0; n < frame_window.Count; n++) { notUsedTime.ElementAt(n).notUsedTime++; } newPage.loc = i + 1; } else { newPage.pid = Page.CREATE_ID++; newPage.data = data; if (frame_window.Count >= p_frame_size) { newPage.status = Page.STATUS.MIGRATION; refTemp.refCount = 0; int i = searchLongestTime(notUsedTime); if (i < 1) { frame_window.RemoveFirst(); notUsedTime.RemoveFirst(); cursor = p_frame_size; this.migration++; this.fault++; } else { newPage.status = Page.STATUS.MIGRATIONII; refTemp.refCount = i; RemoveAt(frame_window, i); RemoveAt(notUsedTime, i); cursor = p_frame_size; this.migration++; this.fault++; } } else { newPage.status = Page.STATUS.PAGEFAULT; refTemp.refCount = -1; cursor++; this.fault++; } newPage.loc = cursor; timeTemp.notUsedTime = 0; frame_window.AddLast(newPage); notUsedTime.AddLast(timeTemp); for (int i = 0; i < notUsedTime.Count; i++) { notUsedTime.ElementAt(i).notUsedTime++; } } pageHistory.Add(newPage); psudoTempII.Add(refTemp); return(newPage.status); }
public Page.STATUS Opt(char[] dataArr, int n) { Page newPage; PageRef refTemp = new PageRef(); if (this.frame_window.Any <Page>(x => x.data == dataArr[n])) { newPage.pid = Page.CREATE_ID++; newPage.data = dataArr[n]; newPage.status = Page.STATUS.HIT; refTemp.refCount = -2; this.hit++; int i; for (i = 0; i < this.frame_window.Count; i++) { if (this.frame_window.ElementAt(i).data == dataArr[n]) { break; } } newPage.loc = i + 1; } else { newPage.pid = Page.CREATE_ID++; newPage.data = dataArr[n]; if (frame_window.Count >= p_frame_size) { if (IsEquals(frame_window, dataArr)) { newPage.status = Page.STATUS.MIGRATIONII; // 현재 큐에 존재하는 데이터이면서 쿼리 스트링에서 가장 먼 데이터를 찾음 // 그리고 큐에서 해당 인덱스를 삭제함 int k = Predict(this.frame_window, dataArr); RemoveAt(this.frame_window, k); refTemp.refCount = k; cursor = p_frame_size; this.migration++; this.fault++; } else { newPage.status = Page.STATUS.MIGRATION; refTemp.refCount = 0; this.frame_window.RemoveFirst(); cursor = p_frame_size; this.migration++; this.fault++; } } else { newPage.status = Page.STATUS.PAGEFAULT; refTemp.refCount = -1; cursor++; this.fault++; } newPage.loc = cursor; frame_window.AddLast(newPage); } pageHistory.Add(newPage); psudoTempII.Add(refTemp); return(newPage.status); }