文章目录

  • 前言
  • 设计思想介绍
  • 版本及迭代
  • 主界面
  • 基本使用方式
    • 基本命令
  • 实习报告书--jsOS模拟操作系统的实现
    • 一、设计目的
    • 二、设计内容
    • 三、开发环境
    • 四、分析设计
      • <一>系统整体架构分析
        • ①架构思想
        • ②模块结构依赖
        • ③重要数据结构
        • ④程序流程
      • <二>进程调度
        • ①算法原理
        • ②数据结构
        • ③程序流程
    • 五、运行示例及结果分析
    • 六、心得体会
    • 七、附录、程序代码

前言

hello各位同学欢迎使用学习本人开发的纯javascript模拟操作系统,本模拟系统灵感结构来源于linux系统结构,同时结合学校操作系统所学内容构思和开发,新手上路,架构设计如有不合理,系统任何bug,欢迎各位大佬指教。
all right编程一途永远在学习的路上,目前代码量还不是很多,架构我也一直在思考,我也不是什么大佬,只是一个不断学习的小白,我写这个模拟系统初衷也是为了学习,前端,JavaScript,我是一个喜欢探索未知的人,我也是一个喜欢创造的人(模仿只是为了学习),学习交友微信Rightstar_,

友情链接
个人网站:星空校园
微信公众号:星球信息
项目链接
jsOS模拟系统预览:jsOS模拟系统
GitHub地址:jsOS源码

设计思想介绍

设计思想也不多说了,还是来源于操作系统那一套书,还有linux系统结构
贴张图吧

这是linux2.40版源码目录,看文件夹名称也知道有关功能和结构了

版本及迭代

V1.0:操作系统进程调度模拟功能,部分功能未完成
V1.1:已去掉模拟部分,主更新应用

主界面

基本使用方式

基本命令

命令 参数 功能
cls 清空控制台
showClock 显示所有时钟
clearClock 清空所有时钟
clearClock 空格+时钟ID 删除指定ID时钟
runDC 启动设备管理器
stopDC 关闭设备管理器

实习报告书–jsOS模拟操作系统的实现

一、设计目的

通过javascript脚本语言设计实现模拟系统,参考window及linux系统内核文件结构,学习系统模块的设计思想,实现进程调度模拟,理解熟悉基本进程调度算法的思想

二、设计内容

设计模拟系统,核心部分由javascript语言实现,可依靠浏览器平台实现运行,模拟系统参考window及linux系统结构,实现基本的内存,CPU,设备,进程管理调度等模块, 系统首要实现FIFO,RR,优先数调度等基本进程调度算法模拟, 而后可实现操作系统的更多模拟功能。

三、开发环境

Window环境,vscode

四、分析设计

<一>系统整体架构分析

①架构思想

本模拟系统采用javascript语言开发,借鉴linux内核文件结构思想,window窗口图形思想,为更接近实现操作系统的模拟状态,模仿系统真实的进程管理,存储管理,设备管理,文件管理等功能的运行实现过程,设计有以下重要js文件模块

系统上层部分

文件名称 功能说明
Main.js 系统入口文件
Os.js 系统初始化文件
consoleCmd.js 控制台命令函数库
Command.js 系统操作命令函数库
Process.js 进程创建函数库
Application.js 应用定义创建
Device.js 设备管理器主文件

设备

文件名称 功能说明
WindowDrawer.js 窗口创建设备
Drawer.js 画图设备

系统底层部分

文件名称 功能说明
CPU.js CPU模拟主文件
Scheduler.js 进程调度模拟文件
ConsoleWindow.js 控制台窗口显示文件
clock.js 时钟模块,负责运行时赋予
Utils.js 系统工具函数库
Mm.js 内存模块
Config.js 系统配置及说明

②模块结构依赖

③重要数据结构

本模拟系统设计大部分操作数据位于mm.js模块中,设置为全局变量访问。

以下为重要变量及数组的清单及功能说明:

变量名 说明
mainWindow 图形窗口主界面dom对象
windowCreateNum 已创建过的窗口数
cmdHistoryIndex 历史命令位置索引
OSTime 系统时间单位ms
deviceCCID 设备管理器时钟ID
deviceRoundTime 设备管理器时钟周期单位ms
drawerCreateNum 创建过的画图设备数
processHistoryNum 历史创建过的进程数
FreTime CPU时间片长度单位ms
CPUSliceIndex CPU时间片序列号
数组名 说明
windowList 创建的窗口队列数组
cmdHistory 控制台历史命令数组
clockList 时钟心跳ID存放的数组
drawerList 画图设备存放的队列
deviceIODataList 设备请求输入输出队列
PCBCreateList 已创建过的进程
PCBList 进程队列
PCBReadlyList 进程就绪队列
PCBBlockList 进程阻塞队列
ImitateProcessList 未加入PCBList的模拟进程队列,
CPU CPU运行中的进程队列

④程序流程

<二>进程调度

①算法原理

1.先来先服务调度算法(FCFS)
先来先服务(First Come First Service)算法是一种最简单的调
度算法,可以应用于高级调度(作业调度)也可以应用于低级调度(进
程调度)。高级调度时,FCFS调度算法按照作业进入后备作业队列的先
后顺序选择作业进入内存,即先进入后备作业队列的作业被优先选择进
入内存,然后为选中的作业创建进程并分配该作业所需资源。低级调度
时,FCFS调度算法每次从内存的进程/线程就绪队列中选择一个最先进入
的进程/线程,然后由进程/线程调度程序将CPU分配给它并使其运行。
FCFS调度算法是一种非抢占式调度算法,当某进程/线程占用了CPU
后就一直运行,直到该进程/线程运行结束才放弃CPU,或在运行中因发
生某等待事件被阻塞而放弃CPU。
FCFS实现流程
–扫描就绪队列
–CPU空闲则下一步,否则该进程等待时间加一
–分配进程运行完成所需的时间,进入CPU
–继续扫描

2.时间片轮转调度算法(RR)
时间片轮转(Round Robin)调度算法主要用于低级调度。在采用时
间片轮转调度算法的系统中,进程?线程就绪队列总是按进程/线程到达
系统时间的先后次序进行排队,进程/调度程序按先来先服务的原
则,选择就绪队列中的第一个进程?线程,将 CPU分配给它执行。进程/
线程每次使用 CPU的时间只能是一个时间片,当运行进程?线程用完规定
的时间片时必放弃CPU的使用权。这时,进程/线程调度程序又将CPU分
配给当前就绪队列的第一个进程/线程,而放弃 CPU的进程?线程,则回
到就绪队列的队尾,等待下次轮转到自己时再投入运行。所以只要是处
于就绪队列中的进程/线程,按时间片轮转法调度将迟早会获得CPU而得
到运行,并不会发生无限期等待的情况。
RR实现流程
–扫描就绪队列
–CPU空闲则下一步,否则该进程等待时间加一
–分配固定的时间片,进入CPU
–进程被分配的时间片用完则返回就绪队列
–继续扫描

3.优先级调度算法
优先级调度算法既可用于高级调度,也可用于低级调度,还可用于
实时系统。若调度的对象为作业,优先级调度算法每次从后备作业队列
中选择优先级最高的作业调入内存,为其分配相应的资源并创建进程放
入到进程就绪队列。若调度的对象为进程,则优先级调度算法每次从进
程就绪队列中,选择优先级最高的进程为其分配 CPU而投入运行。如果
有多个优先级最高的作业/程,则可结合先来先服务或短作业/进程
优先调度策略。
(1)静态优先级
作业/程在进入系统或创建时被赋予一个优先级,该优先级一旦确
定则在其整个生命期内不再改变。对于作业,其优先级可依据费用来确
定;对于进程,其优先级主要依据进程的类型(系统进程还是用户进
程)、进程的资源需求(资源需求少的进程优先级高)、时间需求(短
进程优先)和用户要求来确定
静态优先级实现流程
–扫描就绪队列
–选择优先级最高的进程
–CPU空闲则下一步,否则该进程等待时间加一
–分配进程运行完成所需的时间,进入CPU
–进程被分配的时间片用完则返回就绪队列
–继续扫描

②数据结构

调度算法需要PCB内数据的支持,故设计PCB结构如下

变量名 说明
PCBID 进程ID
state 进程状态标识
processName 进程名称
firstReach 初次获得CPU
clockID 时钟ID
app 进程绑定的应用实例
isImitate 进程模拟的标识
imitateData 进程模拟所需数据

以下为imitateData内的变量

变量名 说明
timeSliceNum 进程分配到的时间片
imitateType 模拟类型标识
priorityLevel 进程优先级数
runTime 进程完成所需的运行时间片
usedSliceNum 进程已使用的时间片数
reachTime 进程到达就绪队列的时间
startTime 进程开始时间(初次获得CPU的时间)
finishTime 完成时间
waitTime 等待时间
roundTime 周转时间(完成时间-到达时间)
wRoundTime 带权周转时间(周转时间/所需运行时间)

③程序流程

五、运行示例及结果分析

FCFS算法运行示例

结果符合

六、心得体会

七、附录、程序代码

我的GitHub
https://github.com/rightstar2020/jsOS
码云
https://gitee.com/rightstar/jsOS
在线预览
https://rightstar.top/jsOS/

纯javascript模拟操作系统---jsOS相关推荐

  1. 原生态纯JavaScript 100大技巧大收集---你值得拥有

    原生态纯JavaScript 100大技巧大收集---你值得拥有 1.原生JavaScript实现字符串长度截取 function cutstr(str, len) {var temp;var ico ...

  2. 用纯css模拟下雪的效果

    下雪效果只是一类效果的名称,可以是红包雨等一些自由落体的运动效果,本文就是用纯css模拟下雪的效果,更多效果大家可以自行发挥. 1.前言 由于公司产品的活动,需要模拟类似下雪的效果.浏览器实现动画无非 ...

  3. 动态分页展示效果(纯JavaScript编写,值得学习)

    动态分页展示效果(纯JavaScript编写,值得学习) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

  4. 纯css模拟下雪效果

    效果如其名,想必都见过下雪(可能南方人除外哈哈),但下雪效果只是一类效果的名称,可以是红包雨等一些自由落体的运动效果,本文就是用纯css模拟下雪的效果. 1.前言 由于公司产品的活动,需要模拟类似下雪 ...

  5. 纯JavaScript实现弹出选择第几个单选按钮

    为什么80%的码农都做不了架构师?>>>    纯JavaScript实现弹出选择第几个单选按钮 <div id="a" name="aa&quo ...

  6. 【前端酷站】分享一个纯 Javascript 的图表库与立体像素风制作~

    今天小编为大家推荐一个神奇的酷站.ECharts,一个纯 Javascript 的图表库. 以下是各个几个不错的界面的介绍: 首页: http://echarts.baidu.com/ 在首页有完整的 ...

  7. 青瓷引擎之纯JavaScript打造HTML5游戏第二弹——《跳跃的方块》Part 3

    继上一次介绍了<神奇的六边形>的完整游戏开发流程后(可点击这里查看),这次将为大家介绍另外一款魔性游戏<跳跃的方块>的完整开发流程. (点击图片可进入游戏体验) 因内容太多,为 ...

  8. 在SAP UI中使用纯JavaScript显示产品主数据的3D模型视图

    在Jerry写这篇文章时,通过Google才知道,SAP其实是有自己的3D模型视图显示解决方案的. 故事要从Right Hemisphere说起,这是一家专业的企业级2D/3D模型浏览及转换的软件供应 ...

  9. java语言模拟_Java语言模拟操作系统.doc

    河北大学2010级操作系统课程设计论文 PAGE PAGE 27 装订线 装 订 线 (指导教师用表) 学 生 姓 名 指 导 教 师 论文(设计)题目 Java语言模拟操作系统 主要研究 (设计)内 ...

  10. mvc 两个控制器session 丢失_用纯 JavaScript 撸一个 MVC 程序

    前言 我想用 model-view-controller 架构模式在纯 JavaScript 中写一个简单的程序,于是我这样做了.希望它可以帮你理解 MVC,因为当你刚开始接触它时,它是一个难以理解的 ...

最新文章

  1. QT 的信号与槽机制介绍
  2. 记一次Python与C#的AES加密对接
  3. Hibernate(一)__简介
  4. python2和python3如何共存_Windows下python2和python3的共存设置
  5. Python中url的编码以及解码
  6. numpy基础(part11)--特征值与奇异值分解
  7. Redis:09---Hash对象
  8. 尚学堂java 参考答案 第九章
  9. matlab的syntax简记
  10. python三种数据类型_Python零基础入门学习02:Python基本数据类型:数字类型
  11. Flask中的HttpResponse Redirect 和Render
  12. javalibrary 线上_《NBA2K21》MT模式线上3V3任务一览 :: 游民星空 GamerSky.com
  13. 授人以鱼不如授人以渔
  14. SDUT OJ 顺序表应用3:元素位置互换之移位算法
  15. Exchange 2013 OU大于500新建用户无法查询OU
  16. 花了三个月终于把所有的 Python 库全部整理了!可以说很全面了
  17. Android Emulator has terminated
  18. css动画效果制作正方体旋转相册
  19. 学计算机励志名言,程序员励志格言
  20. 安全测试——验证日志文件

热门文章

  1. 修身齐家治国平天下的领导者自我管理哲学
  2. python量化交易实战 pdf 王晓华_Ext JS实战(第2版)pdf
  3. 手机型号云服务器,手机型号云服务器
  4. 前端小白入门之css
  5. 获取并解析心知天气数据
  6. html中图片放大镜效果图,HTML5使用不同精度的图片来实现图像放大镜效果
  7. Ansible(一) 配置安装
  8. 第十四章 相机和音频录制——Qt
  9. 致远oa系统unix 服务器,致远oa手机客户端服务器
  10. 阿里云DevOps助理工程师认证(ACA)笔记