操作系统之页式存储管理

简介本程序利用java编程语言对其进行了实现。 源代码移步:http://download.csdn.net/download/chengshijian2015/10215566原理一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页、第1页等。把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框,同样进行编号。在为进程分配内
摘要由CSDN通过智能技术生成

简介

本程序利用java编程语言对其进行了实现。
源代码移步:http://download.csdn.net/download/chengshijian2015/10215566

原理

一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页、第1页等。把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框,同样进行编号。在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。
为了标识中哪些块空闲,哪些块占用,可用一张位示图指示。位示图是由若干主存单元构成,如图4-1所示。其中每一位与一个主存块对应。分别用0和1表示对应块是空闲还是占用。
在装入一个作业时,根据作业对主存的需求量,先检查是否有足够的空闲块,如有,则查位示图,按作业需求量找出为0的一些位,且置上占用标记1。
按找到的位计算对应的块号。其计算公式为:
块号=J*8+I
其中,J表示找到的字节号,I表示找到的位号。

源代码

BitInstruction.java:

package com.chengshijian.operatesystem;

/**
 * Created by ChengShiJian on 2017/11/15.
 * 
 * 位示图类,实质上只是存储了一个二维数组
 */

public class BitInstruction {
   
    private int bitInstruction[][]=new int[16][16];

    public int[][] getBitInstruction() {
        return bitInstruction;
    }

    public void setBitInstruction(int[][] bitInstruction) {
        this.bitInstruction = bitInstruction;
    }
}

BitInstructionAlgrithm.java:

package com.chengshijian.operatesystem;

import java.util.Scanner;
/**
 * Created by ChengShiJian on 2017/11/15.
 * 
 * 位示图算法主程序,主要用来回调OnExecuteLisenter接口
 */
public class BitInstructionAlgrithm {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        final Scanner scanner = new Scanner(System.in);
        BitInstructionPresenter presenter = new BitInstructionPresenter();
        presenter.setOnExcuteListener(new OnExecuteListener() {
  //设置监听器

            @Override
            public MyProcess onGetProcess() {
                // TODO Auto-generated method stub
                System.out.print("请输入进程信息(进程id 请求内存空间大小)>");
                MyProcess process=new MyProcess();
                process.setId(scanner.nextInt());
                process.setSize(scanner.nextInt());
                return process;
            }

            @Override
            public void onAlocateMemoryFailed(int id) {
                // TODO Auto-generated method stub
                System.out.println("内存空间不足!为进程"+id+"分配内存分配失败!");

            }

            @Override
            public void onAlocateMemorySuccess(MyProcess process, int[][] bitInstruction) {
                // TODO Auto-generated method stub

                System.out.println("----------------当前已分配的进程信息---------------------");
                System.out.println("进程id:"+process.getId()+"\n请求分配内存大小:"+process.getSize());
                System.out.print("采用位视图法分配的内存块号:");
                for (Integer num:process.getBlockNums()) 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值