科技学院
课程设计(综合实验)报告
( 20## -- 2012 年度第 2 学期)
名 称: 硬件综合实验
题 目: 电子秒表
院 系: 信息工程系
班 级:
学 号:
学生姓名:
指导教师: 张琦
设计周数: 2
成 绩:
日期:2012 年 6 月 14 日
《硬件综合实验》
任 务 书
一、目的与要求
硬件综合实验是计算机科学与技术、网络工程等专业的必修课,本实践环节主要让学生进一步理解、巩固、加深前面所学课程,并能综合运用所学课程的知识进行设计,掌握硬件接口设计的理论与方法,为毕业设计和今后的工作打下良好的基础。
课程的基本要求:
1. 掌握可编程逻辑器件的原理。
2. 熟悉C51开发板使用方法,进行单片机开发板程序开发。
3. 掌握单片机的键盘,拨码开关等输入设备的应用。
4. 掌握LED、蜂鸣器等输出器件的使用。
二、主要内容
熟练应用Keil环境进行程序的编写和调试,并完成程序的调试、下载、运行功能。编程实现键盘,拨码开关,LED及1602液晶显示屏的工作。
三、进度计划
四、设计(实验)成果要求
设计一个电子秒表,要求以秒为单位计时,最长计时60分钟,具有启动、复位、 暂停和继续跑秒功能,各种功能用矩阵键盘输入,时间显示用数码管实现。
五、考核方式
实验结果(60%)+实验报告(30%)+实验过程表现(10%)
学生姓名:
指导教师:
20##年 6 月 4 日
一、课程设计(综合实验)的目的与要求
1. 学习并掌握基于单片机的c语言程序编写
2. 学习并熟练使用Keil Uvision2开发环境
3. 学习并应用STC89C52RC芯片原理
4. 学习并应用7段数码管显示原理和蜂鸣器控制原理
5. 学习并应用矩阵键盘输入原理
6. 编写程序实现电子秒表功能
二、设计(实验)正文
1. TX-1C型单片机开发板原理图
位选为高电平有效,数字编码从0到9的定义为:0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
片选为低电平有效,从左向右依次为秒的千位,百位,十位,个位
按下按钮后所在行和列会变为低电平,从而确定按键位置。
P0口用来寄存所要显示的数字,P2口用来锁存数据,P3口用来确定按键位置
2、定时/计数器的结构
定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。
3、定时/计数器的工作原理:
加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。
4、80C51中断系统的结构
80C51的中断系统有5个中断源(8052有 6个),2个优先级,可实现二级中断嵌套。
三、课程设计(综合实验)总结或结论
经过两个星期的课程设计,使我加深了单片机课程的了解,我们花费了很多的时间和精力,比如说重新温故C语言的书籍和以前所学单片机不太懂的知识,我觉得这几天让我过的十分的充实,我相信其余的队友也有相同的看法,下面是我的一些心得体会:
1. 将学习的理论知识通过实验融会贯通,让我对它的理解更加的深刻,对程序的编译过程也有一定了解。
2. 本次课程设计是以团队为主,没有团队的力量,在较短的时间内完成时难以实现的,因此培养了我们积极合作、认真的态度,每个人都有不同分工和任务,做好一个电子秒表也成为了一件很开心的事情,增进了同学们之间的沟通与交流。
3. 本次课程设计不仅涉及了编程、C语言和单片机的知识,也涉及其他两门学科上的知识,让我们了解了kvil基本知识。
总之,通过本次试验,不仅加深了我对单片机理论知识的理解,将理论更好的应用到实践中,而且锻炼了我们各个方面的能力,培养了坚强的意志和做事的耐心和细心,认识到合作的重要性,虽然过程中还有不足之处单这需要在实践中不断的锻炼才能提高,希望各位老师和同学多多指导,促进我们进步。
附录(设计流程图、程序)
1、实验流程图:
N
Y
N
YN Y N
Y
2、试验程序:
#include<reg51.h>
#define uchar unsigned char
uchar j,k,i;
sbit dula=P2^6; //锁存器控制端定义
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f};// 数字编码
unsigned char count=0;
unsigned char a1,a2,a3,a4,temp;
unsigned char pause=0,start=0;
int time=0;
void delay(uchar i) // 延时函数
{
for(j=i;j>0;j--)
for(k=110;k>0;k--);
}
void Time0_Init() //定时器 0 初始化函数
{
TMOD = 0x01; //工作模式选择
IE = 0x82; //中断设置
TH0 = 0xD8; //装初值
TL0 = 0xEF; //12MZ 晶振,10ms
}
void Time0_Int() interrupt 1 //定时器 0 中断子函数
{
TH0 = 0xD8;
TL0 = 0xEF;
count++; //长度加 1
}
void display() //显示函数
{
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
dula=1;
P0=table[a1]; // 显示千位
dula=0;
delay(1);
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
dula=1;
P0=table[a2]; //显示百位
dula=0;
delay(1);
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
dula=1;
P0=table[a3]; //显示个十位?
dula=0;
delay(1);
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
dula=1;
P0=table[a4]; //显示个位
dula=0;
delay(1);
}
void delay_1s()
{
while(1)
{
display();
if(count==70)
{
count=0;
break;
}
}
}
void key()
{
P3=0xfe;
temp=P3;
temp=temp&0xf0; // 把P3口与 11110000 相与
if(temp!=0xf0) // 如果有键按下刚一定不相等,于是进入// 下一步检测
{
delay(10); //延时去抖动
if(temp!=0xf0) //再次判断是否有键按下
{
temp=P3; // 判断为有,再次读 P3口数据
switch(temp) // 因为我们刚才是将第一行置的低
{ //在这里再判断是第几列
case 0xee: // 如果temp=0xee 则为第一行和第一列
time=0; // 的交叉点,由此我们知道是矩阵键盘
break; // 上的第一个键被按下,我们给 key=0 。
case 0xde: // 以后依此类推
pause=!pause;
break;
case 0xbe:
if(start==0)
start=1;
break;
}
while(temp!=0xf0) // 这段程序是检测按键是否被释放
{
temp=P3; //如果没有释放就一直等待并且
temp=temp&0xf0;
}
}
}
}
void main()
{
int i;
Time0_Init();
while(1)
{
key();
if(start==1)
break;
}
TR0=1;
while(1)
{
a1=time%10;
a2=(time/10)%10;
a3=(time/100)%10;
a4=time/1000;
for(i=0;i<200;i++)
{
display();
}
delay_1s();
time++;
key();
if(pause==1)
{
while(1)
{
display();
key();
if(pause==0)
break;
}
}
if(time==3600)
time=0; //如果到了则清零
}
}
第二篇:华北电力大学操作系统实验报告
华北电力大学科技学院
实验报告
实验名称 作业、进程调度、银行家、页面置换算法
课程名称 计算机操作系统实验
专业班级: 学生姓名:
学 号: 成 绩:
指导教师: 实验日期:
实验一 进程调度实验
一、实验目的
通过通过实验使学生更好地掌握操作系统的基本概念、基本原理、及基本功能。特别是进程的概念、进程控制块的概念以及进程的三种基本状态等概念。培养学生程序设计的方法和技巧,提高学生编制清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解,拓宽学生的知识领域,锻炼学生的实践技能。
二、实验要求
本实验模拟单处理器系统的进程调度,加深对进程的概念及进程调度算法的理解。用某种语言编写和调试一个进程调度的算法程序,有一些简单的界面,能够运行,仿真操作系统中进程调度的原理和过程。进程调度要求使用高响应比优先的动态优先级调度算法。
三、实验原理
动态优先权是指,在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。例如,我们可以规定,在就绪队列中的进程,随其等待时间的增长,其优先权以速率a提高。若所有的进程都具有相同的优先权初值,则显然是最先进入就绪队列的进程,将因其动态优先权变得最高而优先获得处理机,此即FCFS算法。若所有的就绪进程具有各不相同的优先权初值,那么,对于优先权初值低的进程,在等待了足够的时间后,其优先权便可能升为最高,从而可以获得处理机。当采用抢占式优先权调度算法时,如果再规定当前进程的优先权以速率b下降,则可防止一个长作业长期地垄断处理机。
高响应比优先调度算法是一种动态优先权调度算法,其优先权的变化规律可描述为:
由于等待时间与服务时间之和,就是系统对该作业的响应时间,故该优先权又相当于响应比RP。据此,又可表示为
四、实验所需仪器、设备、材料
PC机
五、实验思路
高响应比优先Rp值定义为:Rp=(已等待时间+要求运行时间)/要求运行时间=1+已等待时间/要求运行时间
高响应比优先算法实际是FCFS和SJF的一个折衷
分析:
(1) 若干作业同时到达,短作业先调入执行;
(2) 若干作业要求执行时间相同,先到作业先执行
(3) 一般情况,按计算Rp值调度
六、实验流程
实验二 作业调度实验
一、实验目的
模拟作业调度算法,学习作业在操作系统中的调度过程,加深对作业管理的理解。特别是作业调度的概念、作业调度与进程调度的区别。培养学生程序设计的方法和技巧,提高学生编制清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解,拓宽学生的知识领域,锻炼学生的实践技能。
二、实验要求
本实验模拟单处理器系统的作业调度,加深对作业调度算法的理解。用某种语言编写和调试一个作业调度的算法程序,有一些简单的界面,能够运行,仿真操作系统中作业调度的原理和过程。
1、 在后备作业队列中输入5道作业各自需要的时间及存储空间。数据输入格式如下:
2、 按先来先服务(FCFS)的原则进行调度,输出作业调度的顺序及各自的等待时间。
3、 按最短作业优先(SJF)的原则进行调度,输出作业调度的顺序及各自的等待时间。
4、 按最小作业(存储空间)优先的原则进行调度,输出作业调度顺序及各自的等待时间。
5.建立3个子函数对应3种算法,在主函数中调用它们并按格式输出相关信息;
6.按调度顺序输出作业,输出格式为:
作业编号、作业名、提交时间、运行时间、存储空间、等待时间
三、实验原理
作业调度算法和进程调度算法。其中作业调度算法主要有先来先服务法FCFS、短作业优先法SJF、最高响应比优先法HRN、定时轮转法和优先数法。在进程调度算法中主要介绍了先来先服务法FCFS、轮转法RR、多级反馈轮转法和优先数法。
需要指出的是:(1)在作业调度和进程调度中同时出现的算法,如FCFS、RR、优先数法,其使用原理是基本相同的;(2)作业调度算法和进程调度算法应严格与存储管理中的“请求淘汰换页算法”相区别,注意不要混淆。
实验提示
1、 根据作业输入数据,定义JCB结构;
struct JCB{
char JobNum[2];
char JobName[8];
…
};
2、 定义数据结构装载后备作业
JCB JobArray[MaxNumber];
3、 三种调度算法的设计
4、 C++语言描述顺序
建立文件:jcb.h;其中存放:
最大作业数;
定义数据结构JCB;
三个作业调度函数;
建立主函数,其中包含:
#include
#include”jcb.h”
void mian()
{
JCB jobArray[MaxNumber];
数据输入;
调用三种算法并输出调度结果;
}
四、实验仪器
PC机
五、实验思路
作业调度的实现主要考虑两个方面:第一,如何将系统中的作业组织起来;另一个是如何进行作业调度。
1) 设计作业队列的数据结构
2) 作业调度
a) 先来先服务算法(FCFS)
b) 短作业优先算法(SJF)
c) 最小作业优先算法
六、实验流程
实验三 银行家算法实验
一、实验目的
熟悉银行家算法,理解系统产生死锁的原因及避免死锁的方法,加深记意。
二、实验要求
用高级语言编写和调试一个描述银行家算法的程序。
设计五个进程{P0,P1,P2,P3,P4}共享三类资源{A,B,C}的系统,{A,B,C}的资源数量分别为10,5,7。进程可动态地申请资源和释放资源,系统按各进程的申请动态地分配资源。要求程序具有显示和打印各进程的某一时刻的资源分配表和安全序列;显示和打印各进程依次要求申请的资源号以及为某进程分配资源后的有关资源数据。
三、实验原理
利用银行家算法避免死锁
1、银行家算法中的数据结构
(1)可利用资源向量Available
(2)最大需求规阵Max
(3)分配矩阵Allocation
(4)需求矩阵Need
2、银行家算法
(1)如果Requesti<或=Need,则转向步骤2;否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。
(2)如果Request<或=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,P1必须等待。
(3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值:
Available:=Available-Requesti;
Allocation:=Allocationi+Request;
Needi:=Needi-request;
(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。
3、安全性算法
系统所执行的安全性算法可描述如下:
(1)设置两个向量
①工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,它含有m个元素,执行安全算法开始时,Work:=Allocation;
②Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]:=false;当有足够资源分配给进程时,令Finish[i]:=true。
(2)从进程集合中找到一个能满足下述条件的进程:
①Finish[i]:=false
②Need
如找到,执行步骤(3);否则,执行步骤(4)。
(3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:
Work:=Work+Allocation;
Finish[i]:=true;
Go to step 2;
(4)如果所有进程的Finish[i]=true,则表示系统处于安全状态;否则,系统处于不安全状态。
4、银行家算法之例
假设有五个进程{P0,P1,P2,P3,P4}和三种类型的资源{A,B,C},每一种资源的数量分别为10、5、7,在T0时刻的资源分配情况如图1所示。
图1
(1)T0时刻的安全性
利用安全性算法对T0时刻的资源分配情况进行分析,可得下表所示的T0时刻的安全性分析,从中得知,T0时刻存在着一个安全序列{P1,P3,P4,P2,P0},故系统是安全的,如图2所示。
图2
(2) P1请求资源
P1发出请求向量Request(1,0,2),系统按银行家 算法进行检查:
(1)Request1(1,0,2)≤Need(1,2,2)
(2)Request1(1,0,2)≤Available(3,3,2)
(3)系统先假定可为P1分配资源,并修改Aailable,Allocation1和Need1向量,由此形成的资源变化情况如图1中的圆括号所示。
(4)我们再利用安全性检查此时系统是否安全。
由所进行的安全性检查得知,可以找到一个安全序列{P1,P3,P4,P2,P0}。因此,系统是安全的,可以立即将P1所申请的资源分配给它。
(3)P4请求资源
P4发出请求向量Request(3,3,0),系统按银行家算法进行检查:
(1)Request4(3,3,0)≤Need4(4,3,1)。
(2)Request4(3,3,0)>Available(2,3,0),让P4等待。
(4) P0请求资源
P0发出请求向量Request0(0,2,0),系统按银行家算法进行检查:
(1)Request0(o,2,0)<或=Need0(7,4,3));
(5)进行安全性检查
可用资源Available{2,1,0}已不能满足任何进程的需要,故系统进入不安全状态,此时系统不分配资源。
如果在银行家算法中,把P0发出的请求向量改为Request(0,1,0),系统是否能将资源分配给它,请读者考虑
四、实验所需仪器、设备、材料
PC机
五、实验思路
银行家算法的基本思想是分配资源之前, 判断系统是否是安全的; 若是, 才分配。它是最具有代表性的避免死锁的算法。
设进程cusneed 提出请求REQUEST [i] ,则银行家算法按如下规则进行判断。
(1) 如果REQUEST [cusneed] [i]<= NEED[cusneed][i] ,则转(2) ;否则,出错。
(2) 如果REQUEST [cusneed] [i]<= AVAILABLE[cusneed][i] ,则转(3) ;否则,出错。
(3) 系统试探分配资源,,进
(4) 系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复 原状程等待
安全性检查算法
(1) 设置两个工作向量Work=AVAILABLE;FINISH
(2) 从进程集合中找到一个满足下述条件的进程, FINISH==false;
NEED<=Work;
如找到,执行(3) ;否则,执行(4)
(3) 设进程获得资源,可顺利执行,直至完成,从而释放资源。
Work+=ALLOCATION;
Finish=true;
(4) 如所有的进程Finish= true ,则表示安全;否则系统不安全
六、实验流程
实验四 存储器管理实验
一、实验目的
存储器管理的主要功能是,合理地分配内存空间,数据存储和查询。其中,请求页式存储管理是一种具有虚拟空间技术的存储器管理系统。
本实验的目的是,设计请求页式存储管理中的页面置换算法,加深了解虚拟存储技术的特点,掌握各种页面置换的算法。
二、实验要求
(1)通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成:
① 50%的指令是顺序执行的。
② 25%的指令均匀分布在低地址部分。
③ 25%的指令均匀分布在高地址部分。
具体实施的方法是:
① 在[0,319]的指令地址之间随机产生一个起点m;
② 顺序执行一条指令,即执行m+1处的执行;
③ 在地址[0,m+1]中随机选取一条指令执行,该指令的地址为m1;
④ 顺序执行一条指令,即执行m1+1处的执行;
⑤ 在地址[m1+2,319]中随机选取一条指令执行;
⑥ 重复上述步骤直到执行了320条指令为止。
(2)将指令序列改变为页地址流,并假设:
① 页面尺寸为1K。
② 用户的内存容量为4页到32页。
③ 用户的虚存容量为32K。
在用户虚存中,按每K存放10条指令来排列虚存地址,即320条指令在虚存放方式为:
第0条~第9条为0号页(对应的虚存地址为[0,9])。
第10条~第19条为1号页(对应的虚存地址为[10,19])。
… … … …
第310条~第319条为31号页(对应的虚存地址为[310,319])。
按上述方式,用户指令可组成32页。
(3)计算并输出下述各种算法在不同内存容量下的命中率。
① 先进先出算法(FIFO)。
② 最近最少使用算法(LRU)。
③ 最佳淘汰算法。
④ 最少访问页面算法(LFR)。
其中,命中率为:
命中率=(1+缺页次数)/页地址流长度
本实验中,页的地址流长度为320,页面失效次数为每次访问响应指令时,该指令对应的页面不在内存中的次数。
3.随机数的产生方法
在VC中设计到随机数有两个函数srand() and rand()。srand() 的作用是是一个种子,提供每次获得随机数的基数而已,rand()根据种子而产生随机数。
注意
1:srand() 里的值必须是动态变化的,否则得到的随机数就是一个固定数
2:如果我们想得到一个 0-60的随机数那么可以写成
int i;
srand(GetTickCount());
i=rand()%60;
三、实验原理
1、分页请求系统
为了能实现请求调页和置换功能,系统必须提供必要的硬件支持,其中,最重要的是:
(1)请求分页的页表机制。它是在分页的页表机制上增加若干个项而形成的,作为请求分页的数据结构;
(2)缺页中断机构。每当用户程序要访问的页面尚未调入内存时,便产生一缺页中断,以请求OS将所缺的页面调入内存;
(3)地址变换机构。它同样是在分页的地址变换机构的基础上发展形成的。
为了实现请求调页还须得到OS的支持,在实现请求调页功能时,石油OS将所需的页从外存调入内存;在实现置换功能时,也是由OS将内存的某些页调至外存。
2、页面置换算法
一、最佳(Optimal)置换算法
采用最佳置换算法可保证获得最低的缺页率。但由于人们目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不在被访问的,因而该算法也是无法实现的,但是可利用该算法去评价其它算法。图6-3示出了利用最佳置换算法时的置换图。由图可看出,采用最佳置换算法,只发生了6次页面置换。
二、先进先出页面置换算法
该算法总是淘汰最先进入内存的页面,即选择在内存中的驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老页面。但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,含有全局变量、常用函数、例程等的页面,FIFO置换算法并不能保证这些页面不被淘汰。
三、最近最久未使用LRU置换算法
1、LRU(Least Recently Used)算法的描述
FIFO置换算法之所以性能较差,是因为它所依据的条件是各个页面调入内存的时间,而页面调入的先后并不能反映页面的使用情况。而最近最久未使用(LRU)的页面置换算法,,则是根据页面调入内存后的使用情况。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似。因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。
2、LRU算法的硬件支持
把LRU算法作为页面置换算法是比较好的,它对于各种类型的程序都能适用,但实现起来有相当大的难度,因为它要求系统具有较多的支持硬件。所要解决的问题有:
1.一个进程在内存中的各个页面各有多久时间未被进程访问;
2.如何快速地知道哪一页最近最久未使用的页面。为此,须利用以下两类支持硬件:
(1)寄存器
用于记录某进程在内存中各页的使用情况。
(2)栈
可利用一个特殊的栈来保存当前使用的各个页面的页面号。每当进程访问某页面时,便将该页面的页面号从栈中移出,将它压入栈顶。
四、Clock 置换算法
1、简单的Clock置换算法
利用Clock算法时,只须为每页设置一位访问位,在将内存中的所有页面都通过链接指针链成一个循环队列。当某页被访问时,其访问位被置1。置换算法在选择一页淘汰时,只须检查其访问位。
2、改进型Clock置换算法
在将一个页面换出时,如果该页已被修改过,便须将它重新写到磁盘上;但如果该页未被修改过,则不必将它拷回磁盘。同时满足两条件的页面作为手癣淘汰的页。由访问位A和修改位M可以组合成下面四种类型的页面:
1 类(A=0,M=0)。表示该页最近既未被访问、又未被修改,是最佳淘汰页。
2 类(A=0,M=1)。表示该页最近未被访问,但已被修改,并不是很好的淘汰页。
3 类(A=1,M=0)。最近已被访问,但未被修改,该页有可能再被访问。
4 类(A=1,M=1)。最近已被访问且被修改,该页有可能再被访问。
在内存中的每个页必定是这四类页面之一,在进行页面置换时,可采用与简单Clock算法相类似的算法,其差别在于须同时检查访问位和修改位,以确定该页是四类页面中的那一种。此算法称为改进型Clock算法。其执行过程可分成以下三步:
(1)从指针所指示的当前位置开始,扫描循环队列,寻找A=0且M=0的第一类页面,将所遇到的第一个页面作为所选中的淘汰页。在第一次扫描期间不改变访问位A。
(2)如果第一步失败,即查找一周后未遇到第一类页面,则开始第二轮扫描,寻找A=0且M=1的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所有经过的页面的访问位置0。
(3)如果第二步也失败,即未找到第二类页面,则将指针返回到开始的位置,并将所有的访问位复0。然后,重复第一步,如果仍失败,必要时在重复第二步,此时就一定能够找到被淘汰的页。
五、其它置换算法
1、最少使用(Least Frequently Used)置换算法
在采用该算法时,应为在内存中的每个页面设置一移位寄存器,用来记录该页面被访问的频率,该置换算法选择在最近时期使用最少的页面作为淘汰页。
2、页面缓冲算法(Page Buffering Algorithm)
虽然LRU和Clock置换算法都比FIFO算法好,但它们都需要一定的硬件支持,置换一个已修改的页的开销要大。而页面缓冲算法则既改善分页系统的性能,又可采用一种较简单的置换策略。
六、请求分页系统的性能分析
1、缺页率对有效访问的时间的影响
缺页时须先调入该页的情况时,有效访问时间表示为:有效访问时间=(1-p) ma+p 缺页中断时间。
2、缺页中断时间的组成
(1)缺页中断时间服务时间;
(2)将缺页中断读入的时间;
(3)进程重新执行时间。
由于CUP速度很快,所以其中地(1)和(3)两部分可以不超过1ms;而将一磁盘块读入内存的时间,则包括寻道时间、旋转时间和数据传送时间三部分,大体上是24ms。由此可得知缺页中断时间约为25ms。此处尚未考虑到进程可能因排队等待所花费的时间。将上述数据代入到工集
有效访问时间
四、实验仪器
PC机
五、实验思路
该试验主要涉及到请求分页的管理的页面置换算法
设计最佳(Optimal)置换算法
先进先出页面置换算法
最近最久未使用LRU置换算法
Clock 置换算法
对缺页次数,缺页率的计算
六、实验流程
实验心得:通过本次实验了解并知道了了进程调度及银行家算法的实现过程,实验过程中遇到很多问题非常考验自己编程能力,要使自己能进一步提高必须进一步学习经典编程实例涉猎更加广泛弥补自己不足之处。