Skip to content

设计了生产者-消费者模拟演示系统。生产者模拟多个进程生产指令放入指令队列中,消费者模拟处理机从指令队列中取出指令并映射为页进行处理,实现页面置换算法。利用Qt产生动画,模拟演示这一过程更加生动形象,可以用于操作系统的教学中。

License

Notifications You must be signed in to change notification settings

supine0703/OS_QASys

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PS: 'Release.zip' 是打包好的,无需配置环境可以直接运行.exe

目录

更新

2024/7/1

  • 重新整理了文件分布
  • 对部分逻辑做了修改
  • 对配置文件逻辑重构, 并使用 [], = 作为语法糖

2023/12/23

  • Random 和 RdFile(新) 双模式:
    • Random 可随机生成指令并存储(Save As)
    • RdFile 可加载存储好的文件并生成指令(Load Form)
  • 基于 RdFile 模式可实现 OPT 算法
  • 新添记录视图功能:
    • 三种指令追踪模式
    • 文本状态区分: 已生产指令、已消费指令、下一条待消费指令
  • 新添文件配置: 可以保存退出状态,实现更友好的交互体验
  • 修复ShowLabel内存泄漏问题 且重构优化大量代码

背景

起源是我一次操作系统实验用c++封装了一下,顺便发了一篇CSDN博客,虽然有伙伴觉得还不错,但我对这代码觉得非常糟糕,也因为自己没花太多时间: 页面置换算法模拟设计--CSDN_Leisure_水中鱼

于是便借着操作系统实践课做了这个项目。这不是对博客中代码的重构延续,而是重新从头开发的。

第一个版本于2023/12/12完成,花费20小时(正第一次研究利用Qt创建动画,费了些功夫。小慢),隔天又花了几个小时重构了部分代码,修复一些bug,添加选项卡等。

以后有可能会往里面陆续添加些有意思的,也可能就此结束。

环境

  • c++ 17
  • qt 6.5.2
  • cmake 3.27.5
  • mingw 13.1.0

项目

简介

设计了生产者-消费者模拟演示系统。生产者模拟多个进程生产指令放入指令队列中,消费者模拟处理机从指令队列中取出指令并映射为页进行处理,实现页面置换算法。利用Qt产生动画,模拟演示这一过程更加生动形象,可以用于操作系统的教学中。

文件结构

  • main.cpp
  • CMakeLists.txt
  • view 负责窗口显示等
    • mianwindow.*
    • startwidget.*
    • showwidget.*
  • model
    • showlabel.* 基于QLabel为了实现动画效果封装的模型
  • other
    • ... ... 基于ShowLabel类:生产者、消费者、缓冲队列、页面置换算法;等的封装

展示

说明

show image

效果

show gif

更新 0.3

show_2 gif

TODO

  • 问题: 可能卡顿
    • 可能是QTextEdit负载过大后、可能是当时电脑没接电源、可能是大量动画效果和信号槽导致主线程处理缓慢
    • 对于用子线程分担暂无思路:
      • 多子线程处理动画造成不明原因崩溃
      • 逻辑上大部分都是对组件的处理,复杂计算导致的占用很少
      • 目前信号槽部分耦合性较强、且大部分基于动画处理,未找到下手点
      • ... ...
    • ... ...
  • ... ...

About

设计了生产者-消费者模拟演示系统。生产者模拟多个进程生产指令放入指令队列中,消费者模拟处理机从指令队列中取出指令并映射为页进行处理,实现页面置换算法。利用Qt产生动画,模拟演示这一过程更加生动形象,可以用于操作系统的教学中。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published