搜索
您的当前位置:首页正文

习题4

2022-11-04 来源:吉趣旅游网
第4章习题参考答案

习题4

1 子进程中对于变量的修改为什么父进程感知不到?

答:因为父子进程的程序存储于各自不同的内存映像空间,因而一方对于其地址空间中变量或数据的修改另一方感知不到。(参考3.2.1中[例3-5]的结果分析)

2 软中断通信适用于什么场合?

答:软中断通信特别适合于系统或用户用来处理异步事件。

3 管道通信的使用条件是什么?

答:共享管道的进程必须是同一家族的进程,并由其祖先创建。

4 消息缓冲通信中发送进程与接收进程之间的同步由谁实现?共享内存通信中又由谁实现?

答:消息缓冲通信中发送进程与接收进程之间的同步由操作系统实现,共享内存通信中由用户自己编程实现同步。

5 Linux操作系统提供的进程通信机制有哪些种类?它们各自的特点是什么?

答:Linux操作系统提供的进程通信机制有低级通信和高级通信两种方式。低级通信包括软中断信号和信号量通信;高级通信包括管道、消息缓冲和共享内存。

1

第4章习题参考答案

低级通信中:

软中断通信简单,适合处理随机事件;

信号量用来实现进程间的同步和互斥。

高级通信中:

无名管道简单方便,但工作在单向通信方式,且只能在创建它的进程及其子孙进程之间共享;

消息缓冲可以在任意进程之间通信,而且自带同步工具,使用方便,但是信息复制消耗CPU的时间,不适宜于信息量大或操作频繁的场合;

共享内存针对消息缓冲的缺点改而利用内存缓冲区直接交换信息,快捷、信息量大是其优点。缺点是不带同步工具,同步和互斥问题需要各进程利用其他同步工具解决,而且要求这些进程都在同一存储介质上运行,不方便网络通信。

因此,对于不同的应用问题,要根据问题本身的情况来选择进程间的通信方式。

6 如何使用Linux提供的信号量来实现进程的互斥和同步?

答:信号量及其P、V操作的实现方式归纳如下:

1. 定义信号量标识符:int semid;

2

第4章习题参考答案

如果有n个信号量,则需要分别定义n个不同的信号量标识符。

2. 定义信号量数据结构

⑴.定义P、V操作所用的数据结构:struct sembuf P,V;

⑵.定义给信号量赋初值的参数数据结构:union semun arg;

3. 申请只有一个信号量的信号量集semid=semget(IPC_PRIVITE,1,IPC_0666);

其中,第一个参数:IPC_PRIVATE由系统产生key值,也可以由用户使用具体的整型数值作为key值指定;第二个参数表示信号量集中只有一个信号量;操作权限取决于最后一个参数,0666表示任意用户可读可写,只设置semflag的IPC_CREAT位,则创建一个信号量集,如果该信号量集已经存在,则返回其标识符。

4. 分别对每个信号量semid赋初值

arg.val=初值;

semctl(semid,0,SETVAL,arg);

5. 定义信号量的P操作(供所有信号量的P操作使用)

P.sem_num=0;

P.sem_op=-1;

/*-1表示P操作时对信号量减1*/

3

第4章习题参考答案

P.sem_flg=SEM_UNDO;

6. 定义信号量的V操作(供所有信号量的V操作使用)

V.sem_num=0;

V.sem_op=1; /*1表示V操作时对信号量加1*/

V.sem_flg=SEM_UNDO;

7. 对信号量semid执行P操作:semop(semid,&P,1);

8. 对信号量semid执行V操作:semop(semid,&V,1);

9. 撤消信号量:semctl(semid,IPC_RMID,0);

因为信号量不是普通变量,对它赋初值只能通过semctl(semid,0,SETVAL,arg),其值的修改只能通过P、V操作,而不能使用普通的赋值语句。因此信号量的初值及其P、V操作需要事先定义好,然后才能在进程中执行P、V操作。

4

因篇幅问题不能全部显示,请点此查看更多更全内容

Top