目录
引言
包含多个实验的完整源代码,可直接编译运行,以及相关核心逻辑方法的详细注解和实验要求;请前往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、下载链接
2、目的与要求
一、 目的:
用C/C++编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。
二、 要求:
设计一个有N个进程并发的进程调度程序。每个进程有一个进程控制块(PCB)表示(可以用PCB直接代表进程实体,略去每个进程的程序段和数据段的具体运行)。进程控制块可以包含如下信息:进程名、到达时间、需要运行时间、已用CPU时间、进程状态等等, 并初始化设置一批进程控制块实例,通过对进程控制块实例对象的控制,来模拟进程调度的控制过程。
选取以下一种调度算法模拟实现。每进行一次调度,都打印一次运行进程、就绪队列、以及各个进程的PCB的相关信息,以便进行检查。
(1)时间片轮转调度算法: 每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一(可以不考虑进程阻塞的情况)。
进程的到达时间、运行时间为进程初始化时程序员输入的时间。
就绪进程获得CPU后只能运行一个时间片(时间片由程序员初始化输入),运行后更新已占用CPU时间。
若运行一个时间片后(或一个时间片内),进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程;若运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,则把它插入就绪队列队尾等待CPU。
重复以上过程,直到所要进程都完成为止。
(2)参照多级反馈调度算法,模拟其实现过程,至少设置3个就绪队列,分别初始化各队列的优先级和执行的时间片。用此算法模拟对一批进程控制块实例进行调度执行。注意进程动态进入,系统动态调度的过程。
3、截图示例
如有需要,请前往下载
二、存储管理模拟
动态分区分配
1、下载链接
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、下载链接
2、目的与要求
一、 目的:
用C/C++编写和调试一个分页存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法。通过编写和调试地址转换过程的模拟程序以加强对分页存储地址转换过程的了解。
二、 要求:
设计一个请求页式存储管理方案,并编写模拟程序实现。
(1)产生或输入一个需要访问的逻辑指令地址流。它是一系列需要访问的逻辑指令的地址。如1059B,1060B,3059B,4753B,2241B…… ……;
(2)指定合适的页面尺寸(例如以 1KB或2KB为1页);
(3)指定内存页表的最大长度,并对页表进行初始化;
(4)每访问一个地址时,首先要计算该地址所在的页的页号,然后查页表,判断该页是否在主存:
如果该页已在主存,则打印页表情况;
如果该页不在主存且主存未满,则调入一页并打印页表情况;
如果该页不在主存且主存已满,则按LRU页面淘汰算法淘汰一页后调入所需的页,打印页表情况;
(5)页面淘汰算法采用LRU页面淘汰算法,并且在淘汰一页时,只将该页在页表中抹去。不必判断它是否被改写过,也不必写回到辅存。
(6)逐个地址访问,直到所有地址转换/访问完毕。
3、截图示例
如有需要,请前往下载
三、文件系统模拟
1、下载链接
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欢迎提出反馈!