基于PyQt5实现的python模拟操作系统动态分配分区方式程序

发布日期: 2019-06-10 09:56:18 浏览量: 485
评分:
star star star star star star star star star star
*转载请注明来自write-bug.com

1. 使用说明

1.1 项目简介

为加深对于操作系统内存管理内容的理解,设计实现一个模拟动态分区分配方式的模拟程序。

1.2 项目目的

  • 实现动态分区分配方式的模拟程序

  • 设计数据结构、学习分配算法

  • 加深对动态分区存储管理方式及其实现过程的理解

1.3 项目功能要求

1.3.1 基本任务

动态分区分配方式的模拟

1.3.2 功能描述

假设初始态下,可用内存空间为640K,并有下列请求序列,请分别用首次适应算法和最佳适应算法进行内存块的分配和回收,并显示出每次分配和回收后的空闲分区链的情况来。

1.4 窗口内容

2. 程序设计与实现

2.1 设计

2.1.1开发环境及语言

  • 开发环境:pycharm

  • 开发语言:python

本项目采用PyQt5实现图形化用户界面,达到可视化的目的。

2.1.2 算法设计

首次适应算法(First Fit)

该算法从空闲分区链首开始查找,直至找到一个能满足其大小要求的空闲分区为止。然后再按照作业的大小,从该分区中划出一块内存分配给请求者,余下的空闲分区仍留在空闲分区链中。

  • 特点: 该算法倾向于使用内存中低地址部分的空闲区,在高地址部分的空闲区很少被利用,从而保留了高地址部分的大空闲区。显然为以后到达的大作业分配大的内存空间创造了条件

  • 缺点:低地址部分不断被划分,留下许多难以利用、很小的空闲区,而每次查找又都从低地址部分开始,会增加查找的开销

最佳适应算法(Best Fit)

该算法总是把既能满足要求,又是最小的空闲分区分配给作业。为了加速查找,该算法要求将所有的空闲区按其大小排序后,以递增顺序形成一个空白链。这样每次找到的第一个满足要求的空闲区,必然是最优的。孤立地看,该算法似乎是最优的,但事实上并不一定。因为每次分配后剩余的空间一定是最小的,在存储器中将留下许多难以利用的小空闲区。同时每次分配后必须重新排序,这也带来了一定的开销。

2.1.3 数据结构设计

采用python的list结构来模拟分区链表

2.1.4 类结构设计

UI类

  1. class Ui_MainWindow(object):

类成员

  1. def setupUi(self, MainWindow): # 设置主窗口UI,加载所需的背景,button以及Label

主逻辑窗口类

  1. class myWindow(QtWidgets.QMainWindow):

类成员

属性

  1. self.ui = Ui_MainWindow() # UI类的实例化
  2. self.isbestFit = False # 标志是否选择bestFit识别API
  3. self.workNumber = 0 # 作业个数
  4. self.nodeList = [] # 结点链表

方法

  1. # firstFit从未选状态转变为已选状态时会触发firstFitbar_recognize函数
  2. def firstFitbar_recognize(self):
  3. # bestFit从未选状态转变为已选状态时会触发bestFitbar_recognize函数
  4. def bestFitbar_recognize(self):
  5. # 重置内存空间函数
  6. def clear(self):
  7. # 寻找首次适应算法添加结点的位置
  8. def findFirstNode(self, length):
  9. # 寻找最佳适应算法添加结点的位置
  10. def findBestNode(self, length):
  11. # 添加结点
  12. def addNode(self, length):
  13. # 删除作业结点
  14. def deleteNode(self, workNumber):
  15. # 加入作业
  16. def addButton(self, node=[]):
  17. #文本处理函数
  18. def text_changed(self):

2.2 算法实现

首次适应算法

最佳适应算法

  1. # 寻找首次适应算法添加结点的位置
  2. def findFirstNode(self, length):
  3. self.targetNumber = -1
  4. for i in range(0, len(self.nodeList)):
  5. # 如果结点i为空闲
  6. if self.nodeList[i]['isnull'] and self.nodeList[i]['length'] >= length:
  7. self.targetNumber = i
  8. return self.targetNumber
  9. return -1
  10. # 寻找最佳适应算法添加结点的位置
  11. def findBestNode(self, length):
  12. self.min = 650
  13. self.targetNumber = -1
  14. for i in range(0, len(self.nodeList)):
  15. # 如果结点i为空闲
  16. if self.nodeList[i]['isnull'] and (self.min > self.nodeList[i]['length'] >= length):
  17. self.min = self.nodeList[i]['length']
  18. self.targetNumber = i
  19. return self.targetNumber
上传的附件 cloud_download 基于PyQt5实现的python模拟操作系统动态分配分区方式程序.7z ( 33.83mb, 0次下载 )
error_outline 下载需要9点积分

发送私信

6
文章数
1
评论数
eject