操作系统原理模拟实验(基于C/C++模拟处理机调度、存储管理和文件系统)


引言

包含多个实验的完整源代码,可直接编译运行,以及相关核心逻辑方法的详细注解和实验要求;请前往Gitee进行源码的下载(如果对你有帮助的话,麻烦点赞、收藏Start一下哦!如果有建议或者发现Bug,请在Issus上提出,方便反馈和处理:https://gitee.com/JJJZZZYYY/operating-system-principle/issues

资源链接:https://gitee.com/JJJZZZYYY/operating-system-principle
稳定版本:https://gitee.com/JJJZZZYYY/operating-system-principle/releases
分支和标签预览
主体内容预览


一、处理机调度模拟

1、下载链接

https://gitee.com/JJJZZZYYY/operating-system-principle/tree/%E5%A4%84%E7%90%86%E6%9C%BA%E8%B0%83%E5%BA%A6%E6%A8%A1%E6%8B%9F/

2、目的与要求

一、 目的:
用C/C++编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。
二、 要求:
设计一个有N个进程并发的进程调度程序。每个进程有一个进程控制块(PCB)表示(可以用PCB直接代表进程实体,略去每个进程的程序段和数据段的具体运行)。进程控制块可以包含如下信息:进程名、到达时间、需要运行时间、已用CPU时间、进程状态等等, 并初始化设置一批进程控制块实例,通过对进程控制块实例对象的控制,来模拟进程调度的控制过程。
选取以下一种调度算法模拟实现。每进行一次调度,都打印一次运行进程、就绪队列、以及各个进程的PCB的相关信息,以便进行检查。
(1)时间片轮转调度算法: 每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一(可以不考虑进程阻塞的情况)。
进程的到达时间、运行时间为进程初始化时程序员输入的时间。
就绪进程获得CPU后只能运行一个时间片(时间片由程序员初始化输入),运行后更新已占用CPU时间。
若运行一个时间片后(或一个时间片内),进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程;若运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,则把它插入就绪队列队尾等待CPU。
重复以上过程,直到所要进程都完成为止。
(2)参照多级反馈调度算法,模拟其实现过程,至少设置3个就绪队列,分别初始化各队列的优先级和执行的时间片。用此算法模拟对一批进程控制块实例进行调度执行。注意进程动态进入,系统动态调度的过程。

3、截图示例

如有需要,请前往下载
处理机调度模拟项目结构
处理机调度模拟核心代码
处理机调度模拟运行截图


二、存储管理模拟

动态分区分配

1、下载链接

https://gitee.com/JJJZZZYYY/operating-system-principle/tree/%E5%AD%98%E5%82%A8%E7%AE%A1%E7%90%86%E6%A8%A1%E6%8B%9F%EF%BC%88%E5%8A%A8%E6%80%81%E5%88%86%E5%8C%BA%E5%88%86%E9%85%8D%EF%BC%89/

2、目的与要求

一、 目的:
用C/C++编写和调试一个存储管理的模拟程序,加深对动态分区存储管理方式及实现过程的理解,了解动态分区分配方式中使用数据结构和分配算法。
二、 要求:
① 程序中使用的主要数据结构:采用指针方式将各个空闲分区链接而成的链表,来记录内存的分配现状。系统不预先划分分区,分区的建立是在作业的处理过程(给进程分配内存的过程)中逐步形成的。
② 程序的输入:输入若干作业向系统申请分配内存的请求序列。
例如,初始状态下可用内存空间为640KB,有下列请求序列:
作业1申请130KB;作业2申请60KB;作业3申请100KB;作业2释放60KB;作业4申请200KB;作业3释放100KB;作业1释放130KB;作业5申请140KB;作业6申请60KB;作业7申请50KB;作业6释放60KB;
③ 内存分配过程:按空闲分区链接方式的不同分类,分别采用首次适应算法和最佳适应算法实现动态分区。
④ 内存回收过程:进程执行完毕,系统内存。如果回收的内存与内存原有的空闲区相邻,则回收区与空闲区合并,修改相应数据结构。
⑤ 结果输出:根据进程请求分配内存的输入序列,即时更新显示内存分配情况。

3、截图示例

如有需要,请前往下载
存储管理模拟(动态分区分配)项目结构
存储管理模拟(动态分区分配)核心代码
存储管理模拟(动态分区分配)运行截图

分页存储地址转换

1、下载链接

https://gitee.com/JJJZZZYYY/operating-system-principle/tree/%E5%AD%98%E5%82%A8%E7%AE%A1%E7%90%86%E6%A8%A1%E6%8B%9F%EF%BC%88%E5%88%86%E9%A1%B5%E5%AD%98%E5%82%A8%E5%9C%B0%E5%9D%80%E8%BD%AC%E6%8D%A2%EF%BC%89/

2、目的与要求

一、 目的:
用C/C++编写和调试一个分页存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法。通过编写和调试地址转换过程的模拟程序以加强对分页存储地址转换过程的了解。
二、 要求:
设计一个请求页式存储管理方案,并编写模拟程序实现。
(1)产生或输入一个需要访问的逻辑指令地址流。它是一系列需要访问的逻辑指令的地址。如1059B,1060B,3059B,4753B,2241B…… ……;
(2)指定合适的页面尺寸(例如以 1KB或2KB为1页);
(3)指定内存页表的最大长度,并对页表进行初始化;
(4)每访问一个地址时,首先要计算该地址所在的页的页号,然后查页表,判断该页是否在主存:
如果该页已在主存,则打印页表情况;
如果该页不在主存且主存未满,则调入一页并打印页表情况;
如果该页不在主存且主存已满,则按LRU页面淘汰算法淘汰一页后调入所需的页,打印页表情况;
(5)页面淘汰算法采用LRU页面淘汰算法,并且在淘汰一页时,只将该页在页表中抹去。不必判断它是否被改写过,也不必写回到辅存。
(6)逐个地址访问,直到所有地址转换/访问完毕。
分页存储地址流程图

3、截图示例

如有需要,请前往下载
分页存储地址转换项目结构
存储管理模拟(分页存储地址转换)核心代码
存储管理模拟(分页存储地址转换)运行截图


三、文件系统模拟

1、下载链接

https://gitee.com/JJJZZZYYY/operating-system-principle/tree/%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E6%A8%A1%E6%8B%9F/

2、目的与要求

一、 目的:
用C/C++编写和调试一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。
二、 要求:
①设计一个n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中可以打开多个文件,对文件必须设置保护措施,且至少有create、delete、open、close、read、write等命令。
②程序采用二级文件目录,即设置主目MFD(包括用户名和指向文件目录的指针)和用户文件目录UFD(即文件目录,包括文件名,保护码,文件长度等)。另外,为打开文件设置了运行文件目录(AFD,文件执行读命令或写命令之前,把相关文件目录信息调入AFD)。在执行读写命令时,需改读写指针。
③文件保护简单使用了三位保护码:分别代表读、写、执行的权限。对应位为1,对应位为0,则表示不允许读写、执行。
④程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD、UFD)、打开文件目录(AFD)(即运行文件目录)
⑤有不同用户的切换登录,良好的用户提示和完善的异常处理;注意文件的各类操作逻辑顺序要符合现实的实际逻辑!

3、截图示例

如有需要,请前往下载文件系统模拟项目结构文件系统模拟核心代码
文件系统模拟运行截图


免责申明:相关文章及资料仅供学习交流使用,禁止一切不正当行为,如由此产生相关责任,自行承担
 
Tip:如需转发或引用相关内容,请务必附带原链接


如果对你有帮助的话,麻烦关注一波,并且点赞、收藏、转发一下哦o( ̄︶ ̄)o!如果有问题或者发现Bug欢迎提出反馈!

  • 44
    点赞
  • 254
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
模拟处理机调度处理机调度是指操作系统根据一定的策略和算法,将就绪队列中的进程分配给处理机执行。基于C/C++语言,可以使用多线程模拟处理机调度的过程。可以使用线程相关的库函数来创建多个线程代表多个进程,通过设置线程的优先级、时间片轮转等调度算法,模拟操作系统对进程的调度过程。 存储管理(动态分区分配): 动态分区分配是指操作系统根据进程的需求,将可用主存空间分为若干个不定大小的分区,然后按照进程的请求进行分配。使用C/C++语言可以通过数据结构来表示可用主存空间和已分配的分区,并通过算法来实现动态分区分配的过程。比如可以使用链表来表示分区,每次分配或释放内存时,根据算法更新链表的状态。 分页存储地址转换: 分页存储是将进程的逻辑地址空间划分为若干个大小相等的页,实际内存也划分为同样大小的页面,然后通过页表将逻辑地址映射到物理地址。使用C/C++语言可以通过数据结构来表示页表和逻辑/物理地址的转换关系,并通过算法来实现地址转换。可以通过哈希表或数组来表示页表,根据页表查找相应的物理地址。 文件系统文件系统操作系统提供的一种管理和操作文件的机制,在磁盘上组织文件和目录,并提供对文件的读、写、删除等操作。使用C/C++语言可以通过文件操作相关的库函数来模拟文件系统的实现。可以用数据结构来表示文件和目录的结构,通过一系列的文件操作函数来实现文件的创建、读写、删除等操作。可以利用文件指针来定位文件读写位置,通过逐渐读取或写入来实现对文件的操作。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

6铭记6

打赏一下吧!^-^

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值