主存储器空间的分配和回收

引用块内容
实验要求:
1、采用分页式管理方式实现主存空间的分配和回收;
2、采用位示图来表示主存分配情况;
3、假设某系统的主存被分成大小相等的64块,位示图用8个字节来构成;

package test;

import java.util.ArrayList;

public class Memory {
    public static void main(String[] args) {

        Block block = new Block();

        Job job1 = new Job();
        job1.size = 4;
        job1.block.add(4);
        job1.block.add(5);
        job1.block.add(6);
        job1.block.add(31);
        block.set(job1);
        System.out.println("载入作业1");
        block.display();

        //作业2占用第0,1,9,11,13,24块;
        Job job2 = new Job();
        job2.size = 6;
        job2.block.add(0);
        job2.block.add(1);
        job2.block.add(9);
        job2.block.add(11);
        job2.block.add(13);
        job2.block.add(24);
        block.set(job2);
        System.out.println("载入作业2");
        block.display();


        //要求为作业3分配内存,作业3需要5个物理块;
        Job job3 = new Job();
        job3.size = 5;
        block.setJob(job3);
        System.out.println("载入作业3");
        block.display();

        //要求回收作业1占用的物理块;
        block.undo(job1);
        System.out.println("撤销作业1");
        block.display();

    }
}

class Job {
    int size;
    public ArrayList<Integer> block;

    public Job() {
        size = 0;
        block = new ArrayList<Integer>();
    }
}

class Block {
    private int[][] array = new int[8][8];
    private int size = 64;

    public void display() {
        for (int i = 0; i < 8; ++i) {
            for (int j = 0; j < 8; ++j) {
                System.out.print(array[i][j] + "\t");
            }
            System.out.println();
        }
    }

    public Job setJob(Job job) {
        if (size >= job.size) {
            int count = 0;
            for (int i = 0; i < 8; ++i) {
                for (int j = 0; j < 8; ++j) {
                    if (array[i][j] == 0) {
                        array[i][j] = 1;
                        job.block.add(i * 8 + j);
                        ++count;
                        if (count == job.size) {
                            return job;
                        }
                    }
                }
            }
        }
        else {
            System.out.println("无空间分配");
            return job;
        }
        return job;
    }

    public void set(Job job1) {
        int i = 0;
        int j = 0;
        for(int z = 0 ; z < job1.size ; ++z) {
            i = job1.block.get(z) / 8;
            j = job1.block.get(z) % 8;
            array[i][j] = 1;
        }
    }

    public void undo(Job job1) {
        int i = 0;
        int j = 0;
        for(int z = 0 ; z < job1.size ; ++z) {
            i = job1.block.get(z) / 8;
            j = job1.block.get(z) % 8;
            array[i][j] = 0;
        }
    }
}
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值