- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
信息安全课程设计27267new.doc
信息安全课程设计
课程名称:网络信息安全
设计题目:置换密码课程设计
专业:计算机科学与技术
班级:1班
学生姓名:张亮
学号
指导老师:吕林涛
方法:在[0,199]指令地址间存放的实验目的
加深对存储管理功能的理解;
了解存储管理如何合理分配空间;
掌握请求页式存储管理的页面置换算法。
通过随机数产实验内容
生200条的指令序列,指令的访问地址范围为8K。
是0~8K-1之间的随机数,表示该指令要访问的地址。
得到200个地址后将其转换成[页号,页内地址]的格式输出,设置页面大小为1K。例如:地址2055- [2,7],即2055=2x1024+7。
将指令序列变换成页地址流,即页面走向。设置物理块M。
计算并输出以下页面置换算法的命中率(1- 缺页率):
(1)先进先出置换算法(FIFO)
(2)最近最久未使用置换算法(LRU)
(3)最佳置换算法(OPT)。
随机数产生方法
利用srand()设好随机数种子,如:srand(10*getpid()),产生不同的随机数序列;如果未设随机数种子,rand()在调用时会自动设随机数种子为1,每次产生的随机数序列相同。
再利用rand()产生随机数,如:产生介于0到10 间的随机数值x=rand() mod 11;
4,代码(这里贴的代码缩进不好,可读性差,需要的话来直接点击下载page.c吧~)
#includestdio.h
#includestdlib.h
#includetime.h
#defineBLOCK_MAX_SIZE 20//最大物理块大小
enum{FIFO=1,LRU,OPT};
structnode_page{
intaddress;//指令地址
intpage_num;//页面号
intnext_order;//下一次访问的次序
}*page;
//物理块定义
typedefstruct BlockNode{
intpage_index;//page数组的下标
structBlockNode * next;
}BlockNode;
struct{
intlength;//当前物理块长度
intmiss_flag;//缺页标志,若为1,则缺页
intmiss_count;//缺页次数
BlockNode*front;
BlockNode*rear;
}Block;
//本程序中全局变量名均由两个单词组成,且开头字母大写
intBlockSize = 5;//物理块大小
intPageCount = 200;//页面总数
intPageSize = 1024;//页面大小
intAddrRange = 8*1024;//访问地址范围
intget_num(int down,int up)//得到一个down~up之间的整数
{
intnum;
charstr[111];
while(1){
fgets(str,111*sizeof(int),stdin);
num=atoi(str);//把字符串中的数字转换为整数
if(num=down num=up)
break;
printf(输入范围有误,请重新输入:);
}//while
returnnum;
}
voidinit_block()//构造一个空的物理块队列
{
Block.rear=Block.front=(BlockNode*)malloc(sizeof(BlockNode));
if(!Block.front){
printf(内存分配失败!\n);
exit(0);
}
Block.length=0;
Block.miss_count=0;
Block.rear-next=NULL;
}
voidenqueue(int page_index)//入队
{
BlockNode*node=(BlockNode*)malloc(sizeof(BlockNode));
if(!node){
printf(内存分配失败!\n);
exit(0);
}
node-page_index=page_index;
node-next=NULL;
Block.length++;
Block.rear-next=node;
Block.rear=node;
}
voiddequeue()//出队
{
BlockNode*node;
node=Block.front-next;
Block.front-next=node-next;
if(node== Block.rear)
Block.rear=Block.front;
free(node);
Block.length--;
}
voidclear_block()//清空物理块
{
while(Bloc
文档评论(0)