武汉理工大学操作系统 课内实验
文章目录
- 前言
- 主要仪器设备及耗材
- 一、动态分区管理
- 实验内容描述
- 实验基本原理与设计
- 二、磁盘调度
- 实验内容描述
- 实验基本原理与设计
- 总结
前言
操作系统课内实验有两个,验收的学姐人贼好,只看了验收结果,没让我将代码细节。。。
主要仪器设备及耗材
1.PC机
2.Visual Studio 2019
以下是本篇文章正文内容,下面案例可供参考
一、动态分区管理
实验内容描述
⑴ 动态分区管理的主存分配模拟系统的设计—最先适应法、最佳适应法、最坏适应法(选择1~3种),模拟实现内存的分配回收;
⑵ 能够输入给定的内存大小,进程的个数,每个进程所需内存空间的大小等;
⑶ 能够选择分配或回收操作;并能显示完成内存分配或回收后内存空间的使用情况;
⑷ 能够显示进程在内存的存储地址、大小等。
实验基本原理与设计
只采用了一种数据结构,最优设计应该是三种:分区表,空闲链表和请求表,我的这种思路仅供参考。
空闲区表(可用表/自由链)的组织方式有两种:按空闲区大小的升序(降序)组织,按空闲区首址升序(降序)组织。寻找合适的空闲区是关键。通常有3种方法:最先适应法,最佳适应法,最坏适应法。
数据结构设计
//分区说明表
struct Partition_table
{int Partition_size;//分区大小int Start_address;//起始地址string Partition_state;//分区状态,已分配或未分配string Process_number;//进程号
};
最先适应法(first-fit):按分区起始地址的递增次序,从头查找,找到符合要求的第一个分区。一旦找到大于或等于所要求内存长度的分区,则停止搜索。
//从空闲区表的第一项开始按顺序查找while (p){//该空闲区长度是否大于等于进程申请的内存大小if (p->data.Partition_size >= p_size && p->data.Partition_state == "未分配"){//如果刚好相等if (p->data.Partition_size == p_size){//清空临时空闲区,将进程插入到空闲区p->data.Process_number = q->data.Process_number;p->data.Partition_state = q->data.Partition_state;return true;}//空闲区大于进程申请的内存大小,截取所需大小else{//空闲区的新起始地址为原地址+申请所占用的内存大小q->data.Start_address = p->data.Start_address;p->data.Start_address += q->data.Partition_size;p->data.Process_number = "null";//截取p->data.Partition_size -= q->data.Partition_size;//插入到双向链表中p->prior->next = q;q->next = p;q->prior = p->prior;p->prior = q;return true;}}p = p->next;}
最佳适应法(best-fit):按分区大小的递增次序,查找,找到符合要求的第一个分区。分配时,根据申请的大小逐个与空闲区大小进行比较,找到第一个满足要求的空闲区则停止搜索(它是最适合的,即最佳的,因为最接近于所要求的大小)。
while (p){//找到最小能适应申请内存的空闲区即为最佳if (p->data.Partition_size >= p_size && p->data.Partition_state == "未分配"){if (p->data.Partition_size - p_size < t){f = p;t = f->data.Partition_size - p_size;}}p = p->next;}
最坏适应法(worst-fit):按分区大小的递减次序,从头查找,找到符合要求的第一个分区。分配时总是取表中的第一个表目,若空间小于申请者的要求,则表示系统中无满足要求的空闲区,分配失败;否则,将从该空闲区中分配给申请者,然后修改空闲区的大小,并将它插入到空闲区表的适当位置。
while (p){//找到最大能适应申请内存的空闲区即为最坏if (p->data.Partition_size >= p_size && p->data.Partition_state == "未分配"){if (p->data.Partition_size - p_size > t){f = p;t = f->data.Partition_size - p_size;}}p = p->next;}
二、磁盘调度
实验内容描述
⑴ 选择1~3种磁盘调度算法(先来先服务法、最短寻道时间优先、电梯算法)模拟实现磁盘调度;
⑵ 能够输入当前磁头的位置、磁头移动方向、磁道访问请求序列等;
⑶ 计算磁头移动的总磁道数;
⑷ 能够显示磁盘调度结果(磁头依次访问的磁道号顺序等)。
实验基本原理与设计
磁盘是可被多个进程共享的设备。当有多个进程都请求访问磁盘时,应采用一种适当的调度算法,对这些请求的服务顺序调整安排,旨在降低平均磁盘服务时间,达到公平、高效。
先来先服务(FCFS):按访问请求到达的先后次序服务。
先后即按顺序遍历。
最短寻道时间优先(SSTF):优先选择距当前磁头最近的访问请求进行服务,主要考虑寻道优先。
//查找离现在磁道位置最近的for (int i = 0; i < count; i++){for (int j = 0; j < count; j++){if (abs(list[j] - a) < t && flag[j] == 0){k = j;t = abs(list[j] - a);}}sum += t;t = 10000;cout << list[k] << " ";flag[k] = 1;a = list[k];}
扫描算法(SCAN,电梯算法):当设备无访问请求时,磁头不动;当有访问请求时,磁头按一个方向移动,在移动过程中对遇到的访问请求进行服务,然后判断该方向上是否还有访问请求,如果有则继续扫描,否则改变移动方向,并为经过的访问请求服务,如此反复。
cout << "请输入磁头移动方向(0-左,1-右):" << endl;cin >> b;cout << "磁盘调度结果:" << endl;if (b == 0){for (int i = count-1; i>=0 ; i--){//找到第一个比现在磁头的位置小if (list[i]>a){k = i;continue;}sum += abs(list[i] - a);a = list[i];cout << list[i] << " ";}//找完最小的回去找比起始位置大的那个最小的位置for (int i = k; i < count; i++){sum += list[i] - a;a = list[i];cout << list[i] << " ";}}else if (b == 1){for (int i = 0; i < count; i++){//找到第一个比现在磁头大的位置if (list[i] < a){k = i;continue;}sum += list[i] - a;a = list[i];cout << list[i] << " ";}//找完最大的回去找比起始位置小的那个最大的位置for (int i = k; i >= 0; i--){sum += abs(list[i] - a);a = list[i];cout << list[i] << " ";}}
总结
详情可参考以下链接:
链接:冲冲冲~
提取码:ha8p
复制这段内容后打开百度网盘手机App,操作更方便哦
武汉理工大学操作系统 课内实验相关推荐
- 武汉理工大学数值分析课内实验
文章目录 前言 主要仪器设备及耗材 一.用C语言实现几个多项式插值的程序.(Lagrange插值.Newton插值) 实验内容描述 实验基本原理与设计 分析与设计 实验结果 二.用C语言实现几个求常微 ...
- 【数据库系统原理】数据库课内实验
说明:这是武汉理工大学计算机学院[数据库系统原理]课程课内实验. >>点击查看武汉理工大学计算机专业课程资料汇总 >>点击查看WUTer计算机专业实验汇总 谨记:纸上得来终觉浅 ...
- webservice-UML课内实验报告实验三
1.webservice 现将网上关于webservice的讲解提炼出来,通过一个最简单使用并且方便的例子,告诉大家什么是webservice. 简单来说,webservice就是远程调用技术,也叫X ...
- 武汉理工大学软件测试重点,软件测试实验报告书(武汉理工大学).docx
学生学号 0121310880112 实验课成绩 武汉理工大学 学 生 实 验 报 告 书 实验课程名称 软件质量保证与测试 开 课 学 院 计算机科学与技术学院 指导老师姓名 王云华 ___ 学 生 ...
- 武汉理工大学计算机网,武汉理工大学计算机基础综合实验
[实例简介] 武汉理工大学软件工程专业计算机基础综合实验(c实验),计费管理系统.基本功能加部分扩展功能实现,经过验收合格. [实例截图] [核心代码] 计算机基础综合实验 └── AMS ├── A ...
- 计算机组成与结构课内实验:16位模型机的设计
我们当时是有两个实验的.一个是计组课内的实验:16位模型机的设计.还有一个是计组的最终大课设:计算机组成与结构综合实验,另一篇文章我将给出综合实验的报告 第一个是课内的设计实验: 引言 1.1 设计目 ...
- 计算机组成原理课内实验,【计算机基础论文】计算机组成原理课程实验教学改革(共2885字)...
摘要:目前<计算机组成原理>的实验内容存在与课程定位目标相悖的问题,一味追求实验内容的复杂性,而忽视了计算机组成原理实验教学的完整性和概念性.针对上述问题,本文对<计算机组成原理&g ...
- 武汉理工大学 操作系统复习
第一章 1. 操作系统的地位:紧贴硬件之上,并在所有其他软件之下.提供其他软件的支撑环境,是计算机资源的管理者 2. 定义:是管理和控制计算机系统中各种硬件和软件资源.合理地组织计算机工作流程的系统软 ...
- 【nachos】山东大学操作系统课设实验nachos系统(6)系统调用Exec()和Exit()
实验目的 尝试实现系统调用Exec() 和 Exit() 实验步骤 需要注意,在前三个步骤不需要修改代码. 一.nachos中系统调用的实现机制 观察nachos/machine/machine,mi ...
最新文章
- python中控制台输出的颜色方法
- 用户密码登录改造实现
- C#多线程编程系列(五)- C# ConcurrentBag的实现原理
- 线性方程组的5种描述方式
- linux 复制文件_使用 rsync 复制大文件的一些误解 | Linux 中国
- 解决TIME_WAIT造成的服务器无法访问
- jeb 导出java_[原创] JEB2插件,导出APK资源文件
- 手把手教你SPSS进行ROC曲线分析
- 小 Mil 来了!Milvus 智能问答机器人上线
- 随便说说,我回来啦~
- gitbub 创建本地仓库注意点。
- 优动漫PAINT实用教程——创建自动动作提高效率
- 查看自己电脑应用对应的端口号
- 迈向人工智能的下一步-《星际争霸II》
- ucos通信邮箱的理解
- 微信小程序Ⅴ [获取登录用户信息,重点openID(详解)]
- P2P式纳斯达克:小蚁区块链或将带来怎样的新金融?
- (9) iphone 开发 AppSettings , 系统setting与应用程序setting间的数据控制
- 201521123055 结对编程作业
- BZOJ 2820 YY的GCD(莫比乌斯反演)
热门文章
- Unity API详解——Application类
- 董老师又双叒叕送书啦,10本《Python程序设计入门与实践》
- c语言b=x%1000 100什么意思,C语言程序-设计 100个小程序代码.doc
- Adaptive Consistency Prior based Deep Network for Image Denoising
- 关于django模型语法里面的一些坑。系统报错:Unknown command: 'validate' Type 'manage.py help' for usage.
- 圆周率π的前10000位是什么?
- 什么是量化交易?量化机器人有什么用?
- 网易——奖学金、路灯
- wps如何调整字符宽度_WPS文字怎样调整文字宽度让不同字数文字同宽?
- ViewPager设置页面缩放