
1、由于linux软件中内存不足,导致无法在intellibmpi分享库无法分配内存。
2、libmpi分享的文件较大,导致无法分配内存。
这一篇记录一下共享内存实验,需要linux的共享内存机制有一定的了解,同时也需要了解POSIX信号量来实现进程间的同步。可以参考以下两篇博客: https://blog.csdn.net/sicofield/article/details/10897091https://blog.csdn.net/ljianhui/article/details/10253345
实验要求:编写sender和receiver程序,sender创建一个共享内存并等待用户输入,然后把输入通过共享内存发送给receiver并等待,receiver收到后把消息显示在屏幕上并用同样方式向sender发送一个over,然后两个程序结束运行。
这个实验的难点主要在于共享内存的创建和撤销(涉及到的步骤比较多,需要理解各步骤的功能),以及实现两个进程间的相互等待(使用信号量来实现,这里使用了有名信号量)
实验心得:学习理解了linux的共享内存机制以及POSIX信号量机制。
两个实验虽然加强了对linux一些机制的理解,但是感觉对linux的学习还不够,需要继续学习。
共享内存查看使用ipcs命令,不加如何参数时,会把共享内存、信号量、消息队列的信息都打印出来,如果只想显示共享内存信息,使用如下命令:
[root@localhost ~]# ipcs -m
------ Shared Memory Segments --------
keyshmid owner perms bytes nattch status
0x00000000 1867776root 600393216 2 dest
0x00000000 1900545root 600393216 2 dest
0x00030021 1703938zc666131104 1
0x0003802e 1736707zc666131104 1
0x00030004 1769476zc666131104 1
0x00038002 1802245zc666131104 1
0x00000000 1933318root 600393216 2 dest
0x00000000 1966087root 600393216 2 dest
0x00000000 1998856root 600393216 2 dest
0x00000000 2031625root 600393216 2 dest
0x00000000 2064394root 600393216 2 dest
0x0014350c 2261003cs66633554432 2
0x00000000 2129932root 600393216 2 dest
0x00000000 2162701root 600393216 2 dest
0x00143511 395837454 root 66610485761
其中:
第一列就是共享内存的key;
第二列是共享内存的编号shmid;
第三列就是创建的用户owner;
第四列就是权限perms;
第五列为创建的大小bytes;
第六列为连接到共享内存的进程数nattach;
第七列是共享内存的状态status。其中显示“dest”表示共享内存段已经被删除,但是还有用户在使用它,当该段内存的mode字段设置为SHM_DEST时就会显示“dest”。当用户调用shmctl的IPC_RMID时,内存先查看多少个进程与这个内存关联着,如果关联数为0,就会销毁这段共享内存,否者设置这段内存的mod的mode位为SHM_DEST,如果所有进程都不用则删除这段共享内存。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)