首页 > 学院 > 开发设计 > 正文

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

2019-11-14 17:36:23
字体:
来源:转载
供稿:网友
#!/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()

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表