实验五 操作系统之存储管理

一、实验目的

连续内存分配方式会形成许多“碎片”,虽然可以通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。如果允许将一个进程直接分散地装入到许多不相邻接的分区中,则无需再进行“紧凑”。基于这一思想而产生了离散分配方式。

如果离散分配的基本单位是页,则称为分页存储管理方式;如果离散分配的基本单位是段,则称为分段存储管理方式。

在分页存储管理方式中,如果不具备页面兑换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具备支持虚拟存储器的功能,它要求把每个作业全部装入内存后方能运行。

本实验通过程序模拟操作系统的基本分页存储管理方式,进一步理解这一内存分配方式的原理和特点,加深对理论知识的掌握。

二、实验要求

1、用C语言或Java语言编写程序模拟操作系统对内存的基本分页存储管理方式

2、程序要能正确对“内存”进行“分配”和“回收”,能接受用户的输入,显示内存的分配情况,并有一定的容错能力。

3、每个人独立按时完成实验内容。

三、实验内容

本实验假定内存空间已经按块划分,目标程序无需关心内存块大小等底层细节,只需按算法对内存块进行分配即可。程序应该实现以下功能:

1、内存初始化。假定内存块共有N个,初始化后的内存空间应该有一部分已经被使用,这可以用随机数或程序内部的其他算法完成。

2、程序应该能接受用户输入的进程信息,并为之分配内存,返回分配结果(成功或失败),注意,此处应该考虑到不合法的输入并进行相应处理。

3、程序能回收用户指定的进程所占用的内存空间,因此,程序可能需要为每个进程分配一个唯一的进程号并给出详细的提示信息。

4、能直观合理地显示内存分配情况。

5、程序界面友好,便于操作和查看运行结果。

四.实验代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
struct memory{int memory_number;char proname;
};
struct memory memory_table[20]={0};
struct page{ char proname;//进程名称int prosize;//进程大小  int pagetable[10];//进程页表
};//页表
struct page page_table[10]={0};int allocate(int memorysize,int i,int pagesize);//为进程分配内存空间
int reclaim(int memorysize,char proname);//释放进程占用的空间void output();
int main()
{int pagesize;//分页大小int memorysize=80;//内存大小char proname;int choice;//操作选择int i;printf("Please enter the page size:\n");scanf("%d",&pagesize);//初始化for(i=0;i<20;i++){memory_table[i].memory_number=i;memory_table[i].proname='0';}for(i=0;i<10;i++){page_table[i].proname='0';}srand((unsigned)time(NULL));for(i=0;i<7;i++){int number=rand()%19+1;memory_table[number].proname='a';memorysize--;}output();//进入存储分配while(memorysize!=0){printf("Selecting Operation\n1.Allocate  2.Reclaim\n");scanf("%d",&choice);if(choice==1){for( i=0;i<10;i++){if(page_table[i].proname=='0'){getchar();printf("Please enter process name:");scanf("%c",&page_table[i].proname);getchar();printf("Please enter process size:");scanf("%d",&page_table[i].prosize);break;}}memorysize=allocate(memorysize,i,pagesize);}else{printf("Please enter process name:");getchar();scanf("%c",&proname);memorysize=reclaim(memorysize,proname);}output();}return 0;
}int  allocate(int memorysize,int i,int pagesize)
{int k;int j;for(k=0;k<(page_table[i].prosize/pagesize);k++){for( j=0;j<20;j++){if(memory_table[j].proname=='0'){memory_table[j].proname=page_table[i].proname;page_table[i].pagetable[k]=j;memorysize--;break;}}}return memorysize;
}int reclaim(int memorysize,char proname)
{int j;int k;for( j=0;j<20;j++){if(memory_table[j].proname==proname){memory_table[j].proname='0';memorysize++;}}for (j=0;j<10;j++){if(page_table[j].proname==proname){page_table[j].proname='0';page_table[j].prosize=0;for(k=0;k<10;k++){page_table[j].pagetable[k]=0;}break;}}return memorysize;
}void output(){int i;printf("————————memory allocation——————————\n");printf("Physical Block No.   Process Name\n");for(i=0;i<20;i++){printf("%d                          %c\n",memory_table[i].memory_number , memory_table[i].proname);}
}

五.运行结果

六.实验总结

通过这次的实验更好地加深了我对基本分页存储的理解。同时也提高了编码能力。

转载于:https://www.cnblogs.com/iTues/p/4568034.html

实验五 操作系统之存储管理相关推荐

  1. 操作系统实验五--存储管理

    文章目录 操作系统实验五--存储管理 一.实验目的 二.实验内容 三.设计原理及相关算法 四.结果分析 五.源代码 操作系统实验五–存储管理 一.实验目的 1.了解虚拟存储技术的特点,掌握请求页式存储 ...

  2. 操作系统实验五:用户进程管理(详细分析)

    操作系统实验五:用户进程管理 一. 实验目的 二. 实验任务 三. 实验准备 1.alloc_proc() 函数 2.do_fork() 函数 3.idt_init() 函数 4.trap_dispa ...

  3. 操作系统 实验五 进程同步问题实现

    实验五 进程同步问题实现 一.实验目的 利用实验四提供的方法和例子,解决进程同步相关问题,例如:生产者消费者问题,哲学家进餐等问题. 二.实验环境 硬件环境:计算机一台,局域网环境: 软件环境:Lin ...

  4. 《操作系统实验》模拟请求分页存储管理

    模拟请求分页存储管理 一.实验内容 二.实验要求 三.实验过程 1.设计思想 2.数据结构 四.实验代码 五.实验结果 一.实验内容 模拟请求分页存储管理方式. 二.实验要求 1.模拟请求分页存储管理 ...

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

    <操作系统>存储管理实验报告 ____大学____学院实验报告课程名称: 计算机操作系统 实验名称: 存储管理实验 实验日期: 班级: 姓名: 学号: 仪器编号: XX 实验报告要求:1. ...

  6. 操作系统实验五:文件管理

    实验五 文件管理 一.实验要求 (1)了解文件权限及作用: (2)掌握文件权限的设置: (3)掌握文件权限的管理与应用: (4)掌握文件基本操作: (5)理解文件系统管理文件的实现机制. 二.实验内容 ...

  7. 计算机网络实验五,计算机网络(实验五).docx

    计算机网络(实验五).docx 实验五一.实验内容在这个实验室里,我们将探讨ICMP 协议得几个方面由 Ping 项目产生得P 信息Tracer ute程序生成得C消息关于 CM 信息得格式与内容.在 ...

  8. 操作系统之存储管理——FIFO算法和LRU算法

    操作系统之进程调度--优先权法和轮转法(附上样例讲解) 操作系统之银行家算法-详解流程及案例数据 操作系统之多线程编程-读者优先/写者优先详解 操作系统之存储管理--FIFO算法和LRU算法 操作系统 ...

  9. 数据结构实验五 查找算法的实现

    广州大学学生实验报告 开课实验室:计算机科学与工程实验(电子楼416B)     2019年6月11日 学院 计算机科学与教育软件学院 年级.专业.班 姓名 学号 实验课程名称 数据结构实验 成绩 实 ...

最新文章

  1. Qt中文手册 之 QApplication
  2. excel 2010 学习笔记一 Vlookup 函数的使用
  3. 使用Project Lombok减少Java应用程序中的样板代码
  4. idea html 错误提示,Idea 代码编辑错误不飘红提示
  5. cordova混合开发流程
  6. 云洗衣机HTML5源码 朋友圈在线娱乐洗衣服
  7. spark 如何用netty实现akka的actor模型
  8. 低微漏洞处理办法记录
  9. javascript traverse object attributes 遍历对象属性
  10. 【DPDK峰会回顾】支撑双十一的高性能负载均衡是如何炼成的
  11. 磁盘上没有足够的空间完成此操作_Win10硬盘怎么分区?Win10系统下新建磁盘分区图解教程...
  12. MyBatis是什么?使用它作为持久层框架有什么优点?
  13. android 手机2k分辨率,2K屏幕手机有哪些 2016六款2K分辨率手机推荐
  14. 华为芯片鸿蒙的由来,华为“鸿蒙”真的来了!看完这些商标来历,网友们又激动了...
  15. 【多传感器融合定位】【从零开始做自动驾驶定位_任佬】【所学到的东西汇总】
  16. 蓝海卓越云AC功能简介
  17. STM32F4 | 独立看门狗(IWDG)实验
  18. A股股本结构历史数据查询Web API使用方法
  19. (笔记整理)VUE初识
  20. 当代年轻人熬夜晚睡的原因找到了!

热门文章

  1. 关于hibernate的关联外键生成以及外键属性列的正确插入即:解决外键插入时,在关联表中除了外键列为空,其它属性均正常级联保存
  2. POJ 1459 -- Power Network(最大流, 建图)
  3. 无意中发现一个有趣的事情
  4. 磁盘文件读写和数据库读写哪个效率更高
  5. 增加外键时候的一个小错误
  6. 概率论-1.5 独立性(重点:所谓独立仅是概率层面(数字层面))
  7. [BUUCTF-pwn]——ciscn_2019_ne_5
  8. linux su和sudo命令的区别
  9. struts 依赖包
  10. 洛谷 P3381 【模板】最小费用最大流