计算机操作系统存储管理实验报告,《操作系统》存储管理实验报告

41528d3028836879cd698677c3999917.gif《操作系统》存储管理实验报告

____大学____学院实验报告课程名称: 计算机操作系统 实验名称: 存储管理实验 实验日期: 班级: 姓名: 学号: 仪器编号: XX 实验报告要求:1.实验目的 2.实验要求 3.实验步骤 4.程序清单 5.运行情况 6.流程图 7.实验体会1、实验目的通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解,熟悉虚存管理的各种页面淘汰法。 通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。2、实验要求设计一个固定式分区分配的存储管理方案,并模拟实现分区的分配和回收过程。可以假定每个作业都是批处理作业,并且不允许动态申请内存。为实现分区的分配和回收,可以设定一个分区说明表,按照表中的有关信息进行分配,并根据分区的分配和回收情况修改该表。设计一个可变式分区分配的存储管理方案,并模拟实现分区的分配和回收过程。 对分区的管理法可以是下面三种算法之一:首次适应算法;最坏适应算法;最佳适应算法。编写并调试一个段页式存储管理的地址转换的模拟程序。首先设计好段表、页表,然后给出若干个有一定代表性的地址,通过查找段表页表后得到转换的地址。要求打印转换前的地址,相应的段表,页表条款及转换后的地址,以便检查。3、实验步骤(1)理解实验要求,联系所学知识; (2)根据要求编写调度算法; (3)编写完整的实验代码并在 VC++ 6.0 环境下编译运行; (4)调试程序直至得出结果。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 ;elseprintf(“没有空闲分区,无法分配内存!\n“);}}void createTab(){int i;for( i=1;i#include #include#include#define n 10 #define m 10 #define minisize 100 struct{float address; float length; int flag; }used_table[n]; struct{float address; float length; int flag; }free_table[m];void allocate(char J,float xk) {int i,k;float ad;k=-1;for(i=0; i=xkif(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) {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=used_table[s].address;L=used_table[s].length;j=-1;k=-1;i=0;while(i=m) /*空闲区表满,回收空间失败, 将已分配表复原*/{printf(“主存空闲表没有空间,回收空间失败\n“);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(“\n\t\t\t 可变式分区分配 (最佳适应算法)\n“);printf(“\t\t*********************************************\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#includeusing namespace std;typedef struct Quick{int qs;//快表段号int qp;//快表页号int qb;//快表段号} Quick;typedef struct Data{int num;//内存的块数string str;//对应数据块的作业内容,简化起见说明内容为一串字符。} Data;//页表typedef struct Page{int num;//页号int flag;//页状态,即是否在内存。int block;//该页对应的块号} Page;typedef struct Stack{int num;//段号int flag;//段状态int plen;//页表长度int psta;//页表始址} Stack;//段表寄存器typedef struct Stare{int ssta;//段表始址int slen;//段表长度} Stare;Stack ss[10];全局变量Stare st;///全局变量Data work[20];//全局变量Quick qu;/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值