Beispiel #1
0
 private void RetractPage()
 {
     UnmanagedPageList.pageCache.AddHead(this.stackPage);
     this.stackPage   = this.pageList.RemoveHead();
     this.stackBottom = UnmanagedPageList.FirstPageAddr(this.stackPage);
     this.stackTop    = UnmanagedPageList.EndPageAddr(this.stackPage);
     this.stackPtr    = this.stackTop;
 }
            private void SetCursor(UIntPtr pageAddr)
            {
                UIntPtr *preFirstAddr =
                    UnmanagedPageList.FirstPageAddr(pageAddr) - 1;

                if (pageAddr == lastPageStart)
                {
                    this.currentCursor = new PageCursor(preFirstAddr,
                                                        this.lastPageLimit);
                }
                else
                {
                    UIntPtr *endAddr = UnmanagedPageList.EndPageAddr(pageAddr);
                    this.currentCursor = new PageCursor(preFirstAddr, endAddr);
                }
            }
        private void AdvanceWritePage()
        {
            UIntPtr pageAddr;

            if (UnmanagedPageList.pageCache.IsEmpty)
            {
                bool    fCleanPages = true;
                UIntPtr page        = PageManager.EnsurePages(null, (UIntPtr)1,
                                                              PageType.System,
                                                              ref fCleanPages);
                pageAddr = PageTable.PageAddr(page);
            }
            else
            {
                pageAddr = UnmanagedPageList.pageCache.RemoveHead();
            }
            this.pageList.AddTail(pageAddr);
            this.writeCursor =
                new PageCursor(UnmanagedPageList.FirstPageAddr(pageAddr),
                               UnmanagedPageList.EndPageAddr(pageAddr));
        }
Beispiel #4
0
 private void AdvancePage()
 {
     if (this.stackPage != UIntPtr.Zero)
     {
         this.pageList.AddHead(this.stackPage);
     }
     if (UnmanagedPageList.pageCache.IsEmpty)
     {
         bool    fCleanPages = true;
         UIntPtr page        = PageManager.EnsurePages(null, (UIntPtr)1,
                                                       PageType.System,
                                                       ref fCleanPages);
         this.stackPage = PageTable.PageAddr(page);
     }
     else
     {
         this.stackPage = UnmanagedPageList.pageCache.RemoveHead();
     }
     this.stackBottom = UnmanagedPageList.FirstPageAddr(this.stackPage);
     this.stackPtr    = this.stackBottom;
     this.stackTop    = UnmanagedPageList.EndPageAddr(this.stackPage);
 }
        private void AdvanceReadPage()
        {
            if (this.pageList.IsEmpty)
            {
                return;
            }
            if (this.readPage != UIntPtr.Zero)
            {
                UnmanagedPageList.pageCache.AddHead(this.readPage);
            }
            this.readPage = this.pageList.RemoveHead();
            UIntPtr *startPtr = UnmanagedPageList.FirstPageAddr(this.readPage);
            UIntPtr *limitPtr;

            if (this.pageList.IsEmpty)
            {
                limitPtr = this.writeCursor.cursor;
            }
            else
            {
                limitPtr = UnmanagedPageList.EndPageAddr(this.readPage);
            }
            this.readCursor = new PageCursor(startPtr, limitPtr);
        }