纯javascript模拟操作系统---jsOS

前言

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

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

设计思想介绍

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

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

版本及迭代

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

主界面

2

基本使用方式

基本命令

命令参数功能
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.jsCPU模拟主文件
Scheduler.js进程调度模拟文件
ConsoleWindow.js控制台窗口显示文件
clock.js时钟模块,负责运行时赋予
Utils.js系统工具函数库
Mm.js内存模块
Config.js系统配置及说明
②模块结构依赖

3

③重要数据结构

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

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

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

4

<二>进程调度

①算法原理

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带权周转时间(周转时间/所需运行时间)
③程序流程

5

五、运行示例及结果分析

FCFS算法运行示例
6

结果符合

六、心得体会

七、附录、程序代码

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

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值