文章目录

  • 前言
  • 主要仪器设备及耗材
  • 一、动态分区管理
    • 实验内容描述
    • 实验基本原理与设计
  • 二、磁盘调度
    • 实验内容描述
    • 实验基本原理与设计
  • 总结

前言

操作系统课内实验有两个,验收的学姐人贼好,只看了验收结果,没让我将代码细节。。。

主要仪器设备及耗材

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,操作更方便哦

武汉理工大学操作系统 课内实验相关推荐

  1. 武汉理工大学数值分析课内实验

    文章目录 前言 主要仪器设备及耗材 一.用C语言实现几个多项式插值的程序.(Lagrange插值.Newton插值) 实验内容描述 实验基本原理与设计 分析与设计 实验结果 二.用C语言实现几个求常微 ...

  2. 【数据库系统原理】数据库课内实验

    说明:这是武汉理工大学计算机学院[数据库系统原理]课程课内实验. >>点击查看武汉理工大学计算机专业课程资料汇总 >>点击查看WUTer计算机专业实验汇总 谨记:纸上得来终觉浅 ...

  3. webservice-UML课内实验报告实验三

    1.webservice 现将网上关于webservice的讲解提炼出来,通过一个最简单使用并且方便的例子,告诉大家什么是webservice. 简单来说,webservice就是远程调用技术,也叫X ...

  4. 武汉理工大学软件测试重点,软件测试实验报告书(武汉理工大学).docx

    学生学号 0121310880112 实验课成绩 武汉理工大学 学 生 实 验 报 告 书 实验课程名称 软件质量保证与测试 开 课 学 院 计算机科学与技术学院 指导老师姓名 王云华 ___ 学 生 ...

  5. 武汉理工大学计算机网,武汉理工大学计算机基础综合实验

    [实例简介] 武汉理工大学软件工程专业计算机基础综合实验(c实验),计费管理系统.基本功能加部分扩展功能实现,经过验收合格. [实例截图] [核心代码] 计算机基础综合实验 └── AMS ├── A ...

  6. 计算机组成与结构课内实验:16位模型机的设计

    我们当时是有两个实验的.一个是计组课内的实验:16位模型机的设计.还有一个是计组的最终大课设:计算机组成与结构综合实验,另一篇文章我将给出综合实验的报告 第一个是课内的设计实验: 引言 1.1 设计目 ...

  7. 计算机组成原理课内实验,【计算机基础论文】计算机组成原理课程实验教学改革(共2885字)...

    摘要:目前<计算机组成原理>的实验内容存在与课程定位目标相悖的问题,一味追求实验内容的复杂性,而忽视了计算机组成原理实验教学的完整性和概念性.针对上述问题,本文对<计算机组成原理&g ...

  8. 武汉理工大学 操作系统复习

    第一章 1. 操作系统的地位:紧贴硬件之上,并在所有其他软件之下.提供其他软件的支撑环境,是计算机资源的管理者 2. 定义:是管理和控制计算机系统中各种硬件和软件资源.合理地组织计算机工作流程的系统软 ...

  9. 【nachos】山东大学操作系统课设实验nachos系统(6)系统调用Exec()和Exit()

    实验目的 尝试实现系统调用Exec() 和 Exit() 实验步骤 需要注意,在前三个步骤不需要修改代码. 一.nachos中系统调用的实现机制 观察nachos/machine/machine,mi ...

最新文章

  1. python中控制台输出的颜色方法
  2. 用户密码登录改造实现
  3. C#多线程编程系列(五)- C# ConcurrentBag的实现原理
  4. 线性方程组的5种描述方式
  5. linux 复制文件_使用 rsync 复制大文件的一些误解 | Linux 中国
  6. 解决TIME_WAIT造成的服务器无法访问
  7. jeb 导出java_[原创] JEB2插件,导出APK资源文件
  8. 手把手教你SPSS进行ROC曲线分析
  9. 小 Mil 来了!Milvus 智能问答机器人上线
  10. 随便说说,我回来啦~
  11. gitbub 创建本地仓库注意点。
  12. 优动漫PAINT实用教程——创建自动动作提高效率
  13. 查看自己电脑应用对应的端口号
  14. 迈向人工智能的下一步-《星际争霸II》
  15. ucos通信邮箱的理解
  16. 微信小程序Ⅴ [获取登录用户信息,重点openID(详解)]
  17. P2P式纳斯达克:小蚁区块链或将带来怎样的新金融?
  18. (9) iphone 开发 AppSettings , 系统setting与应用程序setting间的数据控制
  19. 201521123055 结对编程作业
  20. BZOJ 2820 YY的GCD(莫比乌斯反演)

热门文章

  1. Unity API详解——Application类
  2. 董老师又双叒叕送书啦,10本《Python程序设计入门与实践》
  3. c语言b=x%1000 100什么意思,C语言程序-设计 100个小程序代码.doc
  4. Adaptive Consistency Prior based Deep Network for Image Denoising
  5. 关于django模型语法里面的一些坑。系统报错:Unknown command: 'validate' Type 'manage.py help' for usage.
  6. 圆周率π的前10000位是什么?
  7. 什么是量化交易?量化机器人有什么用?
  8. 网易——奖学金、路灯
  9. wps如何调整字符宽度_WPS文字怎样调整文字宽度让不同字数文字同宽?
  10. ViewPager设置页面缩放