通过JavaFX模拟实现的多道程序单用户操作系统

编程入门 行业动态 更新时间:2024-10-28 04:24:14

资源下载地址:https://download.csdn/download/sheziqiong/85788346
资源下载地址:https://download.csdn/download/sheziqiong/85788346

一、 需求分析

模拟一个采用多道程序设计方法的单用户操作系统,该操作系统包括进程管理、存储管理、设备管理、文件管理和用户接口四部分。预计程序所能达到的功能:
进程管理模拟:实现操作系统进程管理功能,如实现进程的控制(进程调度,进程创建与撤销,状态转换,进程唤醒),进程并发执行。
存储管理模拟:实现内存空间的分配和回收、存储保护。
设备管理模拟:主要包括设备的分配和回收。
文件管理和用户接口:主要是单用户的磁盘文件管理部分,包括文件的逻辑结构、物理结构、目录、磁盘分配回收、文件的保护和用户接口的实现。

二、 概要设计

  1. 通过程序来模拟计算机的硬件系统,在此基础上实现操作系统的模拟实现。
  2. 本次实验由5个模块构成
    (1) 文件管理模块
    (2) 进程控制及内存管理模块
    (3) 硬件实现及管理模块
    (4) 用户界面交互模块
    (5) 系统内核软件模块

三、详细设计

(1) 文件管理模块

文件管理模块由以下3个类组成

1.MyFile类

该类是操作系统的基本文件单位,这个类包含了文件的数据内容,名字,属性以及磁盘的起始扇区和长度等,构成一个基本的文件。利用输入的属性和数据来初始化文件,同时提供了getter和setter方法可以对文件的属性进行访问和修改。

  1. FileSamplesGenerator类

该类通过预设的二进制代码生成可执行的文件。这个类中保存了10个可执行的程序的代码,通过调用文件系统中创建文件的方法,将这些代码转换成操作系统内部的文件,同时将文件名和路径记录在这个类中。

  1. 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个类组成:

  1. HardDevice类
    该类为抽象类,默认无任何模仿功能,类中封装了硬件设备的状态,ID和名字等成员变量,同时提供getStatus、getID和getName方法对硬件设备的三个成员进行访问,该类需要被所有除CPU以外的硬件类继承。

  2. Peripheral类
    该类继承了HardDevice类,定义了interval用以表示外围设备被占用倒计时的计时器;同时提供了方法allocate用以申请占用外围设备time个计时周期;refresh方法用以更新设备状态,并在每个CPU周期开始时执行,设备之前若处于中断状态,则取消中断,若已被占用,则扣除clock个计时周期;reset方法用于重置设备的计时器和状态。

  3. Memory类
    该类继承了HardDevice类,定义了私有变量storage用数组模拟内存,用maxCapacity表示内存的最大容量。同时,类中包含了方法read用以从address地址的内存中读取一字节的数据;方法write用以向address地址的内存中写入一字节的数据;方法getMaxCapacity用以访问内存的最大容量。

  4. Disk类
    该类继承了HardDevice类,类中包含了storage表示内存,filename表示磁盘数据存储的文件名,即虚拟磁盘,maxCapacity表示磁盘的最大存储量,sectorSize表示磁盘中块的容量,sectorCount表示硬盘中块的数量。同时提供了方法read从磁盘中读取第address块的64字节数据;方法write将64字节的数据写入磁盘的第address块中;方法load从实际硬盘中试图加载制定名字的虚拟磁盘,并读取其中的数据,该方法用在Disk类的构造方法中;方法initialize在未找到虚拟磁盘文件时,则建立指定名字的文件,该方法用在Disk类的构造方法中;方法store用以将暂存于内存中的数据存入虚拟磁盘实际的数据文件中;以及方法getMaxCapacity,getSectorSize,getSectorCount分别对磁盘的最大容量,最大块长度和块的数量进行访问。

  5. 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:终止运算,表示可执行文件结束

  1. Shell类

Shell提供用户命令接口,通过终端窗口接受用户从键盘键入的命令,并对用户输入的命令进行处理并返回处理结果。
实现的命令如下:

  1. create : create /usr/tes.e [创建一个带空字符的普通文件]
  2. delete : delete /usr/tes.e [删除文件]
  3. cat : cat /usr/tes.e [查看文件的内容]
  4. copy : copy /usr/tes.e/drv/tes.e [复制文件到其他的目录]
  5. mv : mv /usr/tes.e /drv/tes.e [移动文件到其他的目录]
  6. echo : echo “ABC” > /usr/tes.e [重定向输入文本到文件中,双引号包含输入内容
  7. mkdir : mkdir /usr/bin [创建一个目录]
  8. rmdir : rmdir /usr/bin [删除一个目录]
  9. exe : exe /usr/000/e [执行一个可执行的文件]
  10. time : time [查看当前系统的时间片]
  11. clear : clear [清屏]
  12. poweroff : poweroff [关机]
  13. system : system [系统开发者]
  14. compile : compile /usr/abc.s [在当前目录下生成编译文件,编译前必须删除以前的编译文件]
  15. close : close /usr/005.e [手动关闭文件]

3.DirTreeParser类

DirTreeParser类实现生成JSON格式的系统目录,供文件系统FileSystem通过生成对象调用getJsonTree生成系统文件目录,目录结构采用树型目录结构,目录名或文件名:3个字节,拓展名:1个字节。根目录位置固定为OS。

五、用户使用说明

程序开始时会创立一个主界面,包含了系统所有功能的入口,通过对界面组件事件的监听,可以响应用户的请求,显示用户需要的窗口,或者可以通过终端窗口,用户可以根据终端指南窗口的提示,对文件进行操作,用户可以通过磁盘,文件目录界面对操作系统内的文件情况进行观察,同时可以通过对cpu,内存,设备状态界面来观察可执行文件运行时,操作系统的内在状况。也可以通过更换夜间模式,更换壁纸和分辨率选择用户界面的样式。

六、功能

进入页面

主界面

窗口设置

1280*720

1024*768

交换壁纸

打开次级栏后的页面

运行程序

未运行程序时的CPU状态

运行程序时CPU状态

未运行程序时内存的状态

运行程序时内存的状态

磁盘状态

磁盘目录

未运行程序时的设备状态

运行程序时的设备状态

终端处理:

创建文件

删除文件

查看文件

清屏

移动文件

复制文件

重定向文本到文件中

新建目录

删除目录

运行程序

显示当前运行了的时间片

显示系统开发者

生成编译文件

顶部菜单栏中点击文件可以出现磁盘目录

顶部菜单栏中点击前往中的CPU状态可以显示CPU状态

顶部菜单栏中点击前往中的磁盘状态可以显示磁盘状态

顶部菜单栏中点击前往中的内存状态可以显示内存状态

顶部菜单栏中点击前往中的设备可以显示设备状态

顶部菜单栏帮助中的终端指令指南

帮助中的快捷键指南

帮助中的课设成员名单

夜间模式

资源下载地址:https://download.csdn/download/sheziqiong/85788346
资源下载地址:https://download.csdn/download/sheziqiong/85788346

更多推荐

通过JavaFX模拟实现的多道程序单用户操作系统

本文发布于:2023-06-14 09:03:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1459802.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:单用户   多道   操作系统   程序   JavaFX

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!