private Page Refresh(Page page) { MRU.Remove(page); MRU.Add(page); return page; }
public void Save(Page page) { byte[] buffer = new byte[Constants.PAGESIZE]; for(int i = 0; i < buffer.Length; i++) { buffer[i] = (byte) page.Data[i]; } stream.Position = page.FileIndex * Constants.PAGESIZE; stream.Write(buffer, 0, Constants.PAGESIZE); page.PinCount++; page.UltimoAcesso = DateTime.Now.ToFileTimeUtc(); }
private void Load(Page page) { byte[] buffer = new byte[Constants.PAGESIZE]; stream.Position = page.FileIndex * Constants.PAGESIZE; stream.Read(buffer, 0, Constants.PAGESIZE); for(int i = 0; i < buffer.Length; i++) { page.Data[i] = buffer[i]; } page.Dirt = false; page.PinCount=1; page.UltimoAcesso = DateTime.Now.ToFileTimeUtc(); }
public Page this[int index] { get{ if(index > Constants.MAXPAGES-1) throw new IndexOutOfRangeException("O numero maximo de paginas no disco eh "+Constants.MAXPAGES); Page page = LocatePageIndex(index); if(page == null) { if(MRU.Count == Constants.MAXMEMORYPAGES) { if(politica == PoliticaDeSubstituicao.LRU) MRU.Remove(GetLastRecentlyUsed()); else if(politica == PoliticaDeSubstituicao.LRU) MRU.Remove(GetMostRecentlyUsed()); else MRU.Remove(GetRandomPage()); } page = new Page(); page.FileIndex = index; Pages.Add(page); Load(page); } return Refresh(page); } }