Page Replacement Algorithm (FIFO, LRU, best, clock)
# Include <iostream> <br/> using namespace STD; <br/> void print (int bc [], int blockcount) <br/> {<br/> for (INT I = 0; I <blockcount; I ++) <br/>{< br/> cout <BC [I] <""; <br/>}< br/> cout <Endl; <br/>}</P> <p> bool travel (int bc [], int blockcount, int X) <br/>{< br/> bool is_found = false; <br/> int I; <br/> for (I = 0; I <blockcount; I ++) <br/>{< br/> If (BC [I] = x) <br/>{< br/> is_found = true; <br/> break; <br/>}< br/> retu Rn is_found; <br/>}</P> <p> void FIFO (int pc [], int BC [], int pagecount, int blockcount) <br/>{< br/> cout <"0: FIFO replacement algorithm" <Endl; <br/> int I; <br/> If (pagecount <= blockcount) <br/> {<br/> cout <"number of missing pages" <0 <Endl; <br/> cout <"page missing rate:" <0 <Endl; <br/>}< br/> else <br/> {<br/> int nopage = 0; <br/> int p = 0; <br/> for (I = 0; I <pagecount; I ++) <br/>{</P> <p> cout <"reference page: "<PC [I] <Endl; <br/> If (! Travel (BC, blockcount, PC [I]) <br/>{< br/> if (I <blockcount) <br/>{< br/> BC [I] = pc [I]; <br/>}< br/> else <br/>{< br/> If (P = blockcount) <br/>{< br/> P = 0; <br/>}< br/> BC [p] = pc [I]; <br/> P ++; </P> <p >}< br/> nopage ++; <br/> cout <"physical fast:"; <br/> Print (BC, blockcount); <br/>}< br/> cout <Endl; <br/>}< br/> cout <"page missing count: "<nopage <Endl; <br/> cout <" page missing rate: "<(float) nopage/pagecount <Endl; <br/>}</P> <p> int foundma Xnum (int A [], int N) <br/>{< br/> int K, J; <br/> K = A [0]; <br/> J = 0; <br/> for (INT I = 0; I <n; I ++) <br/>{< br/> if (a [I]> = k) <br/>{< br/> K = A [I]; <br/> J = I; <br/>}< br/> return J; <br/>}</P> <p> void LRU (int pc [], int BC [], int pagecount, int blockcount) <br/>{ <br/> cout <"1: LRU replacement algorithm" <Endl; <br/> If (pagecount <= blockcount) <br/> {<br/> cout <"number of missing pages is" <0 <Endl; <br/> cout <"page missing rate:" <0 <Endl; <br/>}< br/> else <br/> {< Br/> int nopage = 0; <br/> int I, j, M; <br/> int * BC1 = new int [blockcount]; <br/> for (I = 0; I <blockcount; I ++) <br/>{< br/> BC1 [I] = 0; <br/>}< br/> for (I = 0; I <pagecount; I ++) <br/>{< br/> cout <"reference page: "<PC [I] <Endl; <br/> If (! Travel (BC, blockcount, PC [I]) <br/>{< br/> if (I <blockcount) <br/> {<br/> BC [I] = pc [I]; <br/> for (INT p = 0; P <= I; P ++) <br/>{< br/> BC1 [p] ++; <br/>}< br/> else <br/> {<br/> for (j = 0; j <blockcount; j ++) <br/>{< br/> BC1 [J] ++; <br/>}< br/> int K = foundmaxnum (BC1, blockcount ); <br/> BC [k] = pc [I]; <br/> BC1 [k] = 1; </P> <p >}< br/> nopage ++; <br/> cout <"physical fast:"; <br/> Print (BC, blockcount); <br/>}< br/> else if (travel (BC, Bloc Kcount, PC [I]) <br/>{< br/> if (I <blockcount) <br/>{< br/> for (j = 0; j <= I; j ++) <br/>{< br/> BC1 [J] ++; <br/>}< br/> for (m = 0; m <= I; m ++) <br/> {<br/> If (BC [m] = pc [I]) <br/>{< br/> break; <br/>}< br/> BC1 [m] = 1; <br/> BC [m] = pc [I]; </P> <p >}< br/> else <br/> {<br/> for (j = 0; j <blockcount; j ++) <br/>{< br/> BC1 [J] ++; <br/>}< br/> for (m = 0; m <blockcount; m ++) <br/>{< br/> If (BC [m] = pc [I]) <br/>{< br/> break; <br/>}< B R/> BC1 [m] = 1; <br/> BC [m] = pc [I]; <br/>}< br/> cout <Endl; <br/>}< br/> cout <"page missing count: "<nopage <Endl; <br/> cout <" page missing rate: "<(float) nopage/pagecount <Endl; <br/> Delete BC1; <br/>}</P> <p> void optiomal (int pc [], int BC [], int pagecount, int blockcount) <br/> {<br/> cout <"2: Optimal Replacement Algorithm" <Endl; <br/> If (pagecount <= blockcount) <br/> {<br/> cout <"number of missing pages is" <0 <Endl; <br/> cout <"page missing rate:" <0 <Endl; <br/>}< br/> el Se <br/> {<br/> int nopage = 0; <br/> int I, j, k; <br/> for (I = 0; I <pagecount; I ++) <br/>{< br/> cout <"reference page:" <PC [I] <Endl; <br/> If (! Travel (BC, blockcount, PC [I]) <br/>{< br/> if (I <blockcount) <br/>{< br/> BC [I] = pc [I]; <br/>}< br/> else <br/>{< br/> int max = 0; <br/> int blockindex ;; <br/> for (j = 0; j <blockcount; j ++) <br/>{< br/> for (k = I; k <pagecount; k ++) <br/>{< br/> If (BC [J] = pc [k]) <br/>{< br/> break; <br/>}< br/> If (k> = max) <br/>{< br/> max = K; <br/> blockindex = J; <br/>}< br/> BC [blockindex] = pc [I]; </P> <p >}< br/> nopage ++; <br/> cou T <"physical fast:"; <br/> Print (BC, blockcount); <br/>}< br/> cout <Endl; <br/>}< br/> cout <"page missing count:" <nopage <Endl; <br/> cout <"page missing rate: "<(float) nopage/pagecount <Endl; <br/>}</P> <p> void NRU (int pc [], int BC [], int pagecount, int blockcount) <br/>{< br/> cout <"3: clock replacement algorithm" <Endl; <br/> If (pagecount <= blockcount) <br/> {<br/> cout <"number of missing pages" <0 <Endl; <br/> cout <"page missing rate:" <0 <Endl; <br/>}< br/> else <br/>{< br/> int Nopage = 0; <br/> int I, j; <br/> int * BC1 = new int [blockcount]; <br/> for (I = 0; I <blockcount; I ++) <br/>{< br/> BC1 [I] = 0; <br/>}< br/> for (I = 0; I <pagecount; I ++) <br/>{< br/> cout <"reference page:" <PC [I] <Endl; <br/> If (! Travel (BC, blockcount, PC [I]) <br/>{< br/> for (j = 0; j <blockcount; j ++) <br/>{< br/> If (BC1 [J] = 1) <br/>{< br/> BC1 [J] = 0; <br/>}< br/> else if (BC1 [J] = 0) <br/>{< br/> break; <br/>}< br/> If (j = blockCount-1) <br/> {<br/> J =-1; <br/>}< br/> BC [J] = pc [I]; <br/> BC1 [J] = 1; <br/> nopage ++; <br/> cout <"physical fast:"; <br/> Print (BC, blockcount ); <br/>}< br/> cout <Endl; <br/>}< br/> cout <"number of missing pages:" <nopage <Endl; <br/> cout <"page missing rate:" <(float) nopage/pagecount <Endl; <br/> Delete BC1; <br/>}< br/> int main () <br/>{< br/> int pagecount, blockcount, I; <br/> cout <"Number of input pages" <Endl; <br/> CIN> pagecount; <br/> int * Pc = new int [pagecount]; <br/> cout <"enter page to" <Endl; <br/> for (I = 0; I <pagecount; I ++) <br/>{< br/> CIN> PC [I]; <br/>}< br/> cout <"Number of input physical blocks" <Endl; <br/> CIN> blockcount; <br/> cout <"0: FIFO replacement algorithm" <Endl; <br/> cout <"1: LRU replacement algorithm "<Endl; <br/> cout <" 2: Optimal Replacement Algorithm "<Endl; <br/> cout <" 3: clock replacement algorithm "<Endl; <br/> cout <" select algorithm category by number: "<Endl; <br/> int N; <br/> while (CIN> N) <br/> {<br/> If (n = 0) <br/>{< br/> int * BC = new int [blockcount]; <br/> FIFO (PC, BC, pagecount, blockcount ); <br/> Delete BC; <br/>}< br/> else if (n = 1) <br/>{< br/> int * BC = new int [blockcount]; <br/> LRU (PC, BC, pagecount, blockcount ); <br/> Delete BC; <br/>}< br/> else if (n = 2) <br/>{< br/> int * BC = new int [blockcount]; <br/> optiomal (PC, BC, pagecount, blockcount ); <br/> Delete BC; <br/>}< br/> else if (n = 3) <br/> {<br/> int * BC = new int [blockcount]; <br/> for (I = 0; I <blockcount; I ++) <br/>{< br/> BC [I] =-1; <br/>}< br/> NRU (PC, BC, pagecount, blockcount ); <br/> Delete BC; <br/>}< br/> else break; <br/>}< br/> Delete PC; <br/> return 0; <br/>}< br/>