作業系統頁面排程問題(這裡只給出了FIFO、LRU、OPT) 純c++陣列模擬 略low
目前在上實驗課,理論以後在進行補充。以下只放上純模擬的程式碼。
其實模擬還是很好模擬的,三者僅僅只是發生缺頁時排程方法不同,尤其是LRU和OPT兩者程式碼只有一個地方不同,區別之處就在於LRU是向前找,而OPT演算法則是向後找。以下以序列{2,3,2,1,5,2,4,5,3,2,5,2} 12個數為例。想要使用者輸入可以在主函式裡寫個輸入,定義一個全域性的陣列長度即可。系統記憶體的塊則用的陣列b來代表,也可自己設定陣列b的長度,大體同上。
//欒兆威 16171120 #include <bits/stdc++.h> using namespace std; int a[]={2,3,2,1,5,2,4,5,3,2,5,2}; //12個 int b[3]={-1,-1,-1}; //只分配了三個塊 void LRU(){ int cnt = 0,kk = 0; memset(b,-1,sizeof(b)); for(int i=0;i<12;i++){ if(kk<3){ //前三個頁調入記憶體 bool flag = false; for(int j = 0;j < i ;j++){ //看看記憶體塊中是否已經存在 if(a[i]==b[j]){ flag = true; break; } } if(flag==false){ b[kk] = a[i]; cnt++; kk++; } } else{ bool flag = false; for(int j = 0;j < 3;j++){ if(a[i]==b[j]){ //cout<<"~~~~~~~"<<a[i]<<endl; flag = true; break; } } //造成缺頁 if(flag == false){ int tmp = 0; bool vis[3]; memset(vis,false,sizeof(vis)); for(int j = i;j >=0;j--){//向前找 for(int k=0;k<3;k++){ if(a[j]==b[k]){ vis[k]=true; tmp++; break; } } if(tmp==2) break; } for(int j = 0;j<3;j++){ if(vis[j]==false){ cnt++; b[j]=a[i]; break; } } } } cout<<a[i]<<": ["; for(int j=0;j<3;j++){ if(b[j]==-1) cout<<"* "; else cout<<b[j]<<" "; } cout<<"]"<<endl; } cout<<"缺頁數為: "<<cnt<<endl; } void OPT(){ int cnt = 0,kk = 0; memset(b,-1,sizeof(b)); for(int i=0;i<12;i++){ if(kk<3){ bool flag = false; for(int j = 0;j < i ;j++){ if(a[i]==b[j]){ flag = true; break; } } if(flag==false){ b[kk] = a[i]; cnt++; kk++; } } else{ bool flag = false; for(int j = 0;j < 3;j++){ if(a[i]==b[j]){ //cout<<"~~~~~~~"<<a[i]<<endl; flag = true; break; } } //造成缺頁 if(flag == false){ int tmp = 0; bool vis[3]; memset(vis,false,sizeof(vis)); for(int j = i+1;j <12;j++){//向後找 for(int k=0;k<3;k++){ if(a[j]==b[k]){ vis[k]=true; tmp++; break; } } if(tmp==2) break; } for(int j = 0;j<3;j++){ if(vis[j]==false){ cnt++; b[j]=a[i]; break; } } } } cout<<a[i]<<": ["; for(int j=0;j<3;j++){ if(b[j]==-1) cout<<"* "; else cout<<b[j]<<" "; } cout<<"]"<<endl; } cout<<"缺頁數為: "<<cnt<<endl; } void FIFO(){ int cnt = 0,t = 0; for(int i = 0;i <12 ;i++){ bool flag = false; for(int j = 0;j < 3;j++){ if(a[i]==b[j]){ flag=true; break; } } if(flag==false){//缺頁 cnt++; b[t]=a[i]; t++; if(t==3) t=0; } cout<<a[i]<<": ["; for(int j=0;j<3;j++){ if(b[j]==-1) cout<<"* "; else cout<<b[j]<<" "; } cout<<"]"<<endl; } cout<<"缺頁數為: "<<cnt<<endl; } int main(){ cout<<"先進先出淘汰演算法:"<<endl; cout<<"*********************"<<endl; FIFO(); cout<<"*********************"<<endl; cout<<endl; cout<<"最近最久未用淘汰演算法:"<<endl; cout<<"*********************"<<endl; LRU(); cout<<"*********************"<<endl; cout<<endl; cout<<"最佳淘汰演算法淘汰演算法:"<<endl; cout<<"*********************"<<endl; OPT(); cout<<"*********************"<<endl; cout<<endl; return 0; }
相關推薦
作業系統頁面排程問題(這裡只給出了FIFO、LRU、OPT) 純c++陣列模擬 略low
目前在上實驗課,理論以後在進行補充。以下只放上純模擬的程式碼。 其實模擬還是很好模擬的,三者僅僅只是發生缺頁時排程方法不同,尤其是LRU和OPT兩者程式碼只有一個地方不同,區別之處就在於LRU是向前找,而OPT演算法則是向後找。以下以序列{2,3,2,1,5,2,4,5,3
頁面置換演算法(FIFO,LRU,OPT)c模擬
/* * memory.c * * Created on: Jun 9, 2010 * Author: WangYun */ #include<stdio.h> #define PAGE_NUM 20 #define BLOCK 3
頁面排程演算法 FIFO,LRU,OPT,及C++程式碼
頁面排程演算法 FIFO,LRU,OPT 介紹了三種頁面排程演算法,給出了C++程式碼 1.FIFO 先來先去演算法這個非常好理解,給出分析圖 可以看出,缺頁次數為8次,缺頁中斷率為8/12=66.7%,依次置換的頁面為:1,2,5,3,4 C
作業系統頁面置換演算法之先進先出(FIFO)演算法
import java.util.LinkedList; import java.util.List; public class FIFO {public static void main(String[] args) {int framesize = 5; //幀數量int[] s = { 1, 2,
布隆過濾器(Bloom Filter)(給兩個檔案,分別有100億個字串,我們只要1g的記憶體,如何找到兩個檔案的交集?分別給出精確演算法和近似演算法?)
給兩個檔案,分別有100億個字串,我們只要1g的記憶體,如何找到兩個檔案的交集?分別給出精確演算法和近似演算法? 精確演算法: 我們可以建立1000個檔案,運用雜湊函式先將檔案1的字串儲存在對應的檔案中,之後再檔案2中取元素,通過雜湊函式計算出雜湊地址
作業系統頁面排程演算法
演算法由python實現 1.先進先出置換演算法 該演算法是置換最早出現在stack裡的頁面,是最簡單的頁面置換演算法,沒有考慮程式的區域性性原理 在這裡設定stack的大小為3,為了模
帶超時時間的telnet該怎麼玩?------檢測tcp是否可連線時經常用到(本文僅給出linux版本,之前部落格也有Windows版本的)
前面說過, 利用ping命令探測網路是否可通, 但很多時候, 服務端或者防火牆禁止了ping命令, 也就是說, ping不通, 不表示網路不通, 所以仍有可能能建立tcp連線。怎麼檢測tcp連線是否可通呢? 用telnet命令就可以搞起, 但問題是, 很多時
谷歌為什麽退出中國?李彥宏只說出了一部分真相
tle 2010年 領域 頂級 back 認識 ali 遊戲 .cn 於1月 29 日發行的《時代》周刊中,百度公司創始人兼CEO李彥宏成為封面人物,成為中國互聯網登《時代》的第一人。而專訪中的一段話,卻讓一段往事再次成為了輿論熱議的焦點。專訪中,李彥宏表示,谷歌當年退出中
插入排序----希爾排序-----(本文給出了另一種直接插入排序)
希爾排序原理如下(純手打): 假設有下面一個數組 99, 38, 65, 82, 26, 13, 27, 49, 55, 1 第一趟排序 首先設定一個增量inc,比如說最開始的增量為陣列長度的一半即 arr.length/2 = 5,則上面的陣列可以分成如下幾組(相同顏色的為
在右側我們給出了一個已經基本完成的程式,讀入了一個字串,呼叫了一個叫str_len的函式來計算這個字串的長度,並輸出。 聰明的你應該已經發現了,這個叫str_len的函式並沒有完成
在右側我們給出了一個已經基本完成的程式,讀入了一個字串,呼叫了一個叫str_len的函式來計算這個字串的長度,並輸出。 聰明的你應該已經發現了,這個叫str_len的函式並沒有完成,在不修改函式原型的情況下,請完成str_len函式,實現我們上述的功能吧。 樣例輸入 複製 abc
創客教育如何好玩又好用?這次盛會給出了答案! —2019北京創科教育展
創客教育如何好玩又好用?這次盛會給出了答案! —2019北京創科教育展 3D列印、玩轉機器人、學習創客知識、動手程式設計設計…… 人工智慧和資訊化的驅動,"創客教育"讓學生們的課堂和課餘生活變得更加精彩。 第二十一屆科博會青少兒創客教育展於5月17-20在北京中國國際展覽中心圓滿落幕,現場人氣爆棚
面板元件(一般用於彈出的登入框或者註冊框)
面板元件(一般用於彈出的登入框或者註冊框) <div class="panel panel-default"> <div class="panel-heading">Panel heading without title</div> <
中國品牌在國外過得還好嗎?這份報告給出了答案
一位美國人在一檔視訊節目中說起一件趣聞:不少在海外市場賣得火爆的中國品牌,早先都被中國人誤認為是“洋貨”。 比如,美國亞馬遜上有一款銷量第一的Anker充電寶,就一直被不少人誤認為是“洋貨”,甚至有一些中國人還將它海淘回國,最後發現是國產品牌,鬧了個大烏龍。 可見,隨著開放的深入
分支界限法 | 裝載問題(先入先出隊列式分支限界法)
typedef 和集 \n n) 分享圖片 type amp nap include 輸入要求 有多組數據。每組數據包含2行。第一行包含2個整數 C(1 <= C <= 1000)、和 n(1 <= n <= 10),分別表示的輪
交叉字串 給出三個字串:s1、s2、s3,判斷s3是否由s1和s2交叉構成。
交叉字串給出三個字串:s1、s2、s3,判斷s3是否由s1和s2交叉構成。 您在真實的面試中是否遇到過這個題? Yes 樣例 挑戰 標籤 相關題目 筆記 比如 s1 = "aabcc" s2 =
作業系統——實驗一(先來先服務演算法和短作業優先演算法)
作業系統實驗報告一[實驗題目]先來先服務FCFS和短作業優先SJF排程演算法[實驗目的]通過本次實驗,加深對程序概念的理解,進一步掌握對程序狀態轉變、程序排程策略及對系統性能的評價方法。[實驗內容]程式設計實現如下內容:1.先來先服務演算法; 2.短程序優先演算法;3.根據排
FIFO、LRU、OPT頁面排程演算法及例子
網上很多介紹3種頁面置換演算法的例子和過程是不正確的, 本文根據《作業系統概念》第七版對三種演算法做介紹,並給出正確的例子以驗證演算法。 一、FIFO先進先出頁面置換演算法,建立一個FIFO佇列來管
asp.net專案中根據給出的相對地址獲取網站絕對地址的C#程式碼
這段C#程式碼在ASP.NET的專案中可以根據給定的相對地址獲取絕對訪問地址,例如:給出 /codes/index.aspx 可以返回http://www.sharejs.com/codes/index.aspx的絕對地址結果。 /// <summary>
自定義ExpandableListView下拉重新整理功能簡單實現(這裡主要說自定義可下拉的功能)
ExpandableListView 筆記 ExpandableListVivew 是 ListView 的子類,它在普通 ListView 的基礎上進行了擴充套件, 它把應用中的列表項分為幾組,每組裡又可包含多個列表項。 ExpandableListViv
作業系統缺頁中斷FIFO、LRU、OPT演算法實現(對於頁框數量可以由使用者調控)
在之前,筆者隨意的用針對固定的三個頁框的情況下寫了一份兒基本程式碼,也就是熟悉一下演算法原理,大家可以忽略。 這一次寫的是實現使用者對於頁框數量實現自由的調控。 注意的是筆者使用的是C/C++的陣列,所以為了避免麻煩,在程式碼開始寫了一個#define max 5,當然對