/***************************************************************** * * Constructor takes in a page entry and copies the process id, segment * and page number over. It sets frame number to 0 by default. * ****************************************************************/ public MFrame(ProcessPage p) { this.frameNumber = 0; this.processID = p.ProcessID; this.segment = p.Segment; this.pageNumber = p.PageNumber; }
/********************************************************************* * * This method loops through the text and data sizes, subtracting one * page size each time until it reaches 0 bytes left and creates a table * with each one, making sure to keep track of the page number properly * by seperating the text segments from the data segments. * *********************************************************************/ public void SetPages() { int tempText = text; int tempData = data; ProcessPage page; // loop through text segment while (tempText > 0) { // creates a new page page = new ProcessPage(); tempText -= PAGE_SIZE; // if its not the first page, add one to the previous page number if (pages.Count > 0) { int last = pages[pages.Count - 1].PageNumber; page.PageNumber = last + 1; } page.ProcessID = processID; page.Segment = "Text"; // add to list of pages pages.Add(page); } // loop through data segment while (tempData > 0) { // create new page page = new ProcessPage(); tempData -= PAGE_SIZE; // if it is not the first data page then add one to the previous page number if (pages.Count > 0 && !pages.Last().Segment.Equals("Text")) { int last = pages[pages.Count - 1].PageNumber; page.PageNumber = last + 1; } page.ProcessID = processID; page.Segment = "Data"; // add to list of pages pages.Add(page); } }