存储管理-实验3_第1页
存储管理-实验3_第2页
存储管理-实验3_第3页
存储管理-实验3_第4页
存储管理-实验3_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

江南大学物联网工程学院实验报告 课程名称 操作系统 实验名称 存储管理实验 实验日期 2015 5 17 班级 计算机 1206 姓名 王成义 学号 1030412612 仪器编号 实验报告要求 1 实验目的 2 实验要求 3 实验步骤 4 程序清单 5 运行情况 5 实验体会 1 实验目的 实验目的 1 通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解 熟悉虚存管理的各种页面淘汰算法 2 通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解 2 实验要求 实验要求 1 设计一个固定式分区分配的存储管理方案 并模拟实现分区的分配和回收过程 2 设计一个可变式分区分配的存储管理方案 并模拟实现分区的分配和回收过程 3 实验步骤 实验步骤 1 产生一个需要访问的指令地址流 2 指令合适的页面尺寸 例如以 1K 或 2K 为 1 页 3 指定内存页表的最大长度 并对页表进行初始化 4 每访问一个地址时 首先要计算该地址所在的页的页号 然后查页表 判断该页是否在主存 如果该页 已在主存 则打印页表情况 如果该页不在主存且页表未满 则调入一页并打印页表情况 如果该页不 在主存且页表已满 则按 FIFO 页面淘汰算法淘汰一页后调入所需的页 打印页表情况 5 逐个地址访问 直到所有地址访问完毕 4 程序清单 程序清单 代码一 代码一 include include include include define NUM 4 define alloMemory type type malloc sizeof type struct partiTab int no int size int firstAddr char state parTab NUM typedef struct partiTab PARTITAB typedef struct jcb 定义作业控制块 JCB 部分信息省略 char name 10 作业名 int size 作业大小 struct jcb link 链指针 JCB typedef struct JCB front rear jcbQue jcbQue jcbReadyQue void AllocateMemory int size void createTab void checkTab void recycleMemory int i void AllocateMemory int size int i for i 0 isize parTab i state Y else printf 没有空闲分区 无法分配内存 n void createTab int i for i 1 i NUM i getPartiTab PARTITAB parTab i 1 no i parTab i 1 size 20 parTab i 1 firstAddr 21 parTab i 1 state N void checkTab int i printf 分区号 t 大小 t 起址 t 状态 n for i 0 i NUM i printf d t parTab i no printf d t parTab i size printf d t parTab i firstAddr printf c t parTab i state printf n void recycleMemory int i parTab i 1 state N int main int argc char argv printf n n t t t t n printf t t t t 实验三 存储管理 n printf t t t t n printf n n n t t t t t 计算机 1206 n printf t t t t t 王成义 n printf t t t t t1030412612 n printf t t t t t 完成时间 2015 5 17 n n n n printf t t t tWelcome n n int i printf 固定式分区分配存储管理 n createTab checkTab printf 请按任意键继续 n getchar printf 每个分区装入一道作业 n for i 0 i NUM i AllocateMemory i 1 3 checkTab printf 请按任意键继续 n getchar printf 假如一段时间后 其中一个作业结束 回收给它分配的分区 假如该作业在第 2 分区 n recycleMemory 2 checkTab printf 请按任意键继续 n getchar printf 接着 从外存后备作业队列中选择一个作业装入该分区 假如该作业大小为 10 n AllocateMemory 10 checkTab system PAUSE return 0 代码二 代码二 include include include include define n 10 假定系统允许的最大作业数为 n 假定模拟实验中 n 值为 10 define m 10 假定系统允许的空闲区表最大为 m 假定模拟实验中 m 值为 10 define minisize 100 空闲分区被分配时 如果分配后剩余的空间小于 minisize 则将该空闲分区全部分配 若大 于 minisize 则切割分配 struct float address 已分配分区起始地址 float length 已分配分区长度 单位为字节 int flag 已分配区表登记栏标志 用 0 表示空栏目 used table n 已分配区表 struct float address 空闲区起始地址 float length 空闲区长度 单位为字节 int flag 空闲区表登记栏标志 用 0 表示空栏目 用 1 表示未分配 free table m 空闲区表 void allocate char J float xk 给 J 作业 采用最佳分配算法分配 xk 大小的空间 int i k float ad k 1 for i 0 i xk if k 1 未找到可用空闲区 返回 printf 无可用空闲区 n return 找到可用空闲区 开始分配 若空闲区大小与要求分配的空间差小于 minisize 大小 则空闲区全部分配 若空闲区大小与要求分配的空间差大于 minisize 大小 则从空闲区划出一部分分配 if free table k length xk minisize free table k flag 0 ad free table k address xk free table k length else free table k length free table k length xk ad free table k address free table k length 修改已分配区表 i 0 while used table i flag 0 修正空闲区表 if free table k flag 0 前面找到的是整个空闲分区 free table k flag 1 else 前面找到的是某个空闲分区的一部分 free table k length free table k length xk return else 修改已分配表 used table i address ad used table i length xk used table i flag J return 主存分配函数结束 void reclaim char J 回收作业名为 J 的作业所占主存空间 int i k j s t float S L 寻找已分配表中对应登记项 s 0 while used table s flag J used table s flag 0 return 修改已分配表 used table s flag 0 取得归还分区的起始地址 S 和长度 L S used table s address L used table s length j 1 k 1 i 0 寻找回收分区的空闲上下邻 上邻表目 k 下邻表目 j while i m 找到上邻 if free table i address S L j i 找到下邻 i if k 1 if j 1 上邻空闲区 下邻空闲区 三项合并 free table k length free table j length free table k length L free table j flag 0 else 上邻空闲区 下邻非空闲区 与上邻合并 free table k length free table k length L else if j 1 上邻非空闲区 下邻为空闲区 与下邻合并 free table j address S free table j length free table j length L else 上下邻均为非空闲区 回收区域直接填入 在空闲区表中寻找空栏目 t 0 while free table t flag 1 used table s flag J return free table t address S free table t length L free table t flag 1 return 主存回收函数结束 int main printf n n t t t t n printf t t t t 实验三 存储管理 n printf t t t t n printf n n n t t t t t 计算机 1206 n printf t t t t t 王成义 n printf t t t t t1030412612 n printf t t t t t 完成时间 2015 5 18 n n n n printf t t t tWelcome n n printf n printf 可变式分区分配 最佳适应算法 n printf n printf n int i a float xk char J 空闲分区表初始化 free table 0 address 10240 起始地址假定为 10240 free table 0 length 10240 长度假定为 10240 即 10k free table 0 flag 1 初始空闲区为一个整体空闲区 for i 1 i m i free table i flag 0 其余空闲分区表项未被使用 已分配表初始化 for i 0 i n i used table i flag 0 初始时均未分配 while 1 printf 功能选择项 n1 显示主存 n2 分配主存 n3 回收主存 n4 退出 n printf 请选择相应功能 1 4 scanf d switch a case 4 exit 0 a 4 程序结束 case 2 a 2 分配主存空间 printf 输入作业名 J 和作业所需空间 xk scanf c c f allocate J xk 分配主存空间 break case 3 a 3 回收主存空间 printf 输入要回收分区的作业名 scanf c c reclaim J 回收主存空间 break case 1 a 1 显示主存情况 输出空闲区表和已分配表的内容 printf 输出空闲区表 n 起始地址 分区长度 标志 n for i 0 i m i printf 6 0f 9 0f 6d n free table i address free table i length free table i flag printf 按任意键 输出已分配区表 n getch printf 输出已分配区表 n 起始地址 分区长度 标志 n for i 0 i n i if used table i flag 0 printf 6 0f 9 0f 6c n used table i address used table i length used table i flag else printf 6 0f 9 0f 6d n used table i address used table i length used table i flag break default printf 没有该选项 n case while

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论