操作系统实验说明版.docx

上传人:b****8 文档编号:10581005 上传时间:2023-02-21 格式:DOCX 页数:39 大小:100.43KB
下载 相关 举报
操作系统实验说明版.docx_第1页
第1页 / 共39页
操作系统实验说明版.docx_第2页
第2页 / 共39页
操作系统实验说明版.docx_第3页
第3页 / 共39页
操作系统实验说明版.docx_第4页
第4页 / 共39页
操作系统实验说明版.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

操作系统实验说明版.docx

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

操作系统实验说明版.docx

操作系统实验说明版

 

操作系统实验说明书

 

操作系统课程组

 

2008-10修订

 

实验内容:

LINUX系统通过全世界众多软件高手,特别是Linus本人的不懈努力,使Linux能支持多种硬件平台(X86、Alpha、PowerPC、SPARC、ARM),至今已发展成为主流操作系统的一员。

随着Linux的优良性能不断显现,IBM、Intel、Sun等不少商业科技巨头纷纷涉足Linux.

今天,操作系统正向着大型和微型两个不同的方向发展着。

大型系统的典型是分布式操作系统和集群操作系统,而微型系统的典型则是嵌入式操作系统。

应该说Linux为操作系统研究者提供了新理论、新方法、新技术的实践和验证平台,同时反过来促进了操作系统的不断发展,因而可以说Linux特别适合于操作系统课程的教学,在Linux上的实验主要分成3个部分

1.LINUX基本命令

2.LINUX下VI操作

3.VI下系统调用及进程通信等程序设计

 

实验(12学时)

一、  实验目的

通过实验,使学生加深对《操作系统》课程部分理论知识的理解,并了解当今流行的LINUX操作系统的操作命令,以及其下有关进程、线程的程序设计。

二、实验内容和学时安排

实验内容

课时

实验一

LINUX基本命令及vi下编程环境

3

实验二

LINUX下VI基本操作

3

实验三

进程/线程通信与程序设计

6

三、 实验内容

实验一LINUX基本命令及编程环境

1.   实验的基本目的

通过上机操作,了解linux操作系统的特点,及常用命令。

linux是一个分时、多用户、多任务的操作系统。

它具有精简的核心。

linux提供两种用户界面:

一种是交互命令,即用户在终端上通过使用命令交互调用核外程序;另一种是系统调用,即用户编写程序时通过使用C语言的函数调用来调用系统核心功能。

本实验熟悉Linux操作环境,及Linux各类命令基本操作的使用方法。

2.LINUX基本命令

命令

解释

用法

举例

ls

显示某一个目录下的内容(文件和目录)

用法:

ls或者ls目录

ls后为空时表示显示当面目录下的内容。

可以在ls后面加上所要查看的目录路径名称

ls

ls/

ls/home/

ls/etc/sysconf

ls-l

详细显示

用法:

ls–l或者ls–l目录

注:

l为字母,不是数字1。

ls-l

ls–l/home

ls-a

显示所有的文件

用法:

ls–a或者ls–a目录

以.开始的文件为隐藏文件,此时也会显示,其他情况下不显示

ls–a

ls–la/etc/

cp

复制文件

用法:

cp原文件目标文件

注:

文件可以加上路径名

cp/home/lion/test1/home/lion/test/test2

cp-r

复制整个目录

用法:

cp–r原目录目标目录

注:

目录下的所有文件都会复制

cp/home/lion/mjli/home/lion/test/mjli2

mv

移动文件或者目录

和cp用法类似,但是移动后,原文件或者目录不存在。

注:

移动目录时不用-r参数

mv/home/lion/test1/home/lion/test2

mv/home/lion/mjli/home/lion/mjli2

touch

创建文件

用法:

touch文件名

touch/home/lion/test1

mkdir

创建目录

用法:

mkdir目录名

touch/home/lion/mjli

rm

删除文件

用法:

rm文件名

rm/home/lion/test1

rm-r

删除目录

用法:

rm–r目录名

rm–r/home/lion/mjli2

rmdir

删除空的目录

用法:

rmdir目录名

注:

此目录必须为空,否则无法删除

rmdir/home/lion/mjli2

cd

改变目录路径

用法:

cd目录名

cd/etc

cd/home/lion

cd..

到上一层目录中

用法:

cd..

cd..

cd/

到根目录下

用法:

cd/

cd/

pwd

显示当前的目录路径

用法:

pwd

pwd

cat

查看文件内容

用法:

cat文件名

cat/home/lion/test1

可以没有文件名,表示接收键盘,以ctrl+C结束

more

查看较长内容的文件

用法:

more文件名

注:

在显示中,按空格键滚动一页,按回车键滚动一行,按q键退出

more/home/lion/test2

less

查看较长内容的文件

与more用法类似。

Pgup、Pgdown,y向上滚动一行

less/home/lion/test2

psaux

查看系统的进程

注意:

参数aux最好一起使用

psaux

w

显示在线用户信息

用法:

w

注:

比命令who的信息详细

w

who

top

显示系统任务信息,包括cpu、内存等

用法:

top

top

mesg

是否接受其他人的write信息

用法:

mesgy或者mesgn

注:

y为接受,n为不接受。

mesgy

mesgn

write

传送信息给其他用户

用法:

write用户或者write用户TTY。

注:

TTY用于有区别多个同样的用户,可由w命令来获取。

writelion

writelionpts/2

Ctrl+C退出

passwd

修改密码

用法:

passwd

注:

超级用户可修改其他用户密码,此时为passwd用户

passwd

du

显示目录下的各个文件的占用磁盘情况(包括子目录下文件)

用法:

du目录名

注:

无目录名时为当前目录

du

du/home/lion

du-s

显示目录下的所有文件的大小

用法:

du–s目录名

注:

无目录名时为当前目录

du–s

du–s/home/lion

date

显示系统日期和时间

用法:

date

date

uptime

显示系统运行时间

用法:

uptime

uptime

clear

清除当前屏幕

用法:

clear

clear

wc

统计文件,给出文件的行数、字数、字符数

用法:

wc文件名

wc/home/lion/test1

grep

过滤文本

和其他命令连用,如

ls|grepsring为只显示具有string的行

cat文件名|grepstring为只显示文件中具有string的行

ls–l|grepstring

cat/home/lion|grephehe

psaux|greptest1

grep–n

过滤文本,把所找到的行在行前加上行号列出

用户与grep类似,加上参数即可

ls–l|grep–nstring

psaux|grep-ntest1

grep–v

过滤文本,把不包含给定string的行列出

用户与grep类似,加上参数即可

ls–l|grep–vstring

psaux|grep–vtest1

grepstring-r

搜索文本

用法:

grepstring–r目录名

在给定目录下搜索所有文件中含有string的行

注:

也可加-n–v参数。

grepstring–r/

grephehe–r/home/lion

df

查看系统硬盘信息

用法:

df

df

free

查看系统内存信息

用法:

free

free

ping

查看与对方机器是否连接

用法:

pingIP地址或者域名

ping

ping202.38.64.1

echo

回应输入内容

用法:

echostring

注:

结果将显示string

echohello

echohehe

whoami

显示当前正在进行操作的用户名

用法:

whoami

whoami

exit

退出登录系统

用法:

exit

exit

ctrl+C

中止程序执行

用法:

ctrl+C

ctrl+C

ctrl+D

退出系统

用法:

ctrl+D

ctrl+D

chmod

详见下面说明

chmod为改变文件权限。

在linux中,一个文件上有可读(r)可写(w)可执行(x)三种模式,分别针对该文件的拥有者(onwer)、同组者(group),和其他人(other)。

一个文件如果改成可执行模式则系统就将其视为一个可执行文件,而一个目录的可执行模式代表使用者有进入该目录之权利。

chmod就是用来变更一些文件的模式,其使用方式如下:

chmod[-R]mode文件名

-R将所有子目录及文件改为你所要改成的模式。

其中模式即可以用数字表示也可以用字母表示,分别表示如下:

1)数字

按照拥有者、同组者、其他人的顺序,给出一个三位的数字,r为4,w为2,x为1,例如765第一个数字7表示拥有者具有r+w+x的权限(7=4+2+1),第二个数字6表示同组者具有r+w权限(6=4+2),第三个数字5表示其他人具有r+x权限(5=r+x)。

用法:

chmod765文件名

可将其中的数字更改为所需要的权限即可。

2)字母

用法:

chmod[ugo]+/-[rwx]文件名

例如:

chmodu+r/home/lion/test1

chmodug+rx/home/lion/mjli/

其中[]可以同时出现,其意义分别如下:

+或-

r

w

x

u

u+r,u-r表示拥有者拥有或者取消可读权限

同理

同理

g

g+r,g-r表示同组者拥有或者取消可读权限

同理

同理

o

o+r,o-r表示其他人拥有或者取消可读权限

同理

同理

*其他特别命令:

解释

>

输出由屏幕重定向到文件中,文件原来内容被清空

用法:

命令>文件名

注:

命令可以为以上的命令,文件名可有目录路径

ls–l>/home/lion/result

>>

输出由屏幕重定向到文件的末尾中,文件原来内容被保留

类似>,只是保留了原文件的内容。

ls–l>>/home/lion/result

<

输入重定向,由文件的内容代替键盘输入

用法:

命令<文件名

注:

命令可以为以上的命令,文件名可有目录路径

wc

|

连接两个命令(前一个命令的结果作为后一个命令的输入)

用法:

命令|命令

ls--help|more

ls|grephello

ls|wc

.

当前目录

用法:

./文件或者目录

ls./

cp/home/lion/mjli./test/

..

上一目录

用法:

../文件或者目录

cd..

cp../test1./home/lion/

&

命令作为后台命令执行

用户:

命令&

gw03test&

说明:

1)大部分命令带很多选项,大部分选项在字符前面带有“–”,只是命令不同,所具有的选项参数不同,可以通过man,或info命令查看全部选项及说明,:

q键退出

2)通配符*,?

*表示任意字符+任意个数;?

表示任意1个字符。

3)LINUX命令多达上百,本实验仅给出了一些常用的命令和举例选项供简单了解和练习。

需要更多的了解LINUX,可以到中国IT实验室上,或其它网站查询。

3.部分命令练习:

1)用pwd命令查看当前所在的目录。

2)用ls命令列出此目录下的文件和目录。

3)用-a选项列出此目录下包括隐藏文件在内的所有文件和目录,其命令为_____ls-a__。

4)用man命令查看ls命令的使用手册,其命令为:

_____。

5)在当前目录下,创建测试目录test,其命令为:

______。

6)利用ls命令列出文件和目录,确认test目录创建成功。

  7)进入test目录,查看当前目录的命令为:

__cdtest____。

  8)用cp命令复制系统文件/etc/profile到当前目录下,其命令为:

_______。

9)复制文件profile到一个新文件profile.bak,作为备份,其命令为:

___cpprofileprofile/bak______

  10)用less命令分屏查看文件profile的内容,注意练习less命令的各个子命令,例如b、p、q等

11)用grep命令在profile文件中对关键字then进行查询,其命令为:

______

12)删除文件newfile,显示当前目录下文件列表,回到上层目录。

Rmnewfile

13)把一个文件filename移动到test目录下其命令为________。

13)显示当前目录下的文件和目录列表,确认移动成功。

14)进入test目录,显示目录中的文件列表。

15)显示当前目录下文件和目录列表,复制test目录为testbak作为备份。

16)删除test子目录下的所有文件,其命令为:

____________。

*任意选择其中8个(抄题,给出答案,即命令形式)作为实验报告部分。

 

实验二vi基本操作:

1.进入vi命令格式:

vi[选项][文件名…]

vifilename:

打开或新建文件,并将光标置于第一行首

vi+nfilename:

打开文件,并将光标置于第n行首

vi+filename:

打开文件,并将光标置于最后一行首

vi+/patternfilename:

打开文件,并将光标置于第一个与pattern匹配的串处

vi-rfilename:

在上次正用vi编辑时发生系统崩溃,恢复filename

vifilename....filename:

打开多个文件,依次进行编辑

2.vi的基本命令:

最后行模式

命令

解释

:

x

保存之后退出

:

wq

保存之后退出

:

w

保存文件,不退出

:

q

退出

:

q!

不存盘就退出

:

setnumber

在每行开始显示行数

命令模式

命令

解释

h,←

光标左移

j,↓

光标下移

k,↑

光标上移

L,→

光标右移

0(数字0)

d0

光标移到本行的开头

光标删到本行的开头

$

d$

光标移到本行的末尾

光标删到本行的末尾

a

在当前位置之后添加

i

在当前的位置前面插入

o

在当前行的下面建一个新行

O

在当前行的上面建一个新行

数字G

跳至第“数字”行(无数字时跳到文件末尾)

数字yy

复制多少行(无数字时复制光标行)

数字dd

删除多少行(无数字时删除光标行)

p

在当前行的下面粘贴

u

撤消上一次的命令操作(可撤销多次操作)

D

从光标位置删除到本行行末

x

删除当前字符

X

删除前一个字符

Ctrlf下移一屏,通常是24行

Ctrlb上移一屏,通常是24行

Ctrld下移半屏,通常是12行

Ctrlu上移半屏,通常是12行

[n]G光标移动到缓冲区中第n行(省略时,末行)的首非空白字符处

:

nu显示当前行

/字符串向后查询指定的字符串,光标定位到行首

?

字符串向前查询指定的字符串,光标定位到行首

3.vi的几种模式转换

Vi编辑器的三种工作模式之间的转换如图所示。

 

4.vi编辑C源程序后的编译:

gcc的基本用法

gcc[options][filenames.c]

  GCC选项

GCC有超过100个的编译选项可用。

这些选项中的许多你可能永远都不会用到,但一些主要的选项将会频繁用到,最主要的是-o选项。

 当你不用任何选项编译一个程序时,GCC将会建立(假定编译成功)一个名为a.out的可执行文件。

GCC同样有指定编译器处理多少的编译选项。

-c选项告诉GCC仅把源代码编译为目标代码而跳过汇编和连接的步骤。

这个选项使用的非常频繁因为它使得编译多个C程序时速度更快并且更易于管理。

缺省时GCC建立的目标代码文件有一个.out的扩展名。

 

例1:

gcctest.c

这样将编译出一个名为a.out的程序;

例2:

gcc-orun.outcount.c

   这样将编译出一个名为run.out的程序

注意:

当使用-o选项时,-o后必须跟一个可执行(后缀为.out)文件名。

5.vi编辑C源程序后的运行

运行可执行文件命令形式:

·/文件名(全称)

 

实验三程序设计

1. 进程的创建

实验的基本目的是通过对进程的创建、控制和通信的设计达到下述目的:

●加深对进程概念的理解,明确进程和程序的区别。

●进一步认识并发执行的概念,区别顺序执行和并发执行。

1)例子1-1.系统调用fork()

//#include 

//#include 

#include

main ()

{

    pid_t(改为int) pid;/*pid_t是short类型*/

    pid=fork();

    if (pid < 0)

        printf("error in fork!

");

    else if (pid == 0)

       printf("i am the child process, my process id is %d\n",getpid());

        else

         printf("i am the parent process, my 

process id is %d\n",getpid());

}

2)例子1-2.系统调用fork()

#include 

#include 

main ()

{charch; pid_t(改为int) pid;

    pid=fork();

    if (pid < 0) printf("error in fork!

");

    else

 if (pid == 0){

while((ch=getchar())!

=‘c’)/*判断当前键入的是否为c*/

      {printf("child processid is %d\n",getpid());

sleep

(1);}exit(pid);}

    else

{while((ch=getchar())!

=‘p’)/*判断当前键入的是否为p*/

      {printf("parent process id is %d\n",getpid());

sleep

(1);}exit(pid)可删掉或改为exit(getpid());}

}

*3)改动1)的源程序,在子进程执行部分再创建一个子子进程。

2. 通过管道的进程通信

实验的基本目的是通过进程的创建、管道的设置,实现进程间通过管道进行通信的目的,了解在LINUX下进程间通过管道通信的基本程序设计过程。

#include

intpipe(intp[2]);

如果正常,返回0,有错则返回-1.

pipe()把p[]与两个文件描述符紧密联系起来:

p[0]用于从管道读

p[1]用于向管道写

 

1)例子2-1.利用pipe()和fork()

#include

#include

#include

#include

#defineMSGSIZE16/*正文+空*/

char*msg1=“hello,world#1”;

char*msg2=“hello,world#2”;

char*msg3=“hello,world#3”;

intmain()

{charinbuf[MSGSIZE];

intp[2],i,pid;

if(pipe(p)<0)/*打开管道*/

{perror(“pipeerror!

”);/*无法打开一个管道错*/

exit

(1);}

if((pid=fork())<0){perror(“fork”);

exit

(2);}

if(pid>0)/*父进程*/

{close(p[0]);/*关闭读端(连接)*/

write(p[1],msg1,MSGSIZE);

write(p[1],msg2,MSGSIZE);

write(p[1],msg3,MSGSIZE);

wait((int*)0);什么意思?

}

if(pid==0)/*子进程*/

{close(p[1]);/*关闭写端*/

for(i=0;i<3;i++){

read(p[0],inbuf,MSGSIZE);

printf(“%s\n”,inbuf);

}

}

return0;

}

注意:

(1)图示:

关闭一个方向

 

(2)管道的大小(Size)

每个管道都有一个大小限制

通常大约为5k(5120)个字节

(3)写问题

●write()将被挂起(阻塞)

如果管道中无法存放正文(容量不够),可能在写的过程中发生阻塞

●如果向一个没有读连接的管道写,将返回-1,且errno被置成EPIPE.

errno是一个全局变量.

(4)读问题

read()将被阻塞

如果管道空,且有一个写连接开放,read()将返回0。

如果为空,且没有任何写连接,就此,读进程可以知道通信结束。

2)例子2-2.pipe()下的生产与消费者问题

#include"sys/types.h"

#include"sys/file.h"

#include"unistd.h"

charr_buf[4];//读缓冲

charw_buf[4];//写缓冲

intpipe_fd[2];

pid_tpid1,pid2;

intproducer(intid);

intconsumer(intid);

inti,pid,status;/*status用来表示进程退出的状态*/

main()

{if(pipe(pipe_fd)<0)

{printf("pipecreateerror\n");exit(-1);}

else{printf("pipeisc

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

当前位置:首页 > 考试认证 > 财会金融考试

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

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