操作标准系统—河海大学文天学院 下载本文

}

} while (b==0);

cout<<\尊敬的用户,您所创建的进程数为\plist head;

head=(plist)malloc(sizeof(pcb));//为头结点分配空间 head->next=NULL;

create(head,a);//通过插入的方法构造链表 cout<

cout<<\初始化创建的进程为:\start=clock();

showjincheng(head); //显示链表的内容 yunxing(head); //对进程进行操作的过程 cout<

cout<<\所有的进程都已经运行结束了!\cout<

shijian=double(finish-start)/CLOCKS_PER_SEC; cout<<\程序的执行时间为\cout<

实验二 存储管理

一、实验目的

存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚

拟存储管理技术。

本实验的目的是通过请求页式存储管理中页面置换算法模拟设计 , 了解虚拟存储技术的特点 , 掌握请求页式存储管理的页面置换算法。

二、实验内容

通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成 : ① 50% 的指令是顺序执行的;

② 25% 的指令是均匀分布在前地址部分; ③ 25% 的指令是均匀分布在后地址部分。 具体的实施方法是 :

①在 [0,319] 的指令地址之间随机选取一起点 m; ②顺序执行一条指令;

③在前地址[0,m+1]中随机选取一条指令并执行 , 该指令的地址为 m′; ④顺序执行一条指令 , 其地址为 m′+1;

⑤在后地址 [m′+2,319] 中随机选取一条指令并执行 ; ⑥重复上述步骤② ~ ⑤ , 直到执行 320 次指令。 (1) 将指令序列变换成为页地址流 设:①页面大小为 1K;

②用户内存容量为 4 页到 32 页 ; ③用户虚存容量为 32K 。

在用户虚存中 , 按每 K 存放 10 条指令排列虚存地址 , 即 320 条指令在虚存中的存放方式为 :

第 0 条 ~ 第 9 条指令为第 0 页 ( 对应虚存地址为 [0,9]);

第 10 条 ~ 第 19 条指令为第 1 页 ( 对应虚存地址为 [10,19] ) ;

┇ ┇

第 310 条 ~ 第 319 条指令为第 31 页 ( 对应虚存地址为 [310,319]) 。 按以上方式 , 用户指令可组成 32 页。

(2) 计算并输出下述各种算法在不同内存容量下的命中率。 ① 先进先出的算法 (FIFO); ② 最近最久未使用算法 (LRU);

命中率 = 1 - 页面失效次数∕页地址流长度

在本实验中 , 页地址流长度为 320, 页面失效次数为每次访问相应指令时 , 该指令所对应的页不在内存的次数。

三、虚拟内存实现原理图

内存分配和回收机制 请求页机制 地址映射机制 交换机制

缓存和刷新机制 四.源程序分析

/*08计算机4班*/ #include #include //队列

#include //获取系统的时间 using namespace std;

typedef struct //页面的结构体信息 {

int id; //页面的id号

int staytime; //在内存中的停留的时间 int unusualtime; //多久未被使用的时间 }Cpage;

deque queue; //可以直接的使用队列的方法 deque interPage; //内存中的页面 deque exterPage; //外存中页面 int xianzaiweizhi;

int lacknum[2] ={0,0}; //缺失的页面数

int getRandNum(int range) //返回[0,range)范围内的整数 {

return int(rand()%range); //根据srand函数得到随机数

}

void InitDevice() //初始化运行队列 按照25% 50% 25%的标准生成 {

srand(int(time(NULL)));

//通过调用系统时间,产生随机数,并强制的转化成整型 int yehao = getRandNum(320); //随机选择第一条指令 queue.push_back(yehao); //将其插入队列 if(yehao <319)

queue.push_back(yehao+1); //顺序执行下一条指令 while(queue.size() < 320) //一直运行到队列中的个数等于320 {

yehao = getRandNum(yehao); //跳转到m1属于[0,m-1] queue.push_back(yehao); //将m1插入队列 if(yehao < 319)

queue.push_back(yehao+1); //将m1+1插入队列 int temp = 320 - (yehao + 2);

yehao = yehao+2+getRandNum(temp);//跳转到m2属于[m+2,319] queue.push_back(yehao); //插入队列 if(yehao < 319)

queue.push_back(yehao+1); //将m2+1插入队列 }

while(queue.size() > 320)