《操作系统》实验指导书 秋季.docx
- 文档编号:8111391
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:49
- 大小:88.69KB
《操作系统》实验指导书 秋季.docx
《《操作系统》实验指导书 秋季.docx》由会员分享,可在线阅读,更多相关《《操作系统》实验指导书 秋季.docx(49页珍藏版)》请在冰豆网上搜索。
《操作系统》实验指导书秋季
附件:
操作系统课程实验指导书
所属学校武汉工程大学
课程名称操作系统
课程教师蔡敦波
《操作系统》课程实验指导书
课程代码:
05121152
适用对象:
计算机学院各专业
指导教师:
蔡敦波
实验内容
实验一Linux系统的使用(2学时)
实验二进程控制与进程间通信(2学时)
实验三进程调度算法模拟(2学时)
实验四内存调度算法模拟(2学时)
实验一Linux系统的使用
(2学时)
一、实验目的:
(1)熟悉Linux下的基本操作,学会使用各种Shell命令操作Linux,形成对Linux的感性认识。
(2)学会使用vi编辑器编辑简单的C语言程序,并能对其编译、调试和运行。
(3)熟悉Linux的文件系统。
(4)能够挂载文件系统。
二、实验条件:
1.Linux操作系统;
2.SSH软件;
3.PC机
三、实验内容:
说明:
将试验结果以屏幕截屏或者源代码的方式编排到实验报告中。
1、登陆Linux
方式一:
以指导教师给定的账户和密码以ssh方式登陆Linux,并使用“ls”,“cat”“cd”,more等命令来实现基本的文件操作并观察Linux文件系统的特点;使用“mkdir”命令建立一个以自己学号为名字的文件夹,进入该文件夹完成余下的实验内容。
方式二:
开机,选择Linux进入,再选择Ubuntu登陆窗口,输入密码:
111111,进入Ubuntu图形桌面环境。
2、熟悉Ubuntu图形桌面环境
桌面包含上方的菜单栏和下方的任务栏。
菜单栏包含“应用程序菜单”、“位置”、“系统”。
通过主菜单可访问应用程序。
(1)“应用程序”菜单
“应用程序”菜单包含“办公”、“附件”、“互联网”、“图形”、“游戏”等。
“办公”包含了文字处理及电子表格等应用程序。
“附件”下包含了“搜索工具”、“计算器”、“文本编辑器”和“终端”等应用程序。
(2)“位置”菜单
“位置”菜单包含“主文件夹”、“桌面”等信息。
(3)“系统”菜单
“系统”菜单包含“首选项”和“系统管理”等信息。
(4)启动终端模拟器
GNOME终端模拟器用一个窗口来模拟字符终端的行为。
终端常常被称为命令行或者shell,Linux中绝大部分工作都可以用命令行完成。
要启动一个终端,可以选择应用程序→附件→终端。
3、目录和文件系统
Linux和Unix文件系统被组织成一个有层次的树形结构。
文件系统的最上层是/,或称为根目录。
在Unix和Linux的设计理念中,一切皆为文件——包括硬盘、分区和可插拔介质。
这就意味着所有其它文件和目录(包括其它硬盘和分区)都位于根目录中。
例如:
/home/student/sy1.c给出了正确的完整路径,它指向sy1.c文件,而该文件位于student目录下,该目录又位于home目录,最後,home目录又位于根(/)目录下。
在根(/)目录下,有一组重要的系统目录,在大部分Linux发行版里都通用。
直接位于根(/)目录下的常见目录列表如下:
∙/bin-重要的二进制(binary)应用程序
∙/boot-启动(boot)配置文件
∙/dev-设备(device)文件
∙/etc-配置文件、启动脚本等(etc)
∙/home-本地用户主(home)目录
∙/lib-系统库(libraries)文件
∙/lost+found-在根(/)目录下提供一个遗失+查找(lost+found)系统
∙/media-挂载可移动介质(media),诸如CD、数码相机等
∙/mnt-挂载(mounted)文件系统
∙/opt-提供一个供可选的(optional)应用程序安装目录
∙/proc-特殊的动态目录,用以维护系统信息和状态,包括当前运行中进程(processes)信息。
∙/root-root(root)用户主文件夹,读作“slash-root”
∙/sbin-重要的系统二进制(systembinaries)文件
∙/sys-系统(system)文件
∙/tmp-临时(temporary)文件
∙/usr-包含绝大部分所有用户(users)都能访问的应用程序和文件
∙/var-经常变化的(variable)文件,诸如日志或数据库等
4、打开PROC目录了解系统配置
把/proc作为当前目录,就可使用ls命令列出它的内容。
/proc文件系统是一种内核和内核模块用来向进程(process)发送信息的机制。
这个伪文件系统让你可以和内核内部数据结构进行交互,获取有关进程的有用信息,在运行中改变设置(通过改变内核参数)。
与其他文件系统不同,/proc存在于内存之中而不是硬盘上。
1).察看/proc的文件
/proc的文件可以用于访问有关内核的状态、计算机的属性、正在运行的进程的状态等信息。
大部分/proc中的文件和目录提供系统物理环境最新的信息。
尽管/proc中的文件是虚拟的,但它们仍可以使用任何文件编辑器或像'more','less'或'cat'这样的程序来查看。
2).得到有用的系统/内核信息
/proc文件系统可以被用于收集有用的关于系统和运行中的内核的信息。
下面是一些重要的文件:
∙/proc/cpuinfo-CPU的信息(型号,家族,缓存大小等)
∙/proc/meminfo-物理内存、交换空间等的信息
∙/proc/mounts-已加载的文件系统的列表
∙/proc/devices-可用设备的列表
∙/proc/filesystems-被支持的文件系统
∙/proc/modules-已加载的模块
∙/proc/version-内核版本
∙/proc/cmdline-系统启动时输入的内核命令行参数
proc中的文件远不止上面列出的这么多。
想要进一步了解的读者可以对/proc的每一个文件都'more'一下。
3).有关运行中的进程的信息
/proc文件系统可以用于获取运行中的进程的信息。
在/proc中有一些编号的子目录。
每个编号的目录对应一个进程id(PID)。
这样,每一个运行中的进程/proc中都有一个用它的PID命名的目录。
这些子目录中包含可以提供有关进程的状态和环境的重要细节信息的文件。
/proc文件系统提供了一个基于文件的Linux内部接口。
它可以用于确定系统的各种不同设备和进程的状态。
对他们进行配置。
因而,理解和应用有关这个文件系统的知识是理解你的Linux系统的关键。
5、文件权限
Linux系统上的所有文件都有权限,以允许或者阻止其它用户查阅、修改或者执行。
超级用户“root”则可以访问系统上的任意文件。
每个文件都有访问限制、用户限制以及隶属于某个用户/组(owner/group)。
所有文件皆有如下三组权限加以保护,按重要性依次排列:
用户(user):
适用于该文件的所有者
组(group):
适用于该文件所属的组
其他(other):
适用于所有其他用户
上述三组权限信息的每一组都包含了实际权限。
这些权限信息,连同它们对文件和目录具有的不同含义,概述如下:
读(read):
允许显示/打开该文件可以显示目录内容
写(write):
可以编辑或删除该文件可以更改目录内容
可执行(execute):
可执行文件可以作为程序运行可以进入该目录
例如:
ls–l
注:
对于普通文件,类型为-;对于目录文件,类型为d;在系统目录/dev下的文件都是特殊文件,如类型b代表块设备,c代表字符设备,p代表有名管道文件,s代表套接字文件。
用chmod改变文件或目录的存取权限:
格式:
chmod谁操作符许可权{文件名(或目录名)}
a+r
gw
-x
os
u=t
u
g
o
其中,a:
代表all,即所有的用户;
g:
代表group,即小组用户;
o:
代表others,即一般用户;
u:
代表 user,即文件的所有者;
+:
代表增加许可权;
-:
代表删除许可权;
=:
代表赋予指定的许可权。
例如:
$chmodu+wdisplay完成对u用户增加对文件display的写权限。
注:
上述命令是由文件所有者或超级用户进行修改。
6、练习常用的Shell命令。
(重点)
当用户登录到字符界面系统或使用终端模拟窗口时,就是在和称为shell的命令解释程序进行通信。
当用户在键盘上输入一条命令时,shell程序将对命令进行解释并完成相应的动作。
这种动作可能是执行用户的应用程序,或者是调用一个编辑器、GNU/Linux实用程序或其他标准程序,或者是一条错误信息,告诉用户输入了错误的命令。
1.目录操作
mkdirabc创建一个目录abc
cdabc将工作目录改变到abc
cd改变当前目录到主目录
ls列出当前目录的内容
ls-l输出当前目录内容的长列表,每个目录或文件占一行
pwd显示当前目录的全路径
2.文件显示实用程序
catmx.c显示mx.c文件内容
moremx.c分屏显示mx.c内容
tailmx.c显示文件后几行
catfile1file2连接file1和file2
headfilename显示文件filename的开始10行
wcfilename统计文件filename中的行数、单词数和字符数
od文件查看非文本文件
3.文件管理实用程序
cpfile1file2将文件1复制到文件2
mvfile1file2将文件重命名为file2
rmfilename删除文件filename
rm-ifilename请求用户确认删除
4.数据操作实用程序
tty显示当前终端的路径和文件名
who显示当前登录用户的列表
sortfilename显示文件filename中的行的排序结果
spellfilename检查文件filename中的拼写错误
5.其他实用程序
date输出系统日期和时间
cal显示本月的日历。
cal2002显示2002年的日历
clear清除终端屏幕
history显示你以前执行过的命令的列表
man显示实用程序的有用信息,并提供该实用程序的基本用法
echo读取参数并把它写到输出
7、熟悉vim编辑器
在编写文本或计算机程序时,需要创建文件、插入新行、重新排列行、修改内容等,计算机文本编辑器就是用来完成这些工作的。
Vim编辑器的两种操作模式是命令模式和输入模式(如图2所示)。
当vim处于命令模式时,可以输入vim命令。
例如,可以删除文本并从vim中退出。
在输入模式下,vim将把用户所输入的任何内容都当作文本信息,并将它们显示在屏幕上。
vi的工作模式见图2所示。
命令模式
在输入模式下,按ESC可切换到命令模式。
命令模式下,可选用下列指令离开vi:
命令
作用
:
q!
离开vi,并放弃刚在缓冲区内编辑的内容
:
wq
将缓冲区内的资料写入当前文件中,并离开vi
:
ZZ
同wq
:
x
同wq
:
w
将缓冲区内的资料写入当前文件中,但并不离开vi
:
q
离开vi,若文件被修改过,则要被要求确认是否放弃修改的内容,此指令可与:
w配合使用
命令模式下光标的移动:
命令
作用
h或左箭头
左移一个字符
J
下移一个字符
k
上移一个字符
l
右移一个字符
0
移至该行的首
$
移至该行的末
^
移至该行的第一个字符处
H
移至窗口的第一列
M
移至窗口中间那一列
L
移至窗口的最后一列
G
移至该文件的最后一列
W,W
下一个单词(W忽略标点)
b,B
上一个单词(B忽略标点)
+
移至下一列的第一个字符处
-
移至上一列的第一个字符处
(
移至该句首
)
移至该句末
{
移至该段首
}
移至该段末
nG
移至该文件的第n列
输入模式
输入以下命令即可进入vi输入模式:
命令
作用
a(append)
在光标之后加入资料
A
在该行之末加入资料
i(insert)
在光标之前加入资料
I
在该行之首加入资料
o(open)
新增一行于该行之下,供输入资料用
O
新增一行于该行之上,供输入资料用
Dd
删除当前光标所在行
X
删除当前光标字符
X
删除当前光标之前字符
U
撤消
·
重做
F
查找
s
替换,例如:
将文件中的所有"FOX"换成"duck",用":
%s/FOX/duck/g"
ESC
离开输入模式
启动vim命令:
命令
作用
vimfilename
从第一行开始编辑filename文件
vim+filename
从最后一行开始编辑filename文件
vim-rfilename
在系统崩溃之后恢复filename文件
vim-Rfilename
以只读方式编辑filename文件
更多用法见infovi。
vim下程序录入过程:
$vimaaa.c↙进入vim命令模式
i↙进入输入模式输入C源程序(或文本)
ESC↙回到命令模式
ZZ↙保存文件并推出vim
CATaaa.c↙显示aaa.c文件内容
8、熟悉gcc编译器
GNU/Linux中通常使用的C编译器是GNUgcc。
编译器把源程序编译生成目标代码的任务分为以下4步:
a.预处理,把预处理命令扫描处理完毕;
b.编译,把预处理后的结果编译成汇编或者目标模块;
c.汇编,把编译出来的结果汇编成具体CPU上的目标代码模块;
d.连接,把多个目标代码模块连接生成一个大的目标模块;
1.使用语法:
gcc[option|filename]...
其中option为gcc使用时的选项,而filename为gcc要处理的文件。
2.GCC选项
GCC的选项有很多类,这类选项控制着GCC程序的运行,以达到特定的编译目的。
全局选项(OVERALLOPTIONS)
全局开关用来控制在“GCC功能介绍”中的GCC的4个步骤的运行,在缺省的情况下,这4个步骤都是要执行的,但是当给定一些全局开关后,这些步骤就会在某一步停止执行,这产生中间结果,例如可能你只是需要中间生成的预处理的结果或者是汇编文件(比如你的目的是为了看某个CPU上的汇编语言怎么写)。
–x language
对于源文件是用什么语言编写的,可以通过文件名的后缀来标示,也可以用这开关。
指定输入文件是什么语言编写的,language可以是如下的内容
a. c
b.objective-c
c.c-header
d.c++
e.cpp-output
f.assembler
g.assembler-with-cpp
–xnone
把-x开关都给关掉了。
–c
编译成把源文件目标代码,不做连接的动作。
–S
把源文件编译成汇编代码,不做汇编和连接的动作。
–E
只把源文件进行预处理之后的结果输出来。
不做编译,汇编,连接的动作。
–ofile(常用)
指明输出的可执行文件的文件名是file。
–v
把整个编译过程的输出信息都给打印出来。
–pipe
由于gcc的工作分为好几步才完成,所以需要在过程中生成临时文件,使用-pipe就是用管道替换临时文件。
语言相关选项(LanguageOptions)
用来处理和语言相关的选项。
–ansi
这个开关让GCC编译器把所有的GNU的编译器特性都给关掉,让你的程序可以和ansi标准兼容。
–includefile
在编译之前,把file包含进去,相当于在所有编译的源文件最前面加入了一个#include
–C
同-E参数配合使用。
让预处理后的结果,把注释保留,让人能够比较好读它。
连接开关(LinkerOptions)
用来控制连接过程的开关选项。
–llibrary
连接库文件开关。
例如-lugl,则是把程序同libugl.a文件进行连接。
–lobjc
这个开关用在面向对象的C语言文件的库文件处理中。
–nostartfiles
在连接的时候不把系统相关的启动代码连接进来。
–nostdlib
在连接的时候不把系统相关的启动文件和系统相关的库连接进来。
–static
在一些系统上支持动态连接,这个开关则不允许动态连接。
shared
生成可共享的被其他程序连接的目标模块。
目录相关开关(DirectoryOptions)
用于定义与目录操作相关的开关。
–Ldir
搜寻库文件(*.a)的路径。
调试开关(DebuggingOptions)
–g
把调试开关打开,让编译的目标文件有调试信息。
–Vversion
用来告诉编译器使用它的多少版本的功能,version参数用来表示版本。
9、掌握Ubuntu下C程序编辑运行过程(重点)
Ubuntu下编写C程序要经过以下几个步骤:
启动常用的编辑器,如GEdit或者Vim,键入C源程序代码。
例如,点击应用程序/附件/文本编辑器,进入编辑环境,输入C源程序,保存并命名为hello.c
#include
voidmain(void)
{
Printf(“Helloworld!
\n”);
}
编译源程序
点击应用程序/附件/终端,进入命令行。
用gcc编译器对C源程序进行编译,以生成一个可执行文件。
方法:
gcc-ohello.outhello.c↙
运行可执行文件
·/hello.out↙
注:
命令行中-o选项表示要求编译器输出可执行文件名为hello.out文件,hello.c是源程序文件。
【实验报告】
1.举例列出常用的shell命令使用方法。
2.通过实例总结上机调试C语言程序的过程及此次上机的感想。
实验二进程控制与进程间通信
(2学时)
一、实验目的:
1、掌握进程的概念,明确进程和程序的区别。
2、认识和了解并发执行的实质。
3、了解什么是信号。
4、熟悉LINUX系统中进程之间软中断通信的基本原理。
二、实验内容:
1、进程的创建(必做题)
编写一段程序,使用系统调用fork()创建两个子进程,在系统中有一个父进程和两个子进程活动。
让每个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b”和“c”。
试观察记录屏幕上的显示结果,并分析原因。
<参考程序>
#include
main()
{intp1,p2;
while((p1=fork())==-1);
if(p1==0)
putchar(‘b’);
else
{while((p2=fork())==-1);
if(p2==0)
putchar(‘c’);
else
putchar(‘a’);
}
}
2、修改已编写的程序,将每个进程的输出由单个字符改为一句话,再观察程序执行时屏幕上出现的现象,并分析其原因。
(必做题)
<参考程序>
#include
main()
{intp1,p2,i;
while((p1=fork())==-1);
if(p1==0)
for(i=0;i<500;i++)
printf(“child%d\n”,i);
else
{while((p2=fork())==-1);
If(p2==0)
for(i=0;i<500;i++)
printf(“son%d\n”,i);
else
for(i=0;i<500;i++)
printf(“daughter%d\n”,i);
}
}
3、编写程序创建进程树如图1和图2所示,在每个进程中显示当前进程识别码和父进程识别码。
(选做题)
4、编写一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止:
Childprocess1iskilledbyparent!
Childprocess2iskilledbyparent!
父进程等待两个子进程终止后,输出以下信息后终止:
Parentprocessiskilled!
<参考程序>
#include
#include
#include
#include
#include
intwait_mark;
voidwaiting(),stop();
voidmain()
{intp1,p2;
signal(SIGINT,stop);
while((p1=fork())==-1);
if(p1>0)/*在父进程中*/
{①
while((p2=fork())==-1);
If(p2>0)/*在父进程中*/
{②
wait_mark=1;
waiting(0);
kill(p1,10);
kill(p2,12);
wait();
wait();
printf("parentprocessiskilled!
\n");
exit(0);
}
else/*在子进程2中*/
{
wait_mark=1;
signal(12,stop);
waiting();
lockf(1,1,0);
printf("childprocess2iskilledbyparent!
\n");
lockf(1,0,0);
exit(0);
}
}
else/*在子进
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 操作系统实验指导书 秋季 实验 指导书
![提示](https://static.bdocx.com/images/bang_tan.gif)