操作系統(tǒng)實驗(四)——頁面置換算法模擬-創(chuàng)新互聯(lián)

一個班(20信安)的同學搜到這篇別直接copy我的,代碼僅供參考

創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今,先為牧野等服務建站,牧野等地企業(yè),進行企業(yè)商務咨詢服務。為牧野企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。
一、OPT 代碼
#includeusing namespace std;
listmain_store= {};
listback_store = {1,4,3,1,2,5,1,4,2,1,4,5};
int change_time = 0;// 記錄替換次數(shù)

int find(list::iterator begin,list::iterator end,int value)
// 尋找list列表中value首次出現(xiàn)的下標,未找到則返回列表長度,即size()
// 這里未找到設置為size(),就是將不再出現(xiàn)的page的權值設置為了大,優(yōu)先替換 
{int i=0;
    for(list::iterator iter = begin; iter!=end; iter++,i++)
    {if(*iter == value)
        {return i;
        }
    }
    return i;
}

void OPT(int new_page)
// 最佳頁面置換算法
// 對整型數(shù)new_page進行替換
{auto change_page_iter = main_store.begin();
    // 如果主存中有page,則無需替換
    if(count(main_store.begin(), main_store.end(), new_page)) return;

    // 找到主存中出現(xiàn)位置最靠后的page(change_pagh_iter)
    for(auto i=main_store.begin(); i!=main_store.end(); i++)
    {if(find(back_store.begin(), back_store.end(), *i) >find(back_store.begin(), back_store.end(), *change_page_iter))
        {change_page_iter = i;
        }
    }
    // 替換
    change_time++;
    *change_page_iter = new_page;
}

void printList(lista)
// 打印list列表
{for(auto iter=a.begin(); iter!=a.end(); iter++)
    {cout<< *iter<< " ";
    }
    cout<< endl;
}

int main()
{while(back_store.size())
    {int new_page = back_store.front();
        back_store.pop_front();
        // 檢測主存是否有空閑空間
        if(main_store.size()<3)
        {main_store.push_back(new_page);
            printList(main_store);
        }
        else
        {OPT(new_page);
            printList(main_store);
        }
    }
    cout<< "頁面置換次數(shù):"<< change_time;
}
運行截圖

在這里插入圖片描述

二、FIFO 代碼
#includeusing namespace std;
listmain_store= {};
listback_store = {1,4,3,1,2,5,1,4,2,1,4,5};
int change_time = 0;// 記錄替換次數(shù)
int ptr=0;

int find(list::iterator begin,list::iterator end,int value)
// 尋找list列表中value首次出現(xiàn)的下標,未找到則返回列表長度,即size()
{int i=0;
    for(list::iterator iter = begin; iter!=end; iter++,i++)
    {if(*iter == value)
        {return i;
        }
    }
    return i;
}

void FIFO(int new_page)
// 先進先出算法
// 對整型數(shù)new_page進行替換
{list::iterator change_page_iter = main_store.begin();
    // 如果主存中有page,則無需替換
    if(count(main_store.begin(), main_store.end(), new_page)) return;

    // 找到主存中位置i的迭代器change_pagh_iter
    for(int i=0; ichange_page_iter++;
    }
    // 替換
    change_time++;
    *change_page_iter = new_page;
    ptr = (ptr+1)%main_store.size();
}

void printList(lista)
// 打印list列表
{for(auto iter=a.begin(); iter!=a.end(); iter++)
    {cout<< *iter<< " ";
    }
    cout<< endl;
}

int main()
{while(back_store.size())
    {int new_page = back_store.front();
        back_store.pop_front();
        // 檢測主存是否有空閑空間
        if(main_store.size()<3)
        {main_store.push_back(new_page);
            printList(main_store);
        }
        else
        {FIFO(new_page);
            printList(main_store);
        }
    }
    cout<< "頁面置換次數(shù):"<< change_time;
}
運行截圖

在這里插入圖片描述

三、LRU 代碼
#includeusing namespace std;
listmain_store= {};
listback_store = {1,4,3,1,2,5,1,4,2,1,4,5};
int change_time = 0;// 記錄替換次數(shù) 
int clt=0;
mapm;

int find(list::iterator begin,list::iterator end,int value)
// 尋找list列表中value首次出現(xiàn)的下標,未找到則返回列表長度,即size()
// 這里未找到設置為size(),就是將不再出現(xiàn)的page的權值設置為了大,優(yōu)先替換 
{int i=0;
    for(list::iterator iter = begin; iter!=end; iter++,i++)
    {if(*iter == value)
        {return i;
        }
    }
    return i;
}

void LRU(int new_page)
// 最近最久未使用頁面置換算法
// 對整型數(shù)new_page進行替換
{auto change_page_iter = main_store.begin();
    // 如果主存中有page,則無需替換
    if(count(main_store.begin(), main_store.end(), new_page)) return;

    // 找到主存中出現(xiàn)位置最靠后的page(change_pagh_iter)
    for(auto i=main_store.begin(); i!=main_store.end(); i++)
    {if(m[*i]< m[*change_page_iter])
        {change_page_iter = i;
        }
    }
    // 替換
    change_time++;
    *change_page_iter = new_page;
}

void printList(lista)
// 打印list列表
{for(auto iter=a.begin(); iter!=a.end(); iter++)
    {cout<< *iter<< " ";
    }
    cout<< endl;
}

int main()
{while(back_store.size())
    {int new_page = back_store.front();
        back_store.pop_front();
        clt++;
        m[new_page] = clt;
        // 檢測主存是否有空閑空間
        if(main_store.size()<3)
        {main_store.push_back(new_page);
            printList(main_store);
        }
        else
        {LRU(new_page);
            printList(main_store);
        }
    }
    cout<< "頁面置換次數(shù):"<< change_time;
}
運行截圖

在這里插入圖片描述

小結

調(diào)用了C++的STL庫里的list列表容器和map容器
寫了遍歷打印函數(shù),以及重寫了列表的find函數(shù)

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

新聞標題:操作系統(tǒng)實驗(四)——頁面置換算法模擬-創(chuàng)新互聯(lián)
當前網(wǎng)址:http://www.muchs.cn/article6/hgdig.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、服務器托管、網(wǎng)站維護、定制開發(fā)、網(wǎng)站設計、域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設