# 基于多道程序的单用户操作系统设计
# 1 需求分析
- 模拟操作系统实现。一个采用多道程序设计的单用户操作系统。包括进程管理、存储管理、设备管理、文件管理和用户接口
- 本程序采用图形界面,输入主要为鼠标操作以及修改用户名、修改文件以及cmd中的键盘输入。输出则是对相应动作的响应
- 输出的形式是,根据在桌面点击的图标,分别显示各模块内容。例如点击磁盘分配。会根据目前系统磁盘的使用情况显示。包括FAT表以及剩余磁盘块的饼状图显示
- 文件管理
- 文件逻辑结构采用流式结构
- 文件均为文本文件,但分为可执行文件和不可执行文件
- 磁盘管理
- 文件对磁盘块是独占的
- 目录结构采用树型目录结构
- 每个目录项为8字节,要存储目录名或文件名,扩展名,目录、文件属性,起始盘号,文件长度。每个文件夹最多存放8个目录项
- 根目录为磁盘第二块
- 磁盘分配采用连接结构(显示连接),采用FAT记录磁盘空间使用情况和连接结构的指针
- 设备管理
- 管理一张设备分配表
- 有A、B、C三种独占型设备。其中A设备2个,B设备3个,C设备3个
- 不考虑死锁
- 设备使用完后立即释放该设备资源
- 存储管理
- 用链表模拟内存空间分配表
- 系统区存放进程控制块和内存分配表
- 用户区存放可执行文件
- 进程管理
- 首先随机创建10个可执行文件来进行调度
- 采用时间片轮转调度算法,时间片长度为6
- 进程控制块包括进程标识符、主要寄存器、进程状态、阻塞原因。本系统最多容纳10个进程块
- 用户接口
- 用户可以通过鼠标和键盘来访问和操作该操作系统提供的各种功能。模拟Windows的命令行
# 2 概要设计
## 2.1 磁盘管理
- 主要涉及到的类有:Disk、FAT
- 功能:磁盘容量为256个磁盘块,每个磁盘块有64字节。根据FAT来管理磁盘块的分发和回收。
- 磁盘管理根目录root,提供磁盘格式化方法。
- FAT管理磁盘块,提供分配、回收、显示磁盘块使用情况等方法。
## 2.2 文件管理
- 主要涉及到的类有:FileItem、Files、Directory
- 功能:提供文件和文件夹对象。以及对文件和文件夹的一系列操作。
## 2.3 设备管理
- 主要涉及到的类有:Device、DeviceManager
- 功能:管理设备,提供设备分配,回收以及查看设备使用情况的方法
## 2.4 **存储管理**
- 涉及的包:model.momory
- 功能:管理内存,提供内存分配、内存释放以及查看内存的方法
## 2.5 **进程管理**
- 涉及的包:model.cpu,view.cpu
- 功能:管理进程的创建、删除以及调度,提供创建进程的方法。
## 2.6 **图形界面(用户接口)**
- 涉及的包:view.ui,utility
- 功能:响应用户的鼠标以及键盘输入。
# 3 详细设计
## 3.1 **存储管理(后台数据)**
- **Memory类**
- 表示内存
- 因为全局只有一个内存,故采用单例模式
- 属性:LinkedList<MemoryBlock>blocks
- 链式存储,故用链表存下内存块,维护内存结构
- 方法实现
- MemoryBlock allocate(MemoryOccupyoccupy);分配内存,采用首次适配;遍历内存块链表,找到第一个长度大于occupy.length()的内存块,将其拆成两段,第一段长度等于occupy.length(),并设置为已经占用状态,如果有第二段(剩余),则设置第二段长度为剩余的长度;如果找不到可分配的内存块,返回null。
- void release(MemoryBlockreleaseBlock);内存释放;找到releaseBlock在内存块链表里对应的位置,找不到时抛出异常;将releaseBlock设置为未占用状态,判断releaseBlock前后两个内存块(如果有),如果有未占用状态的,将其与releaseBlock合并。
- **MemoryBlock类**
- 表示内存块
- 属性
- int startPosition,内存块起始位置
- int length,内存块长度
- boolean isEmpty,是否被占用
- **MemoryOccupy接口**
- 内存占用接口
- 方法:int length(),返回占用内存的大小
## 3.2 **进程管理(后台数据)**
- **CPU类**
- 负责进程调度
- 属性
- static int MAX_NUMBE_OF_PROCESS,最大进程数,默认值为11(10个普通进程,1个闲逛进程)
- LinkedBlockingQueue<PCB> readyQueue,就绪队列
- PCB runningProcess,运行中的进程的PCB
- Memory memory,内存
- PCBManager pcbManager,PCB管理器
- PCB strollingProcess,闲逛进程的PCB
- static int TIME_SLICE,轮转时间片,默认值为3
- static int INS_UNIT,每条指令执行的时间,单位个(时钟周期),默认值为3
- InsExecutor insExecutor,指令执行器
- DeviceManager deviceManager,设备管理器
- enum Result,枚举类,用于创建进程的反馈,属性如下
- OK,成功
- COMPILE_ERROR,编译失败
- PCB_NOT_ENOUGH,无可用PCB
- MEMORY_NOT_ENOUGH,内存不够
- 方法
- Result create(String instructions),根据指令字符串instructions创建进程,创建失败时返回原因
- void destroy(),撤销当前进程,回收PCB及内存
- void block(),阻塞当前进程,交由DeviceManager处理
- void awake(PCB pcb),唤醒pcb对应的进程,会将pcb加到就绪队列
- Result allocatePCB(ProcessCode code),分配PCB。当有可分配PCB且有足够内存时,分配PCB;否则返回分配失败原因
- void work(),每INS_UNIT个时钟周期调用一次handle()
- void handle()
- 调用CPU.insExecutor.execute()执行当前指令
- 当寄存器状态为PSW_Type.TIME_OUT时,将运行中进程放到就绪队列尾部,并将就绪队列头的进程置为运行态;
- 当寄存器状态为PSW_Type.IO_INTERRUPT时,阻塞当前进程并将就绪队列头的进程置为运行态;
- 当寄存器状态为PSW_Type.END时,撤销运行中进程并将就绪队列头的进程置为运行态
- **CPURegisters类**
- 表示CPU寄存器
- 属性
- num PSW_Type,枚举类,属性如下
- NOTHING,无特别标志的状态
- END,表示当前进程运行结束
- TIME_OUT,表示当前进程运行时间片结束
- IO_INTERRUPT,表示当前进程需进入阻塞状态
- int AX,进程的x变量的值
- PSW_Type PSW,进程当前状态
- **InsExcutor类**
- 管理进程的指令的执行
- 属性
- ProcessCode code,运行中的进程的代码
- CPURegisters registers,CPU的寄存器
- int timeLeft,当前进程剩余时间片
- char deviceID,如果当前进程申请I/O,该变量值为进程申请的设备号
- int deviceTime,如果当前进程申请I/O,该变量值为进程申请占用设备的时间
- 方法实现
- void execute();执行当前指令;先使剩余时间片减少1,减少后,如果剩余时间片等于0,则设置寄存器标志位PSW_Type.TIME_OUT,接着调用code.getIns()获得当前指令,根据指令类型改变registers.AX或registers.PSW的值
- **PCBManager类**
- 负责PCB的分配
- 属性
- ConcurrentHashMap<Integer, PCB> map,保存pid到PCB的映射
- LinkedBlockingQueue<Integer> queue,未被使用的pid的队列
- 方法
- int getNewPID(),从PCBManager.queue获得新的pid,当没有可用pid时(最多有10个进程同时运行),返回-1
- PCB allocatePCB(MemoryBlock block, ProcessCodecode),分配新的PCB,失败时返回null
- PCB getPCB(int pid),根据pid获得对应PCB
- void recoverPCB(PCB pcb),回收PCB
- boolean available(),返回当前是否有可分配的PCB
- int getPID(MemoryBlock block),根据内存块获得对应pid,当找不到对应的pid时,返回-1
- **
没有合适的资源?快使用搜索试试~ 我知道了~
精选_基于多道程序的单用户操作系统设计_源码打包
共66个文件
java:47个
png:10个
project:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 30 浏览量
2022-03-10
19:37:32
上传
评论 1
收藏 8.1MB ZIP 举报
温馨提示
基于多道程序的单用户操作系统设计
资源推荐
资源详情
资源评论
收起资源包目录
3963017086593955.zip (66个子文件)
operating-system
src
windows
.classpath 308B
build.fxbuild 298B
src
application
Main.java 2KB
utility
CmdUtil.java 7KB
Util.java 219B
controller
CPUWindowController.java 6KB
view
disk
DiskFileTreePane.java 378B
cpu
MemoryBlockView.java 911B
ArrowPane.java 1KB
DevicePanes.java 623B
FXML_CPUWindow.fxml 33KB
Pane.css 71B
ProcessPane.java 2KB
Test.java 3KB
CPUWindow.java 901B
QueueController.java 626B
ui
SecondaryMenu.java 4KB
Console.java 4KB
Icon.java 4KB
IconManager.java 2KB
CreateWindows.java 1KB
WindowMenu.java 6KB
Window.java 8KB
RootPane.java 678B
MainPane.java 3KB
Controller.java 6KB
TaskBar.java 6KB
MsgWindow.java 2KB
model
disk
DiskFileTree.java 8KB
DiskFileTreeCell.java 2KB
DiskBlock.java 473B
FileItem.java 3KB
FAT.java 4KB
Disk.java 781B
Directory.java 4KB
DiskFileTreeItem.java 929B
Files.java 2KB
cpu
Compiler.java 3KB
CPU.java 5KB
CPURegisters.java 932B
InsExecutor.java 2KB
PCBManager.java 2KB
SystemClock.java 1KB
DeviceManager.java 3KB
process
ProcessCode.java 857B
CodeBuilder.java 1KB
PCB.java 752B
Device.java 1KB
memory
MemoryOccupy.java 134B
MemoryBlock.java 1KB
Memory.java 2KB
images
folder.png 4KB
exe.png 9KB
txt.png 3KB
computer.png 15KB
help.png 6KB
cmd.png 9KB
background.png 4.98MB
close.png 45KB
begin.png 3KB
cpu.png 46KB
.project 548B
.gitignore 193B
文档.doc 3.32MB
LICENSE 1KB
README.md 24KB
共 66 条
- 1
资源评论
工具盒子
- 粉丝: 59
- 资源: 1313
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- elasticsearch-spring-boot-starter.7z
- Anti-Cheat Toolkit 2023 v2023.2.5
- 使用堆栈数据结构解迷宫问题
- SoftFloat-3e.zip
- Easy Save - 3.5.6
- 基于tensorflow的目标检测系统源码+部署教程文档+全部数据+训练好的模型(高分项目)
- 基于Python皮肤电信号的情绪识别算法源码+模型+PPT+详细文档+全部数据资料.zip
- 基于Python皮肤电信号的情绪识别算法源码+模型+PPT+详细文档+全部数据资料.zip
- 区块链毕业设计 基于区块链的慈善募捐平台的智能合约源码+详细文档+全部资料(高分项目).zip
- 区块链毕业设计 基于区块链的慈善募捐平台的智能合约源码+详细文档+全部资料(高分项目).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功