基于PyQt5实现的python模拟操作系统动态分配分区方式程序
[TOC]
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)
该算法总是把既能满足要求,又是最小的空闲分区分配给作业。为了加速查找,该算法要求将所有的空闲区按其大小排序后,以递增顺序形成一个空白链。这样每次找到的第一个满足要求的空闲区,必然是最优的。孤立地看,该算法似乎是最优的,但事实上并不一定。因为每次分配后剩余的空间一定是最小的,在存储器中将留下许多难以利用的小空闲区。同时每次分配后必须重新排序,这也带来了一定的开销。
-
特点 :每次分配给文件的都是最合适该文件大小的分区
-
缺点 :内存中留下许多难以利用的小的空闲区。
-
参考 :https://blog.csdn.net/weixin_39282491/article/details/81045441
2.1.3 数据结构设计
采用python的list结构来模拟分区链表
2.1.4 类结构设计
UI类
python
class Ui_MainWindow(object):
类成员
python
def setupUi(self, MainWindow): # 设置主窗口UI,加载所需的背景,button以及Label
主逻辑窗口类
python
class myWindow(QtWidgets.QMainWindow):
类成员
属性
python
self.ui = Ui_MainWindow() # UI类的实例化
self.isbestFit = False # 标志是否选择bestFit识别API
self.workNumber = 0 # 作业个数
self.nodeList = [] # 结点链表
方法
python
# firstFit从未选状态转变为已选状态时会触发firstFitbar_recognize函数
def firstFitbar_recognize(self):
# bestFit从未选状态转变为已选状态时会触发bestFitbar_recognize函数
def bestFitbar_recognize(self):
# 重置内存空间函数
def clear(self):
# 寻找首次适应算法添加结点的位置
def findFirstNode(self, length):
# 寻找最佳适应算法添加结点的位置
def findBestNode(self, length):
# 添加结点
def addNode(self, length):
# 删除作业结点
def deleteNode(self, workNumber):
# 加入作业
def addButton(self, node=[]):
#文本处理函数
def text_changed(self):
2.2 算法实现
首次适应算法
最佳适应算法
```python
寻找首次适应算法添加结点的位置
def findFirstNode(self, length):
self.targetNumber = -1
for i in range(0, len(self.nodeList)):
# 如果结点i为空闲
if self.nodeList[i]['isnull'] and self.nodeList[i]['length'] >= length:
self.targetNumber = i
return self.targetNumber
return -1
# 寻找最佳适应算法添加结点的位置
def findBestNode(self, length):
self.min = 650
self.targetNumber = -1
for i in range(0, len(self.nodeList)):
# 如果结点i为空闲
if self.nodeList[i]['isnull'] and (self.min > self.nodeList[i]['length'] >= length):
self.min = self.nodeList[i]['length']
self.targetNumber = i
return self.targetNumber
```
参考文献
- 基于.NET的预测决策算法研究及系统实现(暨南大学·张科)
- 拆迁安置管理系统的设计与实现(电子科技大学·王李均)
- 拆迁安置管理系统的设计与实现(电子科技大学·王李均)
- 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
- 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
- 基于B/S架构的酷跑社区系统的设计与实现(内蒙古大学·张晓乐)
- 基于Oracle 11g的仓库管理系统的设计与实现(曲阜师范大学·付海龙)
- 拆迁安置管理系统的设计与实现(电子科技大学·王李均)
- 昆明市五华区电子政务系统设计与实现(电子科技大学·庄研)
- 基于JAVA EE物流管理系统的设计与实现(吉林大学·刘知学)
- 分布式共享存储器系统的设计与实现(吉林大学·付晓东)
- 东营市数据交换共享系统(北京交通大学·韩影)
- 基于数据库的供应链管理系统的设计与实现(吉林大学·刘坤)
- 基于Actor模型的广域分布式爬虫的设计与实现(北京邮电大学·陈凌鹏)
- 基于J2EE的分布式技术的研究与设计(武汉理工大学·谢承旺)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码导航 ,原文地址:https://bishedaima.com/yuanma/35588.html