Python|分页管理方式下存储分配情况模拟

2023-10-20 18:10

本文主要是介绍Python|分页管理方式下存储分配情况模拟,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍

  1. 现有一信息量为5页的作业要装入,运行分配程序,为作业分配主存且建立页面,之后运行回收程序。过程中打印分配与回收前后位示图和空闲块数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. 有一作业执行结束,它占用的块号为第4,5,6,31块,运行回收程序,回收作业,归还主存块。打印回收前后位示图和空闲块数。在这里插入图片描述
  3. 当装入一个作业时,当前空闲块数不能满足作业需求则分配失败在这里插入图片描述

相关阅读

Python|页面置换模拟程序设计
Python|银行家算法
Python|独占设备的分配和回收模拟
Python|模拟文件系统
Python|进程调度算法
Python|分页管理方式下存储分配情况模拟
Python|Windows下实现经典进程同步问题——理发师问题
Python|模拟实现动态分区存储管理

完整代码

import numpy
from collections import Countermain_memory = numpy.asarray([[1, 1, 0, 0, 1, 1, 1, 0],[0, 1, 0, 1, 0, 1, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0],[1, 0, 0, 0, 0, 0, 0, 1],[0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0],
])page_table = []def current_free_blocks():# 查找当前空闲块数counts = Counter(main_memory.flatten())return counts[0]def is_need(need):# 当前空闲块数是否能满足作业要求if need > current_free_blocks():return Falseelse:return Truedef bolck_number(i, j):# 块号return i * 8 + jdef byte_number(block_number):# 字节号j = block_number // 8return jdef digits(block_number):# 位数i = block_number % 8return idef show_page_table(page_table):# 输出页表print('----------------------页表------------------------')print('页号\t|块号')for i in range(len(page_table)):print('{}\t|{}'.format(i, page_table[i]))print('-------------------------------------------------')def show_bitmap():for i in main_memory:print(i)def allocate_space(pages):# 分配空间print('开始分配……')for i in range(8):for j in range(8):if main_memory[i][j] == 0:main_memory[i][j] = 1page_table.append(bolck_number(i, j))pages -= 1if pages == 0:breakif pages == 0:breakprint('分配成功!')def free_space(page_table):# 回收空间print('开始回收……')for i in page_table:main_memory[byte_number(i)][digits(i)] = 0print('回收成功!')def load():# 装入作业print('当前空闲块数:', current_free_blocks())pages = int(input('请输入要装入作业的页数:'))print('-------------------------------------------------')if not is_need(pages):print('当前空闲块数不能满足作业要求,分配失败!\n')returnelse:print('-------------------分配前的位示图-------------------')show_bitmap()print('-------------------------------------------------')allocate_space(pages)show_page_table(page_table)print('分配后空闲块数:', current_free_blocks())print('-------------------分配后的位示图-------------------')show_bitmap()print('-------------------------------------------------')print('-------------------回收前的位示图-------------------')show_bitmap()print('-------------------------------------------------')free_space(page_table)print('回收后空闲块数:', current_free_blocks())print('-------------------回收后的位示图-------------------')show_bitmap()print('-------------------------------------------------')def sample():# 执行文档中的示例,回收一个占用的块号为第4,5,6,31块的作业print('当前空闲块数:', current_free_blocks())sample_page_table = [4, 5, 6, 31]show_page_table(sample_page_table)print('-------------------回收前的位示图-------------------')show_bitmap()print('-------------------------------------------------')free_space(sample_page_table)print('回收后空闲块数:', current_free_blocks())print('-------------------回收后的位示图-------------------')show_bitmap()print('-------------------------------------------------')
# sample()
load()

这篇关于Python|分页管理方式下存储分配情况模拟的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/248819

相关文章

基于Python编写一个git自动上传的脚本(打包成exe)

《基于Python编写一个git自动上传的脚本(打包成exe)》这篇文章主要为大家详细介绍了如何基于Python编写一个git自动上传的脚本并打包成exe,文中的示例代码讲解详细,感兴趣的小伙伴可以跟... 目录前言效果如下源码实现利用pyinstaller打包成exe利用ResourceHacker修改e

Python在二进制文件中进行数据搜索的实战指南

《Python在二进制文件中进行数据搜索的实战指南》在二进制文件中搜索特定数据是编程中常见的任务,尤其在日志分析、程序调试和二进制数据处理中尤为重要,下面我们就来看看如何使用Python实现这一功能吧... 目录简介1. 二进制文件搜索概述2. python二进制模式文件读取(rb)2.1 二进制模式与文本

Python中Tkinter GUI编程详细教程

《Python中TkinterGUI编程详细教程》Tkinter作为Python编程语言中构建GUI的一个重要组件,其教程对于任何希望将Python应用到实际编程中的开发者来说都是宝贵的资源,这篇文... 目录前言1. Tkinter 简介2. 第一个 Tkinter 程序3. 窗口和基础组件3.1 创建窗

Java中Map的五种遍历方式实现与对比

《Java中Map的五种遍历方式实现与对比》其实Map遍历藏着多种玩法,有的优雅简洁,有的性能拉满,今天咱们盘一盘这些进阶偏基础的遍历方式,告别重复又臃肿的代码,感兴趣的小伙伴可以了解下... 目录一、先搞懂:Map遍历的核心目标二、几种遍历方式的对比1. 传统EntrySet遍历(最通用)2. Lambd

Django调用外部Python程序的完整项目实战

《Django调用外部Python程序的完整项目实战》Django是一个强大的PythonWeb框架,它的设计理念简洁优雅,:本文主要介绍Django调用外部Python程序的完整项目实战,文中通... 目录一、为什么 Django 需要调用外部 python 程序二、三种常见的调用方式方式 1:直接 im

Python字符串处理方法超全攻略

《Python字符串处理方法超全攻略》字符串可以看作多个字符的按照先后顺序组合,相当于就是序列结构,意味着可以对它进行遍历、切片,:本文主要介绍Python字符串处理方法的相关资料,文中通过代码介... 目录一、基础知识:字符串的“不可变”特性与创建方式二、常用操作:80%场景的“万能工具箱”三、格式化方法

Spring Boot 处理带文件表单的方式汇总

《SpringBoot处理带文件表单的方式汇总》本文详细介绍了六种处理文件上传的方式,包括@RequestParam、@RequestPart、@ModelAttribute、@ModelAttr... 目录方式 1:@RequestParam接收文件后端代码前端代码特点方式 2:@RequestPart接

Springboot配置文件相关语法及读取方式详解

《Springboot配置文件相关语法及读取方式详解》本文主要介绍了SpringBoot中的两种配置文件形式,即.properties文件和.yml/.yaml文件,详细讲解了这两种文件的语法和读取方... 目录配置文件的形式语法1、key-value形式2、数组形式读取方式1、通过@value注解2、通过

浅析python如何去掉字符串中最后一个字符

《浅析python如何去掉字符串中最后一个字符》在Python中,字符串是不可变对象,因此无法直接修改原字符串,但可以通过生成新字符串的方式去掉最后一个字符,本文整理了三种高效方法,希望对大家有所帮助... 目录方法1:切片操作(最推荐)方法2:长度计算索引方法3:拼接剩余字符(不推荐,仅作演示)关键注意事

python版本切换工具pyenv的安装及用法

《python版本切换工具pyenv的安装及用法》Pyenv是管理Python版本的最佳工具之一,特别适合开发者和需要切换多个Python版本的用户,:本文主要介绍python版本切换工具pyen... 目录Pyenv 是什么?安装 Pyenv(MACOS)使用 Homebrew:配置 shell(zsh