操作系统 您所在的位置:网站首页 分区内存管理分区选择法 操作系统

操作系统

2023-07-22 23:55| 来源: 网络整理| 查看: 265

文章目录 目的要求实验题固定式分区分配要求题目分析固定式分区分配分区的分配分区的回收批处理作业 代码伪代码代码实现测试数据测试结果 可变式分区分配实验要求 编写并调试一个段页式存储管理的地址转换的模拟程序实验要求

目的要求 通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解,熟悉虚存管理的各种页面淘汰算法。通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。 实验题 固定式分区分配 要求

设计一个固定式分区分配的存储管理方案,并模拟实现分区的分配和回收过程。 可以假定每个作业都是批处理作业,并且不允许动态申请内存。为实现分区的分配和回 收,可以设定一个分区说明表,按照表中的有关信息进行分配,并根据分区的分配和回收情况修改该表。

题目分析 固定式分区分配 是能满足多道程序设计的最简单的存储管理技术,允许几个作业共享主存空间,这几个作业被装入不同的分区中,每个分区可用来装入一个作业。因此,分区式存储管理可以在内存中同时放几道作业,适用于多道程序系统。固定式分区是在处理作业之前存储器就已经被划分成若干个分区,每个分区的大小可以相同,也可以不同。但是,一旦划分好分区后,主存储器中的分区的个数就固定了,且每个分区的大小固定不变。 分区的分配

分配: 按照某种算法,从空闲分区链表中找所需大小的分区,分配给将要运行的进程。 在这里插入图片描述

u.size 请求分区的大小 m.size 空闲分区链表中分区的大小 size 规定的不可再切割的剩余分区的大小(不可切割就全分配给请求者) 分区的回收

进程运行完毕释放内存,系统根据回收区首地址,从空闲区链表中找到相应的插入点。如果有相邻的就合并,否则就插入。 在这里插入图片描述

在这里插入图片描述

批处理作业

批处理作业的意思为:对每个对象进行相同的操作,可以采用机械化或者程序化来操作。

代码 伪代码

输入数据定义

end //程序结束 job num begin size //num号作业开始,需要的空间是size(KB)。 job num end //num号作业结束。

数据结构定义

Job类 - num //编号 - size //所占空间大小 MemoryPartition类 - num //分区号 - size //分区大小 - begin //分区起始地址 - status //分区状态

程序流程

while true: 读取输入 - 程序结束跳出循环 - num号作业开始,分区分配 - num号作业结束,分区回收 输出分区的分配情况 代码实现 package MemoryManagemant; import java.awt.List; import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.Scanner; class Job{ private int num; private int size; public int getNum() { return num; } public void setNum(int num) { this.num = num; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public Job(int num, int size) { super(); this.num = num; this.size = size; } @Override public String toString() { return "Job [num=" + num + ", size=" + size + "]"; } } class MemoryPartition{ private int num; private int size; private int begin; private boolean status; //1空闲 0被占用 public MemoryPartition( int size, int begin, boolean status) { super(); this.size = size; this.begin = begin; this.status = status; } @Override public String toString() { return "MemoryPartition [size=" + size + ", begin=" + begin + ", status=" + status + "]"; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public int getBegin() { return begin; } public void setBegin(int begin) { this.begin = begin; } public boolean getStatus() { return status; } public void setStatus(boolean status) { this.status = status; } } public class MemoryManagemant { public static String Run() throws FileNotFoundException { //初始化变量 int minSize = 16; //最小分区,单位KB int MaxRound = 10000000; String ans = ""; File file = new File("src\\data.txt"); Scanner scanner = new Scanner(file); HashMap hm = new HashMap(); //分区说明表 LinkedList mpLinkedList = new LinkedList(); //初始化空闲分区链表 int num = 0,begin = 0; for(int i = 16;i //读取数据 String opt = scanner.next(); if(opt.equals("end")) break; num = scanner.nextInt(); opt = scanner.next(); if(opt.equals("end")) { System.out.println(num + "号作业结束!"); // pos为对应空间在分区表中的下标 MemoryPartition jobPartition = hm.get(num); int pos = -1; for(int i = 0;i pos = i; break; } } // 按照规则合并 if(pos>0 && mpLinkedList.get(pos-1).getStatus() && pos //连前不连后 MemoryPartition pre = mpLinkedList.get(pos-1); pre.setSize( pre.getSize() + jobPartition.getSize() ); mpLinkedList.remove(pos); } else if(( pos==0 || ( pos>0 && !mpLinkedList.get(pos-1).getStatus()) ) && pos+1 System.out.println("不合并。"); ans +=("不合并。"+ "\n"); jobPartition.setStatus(true); } //从分区说明表中删除。 hm.remove(num); }else { //作业开始 int size = scanner.nextInt(); System.out.println(num + "号作业开始,占用空间"+size+"KB"); //分配内存 for(int i = 0;i //可以再分一块出来 //size,begin MemoryPartition newMP = new MemoryPartition(mp.getSize() - size, mp.getBegin() + size, true); mp.setSize(size); mp.setStatus(false); mpLinkedList.add(i+1, newMP ); hm.put(num,mp); break; }else { //全部分配给请求的进程 mp.setStatus(false); //说明表 hm.put(num, mp); break; } } } System.out.println("---------------------第"+round+"轮------------------------"); System.out.println("固定分区"); for(MemoryPartition m : mpLinkedList) { System.out.println(m); } System.out.println("已分配分区"); System.out.println(hm); } System.out.println("结束"); return ans; } public static void main(String[] args) throws FileNotFoundException { Run(); } } 测试数据 job 1 begin 64 job 2 begin 32 job 3 begin 16 job 2 end job 1 end job 4 begin 69 job 5 begin 98 job 3 end job 5 end job 6 begin 123 job 4 end job 6 end end 测试结果 ---------------------第1轮------------------------ 1号作业开始,占用空间64KB 分区表: MemoryPartition [size=16, begin=0, status=true] MemoryPartition [size=32, begin=16, status=true] MemoryPartition [size=64, begin=48, status=false] MemoryPartition [size=128, begin=112, status=true] MemoryPartition [size=256, begin=240, status=true] MemoryPartition [size=512, begin=496, status=true] MemoryPartition [size=1024, begin=1008, status=true] MemoryPartition [size=2048, begin=2032, status=true] SUM = 4080 已分配分区(分区说明表) {1=MemoryPartition [size=64, begin=48, status=false]} ---------------------第2轮------------------------ 2号作业开始,占用空间32KB 分区表: MemoryPartition [size=16, begin=0, status=true] MemoryPartition [size=32, begin=16, status=false] MemoryPartition [size=64, begin=48, status=false] MemoryPartition [size=128, begin=112, status=true] MemoryPartition [size=256, begin=240, status=true] MemoryPartition [size=512, begin=496, status=true] MemoryPartition [size=1024, begin=1008, status=true] MemoryPartition [size=2048, begin=2032, status=true] SUM = 4080 已分配分区(分区说明表) {1=MemoryPartition [size=64, begin=48, status=false], 2=MemoryPartition [size=32, begin=16, status=false]} ---------------------第3轮------------------------ 3号作业开始,占用空间16KB 分区表: MemoryPartition [size=16, begin=0, status=false] MemoryPartition [size=32, begin=16, status=false] MemoryPartition [size=64, begin=48, status=false] MemoryPartition [size=128, begin=112, status=true] MemoryPartition [size=256, begin=240, status=true] MemoryPartition [size=512, begin=496, status=true] MemoryPartition [size=1024, begin=1008, status=true] MemoryPartition [size=2048, begin=2032, status=true] SUM = 4080 已分配分区(分区说明表) {1=MemoryPartition [size=64, begin=48, status=false], 2=MemoryPartition [size=32, begin=16, status=false], 3=MemoryPartition [size=16, begin=0, status=false]} ---------------------第4轮------------------------ 2号作业结束! 不合并。 分区表: MemoryPartition [size=16, begin=0, status=false] MemoryPartition [size=32, begin=16, status=true] MemoryPartition [size=64, begin=48, status=false] MemoryPartition [size=128, begin=112, status=true] MemoryPartition [size=256, begin=240, status=true] MemoryPartition [size=512, begin=496, status=true] MemoryPartition [size=1024, begin=1008, status=true] MemoryPartition [size=2048, begin=2032, status=true] SUM = 4080 已分配分区(分区说明表) {1=MemoryPartition [size=64, begin=48, status=false], 3=MemoryPartition [size=16, begin=0, status=false]} ---------------------第5轮------------------------ 1号作业结束! 与前后两个分区合并。 分区表: MemoryPartition [size=16, begin=0, status=false] MemoryPartition [size=224, begin=16, status=true] MemoryPartition [size=256, begin=240, status=true] MemoryPartition [size=512, begin=496, status=true] MemoryPartition [size=1024, begin=1008, status=true] MemoryPartition [size=2048, begin=2032, status=true] SUM = 4080 已分配分区(分区说明表) {3=MemoryPartition [size=16, begin=0, status=false]} ---------------------第6轮------------------------ 4号作业开始,占用空间69KB 分区表: MemoryPartition [size=16, begin=0, status=false] MemoryPartition [size=69, begin=16, status=false] MemoryPartition [size=155, begin=85, status=true] MemoryPartition [size=256, begin=240, status=true] MemoryPartition [size=512, begin=496, status=true] MemoryPartition [size=1024, begin=1008, status=true] MemoryPartition [size=2048, begin=2032, status=true] SUM = 4080 已分配分区(分区说明表) {3=MemoryPartition [size=16, begin=0, status=false], 4=MemoryPartition [size=69, begin=16, status=false]} ---------------------第7轮------------------------ 5号作业开始,占用空间98KB 分区表: MemoryPartition [size=16, begin=0, status=false] MemoryPartition [size=69, begin=16, status=false] MemoryPartition [size=98, begin=85, status=false] MemoryPartition [size=57, begin=183, status=true] MemoryPartition [size=256, begin=240, status=true] MemoryPartition [size=512, begin=496, status=true] MemoryPartition [size=1024, begin=1008, status=true] MemoryPartition [size=2048, begin=2032, status=true] SUM = 4080 已分配分区(分区说明表) {3=MemoryPartition [size=16, begin=0, status=false], 4=MemoryPartition [size=69, begin=16, status=false], 5=MemoryPartition [size=98, begin=85, status=false]} ---------------------第8轮------------------------ 3号作业结束! 不合并。 分区表: MemoryPartition [size=16, begin=0, status=true] MemoryPartition [size=69, begin=16, status=false] MemoryPartition [size=98, begin=85, status=false] MemoryPartition [size=57, begin=183, status=true] MemoryPartition [size=256, begin=240, status=true] MemoryPartition [size=512, begin=496, status=true] MemoryPartition [size=1024, begin=1008, status=true] MemoryPartition [size=2048, begin=2032, status=true] SUM = 4080 已分配分区(分区说明表) {4=MemoryPartition [size=69, begin=16, status=false], 5=MemoryPartition [size=98, begin=85, status=false]} ---------------------第9轮------------------------ 5号作业结束! 与后一个分区合并。 分区表: MemoryPartition [size=16, begin=0, status=true] MemoryPartition [size=69, begin=16, status=false] MemoryPartition [size=155, begin=183, status=true] MemoryPartition [size=256, begin=240, status=true] MemoryPartition [size=512, begin=496, status=true] MemoryPartition [size=1024, begin=1008, status=true] MemoryPartition [size=2048, begin=2032, status=true] SUM = 4080 已分配分区(分区说明表) {4=MemoryPartition [size=69, begin=16, status=false]} ---------------------第10轮------------------------ 6号作业开始,占用空间123KB 分区表: MemoryPartition [size=16, begin=0, status=true] MemoryPartition [size=69, begin=16, status=false] MemoryPartition [size=123, begin=183, status=false] MemoryPartition [size=32, begin=306, status=true] MemoryPartition [size=256, begin=240, status=true] MemoryPartition [size=512, begin=496, status=true] MemoryPartition [size=1024, begin=1008, status=true] MemoryPartition [size=2048, begin=2032, status=true] SUM = 4080 已分配分区(分区说明表) {4=MemoryPartition [size=69, begin=16, status=false], 6=MemoryPartition [size=123, begin=183, status=false]} ---------------------第11轮------------------------ 4号作业结束! 与前一个分区合并。 分区表: MemoryPartition [size=85, begin=0, status=true] MemoryPartition [size=123, begin=183, status=false] MemoryPartition [size=32, begin=306, status=true] MemoryPartition [size=256, begin=240, status=true] MemoryPartition [size=512, begin=496, status=true] MemoryPartition [size=1024, begin=1008, status=true] MemoryPartition [size=2048, begin=2032, status=true] SUM = 4080 已分配分区(分区说明表) {6=MemoryPartition [size=123, begin=183, status=false]} ---------------------第12轮------------------------ 6号作业结束! 与前后两个分区合并。 分区表: MemoryPartition [size=240, begin=0, status=true] MemoryPartition [size=256, begin=240, status=true] MemoryPartition [size=512, begin=496, status=true] MemoryPartition [size=1024, begin=1008, status=true] MemoryPartition [size=2048, begin=2032, status=true] SUM = 4080 已分配分区(分区说明表) {} ---------------------第13轮------------------------ 程序结束

下面两个实验暂时不做了,确实没时间。

可变式分区分配 实验要求

设计一个可变式分区分配的存储管理方案,并模拟实现分区的分配和回收过程。 对分区的管理法可以是下面三种算法之一:

首次适应算法操作系统原理实验指导最坏适应算法最佳适应算法 编写并调试一个段页式存储管理的地址转换的模拟程序 实验要求

首先设计好段表、页表,然后给出若干个有一定代表性的地址,通过查找段表页表后得 到转换的地址。要求打印转换前的地址,相应的段表,页表条款及转换后的地址,以便检查。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有