操作系统实验指导书4.docx
《操作系统实验指导书4.docx》由会员分享,可在线阅读,更多相关《操作系统实验指导书4.docx(29页珍藏版)》请在冰豆网上搜索。
![操作系统实验指导书4.docx](https://file1.bdocx.com/fileroot1/2023-2/7/408c7706-4c0a-427c-b093-dff305d7f3d1/408c7706-4c0a-427c-b093-dff305d7f3d11.gif)
操作系统实验指导书4
《计算机操作系统》
实验指导书
第四版
作者:
田卫东、刘晓平、李琳、孙晓
第一章实验预备
第一节概述
<<计算机操作系统>>是计算机科学与技术专业主要专业基础课程之一,以操作系统的基本概念,原理和重要算法为主要讲述内容。
由于教材侧重于从理论的角度来介绍现代操作系统的核心技术内容,长篇论述较多,因此课程内容深,难度大。
学生普遍反映本课程难学难懂,甚至有的学生认为学好本课的关键就是死记硬背,从而走向歧路。
由此可见,为课程设计一套完善的实验,将课程中的重点、难点内容通过实验直观地呈现在学生面前,达到操作系统理论和实际相结合,抽象原理和具体运用相结合,最终起到加快学生理解和掌握课程内容的目的。
正是在这种背景下,作者结合自己几年从事<<计算机操作系统>>课程教学的经验,精心撰写了这本操作系统实验指导书,并编写部分程序作为实验工具。
本实验指导书内容分实验预备、实验安排两部分。
实验预备介绍进入实验之前的预备知识和有关实验的总体概况,实验安排是本指导书主体部分,具体规定各实验的详细内容和要求。
目前本实验指导书安排实验6个,涵盖了操作系统的主要内容,如下所示:
实验一
DOS/Win2000/WinXP操作系统
实验二
进程调度算法
实验三
银行家算法
实验四
动态分区管理模拟
实验五
页面置换算法
实验六
UNIX磁盘空间管理方法:
成组链接法
第二节实验环境
一、操作系统环境
本课程实验的对象是操作系统,实验前必需准备好相应的操作系统软件。
由于操作系统软件的特殊性,无法象其它软件一样随时卸载和重装,因此从操作系统的应用范围、性能、价格和可获得性等因素出发,本指导书选择使用广泛的商业软件MS-DOS和Win2000/WinXP作为实验操作系统,其中MS-DOS为单用户单任务操作系统,而Win2000/WinXP为单用户多任务操作系统。
有条件的读者可以选用UNIX/LINUX/XENIX或其它主机系统作为实验环境。
二、编程环境
本书实验所用编程语言为C/C++语言。
如果操作系统平台为Win2000/WinXP,请使用MicrosoftVisualC++5.0,如为DOS,则请使用BorlandC/C++3.1或TurboC2.0.对于没有学过C/C++语言的同志,可选择BorlandTurboPascal4.0作为编程语言,选作可用pascal进行编程的实验。
下面仅介绍MicrosoftVisualC++5.0和BorlandC/C++3.1环境的使用方法。
(一)BorlandC/C++3.1
BorlandC/C++是美国Borland公司推出的系列编程语言之一,最初流行的版本为TurboC1.0/1.5/2.0,后来引入C++,改名为TurboC/C++1.0/2.0,BorlandC/C++3.0是完全基于MS-DOS环境的最后一个C/C++编程环境,具有强大的集程序编辑、编译、链接、调试、运行为一体的集成环境,因此使用非常方便。
1.启动BorlandC/C++3.1
单机环境下:
C:
\>CDBORLANDC
C:
\>BORLANDC
注意如果BorlandC/C++3.1安装的目录不是C:
\BORLANDC,应该使用相应的目录。
联网环境下:
需要先在NetWare网络上注册工作站,之后运行系统批处理程序:
F:
LOGIN>TC30(或TC31)
BorlandC/C++3.1集成环境如图所示。
2.BorlandC/C++3.1的集成环境
BorlandC/C++3.1集成环境包括主菜单,编辑窗口和热键区三部分。
主菜单位于屏幕的最上方,列出了集成环境的所有命令,命令分组列出,包括File,Edit,Search,Run,Compile,Debug,Project,Options,Window,Help等。
编辑窗口可以同时打开多个,每个窗口用于对一个源程序文件进行编辑,编辑窗口也可用来显示与当前程序有关的信息。
热键区列出了集成环境提供的热键,使用热键主要是为了省去查找菜单的麻烦,加快操作速度,每个热键所代表的功能都可以从菜单上找到。
常见的热键包括F1帮助,F2存盘,F3打开,Alt-F9编译等。
(1)常用编辑功能介绍
光标移动:
使用光标键←、↑、→、↓一次移动一个字符位置;
使用键Home将光标定位到本行行首,End键将光标定位到本行行末;
使用键PageUp向上翻一页,PageDown向下翻一页;
插入:
将光标定位到要插入字符的位置,保证当前编辑状态为插入态(使用Insert键在插入态和修改态之间切换),键入字符,字符就依次插入到光标所在位置,光标之后的字符将依次向后移动。
修改:
将光标定位到要插入字符的位置,保证当前编辑状态为修改态(使用Insert键在插入态和修改态之间切换),键入字符,光标之后的字符就依次被新键入的字符所修改。
删除:
删除光标之后的字符请按键Delete或Del;
删除光标之前的字符请按键Backspace;
删除光标所在行请按热键Ctrl-Y;
块定义
块是一段连续的字符串文本,BorlandC/C++编辑器可以块为单位来进行文本的拷贝、移动和删除操作。
一个块的定义包括块首和块尾的指定。
将光标移动到块首位置,按下Ctrl-K-B,定义块首;将光标移动到块尾位置,按下Ctrl-K-K,定义块尾;
块拷贝
定位光标到要放置块的地方,按下Ctrl-K-C,块的内容将被复制到此处。
块移动
定位光标到要放置块的地方,按下Ctrl-K-V,块的内容将被复制到此处,同时原来的块将被删除。
块删除
按下Ctrl-K-Y,删除块。
查找字符串
按下Ctrl-Q-F,在弹出的FindText窗口中输入要查找的字符串,并设置查找选项,按下OK按钮,编辑器就会定位光标到该字符串首次出现的位置。
按下Ctrl-L,编辑器定位光标到该字符串下一个出现的位置。
替换字符串
按下Ctrl-Q-A,在弹出的ReplaceText窗口中输入要被替换的字符串和替换后的字符串,并设置替换选项,按下OK按钮,编辑器就会开始替换字符串。
(2)项目(Project)管理
BorlandC/C++3.1与其早期版本不一样的地方是全面引入了程序开发的项目思想。
BorlandC/C++3.1将一套软件的开发称为一个项目,项目包括了一套软件开发所需的所有源程序、库文件和相关的编译、链接选项。
每个项目由一个项目文件来记录所有这些信息,因此使用BorlandC/C++3.1集成环境开发程序,首先需要建立一个新项目。
软件开发项目的引入使得对软件开发的管理变得较为容易,便于组织大型软件项目的开发。
3.BorlandC/C++3.1使用实例
下面示出一个简单程序的开发过程。
(1)启动BorlandC/C++3.1:
F:
LOGIN>TC30
(2)建立新项目
选择菜单:
Project->OpenProject
在弹出的对话框中输入项目文件名称Project1
(3)建立源程序文件
选择菜单:
File->New
在编辑窗口中输入下述内容:
#include
main()
{
printf("Hello,world.");
}
将此文件存盘,名称为C:
\First.CPP
(4)将刚建立的源程序加入到项目Project1
激活项目窗口,按键Insert,在弹出的AddToProjectList窗口中,输入文件C:
\First.CPP,按OK按钮结束。
(5)编译链接
按键F9;
(6)运行
按键Ctrl-F9;
(7)调试
如果程序运行出错,可以使用BorlandC/C++强大的调试功能进行调试。
方法如下:
a.设置断点移动光标到怀疑出错的程序行,按Ctrl-F8设置断点;
b.执行程序按下Ctrl-F9执行程序,程序执行到设置了断点的语句处会停下来;
c.查看变量值按下Ctrl-F7,输入变量名,将该变量放入观察窗口,检验其值;
d.程序继续执行按下Ctrl-F9继续执行程序;
e.反复执行a~d,直至程序运行正常为止。
4.退出BorlandC/C++3.1
选择菜单File->Quit或用热键Alt-X退出集成环境。
(二)MicrosoftC/C++5.0/6.0
MicrosoftVisualC/C++可以开发不同类型的程序,读者应根据自己的实际情况选择应用程序类型。
熟悉Windows编程的可选MFCAppWizard(exe),不熟悉的请选用Win32ConsoleApplication。
MicrosoftVisualC/C++的使用较复杂,详细的使用方法请参见有关书籍和联机帮助。
下面仅简单介绍使用一下利用MicrosoftVisualC/C++5.0/6.0开发Win32ConsoleApplication应用程序的过程。
1.启动MicrosoftVisualC/C++5.0/6.0
双击图标:
MicrosoftVisualC/C++5.0/6.0
或选择菜单:
MicrosoftVisualC/C++5.0/6.0
2.建立新项目Exp1
选择菜单:
File->New
弹出对话框见图:
选择页面标签:
Project。
选择应用程序类型:
Win32ConsoleApplication
选择项目位置:
C:
\TEMP
输入应用程序名称:
Exp1
点击OK按钮,VC系统自动产生一个新项目Exp1;
3.建立源程序maic.cpp:
选择菜单:
File->New
弹出对话框见上图。
选择页面标签:
Files。
选择文件类型:
C/C++SourceFile
选择项目位置:
C:
\TEMP
输入文件名:
main
注意选择AddToProject标签,在其前面添加“”符号。
点击OK按钮,VC系统自动产生一个新文件main.cpp,并将其加入项目Exp1中;
4.编辑源程序
在窗口main.cpp中,键入如下程序代码:
#include"iostream.h"
main()
{
inti,j;
cout<<"输入数i:
";
cin>>i;
cout<<"输入数j:
";
cin>>j;
cout<<"输入结果为:
";
cout<
}
选择菜单File->SaveAll存盘。
5.编译、链接
选择菜单Build->RebuildAll
强迫编译链接本项目所有的源程序。
6.运行
按Ctrl-F5或选择相应菜单运行应用程序。
7.调试
程序执行如果出现错误,可以使用VC进行调试,方法如下。
a.设置程序断点移动光标到需要查看中间结果的语句,单击鼠标右键,并从弹出的菜单上选择Insert/RemoveBreakpoint,VC将在该行前加符号。
b.进入调试状态按F5执行程序,程序将在设置了断点的语句前停下来。
c.查看变量的值移动鼠标到要查看的变量上方,略停一会,该变量的值会自动显示出来。
d.继续执行程序按F10/F11/F5继续执行程序。
第二章实验安排
实验一DOS/Win2000/WinXP操作系统
一、实验目的
DOS和Windows2000/XP是目前使用广泛的桌面操作系统,本实验的目的就是让读者从操作系统理论的观点来重新认识它们,从而加深对教材上有关内容的理解。
二、实验原理
(一)MS-DOS简介
MS-DOS是Microsoft公司80年代初推出的单用户单任务操作系统,由于性能和移植性较好,因此应用范围非常广。
MS-DOS是采用字符界面的操作系统,人机接口为命令行界面。
没有进程的并发执行能力,但允许多个进程同时驻留在内存中,也允许进程创建自己的子进程,父子进程之间采用串形方式执行。
MS-DOS的内存管理较简单,类似于分区分配管理,但没有虚拟存储器能力,应用程序的长度受640K内存的限制。
MS-DOS的文件系统使用FAT系统,仅有简单的文件保护功能。
实际上从现代操作系统理论的来看,MS-DOS不能算是一个现代化的操作系统,但正因为他简单,所以也便于我们在其上进行一些其它操作系统所不允许的操作,如直接操作计算机硬件等。
目前,单独使用MS-DOS的计算机已经很少,读者可以使用Win2000/XP的MS-DOS盒应用程序来进入MS-DOS模拟环境。
(二)Win2000/WinXP简介
MicrosoftWindows2000/XP是Microsoft公司90年代中后期推出的单用户多任务操作系统,由于具有良好的用户界面,强大的连网和多媒体功能,因而成为当前最流行的桌面操作系统。
Win2000/XP的用户界面为GUI,即图形用户界面,使用图形图象作为计算机和人之间的信息交流手段。
用户无需记忆大量的命令及格式,使用较方便。
Win2000/WinXP具有相当完善的多进程并发执行能力,而且在内核级直接支持线程,可实现线程间的并发执行。
Win2000/WinXP的线程消耗资源较少,通过增加线程的并发数目,可以有效地增强计算机的处理能力。
Win2000/WinXP的内存管理功能较复杂,实现了教材上介绍的页式和段式存储管理功能,具有强大的虚拟存储能力。
应用程序不再有640K的大小限制,即使在小内存机器上也可运行大型的应用程序。
Win2000/WinXP的文件系统仍然使用FAT系统。
新型FAT32文件系统使用4个字节来标志一个磁盘簇,磁盘簇的总数可达232(4G)个。
目前硬盘的容量均在2000G以下,因此可以一个簇代表一个磁盘扇区,大大减少磁盘存储空间的分配粒度,提高磁盘的利用率。
新型FAT文件系统还支持长文件名,可以给文件起一个更具描述性的名称,方便使用。
(三)进程查看程序:
PPview.exe
进程查看程序能列出当前Windows环境下正在执行的进程和线程信息,包括进程和线程的标志符、名称、文件名、执行时间、优先级等信息。
其用户界面参见下图:
(四)多进程并发演示程序:
MultiProc.exe
多进程并发演示程序向我们展示了Windows环境下的多线程特征。
该应用程序提供三种线程,一种线程在窗口中画直线,一种画填充的矩形,还有一种画填充的圆形。
每一种线程可以以任意数目同时运行。
有兴趣的读者可以同时执行上千个线程,以检测一下自己计算机性能的极限。
下图是该程序某时刻的运行状态。
(五)进程/线程优先级和互斥演示程序:
PPriority.exe
本程序用于演示Windows环境下进程/线程的互斥和优先级特征。
程序内部提供两个线程,两个线程共享变量count;一个线程用于计算数,总是执行count++;另一个线程用于显示该数,总是将count变量转换为字符串并添加到结果列表框中;下图是该程序在某时刻的运行状态。
三、实验内容
(一)MS-DOS的命令接口
熟悉md,cd,rd,copy,move,del,deltree,type等常见DOS命令的使用
a.在当前目录下建立子目录MYTEMP和MYTEMP2,将当前目录设定为MYTEMP;
b.在当前目录下创建新文件B.BAT,其内容为:
清除屏幕内容,显示当前DOS版本号;
c.使用type命令显示B.BAT的内容,检查正确后,执行它;
d.拷贝B.BAT到路径MYTEMP2中;
d.删除MYTEMP2中的文件B.BAT,删除目录MYTEMP2
e.使用deltree命令删除MYTEMP
(二)MS-DOS的进程管理
1.运行编辑程序EDIT,可以同时再运行其它命令(如DIR)吗?
2.执行如下管道和换向命令:
a.C:
\>dir>dir.lst
b.C:
\>typedir.lst|more
c.C:
\>dir|FIND"
"d.C:
\>dir*.*|SORT/+14
e.C:
\>dir|SORT>SORT.DIR
观察执行结果
3.将当前目录换为系统目录,比如说F:
\SYSTEM,再重新执行2;
这次执行的结果和上次相同吗?
想想为什么?
(三)Win2000/XP的用户接口
启动Windows资源管理器,完成
(一)中实验,体会两者有何区别。
(四)Win2000/XP的进程管理
1.启动PPview.exe程序,记录当前系统都有哪些进程,哪些进程是多线程程序。
2.启动MultiProc.exe程序,任意几个启动画线、圆和矩形的线程,观察线程的并发执行。
此时PPview.exe的显示有和改变?
2.启动PPriority.exe程序,注意观察:
a.当不选取互斥选项时,列表框中的数字有何特征?
b.当选取互斥选项后,列表框中的数字有何特征?
c.提高计算线程的优先级,列表框中的数字有何特征?
d.提高显示线程的优先级,列表框中的数字有何特征?
e.再运行PPriority.exe程序的一份拷贝,即创建PPriority.exe的第二个进程,调整这两个进程的优先级,两进程执行有何特点?
(五)回答问题
通过以上实验内容,回答下面问题:
1.MS-DOS属于什么类型的操作系统?
2.MS-DOS的用户界面属于教材上介绍的哪一种?
其进程管理有什么特点?
3.解释实验
(二)3结果出现的原因。
4.Win2000/XP属于何种类型的操作系统?
5.Win2000/XP的用户界面属于教材上的哪一种?
具有什么特点?
6.Win2000/XP的进程/线程管理具有什么特点?
进程/线程具有几种优先级?
7.你的计算机在线程数目达到多少时,计算机就很慢了?
实验二进程调度算法
一、实验目的
调度的实质是操作系统按照某种特定的分配策略来分配资源,在操作系统中调度分三级,高级调度、中级调度和低级调度,其中执行最频繁的是低级调度,也就是进程调度,目的是分配CPU。
由于进程调度程序执行的频率很高,因此调度算法的好坏将直接影响到操作系统的性能。
本实验的目的是自己编程实现教材上介绍的几种常见进程调度算法,通过对几组进程执行序列分别使用不同的调度算法,计算出进程的平均周转时间和平均带权周转时间,比较各种算法的性能优劣。
二、实验原理
实际的操作系统在实现进程调度时常用的CPU分配策略又分非抢占式和抢占式两种方式。
使用非抢占式分配方式时,一旦把处理机分配给某进程后,便让该进程一直执行,直至该进程完成或发生某事件而阻塞时,才再把处理机分配给其它进程,不允许进程强占已经分配出去的处理机。
采用抢占分配方式时,允许调度程序根据某种原则,如时间片原则,优先权原则等,去停止某个正在执行的进程,将已经分配给该进程的处理机重新分配给其它的进程。
本实验算法除特殊说明的之外,都采用非抢占式分配。
(一)进程调度算法
常见的进程调度算法分先来先服务调度算法,短进程优先算法,时间片轮转算法,优先权调度算法,高响应比优先调度算法,多级队列调度算法和多级反馈队列调度算法等7种,本实验对前3种算法进行编程。
1.先来先服务(FCFS)调度算法
此种算法在进行调度时,总是选择一个最先进入进程就绪队列的进程,把处理器分配给它,使之开始运行。
该进程一直运行到完成或发生阻塞事件时,才放弃处理机。
2.短进程优先(SPF)调度算法
此种算法在进行调度时,总是在进程就绪队列中选择一个估计运行时间最短的进程,把处理器分配给它,使之开始运行。
该进程一直运行到完成或发生阻塞事件,才放弃处理机。
3.时间片轮转调度算法
在需要保证响应时间的场合通常采用时间片轮转算法来分配CPU。
此种算法将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时把CPU分配给队首进程,令其执行一个时间片。
时间片的大小从几ms到几百ms不等。
时间片用完,调度程序自动停止该进程的执行,将它放到进程就绪队列的末尾,等待下一次执行。
然后将CPU分配给就绪队列中的新队首进程,也让它执行一个时间片。
这样就可以保证所有进程都能在有限的时间内得到运行。
(二)衡量算法性能的参数
平均周转时间:
平均带权周转时间:
其中:
Ti为第i个进程的周转时间
Tsi为第i个进程要求执行的时间
三、实验内容
(一)编程模拟先来先服务算法
要求:
1.能预先输入或随机产生进程信息。
每个进程的描述信息包括:
进入就绪队列时间;
进程执行时间;
随机产生进程信息时,要求在进程执行过程中不断产生新的进程,模拟实际操作系统的运行。
2.使用键盘或时钟中断来模拟时间的流逝
本实验需要对模拟算法的执行计时,因此程序应该提供定量计算时间的方法,一种最简单的方法是使用键盘,比如每敲一次空格代表一个时间单位。
另一种方法是使用时钟中断,这需要在程序中截获时钟中断。
使用VisualC/C++的MFCAppWizard(exe)应用程序类型时,可以响应窗口的WM_TIMER消息获得时间。
使用DOS下的BorlandC/C++时,需要截获INT1CH或INT08H时钟中断。
3.一组进程序列执行完毕,应该打印出结果信息
程序需要计算出每个进程的开始执行时间,结束时间,周转时间,带权周转时间,并为整个进程序列计算平均周转时间和平均带权周转时间。
将计算结果按一定的格式显示在计算机屏幕上。
(二)编程模拟短进程优先算法
要求:
1.能预先输入或随机产生进程信息。
每个进程的描述信息包括:
进入就绪队列时间;
进程执行时间;
随机产生进程信息时,要求在进程执行过程中不断产生新的进程,模拟实际操作系统的运行。
2.使用键盘或时钟中断来模拟时间的流逝
本实验需要对模拟算法的执行计时,因此程序应该提供定量计算时间的方法,一种最简单的方法是使用键盘,比如每敲一次空格代表一个时间单位。
另一种方法是使用时钟中断,这需要在程序中截获时钟中断。
使用VisualC/C++的MFCAppWizard(exe)应用程序类型时,可以响应窗口的WM_TIMER消息获得时间。
使用DOS下的BorlandC/C++时,需要截获INT1CH或INT08H时钟中断。
3.一组进程序列执行完毕,应该打印出结果信息
程序需要计算出每个进程的开始执行时间,结束时间,周转时间,带权周转时间,并为整个进程序列计算平均周转时间和平均带权周转时间。
将计算结果按一定的格式显示在计算机屏幕上。
(三)时间片轮转调度算法
要求:
1.能预先输入或随机产生进程信息。
每个进程的描述信息包括:
进入就绪队列时间;
进程执行时间;
随机产生进程信息时,要求在进程执行过程中不断产生新的进程,模拟实际操作系统的运行。
2.时间片模拟
本实验需要对模拟计算机的时间片,最简单的方法是使用键盘,比如每敲一次空格代表一个时间片。
另一种方法是使用时钟中断,这需要在程序中截获时钟中断。
使用VisualC/C++的MFCAppWizard(exe)应用程序类型时,可以响应窗口的WM_TIMER消息获得时间。
使用DOS下的BorlandC/C++时,需要截获INT1CH或INT08H时钟中断。
3.一组进程序列执行完毕,应该打印出结果信息
程序需要计算出每个进程的开始执行时间,结束时间,周转时间