固定分区存储空间的分配和回收Java代码实现

2023-11-06

目录

一、实验要求

二、实验目的

三、源代码

四、实验结果

五、实验总结 

一、实验要求

  1. 实现固定分区存储管理方式下存储空间的分配和回收。
  2. 已知当前内存分配表如下:

分区号

起始地址

长度

状态

1 10KB 30KB Job5
2 40KB 7KB 0
3 47KB 50KB Job2

3.有若干个作业申请或释放内存空间,请求如下:

  1. 作业Job6请求资源,申请20KB大小的内存空间;
  2. 作业Job7请求资源,申请5KB大小的内存空间;
  3. 作业Job2执行完毕,释放空间。

4.编写程序实现相应存储空间的分配和回收,若请求成功,修改主分配表,并输出该表,若请求不能满足,输出“分配失败”。

二、实验目的

     通过编写固定分区存储管理的模拟程序,加深对操作系统存储管理功能中固定分区管理方式、主存分配表等相应知识的理解。

三、源代码

import java.util.Scanner;
class Store{
    //分区号
    public  String distinct;
    //起始地址
    public  String beginAddress;
    //长度
    public  int lengthAddress;
    //状态
    public  String stausWork;
    public Store(String distinct, String beginAddress, int lengthAddress, String stausWork) {
        super();
        this.distinct = distinct;
        this.beginAddress =beginAddress;
        this.lengthAddress =lengthAddress;
        this.stausWork = stausWork;
    }
}
public class Mainclass {
    public static void main(String[] args) {
        Store[] st= new Store[3];
        st[0]=new Store("1","10KB",30,"job5");
        st[1]=new Store("2","40KB",7,"0");
        st[2]=new Store("3","47KB",50,"job2");
        System.out.println("分区号 "+"起始地址  "+"长度  "+"状态");
        for(int i=0;i<st.length;i++){
            if(st[i].lengthAddress<=10){
                System.out.println(st[i].distinct+"    "+st[i].beginAddress+"    "+st[i].lengthAddress +"     "+st[i].stausWork);

            }else{
                System.out.println(st[i].distinct+"    "+st[i].beginAddress+"    "+st[i].lengthAddress +"    "+st[i].stausWork);
            }
        }
        while(true){
            System.out.println("--------------------");
            System.out.println("   0:退出");
            System.out.println("   1:申请资源");
            System.out.println("   2:释放资源");
            System.out.println("--------------------");
            System.out.println("请输入对应的菜单:");
            Scanner scan = new Scanner(System.in);
            int number = scan.nextInt();
            //申请资源
            if(number==1){
                System.out.println("请输入你想要申请资源的内存大小:");
                int storeSize = scan.nextInt();
                System.out.println("请输入工作名字:");
                scan.nextLine();
                int flag=0;
                int a =10;
                String workname = scan.nextLine();
                for(int i=0;i<st.length;i++){
                    if(st[i].lengthAddress >=storeSize){
                        a=5;
                        flag=5;
                        if(st[i].stausWork.equals("0")) {
                            st[i].stausWork=workname;
                            flag++;
                            a--;
                            break;
                        }
                    }

                }
                if(a==10) {
                    System.out.println("内存过大");
                }

                if(flag==5&&a==5){
                    System.out.println("无可分配分区");
                }

                for(int i=0;i<st.length;i++){
                    if(st[i].lengthAddress <=10){
                        System.out.println(st[i].distinct+"    "+st[i].beginAddress+"    "+st[i].lengthAddress+"     "+st[i].stausWork);

                    }else{
                        System.out.println(st[i].distinct+"    "+st[i].beginAddress+"    "+st[i].lengthAddress+"    "+st[i].stausWork);
                    }
                }
               //释放资源
            }else if(number==2){
                System.out.println("请输入工作名字:");
                scan.nextLine();
                String workname = scan.nextLine();
                for(int i=0;i<st.length;i++){
                    if(st[i].stausWork.equals(workname)){
                        st[i].stausWork="0";
                        break;
                    }
                }
                for(int i=0;i<st.length;i++){
                    if(st[i].lengthAddress<=10){
                        System.out.println(st[i].distinct+"    "+st[i].beginAddress+"    "+st[i].lengthAddress+"     "+st[i].stausWork);

                    }else{
                        System.out.println(st[i].distinct+"    "+st[i].beginAddress+"    "+st[i].lengthAddress+"    "+st[i].stausWork);
                    }
                }

            }else if(number==0){
                System.exit(0);
            }else{
                System.out.println("请输入正确序号!");
            }
        }

    }
}

四、实验结果

 

五、实验总结 

固定分区

原理:又称定长分区或静态分区模式,是满足多道程序设计需要的最简单的存储管理技术。基本思想:给进入主存的用户作业划分一块连续存储区域,把作业装入该连续存储区域,若有多个作业装入主存,则它们可并发执行。

使用大小相等的固定分区有两个难点:程序可能太大而不能放到一个分区中,内存的,利用率很低。由于被装入的数据块小于分区大小,从而导致分区内部有浪费现象,成为“内部碎片”。对与大小不等的分区策略,最简单的方法就是把每个进程分配到能够容纳它的最小分区中。

目前已经基本上没有什么场合使用固定分区。

优势:实现简单,只需要极少的操作系统开销

缺点:有内部碎片,对内存的使用不充分,活动进程的最大数目是固定的。

:一个固定长度的数据块,存储在二级存储器中(如磁盘)。数据页可以临时复制入内存的页框中。

段:一个变长的数据块,存储在二级存储中,整个段可以临时复制到内存的可用区域(分段),或者将段分成许多页,将页单独复制到内存中(分段分页相结合)。

重定位:就是把程序的逻辑地址空间变换成内存中的实际物理地址空间的过程

​ 操作系统存储至少要分成两级:内存和外存。内存提供快速的访问,成本相对较高,是易失性的,不能永久存储。外存比内存慢,但是便宜,非易失性,可以长期存储程序和数据。而较小的内存用于保存当前使用的程序和数据。

​ 内存管理最基本的操作时由处理器把程序装入内存中执行。

可变分区:可变分区存储管理不是预先把内存中的用户区域划分成若干固定
分区,而是在作业要求装入内存时,根据用户作业的大小和当时内存空间使用情况决定是否为该作业分配一个分区。因此分区大小不是预先固定的,而是按作业需求量来划分的;分区的个数和位置也不是预先确定的。它有效地克服了固定分区方式中,由于分区内部剩余内存空置造成浪费的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

固定分区存储空间的分配和回收Java代码实现 的相关文章

随机推荐

  • dataframe将某列的空值填充为12

    工作中遇到某列数据中空值需要替换为12 df 支付周期 fillna 12 inplace True
  • 配置描述文件mobileconfig的生成

    为什么80 的码农都做不了架构师 gt gt gt 使用总结 http huodong kuaiyong com kymobile trust mobileconfig 可以把这个文件下载下来之后 借用一下 http app shouyou
  • CUDA矩阵乘法的优化

    本文以 深入浅出谈cuda 中矩阵乘法优化的部分为主线 体会cuda的并行执行过程 文章目录 1 实验环境 2 实验过程 2 1 初始版本 2 2 第一次改良 提高精度 2 3 第二次改良 使用共享内存 2 4 第三次改良 使用cudaMa
  • 四十七.快速排序C语言实现

    include
  • vim命令模式操作

    问题 以下所有操作都在命令模式进行 把 etc passwd文件 拷贝到 opt命名为nsd txt 对 opt nsd txt进行如下操作 切换到最后一行 切换到第一行 删除第二行 复制第一行到最后一行 查找root字符串 方案 本题主要
  • QRadioButton 选中/取消选中

    QRadioButton 选中的方法比较简单 ui gt radioButton gt setChecked true 取消选中怎么办 如果单纯使用 ui gt radioButton gt setChecked false 你会发现 然并
  • 写一个个人认为比较详细的adaboost算法

    最近在看机器学习中adaboost adaptive boostint 算法部分的内容 在csdn上面查找一番发现 好像没有讲的特别的详尽的 当然可能是我人品不佳 所以没有找到 为了防止同样的事情发生在其他人的身上 所以就写了这篇博文 尽量
  • 城堡争霸服务器维护,城堡争霸 - 阵营守护神(国际服)无法连接服务器是什么原因...

    城堡争霸 阵营守护神 国际服 无法连接服务器是什么原因 相信大家在玩城堡争霸 阵营守护神 国际服 的过程中 经常会遇到这样的问题 下面ourplay小编就简单为大家介绍几种常见的解决方案 城堡争霸 阵营守护神 国际服 游戏简介 城堡争霸 阵
  • Mac安装zmap

    安装 zmap官网地址 https github com zmap zmap brew install zmap 然后就可以试一下调用 zmap h 如果无法提示zmap 导入路径即可 echo export PATH PATH usr l
  • MATLAB中深度学习的多级神经网络构建

    创建一个简单的有向无环图 DAG 网络用于深度学习 训练网络对数字图像进行分类 layers imageInputLayer 28 28 1 Name input convolution2dLayer 5 16 Padding same N
  • python 数据全部显示,去掉中间省略号的终极办法

    data describe T 因为有省略号所以不能显示全 试了很多方法都不好用 包括 import numpy as np np set printoptions threshold np inf import pandas as pd
  • 推荐几个可以写到简历上的Go方向优质开源项目(需花点心思研究)

    前言 哈喽 大家好 我是asong 最近总有读者问我有没有Go语言方向优质的开源项目 可以写在简历上那种 一时还真想不起来 花了两天时间调研了一下 针对有无工作经验的分别推荐几个开源项目 下面我们一起来看一下 无工作经验 对于还在上学的朋友
  • java中怎么从一个数组中截取一定长度的元素放到新数组中

    可以直接用Arrays的静态方法copyOfRange int original int from int to 下面是一个简单的演示程序 1 2 3 4 5 6 7 8 9 10
  • mysql Navicat12约束条件的设置和详解

    文章目录 一 什么是mysql约束条件 1 1 说明 1 2 约束的分类 二 Navicat对应约束的设置位置 2 1 not null 非空约束 primary key 主建约束 default 默认约束 2 2 unique 唯一 2
  • OpenBSD 加速 下载安装

    OpenBSD 安装后需要安装其它软件时候 发现它要自动下载源文件 要不就手动下载 反正就是慢 我发现有个方法可以加快自动安装时候的下载 su root cat gt gt etc mk conf DISTDIR usr files dis
  • 字符串一次编辑

    一次编辑 字符串有三种编辑操作 插入一个字符 删除一个字符或者替换一个字符 给定两个字符串 编写一个函数判定它们是否只需要一次 或者零次 编辑 作者 LeetCode Solution 链接 https leetcode cn proble
  • linux搭建ftp

    ftp一些概念了解 Linux安装vsftpd及配置详解 1 安装 yum y install vsftpd 2 FTP主动模式与FTP被动模式 3 防火墙开启21端口 文中是使用iptables开启的 现在centos7 2版本默认是防火
  • 对el-form-item中的子组件进行必填验证(方法)

    效果图 思路 在el form item中添加show message属性 每次修改子组件值时 对其进行判断修改 部分代码
  • 光通量,光强,亮度,照度

    1 光通量 F 单位时间通过的光量 单位 流明 lm 2 发光强度 光强 I 单位立体角的光通量 I F 单位 坎德拉 cd 3 亮度 L 单位面积光强 L I S sin 单位 坎德拉 平米 cd 4 照度 E 单位面积接受的光通量 E
  • 固定分区存储空间的分配和回收Java代码实现

    目录 一 实验要求 二 实验目的 三 源代码 四 实验结果 五 实验总结 一 实验要求 实现固定分区存储管理方式下存储空间的分配和回收 已知当前内存分配表如下 分区号 起始地址 长度 状态 1 10KB 30KB Job5 2 40KB 7