Comments
Loading Dream Comments...
You must be logged in to write a comment - Log In
ArtistA beautiful purple-haired ragdoll wearing a long purple velvet ankle-length dress with flouncy sleeves and purple suede high heels. Around her are many purple and green circles.
// This article is under construction! :)
// Define some macros
PageTableEntry <:: (= lba:32; pgfrmseg:16; priorLRU:32; nextLRU:32; adregchain:32; flagbits:8; filler:8 =);
SystemGlobalSegment <:: (= framecount:16; swapEBX:32; LRUhead:32 =); // GS segment
pagetable: 32768 # PageTableEntry (0, 0, 0, 0, 0, 0, 0); // (was 4096) Initialised to 0's at boot
// The page table will be loaded from the GHOST of each active User when their first thread begins to run
// Each page table entry uses 20 bytes (was 16) and resides in extended memory
// The actual page frames also occupy extended memory, using 32K bytes each
// Hence a 1GB RAM will support about 32,000 page frames
// The adregchain is a circular list of all address registers which point to this page
// They will be NULLified when the page is swapped out to prevent dangling refs
// Reg usage: EBX points to current page table entry, ESI to previous, EDI to next
{_ // Begin ASM block
NEWPF: _PROC
_MOV EBX.nextLRU,GS:[LRUhead];
_MOV GS:[LRUhead],EBX;
_MOV EBX.priorLRU,0;
_MOV EBX.lba,lbaparam;
_CALL READDISK;
_RET;
DELETEPF: _PROC
_CALL CKPT;
_MOV ESI,EBX.priorLRU;
_MOV EDI,EBX.nextLRU;
_MOV ESI.nextLRU,EDI;
_CMP EDI,0;
_JNZ L1;
_MOV GS:[swapEBX], ESI;
L1: _MOV EDI.priorLRU,ESI;
_RET;
_}; // End ASM block
// *** To be continued :) ***