操作系统实验3

  • 格式:doc
  • 大小:303.00 KB
  • 文档页数:13

下载文档原格式

  / 28
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三管道及共享内存

一、实验目的

熟悉管道通信,了解管道内数据的读取与写入过程;

学会创建管道、使用管道,实现父子进程间的通信;

熟悉各种管道通信时使用的函数;

熟悉共享内存的概念;

学会使用函数创建共享内存段,熟悉操纵共享内存的四个系统调用。

二、实验内容

1、阅读例1的程序,运行及分析;

2、编写程序:父进程利用管道将一字符串交给子进程处理。子进程读字符串,将里面的字符反向后再交给父进程,父进程最后读取并打印反向的字符串;

3、阅读例2的程序,运行一次该程序,然后用ipcs命令查看系统中共享存储区的情况,再次执行该程序,再用ipcs命令查看系统中共享内存的情况,对两次的结果进行比较,并分析原因。最后用ipcrm命令删除自己建立的共享存储区;

4、每个同学登陆两个窗口,先在一个窗口中运行例3程序1(或者只登陆一个窗口,先在该窗口中以后台方式运行程序1),然后在另一个窗口中运行例3程序2,观察程序的运行结果并分析。运行结束后可以用ctrl+c结束程序1的运行

5、编写程序:使用系统调用shmget(),shmat(),shmdt(),shmctl(),编制程序;要求在父进程中生成一个30字节长的私有共享内存段。接下来,设置一个指向共享内存段的字符指针,将一串大写字母写入到该指针指向的存贮区。调用fork()生成子进程,让子进程显示共享内存段中的内容。接着,将大写字母改成小写,子进程修改共享内存中的内容。之后,子进程将脱接共享内存段并退出。父进程在睡眠5秒后,在此显示共享内存段中的内容(此时已经是小写字母)。

三、代码及运行结果分析

1、阅读例1的程序,运行及分析

代码:

运行结果:

分析:系统调用pipe(fd);创建管道,然后通过fork函数产生的两个进程,先执行子进程,子进程中,关闭读通道,并向管道中写入内容。然后进入父进程,写管道关闭,并读入管道中的内容,最后输出出来。

2、编写程序:父进程利用管道将一字符串交给子进程处理。子进程读字符串,将里面的字符反向后再交给父进程,父进程最后读取并打印反向的字符串;

相关代码:

运行结果:

3、阅读例2的程序,运行一次该程序,然后用ipcs命令查看系统中共享存储区的情况,再次执行该程序,再用ipcs命令查看系统中共享内存的情况,对两次的结果进行比较,并分析原因。最后用ipcrm命令删除自己建立的共享存储区;相关代码:

运行结果:

首次运行并用ipc命令查看:

"20.c" 18L, 428C written

[e06620204@localhost e06620204]$ gcc 20.c -o 20

[e06620204@localhost e06620204]$ ./20

First shared memory identifier is 3932183

Second shared memory identifier is 3964979

[e06620204@localhost e06620204]$ ipcs

------ Shared Memory Segments --------

key shmid owner perms bytes nattch st 0x00000000 917505 e06620120 644 20 0

0x00000000 98306 e0662209 644 20 0

0x00000000 1310723 e06620211 644 20 0

0x00000000 163844 e06620120 644 20 0

0x0000000f 196613 e06620217 644 1000 0

0x00000000 229382 e06620217 644 20 0

0x00000000 262151 e0662209 644 20 0

0x00000000 294920 e0662209 644 20 0

0x00000076 950281 e06620118 644 1000 0

0x00000000 360458 e06620113 644 20 0

0x00000000 393227 e06620120 644 20 0

0x000000dc 425996 e06620220 644 1000 0

0x00000000 458765 e06620220 644 20 0

0x00000000 491534 e06620120 644 20 0

0x00000000 557071 e06620113 644 20 0

0x000000c9 2916368 e0662201 644 1000 0

0x00000000 622609 e06620124 644 20 0

0x0000014d 655378 e06620333 644 1000 0

0x00000000 688147 e06620333 644 20 0

0x00000000 3440661 e06620120 644 30 0 0x00000000 786454 e06620120 644 20 0 0x000000cc 3932183 e06620204 644 1000 0 0x00000000 851992 e06620122 644 20 0 0x00000000 983065 e06620118 644 20 0 0x00000000 1015834 e06620120 644 20 0 0x0000007b 3473435 e06620121 644 1000 0 0x000000cb 1081372 e06620106 644 1000 0 0x00000000 1114141 e06620106 644 20 0 0x00000000 3506206 e06620121 644 20 0 0x00004ef3 1179679 e06620211 644 1000 0 0x00000000 1212448 e06620211 644 20 0 0x0000006c 1245217 e06620108 644 1000 0 0x00000000 1277986 e06620108 644 20 0 0x000000d0 1376291 e06620208 644 1000 0 0x00000000 1409060 e06620208 644 20 0 0x00000071 1441829 e06620113 644 1000 0 0x00000000 1474598 e06620113 644 20 0 0x00000078 1507367 e06620120 777 16384 1 0x00000000 2162728 e06620312 644 20 0 0x00000084 1605673 e06620132 644 1000 0 0x00000000 1638442 e06620132 644 20 0 0x00000462 1671211 e06620122 777 16384 1 0x000000e6 3538988 e06620230 644 1000 0 0x00000000 1736749 e06620205 644 20 0 0x000000e0 1769518 e06620224 644 1000 0 0x00000000 1802287 e06620224 644 20 0 0x0000006a 1835056 e06620106 644 1000 0 0x00000000 1867825 e06620106 644 20 0 0x00000000 3571762 e06620230 644 20 0 0x00000000 3964979 e06620204 644 20 0 0x00000000 1966132 e06620217 644 20 0 0x00000000 1998901 e06620217 644 20 0 0x00000000 2031670 e06620205 644 20 0 0x00000083 2064439 e06620131 644 1000 0 0x00000000 2097208 e06620131 644 20 0 0x00000000 2195513 e06620217 644 20 0 0x0000006b 2228282 e06620107 644 1000 0 0x00000000 2261051 e06620107 644 20 0 0x000000d4 2293820 e06620212 644 1000 0 0x00000000 2326589 e06620212 644 20 0 0x00000000 2359358 e06620224 644 20 0 0x00000000 2392127 e06620124 644 20 0