问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

基于C++实现(图形化界面)CLOCK置换算法

创作时间:
作者:
@小白创作中心

基于C++实现(图形化界面)CLOCK置换算法

引用
CSDN
1.
https://m.blog.csdn.net/s1t16/article/details/143702762

本文介绍了一个基于C++实现的CLOCK置换算法图形化界面设计,详细描述了系统的设计目标、功能要求、模块结构、数据结构以及测试与调试过程。通过这个项目,读者可以深入了解操作系统中的页面置换算法及其在实际编程中的应用。

一、课程设计目的

《操作系统》是一门重要的专业基础课,是涉及较多硬件知识的计算机系统软件课程。在计算机软硬件课程的设置上,它起着承上启下的作用。操作系统对计算机系统资源实施管理,是所有其他软件与计算机硬件的唯一接口,所有用户在使用计算机时都要得到操作系统提供的服务。

操作系统课程设计的主要任务是研究计算机操作系统的基本原理和算法,掌握操作系统的进程管理、存储管理、文件管理和设备管理的基本原理与主要算法。目的是使学生掌握常用操作系统(如DOS、Windows或Linux)的一般管理方法,了解它是如何组织和运作的,对操作系统的核心概念和算法有一个透彻的理解,并对系统运行的机制有一个全面的掌握,从而充分理解系统调用与程序设计之间的关系。

进行操作系统课程设计主要是在学习操作系统课程的基础上,在完成操作系统各部分实验的基础上,对操作系统的整体进行一个模拟,通过实践加深对各个部分的管理功能的认识,还能进一步分析各个部分之间的联系,最后达到对完整系统的理解。同时,可以提高运用操作系统知识解决实际问题的能力;锻炼实际的编程能力、创新能力及团队组织、协作开发软件的能力;还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。

二、课程设计内容与要求

2.1 设计内容

采用CLOCK置换算法仿真请求分页系统

2.2 设计要求

  • 实现请求分页存储管理方式的页面置换算法:CLOCK算法
  • 内存物理块数固定为15个,对多个作业采用可变分配全局置换的策略分配物理块
  • 作业数量与作业大小(10-20页)可在界面进行设置
  • 所有作业按RR算法进行调度,时间片长度为1秒
  • 可为每个作业随机产生引用的页面串,也可以人工输入引用的页面串,页面串长度50—100,要求必须包括作业所有的页面,可作为样例数据保存
  • 可读取样例数据(要求存放在外部文件中)进行作业数量、作业大小、页面串长度的初始化
  • 要求采用可视化界面,模拟内存分配和使用情况图,可在运行过程中随时暂停,查看当前内存物理块使用情况。
  • 每次全部作业运行结束后,要求打印出访问命中率

三、系统分析与设计

3.1 系统分析

本系统主要用于模拟仿真操作系统中的页面置换调用,实现请求分页存储管理方式的页面置换算法:CLOCK算法 。本系统采用可视化界面模拟内存分配和使用情况,用户登陆后可读取样例数据(要求存放在外部文件中)进行作业数量、作业大小、页面串长度的初始化,也可人工输入作业个数、大小。可将产生的页面串,实时的显示在系统桌面上,点击“开始”按钮,即开始模拟,在页面产生方式中选择页面是随机产生还是读取文件中的样例数据,在页面情况编辑框中显示的是产生的页面情况(包括作业数量和作业页面情况,一个作业一行显示),在置换情况编辑框中显示的是页面调用先后顺序,此部分可实现暂停、继续功能,点击“重置”按钮,将所有的对话框内容清空,待系统模拟完成后显示模拟结果,打印命中率。

本系统在普通的PC机上即可运行。

3.2 系统设计

本系统主要分为两个大模块,从外部文件读取数据进行算法模拟和输入作业详细情况进行模拟,两大功能的实现通过操作界面中的单选按钮进行选择。(系统默认是随机产生作业)其中从文件读取外部数据又向下分为文件名的输入,实时显示产生的作业数量和长度,当点击“确定”按钮后,界面即显示页面置换情况,进行算法模拟。随机产生作业则是输入作业数量和作业大小,点击“随机生成”按钮后,实时显示出后作业情况,进行算法模拟。其中不论是从文件读取产生的作业还是输入产生的作业都可在运行过程中,对其进行暂停和继续操作,以查看内存使用情况。到此,系统设计基本完成。

3.2.1 模块设计

本系统主要包括:用户登录、从外部文件读取数据、随机产生、页面调用详细情况和动态内存显示等几大模块。

程序主模块图

从外部读取文件数据测试模块图

从界面产生页面数据测试图

3.2.2 数据结构说明

全局变量

类型
名称
说明
Page
a
存储页面情况的数组
Int
yks
内存物理块长度
Int
bf[]
存储内存块数据数组
Int
bb[]
置换算法中的辅助数组
Int
dys
内存调页数
Int
zhs
内存置换个数
CString
dyqk
存放全部调页情况
CString
s
得到一个置换页面情况
bool
cz
判断当前页面在内存中是否存在
Int
iItemCount
得到当前列表控件中的位置
Int
iItemCount1
列表控件的行初始值
Int
l
列表控件中列的值

初始化部分

类型
名称
说明
CListCtrl
m_list
记录单选按钮选择页面产生方式
CString
m_xl;
存放页面调用顺序的字符串
Int
m_zynum
记录作业数量
Int
m_zysize
记录作业大小
CString
m_qyl
记录算法运行完毕后的缺页率
Int
m_dys
记录调页数
Int
m_zhs
记录置换数
CString
m_dyqk
存放页面调用详细情况的数组
CString
m_filename
记录操作界面输入的文件名
CString
m_username
记录登录用户名字符串
CString
m_password
记录登录用户密码字符串
Int
m_Time
记录登录用户登录次数变量

另外,定义了page结构体,用于表示内存页面情况。其中有两个整形变量z,bz。分别表示CLOCK算法中页面内容和页面标志位情况。

3.2.3 算法流程图

四、系统测试与调试分析

4.1 系统测试

本系统采用黑盒测试法,黑盒测试也称功能测试,是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的,它通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。

测试目的
验证系统对于系统登录的处理流程
测试技术
单元测试
测试方法
黑盒测试法
测试内容
用户登录功能–用户名、密码
测试步骤
输入正确的用户名与密码 输入正确的用户名与错误密码 输入错误用户与密码 输入错误用户名。密码超过三次
测试数据
Admin,1234 Admin,错误密码 错误用户名,密码 错误用户名,密码
预期结果
正常进入系统 显示密码错误 显示用户名错误 显示已输入三次错误,退出登录
测试结果
与预期相符 与预期相符 与预期相符 与预期相符
测试目的
验证系统对于页面产生方式选择的流程
测试技术
单元测试
测试方法
黑盒测试法
测试内容
页面产生方式选择–从文件读
测试步骤
选择从文件读按钮,并填写文件名称 选择从文件读按钮,未填写文件名称 选择从文件读按钮,填写不存在文件名称 未选择从文件读按钮,并填写文件名称
测试数据
选择从文件读按钮,a.txt 选择从文件读按钮 选择从文件读按钮,b.txt 选择从文件读按钮,a.txt
预期结果
读取文件成功,产生是随机序列 弹出“请输入文件名称”警告 弹出“不能打开文件”警告 弹出“请选择页面从文件读产生方式”
测试结果
与预期相符 与预期相符 与预期相符 与预期相符
测试目的
验证系统对于页面随机产生方式选择的流程
测试技术
单元测试
测试方法
黑盒测试法
测试内容
页面产生方式选择–随机产生
测试步骤
选择随机产生按钮,输入正确的作业数量和作业大小 未选择随机产生按钮,输入正确的作业数量和作业大小 选择随机产生按钮,未输入正确的作业数量和作业大小
测试数据
选择随机产生按钮,3 18 未选择随机产生按钮,3 18 选择随机产生按钮,0 0
预期结果
随机产生成功 弹出“请选择随机产生方式”警告 弹出“请页面个数和大小”警告
测试结果
与预期相符 与预期相符 与预期相符

4.2 调试分析

在编写登陆界面时,由于加入了登陆次数的判断m_Time<3,加入后出现了一点小问题,不论输入正确的用户名和密码程序均不执行。

在编写重置按钮的程序时,点击胡出现死机现象,查阅代码后,我之前写的OnTimer函数,设置好之后,点击重置,并未kill掉,OnTimer时间函数遇到不正常停止,故产生死机现象,在进行所有的重置操作之前先将OnTimer函数kill掉,加入一句:KillTimer(1);

在读取文件产生随机序列时,我用的是字符串存放读到的字符,在读完文件之后,加入m_zynum = atoi(s1);m_zysize = atoi(s2);将读到的字符串转化为整形,并分别赋值给m_zynum,m_zysize两个整型变量,程序对这两个整形变量在进行相应的操作。

在产生随机序列时,使用了随机函数,产生随机数并存放到a[i].z数组中,并把读到的每个数字,加到字符串m_xl中,并且没加入一个数字加入一个空格,直到产生所有的随机作业。

五、用户手册

本系统适用于大部分的普通PC机,直接运行,不需安装。

首先,用户登录本系统,输入用户名和密码点击确定登录本系统。用户名:Admin 密码:password

登录成功,进入系统主页面

选择从文件读方式产生作业(点击确定后)。选择从文件读按钮,并在输入框内输入文件名(文件在本系统根目录下)

对从文件读取进行CLOCK算法模拟(点击开始后),页面情况显示的是读取的文件中的作业页面情况,包括作业数量和作业大小。置换情况是作业进行CLOCK算法模拟内存的详细调用情况。内存块情况显示的是内存中的实时调用情况。调页数、置换数、缺页率、有系统计算的出,打印在界面相应的输出框内。

点击重置按钮界面全部内容置

选择随机产生方式产生作业,选择随机产生按钮,并在相应的对话框内输入正确的作业数量和作业大小,点击随机生成按钮

对随机产生的作业进行CLOCK算法模拟(点击开始按钮之后)

点击暂停按钮,查看内存使用情况

点击继续按钮,程序继续执行

产生的作业页面情况写入文件(d://b.txt)

点击退出按钮,安全退出系统。

六、体会与自我评价

通过本学期操作系统课程设计的学习,使自己更加理解了操作系统的工作原理,特别是对于作业的创建、物理内存的分配等。时间是检验真理的唯一标准,对于知识更是如此,要想学好一门科学文化知识就要重在实践,特别是对于我们这种实践性比较强的课程,更要通过不断的上机操作来更好地学习它。

通过实践,我发现了我的很多不足之处,首先是以前的C语言基础没打好,一些基本常识性东西都不知道,对于C语言,我想多说几句,我认为对于计算机语言学好C和汇编就足够了,其他想C++和Java都不是问题,用一星期熟悉语法完全足够,再说高级语言都封装了太多的东西,伊稚斜函数调用用,到最后连自己调用的这个函数是怎么写的,怎么实现的自己全然不知,最后沦为可悲的代码工人,这实在是我们学习计算机的悲哀,虽然语言向着简单移动的方向发展,但作为专业搞计算机的人,我觉得,那些高级语言不属于我们,开发和普及这些高级语言才是我们的本职。

再有操作时有很多很生疏的东西,像MFC的很多机制不是特别熟悉,以后再学习生活红还得加强,另外,虽然在学习课本知识的时感觉什么东西都很简单,但真正操作起来确实如此之难,语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号