实验目的:

在分页存储管理方式中,如果不具备页面置换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具备支持虚拟存储器的功能,显示一次性的特征。本实验通过程序模拟操作系统的基本分页存储管理方式,进一步理解这一内存分配方式的原理和特点,加深对理论知识的掌握。

实验要求:

(1) 给出初态;

(2) 程序入口参数: 分配时,参数为进程名及请求分配的内存空间大小----字节数或页数。 回收时,参数为进程名。

(3) 每次分配或回收后,显示分区说明表、段表、页表、存储分块表等的内容,无法分配时,给出回应信息。

代码实现:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define PAGE 100   //内存总量100块int memory[PAGE];
int process[PAGE][PAGE+1]; //进程数组
int use_num; //已经使用内存
int process_num; //进程数目void check()
{printf("内存总量: %d块,已用空间: %d块,剩余空间: %d块,进程总数: %d个\n", PAGE, use_num, PAGE - use_num, process_num);if (use_num < PAGE) {printf("已使用的内存块(%d):\n", use_num);int tmp = 1;  //用于换行for (int i = 0; i < PAGE; i++) {if (memory[i] == 1) {if (tmp == 15) {printf("%d\n", i);tmp = 1;}printf("%d ", i);tmp++;}}}if (process_num > 0) {printf("\n各进程详细使用情况如下: \n");for (int i = 0; i < PAGE; i++) {if (process[i][0] > 0) {printf("进程号:%d \n占用内存块 (%d块):", i, process[i][0]);int tmp = 1;for (int j = 1; j <= process[i][0]; j++){if (tmp == 15) {printf("%d\n", process[i][j]);tmp = 1;}printf("%d ", process[i][j]);tmp++;}}}}else {printf("\n当前内存无进程块!\n");}
}
void init_memory() //随机占用18块内存块
{memset(memory, 0, sizeof(memory)); //将所有内存块置为0,表示未使用const int count = 18;srand((unsigned)time(NULL)); //初始化随机数for (int i = 0; i < count; i++) {memory[rand() % PAGE] = 1; //产生0~99的随机数}use_num = count;  //初始化已经使用的内存 for (int i = 0; i < PAGE; i++) {   //初始化进程数组process[i][0] = 0;for (int j = 1; j < PAGE; j++)process[i][j] = -1;}process_num = 0;  //初始化进程数printf("初始化结果如下:\n");check();
}void build_process() //创建进程
{int num, size;printf("请输入进程号(小于%d)和所需页面: ",PAGE);scanf("%d%d", &num, &size);if (num >= PAGE) {printf("输出错误,进程号越界!\n");return;}if (PAGE - use_num < size) {    printf("内存空间不足\n");return;}use_num += size;process[num][0] = size;int k = 0;for (int i = 1;i <= size; i++) {   //检查是否存在相同进程号的进程while (memory[k] == 1 && k < PAGE) {k++;}process[num][i] = k;memory[k++] = 1;}process_num++;printf("创建新进程成功!\n");
}void end_process()  //结束进程
{int num, size;if (process_num < 1) {printf("当前内存没有进程!\n");return;}printf("请输入进程号(小于%d): ", PAGE);scanf("%d", &num);if (process[num][0] == 0) {printf("该进程不存在!\n");return;}size = process[num][0];for (int j = 1; j < size; j++){memory[process[num][j]] = 0;process[num][j] = -1;}process[num][0] = 0;process_num--;use_num -= size;printf("结束进程成功!\n");
}void menu() //菜单
{printf("\n操作菜单:\n");printf("1、创建进程\n");printf("2、结束进程\n");printf("3、查看内存\n");printf("4、退出程序\n"); printf("请输入您要进行的操作: ");
}int main(int argc, char *argv[])
{system("color 3f");init_memory(); /*初始化内存空间*/int choice;menu();while (scanf("%d", &choice) != 0) {switch (choice){case 1:build_process();break;case 2:end_process();break;case 3:check();break;case 4:printf("程序已经退出!\n");exit(0);default:printf("输入错误,请重新输入\n");break;}menu();}system("pause");return 0;
}

结果:

操作系统简单分页存储管理(含代码)相关推荐

  1. 操作系统基本分页存储管理方式

    操作系统基本分页存储管理方式 连续分配内存方式会形成许多"碎片",通过紧凑的方式将碎片拼接成一块大的空间,但是拼接过程系统开销太大.如果允许将一个进程直接分散地装入到许多不相邻的分 ...

  2. 八、操作系统——基本分页存储管理的基本概念(详解)

    一.思考:连续分配方式的缺点? 考虑支持多道程序的两种连续分配方式: 固定分区分配:缺乏灵活性,会产生大量的内部碎片,内存的利用率很低. 动态分区分配:会产生很多外部碎片,虽然可以用"紧凑& ...

  3. 《操作系统》——分页存储管理方式逻辑地址到物理地址的转换

    一.连续分配方式缺点 连续分配方式的主要缺点是会形成许多碎片,尽管我们可以通过紧凑的方法将碎片拼接成可用的大块空间,但这样须付出很大的代价. 二.离散分配方式 离散分配方式思想:将进程直接分散地装入到 ...

  4. 操作系统—基本分页存储管理的基本概念

    建议将思维导图保存下来观看,或点击这里在线观看

  5. 【考研】操作系统试题集合(含简述、选择、判断和填空题)

    前言 针对各大高校的试题进行总结.题目类型包含简述题.选择题.判断题和填空题. (也适用于暨南大学 848 考试) 此外,可搭配以下链接一起学习(链接内部分有真题) [考研]暨南大学 848 操作系统 ...

  6. 分页存储管理的基本方法

    相关定义 地址结构 地址结构=页号+页内地址(位移量) 如下图所示: 页面大小:指分页中的一页的大小,知道页面大小可以求得页内地址位数 比如页面大小为1KB,1kB等于2的10次方,故可求得业内地址为 ...

  7. 操作系统:基本分页存储管理方式

    1.离散分配方式 ----连续分配方式(分区存储管理)要求把作业放在一个连续的存储区中,因而会形成许多"碎片",固定分区会产生内部碎片,动态分区会产生外部碎片.虽然可通过" ...

  8. 操作系统【四】分页存储管理

    连续分配方式的缺点: 固定分区分配:缺乏灵活性,产生大量的内部碎片,内存的利用率较低 动态分区分配:会产生许多外部碎片,虽然可以用紧凑技术处理,但是紧凑技术的时间代价较高 基本分页存储管理 思想:把内 ...

  9. 12 操作系统第三章 内存管理 非连续分配管理方式 基本分页存储管理 基本分段存储管理 段页式存储管理

    文章目录 1 基本分页存储管理 1.1 什么是分页存储 1.2 重要的数据结构--页表 1.3 基本地址变换机构 1.4 具有快表的地址变换机构 1.4.1 什么是快表(TLB) 1.4.2 引入快表 ...

最新文章

  1. devkit_如何使用NodeMCU Devkit和Firebase数据库开始物联网
  2. 中科院张士峰:基于深度学习的通用物体检测算法对比探索
  3. 异步错误处理 -- 时机
  4. 场景数据的动态更新setDataVariance(osg::Object::DYNAMIC) (转)
  5. 终于有人把安卓程序员必学知识点全整理出来了,送大厂面经一份!
  6. jacob jar包_java 文档在线预览 Windows版本(jacob)
  7. new file会创建文件吗_520了!除了new个对象,你还会用supplier创建对象吗?
  8. DB2 DatabaseMetadata类的使用
  9. 联想g510拆键盘教程_联想g510快捷键
  10. 8 月 Github 上有哪些值得参与的开源项目?
  11. Python 递归函数计算阶乘
  12. kmplayer播放flv文件不正常(屏幕绿色滤镜或者很模糊)怎么办?
  13. 5.网页中增加新的内容
  14. 【手把手带你Godot游戏开发】FlappyBird:1.Hello World
  15. 路由器的两种工作模式
  16. 冯诺依曼体系结构与操作系统
  17. 利用JACK在Windows下PC之间传递声音
  18. 博基计划(4)---近红外光谱过程分析中基线漂移的主要来源
  19. 黑客‘劫持’了一颗卫星,用它直播黑客大会和放电影,并且还完全合法?
  20. Python操作word手册,与打包生成word文件

热门文章

  1. 【win7任务栏缩略图不见了怎么解决】
  2. 帆软报表跨域之跨域登录
  3. “区块链”究竟是什么?
  4. 春节出行带个对讲机 旅行实测威诺VR-N65
  5. 暴力推荐:MiniTool Partition Wizard Home Edition
  6. 3D U-Net: Learning Dense Volumetric Segmentation from Sparse Annotation
  7. sublime text3 快速编写 HTML/CSS代码
  8. 我们追求的泛化,竟是一条死路?
  9. 支付清算体系介绍-上
  10. 计算机毕业设计Java爱心公益网站设计与制作(源码+系统+mysql数据库+lw文档