进程管理实验说明_第1页
进程管理实验说明_第2页
进程管理实验说明_第3页
进程管理实验说明_第4页
进程管理实验说明_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验1 Linux操作系统简介及基本使用Linux概述Linux是一个多任务、多用户的操作系统。在Linux系统中同时可以有多个用户使用同一台计算机,运行多个不同的应用。这与平时使用的Windows操作系统是不同的。学生平时使用的几乎都单用户独占系统(因此不用登录)。在Linux系统上,用户为了使系统能够识别自己,必须进行登录。登录分为两步:输入用户的登录名,系统将根据该登录名来识别用户;输入用户的口令,该口令是用户自己选择的一个字符串、对其他用户是保密的、在登录时系统用来辨别真假用户的关键字。系统认为只有用户自己和用户授权的人知道这个口令,所以只允许正确口令的用户登录,其他用户则不能登录到这

2、个帐户下。在一般情况下,系统管理员会在为用户建立帐户时赋给用户一个用户名和一个初始的口令。另外,每个Linux系统都被赋予一个主机名(hostname)。这个主机名是赋给计算机的名字(标识)。主机名用来在网络上识别独立的计算机。登录我们对系统的使用都是从登录开始的。首先要求使用者必须拥有一个合法的个人账号,只有系统认可了的账号,才会获得系统的使用权。系统有两种用户:超级用户root和一般用户。超级用户root,对系统的一切拥有完全的控制权限。通常用root账号进行系统管理及维护,包括建立新的用户账号,启动、关闭、后备及恢复系统等。 因为root的权限不受限制,一旦误操作可能会导致不可预料的后果

3、,所以在以root身份登录时,必须格外小心,并且只有在必须时才用root登录。如果是系统管理员或者独自拥有这台机器,就可以用超级用户登录。启动putty后,可看见屏幕有如下显示: login:选择登录的用户不同权限也不一样,其中“系统管理员”拥有最高权限。在靠近login处使用小写字母键入你的用户名student,然后按RETURN键,可看见屏幕有如下 显示: password:在靠近password处使用小写字母键入你的口令student,然后按RETURN键。如果系统审核输入的口令正确,则显示: Welcome to LINUX System V. $其中显示shell提示符为$,表示完成

4、注册进程。在某些Linux系统中,shell提示符为百分号%。 特别的,系统管理员的shell提示符为#。shell提示符是注册序列的结束,当用户看到shell提示符时,说明你已成功地在你的Linux系统中注册,进入系统后,就可以执行各种任务了。 如果密码输入错误,将出现如下提示: Login incorrect稍后,又会出现“login:”,要求重新输入用户名。注意,这里输入的密码并不在屏幕上回显,这样独特的设计同样是为了安全的需要,以免旁边的人轻易地看到密码。正像在Windows中输入密码使用 “*”显示一样,它有效地保护了密码,维护了系统的安全性。一旦注册进入系统后, 可以用passwd

5、命令来修改密码。 这时系统会询问当前的密码, 然后是新密码: zhangLinux zhang passwd Changing password for zhang (current) UNIX password: New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully 说明:我们使用的用户名和口令会由系统管理员进行统一设置。Shell外壳这shell是LINUX与用户的交互接口,它是用户输入的键盘命令的解释程序(翻译器)和程序语言工具。shell解释

6、程序执行的命令也称shell命令,所有shell命令之集合称作shell语言。退出系统当用户要终止他的LINUX对话时,必须注销,相应于shell提示符,请按Ctrl-D(D),或者键入logout/exit。当用户执行完各种操作后,就要及时退出系统,这是一个良好的习惯,即使是暂时离开机器也同样如此。在用户注销后,LINUX可能会显示login:信息的内容.屏幕会有如下显示: $ login:如果你按RETURN键时LINUX不显示shell提示符,那么表示已注销成功;如果LINUX 仍显示你的shell提示符,那么表示你未注销,则请重复注销进程。关机或重启关机或重新启动机器只有系统管理员才可

7、以做。l 当做完所有的工作后,我们就要关闭系统了,这时切不可直接关掉电源,一定要首先执行关闭系统命令。此命令的执行要在超级用户下执行,关闭系统命令是halt。 l shutdown命令可以关闭所有程序,依照用户的需要,重新启动或关机。 参数说明如下: 立即关机:h 参数让系统立即关机。范例如下: rootlocalhost root#shutdown h now 要求系统立即关机指定关机时间:time参数可指定关机的时间;或设置多久时间后运行shutdown命令,范例如下: rootlocalhost root#shutdown now 立刻关机 rootlocalhost root#shut

8、down +5 5分钟后关机 rootlocalhost root#shutdown 10:30 在10:30时关机 关机后自动重启:r 参数设置关机后重新启动。范例如下: rootlocalhost root#shutdown -r now 立刻关闭系统并重启 rootlocalhost root#shutdown -r 23:59 指定在23:59时重启动 l 重新启动计算机的reboot命令 顾名思义,reboot命令是用来重新启动系统的。有时在对系统的某一配置做了修改以后,或者安装了新的软件,需要重新启动才能使所做的修改生效,这时就要用到重新启动命令reboot,它需要超级用户的权限。

9、常用的参数如下: -f 参数:不依正常的程序运行关机,直接关闭系统并重新启动计算机。 -I 参数:在在重新启动之前关闭所有网络接口。 虽然reboot命令有参数可以使用,但是一般只需要单独运行reboot命令就可以了。还有一种重新启动的方法是不需要先进入超级用户,在login状态下,同时按下Ctrl+Alt+Del键,系统同样可以重新启动,这就是所说的热启动。指令简介 指令格式指令名称 选择项 参数同一行中可以输入一个以上的指令,只要指令间以分号(;)隔开,Linux将会按次序执行命令序列。 指令选择项为了执行动作产生不同的结果;选择项以(-)号开头; 指令参数参数的目的是描述指令所需的一些信

10、息(例如:文件名称),而这些信息在每次执行该指令时都不相同。 通配符“*”:可用来代表文件名中的任意长度的字符串;“?”:可用来代表文件名中的任一字符;“”:可用来代表文件名中的任一属于字符组中的字符。以下这些命令均为shell命令。基本命令1.man 显示联机Linux手册 格式 $ man option chapter title. 描述 man命令打印你所指定的命令。在你的LINUX系统中,也许有LINUX系统V用户 手册或Linux程序员手册。在较小的Linux系统中,也许没有man命令,因为联机手册需要相当大的磁盘空间。 举例 你可使用命令man who查看who命令的手册描述。 2

11、. ls 显示当前工作目录下内容格式 $ ls ltr 描述 ls(list)命令是非常有用的命令,根据文件名按字母顺序显示当前目录中的文件和子目录列表。配合参数的使用,能以不同的方式显示目录内容。 选择项 ls命令有多个选择项,下面列出几个重要的选择项:l 以长格式列出文件,其中包括文件中的字符个数,以及最近修改的日期和时间。t 以最近修改的时间顺序列出文件。 r 将t选择的列表顺序变反。 a 显示隐藏文件。当运行ls命令时,并不会显示名称以“.”开头的文件。因此可加上“-a”参数指定要列出这些文件。举例 以修改时间的顺序列文件,输入命令ls ltrCR。Linux文件的类型:“-”为正文文

12、件普通文件;“d”为目录文件;“b”为块设备文件;“c”为字符设备文件;“l”为链接文件;“p”为管道文件;3. cd 切换工作目录-在目录树中移动 格式 $ cd 路径 描述 cd(change directory)命令切换到指定的目录,并把它作为工作目录。 它有三种格式: cd 返回用户主目录,并把它作为工作目录。 cd 目录名称 改变现行目录到指定目录。 cd . 返回到工作目录的父目录,并把它作为工作目录。cd / 进到根目录4. mkdir 在当前工作目录下建立子目录 格式 $ mkdir 目录名称 描述 mkdir(make directory)命令建立1个或多个指定目录。5. r

13、mdir 删除当前工作目录下子目录 格式 $ rmdir 目录名称.描述 rmdir(remove directory)命令删除指定目录,而目录必须为空。如果目录不为空,LINUX将显示适当的报错信息。 注释 要删除含有文件的目录,你可使用带有危险性的rmr命令。6. rm 删除文件格式 $ rm 文件名. 描述 rm命令删除一个或多个指定文件。 选择项 i 选择项使LINUX询问是否要删除指定文件。如果是这样,则键入y(表示yes),否则键入n (表示no)。选择项 f 选择项使LINUX直接删除文件,不再询问。举例 为删除文件pterodacty,请键入命令rm pterodactyCR。

14、 为用i选择项删除文件“dinosaur”,请输入命令rmi dinosaurCR 。LINUX会问你“rm:remove dinosaur?(删除dinosaur吗?)”如果你要删除“ dinosaur”,则键入y,否则,键入n。 选择项 v 选择项使LINUX显示删除过程。7. rm r 删除目录及其文件 格式 $ rm r 目录名称 描述 rm r(remove recursively)命令删除指定目录及其内容。 注释 rm r命令删除指定目录以及目录所含的所有文件和目录。命令rm r具有很大的危险性,因为你也许不小心删除了你不愿删除的文件。8. cp 复制文件 格式 $ cp 文件名1

15、 文件名2 描述 cp命令进行文件“文件名1”的复制拷贝,拷贝件称为“文件名2” 注释 如果你将一文件拷贝到已存在的文件中,那么现存文件的内容会被改写。一般状态下不会显示复制过程,若要显示复制过程,则加入-v参数可显示命令执行过程。加入“-R”参数可同时复制目录下的所有文件及子目录。举例 为将文件从“this”拷贝到“that”中,请输入命令cp this thatCR9. mv 移动或重新命名文件和目录 格式 $mv 文件名1 文件名2 $mv 文件名.directory $mv directory directory 描述 mv命令的第1种格式重新命名指定的普通文件;第2种格式将指定的普通

16、文件移到指定目录;第3种格式重新命名带指定名的指定目录,或如果第2个目录名是1个现存目录,那么就把第1个指定目录移到它里面。 举例 下面的命令将普通文件“文件名1”和“文件名2”移到目录“directory.1”中: mv 文件名1 文件名2 directory.1 下面这条命令将工作目录中其名以“文件名”开头的所有文件移到目录“ directory.1”中: mv file directory.1 下面这条命令不仅重新命名目录“index”,而且把它从你的工作目录移到目录“usrishmaelbook”中。然而,如果“usrishmaelbookindex” 是1个现存目录,那么该命令将把“

17、directory.1”移到其中,而不变更名字。 mv directory.1 usrishmaelbookI10. cat 直接显示文件内容格式 $ cat 文件名. 描述 cat命令将文件名作为其自变量显示文件的内容(经常和more命令搭配使用),或是将数个文件合并成一个文件。注释 cat命令通常用文件名作为自变量,如果在你按RETURN键之前忘记键入文件名,那么请按DELETE键。之后,会出现shell提示符.“cat”表示concatenate; cat命令还可用来合并文件。如果文件显示太快,你可按controls(S)终止 cat的输出;同时,你可按controlq(Q)恢复输出。

18、举例 显示两个文件“bird”和“dog”,输入命令cat bird dogCR。一旦cat显示完“bird”,它便显示“dog”。 将preface.txt 附加到outline.txt文件之后: tonyfree tony$ cat preface.txt >> outline.txt 将new.txt和info.txt合并成readme.txt文件: tonyfree tony$ cat new.txt info.txt >readme.txt11. more 分屏显示文件内容 格式 $ more 文件名. 描述 为了避免画面显示瞬间就闪过去,用户可以使用more命令显

19、示文件,一次显示一屏。对每一屏,more都打印一个百分数, 指出已显示了文件的多少内容。为显示另一屏幕,应按SPACEBAR(空格键)。如果你仅想显示下一行,则可按RETURN键,按Q键停止显示。当more显示整个文件后,就返回shell提示符。要在完成文件显示之前退出more,请按DELETE键。 选择项 more有一些选择项,在你成为有经验的用户后, 这些选择项对你会有用。 你的用户手册会描述这些选择项。 注释 more命令不是所有LINUX系统中都有。 如果你的系统有more命令,你可使用more命令而不使用cat命令,因为more命令允许你控制显示多少文件内容。当使用ls命令查看文件列

20、表时,若文件太多则可以配合more命令使用。举例tonyfree bin$ ls al more 12. less 上下浏览文件内容格式 $less 文件名描述 less命令显示文件,且可以回顾前面的内容。当使用less 文件名查看一个文件内容时,屏幕上先显示出第一页的内容,看完后按空格键跳到下一页,按Enter键向下移一行。另外,按PageUp及PageDown键可以看上一页及下一页的内容。结束时要按Q键跳回shell。13pwd 列出当前目录的完整路径名 格式 $ pwd 描述 pwd(print working directory)命令显示用户当前所在的目录。文件系统概述Linux的文件

21、系统和Windows的文件系统有很大的不同。Linux只有一个文件树,整个文件系统是以一个树根“/”为起点的,所有的文件和外部设备都以文件的形式挂结在这个文件树上,包括硬盘,软盘,光驱,调制解调器等,这和以驱动器盘符为基础的Windows系统是大不相同的。Linux系统通过目录将系统中的所有文件分级、分层组织在一起,形成Linux文件系统的树型层次结构。以根目录为起点,所有其他目录都由根目录派生而来。文件系统Linux缺省支持ext3。Linux的文件结构体现了这个操作系统简洁清析的设计,我们能够接触到的linux发行版本的根目录大都是如图3-1的结构: /bootdevetchomelibb

22、inprocusrvargrublost+foundsharelocalbinmansrcbinman1php.1图3-1 文件系统结构在Linux系统中有许多系统默认的目录,这些目录按照不同的用途而放置了特定的文件:/bin:该目录存放最常用的基本命令,比如拷贝命令cp、编辑命令vi、删除命令rm等。/boot:该目录包含了系统启动需要的配置文件、内核(vmliuxz)和系统镜像(initrd.img)等。/dev:该目录下存放的是Linux中使用或未使用的外部设备文件(fd代表软盘,hd代表硬盘等),使用这些设备文件可以用操作文件的方式来操作设备。/etc:该目录下包含了所有系统服务和系统

23、管理使用的配置文件;比如系统日志服务的配置文件syslog.conf,系统用户密码文件passwd等。/home:该目录下包含了除系统管理员外的所有用户的主目录,用户主目录一般以用户登陆帐号命名。/lib: 该目录下包含了系统使用的动态连接库(*.so)和内核模块(在modules下)。/lost+found:该目录包含了磁盘扫描检测到的文件碎片,如果你非法关机,那么下次启动时系统会进行磁盘扫描,将损坏的碎片存到该目录下。/mnt: 该目录下包含用户动态挂载的文件系统。如果要使用光盘,U盘都一般应该将它们安装到该目录下的特定位置。     /proc:该

24、目录属于内存映射的一个虚拟目录,其中包含了许多系统现场数据,比如进程数,中断情况,cpu信息等等,其中的信息都是动态生成的,不在磁盘中存储。/root:该目录是系统管理员(root用户)的主目录。/sbin:该目录下包含系统管理员使用的系统管理命令,比如防火墙设置命令iptable,系统停机命令halt等/tmp:该目录下包含一些临时文件。/usr:该目录下一般来说包含系统发布时自带的程序(但具体放什么东西,并没有明确的要求)。其中最值得说明的有三个子目录/usr/src :Linux内核源代码就存在这个目录 /usr/man :Linux中命令的帮助文件/usr/local :新安

25、装的应用软件一般默认在该目录下/var:该目录中存放着在不断扩充着的信息,比如日志文件。文件与目录的基本概念 文件是Linux用来存储信息的基本结构,它是被命名的存储在某种介质上的一组信息的集合。Linux系统中有三种基本的文件类型:l 普通文件:又分为文本文件和二进制文件;l 目录文件:目录文件存储了一组相关文件的位置、大小等与文件有关的信息;l 设备文件:Linux系统把每一个I/O设备都看成一个文件,与普通文件一样处理,这样可以使文件与设备的操作尽可能统一 。Linux系统以目录的方式来组织和管理系统中的所有文件。将所有文件的说明信息采用树型结构组织起来整个文件系统有一个“根”(root

26、),然后在根上分“杈”(directory),任何一个分杈上都可以再分杈,杈上也可以长出“叶子”。“根”和“杈”称为“目录”或“文件夹”。而“叶子”则是一个个的文件。 Linux系统通过目录将系统中所有的文件分级、分层组织在一起,形成了Linux文件系统的树型层次结构。以根目录“/”为起点,所有其他的目录都由根目录派生而来。特殊目录:l “.”代表该目录自己;l “.”代表该目录的父目录;l 对于根目录,“.”和“.”都代表其自己。工作目录:用户登录到Linux系统后,每时每刻都处在某个目录之中,此目录被称为“工作目录” 或“当前目录”用户主目录(Home Directory):是系统管理员在

27、增加用户时为该用户建立起来的目录,每个用户都有自己的主目录。 使用符号表示。文件权限普通文件目录读r文件可读,可拷贝能显示打印该目录下的文件名称,因此可以用ls指令写w文件内容可修改能在该目录下删除、改变文件名和建立文件执行x文件可执行(shell脚本或程序)能够使用该目录下的文件,即能cd到该目录,或对文件的路径能作描述没有权限-对文件的权利分为三组: 文件主(owner):文件拥有者对文件的存取权利 文件用户组(group):拥有文件的用户组;同组用户对象文件的存取权利 其它用户(other):既非文件主又非文件用户组的其他人对该文件的存取权利注意:对于没有读或写权利的文件,只要对该文件的

28、路径具有写入和执行(搜索)的权利,就可以删除或重新命名该文件!chmod 修改权限格式 $chmod who Op-code Permission 文件名(or directory)描述 改变一个或多个文件或目录的权限. 参数: who: u 登录的所有者 g 组 o 全部其它的用户 a 全部(隐含):用户、组、其它 Op-code: + 增加文件的访问权限 - 撤消文件的某权限 = 规定绝对权限 Permission: r 读 w 写 x 执行举例 $chmod g-w temp 撤消temp文件组用户的写权限欲使用文件,必须对该文件,即该文件的路径具有合适的存取权利。唯有文件的拥有者或su

29、peruser才可改变文件的拥有者和组别。改变了文件的拥有者,用户将失去对该文件的某些存取权利,因为该用户不再是拥有者了。改变文件的权限-chmod改变目录的权限-chmod改变拥有者-chown&chgrp$chown 新拥有者用户标识符 文件名改变组别-chgrp$chgrp 文件的新组别 文件名VIM简介VIM是Linux 世界中极为普遍的全屏幕文本编辑器,几乎可以说任何一台 Linux 机器都会提供这套软体。Linux 提供一系列的编辑器,包括 emacs, edit 和 VIM 。VIM 的原意是 "Vi IMproved",它是一个所见所得的编辑程序,也

30、就是说可以立刻看到操作结果。VI的名字取自于visual,意为“直观”,它也是一个全屏幕文本编辑程序。在Linux系统中VI是最常用的编辑程序,它的文本编辑功能十分强大,但使用起来比较复杂。初学者可能感到困难,经过一段时间的学习和使用后,你就会体会到使用VI非常方便。Linux系统中的VI其实是VIM。VI与VIM的用法很像,因为VIM是VI的增强版,所以VI的功能VIM都有,而且VIM新增了许多VI没有的功能,它比VI容易使用。在实际操作之前先对它有个概略的了解会比较好。VIM 有三种模式,输入模式、命令模式以及末行命令模式。输入模式即是用来输入文字资料,而命令模式则是用来下达一些编排文件的

31、操作指令,末行命令模式用来执行文件存档、以及离开VIM 等操作。当执行 VIM 后,会先进入命令模式,此时输入的任何字符都视为指令。如图4-1所示:命令模式插入模式末行模式进入退出ESC键输入i,o,avim ESC键输入:图4-1 VIM运行模式进入与离开l 进入输入模式基本命令:i, a, o 进入文本输入模式 l 从插入模式或末行命令模式返回命令模式ESC键l 从命令模式推出VIM两个大写的字母Z,即ZZ,存盘并退出l 末行模式下的基本操作:w 定义文件名称:wq 存盘退出:q 结束编辑(quit):q! 如果不想存档而要放弃编辑过的文件则用:q! 强制离开:x 同ZZ,退出VIM并保存

32、。要进入 VIM 可以直接在系统提示下键入VIM 文件名称,VIM可以自动帮你载入所要编辑的文件或是开启一个新文件。进入VIM 后屏幕左方会出现波浪符号,凡是行首有该符号就代表此列目前是空的。要离开VIM可以在指令模式下键入:q, :wq 指令则是存档后再离开(注意冒号)。要切换到指令模式下则是用 ESC 键,如果不晓得现在是处于什麽模式,可以多按几次ESC,系统会发出哔哔声以确定进入命令模式。VIM 输入模式要如何输入资料呢?有好几个指令可以进入输入模式:l 新增 (append)a 从光标所在位置后面开始新增资料,光标后的资料随新增资料向后移动。A 从光标所在列最后面的地方开始新增资料。

33、l 插入 (insert) i 从光标所在位置前面开始插入资料,光标后的资料随新增资料向后移动。I 从光标所在列的第一个非空白字元前面开始插入资料。 l 开始 (open) o 在光标所在列下新增一列并进入输入模式。O 在光标所在列上方新增一列并进入输入模式。 VIM 基本编辑配合一般键盘上的功能键,像是方向键、Insert 、Delete 等等,现在你应该已经可以利用 VIM 来处理文字资料了。当然 VIM 还提供其他许许多多功能让文字的处理更形方便。l 删除与修改 何谓编辑?在这里我们认为是文字的新增修改以及删除,甚至包括文字区块的搬移、复制等等。这里先介绍 VIM 的如何做删除与修改。(

34、注意:在 VIM 的原始观念里,输入跟编辑是两码事。编辑是在指令模式下操作的,先利用指令移动光标来定位要进行编辑的地方,然后才下指令做编辑。)x 删除光标所在字元。dd 删除光标所在的列。r 修改光标所在字元,r 后接著要修正的字元。R 进入取代状态,新增资料会覆盖原先资料,直到按 ESC 回到指令模式下为止。s 删除光标所在字元,并进入输入模式。S 删除光标所在的列,并进入输入模式。 C/C+程序编译命令是gcc,gcc命令行的语法格式:gcc -option 源文件 目标文件 -o 可执行文件 -l library例如: $ gcc f1.c f2.c (针对C语言源程序) 执行完成后,生

35、成默认的可执行文件a.out。option为编译选项,GCC总共提供的编译选项超过100个,但只有少数几个会被频繁使用,我们仅对几个常用选项进行介绍。-c选项告诉GCC仅把源代码编译为目标代码而跳过汇编和连接的步骤;-E选项指示编译器仅对输入文件进行预处理。当这个选项被使用时,预处理器的输出被送到标准输出(默认为屏幕)而不是储存在文件里。-O选项告诉GCC对源代码进行基本优化从而使得程序执行地更快;而-O2选项告诉GCC产生尽可能小和尽可能快的代码。使用-O2选项编译的速度比使用-O时慢,但产生的代码执行速度会更快。-g选项告诉GCC产生能被GNU调试器使用的调试信息以便调试你的程序,可喜的是

36、,在GCC里,我们能联用-g和-O (产生优化代码)。一个c程序的开发步骤:假设我们编译一个输出“Hello World”的程序。首先,在vim编辑器中编辑源文件helloworld.c:/* */#include <stdio.h>main() printf("Hello Worldn");接下来,进行编译,最简单的编译方法是不指定任何编译选项:gcc helloworld.c它会为目标程序生成默认的文件名a.out,我们可用-o编译选项来为将产生的可执行文件指定一个文件名来代替a.out。例如,将上述名为helloworld.c的C程序编译为名叫hellow

37、orld的可执行文件,需要输入如下命令:gcc o helloworld helloworld.c最后,执行生成的可执行文件:./helloworld可以在屏幕上看到输出结果:Hello World 。实验2 进程2.1 实验目的 通过观察、分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在POSIX 规范中fork和kill系统调用的功能和使用。 2.2 实验要求2.2.1 实验环境要求1. 硬件(1) 主机:Pentium III 以上;(2) 内存:128MB 以上;(3) 显示器:VGA 或更高;(4) 硬盘空间:至少100MB 以上剩余空间。

38、2. 软件Linux 操作系统,内核2.4.26 以上,预装有X-Window 、vi、gcc、gdb 和任意web 浏览器。2.2.2 学生实验前的准备工作学习man 命令的用法,通过它查看fork 和kill 系统调用的在线帮助,并阅读参考资料,学会fork 与kill 的用法。复习C 语言的相关内容。2.3 实验内容通读下列代码:  /* * POSIX 下进程控制的实验程序残缺版 */ #include <stdio.h> #include <sys/types.h>#include <unistd.h> #include <

39、;signal.h>#include <ctype.h> /* 允许建立的子进程个数最大值 */#define MAX_CHILD_NUMBER 10 /* 子进程睡眠时间 */#define SLEEP_INTERVAL 2 int proc_number=0; /* 子进程的自编号,从0开始 */void do_something(); main(int argc, char* argv) int child_proc_number = MAX_CHILD_NUMBER; /* 子进程个数 */int i, ch; pid_t child_pid; pid_t pid10

40、=0; /* 存放每个子进程的id */ if (argc > 1) /* 命令行参数中的第一个参数表示建立几个子进程,最多10个 */ child_proc_number = atoi(argv1); child_proc_number= (child_proc_number > 10) ? 10 : child_proc_number; for (i=0; i<child_proc_number; i+) /* 在这里填写代码,建立child_proc_number个子进程* 子进程要执行* proc_number = i; * do_something();* 父进程把

41、子进程的id保存到pidi */ /* 让用户选择杀死哪个进程。输入数字(自编号)表示杀死该进程* 输入q退出 */while (ch = getchar() != 'q') if (isdigit(ch) /* 在这里填写代码,向pidch-'0'发信号SIGTERM, * 杀死该子进程 */   /* 在这里填写代码,杀死本组的所有进程 */ return; void do_something() for(;) /* 打印子进程自编号。为清晰,在每个号码前加“号码+3”个空格* 比如号码是1,就打印" 1" */printf(&

42、quot;This is process No.%*dn",proc_number+3, proc_number); sleep(2); /* 主动阻塞两秒钟 */ 先猜想一下这个程序的运行结果。假如运行“./process 20”,输出会是什么样?然后按照注释里的要求把代码补充完整,运行程序。可以多运行一会儿,并在此期间启动、关闭一些其它进程,看process 的输出结果有什么特点,记录下这个结果。开另一个终端窗口,运行“ps aux|grep process”命令,看看process 究竟启动了多少个进程。回到程序执行窗口,按“数字键+回车”尝试杀掉一两个进程,再到另一个窗口看进

43、程状况。按q 退出程序再看进程情况。 2.4 实验报告回答下列问题,写入实验报告。1. 你最初认为运行结果会怎么样?2. 实际的结果什么样?有什么特点?试对产生该现象的原因进行分析。3. proc_number 这个全局变量在各个子进程里的值相同吗?为什么?4. kill 命令在程序中使用了几次?每次的作用是什么?执行后的现象是什么?5. 使用kill 命令可以在进程的外部杀死进程。进程怎样能主动退出?这两种退出方式哪种更好一些?6. 把你的程序源代码附到实验报告后。 实验3 线程3.1 实验目的通过观察、分析实验现象,深入理解线程及线程在调度执行和内存空间等方面的特点,并掌握线程与

44、进程的区别。z 掌握在POSIX 规范中pthread_create() 函数的功能和使用方法3.2 实验要求3.2.1 实验环境要求1. 硬件(1) 主机:Pentium III 以上;(2) 内存:128MB 以上;(3) 显示器:VGA 或更高;(4) 硬盘空间:至少100MB 以上剩余空间。2. 软件Linux 操作系统,内核2.4.26 以上,预装有X-Window 、vi、gcc、gdb 和任意web 浏览器。3.2.2 学生实验前的准备工作阅读参考资料,了解线程的创建等相关系统调用。3.3 实验内容通读下列代码:/* * POSIX 下线程控制的实验程序残缺版 1.2 7 */&

45、#160;#include <stdio.h> #include <sys/types.h>#include <unistd.h> #include <ctype.h>#include <pthread.h> #define MAX_THREAD 3 /* 线程的个数 */unsigned long long main_counter, counterMAX_THREAD; /* unsigned longlong是比long还长的整数 */void* thread_worker(void*); int main(int argc,

46、char* argv) int i, rtn, ch; pthread_t pthread_idMAX_THREAD = 0; /* 存放每个线程的id */ for (i=0; i<MAX_THREAD; i+) /* 在这里填写代码,用pthread_create建一个普通的线程,* 线程id存入pthread_idi, * 线程执行的函数是thread_worker,并i作为参数传递给线程 */ /* 用户按一次回车执行下面的循环体一次。按q退出 */do unsigned long long sum = 0;/* 求所有线程的counter的和 */for (i=0; i<

47、MAX_THREAD; i+) sum += counteri; printf("%llu ", counteri);  printf("%llu/%llu", main_counter, sum); while (ch = getchar() != 'q');  return 0; void* thread_worker(void* p) int thread_num; /* 在这里填写代码,把main中的i的值赋给thread_num */ for(;) /* 无限循环 */  counterthread

48、_num+; /* 本线程的counter加一 */ main_counter+; /* 主counter 加一 */ 按照注释里的要求把代码补充完整,正确编译程序后,先预计一下这个程序的运行结果。具体的结果会是什么样?运行程序。开另一个终端窗口,运行“ps aux”命令,看看thread 的运行情况,注意查看thread 的CPU 占用率,并记录下这个结果。3.4 实验报告回答下列问题,写入实验报告。1. 你最初认为前三列数会相等吗?最后一列斜杠两边的数字是相等,还是大于或者小于关系? 2. 最后的结果如你所料吗?有什么特点?试对原因进行分析。 3. thread 的CPU 占用率是多少?为

49、什么会这样? 4. thread_worker()内是死循环,它是怎么退出的?你认为这样退出好吗? 5. 把你的程序源代码附到实验报告后。并请保留源代码,下一个死锁实验需要使用 实验4 死锁4.1 实验目的通过观察、分析实验现象,深入理解理解互斥锁的原理及特点掌握在POSIX 规范中的互斥函数的功能及使用方法4.2 实验要求4.2.1 实验环境要求1. 硬件(1) 主机:Pentium III 以上;(2) 内存:128MB 以上;(3) 显示器:VGA 或更高;(4) 硬盘空间:至少100MB 以上剩余空间。2. 软件Linux 操作系统,内核2.4.26 以上,预装有X-Wind

50、ow 、vi、gcc、gdb 和任意web 浏览器。4.2.2 学生实验前的准备工作准备好上节实验完成的程序thread.c 。阅读参考资料,了解互斥锁的加解锁机制及相关的系统调用。4.3 实验内容找到thread.c 的代码临界区,用临界区解决main_counter 与sum 不同步的问题。通读下列代码:/* * POSIX 下线程死锁的演示程序 1.2 * 作者:Sunner Sun * 最后修改时间:2005-3-16 17:56 */ #include <stdio.h> #include <sys/types.h>#include <unistd.h&

51、gt; #include <ctype.h>#include <pthread.h> #define LOOP_TIMES 10000 pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;void* thread_worker(void*);void critical_section(int thread_num, int i); int main(void) int rtn, i; pthread_t pthread_

52、id = 0; /* 存放子线程的id */ rtn = pthread_create(&pthread_id, NULL, thread_worker, NULL ); if(rtn != 0) printf("pthread_create ERROR!n"); return -1; for (i=0; i<LOOP_TIMES; i+) pthread_mutex_lock(&mutex1);pthread_mutex_lock(&mutex2); critical_section(1, i); pthread_mutex_unlock(&

53、amp;mutex2);pthread_mutex_unlock(&mutex1); pthread_mutex_destroy(&mutex1);pthread_mutex_destroy(&mutex2);  return 0; void* thread_worker(void* p) int i; for (i=0; i<LOOP_TIMES; i+) pthread_mutex_lock(&mutex2);pthread_mutex_lock(&mutex1);  critical_section(2, i); pthr

54、ead_mutex_unlock(&mutex2);pthread_mutex_unlock(&mutex1); void critical_section(int thread_num, int i) printf("Thread%d:%dn", thread_num, i); 仔细阅读程序,编译程序后,先预计一下这个程序的运行结果。运行程序。若程序没有响应,按ctrl+c 中断程序运行,然后再重新运行,如此反复若干次,记录下每次的运行结果。若产生了死锁,请修改程序,使其不会死锁。4.4 实验报告回答下列问题,写入实验报告。1. 你预想deadlock.c 的运行结果会如何?2. deadlock.c 的实际运行结果如何?多次运行每次的现象都一样吗?为什么会这样?3. 把修改后的两

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论