# 一、需求分析
1.模拟操作系统实现。一个采用多道程序设计的单用户操作系统。包括进程管理、存储管理、设备管理、文件管理和用户接口。
2.本程序采用图形界面,输入主要为鼠标操作以及修改用户名、修改文件以及 cmd 中的键盘输入。输出则是对相应动作的响应。
3.输出的形式是,根据在桌面点击的图标,分别显示各模块内容。例如点击磁盘分配。会根据目前系统磁盘的使用情况显示。包括 FAT 表以及剩余磁盘块的饼状图显示。
4.文件管理
- 文件逻辑结构采用流式结构。
- 文件均为文本文件,但分为可执行文件和不可执行文件。
5磁盘管理
- 文件对磁盘块是独占的。
- 目录结构采用树型目录结构。
- 每个目录项为 8 字节,要存储目录名或文件名,扩展名,目录、文件属性,起始盘号,文件长度。每个文件夹最多存放 8 个目录项。
- 根目录为磁盘第二块。
- 磁盘分配采用连接结构(显示连接),采用 FAT 记录磁盘空间使用情况和连接结构的指针。
6.设备管理
- 管理一张设备分配表
- 有 A、B、C 三种独占型设备。其中 A 设备 2 个,B 设备 3 个,C 设备 3 个
- 不考虑死锁。
- 设备使用完后立即释放该设备资源。
7.存储管理
- 用链表模拟内存空间分配表。
- 系统区存放进程控制块和内存分配表。
- 用户区存放可执行文件。
8.进程管理
- 首先随机创建 10 个可执行文件来进行调度。
- 采用时间片轮转调度算法,时间片长度为 6 。
- 进程控制块包括进程标识符、主要寄存器、进程状态、阻塞原因。本系统最多容纳 10 个进程块。
# 二、概要设计
设备管理
- 主要涉及到的类有:Device、DeviceController
- 功能:管理设备,提供设备分配,释放以及查看设备使用情况的方法
存储管理
- 主要涉及到的类有:Address、Memory、MemoryBlock、MemoryController
- 功能:管理内存,提供内存分配(首次分配内存法)、内存释放、查看内存等功能
进程管理
- 主要涉及到的类有:PCB、Process、ProcessController
- 功能:管理进程的创建、删除以及调度,提供创建进程的方法。
# 三、详细设计
## 存储管理
### 1.Memory 类
(1)表示内存
(2)属性:
```c++
LinkedList<MemoryBlock> blocks;
```
链式存储,故用链表存下内存块,维护内存结构
```c++
List<PCB> pcbList = new ArrayList<>();
```
当前进程列表
(3)方法
```c++
public PCB getPCB(String pid)
```
- 参数 pid,进程序号
- 通过序号获取到对应的进程实例
### 2.Address 类
(1)用来表示一个内存占用的地址空间范围
(2)属性
- startAddress:开始地址
- endAddress:结束地址
### 3.MemoryBlock 类
(1)表示内存块
(2)属性
```c++
Address
```
表示该内存块的在内存中的范围
```c++
PID
```
占用内存的进程序号
```c++
Length
```
内存块长度
```c++
isEmpty
```
占用状态
```c++
Color
```
设置内存块颜色
(3)方法
```c++
public static Color randomColor()
```
随机生成内存块颜色
```c++
public MemoryBlock(int startPosition, int length, boolean isEmpty, String PID)
```
用于初始化内存块
参数包括:
- 内存占用范围
- 内存占用长度
- 是否被进程占用
- 占用该内存块的进程序号
- 当前内存的颜色
```c++
public boolean equals(MemoryBlock block)
```
- 作用:判断传入的内存块和本内存块是否是同一个(检测内存起始位置和内存长度)
- 参数:内存块实例
### 4.MemoryController 类
(1)内存控制类
(2)属性
```c++
List<MemoryBlock> myMemoryBlockList = new ArrayList<>();
```
当前内存块列表
(3)方法
```c++
public static void mergeMemory()
```
- 作用:压缩内存
- 原理:遍历当前内存块列表,通过各个内存块内部维护的 Address 实例对象来表示各个内存块在内存中的起始范围,并以此来进行排序,使得原本各个内存块之间存在的空白就此消掉,提高内存的利用率
```c++
public boolean hasBlankPCB()
```
- 判断当前是否还有空闲的进程
- 通过判断 PCBList 的长度是否大于 10
```c++
public MemoryBlock findBlankAddress(int size)
```
查找是否有大小大于等于 size 的空内存
原理:通过首次适配法来对内存进行分配,有三种情况
- 如果顺利找到两个内存块之间有一个大小 大于等于 size 的空白内存,直接 new 一个内存块对象,并加入到内存块列表中
- 当前内存块列表是空的
- 内存块间找不到,所以只有在内存块最后添加上该新建的大小为 size 的内存块了
```c++
public void release(MemoryBlock myMemoryBlock)
```
- 释放内存块
- 原理:传入内存块实例,并从内存块列表中移除
```c++
public MemoryBlock getMemoryBlock(Address address)
```
- 返回内存占用范围匹配的内存块
- 参数:传入 address(包含起始和结束位置)
- 原理:在内存块列表中,找到对应内存块的起始位置和传入的 address 吻合的才进行返回
```c++
public void sortList()
```
- 对内存块列表进行排序
- 根据内存块的起始位置来进行排序
## 进程管理
### 1.PCB 类
(1)进程控制块
(2)属性
```c++
Id
```
进程控制块的唯一标识
```c++
Status
```
当前状态
- 值为 0 : 就绪态
- 值为 1 : 运行态或者被中断
- 值为 -1 : 阻塞态
```c++
Priority
```
进程优先级
- 默认最高是 10
- 默认最低是 0
```c++
isInterrupt
```
进程是否中断了
### 2.Process 类
(1)进程
(2)属性
```c++
Pcb
```
当前进程所在的进程控制块
```c++
Address
```
进程内存地址
```c++
Device
```
进程所需要的设备
```c++
isUser
```
判断该进程是不是用户进程
```c++
Id
```
进程 id
```c++
Priority
```
进程优先级
```c++
restRunTime
```
进程剩余运行时间
```c++
totalRunTime
```
进程总运行时间
```c++
lastRestRunTime
```
进程运行最后剩余时间
```c++
Status
```
当前状态
- 值为 0 : 就绪态
- 值为 1 : 运行态或者被中断
- 值为 -1 : 阻塞态
### 3.ProcessController 类
(1)进程控制类
(2)属性
```c++
runningProcess
```
- 当前正在运行的进程
- 类型为:Process 类
```c++
hangOutProcess
```
当前空闲的进程
```c++
currentPID
```
当前正在进行的进程,进程 PID
```c++
List<Process> runningQueue = new ArrayList<>();
```
被中断的进程队列
```c++
List<Process> readyQueue = new ArrayList<>();
```
就绪进程队列
```c++
List<Process> blockedQueue = new ArrayList<>();
```
阻塞进程队列
```c++
timeChip
```
- 表示时间片
- 默认是 2s
(3)方法
```c++
public List<Process> getRunningQueue()
```
返回当前正在执行的进程队列
```c++
public List<Process> getReadyQueue()
```
返回当前就绪的进程队列
```c++
public List<Process> getBlockedQueue()
```
返回当前阻塞的进程队列
```c++
public static Process createHangOutProcess()
new Process(new PCB("#hang out", MIN_PRIORITY, (double) 0));
```
New 一个序号为 hang out,并且优先级是最低的作为挂起进程
```c++
public static String getCurrentPid()
```
获取当前正在执行的进程 进程 PID
```c++
public Process getRunningProcess()
```
获取当前正在执行的进程
```c++
public Process getHangOutProcess()
```
获取当前被挂起的进程
Run 方法
- 原理:执行时间片轮转函数,对当前正在执行的进程进行操作和监听,并查看有无抢占进程,当时间片轮转结束之后,当前正在执行的进程被挂起,并从就绪队列中获取到新的执行进程
create 方法
- 原理:查看是否有空闲的内存块,并获取到空闲的设备,以此来创建一个新的进程
```c++
public static String getRandom
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.模拟操作系统实现。一个采用多道程序设计的单用户操作系统。包括进程管理、存储管理、设备管理、文件管理和用户接口。 2.本程序采用图形界面,输入主要为鼠标操作以及修改用户名、修改文件以及 cmd 中的键盘输入。输出则是对相应动作的响应。 3.输出的形式是,根据在桌面点击的图标,分别显示各模块内容。例如点击磁盘分配。会根据目前系统磁盘的使用情况显示。包括 FAT 表以及剩余磁盘块的饼状图显示。 4.文件管理 文件逻辑结构采用流式结构。 文件均为文本文件,但分为可执行文件和不可执行文件。 5磁盘管理 文件对磁盘块是独占的。 目录结构采用树型目录结构。 每个目录项为 8 字节,要存储目录名或文件名,扩展名,目录、文件属性,起始盘号,文件长度。每个文件夹最多存放 8 个目录项。 根目录为磁盘第二块。 磁盘分配采用连接结构(显示连接),采用 FAT 记录磁盘空间使用情况和连接结构的指针。 6.设备管理 管理一张设备分配表 有 A、B、C 三种独占型设备。其中 A 设备 2 个,B 设备 3 个,C 设备 3 个 不考虑死锁。 设备使用完后立即释放该设备资源。 7.存储管理 用链表模拟内存空间分配表。 系统区存放进程控制块和内存分配表。 用户区存放可执行文件。 8.进程管理 首先随机创建 10 个可执行文件来进行调度。 采用时间片轮转调度算法,时间片长度为 6 。 进程控制块包括进程标识符、主要寄存器、进程状态、阻塞原因。本系统最多容纳 10 个进程块。
资源推荐
资源详情
资源评论
收起资源包目录
100012402-基于Java实现模拟操作系统(进程、存储、设备、文件和用户).zip (81个子文件)
system
System
pom.xml 4KB
src
test
java
com
test
AppMain.java 402B
main
resources
js
Choice.js 2KB
index.js 16KB
jquery.min.js 85KB
fxml
sample.fxml 32KB
attribute.fxml 4KB
view.fxml 6KB
img
folder.png 1KB
shinei_diaodeng01.png 10KB
device1.png 63KB
bunny_kpofl4.png 51KB
filePic.png 2KB
shinei_kongtiao01.png 6KB
niuniu.jpg 47KB
folderPic.png 2KB
device.png 180KB
explain1.png 433KB
1.jpg 571KB
bear_wgyw8f.png 41KB
shinei_matong01.png 7KB
search.png 7KB
warn.png 4KB
del.png 6KB
back.png 5KB
shinei_dixiashi01.png 5KB
img.jpg 12KB
华为.png 4KB
bear_hpoqcg.png 41KB
shinei_chuangtougui01.png 4KB
shinei_chuanglian01.png 6KB
explain2.png 227KB
diskPic.png 9KB
cancel.png 3KB
css
style.css 2KB
attributeStyle.css 2KB
Fontstyle.css 6KB
ChoiceStyle.css 6KB
normalize.css 2KB
chart.css 322B
else.css 251B
sample.css 696B
html
index.html 1KB
cutebear.html 2KB
test.html 2KB
java
com
niuniukeaiyouhaochi
os
device
DeviceController.java 1003B
Device.java 551B
CPU
CPU.java 1KB
Listener
DragListener.java 1KB
DragUtil.java 390B
ProcessManager
ProcessController.java 13KB
Process.java 2KB
PCB.java 2KB
service
FATService.java 21KB
model
File.java 4KB
OpenFile.java 604B
Folder.java 5KB
FAT.java 1KB
Disk.java 472B
OpenFiles.java 1KB
Color.java 501B
memory
MemoryBlock.java 2KB
Memory.java 886B
Address.java 589B
MemoryController.java 5KB
util
FileSystemUtil.java 2KB
GUI.java 2KB
UI
JavaApp.java 1KB
LoginMain.java 2KB
ProcessXMLController.java 18KB
ProcessMain.java 1KB
AttributeXMLControl.java 6KB
TimerChart.java 1021B
AppMain.java 322B
FileXMLController.java 63KB
FileMain.java 1005B
LICENSE 9KB
1.png 2.23MB
2.png 283KB
LICENSE 1KB
README.md 15KB
共 81 条
- 1
神仙别闹
- 粉丝: 2669
- 资源: 7640
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- fdgsfdgfdsgsf
- 基于CodeMirror5实现的mybatis+sql提示扩展功能,主要是用于在线设计开发场景中的动态sql部分.zip
- 计算机毕业设计-aSP.NET某中学学生成绩管理系统的设计(源代码+)-毕设源码实例.zip
- springboot集成mybatis动态sql.zip
- mybatis中的动态sql, 涉及 where trim set if foreach等
- 简单- 快递运输(Java & JS & Python & C).html
- mybatis框架 更改ems系统,使用动态sql等.zip
- 易语言工具条下拉菜单实现
- Mybatis动态SQL高级映射.zip
- 源码esp8266开发板机智云机智云智能灯
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页