# 模拟操作系统
## 需求分析
明确陈述说明程序设计的任务,强调的是程序要做什么,主要包括:
任务要求:模拟一个采用多道程序设计方法的单用户操作系统,该操作系统包括进程管理、存储管理、设备管理、文件管理和用户接口四部分。
输入的形式和输入值的范围;
① 从用户界面输入字符串形式的 8 个命令,如下:
创建文件: create
删除文件: delete
显示文件: type
拷贝文件: copy
建立目录: mkdir
删除空目录: rmdir
进入退出某个目录::cd
新建可执行文件:newexe
create 新建文件时,type 打开文件,从用户界面输入文本内容,并点击保存
。目前仅支持第一次保存,暂不支持修改。
输出的形式;
① 进程管理部分
系统时间,相对时钟(时间片)、正运行进程 ID、正在执行指令、进程中间执行结果、进程最终结果以及就绪队列、阻塞队列(均以字符串形式输出并显示于用户界面)
② 存储管理部分
内存分区情况(列表形式输出显示)
③ 设备管理部分
种设备的使用情况和相应等待使用的进程 ID(列表形式输出显示)
④ 文件管理部分
文件树状目录、文本文件的内容和磁盘使用情况(文件内容字符串形式输出显示,单个磁盘用红蓝小方块表示)
⑤ 用户接口部分
显示软件系统的界面
程序所能达到的功能;
总体功能:实现一个采用多道程序设计方法的单用户操作系统,包括进程管理、存储管理、设备管理、文件管理和用户接口四部分。
① 进程管理部分功能
实现简单的 CPU,包括指令的读取、解析、执行等
实现系统时钟,控制 CPU 和系统的节拍
实现主要的寄存器
进程管理主要包括进程调度、进程的创建和撤销、进程的阻塞和唤醒, 中断作用的实现
② 存储管理部分功能
划分系统区和用户区
实现内存空间的分配和回收、存储保护(采用动态分区存储管理和首次适配)
③ 设备管理部分功能
实现设备的分配和回收,可实现进程的阻塞和唤醒,并管理等待设备的进程
设备使用倒计时来表示占用某个设备
④ 文件管理部分功能
实现了进入退出目录、新建文件、删除文件、复制文件、删除空目录、新建 exe 文件、读取文件。
显示文件目录树
显示磁盘使用情况,红色表示未被占用,蓝色表示已经被占用。
⑤ 用户接口部分
将进程执行中的各种状态、数据以及内存、磁盘使用情况显示出来
可输入各种文件命令,响应并显示各种文件命令操作
测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。
① 若可执行文件是:
```c++
X=12
X++
!A7
X--
!B5
end
```
模拟 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 ,在文本框中写入指令,并点击保存
正确输出 目录树更新,磁盘块更新。
## 概要设计
说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次 (调用)关系。
## 详细设计
实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模 块也都需要写出伪码算法(伪码算法达到的详细程度应能够按照伪码算法在计算机键盘上直接输 入高级程序设计语言程序);画出函数的调用关系图。
存储管理主程序伪代码:
````c++
public class MemoryManage {
//内存分区表
//申请pcb总数count
//pcb表
//进程表
private static total_Size total = new total_Size();
private static int pcbCount = 10;
private static List<PCBManager> pcbs = new ArrayList<PCBManager>();
private static List<process> jobs = new ArrayList<process>();
}
public static boolean 申请空白 PCB(PCBManager pcb){
if(申请count>10) {
申请失败;
}
else {
申请成功;
}
}
public static int 请求分配内存(int 进程标识符,int 大小,String 文件路径) throws IOException{
//创建进程对象
//获取内存分区表
//按内存地址排序
for(< 内存分区表总长度){
if(未分配){
if(分区大小>进程所需内存大小) {
//内存申请成功
total.alloc(i, job);
//调用分配算法分配内存
}
}
}
if(>分区表总长度) {
//内存申请失败
}
//返回内存起始地址 }
public static void 释放内存(int 起始地址){
//获取分区表
List<Size> lsize = total.getList();
int i ;
int index = -1;//标记符
for(i< 内存分区表总长度){
if(找到匹配的内存的起始地址){
for(int j=0; j<进程表长度; j++) {
if(找到匹配的进程标识符){
```c++
//回收分区
total.search(jobs.get(j));
jobs.remove(j);
//释放内存
Return;
}
}
}
}
//否则释放内存失败
}
public static boolean 释放 pcb(int index){
int j;
for(j<pcb 总数量){
if(找到匹配的进程标识符){
//删除pcb
pcbs.remove(j);
System.out.println("进程控制块为"+j+"已删除");
break;
}
}
if(j>pcb总数量) {
System.out.println("没有该进程控制块");
return false;
}
else
return true;
}
public static void sort(List<lsize> lsize) {
//按内存地址排序算法
}
public static void memoryList() {
//打印分区信息
}
```
//回收分区
total.search(jobs.get(j));
jobs.remove(j);
//释放内存
Return;
}
}
}
}
//否则释放内存失败
}
public static boolean 释放 pcb(int index){
int j;
for(j<pcb 总数量){
if(找到匹配的进程标识符){
//删除pcb
pcbs.remove(j);
System.out.println("进程控制块为"+j+"已删除");
break;
}
}
if(j>pcb总数量) {
System.out.println("没有该进程控制块");
return false;
}
else
return true;
}
public static void sort(List<lsize> lsize) {
//按内存地址排序算法
}
public static void memoryList() {
//打印分区信息
}
````
其他模块伪代码:
单独分区模块伪代码:
``
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
可直接运行,模拟一个采用多道程序设计方法的单用户操作系统,该操作系统包括进程管理、存储管理、设备管理、文件管理和用户接口四部分。 ① 进程管理部分功能 实现简单的 CPU,包括指令的读取、解析、执行等 实现系统时钟,控制 CPU 和系统的节拍 实现主要的寄存器 进程管理主要包括进程调度、进程的创建和撤销、进程的阻塞和唤醒, 中断作用的实现 ② 存储管理部分功能 划分系统区和用户区 实现内存空间的分配和回收、存储保护(采用动态分区存储管理和首次适配) ③ 设备管理部分功能 实现设备的分配和回收,可实现进程的阻塞和唤醒,并管理等待设备的进程 设备使用倒计时来表示占用某个设备 ④ 文件管理部分功能 实现了进入退出目录、新建文件、删除文件、复制文件、删除空目录、新建 exe 文件、读取文件。 显示文件目录树 显示磁盘使用情况,红色表示未被占用,蓝色表示已经被占用。 ⑤ 用户接口部分 将进程执行中的各种状态、数据以及内存、磁盘使用情况显示出来 可输入各种文件命令,响应并显示各种文件命令操作 测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。
资源推荐
资源详情
资源评论
收起资源包目录
100011078-基于 Java 模拟操作系统.zip (53个子文件)
新建文件夹
gyk2015
.classpath 296B
.settings
org.eclipse.jdt.core.prefs 587B
org.eclipse.core.resources.prefs 65B
src
filrmanage
Tree.java 1KB
DiskBlock.java 284B
Disk.java 41KB
FileOperation.java 2KB
TreeViewSample.java 2KB
memoryManage
Size.java 2KB
process.java 1015B
total_Size.java 3KB
MemoryManage.java 3KB
view
View.java 11KB
deviceManagement
Process.java 1KB
DeviceManagement.java 5KB
DeviceStatus.java 104B
Device.java 371B
processManagement
TimeCounter.java 1KB
ProcessControl.java 3KB
PCBManager.java 3KB
Processor.java 4KB
Bootstrap.java 1KB
LICENSE 1KB
课设
使用说明.txt 901B
Disk.txt 5KB
OS.jar 53KB
bin
filrmanage
Disk.class 24KB
Tree.class 2KB
TreeViewSample.class 3KB
FileOperation.class 2KB
DiskBlock.class 610B
memoryManage
total_Size.class 3KB
MemoryManage.class 4KB
Size.class 3KB
MemoryManage$1.class 863B
process.class 1KB
view
View.class 8KB
View$1.class 1KB
View$2.class 1KB
deviceManagement
Device.class 873B
DeviceManagement.class 5KB
DeviceStatus.class 380B
Process.class 2KB
Process$1.class 1KB
processManagement
Bootstrap.class 3KB
Processor.class 4KB
ProcessControl.class 4KB
PCBManager.class 3KB
TimeCounter.class 2KB
实验报告.docx 699KB
Disk.txt 5KB
.project 362B
README.md 22KB
共 53 条
- 1
资源评论
twinkle222
- 粉丝: 947
- 资源: 115
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功