实验三、共享内存与进程同步 一、实验目的与要求 二、实验内容 1、掌握Linux下共享内存的概念与使用方法,通过共享内存实现进程间数据的共享; 2、掌握Linux下进程同步与通信的主要机制,通过信号灯操作实现进程的同步。 二、实验内容 利用多个共享内存(有限空间)构成的环形缓冲,将源文件复制到目标文件,实现两个进程的誊抄。
三、预备知识 1、共享内存 使用共享内存是运行在同一计算机上的进程进行进程间通信的最快的方法。 shmget与shmat 系统调用。 int shmget(key_t key,int size,int shmflg) IPC_CREAT|0666 int shmat ( int shmid, char *shmaddr, int shmflg) S = (char *)shmat(shmid1,NULL,SHM_R|SHM_W)
共享存储区的控制shmctl:对其状态信息进行读取和修改。 系统调用格式:int shmctl(shmid,cmd,buf); int shmid,cmd; struct shmid_ds *buf; 其中,buf是用户缓冲区地址,cmd是操作命令。(1)用于查询有关共享存储区的情况。(2)用于设置或改变共享存储区的属性。(3)对共享存储区的加锁和解锁命令。(4)删除共享存储区标识符等。 如shmctl(shmid,IPC_RMID,0)
2、进程控制 fork与execv系统调用 pid_t p1 if ((p1=fork()) == 0) { //sub puts("get created\n"); execv("./get",NULL); } else { //main ……… }
3、Linux下的信号灯及其P、V操作 见实验二相关内容
4、编译、编辑、调试 cc –o sub1 sub1.c vi gdb
三、实验指导