2022年操作系统实验五 .pdf
《2022年操作系统实验五 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统实验五 .pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验五存储分配 实验目的 1 了解动态分区分配方式中使用的数据结构和分配算法,并进一步加深对动态分区存储管理方式及实现过程的理解。2通过对页面、页表、地址转换和页面转换过程的模拟,加深对请求调页系统的原理和实现过程的理解。实验内容和步骤 1用 C 语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程 alloc()和回收过程 free()。其中,空闲分区通过空闲分区链管理;在进行内存分配时,系统优先使用空闲区低端的空间。2假设初始状态下,可用的内在空间为640KB,并有下列的请求序列:作业 1申请 130KB 作业 2申请 60KB 作业 3申请 100KB 作业 2释放 60KB 作
2、业 4申请 200KB 作业 3释放 100KB 作业 1释放 130KB 作业 5申请 140KB 作业 6申请 60KB 作业 7申请 50KB 作业 6释放 60KB 请分别采用首次适应算法和最佳适应算法进行内存块的分配和回收,要求每次分配和回收后显示出空闲内存分区链的情况。3假设每个页面中可存放10 条指令,分配给一个作业的内存块数为4 4用 C 语言模拟一作业的执行过程。该作业共有320 条指令,即它的地址空间为 32页,目前它的所有页都还未调入内存。在模拟过程中,如果访问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数
3、,并将相应页调入内存。如果4 个内存块中均已装入该作业,则需进行页面转换。最后显示其物理地址,并转下一条指令。在所有320 条指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。5置换算法:请分别考虑OPT、FIFO 和 LRU 算法。6作业中指令的访问次序按下述原则生成:50%的指令是顺序执行的25%的指令是均匀分布在前地址部分25%的指令是均匀分布在后地址部分具体的实施办法:在0,319 之间随机选取一条起始指令,其序号为m 顺序执行下一条指令,即序号为m+1的指令通过随机数,跳转到前地址部分 0,m-1 中的某条指令处,其序号为 m1 ;名师资料总结 - - -精品资料欢迎下载 -
4、- - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 13 页 - - - - - - - - - 顺序执行下一条指令,即序号为m1+1的指令通过随机数,跳转到后地址部分m1+2,319中的某条指令处,其序号为 m2; 顺序执行下一条指令,即序号为m2+1的指令重复跳转到前地址部分、顺序执行、跳转到后地址部分、顺序执行的过程,直至执行 320条指令。代码 1:#include #include #define Free 0 /空闲状态#define Busy 1 / 已用状态#define OK 1 / 完成#define
5、 ERROR 0 / 出错#define MAX_length 640 / 最大内存空间为640KB typedef int Status; typedef struct freearea/定义一个空闲区说明表结构 int ID; / 分区号long size; /分区大小long address; /分区地址int state; / 状态ElemType; /- 线性表的双向链表存储结构- typedef struct DuLNode /double linked list ElemType data; struct DuLNode *prior; /前趋指针struct DuLNode *
6、next; / 后继指针DuLNode,*DuLinkList; DuLinkList block_first; /头结点DuLinkList block_last; /尾结点Status alloc(int);/ 内存分配Status free(int); / 内存回收Status First_fit(int,int);/ 首次适应算法Status Best_fit(int,int); / 最佳适应算法void show();/ 查看分配Status Initblock();/ 开创空间表Status Initblock()/ 开创带头结点的内存空间链表 block_first=(DuLin
7、kList)malloc(sizeof(DuLNode); block_last=(DuLinkList)malloc(sizeof(DuLNode); block_first-prior=NULL; block_first-next=block_last; block_last-prior=block_first; block_last-next=NULL; block_last-data.address=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 13 页
8、- - - - - - - - - block_last-data.size=MAX_length; block_last-data.ID=0; block_last-data.state=Free; return OK; /- 分 配 主 存 - Status alloc(int ch) int ID,request; coutID; coutrequest; if(request0 |request=0) cout 分配大小不合适,请重试!endl; return ERROR; if(ch=2) / 选择最佳适应算法 if(Best_fit(ID,request)=OK) cout分配成功
9、! endl; else cout 内存不足,分配失败!endl; return OK; else /默认首次适应算法 if(First_fit(ID,request)=OK) cout分配成功! endl; else cout 内存不足,分配失败!data.ID=ID; temp-data.size=request; temp-data.state=Busy; DuLNode *p=block_first-next; while(p) if(p-data.state=Free & p-data.size=request) / 有大小恰好合适的空闲块p-data.state=Busy; p-d
10、ata.ID=ID; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 13 页 - - - - - - - - - return OK; break; if(p-data.state=Free & p-data.sizerequest) / 有空闲块能满足需求且有剩余 temp-prior=p-prior; temp-next=p; temp-data.address=p-data.address; p-prior-next=temp; p-prior=temp; p-d
11、ata.address=temp-data.address+temp-data.size; p-data.size-=request; return OK; break; p=p-next; return ERROR; /- 最佳适应算法- Status Best_fit(int ID,int request) int ch; / 记录最小剩余空间DuLinkList temp=(DuLinkList)malloc(sizeof(DuLNode); temp-data.ID=ID; temp-data.size=request; temp-data.state=Busy; DuLNode *p
12、=block_first-next; DuLNode *q=NULL; /记录最佳插入位置while(p) / 初始化最小空间和最佳位置 if(p-data.state=Free & (p-data.sizerequest | p-data.size=request) ) q=p; ch=p-data.size-request; break; p=p-next; while(p) if(p-data.state=Free & p-data.size=request) / 空闲块大小恰好合适p-data.ID=ID; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - -
13、- - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 13 页 - - - - - - - - - p-data.state=Busy; return OK; break; if(p-data.state=Free & p-data.sizerequest) / 空闲块大于分配需求if(p-data.size-requestdata.size-request;/更新剩余最小值q=p;/更新最佳位置指向 p=p-next; if(q=NULL) return ERROR;/没有找到空闲块else / 找到了最佳位置并实现分配temp-prior=q-pri
14、or; temp-next=q; temp-data.address=q-data.address; q-prior-next=temp; q-prior=temp; q-data.address+=request; q-data.size=ch; return OK; /- 主 存 回 收 - Status free(int ID) DuLNode *p=block_first; while(p) if(p-data.ID=ID) p-data.state=Free; p-data.ID=Free; if(p-prior-data.state=Free)/ 与前面的空闲块相连 p-prior
15、-data.size+=p-data.size; p-prior-next=p-next; p-next-prior=p-prior; if(p-next-data.state=Free)/ 与后面的空闲块相连 p-data.size+=p-next-data.size; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 13 页 - - - - - - - - - p-next-next-prior=p; p-next=p-next-next; break; p=p-ne
16、xt; return OK; /- 显示主存分配情况- void show() cout+/n; cout+ 主 存 分 配 情 况 +/n; coutnext; while(p) coutdata.ID=Free) coutFreeendl; else coutdata.IDendl; cout 起始地址: data.addressendl; cout 分区大小: data.size KBendl; coutdata.state=Free) cout 空 闲 endl; else cout 已分配 endl; cout next; /- 主 函 数- void main() int ch;/
17、 算法选择标记cout 动态分区分配方式的模拟/n; cout*/n; cout* 1) 首次适应算法2)最佳适应算法*/n; cout*/n; coutch; Initblock(); / 开创空间表int choice; / 操作选择标记while(1) cout*/n; cout* 1: 分配内存2: 回收内存*/n; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 13 页 - - - - - - - - - cout* 3: 查看分配0: 退 出 */n; co
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年操作系统实验五 2022 操作系统 实验
限制150内