编写程序模拟完成动态分区存储管理方式的内存分配和回收。

2023-11-19

#!/usr/bin/python
#-*- coding: utf-8 -*-

class Table(object):
	#空闲分区表
	#0:开始地址 1:长度
	freeTable = []
	
	#占用分区表
	#0:程序名 1:开始地址 2:长度
	useTable = []
	
	def __init__(self):
		print '初始化内存使用情况'
		self.useTable.append(['os',0,10])
		self.freeTable.append([10,100])
	
	def WorkAdd(self):
		memoryName = raw_input('请输入进程名:')
		memoryName = memoryName.strip()
		memorySize = int(raw_input('请输入进程大小:'))
		if (memoryName != '' and memorySize > 0):
			self._WorkAdd(memoryName, memorySize)
		else:
			print '输入有问题'
			
		
	def _WorkAdd(self, memoryName, memorySize):
		minIndex = -1
		minMemory = 0
		for i in xrange(len(self.freeTable)):
			if (self.freeTable[i][1] > memorySize):
				if (minIndex == -1):
					minMemory = self.freeTable[i][1]
					minIndex = i
				else:
					if (self.freeTable[i][1] < minMemory):
						minMemory = self.freeTable[i][1]
						minIndex = i
		if (minIndex == -1):
			self.outOfMemory()
		else:
			start = self.freeTable[minIndex][0]
			length = self.freeTable[minIndex][1]
			self.freeTable.remove(self.freeTable[minIndex])
			self.useTable.append([memoryName,start,memorySize])
			self.freeTable.append([start + memorySize,length - memorySize])
			self.display()
	
	def display(self):
		print '已用分区表\n程序进程名\t开始地址\t长度'
		for i in xrange(len(self.useTable)):
			print self.useTable[i][0], '\t\t', self.useTable[i][1], '\t', self.useTable[i][2]
		print '空闲分区表\n开始地址\t长度'
		for i in xrange(len(self.freeTable)):
			print self.freeTable[i][0], '\t\t', self.freeTable[i][1]
	
	def outOfMemory(self):
		print '亲,内存不够了'
		self.display()
		
	def WorkDel(self):
		memoryName = raw_input('请输入进程名:')
		memoryName = memoryName.strip()
		if (memoryName == ''):
			print '没有输入'
		else:
			self._WorkDel(memoryName)
			
	def _WorkDel(self,memoryName):
		index = -1;
		for i in xrange(len(self.useTable)):
			if (self.useTable[i][0] == memoryName):
				index = i
				break
		if (index == -1):
			print '不存在此进程'
		else:
			start = self.useTable[index][1]
			length = self.useTable[index][2]
			end = start + length
			freeIndex1 = -1
			freeIndex2 = -1
			for i in xrange(len(self.freeTable)):
				iStart = self.freeTable[i][0]
				iLength = self.freeTable[i][1]
				if (start == iStart + iLength):
					freeIndex1 = i
					break
			for i in xrange(len(self.freeTable)):
				if (self.freeTable[i][0] == end):
					freeIndex2 = i
					break
			if (freeIndex1 != -1 and freeIndex2 != -1):
				iStart = self.freeTable[freeIndex1][0]
				iLength = self.freeTable[freeIndex1][1] + self.freeTable[freeIndex2][1] + length
				self.freeTable.append([iStart,iLength])
				self.freeTable.remove(self.freeTable[freeIndex1])
				self.freeTable.remove(self.freeTable[freeIndex2])
			elif (freeIndex1 != -1 and freeIndex2 == -1):
				iStart = self.freeTable[freeIndex1][0]
				iLength = self.freeTable[freeIndex1][1] + length
				self.freeTable.append([iStart,iLength])
				self.freeTable.remove(self.freeTable[freeIndex1])
			elif (freeIndex1 == -1 and freeIndex2 != -1):
				iStart = start
				iLength = self.freeTable[freeIndex2][1] + length
				self.freeTable.append([iStart,iLength])
				self.freeTable.remove(self.freeTable[freeIndex2])
			elif (freeIndex1 == -1 and freeIndex2 == -1):
				iStart = start
				iLength = length
				self.freeTable.append([iStart,iLength])
			else:
				print '系统崩溃'
			self.display()
			
	def run(self):
		while(True):
			print '动态分区存储管理'
			print '1,增加程序'
			print '2,结束程序'
			print '3,退出'
			print '请选择操作:(输入数字)'
			chose = raw_input('请选择操作:')
			chose = chose.strip()
			if (chose == '1'):
				self.WorkAdd()
			elif(chose == '2'):
				self.WorkDel()
			elif (chose == '3'):
				break
			else:
				print '输入有误'
			print '\n'
				
			
			
if __name__ == '__main__':
	table = Table()
	table.run()

转载于:https://www.cnblogs.com/wanghongxu/p/3975002.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编写程序模拟完成动态分区存储管理方式的内存分配和回收。 的相关文章

随机推荐

  • Samy XSS Worm 分析

    Samy Worm MySpace com允许用户通过控制标签的style属性 samy构造css xss MySpace过滤了很多关键字 利用拆分法绕过 div标签如下 div div 其中expr字符串的内容为如下javascript代
  • 软件质量保证与测试技术实验报告(二)黑盒测试用例设计

    1 实验名称 黑盒测试用例设计 2 实验目的 学会用等价类划分法和边界值法设计测试用例 进行功能测试 3 实验内容 题目1 NextDate程序的功能是按年 月 日的顺序输入一个日期 输出为输入日期后一天的日期 请使用等价类和边界值法对Ne
  • windows内核驱动开发(WDK环境搭建)

    去官网下载WDK安装包和Visual Studio 下载 Windows 驱动程序工具包 WDK Windows drivers Microsoft Docs 首先安装Visual Studio 这个就不用我介绍了怎么安装了 下面直接下载步
  • JESD204B(RX)协议接口说明。

    解释一下Vivado IP协议中的Shared Logic in Example 与 Shared Logic in Core 首先 什么是Shared Logic 字面意思很好理解 就是共享逻辑 主要包括时钟 复位等逻辑 当选择Share
  • grafana elasticsearch es 创建变量variable时,query里的查询语句是对的,但是预览没有数据

    问题 图中的query输入框中输入正确 并且es中有rulename字段 rulename也有值 但是此处预览里没有值 按F12看了grafana的请求体和响应体才发现 rulename是text类型的 不能进行聚集 所以这里查不到数据 解
  • -离散数学-期末练习题解析

    一 选择题 二 填空题 三 计算题 四 简答题 五 证明题 六 应用题 一 选择题 下列句子中 是命题 A 2是常数 B 这朵花多好看啊 C 请把们关上 D 下午有会吗 A 命题是能判断真假的陈述句 B是感叹句 C是祈使句 D是疑问句 令p
  • sqlserver开启sql登录方式!

    安装sqlserver的时候只有windows登录 但有时也要用到sqlserver登录的方式 总不可能重新安装sqlserver吧 1 先用windows登录sqlserver 依次单击 安全性 gt 登录名 gt sa 右键打开sa的属
  • Android_UI开发总结(一):RadioButton与RadioGroup使用

    关于RadioButton与RadioGroup的API详解 gt https www cnblogs com Im Victor p 6238437 html 下面记录在使用RadioButton和RadioGroup中遇到的三点问题 1
  • MPLS原理和配置实验

    一 MPLS背景 90年代初 互联网流量快速增长 而由于当时硬件技术的限制 路由器采用最长匹配算法逐跳转发数据包 成为网络数据转发的瓶颈 快速路由技术成为当时研究的一个热点 在各种方案中 IETF确定MPLS协议作为标准的协议 MPLS采用
  • Linux内存地址管理

    文章目录 系统内存布局 内核地址的低端和高端内存概念 低端内存 高端内存 地址转换和MMU Linux中的四级分页模型 虚拟地址字段 页表处理 将虚拟地址转换物理地址 Linux系统中的每个内存地址都是虚拟的 它们不直接指向任何物理内存地址
  • 陷波滤波器消除周期噪声python_50Hz 工频电磁场干扰的消除方案

    50Hz 工频电磁场干扰是硬件开发中难以避免的问题 特别是敏感测量电路中 工频电磁场会使测量信号淹没在工频波形里 严重影响测量稳定度 故消除工频电磁场干扰是敏感测量电路设计中不可逃避的挑战 PT100 是当前应用最为广泛的测温方案 各位工程
  • C语言进阶题——坐标移动

    C语言进阶题 坐标移动 开发一个坐标计算工具 A表示向左移动 D表示向右移动 W表示向上移动 S表示向下移动 0 0 点开始移动 从输入字符串里面读取一些坐标 并将最终输入结果输出到输出文件里面 输入 A10 S20 W10 D30 X A
  • Go项目部署及所遇问题

    小聊 本次小白给大家带来Golang项目部署操作以及个人所遇问题和解决它们的方法 依然是一边实操演示一边写文稿 如遇相似问题却存有疑惑可留言 开发环境是Window 部署环境是Linux 开发工具为GoLand 部署服务器为阿里云 1 打包
  • [工业互联-4]:工业有线互联总线之IO-Link

    目录 第1章 IO link概述 1 1 IO Link在哪了 1 2 什么是IO link 1 3 IO link的主要优势 1 4 IO Link的发展 第2章 IO link网络的组成 2 1 概述 2 2 IO Link主站模块 M
  • mysql重连次数_doctrine实现自动重连mysql数据库机制

    这篇文章主要介绍了doctrine实现自动重连mysql数据库机制 小编觉得挺不错的 现在分享给大家 也给大家做个参考 一起跟随小编过来看看吧 不知道大家有没有碰到就是mysql有的时候会八小时不使用的话自动断开连接 这样会导致我们的请求失
  • Java数据结构---顺序表(增删改查详细实现)

    1 什么是顺序表 在程序中 经常需要将一组 通常是同为某个类型的 数据元素作为整体管理和使用 需要创建这种元素组 用变量记录它们传进传出函数等 一组数据中包含的元素个数可能发生变化 可以增加或删除元素 对于这种需求 最简单的解决方案便是将这
  • 通过js在ul中插入10000个li,点击li打印出li的序号

    第一种 直接ul插入 花费了119ms 164ms window onload function let now new Date let ul document querySelector ul for let i 0 i lt 1000
  • android 蓝牙聊天室之官方例子

    2013 09 05 android 蓝牙聊天室之官方例子 蓝牙开发的大致流程 1 蓝牙权限 Java代码
  • 解决mac端TypeError: transpileDependencies.map is not a function

    运行环境 问题详情 解决方案 在我使用yarn安装包的时候是正常安装的 可是在yarn serve的时候提示了如下错误 这个时候需要在vue config js中加入这个配置 transpileDependencies 与devServic
  • 编写程序模拟完成动态分区存储管理方式的内存分配和回收。

    usr bin python coding utf 8 class Table object 空闲分区表 0 开始地址 1 长度 freeTable 占用分区表 0 程序名 1 开始地址 2 长度 useTable def init sel