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

武威市建设局网站如何添加网站后台

武威市建设局网站,如何添加网站后台,怎么上传软件到网站,wordpress 搜狐视频文章目录 一、共享内存的原理详谈共享内存的实现过程二、共享内存的接口函数1.shmget2. shmatshmdtshmctl 进程间使用共享内存通信三、共享内存的特性 关于代码 一、共享内存的原理 共享内存是由操作系统维护和管理的一块内存。 共享内存的本质是内核级的缓冲区。 一个进程向…

文章目录

  • 一、共享内存的原理
  • 详谈共享内存的实现过程
    • 二、共享内存的接口函数
      • 1.shmget
      • 2. shmat
      • shmdt
      • shmctl
    • 进程间使用共享内存通信
    • 三、共享内存的特性
  • 关于代码


一、共享内存的原理

共享内存是由操作系统维护和管理的一块内存。

共享内存的本质是内核级的缓冲区。

一个进程向操作系统申请一块共享区内存,操作系统为该进程创建了一块内存后,进程要将该共享内存与自己的虚拟地址空间进行映射挂接。

也就是将共享区内存通过页表建立映射关系后,在进程自己的虚拟地址空间的共享区中就保留了共享内存的起始地址。

在这里插入图片描述

同时,进程b也通过页表映射,将共享区的起始地址映射到自己的虚拟地址空间中,两个进程就能看到同一份资源,从而能实现通信!!!

那为什么要个操作系统申请内存,而不给进程自己管理呢?
因为操作系统要对各种共享内存进行先描述,再组织的工作。

所以,共享内存一定有对应的描述该共享内存的对象,保存共享内存及其周边的各种属性和信息。
在这里插入图片描述

操作系统对这些对象进行管理的过程,本质转化成对链表的增删查改。


详谈共享内存的实现过程

二、共享内存的接口函数

1.shmget

shmget - allocates a System V shared memory segment
int shmget(key_t key, size_t size, int shmflg);

该接口就是向内存申请一块共享内存。


参数2:size

该参数就是申请的共享内存块的大小。

注意:一般申请的共享内存是4096字节(4KB)的整数倍。
如果申请的是4097字节,操作系统会给一块4096*2字节大小的共享内存,但是能够使用的只有4097字节,剩下的空间给了也不能用。

参数3:shmflg

这个参数类似于open函数的第三个参数,打开的方式:O_CREAT|O_WRONLY,shmflg参数的底层也是使用位图实现的。

在这里插入图片描述
重点是这两个宏定义

  • 1.IPC_CREAT单独使用时,如果不存在,就创建并返回,如果存在,就获取并返回。
  • 2.IPC_CREAT|IPC_EXCL一起使用时,如果不存在,就创建并返回,如果存在,则出错返回。
  • 3.IPC_EXCL不单独使用

第二点让人奇怪,解释如下:
IPC_CREAT|IPC_EXCL能保证如果能申请到,那么申请到的共享内存是最新的!


参数3:key

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://pM9uiZdF.knLgk.cn
http://zkL7BAGd.knLgk.cn
http://a9oQ5Qhv.knLgk.cn
http://htzQl0np.knLgk.cn
http://wkdbdK5j.knLgk.cn
http://gj38M0Nk.knLgk.cn
http://b1KnBi6X.knLgk.cn
http://RVg0IYB5.knLgk.cn
http://FYvD7l57.knLgk.cn
http://PLHl8enC.knLgk.cn
http://opFRpqAp.knLgk.cn
http://8JOyY9jk.knLgk.cn
http://I4R87nQj.knLgk.cn
http://65JUMi2o.knLgk.cn
http://EBdTyUXV.knLgk.cn
http://4dwanJ9j.knLgk.cn
http://IhUPhf5m.knLgk.cn
http://KvC9f3A5.knLgk.cn
http://juxRzEMY.knLgk.cn
http://w7RWRHXO.knLgk.cn
http://j27LIiFG.knLgk.cn
http://PLZdn1Rc.knLgk.cn
http://9PPzfc7O.knLgk.cn
http://LmYCTq8r.knLgk.cn
http://ckWv6XFw.knLgk.cn
http://WZOOJIgS.knLgk.cn
http://5xLFpbZx.knLgk.cn
http://seNYaA0T.knLgk.cn
http://uYgQbqo4.knLgk.cn
http://3QRIKCw4.knLgk.cn
http://www.dtcms.com/wzjs/735594.html

相关文章:

  • 免费网站软件正能量网站建设前期如何规划
  • 沈阳网站制作列表网wordpress 屏蔽ip插件
  • 深圳南山区网站建设公司中山网站建设gdyouzi
  • 室内设计师招聘网站怎么做新网站才能被百度收录
  • 兰州拼团网站建设seo推广每天做什么
  • 网站技术防护建设寻找网站建设公司
  • 淘宝客网站跳转单品济南电商培训基地
  • asp网站源码安装教程网站建设有前景吗
  • 贵阳德天信网站建设做站用什么网站程序
  • php开发网站流程下列不属于网站建设规划
  • 专做外贸库存的网站做网站需要准备些什么
  • 做短租哪个网站好招投标网站建设开发
  • 499元做网站网络推广营销平台系统
  • 重庆网站建设推广公司关键词密度
  • 绍兴h5建站临沂网站seo
  • 佛山个性化网站搭建建设工程信息化考试报名网站
  • 杭州制作网页与网站最常用的网页制作工具
  • 数字币网站开发会展设计效果图
  • 网站开发项目资金运用明细福建住房和建设网站
  • 网站内如何做论坛手机版网站设计
  • 锡林浩特市长安网站 建设初步方案5113二次加密和三次加密
  • 网站设计制作过程网站后台配置
  • 做网站比较好的个人网站怎么做的模板
  • 南京网站开发联系南京乐识本地网站建设电话
  • 网站搭建接单e福州app官方下载
  • 手机如何制作自己的网站东莞网站建设 汇卓
  • 网站后台功能模块设计中国最火的网站
  • 红安城市建设局投诉网站企业网站服务费怎么做记账凭证
  • 您身边的网站建设顾问wordpress控制仪
  • 个人房屋做民宿在哪个网站微信开发有哪两种