• Linux系统编程18_共享内存


    在Linux中,每个进程都有属于自己的进程控制块(PCB)和地址空间(Addr Space),并且都有一个与之对应的页表,

    负责将进程的虚拟地址与物理地址进行映射,通过内存管理单元(MMU)进行管理。
    两个不同的虚拟地址通过页表映射到物理空间的同一区域,它们所指向的这块区域即共享内存


    在物理地址中有一块共同的内存区,即共享内存,这块内存可以被两个进程同时看到
    这样当一个进程进行写操作,另一个进程读操作就可以实现进程间通信。
    但是,我们要确保一个进程在写的时候不能被读,因此我们使用信号量来实现同步与互斥

    对于一个共享内存,实现采用的是引用计数的原理,当进程脱离共享存储区后,计数器减一,挂架成功时,计数器加一,
    只有当计数器变为零时,才能被删除。当进程终止时,它所附加的共享存储区都会自动脱离。

    ==================================================================

    相关函数:

    shmget ( ):创建共享内存
    int shmget(key_t key, size_t size, int shmflg);

    shmat ( ):挂接共享内存
    void *shmat(int shmid, const void *shmaddr, int shmflg);

    shmdt ( ):去关联共享内存
    当一个进程不需要共享内存的时候,就需要去关联。
    该函数并不删除所指定的共享内存区,而是将之前用shmat函数连接好的共享内存区脱离目前的进程。

    shmctl ( ):销毁共享内存
    int shmctl(int shmid, int cmd, struct shmid_ds *buf);

    =======================================================================

    参考链接:

    共享内存:https://blog.csdn.net/ypt523/article/details/79958188

    知行合一
  • 相关阅读:
    TCP软件环境测试
    MTK6261之检测是否插了T卡
    java实现MD5加密
    Lrucache缓存技术
    Android自定义UI模板
    《富爸爸,穷爸爸》读后感——怎么实现财务自由
    JAVA双向链表
    写一个查找算法找出数组中相同的元素
    二分查找算法(JAVA)
    Android查询系统的音频(音乐播放器的核心)
  • 原文地址:https://www.cnblogs.com/grooovvve/p/14660350.html
Copyright © 2020-2023  润新知