gitee完整代码下载
github完整代码下载
一、 需求分析
模拟一个采用多道程序设计方法的单用户操作系统,该操作系统包括进程管理、存储管理、设备管理、文件管理和用户接口四部分。预计程序所能达到的功能:
进程管理模拟:实现操作系统进程管理功能,如实现进程的控制(进程调度,进程创建与撤销,状态转换,进程唤醒),进程并发执行。
存储管理模拟:实现内存空间的分配和回收、存储保护。
设备管理模拟:主要包括设备的分配和回收。
文件管理和用户接口:主要是单用户的磁盘文件管理部分,包括文件的逻辑结构、物理结构、目录、磁盘分配回收、文件的保护和用户接口的实现。
二、 概要设计
- 通过程序来模拟计算机的硬件系统,在此基础上实现操作系统的模拟实现。
- 本次实验由5个模块构成
(1) 文件管理模块
(2) 进程控制及内存管理模块
(3) 硬件实现及管理模块
(4) 用户界面交互模块
(5) 系统内核软件模块 - 主程序的流程图
三、详细设计
(1) 文件管理模块
文件管理模块由以下3个类组成
1.MyFile类
该类是操作系统的基本文件单位,这个类包含了文件的数据内容,名字,属性以及磁盘的起始扇区和长度等,构成一个基本的文件。利用输入的属性和数据来初始化文件,同时提供了getter和setter方法可以对文件的属性进行访问和修改。
- FileSamplesGenerator类
该类通过预设的二进制代码生成可执行的文件。这个类中保存了10个可执行的程序的代码,通过调用文件系统中创建文件的方法,将这些代码转换成操作系统内部的文件,同时将文件名和路径记录在这个类中。
- FileSystem类
该类用于管理整个文件系统。通过读取磁盘文件,利用FileSamplesGenerator类生成可执行文件和利用DirTreeParser类生成目录树进行初始化,包含了查找磁盘空闲扇区和分配空闲扇区的功能接口,以实现将FAT中的数据直接写入磁盘或直接对磁盘盘块进行写入操作,以及可以对操作系统内的文件直接进行查找和访问。对外提供了创建、打开、读取、写入、关闭、删除文件的功能方法,并且可以获取路径下的子目录,并且修改文件的属性。
(2)进程控制及内存管理模块
进程控制及内存管理模块由以下4个类组成
1.ExcuteTask类
该类是操作系统的进程调度的类,这个类包含了进程创建、进程销毁、进程阻塞、进程唤醒等功能,模拟一个进程的生命周期及维护相应的就绪和阻塞队列,并且调用其他类来模拟申请内存与释放内存、查看当前内存详情和获取正在执行的指令等
2.MenoryBlock类
该类是内存块类,获取具体被分配的线程id的属性和大小,提供了getter和setter方法可以对内存块的属性进行访问和修改。
3.MemoryController类
该类是内存空间的管理类,用于维护一个内存块队列,比如添加一个新内存块、删除一个内存卡、获取当前内存块队列,提供了getter和setter方法可以对内存的属性进行访问和修改。
4.SimulationThread类
该类是进程的一个模拟类,通过进程的id或者对应的可执行文件来启动或者新建一个进程、包括获取进程id和获取进程阻塞原因,同时提供了getter和setter方法可以对进程的属性进行访问和修改。
(3)硬件实现及管理模块
硬件实现及管理模块由以下8个类组成:
-
HardDevice类
该类为抽象类,默认无任何模仿功能,类中封装了硬件设备的状态,ID和名字等成员变量,同时提供getStatus、getID和getName方法对硬件设备的三个成员进行访问,该类需要被所有除CPU以外的硬件类继承。 -
Peripheral类
该类继承了HardDevice类,定义了interval用以表示外围设备被占用倒计时的计时器;同时提供了方法allocate用以申请占用外围设备time个计时周期;refresh方法用以更新设备状态,并在每个CPU周期开始时执行,设备之前若处于中断状态,则取消中断,若已被占用,则扣除clock个计时周期;reset方法用于重置设备的计时器和状态。 -
Memory类
该类继承了HardDevice类,定义了私有变量storage用数组模拟内存,用maxCapacity表示内存的最大容量。同时,类中包含了方法read用以从address地址的内存中读取一字节的数据;方法write用以向address地址的内存中写入一字节的数据;方法getMaxCapacity用以访问内存的最大容量。 -
Disk类
该类继承了HardDevice类,类中包含了storage表示内存,filename表示磁盘数据存储的文件名,即虚拟磁盘,maxCapacity表示磁盘的最大存储量,sectorSize表示磁盘中块的容量,sectorCount表示硬盘中块的数量。同时提供了方法read从磁盘中读取第address块的64字节数据;方法write将64字节的数据写入磁盘的第address块中;方法load从实际硬盘中试图加载制定名字的虚拟磁盘,并读取其中的数据,该方法用在Disk类的构造方法中;方法initialize在未找到虚拟磁盘文件时,则建立指定名字的文件,该方法用在Disk类的构造方法中;方法store用以将暂存于内存中的数据存入虚拟磁盘实际的数据文件中;以及方法getMaxCapacity,getSectorSize,getSectorCount分别对磁盘的最大容量,最大块长度和块的数量进行访问。 -
CPU类
该类为中央处理器,控制一切硬件的行为,对接模拟系统。该类包含了内存、磁盘、外围设备、硬件、寄存器AX和计时器。同时类中还提供了方法readMemory用以从内存中的address地址中读取一字节数据;方法writeMemory用以向address地址的内存中写入一字节的数据;方法readDisk用以从磁盘中的address地址中读取一块64字节的数据;方法writeDisk用以向address地址的磁盘中写入一块64字节的数据;方法initializePeripheral用以在实例化CPU时,初始化所需要的所有外设;方法getX用以获取寄存器AX的值;方法getStatus用以获取指定名称的硬件的状态;方法getPeripheralStatus用以获取指定名称的外设的状态;方法getMemoryCapacity用以获取内存的最大容量;方法getDiskCapacity用以获取硬盘的最大容量;方法allocatePeripheral用以申请占用外设time个计时周期,由execute方法定期调用;方法refreshPeripheral用以更新设备状态;方法resetPeripheral用以重置外设状态。总的来说,该类主要执行的是检查各硬件的状态,在各时钟周期内不断地完成读写等操作,完成存储管理和设备管理的任务。在该类的函数中,每次执行指令前,均检查设备的状态,判断是否有中断,如有中断先进行取消,再执行其他的操作。
(4)用户界面交互模块
用户界面交互模块主要由以下个14个类组成
1.Controller类
该类是整个面板的控制类,在里面设置了所有栏的参数和所有窗口的设置。进行了图标的读取与设置,已经各个app名称的设置,还有建造窗口时基本的设置。
2.Apppane类
底部次级栏设置,设置了10张照片分别对应底部10个应用程序的图标。
3.ControllerSetter类
整个界面的设置,获取整个屏幕的大小,整个主页面都是一个controller类,可以设置背景图片。
4.CPUWin类
CPU窗口的创建,设置了4个文本框来写出目前状态。
5.DeviceWin类
设备状态的显示窗口。设置了众多文本来表示目前各设备的状态。
6.DictionaryWin类
磁盘目录的显示窗口,调用了磁盘目录类的使用方法。使用简单第归遍历数据, 重新建立目录结构。
7.DickWin类
磁盘状态的显示窗口,未占用的内存鸽子就是绿色,占用了就是红色。
8.FileWin类
次级栏中的模拟程序的窗口,打开了就显示当前程序正在运行,并且调用了StringBuilder类的方法。
9.HelpWin类
顶部状态栏中的帮助窗口的建立。
10.MainMemoryWin类
内存状态的显示窗口,同时调用了SystemCore类的方法,方便进行内存状态的更新。
11.SuperWin类
Win的子类,在Win类的基础上,增加了快捷键的动态效果,把鼠标移上去时会出现动态效果放大缩小。
12.TerminalWin类
终端的窗口设置,调用了终端的设置类。
13.UpdateCenter类
Controller类的更新设置,time设置了更新的周期。
14.Win类
最基本的窗口类,进行窗口参数设置,里面也有其他窗口的基本设置。在这里设置了窗口的名字,大小,还有是否更新窗口的update设置。
(5)系统内核软件模块
1.Compiler类
Compiler类用于创建编译器对象,主要实现对创建的“可执行文件”进行汇编/编译的功能,其中“可执行文件”中所能编译通过执行的指令只有5中,包括:
ASSIGNMENT:x=?,对x进行赋值,其中x为两位数。
ADD:x++ x加1(x小于等于255,大于等于1)
DEL:x- - x减一
USEHARD:I/O指令
FINISH:终止运算,表示可执行文件结束
- Shell类
Shell提供用户命令接口,通过终端窗口接受用户从键盘键入的命令,并对用户输入的命令进行处理并返回处理结果。
实现的命令如下:
- create : create /usr/tes.e [创建一个带空字符的普通文件]
- delete : delete /usr/tes.e [删除文件]
- cat : cat /usr/tes.e [查看文件的内容]
- copy : copy /usr/tes.e/drv/tes.e [复制文件到其他的目录]
- mv : mv /usr/tes.e /drv/tes.e [移动文件到其他的目录]
- echo : echo “ABC” > /usr/tes.e [重定向输入文本到文件中,双引号包含输入内容
- mkdir : mkdir /usr/bin [创建一个目录]
- rmdir : rmdir /usr/bin [删除一个目录]
- exe : exe /usr/000/e [执行一个可执行的文件]
- time : time [查看当前系统的时间片]
- clear : clear [清屏]
- poweroff : poweroff [关机]
- system : system [系统开发者]
- compile : compile /usr/abc.s [在当前目录下生成编译文件,编译前必须删除以前的编译文件]
- close : close /usr/005.e [手动关闭文件]
3.DirTreeParser类
DirTreeParser类实现生成JSON格式的系统目录,供文件系统FileSystem通过生成对象调用getJsonTree生成系统文件目录,目录结构采用树型目录结构,目录名或文件名:3个字节,拓展名:1个字节。根目录位置固定为OS。
五、用户使用说明
程序开始时会创立一个主界面,包含了系统所有功能的入口,通过对界面组件事件的监听,可以响应用户的请求,显示用户需要的窗口,或者可以通过终端窗口,用户可以根据终端指南窗口的提示,对文件进行操作,用户可以通过磁盘,文件目录界面对操作系统内的文件情况进行观察,同时可以通过对cpu,内存,设备状态界面来观察可执行文件运行时,操作系统的内在状况。也可以通过更换夜间模式,更换壁纸和分辨率选择用户界面的样式。
六、功能
- 进入页面
- 主界面
- 窗口设置
- 1280*720
- 1024*768
- 交换壁纸
- 打开次级栏后的页面
- 运行程序
- 未运行程序时的CPU状态
- 运行程序时CPU状态
- 未运行程序时内存的状态
- 运行程序时内存的状态
- 磁盘状态
- 磁盘目录
- 未运行程序时的设备状态
- 运行程序时的设备状态
- 终端处理:
- 创建文件
- 删除文件
- 查看文件
- 清屏
- 移动文件
- 复制文件
- 重定向文本到文件中
- 新建目录
- 删除目录
- 运行程序
- 显示当前运行了的时间片
- 显示系统开发者
- 生成编译文件
- 顶部菜单栏中点击文件可以出现磁盘目录
- 顶部菜单栏中点击前往中的CPU状态可以显示CPU状态
- 顶部菜单栏中点击前往中的磁盘状态可以显示磁盘状态
- 顶部菜单栏中点击前往中的内存状态可以显示内存状态
- 顶部菜单栏中点击前往中的设备可以显示设备状态
- 顶部菜单栏帮助中的终端指令指南
- 帮助中的快捷键指南
- 帮助中的课设成员名单
- 夜间模式