操作系统实验二-内存管理规定_第1页
操作系统实验二-内存管理规定_第2页
操作系统实验二-内存管理规定_第3页
操作系统实验二-内存管理规定_第4页
操作系统实验二-内存管理规定_第5页
免费预览已结束,剩余3页可下载查看

下载本文档

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

文档简介

1、洛阳理工学院实验报告系别计算机系班级学号姓名课程名称计算机操作系统实验日期实验名称实验二 分区内存管理成绩实验目的:通过这次实验,加深对内存管理的认识,进一步掌握内存的分配、回收算法的思想。实验条件:微机一台,操作系统:windows 7,编程环境:Microsoft Visual Studio 2010。实验原理:设计程序模拟内存的动态分区内存管理方法。内存分区使用分区(说明)表进行管理,采用最先适应算法从分区表中寻找空闲区进行分配,内存回收时不考虑与相邻空闲区的合并。假定系统的内存共640K,初始状态为操作系统本身占用40K。t1时刻,为作业A、B、C分配80K、60K、100K、的内存空

2、间;t2时刻作业B完成;t3时刻为作业D分配50K的内存空间;t4时刻作业C、A完成;t5时刻作业D完成。要求编程序分别输出t1、t2、t3、t4、t5时刻内存的空闲分区。实验内容:#include <stdio.h> #include <stdlib.h> #include <malloc.h> int j=0; typedef struct PCB_type char name; int address,len,valid; PCB; typedef struct seqlist PCB PCBelem4; int total; PCBseql;type

3、def struct Partiton int address,len,valid; Part; typedef struct Partlist Part Partelem5; int sum; Partseql;PCBseql *pcbl; Partseql *partl; void initpcb() pcbl=(PCBseql *)malloc(sizeof(PCBseql); pcbl->total=0; void intipart() partl=(Partseql *)malloc(sizeof(Partseql); partl->Partelem0.address=4

4、0; partl->Partelem0.len=600; partl->Partelem0.valid=1; partl->sum=1; void request(char name,int len) int i;for(i=0;i<partl->sum;i+) if(partl->Partelemi.len>len) pcbl->PCBelempcbl->total.address=partl->Partelemi.address;partl->Partelemi.address+=len;pcbl->PCBelempc

5、bl->total.len=len;partl->Partelemi.len-=len;pcbl->PCBelempcbl->=name;pcbl->PCBelempcbl->total.valid=1; pcbl->total+; break; else if(partl->Partelemi.len=len) while(i<partl->sum) partl->Partelemi=partl->Partelemi+1; i+; partl->sum-; else printf("内

6、存分配不足!"); printf("n"); void release(char name) int i; int k; int m; int o; int p; int q; Part *s; s=(Part *)malloc(sizeof(Part); for(i=0;i<pcbl->total;i+) if(pcbl->PCB=name) partl->sum+;pcbl->PCBelemi.valid=0; partl->Partelempartl->sum-1.address=pcbl->

7、;PCBelemi.address; partl->Partelempartl->sum-1.len=pcbl->PCBelemi.len;partl->Partelempartl->sum-1.valid=1;for(k=partl->sum-1;k>0;k-) for(m=0;m<k;m+) if(partl->Partelemk.address<partl->Partelemm.address) o=partl->Partelemk.address; p=partl->Partelemk.len; q=part

8、l->Partelemk.valid; partl->Partelemk.address=partl->Partelemm.address; partl->Partelemk.len=partl->Partelemm.len; partl->Partelemk.valid=partl->Partelemm.valid; partl->Partelemm.address=o; partl->Partelemm.len=p; partl->Partelemm.valid=q; break; void print() int i; j=j+

9、1; for(i=0;i<partl->sum;i+) printf("t%d时刻.空闲分区有:地址 %d 长度 %d n",j,partl->Partelemi.address,partl->Partelemi.len); void main() char a,b,c,d; int e,f,g,h; initpcb(); intipart(); printf("请输入进程a的名字和所需的内存空间的大小: "); scanf("%c,%d",&a,&e); getchar(); request(

10、a,e);printf("请输入进程b的名字和所需的内存空间的大小: "); scanf("%c,%d",&b,&f); getchar(); request(b,f); printf("请输入进程c的名字和所需的内存空间的大小: "); scanf("%c,%d",&c,&g); getchar();request(c,g);print(); printf("n");printf("进程%c结束.正在释放进程%cn",b); release(

11、b);print(); printf("n");printf("请输入进程d的名字和所需的内存空间的大小: "); scanf("%c,%d",&d,&h); getchar(); request(d,h);print(); printf("n");printf("进程结束.正在释放进程%cn",a);release(a); printf("进程结束.正在释放进程%cn",c);release(c);print(); printf("n");printf("进程结束.正在释放进程%cn",d);release(d); print(); printf("n");原始数据纪录:输入数据:T1时刻 a 80, b 60, c 100,输出空闲分区T2时刻,进程结束,释放进程b,输出空闲分区T3时刻输入d 50后,输出空闲分区T4时刻 进程结束, 释放a, c

温馨提示

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

评论

0/150

提交评论