protected virtual void WritePageToMemory(Page page) { StorageReader.Seek(page.Address, SeekOrigin.Begin); StorageReader.Write(page.Data, 0, Constants.PAGE_SIZE); if (PageWrite != null) PageWrite(this, new LRUCacheEventArgs(page)); }
protected virtual Page AllocateNewPage(Address address) { Int64 pageAddress; if (FreePages.Count > 0) pageAddress = FreePages.Dequeue(); else pageAddress = NextPageAddress; AddressTranslationTable.Add(address, pageAddress); Page newPage = new Page(Address.NewAddress(), pageAddress, new Byte[Constants.PAGE_SIZE]); PageTranslationTable.Add(pageAddress, newPage); return newPage; }
protected virtual Page LoadPageFromMemory(Int64 offset) { Byte[] data = new Byte[Constants.PAGE_SIZE]; StorageReader.Seek(offset - offset % Constants.PAGE_SIZE, SeekOrigin.Begin); StorageReader.Read(data, 0, Constants.PAGE_SIZE); Page page = new Page(Address.NewAddress(), offset, data); if (PageFault != null && !DisablePageFault) PageFault(this, new LRUCacheEventArgs(page)); return page; }
public LRUCacheEventArgs(Page page) { }