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

该网站的域名已经被其他人绑定如何进行品牌营销

该网站的域名已经被其他人绑定,如何进行品牌营销,网站物理结构,建站自学文章目录 进程间通信1.system V共享内存1.1共享内存原理1.2共享内存数据结构1.3共享内存函数 2.system V消息队列2.1消息队列原理 3.system V信号量3.1信号量原理3.2进程互斥 4.共享内存的使用示例 进程间通信 1.system V共享内存 1.1共享内存原理 共享内存区是最快的IPC形式…

文章目录

  • 进程间通信
    • 1.system V共享内存
      • 1.1共享内存原理
      • 1.2共享内存数据结构
      • 1.3共享内存函数
    • 2.system V消息队列
      • 2.1消息队列原理
    • 3.system V信号量
      • 3.1信号量原理
      • 3.2进程互斥
    • 4.共享内存的使用示例

进程间通信

1.system V共享内存

1.1共享内存原理

  共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。
在这里插入图片描述

本质:还是先让不同的进程看到同一份资源。

  所以,共享内存是Unix下的多进程之间的通信方法,允许多个进程访问同一个内存空间,是在多个进程之间共享和传递数据最高效的方式。共享内存本质上是一块物理内存,多个进程通过将同一块物理内存都映射到自己的虚拟地址空间,通过自己的虚拟地址进行访问,实现数据间的共享。

  如果某个进程修改了共享内存中的数据,其它的进程读到的数据也将会改变。但是需要注意的是,共享内存并未提供锁机制,也就是说,在某一个进程对共享内存的进行读写的时候,不会阻止其它的进程对它的读写。如果要对共享内存的读/写加锁,可以使用信号灯。

  

1.2共享内存数据结构

struct shmid_ds {struct ipc_perm shm_perm; /* operation perms */int shm_segsz; /* size of segment (bytes) */__kernel_time_t shm_atime; /* last attach time */__kernel_time_t shm_dtime; /* last detach time */__kernel_time_t shm_ctime; /* last change time */__kernel_ipc_pid_t shm_cpid; /* pid of creator */__kernel_ipc_pid_t shm_lpid; /* pid of last operator */unsigned short shm_nattch; /* no. of current attaches */unsigned short shm_unused; /* compatibility */void *shm_unused2; /* ditto - used by DIPC */void *shm_unused3; /* unused */
};

  Linux的共享内存数据结构是struct shmid_ds,它定义了共享内存的一些重要属性。这个结构体包括以下字段:

  struct ipc_perm shm_perm:这个字段包含了操作权限,如读、写和执行等。

  int shm_segsz:这个字段表示共享内存段的字节大小。

  __kernel_time_t shm_atime:这个字段表示最后一次附加的时间。

  __kernel_time_t shm_dtime:这个字段表示最后一次分离的时间。

  __kernel_time_t shm_ctime:这个字段表示最后一次更改的时间。

  __kernel_ipc_pid_t shm_cpid:这个字段表示创建者的进程ID。

  __kernel_ipc_pid_t shm_lpid:这个字段表示最后一次操作共享内存的进程ID。

  unsigned short shm_nattch:这个字段表示当前附加到共享内存的进程数。

  unsigned short shm_unused:这个字段是用于兼容的,目前未使用。

  这个结构体主要用于在Linux内核中描述POSIX共享内存(即System V共享内存)。在用户空间中,通常使用的是shmget(), shmat(), shmdat()等系统调用与内核的POSIX共享内存交互。

  

1.3共享内存函数

  shmget函数

在这里插入图片描述
  功能:用来创建共享内存

  原型: int shmget(key_t key, size_t size, int shmflg);

  参数:
   key:这个共享内存段名字
   size:共享内存大小
   shmflg:由九个权限标志构成,它们的用法和创建文件时使用的mode模式标志是一样的

  返回值:成功返回一个非负整数,即该共享内存段的标识码;失败返回-1。

  

shmat函数
在这里插入图片描述

  功能:将共享内存段连接到进程地址空间

  原型:void *shmat(int shmid, const void *shmaddr, int shmflg);

  参数:
   shmid: 共享内存标识
   shmaddr:指定连接的地址
   shmflg:它的两个可能取值是SHM_RND和SHM_RDONLY

  返回值:成功返回一个指针,指向共享内存第一个节;失败返回-1

  注意:
  shmaddr为NULL,核心自动选择一个地址
  shmaddr不为NULL且shmflg无SHM_RND标记,则以shmaddr为连接地址。
  shmaddr不为NULL且shmflg设置了SHM_RND标记,则连接的地址会自动向下调整为SHMLBA的整数倍。公式:shmaddr - (shmaddr % SHMLBA)
shmflg=SHM_RDONLY,表示连接操作用来只读共享内存

  

shmdt函数
在这里插入图片描述
  功能:将共享内存段与当前进程脱离
  原型:int shmdt(const void *shmaddr);

  参数:
  shmaddr: 由shmat所返回的指针

  返回值:成功返回0;失败返回-1

  注意:将共享内存段与当前进程脱离不等于删除共享内存段

  
shmctl函数
在这里插入图片描述

  功能:用于控制共享内存
  原型:int shmctl(int shmid, int cmd, struct shmid_ds *buf);

  参数
  shmid:由shmget返回的共享内存标识码
  cmd:将要采取的动作(有三个可取值)
  buf:指向一个保存着共享内存的模式状态和访问权限的数据结构

  返回值:成功返回0;失败返回-1

在这里插入图片描述
  

2.system V消息队列

  消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法。

  每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值。

  特性方面:IPC资源必须删除,否则不会自动清除, 除非重启,所以system V IPC资源的生命周期随内核。

  

2.1消息队列原理

在这里插入图片描述

  System V消息队列的原理是基于消息块的数据结构,可以在进程间传递数据。每个消息块都有一个类型和信息两部分构成。两个进程可以通过System V消息队列互相发送和接收消息。发送消息时,进程将数据块添加到消息队列的队尾,接收消息时,进程从消息队列的队头获取数据块。

  需要注意的是,System V消息队列的资源必须自行删除,否则不会自动清除,因为System V IPC资源的生命周期是随内核的。同时,消息队列数据结构也可能会存在大量的消息队列,系统也必须为消息队列维护相关的内核数据结构。
  

3.system V信号量

3.1信号量原理

  System V信号量集(也称为信号量)的原理是基于一种数据操作锁(相当于资源计数器),用于同步和协调多个进程之间的数据交换。它自身不具备数据交换功能。

  信号量的工作原理基于两种原子性操作:wait(p)和signal(v)。 当一个进程进行wait(p)操作时,如果信号量的值大于0,则该进程可以继续执行并使用一个资源,将信号量的值减1;如果信号量的值为0,则该进程会被阻塞,直到其他进程释放资源,使信号量的值大于0为止。当一个进程进行signal(v)操作时,如果信号量的值小于等于0,则该进程可以继续执行并使用一个资源,将信号量的值加1;如果信号量的值大于0,则进程不会得到资源,因为已有其他进程在使用资源。

  信号量的作用是维护资源的互斥和多进程的同步访问,以确保在一个时间点只有一个进程可以访问共享资源,从而避免了多个进程同时访问共享资源而引起的竞争条件。 同时,信号量也可以用于控制多个进程之间的同步和通信。
  

3.2进程互斥

  由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥。

  系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源。

  在进程中涉及到互斥资源的程序段叫临界区。

  特性方面:IPC资源必须删除,否则不会自动清除,除非重启,所以system V IPC资源的生命周期随内核。
  

4.共享内存的使用示例

makefile

.PHONY:all
all:server client
client:client.c comm.cgcc -o $@ $^
server:server.c comm.cgcc -o $@ $^.PHONY:clean
clean:rm -f client server

  
comm.h

#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>#define PATHNAME "."
#define PROJ_ID 0x6666int createShm(int size);
int destroyShm(int shmid);
int getShm(int size);#endif

  
comm.c

static int commShm(int size, int flags)
{key_t _key = ftok(PATHNAME, PROJ_ID);if(_key < 0){perror("ftok");return -1;}int shmid = 0;if( (shmid = shmget(_key, size, flags)) < 0){perror("shmget");return -2;}return shmid; 
}int destroyShm(int shmid)
{if(shmctl(shmid, IPC_RMID, NULL) < 0){perror("shmctl");return -1;}return 0;
}int createShm(int size)
{return commShm(size, IPC_CREAT|IPC_EXCL|0666);
}int getShm(int size)
{return commShm(size, IPC_CREAT);
}

  
server.c

#include "comm.h"
int main()
{int shmid = createShm(4096);char *addr = shmat(shmid, NULL, 0);sleep(2);int i = 0;while(i++<26){printf("client# %s\n", addr);sleep(1);}shmdt(addr);sleep(2);destroyShm(shmid);return 0;
}

  
client.c

#include "comm.h"
int main()
{int shmid = getShm(4096);sleep(1);char *addr = shmat(shmid, NULL, 0);sleep(2);int i = 0;while(i<26){addr[i] = 'A'+i;i++;addr[i] = 0;sleep(1);}shmdt(addr);sleep(2);return 0;
}
http://www.hkea.cn/news/937253/

相关文章:

  • 安徽网站定制最大免费广告发布平台
  • 怎么查网站有没有做404公司宣传网页怎么做
  • 靠谱营销网站开发选哪家seo的优点和缺点
  • 企业网站建设论文文献综述百度推广的广告真实可信吗
  • 企业网站优化方式广州最新消息今天
  • 旅游网站开发的意义seo优化方案案例
  • 山东做网站的公司seo数据分析哪些方面
  • 做网站用哪几个端口 比较好百度贴吧官网网页
  • 弹幕网站是怎么做的百度在线翻译
  • 独立网站域名代发关键词包收录
  • 如何建立门户网站百度可以发布广告吗
  • 网站开发毕设文献郑州网站优化顾问
  • 青海建设银行的官方网站自己制作网页的网站
  • 网站建设的图片叠加步骤过程2021年搜索引擎排名
  • 网站链接到邮箱怎么做搜索引擎推广试题
  • 十堰城市建设网站制作自己的网站
  • 传媒网站建设公司深圳百度seo优化
  • 公司需要网站 该怎么做公司推广咨询
  • 高中男女做那个视频网站seo做的好的网站
  • 网站建设 摄影服务上海seo网站排名优化公司
  • 网页设计中html代码seo博客网站
  • 怎样建设小游戏网站google关键词搜索技巧
  • 淘宝 客要推广网站怎么做全媒体广告代理
  • 那个b2b网站可以做外贸武汉全网推广
  • 深圳css3网站开发多少钱如何策划一个营销方案
  • 织梦统计网站访问量代码网络营销公司如何建立
  • 外贸营销型网站建设今日最新重大新闻
  • 个性化定制网站长春网络推广优化
  • 合肥庐阳区疫情最新消息seo优化首页
  • h5网站制作接单最新中高风险地区名单