目录

一、实验要求

1.实验名称

2.实验目的

3.实验内容

二、实验图解

三、实验代码

四、实验数据

1.设备插入功能

2.回收程序功能

3.查找功能


一、实验要求

1.实验名称

独占设备的分配与回收算法模拟。

2.实验目的

通过独占设备的分配与回收算法模拟,了解操作系统对设备资源组织管理和分配、回收过程,理解操作系统对设备管理的思想。

3.实验内容

设计一种独占设备分配和回收的方案,要求满足设备独立性。当进程申请某类设备时,系统先查找“设备类表” 如果该类设备的现存台数可以满足申请要求,则从该类设备的“设备表”始址开始依次查该类设备在设备表中的登记项,找出“未分配”的设备分配给进程。 分配后要修改设备类表中的现存台数,把分配给进程的设备标志改为“已分配”且填上占用设备的进程名。然后,把设备的绝对号与相对号的对应关系通知用户,以便用户在分配到的设备上使用。

二、实验图解

 1.devc数组为设备类表,dev数组为设备表,除此之外还在另外设置三个队列用于存放排队的进程,devc、dev指向队列便于队列变动时的修改。

2.,devc数组为设备类表,devc中的 count代表此类设备数量,count为0时,则进程要想占用设备需入队等待,sa表示该类第一个设备的绝对地址,fa表示该类第二个设备的绝对地址。

3.dev数组为设备表,ad为设备的绝对地址,id为进程的id,id为-1时表示该位置上的设备空闲。

三、实验代码

#include"stdio.h"
#include"iostream"
#include"cstdio"
#include"iomanip"
#include"malloc.h"
using namespace std;
typedef struct//队列的结构
{int data[3];//存id,一个队列有2个设备,数组大小设为3是为了循环队列的操作 int front,rear;
}SQue;
typedef struct DeviceCa//设备类表
{ int count=2;//0 录音机 1 摄像头 2 打印机 int sa;//起始位置 int fa;//终止位置 SQue *q;//指向设备队列
}Dec;
typedef struct Devic//设备表
{int ad;//设备始址 int id;//占用的ID SQue *q;//也指向设备队列
}De;void InitQueue(SQue *&l)//创建队列
{l=(SQue *)malloc(sizeof(SQue));l->front=l->rear=0;
}
bool Queue(SQue *l)//判断是否为空 1 为空
{return(l->front==l->rear);}  bool enQueue(SQue *&l,int e)//进队列 {if((l->rear+1)%3==l->front )//满队列就不能进了 return 0;l->rear=(l->rear+1)%3;l->data[l->rear]=e;return e;}int deQueue(SQue *&l,int e)//出队列 {if(l->front==l->rear)return 0;l->front=(l->front+1)%3;e=l->data[l->front];return e;}void Insertpro(Dec devc[],De dev[])//插入进程函数 {int id;//id表示占用设备进程的idint ca;//ca表示要占用设备的类型cout<<"请输入程序ID及程序占用设备类型,两者以空格形式隔开(0表示录音机(第一类设备) 1表示摄像头(第二类设备) 2表示打印机(第三类设备):\n";cin>> id; cin>>ca; if(devc[ca].count!=0){if(dev[devc[ca].sa].id==-1)//查看sa位置是否空闲{dev[devc[ca].sa].id=id; cout<<"插入程序占用设备成功~\n"; }else{dev[devc[ca].fa].id=id;//sa位置不空闲的话就用fa位置 cout<<"插入程序占用设备成功~\n"; }devc[ca].count--;//插入之后count减1 }else{if(enQueue(devc[ca].q,id))cout<<"设备忙,程序已进入队列\n"; elsecout<<"队列满,请稍后重试\n" ;}}void Recycle(Dec devc[],De dev[])//回收函数 {int h=0;int id=-1;cout<<"请输入回收程序ID:";cin>>id;int j=-1;//用于判断 for(int i=0;i<6;i++){if(dev[i].id==id){ cout<<"回收成功!\n"; j=i;break; } }if(j==-1)cout<<"程序查找失败,无法回收\n";else{if(Queue(dev[j].q))//如果等待队列为空 {dev[j].id=-1;devc[j/2].count++;}else{dev[j].id=deQueue(dev[j].q,h);//等待队列不空,要在设备表上登记等待队列中的设备 }} }void Findid(De dev[])//查找函数 {int getid;int j=-1;//j可以判断对应id存在不存在 cout<<"请输入查找的ID:\n";cin>>getid;for(int i=0;i<6;i++){if(dev[i].id==getid){cout<<"进程绝对号为:"<<i;cout<<"\n进程为第"<<i/2+1<<"类"<<"第"<<i%2+1<<"个设备\n";j=1;break;}}if(j==-1)cout<<"程序不存在\n";}
int main()
{cout<<"------本实验中,设备队列大小为2,同一类设备最多允许两台设备等待------\n"; Dec devc[3];//有3类设备 De dev[6];//所有队列一共6台设备 for(int i=0;i<3;i++){devc[i].count=2;devc[i].sa=i*2;devc[i].fa=devc[i].sa+1;InitQueue(devc[i].q); }int ee=0;for(int i=0;i<6;i=i+2){dev[i].ad=i;dev[i+1].ad=i+1;dev[i].id=-1;//表示无进程占用dev[i+1].id=-1 ;dev[i].q=devc[ee].q;dev[i+1].q=devc[ee].q;ee++;}int gets=-1;//gets用于捕获操作类型 while(1){cout<<"\n------------------------\n请选择操作类型(0为插入程序,1为回收程序,2为搜索程序位置):\n";cin>>gets;if(gets==0){Insertpro(devc,dev);}else if(gets==1) {Recycle(devc,dev);}else if(gets==2){Findid(dev);}}  }

四、实验数据

1.设备插入功能

前两个插入程序占用设备成功,后两个插入队列成功,最后一个由于队列满而入队失败。

2.回收程序功能

由于ID为3的程序还在队列中,故回收失败,ID为1的程序正在占用设备故ID为1的程序回收成功,回收ID为1的程序后,ID为3的程序可以插入并占用设备以及回收设备。

3.查找功能

搜索查找功能可以找出设备的相对位置以及绝对位置

操作系统实验四:C++实现独占设备的分配与回收算法模拟相关推荐

  1. 独占设备的分配和回收模拟_系统设计硬核知识(4)——操作系统的设备管理...

    在计算机系统中,除了处理器和内存之外,其他的大部分硬设备称为外部设备.它包括输入/输出设备,辅存设备及终端设备等.这些设备种类繁多,特性各异,操作方式的差异很大,从而使操作系统的设备管理变得十分繁杂. ...

  2. 独占设备的分配与回收_灵魂拷问:Java对象的内存分配过程是如何保证线程安全的?...

    点击上方"linkoffer", 选择关注公众号高薪职位第一时间送达 作者 l Hollis JVM内存结构,是很重要的知识,相信每一个静心准备过面试的程序员都可以清楚的把堆.栈. ...

  3. 操作系统实验四-LRU算法的模拟

    操作系统实验四:页式虚拟存储管理的模拟 一.实验目的: 掌握存储管理的基本原理.地址变换过程:用软件实现地址转换过程:用一种常用的页面置换算法来处理缺页中断并研究其命中率. 二.实验题目: 1.模拟请 ...

  4. C语言 操作系统实验 四种调度(最高响应比优先算法 HRN)

    注: 本文是四个调度算法的第一篇算法. 本文是根据CSDN上某一FCFS调度算法魔改来的,所以FCFS的算法不会发到网站. 我是个菜鸡,发文是为了纪念自己完成了代码,以及累计自己的经验. 如有知识错误 ...

  5. 操作系统实验四——使用命名管道实现进程通信

    操作系统实验四--使用命名管道实现进程通信 一. 实验目的 (1)了解windows系统环境下的进程通讯机制. (2)熟悉Windows系统提供的进程通信API. 二. 实验准备 相关API函数介绍 ...

  6. 广州大学2020操作系统实验四:文件系统

    相关资料 广州大学2020操作系统实验一:进程管理与进程通信 广州大学2020操作系统实验二:银行家算法 广州大学2020操作系统实验三:内存管理 广州大学2020操作系统实验四:文件系统 广州大学2 ...

  7. 18 操作系统第五章 设备管理 IO设备的基本概念和分类 IO控制器 IO控制方式 IO软件层次结构 IO核心子系统 假脱机技术 设备的分配与回收 缓冲区管理

    文章目录 1 IO设备的基本概念和分类 1.1 什么是I/O设备 1.2 I/O设备分类 2 IO控制器 2.1 I/O设备组成 2.2 I/O控制器功能 2.3 I/O控制器的组成 2.4 寄存器编 ...

  8. 请简述独占设备的分配过程。

    独占设备的分配过程. (1).分配设备. 首先根据I/O请求中的物理设备名查找系统设备表SDT,从中找出该设备的DCT,再根据DCT中的设备状态字段,可知该设备是否正忙,若忙,便将请求I/O的进程的P ...

  9. 天津理工大学《操作系统》实验二,存储器的分配与回收算法实现,代码详解,保姆式注释讲解

    天津理工大学<操作系统>实验二,存储器的分配与回收算法实现,代码详解,保姆式注释讲解 实验内容 1. 本实验是模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不 ...

最新文章

  1. IOS中CoreLocation框架地理定位
  2. Asp.net細微的效率提升
  3. 【转】FireFox与IE js脚本差异 小结
  4. 使用Kotlin开发Android应用初体验
  5. RocketMQ入门到入土(五)消息持久化存储源码解析
  6. java bean状态_无状态和有状态的企业Java Bean
  7. 三角函数及其之间的关系
  8. “趁年轻,浙样爱”陈晓景甜领衔春日恋爱宣言
  9. android 4 时间限制,Android触摸精灵
  10. 微信会员php源码,基于ThinkPHP框架开发的在线微信拼车系统完整PHP源码-深蓝源码会员专享...
  11. APP怎样通过免填邀请码,提高App邀请效率?
  12. ORA-01843 月份无效
  13. 串口通信协议--UART、RS-232、RS-485、RS-422
  14. python 行列分不清
  15. 当代世界顶级彩铅牛人的画作,每一副仿佛照片一样逼真!
  16. 县域面板数据(2000-2019)一:国民经济核算+人口(面板数据,stata或excel版)
  17. Java音视频处理——JavaCV
  18. 看板管理中看板的定义、构成,以及实际看板案例分享
  19. 韦东山:机会总是留给有准备的人
  20. phpstrom设置函数注释说明

热门文章

  1. 基于eNSP华为模拟器的VRRP简单实验
  2. 机器学习算法(二):决策树理论与python实现+经典应用(预测隐形眼镜类型)
  3. AutoCAD Civil3D 2023安装图文教程及下载
  4. poj3182(bfs)
  5. GBK-unicode对照
  6. 隔壁住了个十分好看的妹子,作为程序员的我会怎么办?
  7. QML基础:锚anchors
  8. excel文件保护工作表无法编辑,忘记密码时解决办法
  9. 完美世界如何修改服务器ip,完美世界:完美整容及修改身材流程
  10. 博客中的动态图片如何制作