返回首页

简介
这个程序是一个最近最少使用(LRU)所使用的算法在执行内存管理的实施。
最近最少使用算法是用来在内存管理,当一个页表是满的,然后必须拆除,然后再添加一个新条目的页表条目。有几种算法。其中之一是最优的,它看起来在未来和检查页表中的条目,我们不会很快看到并删除。即使这种算法是最好的,但你不知道或无法知道未来的条目。
URL使用了同样的想法,除了它的历史和我们勉强使用,并在页面置换的受害者,他们选择的项目。
下面是一个例子:
如果我们有这个条目7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1,我们的页面大小为3的字符串,然后我们开始7,添加到页面,因为我们有空槽和用0和1的相同。一旦我们得到2,我们需要来决定一个条目应与新更换的新页表中的已。我们从右到左扫描,直到我们看到在这种情况下,7的最古老的历史和替换用2等。使用代码
使用的代码是直线前进。的LRU类的主要功能是过程,需要一个输入字符串,并对其进行处理。它要求在处理输入字符串打印每一步。该构造函数的页面大小。
使用的算法

LRU lru(3);

lru.process("7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1");



void LRU::process ( std::string str ) 

{

    std::list<char> history;



    for ( size_t i = 0; i < str.length(); i = i + 2 )

    {

        if ( __current_empty == __page_size ) 

        {

             

            if ( __page[ str [ i ] ] == false )

            {

                char c = history.front();

                history.pop_front();

 

                __page.erase( c );



                __page[ str [ i ] ] = true;

            }



            history.push_back( str [ i ] );



        } 

        else 

        {



            if ( __page [ str [ i ] ] == false )

            {

                __page [ str [ i ] ] = true;



                __current_empty++;

            }



            history.push_back( str [ i ] );

        }



        __print__( str [ i ] );

    }

}


这是该算法的实际执行。 __current_empty保持在页面上的空槽的轨道。地图是用来表示一个页面。一个双向链表是用来保持跟踪使用的号码的历史。
它的工作方式是我用图结构来表示一个页面,和双向链表保持条目的历史。我用双向链表,因为你可以推,轻松地从正面和列表的末尾弹出。它也是很好的保持使用这种结构的参赛作品的历史,因为你不必每次要选择一个搜索受害人。该列表的前面,将你的受害者总是每次你添加一个条目页面,只是推到列表回。我使用的地图,因为它像一个哈希这是一个更好的替代此实现。每次你添加一个条目,你检查如果页面是已经满了,那么我们就需要选择一个受害者(前面的列表),并更换新条目,然后将其推到列表的末尾。如果它已经在地图上,只需将其添加到历史记录列表,什么也不做。
如果您有任何问题,随时给我发电子邮件或发表评论。

回答

评论会员:b 时间:2