コード例 #1
0
        public Acess ValidTrade(Acess acess = null)
        {
            var r = new Acess();

            foreach (var item in Fila.ToArray())
            {
                r = FilaControle.Where(x => x.Page == item).LastOrDefault();

                if (r.R == 1)
                {
                    r.SetR(0);
                }
                else
                {
                    if (Table.Where(x => x.Page == r.Page).Select(x => x.Count).FirstOrDefault() >= K)
                    {
                        if (r.M == 1)
                        {
                            r.SetM(0);
                            Fila.Add(Fila.FirstOrDefault());
                            Fila.RemoveAt(0);
                        }
                        else
                        {
                            return(r);
                        }
                    }
                }
            }

            return(ValidTrade(r));
        }
コード例 #2
0
        public void AddNewPage(Acess acess)
        {
            var rp = FilaControle.Where(x => x.Page == acess.Page).ToList();

            if (rp.Count != 0)
            {
                if (rp.LastOrDefault().M == 1)
                {
                    acess.MovM();
                }
            }

            FilaControle.Add(acess);

            var updated = NewPage(() =>
            {
                var remove             = SecondChance();
                OldValue               = remove.Page;
                TradingPostion         = Memory.IndexOf(OldValue);
                Memory[TradingPostion] = NewValue;
            },
                                  acess.Page);

            ResetBitR();
        }
コード例 #3
0
        public void AddNewPage(Acess acess)
        {
            var t  = new Acess();
            var rp = FilaControle.Where(x => x.Page == acess.Page).ToList();

            if (rp.Count != 0)
            {
                if (rp.LastOrDefault().M == 1)
                {
                    acess.MovM();
                }
            }

            FilaControle.Add(acess);


            NewPage(() =>
            {
                t                      = ValidTrade();
                OldValue               = t.Page;
                TradingPostion         = Memory.IndexOf(OldValue);
                Memory[TradingPostion] = NewValue;
                Fila.Add(NewValue);
            },
                    acess.Page);

            foreach (var x in Table.ToArray())
            {
                if (x.Page == t.Page)
                {
                    x.Reset();
                }
            }

            foreach (var item in Table.ToArray())
            {
                if (acess.Page == item.Page)
                {
                    item.Reset();
                }

                if (Memory.Contains(item.Page))
                {
                    item.Update();
                }
            }



            ResetBitR();
        }
コード例 #4
0
        static void Main(string[] args)
        {
            #region FIFO

            Console.WriteLine(" --------------------- FIFO -------------------------");

            var fifoMemory = new List <string>
            {
                "0",
                "0",
                "0"
            };

            var fifoList = new List <string>
            {
                "A2",
                "A3",
                "B2",
                "B3",
                "A1",
                "A2",
                "A3",
                "B2",
                "B1",
                "B3",
                "B2",
                "A3",
            };

            var fifo = new FIFOController(new FIFOService(fifoMemory.ToList()));
            fifo.Run(fifoList.ToList());
            #endregion FIFO

            #region OTIMO
            Console.WriteLine(" --------------------- OTIMO -------------------------");

            var otmMemory = new List <string>
            {
                "B1",
                "0",
                "0"
            };

            var otmList = new List <string>
            {
                "A2",
                "A3",
                "B2",
                "B3",
                "A1",
                "A2",
                "A3",
                "B2",
                "B1",
                "B3",
                "B2",
                "A3",
            };

            var otimo = new OTIMOController(new OTIMOService(otmMemory.ToList()));
            otimo.Run(otmList.ToList());
            #endregion OTIMO

            #region LRU
            Console.WriteLine(" --------------------- LRU -------------------------");

            var lruMemory = new List <string>
            {
                "0",
                "0",
                "0"
            };

            var lruList = new List <string>
            {
                "A1",
                "A2",
                "A3",
                "B2",
                "B3",
                "A1",
                "B2",
                "A3",
                "A2",
                "A1",
            };

            var lru = new LRUController(new LRUService(lruMemory.ToList()));
            lru.Run(lruList.ToList());
            #endregion LRU

            #region Relogio
            Console.WriteLine(" --------------------- Relogio -------------------------");

            var rlgMemory = new List <string>
            {
                "0",
                "0",
                "0"
            };

            var rlgList = new List <string>
            {
                "A1",
                "A2",
                "A3",
                "B2",
                "B3",
                "A1",
                "B2",
                "B3",
                "A2",
                "A1",
            };
            var Relogio = new RelogioController(new RelogioService(rlgMemory.ToList()));
            Relogio.Run(rlgList.ToList());
            #endregion Relogio

            #region NRU
            Console.WriteLine(" --------------------- NRU -------------------------");

            var nruMemory = new List <string>
            {
                "A1",
                "A2",
                "A3"
            };

            var nru     = new NRUController(new NRUService(nruMemory.ToList()));
            var nruList = new List <Acess>()
            {
                Acess.CreateFrom("A1", "E"),
                Acess.CreateFrom("A2", "L"),
                Acess.CreateFrom("B1", "L"),
                Acess.CreateFrom("B2", "L"),
                Acess.CreateFrom("B3", "L"),
                Acess.CreateFrom("A1", "L"),
                Acess.CreateFrom("B2", "L"),
                Acess.CreateFrom("B3", "L"),
                Acess.CreateFrom("A2", "L"),
                Acess.CreateFrom("A1", "E"),
            };
            nru.Run(nruList.ToList());
            #endregion NRU

            #region WSClock
            Console.WriteLine(" --------------------- WSClock -------------------------");

            var wsMemory = new List <string>
            {
                "0",
                "0",
                "0"
            };

            var wsList = new List <Acess>()
            {
                Acess.CreateFrom("A1", "E"),
                Acess.CreateFrom("A2", "L"),
                Acess.CreateFrom("B1", "L"),
                Acess.CreateFrom("B2", "L"),
                Acess.CreateFrom("A1", "L"),
                Acess.CreateFrom("A1", "L"),
                Acess.CreateFrom("B2", "L"),
                Acess.CreateFrom("B3", "L"),
                Acess.CreateFrom("A2", "L"),
                Acess.CreateFrom("A1", "E"),
            };
            var wsClock = new WSClockController(new WSClockService(wsMemory.ToList(), wsList.ToList()));
            wsClock.Run(wsList.ToList());
            #endregion WSClock
        }
コード例 #5
0
 public void Add(Acess page)
 {
     service.AddNewPage(page);
 }