当前位置: 首页 > news >正文

网站建设流程六个步骤企业管理咨询公司宗旨

网站建设流程六个步骤,企业管理咨询公司宗旨,东莞市城乡和住房建设局,wordpress粉丝主题文章目录 一、共享内存的原理详谈共享内存的实现过程二、共享内存的接口函数1.shmget2. shmatshmdtshmctl 进程间使用共享内存通信三、共享内存的特性 关于代码 一、共享内存的原理 共享内存是由操作系统维护和管理的一块内存。 共享内存的本质是内核级的缓冲区。 一个进程向… 文章目录 一、共享内存的原理详谈共享内存的实现过程二、共享内存的接口函数1.shmget2. shmatshmdtshmctl 进程间使用共享内存通信三、共享内存的特性 关于代码 一、共享内存的原理 共享内存是由操作系统维护和管理的一块内存。 共享内存的本质是内核级的缓冲区。 一个进程向操作系统申请一块共享区内存操作系统为该进程创建了一块内存后进程要将该共享内存与自己的虚拟地址空间进行映射挂接。 也就是将共享区内存通过页表建立映射关系后在进程自己的虚拟地址空间的共享区中就保留了共享内存的起始地址。 同时进程b也通过页表映射将共享区的起始地址映射到自己的虚拟地址空间中两个进程就能看到同一份资源从而能实现通信 那为什么要个操作系统申请内存而不给进程自己管理呢 因为操作系统要对各种共享内存进行先描述再组织的工作。 所以共享内存一定有对应的描述该共享内存的对象保存共享内存及其周边的各种属性和信息。 操作系统对这些对象进行管理的过程本质转化成对链表的增删查改。 详谈共享内存的实现过程 二、共享内存的接口函数 1.shmget shmget - allocates a System V shared memory segment int shmget(key_t key, size_t size, int shmflg);该接口就是向内存申请一块共享内存。 参数2size 该参数就是申请的共享内存块的大小。 注意一般申请的共享内存是4096字节4KB的整数倍。 如果申请的是4097字节操作系统会给一块4096*2字节大小的共享内存但是能够使用的只有4097字节剩下的空间给了也不能用。 参数3shmflg 这个参数类似于open函数的第三个参数打开的方式O_CREAT|O_WRONLYshmflg参数的底层也是使用位图实现的。 重点是这两个宏定义 1.IPC_CREAT单独使用时如果不存在就创建并返回如果存在就获取并返回。2.IPC_CREAT|IPC_EXCL一起使用时如果不存在就创建并返回如果存在则出错返回。3.IPC_EXCL不单独使用 第二点让人奇怪解释如下 IPC_CREAT|IPC_EXCL能保证如果能申请到那么申请到的共享内存是最新的 参数3key key是一个唯一标识符也就是说每个共享内存都有唯一的key。 ftok - convert a pathname and a project identifier to a System V IPC key SYNOPSIS #include sys/types.h #include sys/ipc.h key_t ftok(const char *pathname, int proj_id);用户通过传递一个路径名和一个id返回一个共享内存的唯一标识符。 所以ftok函数的本质就是一个算法。 pathname和proj_id是用户自己控制的。 为什么不让操作系统随机生成呢 因为操作系统随机生成的key并不能传递给另一个进程从而让不同的进程看到同一份资源这个目的。 所以必须让用户传参下来。 key_t key ftok(pathname.c_str(),proj_id); // 成功返回key失败返回-1返回值 如果共享内存申请成功返回的是shmid,其实这个返回值就像是文件fd创建一个文件返回该文件在文件数组fd_array中的下标。申请失败返回-1. key_t key ftok(PATH_NAME,proj_id);flag IPC_CREATE|IPC_EXCL|0666;int shmid shmget(key,size,flag); // 申请成功返回id失败返回-1所以可见共享内存的确是由操作系统管理起来的。 所以共享内存的生命周期是随操作系统的进程退出共享内存并不会释放。除非内核重启否则共享内存是不会释放的。 对比shmid和key shmid是共享内存在数组中的下标只在进程内用于标识资源的唯一性。 而key是内核级标定共享内存唯一性的。 共享内存的权限问题 共享内存的权限可以直接在shmget函数的第二个参数中传递。 如何保证让不同的进程看到同一份内存呢 2. shmat 该函数是将指定进程与共享内存进行挂接。 第一个参数就是共享内存的id第二个参数暂时不用管设置为nullptr即可第三个参数同样暂时不管设置成0. // 2. 将服务端与共享内存挂接起来 char *shmaddr (char *)shmat(shmid, nullptr, 0); // 返回挂接的虚拟地址的起始地址shmdt 将挂接时获取的地址传过去取消挂接即可成功返回0失败返回-1. shmctl 就是将共享内存删除。 参数1传对应的共享内存参数2传IPC_RMID参数3先不管穿nullptr 参数2的命令如下就是标记对应的共享内存为删除状态。 进程间使用共享内存通信 假设进程A申请共享内存。 对进程A来说 1.进程A先调用shmget函数创建共享内存。2.进程A与对应的共享内存挂接起来。3.通信完成后取消挂接。4.再将共享内存释放。 对进程B来说 1.进程B先调用shmget函数获取共享内存。 2.进程B与对应的共享内存挂接起来。 3.通信完成后取消挂接。 三、共享内存的特性 1.共享内存没有同步互斥之类的保护机制 2.共享内存是所有进程间通信中速度最快的拷贝少 进程想向内存中写入数据直接向对应的共享内存进行写入即可只需要将用户层缓冲区拷贝到内存中即可。只需要一次拷贝。 3.共享内存内部的数据由用户自己维护 关于代码 代码地址请移步gitee——共享内存
http://www.dnsts.com.cn/news/69321.html

相关文章:

  • 宁波网站推广软件哪家强网络推广营销方案100例
  • 网站内链有什么用wordpress 已安装主题
  • 网站收录和反链都正常关键词却没有排名的原因巴里坤网站建设
  • 大连网站设计案例100个最好的微信小程序
  • 做电商网站搭建晋升微信平台服务电话
  • 专业网站网站设计有什么软件可以找客户
  • 湖南网站建设 莫道婚纱摄影介绍
  • 上海专业做网站公司有哪些哪里有做网站的教程
  • 做相册哪个网站好网贷代理推广
  • 做盗版电影网站犯法不长沙市停课最新消息
  • 上海建设银行网站莘庄网站的pv统计功能怎样做
  • logo网站有哪些网站建设业务活动
  • 建设信用卡中心网站怎么搭建网站
  • 福州网站怎么做seo衡阳市建设学校官方网站
  • 网站信息登记表扫描件德勤管理咨询
  • 连衣裙一起做网站wordpress的数据库配置文件
  • 网站建设前台与后台最新技术网站建设流程行情
  • 外贸高端网站定制WordPress纯代码html地图
  • 湘潭网站建设 电话磐石网络郑州网站seo多少钱
  • php做彩票网站吗深圳网页设计与制作公司
  • 网站建设选超速云建站网站可以做系统还原吗
  • 建站系统低价建站新闻资讯wordpress建站怎么样
  • phpcms仿行业网站建湖人才网今曰招
  • 做亚马逊网站费用甘肃建设厅网站首页
  • 代理东莞网站制作公司wordpress 进度插件
  • 网站通栏广告素材兰州网站设计厂家
  • 阿里巴巴网站推广怎么做游戏推广平台代理加盟
  • 南宁百度 - 网站正在建设中广东住房和城乡建设部网站
  • 属于自己的网站做网站开发需要学什么
  • 查网站怎么做的网站建设相关博客