Ejemplo n.º 1
0
        private void DrawGridHighlight(int x, int y, Page.STATUS status)
        {
            int gridSize  = 30;
            int gridSpace = 5;
            int gridBaseX = x * gridSize;
            int gridBaseY = y * gridSize;

            SolidBrush highlighter = new SolidBrush(Color.LimeGreen);

            switch (status)
            {
            case Page.STATUS.HIT:
                break;

            case Page.STATUS.MIGRATION:
                highlighter.Color = Color.Purple;
                break;

            case Page.STATUS.MIGRATIONII:
                highlighter.Color = Color.Purple;
                break;

            case Page.STATUS.PAGEFAULT:
                highlighter.Color = Color.Red;
                break;
            }

            g.FillRectangle(highlighter, new Rectangle(
                                gridBaseX + (x * gridSpace),
                                gridBaseY,
                                gridSize,
                                gridSize
                                ));
        }
Ejemplo n.º 2
0
        private void DrawBase(Core core, int windowSize, int dataLength)
        {
            /* parse window */
            var psudoQueue = new LinkedList <char>();

            g.Clear(Color.Black);

            for (int i = 0; i < dataLength; i++)   // length
            {
                int         psudoCursor = core.pageHistory[i].loc;
                char        data        = core.pageHistory[i].data;
                int         psudoTemp   = core.psudoTempII[i].refCount;
                Page.STATUS status      = core.pageHistory[i].status;

                switch (status)
                {
                case Page.STATUS.PAGEFAULT:
                    psudoQueue.AddLast(data);
                    break;

                case Page.STATUS.MIGRATION:
                    psudoQueue.RemoveFirst();
                    psudoQueue.AddLast(data);
                    break;

                case Page.STATUS.MIGRATIONII:
                    if (psudoTemp > 0 && psudoTemp < Int32.Parse(tbWindowSize.Text))
                    {
                        RemoveAt(psudoQueue, psudoTemp);
                    }
                    psudoQueue.AddLast(data);
                    break;
                }

                for (int j = 0; j <= windowSize; j++)  // height - STEP
                {
                    if (j == 0)
                    {
                        DrawGridText(i, j, data);
                    }
                    else
                    {
                        DrawGrid(i, j);
                    }
                }

                DrawGridHighlight(i, psudoCursor, status);
                int depth = 1;

                foreach (char t in psudoQueue)
                {
                    DrawGridText(i, depth++, t);
                }
            }
        }
Ejemplo n.º 3
0
        public List <Page> GetPageInfo(Page.STATUS status)
        {
            List <Page> pages = new List <Page>();

            foreach (Page page in pageHistory)
            {
                if (page.status == status)
                {
                    pages.Add(page);
                }
            }
            return(pages);
        }
Ejemplo n.º 4
0
        private void DrawBase(LFU core, int windowSize, int dataLength, int[] numb)
        {
            /* parse window */
            var psudoQueue = new List <char>();

            g.Clear(Color.Black);

            for (int i = 0; i < dataLength; i++) // length
            {
                int         psudoCursor = core.pageHistory[i].loc;
                char        data        = core.pageHistory[i].data;
                Page.STATUS status      = core.pageHistory[i].status;

                switch (status)
                {
                case Page.STATUS.PAGEFAULT:
                    psudoQueue.Add(data);
                    break;

                case Page.STATUS.MIGRATION:
                    psudoQueue.RemoveAt(numb[i]);
                    psudoQueue.Insert(numb[i], data);
                    break;
                }

                for (int j = 0; j <= windowSize; j++) // height - STEP
                {
                    if (j == 0)
                    {
                        DrawGridText(i, j, data);
                    }
                    else
                    {
                        DrawGrid(i, j);
                    }
                }

                DrawGridHighlight(i, psudoCursor, status);
                int depth = 1;

                foreach (char t in psudoQueue)
                {
                    DrawGridText(i, depth++, t);
                }
            }
        }
Ejemplo n.º 5
0
        private void DrawBase(Core core, int windowSize, int dataLength)
        {
            /* parse window */
            var psudoList = new List <char>();
            int cursor    = 0;


            List <char> store       = new List <char>();
            List <int>  countsave   = new List <int>();
            List <bool> reference   = new List <bool>();
            List <int>  recountsave = new List <int>();

            g.Clear(Color.Black);


            for (int i = 0; i < dataLength; i++) // length
            {
                int         psudoCursor = core.pageHistory[i].loc;
                char        data        = core.pageHistory[i].data;
                Page.STATUS status      = core.pageHistory[i].status;
                Page.STATUS status1     = core.pageHistory[i].status;
                //fifo

                if (function == 0)
                {
                    switch (status)
                    {
                    case Page.STATUS.PAGEFAULT:
                        psudoList.Add(data);
                        break;

                    case Page.STATUS.MIGRATION:

                        psudoList.RemoveAt(cursor);
                        psudoList.Insert(cursor, data);
                        cursor++;
                        if (cursor == windowSize)
                        {
                            cursor = 0;
                        }
                        break; this.tbConsole.Clear();
                    }
                }
                //LRU
                if (function == 2)
                {
                    switch (status)
                    {
                    case Page.STATUS.PAGEFAULT:
                        psudoList.Add(data);
                        break;

                    case Page.STATUS.MIGRATION:
                        for (int a = 0; a < psudoList.Count; a++)
                        {
                            int count = 0;
                            for (int b = i; b >= 0; b--)
                            {
                                if (core.pageHistory.ElementAt(b).data == psudoList.ElementAt(a))
                                {
                                    countsave.Insert(a, count);
                                    char c = psudoList.ElementAt(a);
                                    break;
                                }
                                else
                                {
                                    count++;
                                }
                            }
                        }
                        int big = countsave.ElementAt(0);
                        int old = 0;
                        for (int d = 1; d < countsave.Count; d++)
                        {
                            if (big < countsave.ElementAt(d))
                            {
                                big = countsave.ElementAt(d);
                                old = d;
                            }
                        }
                        psudoList.RemoveAt(old);
                        psudoList.Insert(old, data);
                        countsave.Clear();
                        break;
                    }
                }

                //optimal
                if (function == 1)
                {
                    switch (status)
                    {
                    case Page.STATUS.PAGEFAULT:
                        psudoList.Add(data);
                        store.Add(data);
                        break;

                    case Page.STATUS.MIGRATION:
                        for (int a = 0; a < psudoList.Count; a++)
                        {
                            int count = 0;
                            for (int b = store.Count + 1; b < datalist.Count; b++)    //store.Count+1
                            {
                                if (psudoList.ElementAt(a).Equals(datalist.ElementAt(b)))
                                {
                                    break;
                                }
                                else
                                {
                                    count++;
                                }
                            }
                            countsave.Insert(a, count);
                        }
                        int big = countsave.ElementAt(0);
                        int old = 0;
                        for (int a = 1; a < countsave.Count; a++)
                        {
                            if (big < countsave.ElementAt(a))
                            {
                                big = countsave.ElementAt(a);
                                old = a;
                            }
                        }
                        psudoList.RemoveAt(old);
                        psudoList.Insert(old, data);
                        store.Add(data);
                        countsave.Clear();
                        break;

                    case Page.STATUS.HIT:
                        store.Add(data);
                        break;
                    }
                }

                //second
                if (function == 3)
                {
                    switch (status)
                    {
                    case Page.STATUS.PAGEFAULT:
                        psudoList.Add(data);
                        reference.Add(false);
                        break;

                    case Page.STATUS.MIGRATION:
                        for (int re = 0; re < reference.Count; re++)
                        {
                            if (reference.ElementAt(cursor))
                            {
                                reference[cursor] = false;
                                cursor++;
                                if (cursor == reference.Count)
                                {
                                    cursor = 0;
                                }
                            }
                            else
                            {
                                break;
                            }
                        }

                        psudoList.RemoveAt(cursor);
                        reference[cursor] = false;
                        psudoList.Insert(cursor, data);

                        cursor++;
                        if (cursor == windowSize)
                        {
                            cursor = 0;
                        }
                        break;

                    case Page.STATUS.HIT:
                        int rhit;
                        for (rhit = 0; rhit < psudoList.Count; rhit++)
                        {
                            if (psudoList.ElementAt(rhit) == data)
                            {
                                break;
                            }
                        }
                        reference[rhit] = true;
                        break;
                    }
                }

                //LFU
                if (function == 4)
                {
                    switch (status)
                    {
                    case Page.STATUS.PAGEFAULT:
                        psudoList.Add(data);
                        recountsave.Add(0);
                        break;

                    case Page.STATUS.MIGRATION:
                        int big = recountsave.ElementAt(0);
                        int old = 0;
                        for (int rec = 1; rec < recountsave.Count; rec++)
                        {
                            if (big > recountsave.ElementAt(rec))
                            {
                                big = recountsave.ElementAt(rec);
                                old = rec;
                            }
                        }
                        psudoList.RemoveAt(old);
                        recountsave.RemoveAt(old);
                        psudoList.Insert(old, data);
                        recountsave.Insert(old, 0);
                        break;

                    case Page.STATUS.HIT:
                        int rhit;
                        for (rhit = 0; rhit < psudoList.Count; rhit++)
                        {
                            if (psudoList.ElementAt(rhit) == data)
                            {
                                break;
                            }
                        }
                        // recount++;
                        recountsave[rhit] = recountsave[rhit] + 1;
                        break;
                    }
                }
                //
                //MFU
                if (function == 5)
                {
                    switch (status)
                    {
                    case Page.STATUS.PAGEFAULT:
                        psudoList.Add(data);
                        recountsave.Add(0);
                        break;

                    case Page.STATUS.MIGRATION:
                        int big = recountsave.ElementAt(0);
                        int old = 0;
                        for (int rec = 1; rec < recountsave.Count; rec++)
                        {
                            if (big < recountsave.ElementAt(rec))
                            {
                                big = recountsave.ElementAt(rec);
                                old = rec;
                            }
                        }
                        psudoList.RemoveAt(old);
                        recountsave.RemoveAt(old);
                        psudoList.Insert(old, data);
                        recountsave.Insert(old, 0);
                        break;

                    case Page.STATUS.HIT:
                        int rhit;
                        for (rhit = 0; rhit < psudoList.Count; rhit++)
                        {
                            if (psudoList.ElementAt(rhit) == data)
                            {
                                break;
                            }
                        }
                        // recount++;
                        recountsave[rhit] = recountsave[rhit] + 1;
                        break;
                    }
                }

                //

                for (int j = 0; j <= windowSize; j++) // height - STEP
                {
                    if (j == 0)
                    {
                        DrawGridText(i, j, data);
                    }
                    else
                    {
                        DrawGrid(i, j);
                    }
                }

                DrawGridHighlight(i, psudoCursor, status);
                int depth = 1;
                foreach (char t in psudoList)
                {
                    DrawGridText(i, depth++, t);
                }
            }
        }