Ejemplo n.º 1
0
 private Page Refresh(Page page)
 {
     MRU.Remove(page);
     MRU.Add(page);
     return page;
 }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
 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();
 }
Ejemplo n.º 4
0
        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);
            }
        }