进程的共享存储区通信--带答案版
- 格式:doc
- 大小:55.00 KB
- 文档页数:4
学期考试方式闭卷讲授总学时命题人期末考试分数占总分数的百分比60% 学分判卷人考试时间命题审核人题号一二三四五六七八九十总分核分人得分得分一、选择题(每题1分共计20分)1、在分时系统中,时间片一定,( B ),响应时间越长。
A、内存越多B、用户数越多C、后备队列D、用户数越少2、在操作系统中,JCB是指(A )。
A、作业控制块B、进程控制块C、文件控制块D、程序控制块3、当内存碎片容量大于某一作业所申请的内存容量时,( C )。
A、可以为这一作业分配内存B、不可以为这一作业分配内存C、拼接后,可以为这一作业分配内存D、一定能够为这一作业分配内存4、用户通过程序获得系统帮助,必须通过(D )。
A、进程调度B、作业调度C、键盘命令D、系统调用5、在操作系统中,用户在使用I/O设备时,通常采用(B )。
A、物理设备名B、逻辑设备名C、虚拟设备名D、设备牌号6、为了对紧急进程或重要进程进行调度,调度算法应采用(B )。
A、先进先出调度算法B、优先数法C、最短作业优先调度D、定时轮转法7、在可变式分区分配方案中,某一作业完成后,系统收回其主存空间,并与相邻空闲区合并,为此需修改空闲区表,造成空闲区数减1的情况是( D )。
A、无上邻空闲区,也无下邻空闲区B、有上邻空闲区,但无下邻空闲区C、有下邻空闲区,但无上邻空闲区D、有上邻空闲区,也有下邻空闲区8、操作系统中有一组常称为特殊系统调用,它不能被系统中断,在操作系统中称为(B)。
A、初始化程序B、原语C、子程序D、控制模块9、操作系统在控制和管理进程过程中,涉及到(D )这一重要数据结构,这是进程存在的唯一标志。
A、FCBB、FIFOC、FDTD、PCB10、在UNIX/Linux系统中,特殊文件是与(C )有关的文件。
A、文本B、图象C、硬件设备D、二进制数据11、(A )没有多道程序设计的特点。
A、DOSB、UNIXC、WindowsD、OS/212、两个进程合作完成一个任务,在并发执行中,一个进程要等待其合作伙伴发来信息,或者建立某个条件后再向前执行,这种关系是进程间的( A )关系。
case -1:perror("fork()");exit(0);case 0:do_child_loop(sem_set_id,FILE_NAME);exit(0);default:break;}}for(i = 0;i<10;i++){int child_status;wait(&child_status);}printf("main is done");fflush(stdout);return 0;}运行结果:二、共享主存段机制共享主存段为进程提供了直接通过主存进行通信的有效手段,不像消息缓存机制那样需要系统提供缓存,也不像pipe机制那样需要事先建立一个特殊文件,而是有通信双方直接访问某些共享虚拟存储器空间。
在系统V中,系统管理一组共享主存段控制块。
通信进程在使用共享主存段以前,首先提出申请,系统为止分配存储空间并返回共享主存段标识号。
一个共享段建立后,进程把它被附加到自己的虚拟存储空间中。
一个进程可以附加多个共享主存段。
一个主存段一旦被附加到进程的虚拟机空间后,对它的访问以其他虚拟机的访问完全相同。
但为了保证共享主存段数据完整性,通信的进程之间要互斥的进行访问。
当通信进程不再需要该共享主存段时,可使用命令将其与进程分离,从而使其进程的虚空间删除。
为了理解进程通过共享主存段的通信过程,下面举例,一个是进程向共享段写信息的例子:一个是进行从共享段读信息的例子。
代码如下:四、实验过程与分析一、信号量机制在第一个例子的程序中创建了5个并发子进程,互斥地对文件进行写操作,将自己的进程号写到文件中去,信号量的初值为1,当地一个进程执行update_file函数时首先将信号量值-1,(相当于P操作)致使其它进程等待无法操作文件,直到其结束后,将其值变为1后(相当于V操作),其它进程并发竞争对文件的写操作,并将自己的pid 写入文件中。
在linux中信号量机制的执行既步骤如下所示:(1)信号量的定义:struct semaphore {spinlock_t lock;unsigned int count;struct list_head wait_list;};在linux中,信号量用上述结构体表示,我们可以通过该结构体定义一个信号量。
第4章进程同步与通信1)选择题(1)在操作系统中,P、V操作是一种_D__。
A. 机器指令B. 系统调用命令C. 作业控制命令D. 低级进程通信原语(2)若信号量S的初值为2,当前值为-1,则表示有_B__等待进程。
A. 0个B. l个C. 2个D. 3个(3)在直接通信方式中,系统提供两条通信原语进行发送和接收,其中Send原语中参数应是_C_。
A. sender,messageB. sender,mailboxC. receiver,messageD. receiver,mailbox(4)下述那个选项不是管程的组成部分_A__。
A. 管程外过程调用管程内数据结构的说明B. 管程内对数据结构进行操作的一组过程C. 局部于管程的共享数据说明D. 对局部于管程的数据结构设置初值的语句(5)某通信方式通过共享存储区来实现,其属于_D__。
A. 消息通信B. 低级通信C. 管道通信D. 高级通信(6)用P、V操作管理临界区时,信号量的初值应定义为__C__。
A. -1B. 0C. 1D. 任意值(7)临界区是_B__。
A. 一个缓冲区B. 一段程序C. 一段共享数据区D. 一个互斥资源(8)信箱通信是一种_D__通信方式。
A. 直接通信B. 信号量C. 低级通信D. 间接通信(9)对于两个并发进程,设互斥信号量为mutex,若mutex=0则__A_。
A. 表示有一个进程进入临界区B. 表示没有进程进入临界区C. 表示有一个进程进入临界区,另一个进程等待进入D. 表示有两个进程进入临界区(10)对信号量S执行V操作后,下述选项正确的是_C__。
A. 当S小于等于0时唤醒一个阻塞进程B. 当S小于0时唤醒一个阻塞进程C. 当S小于等于0时唤醒一个就绪进程D. 当S小于0时唤醒一个就绪进程(11)在消息缓冲通信中,消息队列属于_A__资源。
A. 临界B. 共享C. 永久D. 可剥夺(12)在消息缓冲通信机制中,使用的临界资源是_D__。
第二章进程管理一、单项选择题1、顺序程序和并发程序的执行相比,()。
A.基本相同B. 有点不同C.并发程序执行总体上执行时间快D.顺序程序执行总体上执行时间快2、在单一处理机上,将执行时间有重叠的几个程序称为()。
A.顺序程序B. 多道程序C.并发程序D. 并行程序3、进程和程序的本质区别是()。
A.存储在内存和外存B.顺序和非顺序执行机器指令C.分时使用和独占使用计算机资源D.动态和静态特征4、在下列特性中,不是进程的特性的是()。
A. 异步性B. 并发性C. 静态性D. 动态性5、各进程向前推进的速度是不可预知,体现出“走走停停”的特征,称为进程的()。
A.动态性B.并发性C.调度性D.异步性6、在单处理机系统中,处于运行状态的进程()。
A.只有一个B. 可以有多个C.不能被挂起D. 必须在执行完后才能被撤下7、下列进程状态的转换中,不正确的是()。
A. 就绪→运行B. 运行→就绪C. 就绪→阻塞D. 阻塞→就绪8、已经获得除()以外的所有运行所需资源的进程处于就绪状态。
A.存储器B. 打印机C. CPUD. 磁盘空间9、一个进程被唤醒意味着()。
A.该进程重新占有了CPUB.进程状态变为就绪C.它的优先权变为最大D.其PCB移至就绪队列的队首10、进程从运行状态变为阻塞状态的原因是()。
A.输入或输出事件发生B.时间片到C.输入或输出事件完成D.某个进程被唤醒11、为了描述进程的动态变化过程,采用了一个与进程相联系的(),根据它而感知进程的存在。
A.进程状态字B. 进程优先数C.进程控制块D. 进程起始地址12、操作系统中有一组常称为特殊系统调用的程序,它不能被系统中断,在操作系统中称为()。
A.初始化程序B. 原语C.子程序D. 控制模块13、进程间的基本关系为()。
A.相互独立与相互制约B.同步与互斥C.并行执行与资源共享D. 信息传递与信息缓冲14、两个进程合作完成一个任务,在并发执行中,一个进程要等待其合作伙伴发来信息,或者建立某个条件后再向前执行,这种关系是进程间的()关系。
实验报告实验题目姓名:学号:课程名称:操作系统实验所在学院:信息科学与工程学院专业班级:计算机任课教师:实验项目名称进程通信——共享存储区和信号量一、实验目的与要求:1、了解和熟悉共享存储机制2、了解和熟悉信号量机制3、熟悉信号量机制中使用的数据结构和信号量机制的操作以及控制。
4、了解共享主存段机制,学会对共享主存段的系统调用。
二、实验设备及软件:1、PC机一台2、Linux操作系统三、实验方法(原理、流程图)一、共享存储区1、共享存储区机制的概念共享存储区(Share Memory)是 UNIX 系统中通信速度最高的一种通信机制。
该机制可使若干进程共享主存中的某一个区域,且使该区域出现(映射)在多个进程的虚地址空间中。
另一方面,一个进程的虚地址空间中又可连接多个共享存储区,每个共享存储区都有自己的名字。
当进程间欲利用共享存储区进行通信时,必须先在主存中建立一共享存储区,然后将它附接到自己的虚地址空间上。
此后,进程对该区的访问操作,与对其虚地址空间的其它部分的操作完全相同。
进程之间便可通过对共享存储区中数据的读、写来进行直接通信。
图示列出二个进程通过共享一个共享存储区来进行通信的例子。
其中,进程 A 将建立的共享存储区附接到自己的 AA’区域,进程 B 将它附接到自己的 BB’区域。
应当指出,共享存储区机制只为进程提供了用于实现通信的共享存储区和对共享存储区进行操作的手段,然而并未提供对该区进行互斥访问及进程同步的措施。
因而当用户需要使用该机制时,必须自己设置同步和互斥措施才能保证实现正确的通信。
二、涉及的系统调用1、shmget( )创建、获得一个共享存储区。
系统调用格式: shmid=shmget(key,size,flag)参数定义: int shmget(key,size,flag);key_t key;int size,flag;其中,key是共享存储区的名字;size是其大小(以字节计);flag是用户设置的标志,如IPC_CREAT。
1.正在等待他人释放临界资源的进程处于___阻塞______状态;已分配到CPU外的所有资源的进程处_______状态;已获得CPU的进程处于____执行___状态;正在执行的进程由于时间片用完时转为____就绪__状态;因发生某种事件而暂时不能继续执行时转为___阻塞______状态;应终端用户请求而暂停执行时转为______状态。
2.不会发生的状态转换有_________,为什么?就绪-执行;执行-就绪;就绪—阻塞;阻塞-就绪;阻塞—执行;执行-阻塞;3.对于记录型信号量,在执行一次wait操作时,信号量的count值应当_______;当count 值为_______时,应唤醒阻塞队列中的进程。
在记录型信号量机制中,S. count>0时的值表示_______;每次用wait操作意味着_______,因此应将S. count_______;当S. count_______时,进程应阻塞;每次signal操作意味着_______,因此应将S. count_______;当S. count<=0时,表示_______,此时应_______。
4.在每个进程中访问_______的那段代码称为临界区;为实现对它的共享,应保证进程_______地进入自己的临界区;为此,在每个进程的临界区前应设置_______;临界区后应设置_______。
5.在利用信号量实现进程互斥时,应将_______置于_______和_______之间。
6.用信号量S实现对系统中4打印机的互斥使用,S.value的初值应设置为—1—。
7.若S.value当前值为-1,则表示S.L队列中有____1___个等待进程。
8.设有10个进程共享一个互斥段,如果最多允许一个进程进入互斥段,则所采用的互斥信号量应设置为___1____,而该信号量的取值范围为_1~(n-1)______;9.如果最多允许3个进程同时进入互斥段,则所采用的互斥信号量初值应设置为—3—。
第3章进程并发控制作业题参考答案作业题题1进程间的互斥与同步表示了各进程间的______。
A.竞争与协作B. 相互独立与相互制约C .临界区调度原则 D. 动态性与并发性题2 若执行信号量S操作的进程数为3,信号量S初值为2,当前值为-1,表示有____个等待相关临界资源的进程。
A 0B 1C 2D 3题 3 由于并发进程执行的随机性,一个进程对另一个进程的影响是不可预测的,甚至造成结果的不正确,_________。
A.造成不正确的因素与时间有关B. 造成不正确的因素只与进程占用的处理机有关C.造成不正确的因素与执行速度无关D. 造成不正确的因素只与外界的影响有关题4 下列机构中不能用于进程间数据通信的是____________。
A.消息B.共享存储区C. 信号量D.管道题5 下面有关管程的说法,不正确的是________A.管程是种进程同步机制B. 管程是一种编程语言成分C. 管程是一种系统调用D.管程比信号量更容易保证并行编程的正确性题6 什么是临界资源和临界区?一个进程进人临界区的调度原则是什么?题7 进程之间存在哪几种制约关系?各是什么原因引起的?下列活动分别属于哪种制约关系?(1)图书馆借书。
属于互斥关系。
(2)两队举行篮球赛。
既有互斥关系,又有同步关系。
(3)流水生产线。
属于同步关系。
(4)乐队演奏。
属于同步关系。
(5)购买火车票。
属于互斥关系。
题8 在生产者消费者问题中,如果将两个P操作即生产者程序流程中的P(buffers)和P(mutex)互换位置.结果会如何? 形成死锁。
题9 试用P、V操作描述下列理发师和顾客之间的同步问题。
某个理发师当没有顾客时,去睡觉;当有顾客来理发,若理发师正在睡觉时,这个顾客会叫醒他,理发师给该顾客理发,理发期间若还有顾客到达则等待理发师依次理发,直到没有顾客到来,理发师又去睡觉。
wakeup,wait,mutex:semaphore;wakeup:=0;wait:=0;mutex:=1;cobegin顾客进程:{p(mutex);rc=rc+1;if(rc==1) v(wakeup);else p(wait);v(mutex);理发;}理发师进程:{P(wakeup);While(rc!=0){理发;p(mutex);rc=rc-1;if(rc!=0)v(wait);v(mutex);}}coend自测题一、选择题1.并发性是指若干事件在______发生。
实验二进程管理
2.4 进程的共享存储区通信
1.实验目的
(1) 通过编写共享存储区的通信程序,理解Linux共享存储区机制。
(2) 掌握进程共享存储区通信相关系统调用。
(3) 理解系统调用和用户命令的区别。
2.实验类型:验证型
3.实验学时:2
4.实验原理和知识点
(1) 实验原理:并发运行的进程之间,可以通过共享存储机制进行通信。
(2) 知识点:共享存储的创建、附接和断接
5.实验环境(硬件环境、软件环境):
(1)硬件环境:Intel Pentium III 以上CPU,128MB以上内存,2GB以上硬盘
(2)软件环境:linux操作系统。
6. 预备知识
(1) 共享存储区
共享存储区机制直接通过共享虚拟存储空间进行通信。
通信时,进程首先提出申请,系统为之分配存储空间并返回共享区标示符。
这时,进程把它附加到自己的虚拟存储空间中。
通信的进程对共享区的访问要互斥地进行。
(2) shmget()系统调用:
头文件 #include <sys/shm.h>
函数原型 int shmget(key_t key, int size, int flag);
功能:申请一个共享存储区。
成功返回共享内存标识符,失败则返回-1。
参数:key是共享存储区关键字。
size是存储区大小。
flag访问权限和控制标志。
(3) shmat()系统调用:
头文件 #include <sys/shm.h>
函数原型 int shmat(int id, char *addr, int flag);
功能:将一个共享存储区附接到进程的虚地址空间。
成功返回起始地址,失败则返回-1。
数:id是共享存储区标识符。
addr是附接的虚地址。
flag访问权限和控制标志。
(4) shmdt()系统调用:
头文件 #include <sys/shm.h>
函数原型 int shmdt(char *addr);
功能:一个共享存储区与指定进程的断开。
(5) shmctl()系统调用:
头文件 #include <sys/shm.h>
函数原型 int shmctl(int id, int cmd, struct_ds* buf;
功能:共享存储区的控制操作。
成功返回0,失败则返回-1。
参数:id是共享存储区标识符。
cmd为IPC_STAT共享存储的区的控制信息块读入buf。
cmd为IPC_SET则共享存储区的控制信息块读入buf。
cmd 为IPC_RMID则删除shmid指示的共享内存。
7.实验内容及步骤:
【任务】
使用系统调用shmget()、shmat()、shmdt()、shmctl(),编写两进程通过共享存储区进行通信的程序。
(1)程序设计
约定共享区关键字75。
创建两个子进程client和server。
Client发送10条消息。
Server接收消息,完毕后删除共享区。
//share.c
#include <sys/types.h>
#include <sys/msg.h>
#include <sys/ipc.h>
#include <stdio.h>
#define SHMKEY 75 /* 定义共享存储区关键词*/
int shmid,i;
int *addr;
void Client()
{ int i;
shmid=shmget(SHMKEY,1024,0777); /* 获取共享区, 长度1024,关键词为SHMKEY */ addr=(int*)shmat(shmid,0,0); /* 共享区的起始地址为addr */
for(i=9;i>=0;i--)
{ while(*addr!=-1); /* 在这里做一个标号A */
printf("(client %d)sent\n",i); /* 打印(client) sent */
*addr=i; /* 把i赋给addr所指向的区域 */
}
exit(0);
}
void Server()
{ shmid=shmget(SHMKEY,1024,0777|IPC_CREAT); /* 创建共享区 */
addr=(int*)shmat(shmid,0,0); /* 共享区的起始地址为addr */
do
{ *addr=-1;
while(*addr==-1); /* 等待发来信息, 转到上面的标号A; */
printf("(server %d)received!\n",*addr); /* 服务进程使用共享区 */ }while(*addr);
shmctl(shmid,IPC_RMID,0);
exit(0);
}
int main()
{ int i;
while((i=fork())==-1);
if(!i) Server();
else {
while((i=fork())==-1);
if(!i) Client();
}
wait(0);
wait(0);
return 1;
}
(2)上机操作
键入vi share.c
键入i并输入源代码。
按Esc键
存盘 :wq
编译 gcc –o share share.c
运行 ./share
观察屏幕,记录结果。