(分页模拟)简单模拟操作系统分页管理

简单模拟一下内存分页,分配和回收。这里我就用最最最简化的方式没有技术含量。

每个进程维护一张页表,然后操作系统用位示图模拟内存分配情况(0: 未分配,1已经分配)

import java.util.*;public class Main {public static int PAGE_COUNT = 1024;public static int reminder;//空闲public static int[][] nums;public static void main(String[] args) {nums = new int[3][4];//方便测试,模拟页数for (int i = 0; i < nums.length; i++) {for (int j = 0; j < nums[0].length; j++) {nums[i][j] = (int) (Math.random() * 2);if (nums[i][j] == 0) {reminder++;}}}System.out.println("\n------------------------分配前--------------------------");print();//分配PCB p1 = new PCB("p1", 4);allocate(p1, 4);System.out.println("\n------------------------分配后--------------------------");print();setFree(p1);System.out.println("\n------------------------回收后--------------------------");print();}//打印内存分配情况private static void print() {for (int i = 0; i < nums.length; i++) {for (int j = 0; j < nums[0].length; j++) {System.out.print(nums[i][j] + " ");}System.out.println();}}/*** @param pcb  进程名* @param size 需要的页数*/private static void allocate(PCB pcb, int size) {if (reminder < size) {System.out.println("可分配空间不足!");}int[] pageTable = pcb.pageTable;int index = 0;for (int i = 0; i < nums.length; i++) {for (int j = 0; j < nums[0].length; j++) {if (nums[i][j] == 0) {nums[i][j] = 1;//将其分配出去pageTable[index] = i * nums[0].length + j;reminder--;if (++index == size) {System.out.println("分配完成");return;}}}}}/*** 将为该进程分配的内存回收掉** @param pcb 进程*/private static void setFree(PCB pcb) {int[] pageTable = pcb.pageTable;for (int i = 0; i < pageTable.length; i++) {//定位位示图位置int row = pageTable[i] / nums[0].length;int col = pageTable[i] % nums[0].length;//将空间回收nums[row][col] = 0;reminder++;}System.out.println("进程空间已释放!");}
}class PCB {String name;int[] pageTable;public PCB() {}public PCB(String name, int size) {//size为占用的内存页数this.name = name;this.pageTable = new int[size];Arrays.fill(this.pageTable, -1);}
}

运行截图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/216302.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Weblogic 数据库连接池溢出解决方法

引言 在信息运维工作中发现&#xff0c;由于部分应用系统编写的代码不够健壮&#xff0c;对于数据库连接没有及时进行回收处理&#xff0c;造成Weblogic数据库连接池溢出&#xff0c;影响系统的稳定运行。其实Weblogic提供了数据库连接的回收机制&#xff0c;可以将超过配置时…

基于redisson实现发布订阅(多服务间用避坑)

前言 今天要分享的是基于Redisson实现信息发布与订阅&#xff08;以前分享过直接基于redis的实现&#xff09;&#xff0c;如果你是在多服务间基于redisson做信息传递&#xff0c;并且有服务压根就收不到信息&#xff0c;那你一定要看完。 今天其实重点是避坑&#xff0…

【华为数据之道学习笔记】3-9以特征提取为核心的非结构化数据管理

随着业务对大数据分析的需求日益增长&#xff0c;非结构化数据的管理逐 渐成为数据管理的重要组成部分。非结构化数据包括无格式文本、各类格式文档、图像、音频、视频等多种异构的格式文件&#xff0c;较之结构化数据&#xff0c;其更难标准化和理解&#xff0c;因此在存储、检…

第二证券:结构性行情或将延续 泛科技有望继续走强

展望未来&#xff0c;当时已进入重要的方针窗口期&#xff0c;能否有超预期的新方针推出是改变商场的要害。但复盘2023年的行情来看&#xff0c;过早买卖方针预期的成功率并不高&#xff0c;因而主张该方位以防御性资产为主&#xff0c;高股息资产从本年9月份至今现已调整了2个…

MMdetection3.0 训练DETR问题分析

MMdetection3.0 训练DETR问题分析 针对在MMdetection3.0框架下训练DETR模型&#xff0c;验证集AP值一直为0.000的原因作出如下分析并得出结论。 条件&#xff1a; 1、NWPU-VHR-10数据集&#xff1a;共650张&#xff0c;训练&#xff1a;验证611&#xff1a;39&#xff1b; 2、…

K8S学习指南(11)-k8s中配置pod的服务质量(QOS)

文章目录 前言什么是服务质量&#xff08;QoS&#xff09;&#xff1f;如何配置服务质量&#xff1f;CPU资源配置示例 内存资源配置示例 服务质量等级的判断服务质量的最佳实践结论 前言 Kubernetes&#xff08;简称K8s&#xff09;是一种开源的容器编排平台&#xff0c;用于简…

Linux vmstat命令:监控系统资源

vmstat命令&#xff0c;是 Virtual Meomory Statistics&#xff08;虚拟内存统计&#xff09;的缩写&#xff0c;可用来监控 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态等信息。此命令的基本格式有如下 2 种&#xff1a; [rootlocalhost ~]# vmstat [-a…

FFmpeg-基础组件-AVFrame

本章主要介绍FFmpeg基础组件AVFrame. 文章目录 1.结构体成员2.成员函数AVFrame Host内存的获取 av_frame_get_bufferAVFrame device内存获取av_hwframe_get_buffer&#xff08;&#xff09; 1.结构体成员 我们把所有的代码先粘贴上来&#xff0c;在后边一个一个解释。 typede…

SpringBoot中实现跨域的几种常用方式

在SpringBoot中实现跨域请求可以通过以下几种方式&#xff1a; 1. 使用CrossOrigin注解&#xff0c;可以直接在Controller层的方法上使用&#xff0c;用来指定允许跨域请求的来源、方法和头信息。例如&#xff1a; CrossOrigin(origins "http://localhost:8080") …

[MySQL]SQL优化之sql语句优化

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 一、索引优化 回顾&#xff1a; &#x1f4d5;索引分类&#xff1a; &#x1f4d5;索引失效&#xff1a; &#x1f4d5;设计原则&#xff1a; &#x1f4d5;SQL性能分析 二、SQL优化 语句优化 &#x1f4d…

越南语翻译,人工翻译哪个值得信赖?

近年来&#xff0c;随着中越两国的交流日益频繁&#xff0c;为了促进双方的交流与理解&#xff0c;市场上对越南语翻译的需求也日益增加。那么&#xff0c;如何做好越南语翻译&#xff0c;人工翻译哪家公司值得信赖呢&#xff1f; 据了解&#xff0c;中文翻译越南语是一项颇具挑…

科技与艺术相结合,虚拟人裸眼3D动画亮相城市商圈

随着元宇宙概念的火爆&#xff0c;虚拟制作技术的快速发展&#xff0c;虚拟人可以将虚拟世界与现实世界相结合&#xff0c;为用户带来沉浸式体验。如虚拟人壬子希以裸眼3D动画的形式亮相城市商圈&#xff0c;助力文旅以科技与艺术相结合的形式&#xff0c;展现城市文化与科技成…

从运维角度去了解redis

一、介绍 1.简介 redis是一个开源的、使用C语言编写的、可基于内存也可持久化的Key-Value数据库&#xff0c;采用单线程基于epoll模型实现IO多路复用非阻塞的处理模式。 2.特点 1.丰富的数据结构 -----Redis支持五种数据类型&#xff1a;string&#xff08;字符串&#xf…

【数据结构(九)】顺序存储二叉树(2)

文章目录 1. 相关概念2. 顺序存储二叉树的遍历 1. 相关概念 从数据存储来看&#xff0c;数组存储方式和树的存储方式可以相互转换&#xff0c;即数组可以转换成树&#xff0c;树也可以转换成数组&#xff0c;看右面的示意图。 转换原则:     1.上图的二叉树的结点&#xff…

项目包管理工具_poetry

1 介绍 Poetry 是一个用于 Python 项目的包管理工具&#xff0c;它相对于传统的 pip 和 requirements.txt 的优势在于&#xff1a;使得项目依赖管理更加方便&#xff0c;且结合了更多新工具&#xff0c;还提供命令行进一步配置。 当在同一系统或在同一个 docker 中&#xff0…

Java对List<Map>进行合并去重

对List进行合并去重&#xff0c;首先创建一个新的 List 用于存储合并去重后的结果&#xff0c;遍历原始的 List&#xff0c;将每个 Map 对象中的键值对放入一个 Set 中进行去重&#xff0c;最后将去重后的键值对重新组装成一个新的 Map 对象&#xff0c;并添加到新的 List 中。…

每日一练【长度最小的子数组】

一、题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 二、题目解析 经…

DeepDrive双转子径向磁通电机

DeepDrive公司开发的是一种高效、高性能、低成本的双转子径向磁通电机系统&#xff08;含控制器&#xff09;。该系统具有较高的成本效益和资源效率&#xff0c;并拥有更高的能效&#xff0c;能显著提升电动车续航能力&#xff0c;同时亦能有效控制生产成本&#xff0c;减少自然…

3_流量预测综述阅读_Cellular traffic prediction with machine learning: A survey

为了方便学习英语书写&#xff0c;总结的一些话用英语书写 ♥目录♥ 0、文献来源and摘要1、introduction2、prediction problems and datasets2.1 prediction problems2.2 dataset&#xff08;1&#xff09;Telecom Italia 意大利电信 2015&#xff08;2&#xff09;City Cell…

C语言习题集(028)

//写一个函数&#xff0c;输入一行字符&#xff0c;将此字符串中最长的 //单词输出。 /* */ //解答&#xff1a; #include<stdio.h> void choose(char s[100]); int main() { char str[100]; printf("请输入一段字符&#xff1a;"); gets(str); printf(&q…