模拟操作系统
需求分析
明确陈述说明程序设计的任务,强调的是程序要做什么,主要包括:
任务要求:模拟一个采用多道程序设计方法的单用户操作系统,该操作系统包括进程管理、存储管理、设备管理、文件管理和用户接口四部分。
输入的形式和输入值的范围;
① 从用户界面输入字符串形式的 8 个命令,如下:
创建文件: create
删除文件: delete
显示文件: type
拷贝文件: copy
建立目录: mkdir
删除空目录: rmdir
进入退出某个目录::cd
新建可执行文件:newexe
create 新建文件时,type 打开文件,从用户界面输入文本内容,并点击保存
。目前仅支持第一次保存,暂不支持修改。
输出的形式;
① 进程管理部分
系统时间,相对时钟(时间片)、正运行进程 ID、正在执行指令、进程中间执行结果、进程最终结果以及就绪队列、阻塞队列(均以字符串形式输出并显示于用户界面)
② 存储管理部分
内存分区情况(列表形式输出显示)
③ 设备管理部分
种设备的使用情况和相应等待使用的进程 ID(列表形式输出显示)
④ 文件管理部分
文件树状目录、文本文件的内容和磁盘使用情况(文件内容字符串形式输出显示,单个磁盘用红蓝小方块表示)
⑤ 用户接口部分
显示软件系统的界面
程序所能达到的功能;
总体功能:实现一个采用多道程序设计方法的单用户操作系统,包括进程管理、存储管理、设备管理、文件管理和用户接口四部分。
① 进程管理部分功能
实现简单的 CPU,包括指令的读取、解析、执行等
实现系统时钟,控制 CPU 和系统的节拍
实现主要的寄存器
进程管理主要包括进程调度、进程的创建和撤销、进程的阻塞和唤醒, 中断作用的实现
② 存储管理部分功能
划分系统区和用户区
实现内存空间的分配和回收、存储保护(采用动态分区存储管理和首次适配)
③ 设备管理部分功能
实现设备的分配和回收,可实现进程的阻塞和唤醒,并管理等待设备的进程
设备使用倒计时来表示占用某个设备
④ 文件管理部分功能
实现了进入退出目录、新建文件、删除文件、复制文件、删除空目录、新建 exe 文件、读取文件。
显示文件目录树
显示磁盘使用情况,红色表示未被占用,蓝色表示已经被占用。
⑤ 用户接口部分
将进程执行中的各种状态、数据以及内存、磁盘使用情况显示出来
可输入各种文件命令,响应并显示各种文件命令操作
测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。
① 若可执行文件是:
模拟 CPU 在执行时,应能显示每一条指令、执行中间结果、最终结果以及对应进程 ID;内存、进程队列、设备以及磁盘方面均应有相应的实时显示
创建文件
正确输入 create gyk.txt,
正确输出 目录树更新,在该路径下生成 gyk.txt。
错误输入 create gykk.txt
错误输出 文本域提示文件命名不正确
删除文件
正确输入 delete gyk.txt
正确输出 目录树更新,该路径下的 gyk.txt 消失,对应磁盘块变为红色
错误输入 delete gykk.txt
错误输出 文本域提示文件名不正确
错误输入 delete g.txt
错误输出 文本域提示文件不存在
显示文件:
正确输入 type gyk.txt
正确输出 文本域显示文件内容,如果是第一次打开,输入内容后点击保存即可保存。磁盘块更新。
错误输入 type gykk.txt
错误输出 文本域提示文件名不正确
拷贝文件:
正确输入 copy gyk.txt aaa/bbb
正确输出 目录树更新,磁盘块更新,aaa/bbb 下出现 gyk.txt
错误输入 copy gyk.txt aaa/ccc
错误输出 文本域提示路径不存在
建立目录:

正确输入 mkdir aaa
正确输出 目录树更新
错误输入 makdir aaaa
错误输出 文本域提示目录名错误
删除空目录:
正确输入 rmdir aaa
输入 如果该目录下没有文件,则可以删除,更新目录树,更新磁盘块;如果该目录下有文件或者目录,则提示该目录不为空。
进入退出某个目录:
正确输入 cd aaa/cd …
输入 命令行更新 root>aaa:,root:,如果在 root:情况下输入 cd … 则会提示错误
新建可执行文件:
正确输入 newexe eee.exe ,在文本框中写入指令,并点击保存
正确输出 目录树更新,磁盘块更新。
概要设计
说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次 (调用)关系。
详细设计
实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模 块也都需要写出伪码算法(伪码算法达到的详细程度应能够按照伪码算法在计算机键盘上直接输 入高级程序设计语言程序);画出函数的调用关系图。
存储管理主程序伪代码:
讯享网
其他模块伪代码:
单独分区模块伪代码:
分区表代码
讯享网
进程模块伪代码
设备
文件模块

- 调试分析
- 内容包括:
- 调试过程中遇到的问题是如何解决的以及对设计与实现的讨论和分析;
- 算法的时间复杂性(包括基本操作和其他算法的时间复杂性的分析)和改进设想;
- 设计过程的经验和体会;
设备:通过对这次操作系统课程设计的亲自参与和操作,使我深刻体会到了:只要你想做只要你想学没有弄不懂得事情,工程里面也不能不在乎细节,等等。感觉很受益匪浅。懂得了操作系统包括的四部分内容:文件管理和用户接口、存储管理、设备管理、进程管理之间的内在联系。加深了我对这门课程的理解。锻炼了自己在考虑全局也不是细节的能力。
文件:文件个人觉得是整个系统中最为复杂的部分,从看懂文档到慢慢了解,思考构造,花了很长的时间。考虑到对 Java 界面不够熟悉,所以采用了用命令行来执行操作的方法。存储文件后要改变原目录中的起始盘块和文件分配表是比较难实现的步骤。
内存:本次的课程设计我负责的是存储管理部分,说实话,这其实对我来说算是比较大难度的课程设计,主要是因为本身的 Java 程序设计并没有学的很扎实,其次对操作系统的许多课程知识也开始遗忘,一开始的确是无从下手,后来,通过询问班级里 Java 程序设计厉害的同学,才开始有了思路。通过学习的知识,我知道要开始一个进程要先向内存申请分配内存空间,而进程结束后,要释放已分配的内存空间,而如何分配内存空间给所需要的进程又是依靠动态分区存储管理方式,采用首次适配、下次适配或者**适配算法来动态管理存储方式,而每个内存分区表都是由一个一个的分区组成,所以我就是沿着这个思路,由小及大开始解决问题。先从每个分区起手,定义一个分区的类(Size.class),类中包含每个分区起始地址、分区大小、分配状态的 get/set 方法,然后用链表结构 List构成分区表,采用首次适配的分配方式来构造内存分配方法,并构造内存回收释放方法,接下是进程类(Process.class),该类包含进程控制块标识符、大小、文件所在路径的 get/set 方法,最后是主类实现从申请空白 PCB 块,请求分配内存,回收释放的全过程。
通过这次的课程设计,学会了更清晰、由小及大的思考方式,学会将大的问题逐步细分,分解成小的问题来思考,然后再从小的问题一步一步解决,最终解决大的问题,其次同学们也帮助了很多,给了我许多提醒和值得参考的方法,这次的课程设计实验收货的确不少,在巩固了所学的知识的同时,也学会了更进一步的实践,提高了实践能力,也能更深一层的了解操作系统的操作原理。
界面: 这次操作系统课程设计让我深刻体会到了 UI 设计的双面性.刚开始团队要求的 Java 编写(我对 Java 几乎了解甚少),后来通过百度查询运用了 windowBuilder 插件进行拖拉操作,后期修改部分代码完成了系统的界面操作。
实现过程中出现的主要问题及解决方法。
设备:在模拟设备管理的功能的过程中,很多次不可避免的碰到了死锁的问题,遇到过很多难题,经历过难题得不到解决的过程,但是通过查阅资料,收获不菲,很好地理解了银行家算法,达到了课程设计的目的,增强了动手能力。
文件:问题集中于如何模拟磁盘、如何存入文件,如何修改文件分配表,如何记录目录项,如何显示目录等等。模拟磁盘利用了 byte 数组,保存到 disk 文件中,方便下次读取。目录的显示用了 swing 的 jtree,通过遍历磁盘中的目录项添加到节点中,形成树。用 byte 数组模拟磁盘。再界面上输入内容后,提取内容转化为字节保存到 byte 数组中,解决了文件存储问题。
界面:JLabel 无法显示背景颜色,后来用了 Panel 来代替使用.
用户使用说明
打开系统后,文件操作模块支持以下指令,用户可在 root:后输入指令,每一步的操作仅限于当前目录下的内容。

cd,cd xxx 进入某个目录,如果有错误,会在下面的灰色文本域内显示;cd … 是返回上一层。
makdir,makdir xxx 新建目录,仅支持最多 3 个字符,根目录只支持 8 个目录。如果有错误,会在下面灰色文本域内显示。
create,create xxx.txt 建立文本文件,仅支持最多 3 个字符,根目录不能建立文件,如果有错误,会在下面灰色文本域内显示。
type,type xxx.txt 打开文本文件,如果有错误,会在下面灰色文本域内显示。如果第一次打开文件,文件内没有内容可添加,并按保存按钮保存内容。暂不支持修改内容。
delete,delete xxx.txt 删除文件,如果有错误,会在下面灰色文本域内显示。
rmdir,rmdir xxx 删除空目录,如果有错误,会在下面灰色文本域内显示。暂不支持删除非空目录。
copy,copy xxx.txt xxx/xxx 复制文件到某个目录(绝对路径),如果有错误,会在下面灰色文本域内显示。
Newexe,newexe xxx.exe 新建可执行文件,仅支持最多 3 个字符,根目录不能建立文件,如果有错误,会在下面灰色文本域内显示。新建后下面灰色文本域会变为白色,可在里面输入指令,每次输入一条指令敲击一次回车。例如(x=1 回车 x=2 回车 end)。




Java没有基础怎么写系统










版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/2046.html