编写程序模拟完成动态分区存储管理方式的内存分配和回收。
2014-09-16 15:25
501 查看
#!/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()
相关文章推荐
- 通信实验 动态分区存储管理方式的主存分配回收 查错
- 操作系统固定分区管理方式的主存分配回收模拟系统的设计
- 设计一个可变式分区分配的存储管理方案。并模拟实现分区的分配和回收过程
- 操作系统:存储管理动态分区分配及回收算法
- 编写程序模拟堆栈的存储方式
- 动态多分区存储管理模拟系统
- 操作系统:存储管理动态分区分配及回收算法
- 存储管理动态分区分配及回收算法
- 操作系统:存储管理动态分区分配及回收算法
- 大数据Hive的案例、参数、动态分区、分桶、视图、索引、运行方式、权限管理、Hive的优化_03_03
- 模拟实现顺序表-动态的存储方式
- 编写程序判断你的电脑存储方式是大端存储还是小端
- 7-2 一帮一(10 分) “一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名
- 操作系统——请求调页存储管理方式的各种模拟
- 使用动态分区分配方式的模拟
- 内存管理模拟实验之实现一个简单的固定(可变)分区存储管理系统
- C++:编写一个程序,用动态分布分配空间的方法计算Fibonacci数列的前二十项并存储到动态分布的空间中
- 编写一个学生信息管理系统:学生信息包括有(学生学号、姓名、性别、手机号码),系统以学生对象数组的方式存储学生信息 (初始数组为10个元素,每当数组存储满时,需要进行扩容,规则可以为翻倍也可以固定增长
- 【实验】请求调页存储管理方式的模拟
- 【操作系统总结】存储器管理-程序的装入与连接,连续分配存储管理方式