操作系统课程设计大作业
一、Pintos和我想象中的操作系统有何不同?为什么还称它为操作系统?
Pintos是一个基于80x86架构的简单操作系统框架,它支持内核线程、加载和运行用户程序以及文件系统。一般常见的操作系统使用windows架构,更注重的是用户的使用体验,具有图形化的操作界面。并且在内核模式之上,提供了支持运行服务和系统进程、应用程序、子系统进程的用户模式,包含了一系列必要的库函数与系统DLL。而Pintos与我想象中的操作系统不同,其代码十分简洁凝练,只保留了操作系统运行所必要的结构。Pintos注重操作系统最基本结构的设计,并且给学生留有很大的设计空间,便于学生在调整改进的实施过程中学习,帮助学生了解操作系统的底层原理。Pintos通常搭建在如Bochs、QEMU等可以仿真80x86 CPU及其外设的系统仿真器上运行,即使模拟出的Pintos操作系统崩溃,也不会对主机操作系统产生影响。有利于学生进行调试仿真等操作。
操作系统管理各种计算机硬件,为应用程序提供基础,并充当计算机硬件和用户的中介,其具有并发、共享、虚拟和异步四种特征。Pintos操作系统可以根据命令行的操作,对用户的命令进行响应,并且操作计算机硬件计算并反馈结果。典型的操作系统由四部分构成:进程管理,I/O设备管理,存储器管理和文件管理,这些在头歌平台上关于Pintos的实验中略有涉及,而仔细看Pintos操作系统的源代码,发现这些功能都已经在代码中实现了。在Pintos系统源码的src源文件夹下,threads文件夹内含有内核线程操作相关的源文件,userprog文件夹内含有用户进程和系统调用相关的源文件,filesys文件夹下含有文件系统相关源文件,devices文件夹下含有输入输出设备接口相关的源文件。由此可见,Pintos麻雀虽小但是五脏俱全,能够实现一些基本操作系统的功能。
二、你完成了哪些实验?在完成实验的过程中最大的困难是什么?最大的收获是什么
我在头歌平台中完成了Pintos系统实验的热身:基础练习、实验一 Threads和实验三 File Systems。各个实验由浅入深,层层递进,有一定的挑战性。在刚接手的时候,由于对整个Pintos操作系统的了解还过于浅薄,没能够搞清楚各个文件各个函数之间的关系,导致编写代码无从下手。后来在仔细地阅读Pintos源代码后,掌握了各个函数的作用意义,懂得了函数之间跳转的逻辑关系;通过阅读测试代码,梳理了当前操作系统存在的问题,明确了实现目标的需求,从而按图索骥带着问题去编写新的代码改进原有的不足。
通过完成实验一 Thread,我巩固了之前在操作系统课程上学到的关于线程方面的知识,加深了优先级抢占调度方法的理解,尽管在完成优先级捐赠实验时曾遇到困难,不理解具体的代码应该怎么修改,不过在翻阅操作系统相关资料后茅塞顿开。
在进行实验的过程中,虽然经常在编译检查的时候出现报错,但是我能够根据报错反馈的信息去定位错误,并且寻找出现错误的原因,从而完善我的代码。我认为这样的一个过程能够培养我修改BUG的能力,学得了出错是为了以后能够不再出现类似的错误。
三、实验完成后你对操作系统是否有了新的认识或理解?请具体阐述一下。
Pintos系统就是一个微型版的操作系统,从中能够了解到很多有用的认识。通过学习实验三 文件系统,我了解了文件系统在磁盘里的表示格式,以及每个字节所代表的含义,学会了使用相关指令创建磁盘删除文件,并且能够使用二进制编辑工具恢复之前删除的文件。在这个学习的过程中,我了解到了所谓的删除并不是真正的从磁盘中把所要删除的文件每个位清理干净,而是将该文件所在扇区设置为“未使用”状态,同时将可用空间大小恢复到没有该文件存在的状态。而那些磁盘中残留的数据会在下一次对所在扇区读写时被替换掉,从而减少磁盘IO的读写的次数,提高了系统工作的效率。
四、如果让你设计一个操作系统,你觉得最大的挑战是什么?请讲讲原因。
在看见Pintos时,相比于Windows系统文件夹动辄10多G的大小,我惊讶于其短小精炼,却依然能够实现一个操作系统最基本的功能。在我看来,操作系统的设计过程分为三个部分:功能设计、算法设计和结构设计。首先我们要明确这个系统所要实现的目标,并且针对该系统提出使用的要求,在此基础上完成功能设计;而算法设计是针对所要实现的功能而设计出来的算法策略,体现的是一个操作系统的时间空间效率,一个好的算法能够大大节省计算所需花费的时间和空间开销,从而大大提升该操作系统的速度。最后是结构设计,正如Pintos操作系统所设计的那样,根据不同的功能将相应的函数模块放在不同的文件夹中,使得操作系统结构清晰简明,适应性强,便于后续读者针对某一功能对代码进行阅读与修改。我认为实现这三个方面算是一个很大的挑战,对这三方面实现的好坏的评估决定着该操作系统是否能够很好的运行下去,以及后续对其进行完善补充时是锦上添花还是大动干戈。除此之外,还要注意一个高质量的操作系统在并发、共享、虚拟和异步的过程中,要能够高效的协调各个资源之间利用效率,可靠的指挥处理器实现各条指令之间的交替运行,并且能够保证其安全性。
五、你对本课程的内容设计、授课方式、实验平台等有何建议?
该课程内容设计足量合理,课程之间难度分布均匀,过关的机制激励学生深入思考,理解代码的含义。授课方式上老师讲解认真负责,还在QQ群内开设了学生答疑,欢迎学生积极踊跃提出问题解答困惑。在实验平台进行实践的过程,能够加深对于操作系统的理解,让学生收益良多。这学期因为疫情原因无法线下上课,虽然只能与老师线上相见,但是实际线上体验要比在线下上课感觉高效的多。对于这门课程,最重要的是学生自主学习的过程,一周完成一个小实验,任务并不是很重,学生可以自主分配时间,在充分理解掌握的基础之上继续下一章节的学习。