#!/usr/bin/python#-*- coding: utf-8 -*-class Table(object): #空閑分區表 #0:開始地址 1:長度 freeTable = [] #占用分區表 #0:程序名 1:開始地址 2:長度 useTable = [] def __init__(self): ip() 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()
新聞熱點
疑難解答