一、 实验目的
采用可变式分区管理,使用最佳适应算法实现主存的分配与回收
通过本次实验,帮助学生理解在可变式分区管理方式下,如何实现主存空间的分配与回收。
二、 实验内容
主存是中央处理机能直接存取指令和数据的存储器。能否合理而有效地使用主存,在很大程度上将影响到整个计算机系统的性能。本实验采用可变式分区管理,使用首次或最佳适应算法实现主存空间的分配与回收。要求采用分区说明表进行。
三、 代码及运行结果分析

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma warning(disable:4996)
#define MAX 1000
struct partition {char    pn[10];//分区名字int     begin;//起始地址int     size;//分区大小int     end;//结束地址char    status[10];//分区状态
}part[MAX];
int    p = 0; void Init()//初始化分区地址、大小以及状态
{for (int i = 0; i < MAX; i++) strcpy_s(part[i].status, "null"); strcpy_s(part[0].pn, "system");part[0].begin = 0;part[0].size = 150;strcpy_s(part[0].status, "占用");strcpy_s(part[1].pn, "-----");part[1].begin = 150;part[1].size = 150;strcpy_s(part[1].status, "空闲");strcpy_s(part[2].pn, "AAA");part[2].begin = 300;part[2].size = 80;strcpy_s(part[2].status, "占用");strcpy_s(part[3].pn, "-----");part[3].begin = 380;part[3].size = 120;strcpy_s(part[3].status, "空闲");strcpy_s(part[4].pn, "BBB");part[4].begin = 500;part[4].size = 180;strcpy_s(part[4].status, "占用");strcpy_s(part[5].pn, "-----");part[5].begin = 680;part[5].size = 170;strcpy_s(part[5].status, "空闲");strcpy_s(part[6].pn, "CCC");part[6].begin = 850;part[6].size = 70;strcpy_s(part[6].status, "占用");strcpy_s(part[7].pn, "DDD");part[7].begin = 920;part[7].size = 80;strcpy_s(part[7].status, "占用");for (int i = 0; i < MAX; i++)part[i].end = part[i].begin + part[i].size - 1;
}void display() //显示分区
{printf("\n        占用表");printf("\n\tNo.\tproname\tbegin\tsize\tend\tstatus");printf("\n");int n1 = 0;for (int i = 0; i < MAX; i++){if (strcmp(part[i].status, "null") == 0) break;if (strcmp(part[i].status, "占用") == 0){n1++;printf("\n\tNo.%d", n1);printf("\t%s\t%d\t%d\t%d\t%s", part[i].pn, part[i].begin, part[i].size, part[i].end, part[i].status);}}printf("\n");printf("\n        空闲表");printf("\n\tNo.\tproname\tbegin\tsize\tend\tstatus");printf("\n");int n2 = 0;for (int i = 0; i < MAX; i++){if (strcmp(part[i].status, "null") == 0) break;if (strcmp(part[i].status, "空闲") == 0){n2++;  printf("\n\tNo.%d", n2);printf("\t%s\t%d\t%d\t%d\t%s", part[i].pn, part[i].begin, part[i].size, part[i].end, part[i].status);}}printf("\n");printf("\n        内存使用情况");printf("\n\tNo.\tproname\tbegin\tsize\tend\tstatus");printf("\n");int n3 = 0;for (int i = 0; i < MAX; i++){if (strcmp(part[i].status, "null") == 0) break;n3++;printf("\n\tNo.%d", n3);printf("\t%s\t%d\t%d\t%d\t%s", part[i].pn, part[i].begin, part[i].size, part[i].end, part[i].status);}printf("\n");
}void distribute() // 分配
{int i;char   workName[10];int    workSize;int    pFree;printf("\n        内存使用情况");printf("\n\tNo.\tproname\tbegin\tsize\tend\tstatus");printf("\n");int n3 = 0;for (i = 0; i < MAX; i++){if (strcmp(part[i].status, "null") == 0) break;n3++;printf("\n\tNo.%d", n3);printf("\t%s\t%d\t%d\t%d\t%s", part[i].pn, part[i].begin, part[i].size, part[i].end, part[i].status);}printf("\n");printf("\n请输入作业名称:");scanf("%s", &workName);for (i = 0; i < MAX; i++) {if (strcmp(part[i].pn, workName)==0)//判断作业名称是否已经存在{printf("\n该作业已存在,无法分配\n");return;}}printf("请输入作业大小(k):");scanf("%d", &workSize);for (i = 0; i < MAX; i++) {//通过循环在空闲区找是否有适合区间存储作业if (strcmp(part[i].status, "空闲") == 0 && part[i].size >= workSize) {pFree = i;break;}}if (i == MAX) {printf("\n该作业超出目前最大可分配空间,无法分配\n");getchar();return;}for (i = 0; i < MAX; i++)//最佳适应算法if (strcmp(part[i].status, "空闲") == 0 && part[i].size >= workSize)if (part[pFree].size > part[i].size)pFree = i;//通过遍历所有区间,每次都找到最小空闲分区进行分配int a = pFree;for (int i = MAX; i > a + 1; i--) {if (strcmp(part[i - 1].status, "null") == 0) continue;part[i] = part[i - 1];}strcpy_s(part[a + 1].pn, "-----");part[a + 1].begin = part[a].begin + workSize;part[a + 1].size = part[a].size - workSize;part[a + 1].end = part[a+1].begin + part[a+1].size - 1;strcpy_s(part[a + 1].status, "空闲");strcpy_s(part[a].pn, workName);part[a].size = workSize;part[a].end = part[a].begin + part[a].size - 1;strcpy_s(part[a].status, "占用");printf("\n分配成功!");
}void recover() // 回收分区
{int    i;printf("\n        内存使用情况");printf("\n\tNo.\tproname\tbegin\tsize\tend\tstatus");printf("\n");int n3 = 0;for (i = 0; i < MAX; i++){if (strcmp(part[i].status, "null") == 0) break;n3++;printf("\n\tNo.%d", n3);printf("\t%s\t%d\t%d\t%d\t%s", part[i].pn, part[i].begin, part[i].size, part[i].end, part[i].status);}printf("\n");
printf("\n请输入回收的占用分区号:");int    number;scanf("%d", &number);if (number == 1){printf("\nsystem无法回收");return;}int    n = 0;for (i = 0; i < MAX; i++)//通过循环查找要回收的已使用分区区号{if (strcmp(part[i].status, "占用") == 0){n++;if (n == number){strcpy_s(part[i].pn, "-----");strcpy_s(part[i].status, "空闲");}}}if (i == MAX - 1){printf("\n找不到分区");return;}while (i != MAX - 1) {for (i = 0; i < MAX - 1; i++) {if (strcmp(part[i].status, "空闲") == 0)if (strcmp(part[i + 1].status, "空闲") == 0) {part[i].size = part[i].size + part[i + 1].size;part[i].end = part[i].begin + part[i].size - 1;i++;for (i; i < MAX - 1; i++) {if (strcmp(part[i + 1].status, "null") == 0) {strcpy_s(part[i].status, "null");break;}part[i] = part[i + 1];}strcpy_s(part[MAX - 1].status, "null");break;}}}printf("\n回收成功!");
}
int main()
{int selection;Init();printf("本系统内存容量%dk,其中系统文件低址存储%dk", MAX, part[0].size);while (1) {printf("\n------------主存空间的分配与回收------------");printf("\n|                1、显示                   |");printf("\n|                2、分配                   |");printf("\n|                3、回收                   |");printf("\n|                4、退出                   |");printf("\n--------------------------------------------");printf("\n请输入 > ");scanf("%d", &selection);switch (selection) {case 1:display(); //显示分区break;case 2:distribute(); //分配作业break;case 3:recover();  //回收分区break;case 4:exit(0); //退出系统break;default:printf("输入错误,请重新输入:");break;}}
}

显示

分配


回收


四、 实验心得
1、 对C及C++语言重温回顾,熟悉了使用
2、 理解在可变式分区管理下实现主存空间的分配与回收。
3、 掌握使用最佳适应算法

操作系统——实验叁——主存空间的分配与回收相关推荐

  1. 实验四 主存空间的分配和回收

    实验四 主存空间的分配和回收 一.目的和要求 1.1. 实验目的 用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解. 1.2. 实验要求 采用连续分配方式之动态分区分 ...

  2. 《操作系统》实验报告——主存空间的分配与回收

    理论知识 Linux--Linux C语言编程基础知识 一.实验目的 采用可变式分区管理,使用最佳适应算法实现主存的分配与回收. 通过本次实验,帮助学生理解在可变式分区管理方式下,如何实现主存空间的分 ...

  3. 39,叶慧敏 实验四 主存空间的分配和回收模拟

    一. 实验目的 为了合理地分配和使用这些存储空间,当用户提出申请主存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间和使用情况,找出足够 的空闲区域给申请者.当作业撤离归还主存资源时 ...

  4. 操作系统实验三:主存空间的分配与回收

    实验三:主存空间的分配与回收 一.实验目的 通过本次实验,帮助学生理解在可变式分区管理方式下,如何实现主存空间的分配与回收. 二.实验内容 主存是中央处理机能直接存取指令和数据的存储器.能否合理而有效 ...

  5. 实验四、主存空间的分配和回收模拟

    实验四.主存空间的分配和回收模 物联网工程  王鸾  201306104128 一.        实验目的        为了合理地分配和使用这些存储空间,当用户提出申请主存储器空间时,存储管理必须 ...

  6. 【操作系统】主存空间的分配和回收

    实验一.主存空间的分配和回收实验 专业:商业软件工程  姓名:杨晶晶  学号:201406114102 一.        实验目的 用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方 ...

  7. linux课程设计题目主存空间的分配与回收,可变分区分配与回收,哈尔滨理工大学操作系统课程设计报告.doc-资源下载在线文库www.lddoc.cn...

    可变分区分配与回收,哈尔滨理工大学 操作系统课程设计报告.doc 哈 尔 滨 理 工 大 学 课 程 设 计 ( 操 作 系 统 ) 题 目 可变分区分配与回收 (首次适应算法) 班 级 计算机科学与 ...

  8. 天津理工大学《操作系统》实验二,存储器的分配与回收算法实现,代码详解,保姆式注释讲解

    天津理工大学<操作系统>实验二,存储器的分配与回收算法实现,代码详解,保姆式注释讲解 实验内容 1. 本实验是模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不 ...

  9. 操作系统实验2—实现动态分区分配模拟程序

    操作系统实验2-实现动态分区分配模拟程序 文章目录 操作系统实验2-实现动态分区分配模拟程序 实验描述 设计思路 上机代码 测试结果 心得体会 实验描述 实验内容: 编写一个可变分区存储管理程序,模拟 ...

最新文章

  1. Oracle数据库一些操作信息
  2. Uber无人车在旧金山不仅仅是闯红灯,更大的问题是违法上路
  3. linux centos7如何格式化磁盘,Linux CentOS 7 磁盘格式化mke2fs、mkfs.ext4、磁盘挂载及手动增加swap空间...
  4. springboot 按钮权限验证_springboot学习之权限系统登录验证SpringSecurity
  5. forget password of WEBLOGIC user
  6. python基础开发环境_Python基础教程,第一讲,开发环境搭建
  7. Combination Sum 和Combination Sum II
  8. win下python2,3和pip2,3双版本共存
  9. Linux---进程调度相关命令解析
  10. 前端学习(536):多列布局3列得间距
  11. LeetCode 1064. 不动点(二分查找)
  12. distinct关键字
  13. c11 语言,语言学C11-1.ppt
  14. HTML5 Canvas 和 SVG
  15. swconfig iwpriv iwinfo iwlist iwconfig
  16. from scipy.misc import comb ImportError: cannot import name comb
  17. Sin City --《罪恶之城》
  18. 计算机网络基础知识笔记五--会话层/表示层/应用层
  19. 接入Google Sdk 遇到的坑
  20. win10下使用Rclone将OneDrive映射到本地磁盘教程(开机自动挂载)

热门文章

  1. Java中string.equalsIgnoreCase(0)与0.equalsIgnoreCase(string)的区别:
  2. new malloc
  3. Maven3版本的超级POM位置及中央仓库位置
  4. thinkPHP伪静态,如何去掉index.php呢?
  5. android:Android中用文件初始化sqlite数据库(zz)
  6. 隐式类型转换中显式申明的非必要性
  7. python tfidf特征变换_Spark MLlib机器学习开发指南(4)--特征提取--TF-IDF
  8. 计算机图学测试题及答案,《计算机图形学》练习测试题及参考答案
  9. python体育竞技分析代码200行_使用Python进行体育竞技分析(预测球队成绩)
  10. docker mysql总是退出_Docker提升测试效率之路