页面调度fifo算法c语言,用c++写的 操作系统 页面调度算法 FIFO,LRU,CLOCK

#include

#include

#include

#include

#include

using namespace std;

struct frame{

int page[8];

int count;

public:

frame(){

for(int i=0;i<8;i++){

page[i]=-1;

}

count=0;

}

bool full(){

return count==8;

}

void print(){

int i=0;

cout<

while(page[i]>=0 && i<8){

cout<

i++;

}

}

int find(int i){

for(int l=0;l<8;l++){

if(page[l]==i){

return l;

}

}

return -1;

}

int request(int i){

int k=find(i);

if(k==-1){

cout<

return push(i);

}

else{

cout<

return k;

}

print();cout<

}

int push(int i){

if(full()){

cout<

for(int l=0;l<7;l++){

page[l]=page[l+1];

}

page[7]=i;

return 7;

}

else{

cout<

page[count]=i;

count++;

return count-1;

}

}

};

struct table_node{

int page;

bool present;

};

struct table{

table_node start[16];

bool matrix[16][16];

void set_0(int i){

for(int k=0;k<16;k++){

matrix[k][i]=0;

}

}

void set_1(int i){

for(int k=0;k<16;k++){

matrix[i][k]=1;

}

}

void set(int i){

set_1(i);set_0(i);

}

table(){

for(int i=0;i<16;i++){

start[i].page=0;start[i].present=0;

}

start[0].page=2;start[0].present=1;

start[1].page=1;start[1].present=1;

start[2].page=6;start[2].present=1;

start[3].page=0;start[3].present=1;

start[4].page=4;start[4].present=1;

start[5].page=3;start[5].present=1;

start[9].page=5;start[9].present=1;

start[11].page=7;start[11].present=1;

for(i=0;i<16;i++){

for(int j=0;j<16;j++){

matrix[i][j]=0;

}

}

set(0);set(1);set(2);set(3);set(4);set(5);set(9);set(11);

}

bool isInPage(int i){

return start[i].present;

}

int line_to_int(int i){

bitset<16> temp;

for(int l=0;l<16;l++){

temp[15-l]=matrix[i][l];

}

return temp.to_ulong();

}

int find_least(){

int least=1000000;int line=0;

for(int i=0;i<16;i++){

if(start[i].present==1){

if(line_to_int(i)

line=i;least=line_to_int(i);

}

}

}

return line;

}

int request(int i){

if(isInPage(i)){

cout<

set(i);

return start[i].page;

}

else{

int release=find_least();

cout<

start[i].page=start[release].page;

start[i].present=1;

start[release].page=0;start[release].present=0;

cout<

set(i);

return start[i].page;

}

}

void print(){

for(int i=0;i<16;i++){

if(isInPage(i)){

cout<

}

}

cout<

}

};

struct node{

int pf;

bool r;

};

struct Clock{

node start[8];

int pointer;

Clock(){

for(int i=0;i<8;i++)

start[i].r=1;

start[0].pf=3;start[1].pf=1;start[2].pf=0;start[3].pf=5;start[4].pf=4;start[5].pf=9;start[6].pf=2;start[7].pf=11;

pointer=0;

}

int find(int i){

for(int l=0;l<8;l++){

if(start[l].pf==i)

return l;

}

return -1;

}

int next(int pointer){

return (pointer+1)%8;

}

int request(int i){

if(find(i)!=-1){

cout<

start[find(i)].r=1;

return find(i);

}

else{

while(start[pointer].r==1){

start[pointer].r=0;

pointer=next(pointer);

}

cout<

start[pointer].pf=i;start[pointer].r=1;

return pointer;

}

}

void print(){

for(int i=0;i<8;i++){

cout<

}

cout<

}

};

int main(){

srand(time(NULL));

cout<

int ii;cin>>ii;

int i;frame f;table t;Clock c;

switch(ii){

case 1:

cout<

for(i=0;i<30;i++){

bitset<16> b(rand());b[15]=(bool)(rand()%2);

cout<

bitset<4> bb;bb[0]=b[12];bb[1]=b[13];bb[2]=b[14];bb[3]=b[15];

int logicalAddress=bb.to_ulong();

cout<

bitset<3> head(f.request(logicalAddress));

bitset<15> reality;

for(int j=0;j<12;j++){

reality[j]=b[j];

}

for(int k=0;k<3;k++){

reality[k+12]=head[k];

}

cout<

f.print();cout<

cout<

}

break;

case 2:

cout<

for(i=0;i<30;i++){

bitset<16> b(rand());b[15]=(bool)(rand()%2);

cout<

bitset<4> bb;bb[0]=b[12];bb[1]=b[13];bb[2]=b[14];bb[3]=b[15];

int logicalAddress=bb.to_ulong();

cout<

bitset<3> head(t.request(logicalAddress));

bitset<15> reality;

for(int j=0;j<12;j++){

reality[j]=b[j];

}

for(int k=0;k<3;k++){

reality[k+12]=head[k];

}

cout<

t.print();cout<

cout<

}

break;

case 3:

cout<

for(i=0;i<30;i++){

bitset<16> b(rand());b[15]=(bool)(rand()%2);

cout<

bitset<4> bb;bb[0]=b[12];bb[1]=b[13];bb[2]=b[14];bb[3]=b[15];

int logicalAddress=bb.to_ulong();

cout<

bitset<3> head(c.request(logicalAddress));

bitset<15> reality;

for(int j=0;j<12;j++){

reality[j]=b[j];

}

for(int k=0;k<3;k++){

reality[k+12]=head[k];

}

cout<

c.print();cout<

cout<

}

break;

}

return 0;

}

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值