操作系统课程设计设备管理Word文档格式.docx
- 文档编号:19437849
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:16
- 大小:221.55KB
操作系统课程设计设备管理Word文档格式.docx
《操作系统课程设计设备管理Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计设备管理Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
每个设备是否被使用,哪个进程在使用该设备,哪些进程在等待使用该设备。
三算法及数据结构
3.1算法的总体思想(流程)
设备管理的功能是按照设备的类型和系统采用的分配策略,为请求I/O进程分配一条传输信息的完整通路。
合理的控制I/O的控制过程,可最大限度的实现CPU与设备、设备与设备之间的并行工作。
1.监视所有设备。
为了能对设备实施有效的分配和控制,系统能获取设备的状态。
设备状态保存在设备控制表(DeviceTable)中,并动态的记录状态的变化及有关信息。
2.制定分配策略。
按先来先服务的算法,进行设备分配。
3.设备的分配。
把设备分配给进程。
4.设备回收。
当进程运行完毕后,要释放设备,则系统必须回收,一边其他进程使用。
图3.1
3.2Equipment模块
3.2.1功能
记录设备的状态及相关信息
检查设备是否被调用
对设备进行分配
进程结束对设备进行回收
3.2.2数据结构
一个DeviceTable类、一个DeviceTable函数。
DeviceTable是设备分配表,说明设备的分配状况,是否被占用。
Device类说明了设备是如何使用的。
3.3cpu模块
3.3.1功能
进程对设备的调用,当进程使用设备时,检查设备是否空闲。
如果空闲,则调用该设备;
如果设备正被使用,则将该进程阻塞到该设备的阻塞队列中,等到设备空闲时,再被唤醒,调用设备。
3.3.2数据结构
一个设备的枚举类型DeviceType,一个cpu函数。
Cpu函数中调用Equipment模块中的函数对设备进行检测。
如果设备空闲,就调用该设备;
如果设备真在被使用,则该进程被阻塞到该设备的阻塞队列中。
3.3.3算法
通过调用Equipment模块中的函数对设背进行检测:
如果设备空闲,则使用该设备;
如果设备正在工作,则进程被阻塞。
3.4form1模块
3.4.1功能
界面管理
图3-2
启动进程,如果要使用设备,按先来先服务的算法调用设备。
此模块中有一个设备调用函数publicintAllocate(DeviceTypetype),根据设备的物理名调用设备,并将信息显示显示到界面中。
3.4.2算法
先来先服务(FCFS,FirsteFirstService)分配算法:
每一设备有一队列管理,当多个作业或任务对同一设备提出I/O请求时,该算法把请求的先后次序排成一个等待该设备的队列,设备分配程序把设备分配给队列中的第一各作业。
四程序设计与实现
4.1程序流程图
图4-1
4.2基本思想
进程调用设备。
先调用A类设备,A类设备一共有三个,如果有空闲的设备,则进程就可调用;
否则将进程阻塞到设备A的阻塞队列中,等待设备,等到A类设备有空闲设备时,就唤醒该进程,在断点处继续进行程序。
再调用B类设备,B类设备一共有两个,如果有空闲的设备,则进程就可调用;
否则将进程阻塞到设备B的阻塞队列中,等待设备,等到B类设备有空闲设备时,就唤醒该进程,在断点处继续进行程序。
最后调用C类设备,C类设备只有一个,C设备是临界资源,如果C设备空闲,则进程就可调用;
否则将进程阻塞到设备C的阻塞队列中,等待设备,等到C设备空闲,就唤醒该进程,在断点处继续进行程序。
4.3定义的公共变量或数据结构
Anum,Bnum,um分别表示设备A,B,C空闲数目
publicenumDeviceType枚举型的数据类型列举出三种设备
publicstructDeviceTable定义一个设备表的结构体
publicclassDevice设备类
publicboolJudgeDevice(DeviceTypetype)检查类型为type的设备是否可用
publicintAllocate(DeviceTypetype)分配设备,返回第几个设备被占用
publicvoidDeAllocate(DeviceTypetype,inta)回收设备
4.4实验部分代码
namespaceWindowsApplication2
{publicpartialclassForm1:
Form
{publicstaticintAnum=3,Bnum=2,um=1;
publicenumDeviceType
{A,
B,
C,
}
publicstructDeviceTable
{publicDeviceTypedeviceType;
publicinttotal;
publicint[]useState;
//0——空闲,1——占用
publicDeviceTable(DeviceTypetype,inttotal)//定义一个构造函数
{this.total=total;
deviceType=type;
useState=newint[total];
for(inti=0;
i<
total;
i++)//初始化每个设备
{useState[i]=0;
publicclassDevice
{privateDeviceTable[]table=newDeviceTable[3];
//三种设备
privatestaticDevicedevice=newDevice();
publicDevice()
{InitDevice();
//初始化设备
privatevoidInitDevice()//设备初始化,A设备3个,B设备2个,C设备1个
{table[0]=newDeviceTable(DeviceType.A,3);
table[1]=newDeviceTable(DeviceType.B,2);
table[2]=newDeviceTable(DeviceType.C,1);
//
/////////////////检查类型为type的设备是否可用//////////////////////
//
publicboolJudgeDevice(DeviceTypetype)
{boolstr=false;
switch(type)
{caseDeviceType.A:
{if(table[0].total>
0)
{str=true;
break;
caseDeviceType.B:
{if(table[1].total>
caseDeviceType.C:
{if(table[2].total>
{str=true;
returnstr;
////////////分配设备,返回第几个设备被占用////////////////////////
publicintAllocate(DeviceTypetype)
{intk=0;
switch(type)//使用switch语句选择分配设备不同函数
{table[0].total--;
3;
i++)
{if(table[0].useState[i]==0)
{table[0].useState[i]=1;
k=i;
{table[1].total--;
2;
{
if(table[0].useState[i]==0)
{table[0].useState[i]=1;
{table[2].total--;
returnk;
//////////////////////////回收设备////////////////////////////
publicvoidDeAllocate(DeviceTypetype,inta)
{switch(type)
{caseDeviceType.A:
{table[0].total++;
table[0].useState[a]=0;
{table[1].total++;
table[1].useState[a]=0;
{table[2].total++;
table[2].useState[a]=0;
publicForm1()
{Initializeponent();
/////////////////////分配设备时的颜色变化////////////////////
privatevoidbutton7_Click(objectsender,EventArgse)
{Anum--;
stringresult1="
"
;
Deviced1=newDevice();
intm1=d1.Allocate(DeviceType.A);
result1=Convert.ToString(m1);
switch(Anum)
{case2:
this.button1.BackColor=Color.Red;
case1:
this.button2.BackColor=Color.Red;
case0:
this.button3.BackColor=Color.Red;
default:
MessageBox.Show("
无设备可分配"
);
privatevoidbutton8_Click(objectsender,EventArgse)
{Bnum--;
stringresult2="
Deviced2=newDevice();
intm2=d2.Allocate(DeviceType.B);
switch(Bnum)
{case1:
this.button4.BackColor=Color.Red;
this.button5.BackColor=Color.Red;
result2=Convert.ToString(m2);
privatevoidbutton9_Click(objectsender,EventArgse)
{um--;
stringresult3="
intm3=d1.Allocate(DeviceType.C);
if(um==0)
{this.button6.BackColor=Color.Red;
else
{MessageBox.Show("
result3=Convert.ToString(m3);
}
}
4.5运行截图
屏幕显示
主存使用情况示意图,哪些主存块已分配,哪些主存块未分配,以不同的颜色表示,灰色表示设备空闲,红色表示设备已分配
初始化为所有设备都是空闲状态,如下图所示
图4-2
分配设备A正常情况下,如图所示:
图4-3
分配设备A非正常情况下,例如需要设备数超过实际有的设备数时,如图所示:
图4-4
3个设备A都被分配出去,回收设备A时正常情况如下图所示:
图4-5
4.6使用说明
设备管理主要包括设备的分配和回收。
1.设备的模拟
模拟系统中有A、B、C三种独占型设备,A设备3个,B设备2个,C设备1个。
2.数据结构
因为模拟系统比较小,因此只要设备表设计合理既可。
3.设备分配
采用先来先服务策略。
4.设备回收
回收设备后,要注意唤醒等待设备的进程。
5.屏幕显示
屏幕显示要求包括:
其中灰色表示设备空闲,红色表示设备已被分配。
五总结
设备管理主要监视所有设备的状态,制定分配策略,完成设备的分配和回收,合理的控制I/O的控制过程,最大限度的实现CPU与设备、设备与设备之间的把并行工作。
通过对这次操作系统课程设计的亲自参与和操作,使我深刻体会到了:
只要你想做只要你想学没有弄不懂得事情,工程里面也不能不在乎细节,等等。
感觉很受益匪浅。
懂得了操作系统包括的四部分内容:
文件管理和用户接口、存储管理、设备管理、进程管理之间的内在联系。
加深了我对这门课程的理解。
锻炼了自己在考虑全局也不是细节的能力。
通过这次实验,再一次熟悉并深入掌握了程序设计语言和界面设计。
同时,我也深深体会到了团队的重要性,如果没有同组人的互相鼓励和督促我跟本不能很快的完成任务。
一滴水的力量是有限的,但汇聚成溪流将是美丽的。
虽然我们每个人的力量都是有限的,但是激烈的讨论、相互的鼓励使我们在实践中成长。
感谢和我一起面对的同伴们,因为有你们我才变得勤奋。
更感谢给予我们谆谆教导的老师,在我们犹豫困惑时给予我们指导,谢谢您!
六参考文献
X振鹏、王煜、X明《操作系统》(第三版):
中国铁道
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 设备管理