操作系统实验指导书.docx
- 文档编号:9249324
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:56
- 大小:332.26KB
操作系统实验指导书.docx
《操作系统实验指导书.docx》由会员分享,可在线阅读,更多相关《操作系统实验指导书.docx(56页珍藏版)》请在冰豆网上搜索。
操作系统实验指导书
操作系统实验指导书
高文宇
gwy@
广东商学院信息学院
2012年3月
目录
操作系统实验指导书1
实验一Linux基本命令3
实验二Linux文档编辑器Vi的使用8
实验三Linux系统管理实践10
实验四进程控制16
实验五高响应比优先算法20
实验六EDF算法模拟21
实验七管道通信22
实验八进程同步
(1)29
实验九进程同步
(2)35
实验十Linux中的线程37
实验十一LRU算法模拟45
实验十二磁盘调度算法模拟46
实验一Linux基本命令
一、实验目的与要求
(1)体会多用户、多任务网络操作系统Linux的工作特点;
(2)理解操作系统的分类、相关概念和资源管理功能。
二、预备知识
(1)Linux命令的格式
bash命令的一般格式是:
命令名[选项][参数1][参数2]…
例如:
cp–ffile1.cmyfile.c
需要注意的是:
命令名必须是小写的英文字母
一般格式中由方括号括起来的部分是可选的
选项以“-”开始,多个选项可用“-”连起来
命令行的参数提供命令运行的信息或者命令执行过程中所使用的文件名
如果命令行中没有提供参数,则命令使用标准文件进行输入/输出
命令在正常执行后返回一个0值,表示执行成功
Linux操作系统的联机帮助对每个命令的准确语法都做了说明
(2)Linux的联机帮助命令—man
三、实验内容
(1)登录、退出和关机
1、超级用户与普通用户
超级用户是对系统的一切资源均具有访问权限的用户,即系统管理员,用户名为:
root,命令提示符为:
#;
普通用户由超级用户创建和删除,仅具有超级用户指定的访问权限,命令提示符为:
$。
超级用户和普通用户可以相互切换;要养成用普通用户登录、使用系统的习惯。
2、登录
开机启动后,系统提示:
Login:
用户名
Password:
口令
输入超级用户名root,出现提示符:
#;输入普通用户名,出现提示符:
$。
在提示符后就可以输入各种Linux命令了。
3、创建和删除用户
必须在超级用户下完成。
创建新用户:
#useradd用户名
创建/修改口令:
#passwd口令
删除用户:
#userdel–r用户名
4、用户切换
普通用户切换到超级用户:
$su
password:
口令
超级用户切换到普通用户:
#su普通用户名
5、退出
为避免其他用户非法盗用自己的用户名,停止使用系统时要退出。
退出系统有很多方法:
可以在命令提示符下键入exit或logout命令,也可以使用组合键Ctrl+d。
6、关机
普通用户没有关机权限,只有超级用户才能关闭系统。
关机方式有命令方式和组合键Ctrl+Alt+Del两种方式,可以使用halt或shutdown命令:
#halt
(显示Systemhalted时才可以关闭电源)
#shutdown(系统默认2分钟后关机)
shutdown–hnow(系统立即关机)
shutdown–rnow(系统立即重新开机)
shutdown–h20:
25(系统将在20:
25分关机)
shutdown–h+10(系统在10分钟后关机)
(2)常用命令的使用
1、ls命令
功能:
查看指定目录下的文件和目录。
格式:
ls[options][filename/dirname…]
常用选项说明:
-a显示所有文件和目录,包括隐含文件
-l显示文件的完整信息
-f对文件添加一特定后缀字符指出其类型
/子目录
*可执行文件
无普通文件
.开头隐含文件
-r将文件以相反次序显示
-t将文件以建立时间先后列出
-R若目录下有文件,则文件也依序列出
示例:
ls–ltrs*
将当前目录下所有以s开头的文件按建立时间的逆序列出完整信息
ls–lR\bin
将\bin目录下所有目录及文件的详细信息列出
ls–alf
将当前目录下包括隐含文件在内的所有文件信息完整列出,并在文件名后添加特殊后缀以表示文件类型
2、man命令
功能:
查看某个命令的使用方法。
格式:
man命令名
3、clear命令
功能:
清屏。
格式:
clear
4、cat命令
功能:
显示或链接ASCALL文件。
格式:
cat文件名
示例:
cattext
显示text的文件内容
catfile1file2
依次显示file1和file2的内容
catfile1>>file2
将file1的内容附加到file2后面,但file1仍存在
cat>file1
将键盘输入(以Ctrl+c结束)的内容输出到file1
5、pwd命令
功能:
显示当前目录。
格式:
pwd
6、cd命令
功能:
进入或修改指定的目录。
格式:
cd目录名
7、mkdir命令
功能:
建立新的目录。
格式:
mkdir新的目录名
8、rmdir命令
功能:
删除空目录。
格式:
rmdir空目录名
9、rm命令
功能:
删除指定的文件或目录。
格式:
rm[options][filename/dirname…]
常用选项说明:
-i删除前逐一询问确认
-f即使文件属性为只读,也直接删除无需确认
-r将指定目录下的所有文件及子目录一并删除
-v显示指令执行过程
示例:
rm–i*.c
删除C语言程序文件,删除前逐一询问确认
rm–rfinished
删除finished子目录及子目录中的所有文件
10、du命令
功能:
显示当前目录所占用的硬盘空间。
格式:
du–abC目录/文件名称
选项说明:
-a表示要显示所有目录及每个目录所占用的空间,单位是Kb
-b表示显示空间大小的单位是byte
-C表示显示一个目录的总空间的大小
不加任何参数,则显示当前目录下各目录占用的空间及所有文件所占总空间
11、df命令
功能:
查看硬盘目前所剩的空间。
格式:
df
12、cp命令
功能:
复制文件或目录。
格式:
cp–r源文件/目录名目标文件/目录名
示例:
cpfile1.cfile2.doc
将file1.c复制为file2.doc
cp–r/tmp//abc/
将tmp子目录中的文件及下属子目录一同复制到abc子目录
13、mv命令
功能:
移动文件或目录。
格式:
mv源文件/目录名目标文件/目录名
14、more命令
功能:
按页查看指定的文件。
格式:
more[options][filename…]
常用选项说明:
-num一次显示的行数
+num从第num行开始显示
-d在屏幕下方显示提示信息[Pressspacetocontinue,qtoquit.]
-l取消遇见特殊字符^L时会暂停的功能
-f计算行数时按实际的行数,而非自动换行的行数记数
-p不以卷动的方式显示每一页,而是先清屏后显示
-c先显示内容再清除旧资料
-s将连续两行以上的空白行代换为一行空白行
filenames欲显示内容的文件,可为复数个数
示例:
more–stestfile
逐页显示文件testfile的内容,如有连续两行以上空白行则以一行空白行显示
more+20testfile
从第20行开始显示文件testfile的内容
15、find命令
功能:
将符合组合条件expression的文件列出来。
格式:
find[path][expression]
常用参数说明:
命令中第一个“-”之前的部分为path,之后的部分为expression。
如果path是空字符串则使用目前路径,如果expression是空字符串则使用-print为默认expression。
常用expression:
-group<群组名称>查找符合指定之群组名称的文件或目录
-help在线帮助
-print假设find命令的返回值为true,就将文件或目录名称在标准输出设备输出。
格式为每列一个名称,每个名称前皆有“./”字符串
-user<拥有者名称>查找符合指定的拥有者名称的文件或目录
示例:
find.–name“*.c”
将当前目录及其子目录下所有后缀名为c的文件列出
find.–ftypef
将当前目录及其子目录下所有一般文件列出
find.–ctime-20
将当前目录及其子目录下所有最近20分钟内更新过的文件列出
四、实验软硬件环境
硬件要求:
P42.0G1G内存60G硬盘以上电脑
软件要求:
C、C++编程环境,Java编程环境
五、实验步骤
实验每人单独完成,独立练习上述各种命令的使用。
六、实验考核办法
提交实验报告,详细介绍实验中所做的工作,遇到的问题,解决办法,实验后的体会和设想。
七、附:
思考题
(1)如何查看文件目录?
如何查看文件内容?
(2)如何创建子目录?
进入指定的子目录?
以及删除子目录及其下的文件?
(3)如何查看硬盘空间?
(4)如何复制或移动文件?
实验二Linux文档编辑器Vi的使用
一、实验目的与要求
(1)体会多用户、多任务网络操作系统Linux的工作特点;
(2)熟练使用文档编辑器Vi。
二、预备知识
三、实验内容
(1)在Linux中编辑文档—vi编辑器
vi编辑器的三种工作模式:
①命令模式(Commandmode):
控制屏幕光标的移动、字符的插入或删除、字符的移动或复制、进入插入模式或底线命令模式;
②插入模式(Insertmode):
完成字符的输入;
③底线命令模式(Lastlinemode):
存储文件或退出编辑器,也可设置编辑环境。
vi工作模式的切换:
①进入命令模式:
在命令提示符后输入:
vi<文件名>;
②切换到插入模式:
在命令模式下按键i、a、o进入插入模式
i(插入):
在当前光标位置输入字符;
a(增加):
从当前光标的前一个位置开始输入字符;
o(插入新行):
从新行行首开始输入字符。
③切换到命令模式:
在插入模式下按Esc键;
④切换到底线命令模式:
在命令模式下按“:
”进入底线命令模式。
四、实验软硬件环境
硬件要求:
P42.0G1G内存60G硬盘以上电脑
软件要求:
C、C++编程环境,Java编程环境
五、实验步骤
实验每人单独完成,独立练习上述各种命令的使用。
六、实验考核办法
提交实验报告,详细介绍实验中所做的工作,遇到的问题,解决办法,实验后的体会和设想。
七、附:
思考题
(1)如何使用vi编辑器进行源程序的编辑?
如何编译和运行程序?
实验三Linux系统管理实践
一、实验目的与要求
(1)掌握Linux进程原理,学会使用进程相关的命令;
(2)理解Linux的输入、输出重定向;
(3)Linux管道通信和相关命令;
(4)在Linux下编写、调试C程序。
二、预备知识
…
…
三、实验内容
(1)Linux的进程管理命令
Linux是一个多用户多任务的操作系统。
多用户是指多个用户可以在同一时间使用计算机系统;多任务是指Linux可以同时执行几个任务,它可以在还未执行完一个任务时又执行另一项任务。
在Linux系统上所有运行的东西都可以称之为一个进程。
每个用户任务、每个系统管理守护进程,都可以称之为进程。
Linux用分时管理方法让所有的任务共同分享系统资源。
下面就来看一看如何控制这些进程。
1、启动进程
在Linux系统中有两种启动进程的方法:
●直接输入命令,就将直接启动一个进程
?
在普通情况下,进程将在前台执行,这时我们无法再执行新的命令
?
如果我们在命令之后加上一个“&”,那行进程将会放在后台执行,我们仍然可以执行新的命令
●通过at、cron、crontab命令可以像Windows中的计划任务一样定时启动某个进程,具体的使用方法大家可以使用man命令名来查询。
2、查看进程
在Linux系统中,可以使用ps命令来查看正在运行的进程。
例如:
列出属于当前用户的进程:
#ps
PIDTTYTIMECMD
16767pts/10:
00ps
18029pts/10:
00bash
其中PID代表进程ID,TTY是该进程是由哪个控制台启动的,CMD则是命令。
如果想列出更详细的信息,则可使用命令:
“ps-auxw”。
3、终止进程
一个进程在任务完成之后,将会自动完成。
如果要中途中止该进程的话,有两种方法:
●对于在前台运行的程序,直接通过组合键CTRL+C就可以中止进程;
●而对于在后台运行的程序,则需要通过前面介绍的ps命令找到它的进程号,然后使用“kill进程号”来终止该进程。
(2)Linux的输入输出和重定向
1、标准输入与输出
在Linux中执行一个程序或命令时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘,标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。
进程从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。
以cat命令为例,cat命令的功能是从命令行给出的文件中读取数据,并将这些数据直接送到标准输出。
若使用如下命令:
$catconfig
将会把文件config的内容依次显示到屏幕上。
但是,如果cat的命令行中没有参数,它就会从标准输入中读取数据,并将其送到标准输出。
例如:
$cat
Helloworld(这一行是输入的)
Helloworld(这一行是cat命令输出的)
ye
Bye
$
用户输入的每一行都立刻被cat命令输出到屏幕上。
输出到终端屏幕上的信息只能看不能修改,也无法保存。
为了解决上述问题,Linux系统为输入、输出的传送引入了另外两种机制,即输入/输出重定向和管道。
2、输入重定向
输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。
也就是说,输入可以不来自键盘,而来自一个指定的文件。
输入重定向主要用于改变一个命令的输入源,特别是改变那些需要大量输入的输入源。
例如,命令wc统计指定文件包含的行数、单词数和字符数。
如果仅在命令行上键入:
$wc
wc将等待用户告诉它统计什么,这时shell就好象死了一样,从键盘键入的所有文本都出现在屏幕上,但并没有什么结果,直至按下<ctrl+d>,wc才将命令结果写在屏幕上。
如果给出一个文件名作为wc命令的参数,如下例所示,wc将返回该文件所包含的行数、单词数和字符数。
$wc/etc/passwd
2023726/etc/passwd
$
另一种把/etc/passwd文件内容传给wc命令的方法是重定向wc的输入。
输入重定向的一般形式为:
命令<文件名。
可以用下面的命令把wc命令的输入重定向为/etc/passwd文件:
$wc
2023726
$
3、输出重定向
输出重定向是指把命令(或可执行程序)的标准输出或标准错误输出重新定向到指定文件中。
这样,该命令的输出就不显示在屏幕上,而是写入到指定文件中。
输出重定向比输入重定向更常用,很多情况下都可以使用这种功能。
例如,如果某个命令的输出很多,在屏幕上不能完全显示,那么将输出重定向到一个文件中,然后再用文本编辑器打开这个文件,就可以查看输出信息;如果想保存一个命令的输出,也可以使用这种方法。
还有,输出重定向可以用于把一个命令的输出当作另一个命令的输入(还有一种更简单的方法,就是使用管道,将在下面介绍)。
输出重定向的一般形式为:
命令>文件名。
例如:
$ls>test1
上述命令将ls命令的输出保存到一个名为test1的文件中,如果>符号后边的文件已存在,那么这个文件将被覆盖。
为避免输出重定向中指定文件只能存放当前命令的输出重定向的内容,Linux中还提供了输出重定向的追加机制。
输出追加重定向与输出重定向的功能非常相似,区别仅在于输出追加重定向的功能是把命令(或可执行程序)的输出结果追加到指定文件的最后,而不是覆盖原有文件。
如果要将一条命令的输出结果追加到指定文件的后面,可以使用追加重定向操作符>>。
形式为:
命令>>文件名。
例如:
$ls*.txt>>test1
上述命令将ls命令的输出保存到一个名为test1的文件中,test1已存在,那么ls输出将被追加到test1的末尾。
和程序的标准输出重定向一样,程序的错误输出也可以重新定向。
使用符号2>(或追加符号2>>)表示对错误输出设备重定向。
例如下面的命令:
$ls/home/student2>err
上述命令执行时,可在屏幕上看到程序的正常输出结果,但同时又将命令运行的任何错误信息送到文件err中,以备将来检查用。
此外,还可以使用另一个输出重定向操作符(&>)将标准输出和错误输出同时送到同一文件中。
例如:
$ls/home/student&>output
使用“&>”重定向操作符可以使得一个程序或命令的运行不会在屏幕上显示任何信息,而是将输出保存到一个文件中,这种方式方便了程序的后台运行。
(3)Linux的管道通信
将一个程序或命令的输出作为另一个程序或命令的输入,有两种方法,一种是通过一个临时文件将两个命令或程序结合在一起;另一种是Linux所提供的管道功能。
这种方法比前一种方法更好。
管道可以把一系列命令连接起来,这意味着第一个命令的输出会作为第二个命令的输入通过管道传给第二个命令,第二个命令的输出又会作为第三个命令的输入,以此类推。
显示在屏幕上的是管道行中最后一个命令的输出(如果命令行中未使用输出重定向)。
通过使用管道符“|”来建立一个管道行。
例如有如下命令:
$ls/home/student|wc-w
上述命令的执行结果是将ls/home/student的输出作为wc–w的输入。
(4)Linux的C编译器
1、GCC
为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是如何灵活运用C编译器。
目前Linux下最常用的C语言编译器是GCC(GNUCompilerCollection),它是GNU项目中符合ANSIC标准的编译系统,能够编译用C、C++和ObjectC等语言编写的程序。
GCC不仅功能非常强大,结构也异常灵活。
最值得称道的一点就是它可以通过不同的前端模块来支持各种语言,如Java、Fortran、Pascal、Modula-3和Ada等。
开放、自由和灵活是Linux的魅力所在,而这一点在GCC上的体现就是程序员通过它能够更好地控制整个编译过程。
在使用GCC编译程序时,编译过程可以被细分为四个阶段:
◆预处理(Pre-Processing)
◆编译(Compiling)
◆汇编(Assembling)
◆链接(Linking)
Linux程序员可以根据自己的需要让GCC在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或者对最后生成的二进制文件进行控制,以便通过加入不同数量和种类的调试代码来为今后的调试做好准备。
和其它常用的编译器一样,GCC也提供了灵活而强大的代码优化功能,利用它可以生成执行效率更高的代码。
GCC提供了30多条警告信息和三个警告级别,使用它们有助于增强程序的稳定性和可移植性。
此外,GCC还对标准的C和C++语言进行了大量的扩展,提高程序的执行效率,有助于编译器进行代码优化,能够减轻编程的工作量。
2、GCC的使用
在学习使用GCC之前,下面的这个例子能够帮助用户迅速理解GCC的工作原理,并将其立即运用到实际的项目开发中去。
首先用熟悉的编辑器输入清单1所示的代码:
清单1:
hello.c
#include
intmain(void)
{
printf("Helloworld,Linuxprogramming!
n");
return0;
}
然后执行下面的命令编译和运行这段程序:
#gcchello.c-ohello
#./hello
Helloworld,Linuxprogramming!
从程序员的角度看,只需简单地执行一条GCC命令就可以了,但从编译器的角度来看,却需要完成一系列非常繁杂的工作。
首先,GCC需要调用预处理程序cpp,由它负责展开在源文件中定义的宏,并向其中插入“#include”语句所包含的内容;接着,GCC会调用ccl和as将处理后的源代码编译成目标代码;最后,GCC会调用链接程序ld,把生成的目标代码链接成一个可执行程序。
为了更好地理解GCC的工作过程,可以把上述编译过程分成几个步骤单独进行,并观察每步的运行结果。
第一步是进行预编译,使用-E参数可以让GCC在预处理结束后停止编译过程:
#gcc-Ehello.c-ohello.i
此时若查看hello.cpp文件中的内容,会发现stdio.h的内容确实都插到文件里去了,而其它应当被预处理的宏定义也都做了相应的处理。
下一步是将hello.i编译为目标代码,这可以通过使用-c参数来完成:
#gcc-chello.i-ohello.o
GCC默认将.i文件看成是预处理后的C语言源代码,因此上述命令将自动跳过预处理步骤而开始执行编译过程,也可以使用-x参数让GCC从指定的步骤开始编译。
最后一步是将生成的目标文件链接成可执行文件:
#gcchello.o-ohello
在采用模块化的设计思想进行软件开发时,通常整个程序是由多个源文件组成的,相应地也就形成了多个编译单元,使用GCC能够很好地管理这些编译单元。
假设有一个由foo1.c和foo2.c两个源文件组成的程序,为了对它们进行编译,并最终生成可执行程序foo,可以使用下面这条命令:
#gccfoo1.cfoo2.c-ofoo
如果同时处理的文件不止一个,GCC仍然会按照预处理、编译和链接的过程依次进行。
如果深究起来,上面这条命令大致相当于依次执行如下三条命令:
#gcc-cfoo1.c-ofoo1.o
#gcc-cfoo2.c-ofoo2.o
#gccfoo1.ofoo2.o-ofoo
在编译一个包含许多源文件的工程时,若只用一条GCC命令来完成编译是非常浪费时间的。
假设项目中有100个源文件需要编译,并且每个源文件中都包含10000行代码,如果像上面那样仅用一条GCC命令来完成编译工作,那么GCC需要将每个源文件都重新编译一遍,然后再全部连接起来。
很显然,这样浪费的时间相当多,尤其是当用户只是修改了其中某一个文件的时候,完全没有必要将每个文件都重新编译一遍,因为很多已经生成的目标文件是不会改变的。
要解决这个问题,关键是要灵活运用GCC,同时还要借助像Make这样的工具。
四、实验软硬件环境
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 指导书