操作系统实验指导书自编.docx

上传人:b****6 文档编号:3904776 上传时间:2022-11-26 格式:DOCX 页数:22 大小:25.50KB
下载 相关 举报
操作系统实验指导书自编.docx_第1页
第1页 / 共22页
操作系统实验指导书自编.docx_第2页
第2页 / 共22页
操作系统实验指导书自编.docx_第3页
第3页 / 共22页
操作系统实验指导书自编.docx_第4页
第4页 / 共22页
操作系统实验指导书自编.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

操作系统实验指导书自编.docx

《操作系统实验指导书自编.docx》由会员分享,可在线阅读,更多相关《操作系统实验指导书自编.docx(22页珍藏版)》请在冰豆网上搜索。

操作系统实验指导书自编.docx

操作系统实验指导书自编

 

《操作系统》

实验指导书

 

广东商学院信息学院

 

目录

实验项目一……………………………………………………………3

实验项目二……………………………………………………………13

实验项目三……………………………………………………………16

 

概述

Linux系统作为一个多用户、多任务的操作系统,因其具有强大的网络服务和网络管理功能,近年来受到网络用户和网络服务提供商的青睐。

为配合《操作系统》课程的教学,使学生深入理解操作系统的分类、基本概念、工作原理以及实现技术,配套三个基于Linux平台的验证型实验。

一、实验安排

实验一Linux综合实验(2学时,第7周)

实验二Linux进程管理(2学时,第9周)

实验三Linux进程通信(2学时,第11周)

二、实验环境

1、软件环境

LinuxRedHat7.1以上;

TurboC2.0。

2、硬件环境

局域网络;

P2以上计算机;

联机投影。

三、实验要求

1、实验前认真作好相关知识准备,明确实验目的,掌握实验方法;

2、利用实验条件认真操作,预测并分析实验结果;

3、实验结束后按照要求撰写实验报告并按时提交。

四、考核办法

可以有几种考核办法:

1、根据实验课的考勤情况、实验结果占平时成绩的20%;

2、在期末试题中体现一定比例的实验内容。

 

实验项目一Linux综合实验

一、实验目的

1、体会多用户、多任务网络操作系统Linux的工作特点;

2、理解操作系统的分类、相关概念和资源管理功能。

二、预备知识

1、复习操作系统的分类、概念以及基本功能;

2、复习作业与进程管理、处理机调度、存储器管理、文件管理以及设备管理的基础知识,理解相应的调度策略以及分配与回收算法;

3、复习Windows系统的管理功能、DOS命令的使用以及C程序设计语言等。

三、实验内容

熟悉Linux的各种命令,体会操作系统提供给用户的命令接口的操作特点。

(一)使用常识

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分钟后关机)

(二)基本的常用命令

Linux命令格式说明:

1、Linux的文件名长度不超过256个字符,且不能使用如下字符:

!

@#$^&*()[]{}‘“、/;<>空格

2、Linux文件区分大小写;

3、文件名中如有多个圆点,则最右边一个为分隔符,且多表示文件类型;

4、Linux使用“/”为根目录、目录分隔符和目录与文件的分隔符。

命令介绍:

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分钟内更新过的文件列出

(三)其他命令介绍

1、ps命令

功能:

显示正在执行的进程信息。

格式:

ps[options][pids]

常用选项说明:

-l以长列表的形式列出

-a显示其它用户的进程

-e显示环境

-r只显示正在运行的进程

栏目说明:

UID用户标识符

PID进程标识符

PPID父进程标识符

PRI进程优先级

SIZE虚拟内存大小

RSS驻留空间大小

STAT进程状态:

R—进程正在运行;S—睡眠;D—不可中断睡眠;

T—停止或跟踪;Z—僵尸进程;W—没有驻留页

TTY进程所在的虚拟终端号

TIME该进程已经运行的时间

COMMAND该进程的名称

2、jobs命令

功能:

列出当前正在运行的作业信息。

格式:

jobs

3、kill命令

功能:

终止(或撤消)一个进程(或作业)。

格式:

kill[options]pid/jid

常用选项说明:

-l输出信号名列表

-p指kill只输出已命名pid,而且不送信号给它

-s<信号名>指出欲发出的信号,信号是以信号名或数字给出的

4、nice命令

功能:

通过修改调度优先级来运行一个程序。

格式:

nice[options][COMMAND[arg…]]

常用选项说明:

-n加上由指定的优先级而不是默认值10

--version输出版本信息

5、&命令

功能:

将进程放到后台运行。

格式:

在要运行的命令最后加上“&”符号

示例:

yes>/dev/null&

yes命令标准输出一串无穷尽的“y”;

/dev/null象一个黑洞,任何被送入这个黑洞的数据都会消失

6、前后台作业切换

bg命令

功能:

将前台作业放到后台运行。

格式:

bg%作业号

示例:

bg%2

将2号作业放到后台运行

或者:

用Ctrl+Z终止该作业,在shell提示符下键入命令bg。

fg命令

功能:

将后台作业放到前台运行。

格式:

fg%作业号

示例:

fg%2

将2号作业放到前台运行

7、top命令

功能:

显示系统动态的进程控制和进程调度,还可察看内存动态使用的实时信息。

格式:

top[options]

常用选项说明:

空格键立即更新显示

-i不显示空闲的或僵尸进程信息

-n或#改变显示的进程数量

-q退出top

-r重新调整一个指定进程的优先级

-f或F在显示时加上或移去字段

-o或O改变显示字段的顺序

-m切换内存信息的显示

-t切换进程和CPU状态的显示

(四)常用工具介绍

1、vi编辑器

vi编辑器的三种工作模式:

1命令模式(Commandmode):

控制屏幕光标的移动、字符的插入或删除、字符的移动或复制、进入插入模式或底线命令模式;

2插入模式(Insertmode):

完成字符的输入;

3底线命令模式(Lastlinemode):

存储文件或退出编辑器,也可设置编辑环境。

vi工作模式的切换:

1进入命令模式:

在命令提示符后输入:

vi<文件名>;

2切换到插入模式:

在命令模式下按键i、a、o进入插入模式

i(插入):

在当前光标位置输入字符;

a(增加):

从当前光标的前一个位置开始输入字符;

o(插入新行):

从新行行首开始输入字符。

3切换到命令模式:

在插入模式下按Esc键;

4切换到底线命令模式:

在命令模式下按“:

”进入底线命令模式。

命令模式功能键:

1移动光标

k、j、h、l:

上、下、左、右移动光标;

Ctrl+b:

向后移动一页;

Ctrl+f:

向前移动一页;

Ctrl+u:

向后移动半页;

Ctrl+d:

向前移动半页;

G:

移到文件最后一行;

1G:

移到文件第一行;

$:

移到该行的行尾;

O:

移到该行的行首;

#|:

移到该行的第#个位置。

2删除命令

x:

删除光标所在位置一个字符;

#x:

删除光标所在位置后面#个字符;

X:

删除光标所在位置前一个字符;

#X:

删除光标所在位置前面#个字符

dd:

删除光标所在的行;

#dd:

删除光标所在行后面的#行;?

3修改命令

r:

取代光标所在处的字符;

R:

取代字符直到按Esc键为止;

cw:

更改光标所在处的字符到字尾;

c#w:

更改光标所在处后#的个字符。

4复制命令

yw:

复制光标所在处到字尾的字符;

p:

粘贴yw复制的字符到光标后。

yy:

复制光标所在行;

p:

粘贴yy复制的行到光标后。

#yy:

复制光标所在行后面的#行;

p:

粘贴#yy复制的若干行到光标后。

5跳转命令

Ctrl+g:

列出光标所在行的行号;

#G:

移动光标到第#行行首。

底线命令简介:

1列出行号

setnu在每一行前面列出行号;

2跳至某一行

#光标跳至第#行;

3查找字符串

/关键词查找指定的关键词,按n继续向下找;

关键词查找指定的关键词,按n继续向下找;

4存盘命令

wfilename将文件存入指定的文件filename中;

#,#wfilename截取文件的某些行存成另一个文件filename;

5退出命令

wq按原文件名存盘并退出vi;

q!

强制退出并放弃编辑的文件。

2、调试程序gdb

gdb(GNUDeBugger)是GNU的调试器,一般和GCC(GNUCompilerCollection)配搭使用。

要使用GDB进行调试,编译程序时要指定-g或-ggdb的编译选项,这样,gcc就会在生成可执行文件时产生调试信息。

示例:

gcc–gmain.c

-g用于产生一般的调试信息

  gcc–ggdbmain.c

  -ggdb则用于产生gdb特有的调试信息;使用-ggdb时,可执行文件的尺寸会大大增加

gdb的基本指令:

  

  f(ile):

指定一个可执行文件进行调试,gdb将读取这些文件的调试信息,如fa.exe  

  l(ist):

列程序出源文件  

  r(un):

装载完要调试的可执行文件后,可以用run命令运行可执行文件  

  b(reak):

设置断点(breakpoint),如b25,则在源程序的第25行设置一个断点,当程序执行到第25行时,就会产生中断;也可以使用bfuncname,funcname为函数的名称,当程序调用些函数时,则产生中断

  c(ontinue):

c命令可以另中断的程序继续执行,直到下一个中断点或程序结束  

  p(rint):

输入某个变量的值,如程序定义了一个intaa的就是,paa就会输出aa的当前值

  n(ext):

程序执行到断点时中断执行,可以用n指令进行单步执行  

  s(tep):

程序执行到断点时中断执行,可以用s指令进行单步执行进某一函数  

  q(uit):

退出gdb

3、编译程序gcc

在提示符下利用工具gcc对c或c++源程序进行编译:

gcc–o目标文件源文件

其中,目标文件为可执行文件,扩展名为.exe;源文件名为c语言文件,扩展名为.c。

4、运行可执行程序

在提示符下输入:

./目标文件名,运行编译后的目标程序。

5、编译命令make

利用命令make编译形成工程文件。

6、在线帮助man

在提示符下输入:

man命令名查看命令详细信息。

四、思考题

1、如何查看文件目录?

如何查看文件内容?

2、如何创建子目录?

进入指定的子目录?

以及删除子目录及其下的文件?

3、如何查看硬盘空间?

4、如何复制或移动文件?

5、如何使用vi编辑器进行源程序的编辑?

如何编译和运行程序?

 

实验项目二进程管理

一、实验目的

1、加深对进程概念的理解,明确进程与程序的区别;

2、进一步认识并发进程的实质;

3、分析进程竞争资源的现象,学习解决进程互斥的方法;

4、了解Linux系统中进程通信的基本原理。

二、预备知识

1、阅读Linux的sched.c源码文件,加深对进程管理概念的理解;

2、阅读Linux的fork.c源码文件,分析进程的创建过程。

三、实验内容

1、进程的创建

任务:

编写一段程序,利用fork()创建两个子进程,其中父进程显示字符“a”,两个子进程分别显示字符“b”和“c”。

观察和记录屏幕上的显示结果,并分析原因。

程序:

#include

main()

{

intp1,p2,i;

while((p1=fork())==-1);

if(p1==0)

putchar(“b”);

else

{

while((p2=fork())==-1);

if(p2==0)

putchar(“c”);

else

putchar(“a”);

}

}

结果:

bca(有时会出现bac)

分析:

理论分析看,输出bac,acb等情况都有可能。

因为fork()创建进程所需的时间多于输出一个字符需要的时间,故在父进程创建子进程2的同时,子进程1输出了字符“b“;而子进程2和父进程的输出次序是随机的,所以出现上述可能的输出顺序。

2、进程的控制

任务:

将以上程序的输出由一个字符分别改为一句话,观察和分析结果;如果利用系统调用lockf()给每个进程加锁实现进程间的互斥,再观察和分析结果。

程序1:

#include

main()

{

intp1,p2,i;

while((p1=fork())==-1);/*创建子进程p1*/

if(p1==0)/*子进程1创建成功*/

for(i=0;i<5;i++)

printf(“son%d\n”,i);/*输出500个字符串“son“*/

else

{

while((p2=fork())==-1);/*创建子进程p2*/

if(p2==0)/*子进程2创建成功*/

for(i=0;i<5;i++)

printf(“daughter%d\n”,i);/*输出500个字符串“daughter“*/

else

for(i=0;i<5;i++)/*父进程执行*/

printf(“children%d\n”,i);/*输出500个字符串“children“*/

}

}

结果:

son……

daughter……

children……

son…

daughter……

….son…

children……

等等

分析:

由于函数printf()输出的字符串之间不会被中断,故字符串内部的顺序不变;但由于进程并发执行时的调度顺序和处理机分配的问题,输出字符串的先后顺序随执行的不同而不同。

程序2:

#include

main()

{

intp1,p2,i;

while((p1=fork())==-1);/*创建子进程p1*/

if(p1==0)/*子进程1创建成功*/

{

lockf(1,1,0);

for(i=0;i<50;i++)printf(“son%d\n”,i);

lockf(1,0,0);

}

else

{

while((p2=fork())==-1);/*创建子进程p2*/

if(p2==0)/*子进程2创建成功*/

{

lockf(1,1,0);

for(i=0;i<50;i++)printf(“daughter%d\n”,i);

lockf(1,0,0);

}

else

{

lockf(1,1,0);

for(i=0;i<50;i++)printf(“children%d\n”,i);

lockf(1,0,0);

}

}

}

结果:

大致与程序1的执行结果相同,但不会出现同一组字符串间隔出现的情形。

分析:

由于lockf()函数锁定标准输出设备屏幕,故不可能出现一个字符串序列还没有显示完,就被其他进程抢占输出的情形;各组字符串的输出顺序可能不同,但必定连续输出500次。

四、思考题

1、系统是怎样创建进程的?

2、当首次调用新创建进程时,其入口在哪里?

3、进程的互斥是如何实现的?

 

实验项目三进程通信

一、实验目的

1、了解和熟悉管道通信机制;

2、理解消息通信机制的工作原理。

二、预备知识

1、阅读Linux的msg.c、sem.c、shm.c等源码文件;

2、熟悉Linux的几种通信机制的工作原理。

三、实验内容

1、进程的管道通信

任务:

编制程序,实现进程的管道通信:

利用系统调用pipe()创建管道,利用write()向管道写入消息,利用read()从管道读出消息。

两个子进程p1和p2分别向管道各写一句话:

Child1issendingmessage!

Child2issendingmessage!

而父进程则从管道分别读出来自两个子进程的消息并显示。

程序:

#include

#include

#include

main()

{

in

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

当前位置:首页 > 初中教育 > 中考

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

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