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

分析: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个页面

第一次页面置换

第二次置换

第三次置换

第四次置换

至此,四次置换完成。

时间: 2024-11-06 07:26:54

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

操作系统-存储器管理

存储器管理 存储器的层次结构 程序的装入和链接 用户程序要在系统中运行的话,就必须装入内存,然偶后将其转变为一个可执行的程序. 编译 由编译程序对用户源程序进行编译,形成若干个目标文件 链接 由链接程序将编译后形成的一组目标模块以及它们所需要的库函数接在一起,形成一个完整的装入模块 装入 由装入程序将装入模块装入内存 程序的链接 静态链接方式 在程序运行前,就先将各个目标模块以及它们所需要的库函数链接成一个完成的装配模块,之后都不会拆开,这样需要解决两个问题:修改相对地址,变换外部调用符号 装入

操作系统存储器管理知识点

1.多级存储器 1)存储层次可以分为三层:寄存器.主存(内存).辅存(磁盘): 2)不同层次之间还有相应的缓存以减小不同层次间读写速度不匹配程度:简单来说,主存也即寄存器和辅存之间的高速缓存: 3)不同层次的存储器读写效率不一样,读写速度越快,成本越高. 4)寄存器.主存.高速缓存等属于操作系统管理的范畴,断电后数据会丢失:而磁盘属于设备管理的范畴,断电后数据不会丢失. 2.程序装入 1)绝对装入方式:程序编译时即已经知道装入内存后的地址,程序的逻辑地址和实际内存地址完全一致,不需要重定位,这种

操作系统-存储器管理部分

存储器历来都是计算机系统中重要的组成部分.仍然是一种宝贵而又稀缺的资源. 如何对它加以有效的管理,不仅直接影响到存储器的利用效率,而且会影响系统的性能. 存储器的管理的主要对象是内存.在计算机执行时,几乎每一条指令都会涉及到对存储器的访问. 存储器的三个理想条件(这三个条件从现在技术来讲是不可能同时达到的) 1.对存储器的访问速度要跟得上处理机的运行速度. 2.要求存储器要有很大的容量. 3.而且存储器的造价应该很低. 在现代计算机系统当中无一例外的采用了多层结构的存储器系统. 存储器的多层结构

操作系统存储器管理选择题精练

1.在段页式存储管理中,其虚拟地址空间是() A.一维                               B.二维                                C.三维                            D.层次 答案:B 2.采用( )不会产生内部碎片(“内零头”)A.分页式存储管理                                                             B.分段式存储管理 C.固定分区式存储管理 

计算机操作系统 存储器管理

1.连续分配存储管理方式 1.1 单一连续分配 1.2 固定分区分配 1.2.1 分区大小相等 1.2.2 分区大小不相等 1.3 动态分区分配 1.3.1 数据结构 1.3.2 动态分配分区算法 1.3.2.1 基于顺序搜索的动态分区分配算法 1.3.2.1.1 首次适应算法(first fit) 1.3.2.1.2 循环首次适应算法(next fit) 1.3.2.1.3 最佳适应算法(best fit) 1.3.2.1.4 最坏适应算法(worst fit) 1.3.2.2 基于索引搜索的

存储器管理之页面置换算法

地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断.当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间.而用来选择淘汰哪一页的规则叫做页面置换算法.常见的置换算法有: 1)最佳置换算法(OPT)(理想置换算法) 这是一种理想情况下的页面置换算法,但实际上是不可能实现的.该算法的基本思想是:发生缺页时,有些页面在内存中,其中有一页将很快被访问(也包含紧接着的下一条指令的那页),而其他页面则可能要到10.100或者1000条指令后才会被访问,

【操作系统】存储器管理(四)

一.前言 在分析了处理器调度后,接着分析存储器管理,如何对存储器进行有效的管理,直接影响着存储器的利用率和系统性能.下面,开始存储器管理的学习. 二.存储器的层次结构 2.1 主存储器 主存储器是计算机系统中的一个主要部件,用于保存进程运行时的程序和数据,CPU的控制部件只能从主存储器中取得指令和数据,数据能够从主存储器中读取并将他们装入到寄存器中,或者从寄存器存入到主存储器,CPU与外围设备交换的信息一般也依托于主存储器地址空间.但是,主存储器的访问速度远低于CPU执行指令的速度,于是引入了寄

操作系统内存管理、Cache调度策略学习

目录 0. 引言 1. 内存管理的概念 2. 内存覆盖与内存交换 3. 内存连续分配管理方式 4. 内存非连续分配管理方式 5. 虚拟内存的概念.特征及其实现 6. 请求分页管理方式实现虚拟内存 7. 页面置换算法 8. 页面分配策略 9. 页面抖动和工作集 0. 引言 在安全攻防产品的研发中,我们会大量用到cache的机制.在学习和使用cache缓存的时候,经常会遇到cache的更新和替换的问题,如何有效对cache进行清理.替换,同时要保证cache在清理后还要保持较高的命中率.通过对比我们

操作系统内存管理之 内部碎片vs外部碎片

外部碎片:因为行程持续地被载入与置换,使得可用的记忆体空间被分割成许多不连续的区块.虽然记忆体所剩空间总和足够让新行程执行,却因为空间不连续,导致程式无法载入执行. 内部碎片:发生在以固定长度分割区来进行配置的记忆体中当一个程式载入到固定大小的分割区时,假如程式小于分割区,则剩余的空间将无法被使用,称为内部碎片.利用聚集或分页可以消除外部碎片. "碎片的内存"描述一个系统中所有不可用的空闲内存.这些资源之所以仍然未被使用,是因为负责分配内存的分配器使这些内存无法使用.这一问题通常都会发