南邮通达课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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("┃姓名:张娟
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");