南邮通达课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

通达学院

专业课程设计I

题目1 实现页面调度算法NRU 题目2 数字式定时器

专业计算机科学与技术

学生姓名张娟

班级学号11006605

指导教师戴华

指导单位计算机学院、软件学院

日期2014.6.9-2014.6.19

题目1 NRU算法

一、课题内容和要求

学习虚拟存储机制中页面调度算法,通过编程模拟实现页面调度的NRU算法(最近最不经常使用算法)。

页面置换算法是指在需要调入页面且内存已满时,确定将要换出页面的算法。置换算法的好坏直接影响系统的性能,不适当得算法可能导致进程发生“抖动”,又称“颠簸”。NRU为操作系统请求分页存储管理中的页面淘汰算法,又名近似的LRU置换算法。NRU算法需要给每个物理块增加一个附加位,称为使用位u,当某一页首次装入内存,该物理块的使用位设为1,当该物理块被使用时,他的使用位也设为1。对于页面置换算法,把用于替换的物理块集合看作是一个循环缓冲区,并且有一个指针与之关联。当需要进行页面置换时,如果指针所在的页面u=0,则将它置换,然后把指针指向下一个物理块,否则把该块的使用位置为0,然后跳过该块继续扫描,知道找到一个u=0的物理块为止。二、概要设计

1、NRU流程图

2、NRU置换算法:NRU算法需要给每个物理块增加一个附加位,称为使用位u,当某一页首次装入内存,该物理块的使用位设为1,当该物理块被使用时,他的使用位也设为1。对于页面置换算法,把用于替换的物理块集合看作是一个循环缓冲区,并且有一个指针与之关联。当需要进行页面置换时,如果指针所在的页面u=0,则将它置换,然后把指针指向下一个物理块,否则把该块的使用位置为0,然后跳过该块继续扫描,知道找到一个u=0的物理块为止。

例如内存块数为3,作业的页面走向为:5,8,910,43,33,56,78

二、详细设计

实现课题的源代码:

#include

#include

#include

#include

void zhihuan()

{ printf("\n\n");

printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");

printf("在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生\n");

printf("缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其\n");

printf("移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算\n");

printf("法。\n");

printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");

printf("\n\n");

} //界面设置,简单介绍页面置换算法

void introduce ()

{ printf("*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+ *+*+*+*+*+*+*+\n");

printf(" NRU算法简介\n"); printf("NRU算法需要给每个物理块增加一个附加位,称为使用位u,当某一页首次装入内存,该物理\n");

printf("块的使用位设为1,当该物理块被使用时,他的使用位也设为1。对于页面置换算法,把用于\n");

printf("替换的物理块集合看作是一个循环缓冲区,并且有一个指针与之关联。当需要进行页面置换\n");

printf("时,如果指针所在的页面u=0,则将它置换,然后把指针指向下一个物理块,否则把该块的\n");

printf("使用位置为0,然后跳过该块继续扫描,知道找到一个u=0的物理块为止。\n\n");

printf("*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*

+*+*+*+*+*+*+\n");

}

void designBy() //设计者信息

{

printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");

printf("┃☆☆☆☆课程设计:页面置换算法☆☆☆☆┃\n");

printf("┃学号:11006605 ┃\n");

printf("┃姓名:张娟┃\n");

printf("┣━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");

}

int OutBlockofM(int *BlockofMemory,int n1,int flag)//输出内存块页面序号

{

int i;

printf("内存中页块为:\t");

for(i=0;i

printf("%d\t",BlockofMemory[i]);

printf("\t");

if(flag!=-1) //判断标志位是否不等于-1,若不等于-1则淘汰该页面。

printf("淘汰页面号为:%d",flag);

printf("\n");

return -1;

}

void QuitBofM(int *BlockofMemory,int n1)//内存块页面序号清零

{

int i;

for(i=0;i

BlockofMemory[i]=0;

}

int PageInBofM(int PageNum,int *BlockofMemory,int n1)//页是否在内存中,若有相等的页,则不置换,不等就置换。

{

int i;

for(i=0;i

if(PageNum==BlockofMemory[i])

return 1;

return 0;

}

void NRU(int *BlockofMemory,int *PageNumofR,int n1,int n2,int flag,int count)

{

int* Interview; //访问位

int i,j=0,k;

Interview=(int *)malloc(n1*sizeof(int));动态申请4*n1字节的内存空间

printf("°★.☆°.★·°∴°★.°·∴°☆·°∴°☆..·\n");

相关文档
最新文档