码迷,mamicode.com
首页 > 编程语言 > 详细

【操作系统-存储器管理】简单的clock置换算法的实现

时间:2015-04-19 16:17:53      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:操作系统   存储   

分析:clock置换算法是利用循环队列来实现的。操作系统课本上的讲解时这样的

代码实现:

#include<iostream>
using namespace std;
typedef struct numbernode
{
  int *data;
  bool *ask;//访问号
}Numnode;
typedef struct node
{
Numnode numnode;
int maxsize;
int rear;
int front;
}queue;
queue* create();
void push(queue *);
void pop(queue *);
int turnyemian(queue *myque,int Telem);
queue* create()
{
queue *myque=new queue;
myque->numnode.data=new int;
myque->numnode.ask=new bool;
myque->rear=0;
myque->front=0;
int i;
int m;
printf("队列共有多少个元素?\n");
scanf("%d",&m);
for(i=0;i<=m;i++)
myque->numnode.ask[i]=false;
myque->maxsize=m+1;
return myque;
}
void push(queue *myque)
{
if((myque->rear+1)%myque->maxsize!=myque->front)
{
       printf("请输入您访问的页面号?\n");
  scanf("%d",&myque->numnode.data[myque->rear]);
  myque->numnode.ask[myque->rear]=true;
  myque->rear=(myque->rear+1)%myque->maxsize;
}
else
{
int Telem;
printf("此时队列里面页面数满了,要进行页面置换\n");
printf("您要访问的页面号?\n");
   scanf("%d",&Telem);
turnyemian(myque,Telem);
    }
}
int turnyemian(queue *myque,int Telem)
{
int key=myque->front;
while(1)

if((myque->numnode.ask[key]==true)&&((key+1)%myque->maxsize!=myque->front))
          {
         myque->numnode.ask[key]=false;
 key=(key+1)%myque->maxsize;
           }
    if((key+1)%myque->maxsize==myque->front)
{
   key=(key+1)%myque->maxsize;
}
if(myque->numnode.ask[key]==false)
{
myque->numnode.data[key]=Telem;//用Telem的数值来置换这个页面
myque->numnode.ask[key]=true;
printf("用%d置换了这个页面\n",myque->numnode.data[key]);
return 0;
}
}
}
void pop(queue *myque)
{
if(myque->front!=myque->rear)
{
printf("您删除了循环队列的元素%d",myque->numnode.data[myque->front]);
myque->front=(myque->front+1)%myque->maxsize;
}
else
{
 printf("队列空了,不能再删除了");
}

}
void prints(queue *myque)
{
int p=myque->front;
while(p!=myque->rear)
{
if(p==myque->front)
{
printf("%d",myque->numnode.data[p]);
        p++;
}
else
{
printf("<- %d",myque->numnode.data[p]);
p++;
}
}

printf("\n");
}
int main(void)
{
queue *myque=new queue;
myque=create();
int key;
while(1)
{
      printf("*************请选择如下操作:*************\n");
      printf("1.添加元素\n");
      printf("2.删除元素\n");
      printf("3.显示循环队列\n");
  printf("4.退出系统\n");
      scanf("%d",&key);
         switch (key)
         {
 case 1:push(myque);break;
 case 2:pop(myque);break;
 case 3:prints(myque);break;
 case 4:return 0;
                     default:
              break;
         }
}
return 0;
}

结果展示:

技术分享

原始的3个页面

技术分享

第一次页面置换

技术分享

第二次置换

技术分享

第三次置换

技术分享

第四次置换

技术分享

至此,四次置换完成。

【操作系统-存储器管理】简单的clock置换算法的实现

标签:操作系统   存储   

原文地址:http://blog.csdn.net/wodeai1625/article/details/45129001

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!