计算机操作系统实验讲义.docx
- 文档编号:30084386
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:66
- 大小:49.34KB
计算机操作系统实验讲义.docx
《计算机操作系统实验讲义.docx》由会员分享,可在线阅读,更多相关《计算机操作系统实验讲义.docx(66页珍藏版)》请在冰豆网上搜索。
计算机操作系统实验讲义
《计算机操作系统》实验指导书
曲阜师范大学计算机学院
内容简介
操作系统是计算机教学中最重要的环节之一,也是计算机专业学生的一门重要的专业课程。
操作系统质量的好坏,直接影响整个计算机系统的性能和用户对计算机的使用。
一个精心设计的操作系统能极大地扩充计算机系统的功能,充分发挥系统中各种设备的使用效率,提高系统工作的可靠性。
由于操作系统涉及计算机系统中各种软硬件资源的管理,内容比较繁琐,具有很强的实践性。
要学好这门课程,必须把理论与实践紧密结合,才能取得较好的学习效果。
培养计算机专业的学生的系统程序设计能力,是操作系统课程的一个非常重要的环节。
通过操作系统上机实验,可以培养学生程序设计的方法和技巧,提高学生编制清晰、
合理、可读性好的系统程序的能力,加深对操作系统课程的理解。
使学生更好地掌握操作系统的基本概念、基本原理、及基本功能,具有分析实际操作系统、设计、构造和开发现代操作系统的基本能力。
本书通过操作系统编程接口,提供一些编程指导,以此加深学生对操作系统工作原理的领会和对操作系统实现方法的理解,并且使学生在操作系统层面的程序设计得到基本的训练。
本书提供了操作系统的安装与使用、生产者和消费者的问题、银行家调度算
法、操作系统内存结构、简单文件系统的实现以及操作系统构成实验等6个实验。
本书的使用对象是曲阜师范大学计算机科学与技术专业(本科)的学生,也可作为普通高等院校操作系统实验教学的指导书。
实验一操作系统的安装与使用
1.实验目的
(1)巩固课程中讲授的WINDOWS2000的使用知识,提高学生的WINDOWS2000、WINDOWSXP或WINDOWSSEVER2003等操作系统的实战
演练水平。
(2)熟悉Windows2000等操作系统系统的定制安装过程,明确各安装部件的作用。
要求学生掌握图形用户接口元素和图形用户接口元素的基本操作;熟悉控制面板中各组件的作用及设置;能够了解Windows系统对各种软件资源和硬件资源管理的策略。
(3)结合教材绪论,让学生对WINDOWS系统进程管理、处理机的调度与死锁、存储器管理、设备管理、文件管理以及系统接口有一个感性的认识并熟悉相关操作。
2.实验预备知识
(1)阅读教材第一章(操作系统引论),熟悉操作系统的目标、作用和层次;了解操作系统的发展过程;熟悉操作系统实现的功能(存储器管理功能、处理机管理功能、设备管理功能、文件管理功能以及用户接口);了解操作系统的发展的历史和未来的发展趋势。
(2)完成一本WINDOWS操作系统技术书籍的阅读(根据个人情况任选)。
(3)学习微软认证(MCSE)中有关WINDOWS2000操作系统的知识(通
过课堂补充教授、阅读有关书籍或网上资料)。
3.实验环境
(1)PC计算机;
(2)WINDOWS2000、WINDOWSXP或WINDOWSSEVER2003等操作系统的安装盘。
4.实验时间:
2个机时。
5.实验内容
(1)了解安装WINDOWS2000(或WINDOWSXP、WINDOWSSEVER
2003)的硬件需求;
熟悉安装过程。
熟悉安装过程中各种组件的选择;设置操作系统双重启动;熟悉各种物理设备驱动程序的安装。
(2)熟悉WINDOWS2000的用户界面。
重点掌握各类操作系统的各类用户接口;掌握资源管理器的使用。
(3)掌握对操作系统的配置和维护,掌握控制面板的使用。
掌握安装和删除硬件设备的方法,熟练对打印机、鼠标、键盘、网卡、显示卡、声卡等硬件设备进行配置。
(4)了解网络的配置和网络协议的原理和设置,熟练对计算机进行网络设置。
(5)熟练掌握WINDOWS2000的管理工具。
利用“计算机管理”选项对计
算机进行设置。
“计算机管理工具”为用户提供六种系统工具:
“事件查看器”,
“系统信息”、“性能日志和警报”,“共享文件夹”、设备管理器“和”本地用户
和组。
(6)了解WINDOWS2000活动目录。
目录是一个存储对象信息的分层结构,要求学生掌握配置活动目录的方法。
(7)掌握WINDOWS2000的存储管理。
要求学生掌握以下内容:
WINDOWS
2000的基本存储和动态存储;智能镜像、存储工具、视图的设置和硬盘转换、动态磁盘中的卷以及相关卷的操作、磁盘碎片整理程序。
(8)熟悉用WINDOWS任务管理器来观察计算机的应用程序列表、进程列表以及系统的处理机使用情况、内存分配和使用情况、句柄数、线程数等等。
6.思考
WINDOWS操作系统中如何实现了处理机管理、内存管理、设备管理、文件管理和磁盘管理?
如何操作?
有条件的同学可参阅有关LINUX书籍和上机实践,思考和了解在LINUX操作系统中是如何实现了处理机管理、内存管理、设备管理、文件管理和磁盘管理?
实验二生产者和消费者的问题
1.实验目的
(1)加深对进程概念的理解,明确进程和程序的区别。
(2)进一步认识并发执行的实质。
(3)验证用信号量机制实现进程互斥的方法。
(4)验证用信号机制实现进程同步的方法。
2.实验预备内容
(1)阅读课本有关进程管理以及进程同步的有关章节,对临界区和临界资源概念要清晰,充分理解信号信号量机制。
(2)阅读几种经典进程同步问题的算法并理解。
熟练掌握生产者—消费者的算法思想。
3.实验环境
(1)一台运行Windows2000professional操作系统的计算机。
(2)选用turboc、visualc++、Delphi、c++builder或visualbasic
等任何一种语言。
4.实验时间:
4个机时。
5.实验内容
问题描述:
考虑有一些生产者和消费者进程,生产者进程生产信息并把它们放入缓冲池中,消费者从缓冲池中取走信息。
生产者—消费者问题是相互合作的进程关系的一种抽象,如在输入时,输入进程是生产者,计算进程是消费者;而在输出时,则计算进程是生产者,打印进程是消费者。
请使用信号量机制来解决生产者—消费者问题。
缓冲区
互斥关系:
(I)设缓冲池有n个单元。
(II)当n个单元装满时,生产者必须等待。
(III)当缓冲池空时,消费者必须等待。
6.参考算法
Varmutex,empty,full:
semaphore:
=1,n,0;
buffer:
array[0,,,n-1]ofitem;
in,out:
integer:
=0,0;
生产者进程:
repeat
produceaniteminnextp
wait(empty);
wait(mutex);
buffer(in):
=nextp;
in:
=(in+1)modn;
signal(mutex);
signal(full);
untilfalse;
消费者进程:
repeat
wait(full);
wait(mutex);
nextc:
=buffer(out);
out:
=(out+1)modn;
signal(mutex);
signal(empty);
consumetheiteminnextc
wait(S)操作:
S=S-1;
若S>=0,则进程继续运行。
若S<0,则该进程被阻塞,并将它插入该信号量的等待队列中。
Signal(S)操作:
S=S+1;
若S>0,则进程继续执行;
若S<=0,则从信号量等待队列中移处第一个进程,使其变为就绪状态,然后再返回原进程继续执行。
7.实验要求
在程序编制中,应有数据显示,最好采用图形界面显示。
生产者和消费者的进程采用程序模拟的方法运行。
实验三银行家调度算法
1.实验目的
(1)使学生加深对死锁的理解,理解预防死锁的思想和方法,使学生明确系统安全状态的概念。
(2)使学生能利用银行家调度算法实现避免死锁。
2.实验预备内容
阅读死锁的基本概念,产生死锁的原因、产生死锁的必要条件以及处理死锁的基本方法,重点阅读关于死锁避免的章节。
3.实验环境
(1)一台运行Windows2000professional操作系统的计算机。
(2)选用turboc、visualc++、delphi、c++builder或visualbasic
等任何一种语言,建议用c++。
4.实验时间:
4个机时。
5.实验内容
(1)设置银行家算法中的数据结构
(a)可利用资源向量Available
它是一个含有m个元素的数组,其中的每一个元素代表一类可利用资源的数目,其初始值是系统中所配置该类全部可用资源数目。
其数值随该类资源的分配和回收而动态地改变。
如果Available[j]=k表示系统中现有Rj类资源k个。
(b)最大需求矩阵Max
这是一个mn的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。
如果Max(i,j)=k,表示进程i需要Rj类资源的最大数目为k。
(c)分配矩阵Allocation
这是一个mn的矩阵,它定义了系统中每一类资源当前已分配该每一进程的资源数。
如果Allocation(i,j)=k,表示进程i当前已分得Rj类资源的数目为k。
(d)分配矩阵Need
这是一个mn的矩阵,用以表示每一个进程尚需的各类资源数。
如果Need(i,j)=k表示进程i还需要Rj类资源k个,方能完成其任务。
上述三个矩阵存在如下关系:
Need(i,j)=Max(i,j)-Allocation(i,j)
(2)银行家算法
设Requesti是进程Pi的请求向量。
如果Requesti[j]=k,表示进程Pi需
要k个Rj类的资源。
当Pi发出资源请求后,系统按下述步骤进行检查:
①如果RequestiNeedi,则转向步骤②;否则,认为出错,因为它所需要
的资源数已超过它所宣布的最大值。
②如果RequestiAvailable,则转向步骤③;否则,表示系统中尚无足够
的的资源,Pi必须等待。
③系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值:
Available
:
Available-
Requesti;
Allocation
i:
Allocation
i
Requesti
;
Needi:
Needi-Requesti;
④系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。
若安全,才正式将资源分配给进程Pi,以完成本次分配;否则,将试探分配作废,
恢复原来的资源分配状态,让进程Pi等待。
(3)安全性算法
系统所执行的安全性算法描述如下:
①设置两个向量
(a)工作向量Work。
它表示系统可提供给进程继续运行所需要的各类资源数目,它含有m个元素,执行安全算法开始时,Work:
=Available。
(b)Finish。
它表示系统是否有足够的资源分配给进程,使之运行完成,开始
时先做Finish[i]:
=false;当有足够资源分配给进程时,令
Finish[i]:
=true。
②从进程集合中找到一个能满足下列条件的进程:
(a)Finish[i]:
=false
(b)NeediWork
如找到,执行步骤③;否则执行步骤④。
③当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,
故应执行:
Work:
=Work+Allocationi;
Finish[i]:
=true;
gotostep
(2)
④如果所有进程的Finish[i]:
=true,则表示系统处于安全状态;否则,系统处于不安全状态。
6.参考算法
#include
#include
#include
#include"windows.h"
#defineMAX_PROCESS32
//最大进程数
#defineMAX_COURCE64
//最大资源类别
intMAX_FACT_PROCESS;
//实际总进程数
intMAX_FACT_COURCE;
//实际资源类别数
intAvailable[MAX_COURCE];
//可利用资源向量
intMax[MAX_PROCESS][MAX_COURCE];
//最大需求矩阵
intAllocation[MAX_PROCESS][MAX_COURCE];
//分配矩阵
intNeed[MAX_PROCESS][MAX_COURCE];
//需求矩阵
intRequest_PROCESS;
//发出请求的进程
intRequest_COURCE;
//被请求资源类别
intRequest_COURCE_NEMBER;
//请求资源数
structCOMP{
intvalue;
intnum;
intnext;
};
intflag=0;
voidRead_Initiate(void){//读入初始化文档ifstreaminfile("Initiate.txt");
if(!
infile){
cout<<"不能打开输入文件:
"<<"Initiate.txt"<<'\n';
exit
(1);
}
cout<<"开始读入初始化文档"<<'\n';
intch;
intArray[MAX_PROCESS*MAX_COURCE*2];
intnum=0;
while(infile>>ch)
Array[num++]=ch;
num=0;
MAX_FACT_COURCE=Array[num++];
for(intj=0;j Available[j]=Array[num++]; MAX_FACT_PROCESS=Array[num++]; for(inti=0;i for(intj=0;j Max[i][j]=Array[num++]; } infile.close(); } voidWrite_Initiate(void){ //写入初始化文档 (分配资源 ofstreamoutfile("Initiate.txt"); if(! outfile){ cout<<"不能打开初始化文档: "<<'\n'; exit (1); } intArray[MAX_PROCESS*MAX_COURCE*2]; intnum=0; Array[num++]=MAX_FACT_COURCE; for(inti=0;i Array[num++]=Available[i]; Array[num++]=MAX_FACT_PROCESS; for(i=0;i for(intj=0;j Array[num++]=Max[i][j]; num=0; outfile< for(i=0;i outfile< outfile<<'\n'< for(i=0;i for(intj=0;j outfile< outfile< } DWORDm_delay=3000; Sleep(m_delay); outfile.close(); cout<<"修改初始化文档成功! "< } voidAllocated_list(void){ ifstreaminfile("Allocated_list.txt"); if(! infile){ //读入已分配资源列表 cout<<"不能打开输入文件: "<<"Allocated_list.txt"<<'\n'; exit (1); } cout<<"开始读入已分配资源列表"<<'\n'; intch,num=0; intArray[MAX_PROCESS*MAX_COURCE]; while(infile>>ch) Array[num++]=ch; num=0; for(inti=0;i for(intj=0;j Allocation[i][j]=Array[num++]; infile.close(); } voidSet_Need(void){cout<<"设置需求矩阵"<<'\n'; //设置需求矩阵 for(inti=0;i for(intj=0;j Need[i][j]=Max[i][j]-Allocation[i][j]; } voidRead_Request(void){ ifstreaminfile("Request_list.txt"); if(! infile){ //读入请求向量 cout<<"不能打开输入文件: "<<"Request_list.txt"<<'\n'; exit (1); } cout<<"开始读入请求向量"<<'\n'; intArray[3]; intnum=0,ch; while(infile>>ch) Array[num++]=ch; Request_PROCESS=Array[0]; Request_COURCE=Array[1]; Request_COURCE_NEMBER=Array[2]; infile.close(); } voidWrite_Allocation(void){ //修改资源分配列表 (资源分配) ofstreamoutfile("Allocated_list.txt"); if(! outfile){ cout<<"不能打开资源分配列表: "<<'\n'; exit (1); } for(inti=0;i for(intj=0;j outfile< outfile< } DWORDm_delay=3000; Sleep(m_delay); cout<<"修改资源分配列表成功 outfile.close(); } ! "< voidAllocate_Source(void){//开始分配(已通过扫描和安全性检测)cout<<'\n'<<"开始给第"< "< <<"类资源"< Write_Allocation(); DWORDm_delay=3000; Sleep(m_delay); cout<<'\n'<<"祝贺您,资源分配已成功! "< } voidTest_Safty(){//安全性检测 cout<<'\n'<<"进入安全性检测! "< intWork[MAX_COURCE]; for(inti=0;i Work[i]=Available[i]; } boolFinish[MAX_PROCESS][MAX_COURCE]; for(i=0;i for(intj=0;j Finish[i][j]=false; COMPArray[32]; for(i=0;i { Array[i].value=Need[i][Request_COURCE-1]; Array[i].num=i; } for(i=0;i for(intj=i+1;j if(Array[i].value>=Array[j].value){ intt; t=Array[j].value; Array[j].value=Array[i].value; Array[i].value=t; t=Array[j].num; Array[j].num=Array[i].num; Array[i].num=t; } elsecontinue; } DWORDm_delay=3000; Sleep(m_delay); /*for(i=0;i for(intj=0;j cout< cout< } */ if(Finish[Request_PROCESS-1][Request_COURCE-1]==false&&Need[Request_PROCESS-1][Request_COURCE-1]<=Work[Request_COURCE-1]) { Work[Request_COURCE-1]=Work[Request_COURCE-1]+Allocation[Request_PROCESS-1][Request_COURCE-1]; Finish[Request_PROCESS-1][Request_COURCE-1]=true; } else { cout<<"未通过安全性测试,不与以分配"< exit(0); } for(i=0;i if(Array[i].num==Request_PROCESS-1) continue; if(Arra
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 操作系统 实验 讲义