操作系统课程设计设备管理.docx

上传人:b****6 文档编号:7379719 上传时间:2023-01-23 格式:DOCX 页数:16 大小:200.58KB
下载 相关 举报
操作系统课程设计设备管理.docx_第1页
第1页 / 共16页
操作系统课程设计设备管理.docx_第2页
第2页 / 共16页
操作系统课程设计设备管理.docx_第3页
第3页 / 共16页
操作系统课程设计设备管理.docx_第4页
第4页 / 共16页
操作系统课程设计设备管理.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

操作系统课程设计设备管理.docx

《操作系统课程设计设备管理.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计设备管理.docx(16页珍藏版)》请在冰豆网上搜索。

操作系统课程设计设备管理.docx

操作系统课程设计设备管理

操作系统课程设计(设备管理)

 

一引言

1.1课程设计题目

实现一个模拟操作系统。

1.2课程设计的目的

通过模拟操作系统原理的实现,加深对操作系统工作原理理解,进一步了解操作系统的实现方法,并可练习合作完成系统的团队精神和提高程序设计能力。

1.3小组人数

建议3~4人一组共同完成模拟系统的实现。

1.4编程语言

建议使用VC、VB、C#、Java等Windows环境下的程序设计语言,以借助这些语言环境来模拟硬件的一些并行工作。

1.5课程设计内容

模拟采用多道程序设计方法的单用户操作系统,该操作系统包括进程管理、存储管理、设备管理、文件管理和用户接口四部分。

1.6界面设计如图

图1.1

二课程设计任务及要求

2.1设计任务

设计一个设备管理分配程序,按先来先服务的算法,对设备进行分配。

2.2设计要求

设备管理主要包括设备的分配和回收。

(1)模拟系统中有A、B、C三种独占型设备,A设备3个,B设备2个,C设备1个。

(2)因为模拟系统比较小,因此只要设备表设计合理即可。

(3)采用先来先服务分配策略,采用设备的安全分配方式。

(4)屏幕显示

每个设备是否被使用,哪个进程在使用该设备,哪些进程在等待使用该设备。

三算法及数据结构

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,FirstComeFirstService)分配算法:

每一设备有一队列管理,当多个作业或任务对同一设备提出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,Cnum分别表示设备A,B,C空闲数目

publicenumDeviceType枚举型的数据类型列举出三种设备

publicstructDeviceTable定义一个设备表的结构体

publicclassDevice设备类

publicboolJudgeDevice(DeviceTypetype)检查类型为type的设备是否可用

publicintAllocate(DeviceTypetype)分配设备,返回第几个设备被占用

publicvoidDeAllocate(DeviceTypetype,inta)回收设备

4.4实验部分代码

namespaceWindowsApplication2

{publicpartialclassForm1:

Form

{publicstaticintAnum=3,Bnum=2,Cnum=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

{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>0)

{str=true;

}

break;

}

caseDeviceType.C:

{if(table[2].total>0)

{str=true;

}

break;

}

}

returnstr;

}

//

////////////分配设备,返回第几个设备被占用////////////////////////

//

publicintAllocate(DeviceTypetype)

{intk=0;

switch(type)//使用switch语句选择分配设备不同函数

{caseDeviceType.A:

{table[0].total--;

for(inti=0;i<3;i++)

{if(table[0].useState[i]==0)

{table[0].useState[i]=1;

k=i;

break;

}

}

break;

}

caseDeviceType.B:

{table[1].total--;

for(inti=0;i<2;i++)

{

if(table[0].useState[i]==0)

{table[0].useState[i]=1;

k=i;

break;

}

}

break;

}

caseDeviceType.C:

{table[2].total--;

break;

}

}

returnk;

}

//

//////////////////////////回收设备////////////////////////////

//

publicvoidDeAllocate(DeviceTypetype,inta)

{switch(type)

{caseDeviceType.A:

{table[0].total++;

table[0].useState[a]=0;

break;

}

caseDeviceType.B:

{table[1].total++;

table[1].useState[a]=0;

break;

}

caseDeviceType.C:

{table[2].total++;

table[2].useState[a]=0;

break;

}

}

}

}

publicForm1()

{InitializeComponent();

}

//

/////////////////////分配设备时的颜色变化////////////////////

//

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;

break;

case1:

this.button2.BackColor=Color.Red;

break;

case0:

this.button3.BackColor=Color.Red;

break;

default:

MessageBox.Show("无设备可分配");

break;

}

}

privatevoidbutton8_Click(objectsender,EventArgse)

{Bnum--;

stringresult2="";

Deviced2=newDevice();

intm2=d2.Allocate(DeviceType.B);

switch(Bnum)

{case1:

this.button4.BackColor=Color.Red;

break;

case0:

this.button5.BackColor=Color.Red;

break;

default:

MessageBox.Show("无设备可分配");

break;

}

result2=Convert.ToString(m2);

}

privatevoidbutton9_Click(objectsender,EventArgse)

{Cnum--;

stringresult3="";

Deviced1=newDevice();

intm3=d1.Allocate(DeviceType.C);

if(Cnum==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与设备、设备与设备之间的把并行工作。

通过对这次操作系统课程设计的亲自参与和操作,使我深刻体会到了:

只要你想做只要你想学没有弄不懂得事情,工程里面也不能不在乎细节,等等。

感觉很受益匪浅。

懂得了操作系统包括的四部分内容:

文件管理和用户接口、存储管理、设备管理、进程管理之间的内在联系。

加深了我对这门课程的理解。

锻炼了自己在考虑全局也不是细节的能力。

通过这次实验,再一次熟悉并深入掌握了程序设计语言和界面设计。

同时,我也深深体会到了团队的重要性,如果没有同组人的互相鼓励和督促我跟本不能很快的完成任务。

一滴水的力量是有限的,但汇聚成溪流将是美丽的。

虽然我们每个人的力量都是有限的,但是激烈的讨论、相互的鼓励使我们在实践中成长。

感谢和我一起面对的同伴们,因为有你们我才变得勤奋。

更感谢给予我们谆谆教导的老师,在我们犹豫困惑时给予我们指导,谢谢您!

六参考文献

刘振鹏、王煜、张明《操作系统》(第三版)北京:

中国铁道出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1