首页 > 编程知识 正文

c语言实验设备管理系统设计作业(操作系统原理模拟实验(基于C/C 模拟处理机调度、存储管理和文件系统))

时间:2023-05-06 09:16:36 阅读:121233 作者:4614

目录1、处理机调度模拟1、下载链接2、目标和请求3、截图示例2、存储管理模拟动态分区分配1、下载链接2、目标和请求3、截图示例分页截图示例3、文件系统模拟1、下载链接2、目标和请求3、截图示例

引言

包含多个实验的完整源代码,可直接编译运行,以及相关核心逻辑方法的详细注解和实验要求;请前往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、目的和要求1、目的:

为了更好地理解流程的概念和流程调度算法,在抄送中创建并调试流程调度器。

二、要求:

设计n个进程同时运行的进程调度器。 每个进程都有一个进程控制块(PCB )。 可以在PCB中直接表示流程实体,而忽略了每个流程的段和数据段的具体行为。 过程控制块可以包括诸如过程名称、到达时间、所需的执行时间、使用的CPU时间、过程状态等信息,通过初始化一组过程控制块实例和控制过程控制块实例对象

选择以下调度算法的模拟实现之一: 每次调度时,都会打印并检查有关运行进程、就绪队列和每个进程的PCB的信息。

)1)时间滑动调度算法:的每个过程的状态可以是就绪w (等待)、运行r (运行) run (运行)或者完成f (完成) f (完成) (该过程被阻塞)

的到达时间、执行时间是进程初始化时程序员输入的时间。

当进程准备获取CPU时,只能运行一个时间片。 时间片由程序员初始化后输入。 执行后的更新需要CPU时间。

在运行时间片后或在时间片内,如果进程占用的CPU时间达到所需的运行时间,则取消该进程。 运行时间片后,如果进程占用的CPU时间未达到所需的运行时间,即进程需要继续,请将其插入就绪队列的末尾并等待CPU。

重复以上过程,直到所有必需的过程都完成。

)参照多级反馈调度算法,模拟其实现过程,至少设置三个等待队列,分别初始化每个队列的优先级和运行的时间片。 使用该算法仿真对一组过程控制块实例进行调度运行。 请注意进程动态进入且系统动态调度的进程。

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、目的和要求1、目的:

通过I/O编写和调试存储管理模拟程序,加深对动态分区存储管理方式和实现过程的理解,了解动态分区划分方式中使用的数据结构和分配算法。

二、要求:

程序中使用的主要数据结构:使用以指针方式链接各空闲分区的链表,记录内存分配的现状。 系统不预先划分分区,分区的创建是在作业处理过程(为进程分配内存的过程)中逐步形成的。

输入程序:输入一些任务,向系统申请分配内存的请求序列。

例如,初始可用内存空间为640KB,具有以下请求序列:

工作1申请130KB; 工作2申请60KB; 工作3申请100KB; 释放工作60KB工作4申请200KB; 发布工作100KB; 发布工作130KB; 工作5申请140KB; 工作6申请60KB; 申请工作50KB释放工作60KB

内存分配过程:按空闲分区链接方式划分,分别采用首次自适应算法和最优自适应算法实现动态分区。

内存回收过程:过程执行完成,系统内存。 如果回收的内存与内存的原始可用空间相邻,则回收空间将与可用空间合并以修改相应的数据结构。

结果输出)实时更新根据进程要求分配内存的输入序列,显示内存的分配情况。

3、截图示例

trong>如有需要,请前往下载


分页存储地址转换 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欢迎提出反馈!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。