linux中intel libmpi分享库无法分配内存

linux中intel libmpi分享库无法分配内存,第1张

共享内存不足或共享文件较大。

1、由于linux软件中内存不足,导致无法在intellibmpi分享库无法分配内存。

2、libmpi分享的文件较大,导致无法分配内存。

这一篇记录一下共享内存实验,需要linux的共享内存机制有一定的了解,同时也需要了解POSIX信号量来实现进程间的同步。可以参考以下两篇博客: https://blog.csdn.net/sicofield/article/details/10897091

https://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,如果所有进程都不用则删除这段共享内存。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/6269267.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-19
下一篇2023-03-19

发表评论

登录后才能评论

评论列表(0条)

    保存