操作系统实验报告 linux部分原创.docx

上传人:b****7 文档编号:9140605 上传时间:2023-02-03 格式:DOCX 页数:11 大小:21.71KB
下载 相关 举报
操作系统实验报告 linux部分原创.docx_第1页
第1页 / 共11页
操作系统实验报告 linux部分原创.docx_第2页
第2页 / 共11页
操作系统实验报告 linux部分原创.docx_第3页
第3页 / 共11页
操作系统实验报告 linux部分原创.docx_第4页
第4页 / 共11页
操作系统实验报告 linux部分原创.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

操作系统实验报告 linux部分原创.docx

《操作系统实验报告 linux部分原创.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告 linux部分原创.docx(11页珍藏版)》请在冰豆网上搜索。

操作系统实验报告 linux部分原创.docx

操作系统实验报告linux部分原创

操作系统实验报告linux部分(原创)

2、3Linux并发程序设计(实验估计时间:

90分钟)Ø背景知识Ø实验目的Ø工具/准备工作Ø实验内容与步骤背景知识管道是Linux中最常用的进程间通信IPC机制。

利用管道时,一个进程的输出可成为另外一个进程的输入。

当输入输出的数据量特别大时,这种IPC机制非常有用。

可以想象,如果没有管道机制,而必须利用文件传递大量数据时,会造成许多空间和时间上的浪费。

在Linux中,通过将两个file结构指向同一个临时的索引节点,而两个索引节点又指向同一个物理页而实现管道。

实验目的1)

通过在Linux进程之间进行的通信实例来学习并发程序设计的方法。

2)

通过Linux进程通信的程序设计与实现,进一步熟悉操作系统的进程概念,理解Linux进程管理概念。

3)

通过阅读和分析Linux实验程序,学习Linux程序设计、调试和运行的方法。

工具/准备工作在开始本实验之前,请回顾教科书的相关内容。

需要准备一台运行Linux操作系统的计算机。

实验内容与步骤并发程序的设计关键是使用创建进程的系统调用,使一个程序运行时可以生成几个同时运行的程序,如果程序中没有创建进程的动作则为顺序程序设计。

本实验中的并发程序例子完成两个程序child和father之间的数据传递工作,具体做法分为四步。

步骤1:

编制并发程序pipeline、c。

单击红帽子,在“GNOME帮助”菜单中单击“附件”-“文本编辑器”命令,在文本编辑中键入程序并保存为pipeline、c。

在该程序中定义管道和文件描述符,并且创建子进程child。

该程序用到的系统调用有pipe()、dup()、fork()、close、execl()、exit,它们的功能分别是建立管道、复制文件描述符、创建进程并使子进程与父进程有相同的程序正文、关闭文件描述符、用指定文件覆盖调用程序、撤销当前进程。

清单4-5pipeline、c//定义管道程序#defineSTD_INPUT0//定义标准输入设备描述符#defineSTD_OUTPUT1//定义标准输出设备描述符intfd[2];main(){staticcharprocess1[]="father",process2[]="child";pipe(fd);//定义管道pipeline(process1,process2);//调用自定义函数pipeline()

pipeline();exit

(1);//程序结束}pipeline(char*process1,char*process2){inti;while((i=fork())==-1);//创建进程,直到创建成功为止if(i)

{close(fd[0]);//关闭管道输入描述符close(STD_OUTPUT);//关闭标准输出描述符1dup(fd[1]);//指定标准输出描述符1为管道写指针close(fd[1]);//关闭原始管道写指针execl(process1,process1,0);//用程序father覆盖当前程序printf("fatherfailed、\n");//execl()执行失败}else{close(fd[1]);//关闭管道输出描述符close(STD_INPUT);//关闭标准输入描述符0dup(fd[0]);//指定标准输入描述符0为管道读指针close(fd[0]);//关闭原始管道读指针execl(process2,process2,0);//用程序child覆盖当前程序printf("childfailed、\n");//execl()执行失败}exit

(2);//程序结束}步骤2:

编制“管道写”程序father、c作为父进程的一部分工作。

其内容如下:

单击红帽子,在“GNOME帮助”菜单中单击“附件”-“文本编辑器”命令,在文本编辑中键入程序并保存为father、c。

清单4-6father、cmain()

{staticcharstring[]=“Parentisusingpipewrite、”;intlen;len=sizeof(string)

;write(l,string,len)

;/*将string中的内容写入管道中*/printf(“parent,parent,parent\n\n\n”)

;exit(0)

;}步骤3:

编制“管道读”程序child、c作为子进程的一部分工作。

其内容如下:

单击红帽子,在“GNOME帮助”菜单中单击“附件”-“文本编辑器”命令,在文本编辑中键入程序并保存为child、c。

清单4-7child、cmain()

{charoutput[30];read(0,output,30)

;/*从管道中读数据并存入output中*/printf(“%s\nchild,child、\n”,output)

;return(0)

;}步骤4:

编译。

Gcc–gpipeline、c–opipelineGcc–gfather、c–ofatherGcc–gchild、c–ochild步骤5:

运行。

、/pipeline、/father、/child若运行不成功,则应该用文本编辑器对源程序进行修改调试。

运行显示结果为:

childfailed、断开的管道Parentisusingpipewrite、parent,parent,parent输入的字符child,child、

2、4Linux重定向和管道(实验估计时间:

90分钟) Ø背景知识Ø实验目的Ø工具/准备工作Ø实验内容与步骤Ø可选练习 背景知识在本实验中,我们将使用高级Linux命令来完成重定向和管道。

每一个Linux命令都有一个源作为标准输入,一个目的作为标准输出。

命令的输入通常来自键盘(尽管它也可以来自文件)

命令通常输出到监视器或者屏幕上。

Linux计算环境使用重定向可以控制命令的I/O。

当试图把命令的输出保存到一个文件,以供以后查看的时候是很有用的。

通过管道,可以取得一个命令的输出,把它作为另一个命令的进一步处理的输入。

有几个元字符可用于输入/输出重定向符号:

输出重定向使用右尖括号(>,又称大于号)

;输入重定向使用左尖括号(<,又称小于号)

;出错输出重定向使用右尖括号之前有一个数字2(如2>)

本实验重点在输出重定向。

重定向命令的格式是:

mandRedirection-SymbolFile(textfileordevicefile)标准输出比标准输入或标准出错更经常被重定向。

许多命令,如ls、cat、head和tail产生标准输出到屏幕上,常常会希望把这个输出重定向到一个文件中,以便将来查看、处理或者打印。

通过替换文件名,可以截获命令的输出,而不是让它到达默认的监视器上。

最强大的元字符之一是管道符号(|)

管道取得一个命令的标准输出,把它作为标准输入传递给下一个命令(通常为more命令、lp(行式打印机)

命令或者一个文件处理命令,如grep或sort)

必须在管道的每边都有一个命令,命令和管道之间的空格是可选的。

管道命令的格式是:

mand|mand实验目的通过重定向和管道操作:

1)

熟悉输入/输出(I/O)

重定向;2)

把标准输出重定向创建一个文件;3)

防止使用重定向的时候覆盖文件;4)

把输出追加到一个现有的文件中;5)

把一个命令的输出导入到另一个命令中。

工具/准备工作在开始本实验之前,请回顾教科书的相关内容。

您需要做以下准备:

1)

由指导老师分配的登录用户名(如user2)

和口令。

2)

一台运行RedHatLinux操作系统,带有GNOME的计算机。

实验内容与步骤 

1、使用重定向标准输出符号

2、使用管道符号在本实验中将会用到下列命令:

pwd:

显示当前的工作路径。

cd:

改变目录路径。

ls:

显示指定目录的内容。

more:

分页显示文件的内容。

这是用于显示文本文件的首选方法。

head:

截取显示文件的开头部分(默认为开头10行)

tail:

截取显示文件的结尾部分(默认为最后10行)

cal:

有关日历的命令。

set:

shell特性的设置。

echo:

显示变量的值。

ps:

显示当前进程。

data:

显示或设置系统日期和时间。

grep:

查找文件中有无指定的关键字。

 提示:

如果对命令的格式不清楚,可以用man命令请求帮助,即:

manmore 步骤1:

开机,登录进入GNOME。

在GNOME登录框中填写指导老师分配的用户名和口令并登录。

步骤2:

访问命令行。

单击红帽子,在“GNOME帮助”菜单中单击“系统工具”-“终端”命令,打开终端窗口。

1、使用重定向标准输出符号步骤3:

重定向标准输出,创建一个文件。

右尖括号或称大于符号(>)

把命令的输出发送到一个文件中:

使用单个右尖括号,当指定文件名不存在的时候,将创建一个新文件;如果文件名存在,它将被覆盖。

(注意:

命令、重定向符号和文件名之间的空格是可选的)

重定向标准输出命令的格式是:

mand>file1)

为核实当前所在目录位置,使用什么命令?

pwd如果当前位置不在主目录中,使用什么命令可以改变到主目录中?

cd2)

如果希望把文件和目录列表截获,存储为主目录中的一个文件,这样可以追踪主目录中有什么文件。

使用什么命令,把长文件列表的输出重定向,创建一个叫做homedir、list的文件。

ls>homedir、list3)

新文件homedir、list被放在哪里?

/home/student使用ls命令核实新文件存在。

4)

使用什么命令,以一次一屏的方式,来查看刚才创建的文件内容?

ls–l|morehomedir、list5)

使用head命令截获homedir、list文件的前10行,通过重定向,创建一个叫做dhomedir、list-top-10的新文件。

应该使用什么命令?

headtop-10使用more命令查看文件的内容。

6)

使用tail命令,截获homedir、list文件的最后10行,通过重定向,创建一个叫做dhomedir、list-top-10的新文件。

使用什么命令?

tailtop-10使用more命令查看文件的内容。

7)

截获calonoclobber命令来完成。

o代表选项。

为了重新激活clobber特性,使用$setl>homedir、list,结果是什么?

bash:

homedir、list:

cannotoverwriteexistingfile3)

输入命令lsl命令的输出,作为more命令的输入(注意:

如果在当前目录中没有太多的文件,使用/etc目录获取长列表)

把输出作为more命令的输入的时候,得到什么结果?

结果以一屏一次的方式显示在屏幕上2)

查看使用ls–l|more命令列出来的文件,注意创建或修改的日期。

为了查看在同一个月被创建或修改的文件或目录的列表,可以使用grep命令对那个月进行搜索。

当月份显示在列表中的时候,指定它(例如:

Oct)

输入命令ls1|grep4096。

产生的列表是什么?

4096字节大小的目录显示4)

可以使用多个管道连接多个命令。

输入取得长文件列表输出的命令,把它输入给tail命令,然后到sort命令。

输入的命令是:

ls–l|tail|sort5)

ps(进程状态)

命令用于查看Linux系统中运行什么进程。

把pse选项将给出每一个在系统中运行的进程。

把输出输入到more命令中的结果是什么?

系统中运行的所有程序步骤7:

删除在本实验中创建的文件和目录。

步骤8:

关闭终端窗口,注销。

可选练习

1、使用seto。

noclobber特性打开还是关闭的?

如果它是关闭的,打开它。

使用什么命令?

关闭的;set–onoclobber2)

永久的关闭noclobber特性。

使用什么命令?

set+onoclobber

2、可以把管道和重定向组合起来使用,达到特殊的效果。

输入命令创建一个名为top

5、list的文件,内容为主目录中的头5行记录,使用什么命令?

ls–l|head“终端”命令,打开“终端”窗口。

步骤3:

回顾系统进程概念。

每个运行的程序都会创建一个进程,进程分配到一个唯一的进程标识符(PID)

PID被系统用于标识和跟踪进程,直到进程结束。

操作系统内核管理所有进程的初始化和终止。

每一个进程都要求系统资源(例如CPU时间和RAM空间)

在其中工作。

当进程启动的时候,操作系统把系统资源分配给每个进程,当进程终止的时候,系统回收这些资源。

在Linux系统启动的时候,首先启动的两个进程是sched(调度)

和init(初始化),它们管理着其他进程。

Linux系统中有几种不同类型的进程:

守护进程:

由Linux内核启动的进程,为了特定目的而存在。

例如,lpsched守护进程存在只是为了处理打印作业。

父进程:

派生其他进程的进程是父进程。

一个叫做init的守护进程是第一个调用的进程。

每一个进程,除了init之外,都有一个父进程。

子进程:

由其他进程派生出来的进程叫做子进程。

孤儿进程:

在进程返回输出之前,它的父进程结束了,这样的进程叫做孤儿进程。

僵进程:

子进程没有带着输出返回给父进程。

这样的进程在系统中变成丢失的进程。

使用此前的信息,完成以下填空:

1)

Linux系统中,几乎每一个启动的进程,都会由内核分配一个唯一的PID进程标识符,用于跟踪从进程启动到进程结束。

2)

当启动新进程的时候,内核也给它们分配系统资源,如CPU时间和RAM空间。

3)

永远不向父进程返回输出的进程叫做僵进程。

4)

由父进程派生出来的进程叫做子进程。

5)

父进程是一个派生另一个进程的进程。

6)

运行用于提供服务的Linux系统进程是守护进程。

7)

如果父进程在子进程之前结束,它创建了一个孤儿进程。

步骤4:

回顾ps命令和信息。

ps命令用于列出当前系统中运行的进程。

如果一个进程耗时太长,或者看上去好像已经终止了,表现为一个终端窗口不再响应或挂起,通常需要使用ps查看系统中的进程。

通过列出进程,可以查看初始化进程的命令或程序的名字,以及所有它派生出来的子进程。

通过多次执行ps命令,查看进程的时间进程占用的CPU时间,可以检查一个进程是否还在运行。

如果时间小再增长,那么进程可能已经终止了。

如果进程占用太长的时间或者已经停止,可以使用ps命令检查进程的进程ID(PID),然后杀死进程。

ps命令的输出将显示PID号和与其相关的命令或程序。

PID号通常用于终止一个进程。

ps命令(ps

[-options])

的3个主要选项如下表所示。

 表3-5ps命令选项ps选项意义功能Ps无选项显示当前shell或终端窗口中,当前用户的进程信息ps–e每一个显示系统中每一个进程的信息ps–f完全产生一个完全列表,给出每个进程的所有可用信息ps6中。

 表3-6实验记录PIDTTYTIMECMD4894pts/000:

00:

00bash4949pts/000:

00:

00ps 从当前终端窗口中,练习使用给出的每个选项的ps命令。

输入ps7中。

 表3-7实验记录UIDPIDPPIDCSTIMETTYTIMECMDstudent4894489xx:

09pts/000:

00:

00bashstudent49574894008:

31pts/000:

00:

00psf命令输出的各栏标题见表3-8所示。

 表3-8psef命令,显示运行在系统中的各个进程的完全信息。

执行该命令,并与ps–f命令的输出结果对照,一致吗?

有何不同?

不一致;ps–ef显示的信息内容要多于psef的列表可能很长。

如果知道启动进程的执行程序的名字,可以更快地找到PID。

通过把ps命令的输出结果输入到grep中,可以搜索想要终止的特定进程,确定正确的PID。

grep命令可以在其他命令的输出中搜索所有类型的特征字符串。

-l(长的输出)

选项将显示和找到的PID相关的进程的名字;-e选项显示PID和初始化命令的名字。

a、单击红帽子,在“GNOME帮助”菜单中单击“游戏”-“堆麻将”命令,打开“堆麻将”游戏。

b、在当前的终端窗口中,执行命令:

ps–e|grepmahjongg(“堆麻将”游戏的进程名是“mahjongg”),查找和“堆麻将”游戏调度守护进程相关的所有进程。

c、显示了多少个相关进程?

2个d、显示进程中最小的进程ID号是多少?

19648c、在当前终端窗口中执行命令:

pgrep–lmahjongg查找所有和“堆麻将”游戏调度守护进程相关的进程。

ps和pgrep命令输出之间有什么不同?

ps命令显示PI

D、TTY、TIME、CMD;pgrep命令只显示PID和CMD、步骤7:

确定一个要终止的进程。

当试图终止一个程序,或者释放一个挂起的终端窗口的时候,杀死和不响应的应用相关的PID可能还是不够的,一般需要杀死那个进程的父进程,在少数情况下,甚至要杀死父进程的父进程。

为了沿着层次结构,从子进程追溯到派生它们的父进程,必须能够查找PID和PPID。

必须首先确定最低级不响应进程的PID。

通常,可以试着去杀死那个进程。

如果这样做不能够停止那个进程,可能需要杀死它的父进程。

杀死父进程将杀死所有它派生的子进程。

杀死一个父进程也比杀死几个子进程快得多。

1)

在GNOME当前终端窗口中,输入ps命令。

有多少进程正在运行?

为什么只有这么少的进程?

有2个进程;因为ps只显示当前运行的进程。

2)

正在运行的进程的名字是什么?

它表示什么?

bash和ps3)

这个进程的PID是多少?

4990和196834)

在bashshell中输入命令csh,打开一个Cshell会话,当前系统的会话提示符是什么?

[student@inux~]$5)

输入pssh、ps–f6)

bash的PID是-sh(csh)

的PPID吗?

是,都为49907)

输入命令sleepl000&,创建一个进程,把执行挂起1000秒(大约15分钟)

&表示在后台运行命令,返回shell提示符,这样您可以继续工作。

8)

再次输入pssh(csh)

的PID是sleep命令的PPID吗?

哪个PID是csh(Cshell)

的子进程?

是,都为19695;19717和19718是csh的子进程9)

输入命令killf命令。

什么PID是sleep父命令的PPID?

init进程的PID:

1是sleep父命令的PPIDsleep进程现在是什么类型的进程?

孤儿进程步骤8:

使用kill命令终止一个进程。

信号用于终止、挂起和继续进程。

有时候使用Ctrl+c可以终止一个不响应的进程。

这样向进程发送一个中断(INT)

信号,终止它及所有它派生的子进程。

kill命令提供了一个终止不想要的命令进程的直接方法。

当想停止一个运行了很长时间的命令的时候,或者当需要终止一个不能够正常退出的进程的时候,它很有用。

指定PID正常地杀死一个进程。

kill

[-signal]process9选项的kill命令。

这个选项叫做强制杀死,当shell对所有其他终止信号都不响应的时候,需要使用它来杀死shell。

killid注意:

对于shell之外的进程,把kill–9(SIGKILL)

作为最后的选项,因为它是一种生硬的方法,不允许正确的进程终止。

a、输入命令ps–f,显示在当前shell中运行的进程的完整信息。

现在什么进程正在运行?

bash、sleep1000、psf步骤9:

按照用户查找和终止一个进程。

ps命令可以带ef使用得更多,因为一般只能够管理属于自己的进程。

我们可以通过用户登录名或者UID号来查找用户的进程。

用户只能够终止自己的进程,但是超级用户可以终止系统中所有运行的进程。

ps–ulogin-ID或UID1)

启动计算器和“堆麻将”游戏GNOME应用程序。

2)

使用带u命令组合grep,查找“堆麻将”程序的PID号,而不是使用ps-u查找整个列表。

您使用什么命令?

提示:

猜猜“堆麻将”程序的命令名中可能有哪个字母,使用grep搜索那些字母。

ps–ustudent|grepmahj5)

终止“堆麻将”程序。

它是否还在桌面上运行?

否6)

退出Cshell。

步骤10:

删除所有在本实验中创建的文件和目录。

步骤11:

关闭终端窗口,注销。

5、2Linux文件信息命令和基本文件管理(实验估计时间:

120分钟)Ø背景知识Ø实验目的Ø工具/准备工作Ø实验内容与步骤 背景知识在本实验中,我们将使用不同的信息命令,来调查和发现文件的信息;使用命令来帮助确定文件类型和创建文件的应用;也可以使用几个命令来查看文本文件的内容和对它们进行比较。

作为基础,使用命令来分析和管理文件及目录的能力对于进一步学习Linux操作系统是非常重要的。

Linux特权用户和系统管理员必须有使用命令行的工作背景,例如创建可执行的脚本文件等(Linux脚本文件包含着一系列的Linux命令)

许多操作系统管理和设备配置作业需要理解Linux命令,并且在某些情况下,命令行是仅有的操作方式。

在本实验中,我们将在命令行下使用文件管理命令工作,介绍文件和目录命名规则。

我们将创建一个简单的目录结构,然后在那些目录中创建一个文件,并练习创建和删除文件和目录。

实验目的通过本实验:

1)

使用控制字符执行特殊功能;2)

使用file和strings命令确定文件类型;3)

使用cat利more命令显示文本文件的内容;4)

使用head和tail命令显示文本文件的部分内容;5)

使用wc命令确定单词、行和字符数;6)

使用diff命令比较2个文件。

7)

回顾文件和目录命名约定;8)

使用touch命令创建新文件;9)

使用mkdir命令创建新目录;10)

使用r

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

当前位置:首页 > 高等教育 > 文学

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

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