目录
1 实践内容与目标
1.1实践内容
1.2实践目标
2 系统功能与 API 函数说明
2.1处理机管理
2.2 存储器管理与文件系统管理
2.3 I/O设备管理
3 硬件仿真设计
3.1 CPU
3.2内存
3.3时钟中断
3.4设备中断
3.5MMU
3.6硬盘
4 数据结构与基础操作的抽象与实现
4.1 作业控制块
4.2 程序指令集
4.3 内存块结构
4.4 MMU结构
4.5 硬盘盘块结构
4.6 PCB
4.7 OS原语核心操作
5 程序整体结构及模块功能的实现
5.1 程序整体结构
5.2 系统运行模块
5.3 界面模块
6 测试与分析
6.1 单作业CPU指令
6.2 单作业多指令
6.3 多作业CPU指令
6.4 多作业多指令
6.5 溢出作业运行
6.6 创建作业运行
7 技术问题及解决方案
8 实践心得
参考文献
摘要:以计算机操作系统原理为指导,利用面向对象程序设计技术仿真 OS 内核的作业管理、 连续内存管理、页式虚存管理、进程同步与互斥、缓冲技术、磁盘管理和文件管理的 API 功 能,可视化显示操作系统工作过程,完成操作系统课程设计的程序设计、开发、测试,答辩 以及撰写实践报告。本时间选择了难度3,基础实现了基础设计硬件部分的仿真、作业管理、并发请求文件设计、用户程序段指令文件的设计、作业运行及操作系统运行详细记录的文件的保存、进程控制块PCB设计。实现了作业并发环境下,MMU 地址变换、作业调度算法、进程原语、优先级+时间片轮转进程调度算法,位示图法实现连续空间动态分配管理。并把连续空间分配过程可视化实现。我定义的PCB和JCB和其他在定义的时候并没有很多变量,这都是因为我考虑不周,发现在实现函数的时候才需要更多的变量来存储一些值。比如这次实验需要实现指令运行自定义时间,就需要定义一个变量,存储进程每条指令的已运行时间,然后再把这个运行时间与既定的运行时间相比较,如果满足条件才能指向下一条指令。而对于内存地址来说,一个进程在创建后才有内存空间,但是内存地址由于内存申请在前不好传递给进程,则需要在进程中重新定义一个内存起地址变量。
虽然在实验前已经了解过了Java的基本原理,但只是一个初步的、基本的印象,很多实验和概念都只是依靠记忆力来执行,对于类与类之间的调用,对于public、private、protected的了解也很薄弱。但是在对于该实验的类的构建,方法的构建过程中,通过Eclipse的自动矫正和网络上的使用教程,很大程度上完善了我对于Java的理解。这个实验的起步是非常抽象的,如果没有对于操作系统并发进程低级调度的一定理解,很难从抽象的理念中具体出一个函数。而且该实验的实验指导也只是起到了参考作用,大部分的发挥空间都留给了自己,这也使难度愈加增高。该实验的初步创建和调试都是极其痛苦的过程,尤其是存在很多Eclipse检测不出来的逻辑上的代码错误,这些代码不影响程序的执行,但会导致程序执行的不正确、不完整。而这些错误的代码都是源于在创建时的不仔细,对概念的不理解。通过该实验,我很大程度上加强了对于代码的调适能力,了解到代码的调试不在于一行行检视代码,更在于增加输出状态的检测代码,或者使用异常处理代码,或者使用单步执行观察内存的状态。代码在情绪上也是一个几乎瞬间从无到有的过程,在写完一段代码后,只有执行调试过才能了解到是否正确,一段错误的代码,在经过多次修改后,成功运行的瞬间是电光一闪之间的。
对于实验本身来说,虽然操作系统的课程已经成功过关,但是对于许多操作系统运行过程中的细节还没有很好的掌握所以本次实验也是对于自己操作系统知识的一次补缺升级。
关键词:操作系统;进程调度;内存分配;连续动态;