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

基于PyQt5实现的python模拟操作系统动态分配分区方式程序 [TOC] 1, 使用说明 1,1 项目简介 为加深对于操作系统内存管理内容的理解

本文包含相关资料包-----> 点击直达获取<-------

基于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://m.bishedaima.com/yuanma/35588.html

相关推荐

发表回复

登录后才能评论