本文主要是介绍操作系统模拟实验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
开门见山,此篇文章向大家分享一个我个人开发的代码,主要实现在线模拟操作系统的几个小实验,可以说是一个在线的模拟平台(项目文件传至资源,可自行下载,私戳我也可以获取)
项目文件https://download.csdn.net/download/siper12138/19785232?spm=1001.2014.3001.5503
平台具有一定的局限性,只能模拟以下四个实验
2处理器调度(20分)
1.1 实验目的
熟悉使用各种单处理器调度的各种算法,加深对于处理机调度机制的理解。练习模拟算法的编程技巧,锻炼分析试验数据的能力。
1.2 实验说明
随机给出一个进程调度实例,如:
进程 到达时间 服务时间
A 0 3
B 2 6
C 4 4
D 6 5
E 8 2
模拟进程调度,给出按照算法先来先服务FCFS、轮转RR(q=1)、最短进程优先SJF(非抢占方式)、最高响应比优先HRN(非抢占方式)进行调度各进程的完成时间、周转时间、带权周转时间。
3 存储管理上机作业(20分)
3.1 实验目的
对内存管理的相关内容做进一步的理解。了解内存管理的主要任务。 了解内存管理任务的主要实现方法。通过编程加深理解内存的分配、回收等主要算法的原理。
3.2 实验说明
1、在该实验中,采用可变分区方式完成对存储空间的管理(即存储空间的分配与回收工作)。
2、设计用来记录主存使用情况的数据结构:已分区表和空闲分区表。
3、在设计好的数据结构上设计一个主存分配算法,要求实现的基本功能操作有:寻找空闲分区、空闲分区表的修改、已分区表的修改。
4、在设计好的数据结构上设计一个主存回收算法。其中,若回收的分区有上邻空闲分区和(或)下邻空闲分区,要求合并为一个空闲分区登记在空闲分区表的一个表项里。
5、系统每进行一次分配或回收,都要给出内存映像图或已分配表及未分配表以观察内存的变化。
4 磁盘移臂调度算法实验(20分)
4.1 实验目的
加深对于操作系统设备管理技术的了解,体验磁盘移臂调度算法的重要性;掌握几种重要的磁盘移臂调度算法,练习模拟算法的编程技巧,锻炼研究分析试验数据的能力。
4.2 实验说明
- 示例实验程序中模拟两种磁盘移臂调度算法:SSTF算法和SCAN算法
- 能对两种算法给定任意序列不同的磁盘请求序列,显示响应磁盘请求的过程。
- 能统计和报告不同算法情况下响应请求的顺序、移臂的总量。
5文件管理作业(20分)
5.1 实验目的
通过模拟文件的创建、删除操作,加深对于操作系统文件管理功能的了解,练习模拟算法的编程技巧,锻炼研究分析试验数据的能力。
5.2 实验说明
给出一个磁盘块序列:1、2、3、……、500,初始状态所有块为空的,每块的大小为2k。选择使用空闲表、空闲盘区链、位示图三种算法之一来管理空闲块。对于基于块的索引分配执行以下步骤:
(1)随机生成2k-10k的文件50个,文件名为1.txt、2.txt、……、50.txt,按照上述算法存储到模拟磁盘中。
(2)删除奇数.txt(1.txt、3.txt、……、49.txt)文件
(3)新创建5个文件(A.txt、B.txt、C.txt、D.txt、E.txt),大小为:7k、5k、2k、9k、3.5k,按照与(1)相同的算法存储到模拟磁盘中。
(4)给出文件A.txt、B.txt、C.txt、D.txt、E.txt的盘块存储状态和所有空闲区块的状态。
准备工作
1.安装外部库文件
需要安装以下库文件:
Click==7.0
Flask==1.0.2
itsdangerous==1.1.0
Jinja2==2.10
MarkupSafe==1.1.0
passlib==1.7.1
PyMySQL==0.9.3
Werkzeug==0.14.1
WTForms==2.2.1
2.建立数据库
数据库名称:osmode
数据库建立:
/*Navicat Premium Data TransferSource Server : homework1Source Server Type : MySQLSource Server Version : 80017Source Host : localhost:3306Source Schema : osmodeTarget Server Type : MySQLTarget Server Version : 80017File Encoding : 65001Date: 15/06/2021 09:10:17
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for ccgl_list
-- ----------------------------
DROP TABLE IF EXISTS `ccgl_list`;
CREATE TABLE `ccgl_list` (`id` int(11) NOT NULL AUTO_INCREMENT,`usename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`tp` int(10) NULL DEFAULT NULL,`state` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for ccgl_wfplist
-- ----------------------------
DROP TABLE IF EXISTS `ccgl_wfplist`;
CREATE TABLE `ccgl_wfplist` (`id` int(10) NOT NULL AUTO_INCREMENT,`usename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`s` int(10) NULL DEFAULT NULL,`r` int(10) NULL DEFAULT NULL,`e` int(10) NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 270 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for ccgl_yfplist
-- ----------------------------
DROP TABLE IF EXISTS `ccgl_yfplist`;
CREATE TABLE `ccgl_yfplist` (`id` int(11) NOT NULL AUTO_INCREMENT,`usename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`jname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`j_r` int(10) NULL DEFAULT NULL,`s` int(10) NULL DEFAULT NULL,`r` int(10) NULL DEFAULT NULL,`e` int(10) NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 56 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for cljdd_fcfs_result
-- ----------------------------
DROP TABLE IF EXISTS `cljdd_fcfs_result`;
CREATE TABLE `cljdd_fcfs_result` (`jname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`st` int(10) NOT NULL,`et` int(10) NOT NULL,`zt` int(10) NOT NULL,`dqzt` float NOT NULL,`usename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`ctime` datetime NOT NULL,`dt` int(10) NOT NULL,`ft` int(10) NOT NULL,PRIMARY KEY (`jname`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for cljdd_hrn_result
-- ----------------------------
DROP TABLE IF EXISTS `cljdd_hrn_result`;
CREATE TABLE `cljdd_hrn_result` (`jname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`st` int(10) NOT NULL,`et` int(10) NOT NULL,`zt` int(10) NOT NULL,`dqzt` float NOT NULL,`usename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`ctime` datetime NOT NULL,`dt` int(10) NOT NULL,`ft` int(10) NOT NULL,PRIMARY KEY (`jname`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for cljdd_j
-- ----------------------------
DROP TABLE IF EXISTS `cljdd_j`;
CREATE TABLE `cljdd_j` (`id` int(8) NOT NULL AUTO_INCREMENT,`Jname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`dt` int(8) NOT NULL,`ft` int(8) NOT NULL,`usename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`c_time` datetime NOT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 54 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for cljdd_rr_result
-- ----------------------------
DROP TABLE IF EXISTS `cljdd_rr_result`;
CREATE TABLE `cljdd_rr_result` (`jname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`st` int(10) NOT NULL,`et` int(10) NOT NULL,`zt` int(10) NOT NULL,`dqzt` float NOT NULL,`usename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`ctime` datetime NOT NULL,`dt` int(10) NOT NULL,`ft` int(10) NOT NULL,PRIMARY KEY (`jname`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for cljdd_rr_state
-- ----------------------------
DROP TABLE IF EXISTS `cljdd_rr_state`;
CREATE TABLE `cljdd_rr_state` (`t` int(10) NOT NULL,`jname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`state` int(10) NOT NULL,`usename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`ctime` datetime NOT NULL,`id` int(11) NOT NULL AUTO_INCREMENT,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2449 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for cljdd_sjf_result
-- ----------------------------
DROP TABLE IF EXISTS `cljdd_sjf_result`;
CREATE TABLE `cljdd_sjf_result` (`jname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`st` int(10) NOT NULL,`et` int(10) NOT NULL,`zt` int(10) NOT NULL,`dqzt` float NOT NULL,`usename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`ctime` datetime NOT NULL,`dt` int(10) NOT NULL,`ft` int(10) NOT NULL,PRIMARY KEY (`jname`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for cpyb_c
-- ----------------------------
DROP TABLE IF EXISTS `cpyb_c`;
CREATE TABLE `cpyb_c` (`id` int(10) NOT NULL AUTO_INCREMENT,`cidao` int(10) NOT NULL,`ctime` datetime NOT NULL,`usename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 30 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for cpyb_scan_result
-- ----------------------------
DROP TABLE IF EXISTS `cpyb_scan_result`;
CREATE TABLE `cpyb_scan_result` (`cidao` int(10) NOT NULL,`usename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`ctime` datetime NOT NULL,`stemp` int(10) NOT NULL,`t` int(10) NOT NULL,PRIMARY KEY (`t`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for cpyb_sstf_result
-- ----------------------------
DROP TABLE IF EXISTS `cpyb_sstf_result`;
CREATE TABLE `cpyb_sstf_result` (`cidao` int(10) NOT NULL,`usename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`ctime` datetime NOT NULL,`stemp` int(10) NOT NULL,`t` int(10) NOT NULL,PRIMARY KEY (`t`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (`id` int(8) NOT NULL AUTO_INCREMENT,`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for wjgl_list
-- ----------------------------
DROP TABLE IF EXISTS `wjgl_list`;
CREATE TABLE `wjgl_list` (`id` int(11) NOT NULL AUTO_INCREMENT,`usename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`tp` int(10) NULL DEFAULT NULL,`state` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 651 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for wjgl_wfplist
-- ----------------------------
DROP TABLE IF EXISTS `wjgl_wfplist`;
CREATE TABLE `wjgl_wfplist` (`id` int(10) NOT NULL AUTO_INCREMENT,`usename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`s` int(10) NULL DEFAULT NULL,`r` int(10) NULL DEFAULT NULL,`e` int(10) NULL DEFAULT NULL,`sk` int(10) NULL DEFAULT NULL,`ek` int(10) NULL DEFAULT NULL,`rk` int(10) NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 269 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for wjgl_yfplist
-- ----------------------------
DROP TABLE IF EXISTS `wjgl_yfplist`;
CREATE TABLE `wjgl_yfplist` (`id` int(11) NOT NULL AUTO_INCREMENT,`usename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`jname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`j_r` int(10) NULL DEFAULT NULL,`s` int(10) NULL DEFAULT NULL,`r` int(10) NULL DEFAULT NULL,`e` int(10) NULL DEFAULT NULL,`sk` int(10) NULL DEFAULT NULL,`ek` int(10) NULL DEFAULT NULL,`rk` int(10) NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 56 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS = 1;
操作说明
1.用户注册
2.用户登录
3.登录之后即可进入主页即可选择要进行模拟的实验
(1)处理器调度
(2)存储管理
主存初始状态 主存为空(最小可用单元8bt,可用单元共1024bt)
添加3个进程ABC,为其分配空间根据fist-ft,算法依次为ABC分配空间,得到如图所示分区表。
回收一个进程B的空间,如图,B所占用主存空间被回收
添加一个进程D,为其分配空间
根据D所需要的主存空间,第一个空闲分区正好满足要求。
添加一个进程E,为其分配空间
根据E所需要的主存空间,第一个空闲分区不能满足要求,找到第一个可放入次进程的空闲分区为其分配空间。
(3)存储管理
(4)文件管理
1.磁盘初始状态为空
2.随机生成2k-10k的文件50个,文件名为1.txt、2.txt、……、50.txt,按照上述算法存储到模拟磁盘中。
3.删除奇数.txt(1.txt、3.txt、……、49.txt)文件
4.新创建5个文件(A.txt、B.txt、C.txt、D.txt、E.txt),大小为:7k、5k、2k、9k、3.5k,按照与(1)相同的算法存储到模拟磁盘中。
5.给出文件A.txt、B.txt、C.txt、D.txt、E.txt的盘块存储状态和所有空闲区块的状态。
这篇关于操作系统模拟实验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!