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

word如何做网站链接淘宝客建站需要多少钱

word如何做网站链接,淘宝客建站需要多少钱,常德建设局网站,软件制作是什么专业目录 1、System V概述 2.共享内存#xff08;shm#xff09; 2.1 shmget — 创建共享内存 2.1.2 ftok#xff08;为shmmat创建key值#xff09; 2.1.3 为什么一块共享内存的标志信息需要用户来传递 2.2 shmat — 进程挂接共享内存 2.3 shmdt — 断开共享内存连接 2.4…目录 1、System V概述 2.共享内存shm 2.1 shmget — 创建共享内存 2.1.2 ftok为shmmat创建key值 2.1.3 为什么一块共享内存的标志信息需要用户来传递 2.2 shmat — 进程挂接共享内存 2.3 shmdt — 断开共享内存连接 2.4 shmctl — 删除共享内存 2.5 命令行查看共享内存 2.6 使用命令释放共享内存资源 2.7. 优缺点 2.8 管道和共享内存的比较为什么共享内存是最快的 3 消息队列的原理与概念 4 信号量 4.1 储备知识 4.2 原理与概念 1、System V概述 在Linux系统下System V指的是一套由ATT开发的UNIX操作系统版本及其相关的进程间通信IPC机制。 System V是UNIX操作系统的一个重要分支它提供了一套丰富的系统调用和进程间通信机制。与BSD等其他UNIX版本相比System V在IPC机制方面有着显著的不同和优势。 System V提供了三种主要的IPC机制包括 共享内存Shared Memory消息队列Message Queues信号量Semaphores 2.共享内存shm 进程之间通信的前提都是通信的进程都可以看到同一份资源。 管道通信是让通信的双方看到一个操作系统内核管理的缓冲区通过文件描述符读写数据。而共享内存则是让进程之间看到一个直接映射到进程地址空间的共享内存区域。 共享内存是有操作系统开辟和维护的他的生命周期是随着内核的结束而结束的。 共享内存的工作原理基于操作系统的内存管理机制。操作系统为共享内存区域分配一块物理内存并允许多个进程或线程通过映射这块物理内存到各自的虚拟地址空间来访问它。由于这些进程或线程访问的是同一块物理内存因此它们可以直接读写这块内存中的数据而无需进行数据拷贝。 OS中可以存在多个共享内存共享内存也可以让多组需要通信的进程访问。 2.1 shmget — 创建共享内存 shmget是一个在Linux系统中用于创建或获取共享内存段的系统调用函数。以下是关于shmget的详细解释 参数说明 key共享内存的键值用于唯一标识共享内存对象。这个键值可以通过ftok函数生成也可以直接使用IPC_PRIVATE来创建一个新的共享内存对象。size共享内存的大小以字节为单位。这个大小需要在系统允许的范围内通常由系统内核参数shmmax和shmmin控制。shmflg标志位用于指定创建共享内存的权限和行为。下面的表格是常见的标志位 IPC_CREAT如果共享内存不存在则创建它IPC_CREAT|IPC_EXCL IPC EXCL单独使用无意义: 如果内存中不存在键值与key值相等的共享内存则会创建一个新的共享内存 反之就出错返回 综上: 如果shmget调用成功必定创建的是一个全新的共享内存 IPC CREAT |IPC EXCL|杈限(0xxx)用来指定创建的共享内存的权限 返回值 成功时shmget返回一个有效的共享内存标识符shmid用于后续对共享内存的操作。失败时shmget返回-1并将errno设置为相应的错误代码以指示失败的原因。 2.1.2 ftok为shmmat创建key值 ftok 是一个在 Unix 和类 Unix 操作系统如 Linux中用于生成一个唯一键值key的函数这个键值通常用于创建或访问 IPC进程间通信对象如消息队列、信号量和共享内存。ftok 函数通过指定的路径名和一个标识符通常是一个字符来生成这个键值。 参数说明 pathname一个指向文件系统路径名的指针。这个路径名必须指向一个已存在的文件并且对该文件的访问权限会影响 ftok 函数的行为。如果 ftok 成功它不会修改这个文件的内容或属性。proj_id一个标识符通常是一个字符在 ASCII 范围内即 0 到 127。这个标识符与路径名一起用于生成键值。 返回值 成功时ftok 返回一个唯一的键值key_t 类型该键值可以用于创建或访问 IPC 对象。失败时ftok 返回 (key_t)-1并设置 errno 以指示错误原因。 2.1.3 为什么一块共享内存的标志信息需要用户来传递 只要通信双方事先约定好了参数两个进程可以基于相同的文件路劲和项目标识符来生成同一个key值当它们分别调用shmget函数并传入相同的key就能够看到同一个共享内存从而实现进程间通信。如果key是由内核设定进程之间不知道对方创建共享内存的key值因为进程具有独立性从而无法建立通信。 eg进程A创建共享内存其key值如果由OS自动生成进程具有独立性进程B无法知道进程A创建的共享内存的key值因此进程B无法访问进程A创建的共享内存从而无法建立通信。 2.2 shmat — 进程挂接共享内存 hmat是一个在Linux系统中用于进程间通信的函数特别是在共享内存的使用中扮演着重要角色。 一、函数原型 二、参数说明 shmid共享内存标识符由shmget函数返回。这个标识符用于唯一标识一个共享内存段。shmaddr指定共享内存连接到当前进程的地址空间的起始地址。如果这个参数为NULL系统会自动选择一个合适的地址。shmflg指定连接共享内存的权限标志。常用的权限标志有SHM_RDONLY只读连接等。如果省略此标志则默认以读写方式附加。 选项作用SHM_RDONLY关联共享内存后只进行读取操作SHM_RND若shmaddr不为NULL则关联地址自动向下调整为SHMLBA的整数倍。公式shmaddr-(shmaddr%SHMLBA)0默认为读写权限 三、返回值 成功时shmat函数返回一个指向共享内存的指针。失败时返回(void*)-1并设置相应的错误码。 2.3 shmdt — 断开共享内存连接 shmdt 是一个在 Linux 和其他类 Unix 操作系统中用于进程间通信IPC的函数特别是在共享内存的使用中。它的主要作用是将先前由 shmat 函数附加到进程地址空间的共享内存段分离detach出去。 参数 shmaddr这是一个指向先前由 shmat 返回的共享内存段在进程地址空间中的起始地址的指针。这个地址是 shmat 函数成功执行后返回的指针。 返回值 成功时shmdt 函数返回 0。失败时返回 -1并设置相应的错误码。 使用说明 在调用 shmdt 函数之后进程将不再能够通过该指针访问共享内存段。但是这并不意味着共享内存段被销毁。只要还有其他进程附加attach到该共享内存段或者该共享内存段被标记为持久persistent它将继续存在。调用 shmdt 是个好习惯因为它可以释放进程对共享内存段的引用从而允许操作系统在必要时回收相关资源。但是请注意shmdt 并不销毁共享内存段本身要销毁共享内存段需要使用 shmctl 函数并指定 IPC_RMID 命令。如果进程在退出前没有调用 shmdt 来分离共享内存段操作系统通常会在进程终止时自动执行这一操作。然而显式调用 shmdt 可以避免潜在的资源泄漏和不必要的系统开销。 错误处理 在使用 shmdt 函数时可能会遇到以下错误 EINVAL无效的 shmaddr 参数即该地址不是由 shmat 返回的有效共享内存段地址。 当遇到这些错误时应根据错误码进行相应的处理例如输出错误信息并采取适当的恢复措施。 2.4 shmctl — 删除共享内存 shmctl是一个在Linux系统中用于控制共享内存的函数。但是普遍用于删除内存。  二、参数说明 shmid共享内存的标识符该标识符由shmget函数返回。 cmd指定要执行的操作命令。常用的命令有 IPC_STAT获取共享内存的状态将共享内存的shmid_ds结构复制到buf中。IPC_SET如果进程有足够的权限就改变共享内存的状态把buf所指的shmid_ds结构中的uid、gid、mode复制到共享内存的shmid_ds结构内。IPC_RMID删除共享内存段。需要注意的是该命令实际上不从内核删除共享内存段而是仅仅把这个段标记为删除。实际删除过程是发生在最后一个使用该共享内存的进程退出或者是解除映射之后。 buf指向shmid_ds结构的指针用于设置或获取共享内存的属性。当cmd为IPC_STAT或IPC_SET时需要使用此参数。 三、返回值 若执行成功shmctl函数返回0如果失败返回-1并设置相应的错误码。 四、注意事项 在使用shmctl函数之前必须确保已经成功获取了共享内存的标识符即shmid。当使用IPC_RMID命令删除共享内存时请确保没有其他进程正在使用该共享内存否则可能会导致未定义的行为。在编写涉及共享内存的程序时务必注意同步和互斥问题以避免数据竞争和不一致性。 2.5 命令行查看共享内存 单独使用ipcs命令时会默认列出消息队列、共享内存以及信号量相关的信息若只想查看它们之间某一个的相关信息可以选择携带以下选项 -q列出消息队列相关信息。-m列出共享内存相关信息。-s列出信号量相关信息。 标题含义key系统区别各个共享内存的唯一标识shmid共享内存的用户层id句柄owner共享内存的拥有者perms共享内存的权限bytes共享内存的大小nattch关联共享内存的进程数status共享内存的状态 key和shmid的区别都是确保共享内存的唯一性和可访问性的重要机制。 key在内核中用于标识共享内存确保其在系统内的唯一性即key在内核层面上保证了共享内存的唯一性。 shmid是在成功创建共享内存后由系统返回用于在用户层面上唯一地标识共享内存并作为后续对共享内存操作的参数即shmid在用户层面上提供了对共享内存的唯一标识和操作接口。 注意 key是在内核层面上保证共享内存唯一性的方式而shmid是在用户层面上保证共享内存的唯一性key和shmid之间的关系类似于fd和FILE*之间的的关系。 2.6 使用命令释放共享内存资源 ipcrm [-m|-q|-s] shmid 功能删除已存在的IPC资源对象包括共享内存、消息队列、信号量集。 2.7. 优缺点 优点共享内存是所有进程间通信(IPC)方式中速度最快的。 减少拷贝次数在管道通信中数据通常要经过至少两次拷贝数据从一个进程的缓冲区写入管道然后从管道中读取到另一个进程的缓冲区中这涉及两次数据在不同内存区域之间的复制操作。在共享内存中允许多个进程直接访问同一块内存区域当一个进程将数据写入到共享内存中其他进程可以立即看到最多只会经历一次从进程的用户空间到共享内存的拷贝。直接访问进程可以直接对共享内存进行读写操作无需通过OS进行数据中转这大大减少了内核参与数据传输的开销提高了通信效率。 缺点共享内存不提供进程间协同的任何机制。 这会导致多个进程同时访问共享内存区域时出现数据不一致和数据竞争等问题。因为没有内置的同步和互斥手段不同进程可能在不可预测的时间点对共享内存进行读写操作从而破坏数据的完整性。例如一个进程正在写入数据时另一个进程可能同时在读取可能会读取到不完整的数据或者两个进程同时写入可能会导致数据覆盖混乱。所以需要额外的机制(管道、信号量等)来保证数据的完整性和一致性。进程间协同机制是确保多个进程在访问公共资源时能够正确地同步、互斥以及协调彼此的操作。协调彼此的操作则涉及更复杂的交互例如一个进程等待另一个进程完成特定任务后再继续执行。 管道在操作系统中自带协同机制。如管道的读写操作具有原子性一次读写要么全部完成要么全部失败保证了数据的完整性。同时阻塞机制也起到了协同的作用当缓冲区满时写操作被阻塞防止数据溢出当缓冲区为空时读操作被阻塞在一定程度上实现了同步和互斥的效果。 2.8 管道和共享内存的比较为什么共享内存是最快的 我们先来看看管道通信 从这张图可以看出使用管道通信的方式将一个文件从一个进程传输到另一个进程需要进行四次拷贝操作 服务端将信息从输入文件复制到服务端的临时缓冲区中。将服务端临时缓冲区的信息复制到管道中。客户端将信息从管道复制到客户端的缓冲区中。将客户端临时缓冲区的信息复制到输出文件中。 我们再来看看共享内存通信  从这张图可以看出使用共享内存进行通信将一个文件从一个进程传输到另一个进程只需要进行两次拷贝操作 从输入文件到共享内存。从共享内存到输出文件。 所以共享内存是所有进程间通信方式中最快的一种通信方式因为该通信方式需要进行的拷贝次数最少。 3 消息队列的原理与概念 1.消息队列一种进程间通信(IPC)的机制允许多个进程通过发送和接收带有类型的数据块(消息)进行通信这些消息在队列中按照先进先出(FIFO)的顺序存储。 发送进程将消息添加到队列的末尾接收进程从队列的头部读取信息。 注消息队列的生命周期随内核即System V IPC资源的生命周期随内核 2.特点 支持异步通信是指在进行数据传输时发送方和接收方无需同步即它们可以独立的工作彼此之间无需等待对方的回应。如发送方发送消息后继续执行无需等待接收方的回应接收方可以在任何时间接收消息同时会触发一个事件来通知发送方从而达到异步通信的目的。 提供了可靠的消息传递机制确保了数据不会丢失。如即使接收方暂时无法处理消息消息也会保存到队列中直到接收方读取成功。 灵活的消息格式消息队列中的消息可以包含不同类型的数据如文本、二进制等。 3.基本组件每个消息队列都有唯一的标识符(msgqid)、消息队列中每个消息都包含一个类型字段和数据字段。 消息中的类型字段可以用于标识消息的类型以便接收进程可以根据类型来筛选和处理消息而数据字段则包含实际要传递的数据。 4.发送方和接收方通过使用相同的key值来创建或获取消息队列它们就可以访问到同一个消息队列从而实现进程间通信。消息队列特别适用于异步消息传递和任务队列等场景。 4 信号量 4.1 储备知识 1.在多执行流场景下共享资源可能同时被多个执行流尝试访问、修改如果不加以保护这可能会导致数据不一致、资源竞争和死锁等问题。 常见的保护机制主要包括同步和互斥机制。同步机制确保执行流按照预定的顺序进行交互互斥机制确保共享资源在任何一个时刻只能被一个执行流访问。 2.临界资源被保护起来且任何时刻只允许一个执行流访问的公共资源称为临界资源。eg一个全局变量在多个线程同时读写时如果不加以保护可能会出现数据错误这个全局变量就称为临界资源。 3.临界区访问临界资源的代码称为临界区。 非临界区除临界区之外的代码称为非临界区。 程序员需要特别关注和保护临界区以确保在任何时刻只有一个执行流能够进入临界区访问临界资源以防止其他执行流同时访问。 4.保护临界资源本质是保护临界区确保在任何时刻只有一个执行流能够访问临界区从而保护数据的一致性和正确性。 5.原子性一个操作被认为是原子的此操作要么完全执行成功要么完全不执行不存在中间状态即此操作不可分割(一旦开始执行它必须连续执行完成中途不能被打断)不能被其他执行流中断。 在并发编程中原子性用于确保多个线程或进程对共享资源进行操作不会导致数据不一致、不确定的结果。 4.2 原理与概念 信号量机制本质是对于资源的预订操作线程或者进程预订了之后确保未来有一段时间资源是属于我的。 对于预订资源会有一个最小单位资源都是以这个最小单位为整体被使用的。 信号量需要做到 限制进来的进程数保证每一个进来请求使用资源的进程都有一块资源合理的分配资源 这里由于是信号量的前导我们简单的把信号量理解为一个计数器(是由OS维护的)。 我们这里对于这个信号量的计数器的设计提出几个问题 1.计数器能不能简单的设计成一个整型变量 不行因为整型变量在经过进程创建之后任意一个进程对他进行改变的时候会发生写时拷贝导致两个进程看到的不是同一个计数器这样信号量的第一个目的限制进入的进程数也就失效了。 2.count和count--不是原子的。 3.申请sem和释放sem来保护临界资源是规则。这个规则的由来 这个规则就是程序员之间规定的规则再使用多进程访问临界资源的时候需要代码这样来保护临界资源。 4.所有的进程要访问临界资源都需要先申请信号量那么所有进程都需要看到同一个信号量说明了信号量本身就是一个临界资源。那么我们需要利用临界资源去保护另一个临界资源为了防止临界资源保护的嵌套我们就需要保证信号量这个临界资源是安全的。 所以信号量的申请和信号量的释放--这两个操作都是原子的 5.如果信号量的初始值是1 那么这个信号量不就是一个二元信号量不就是一把锁吗 6.我们前面提到了信号量也需要合理的分配资源那么由谁来做呢 这里也是由程序员在代码部分来完成这项目标。 7.pv操作 我们把原子性的申请信号量称为p操作原子性的释放信号量称为v操作。
http://www.zqtcl.cn/news/555629/

相关文章:

  • 凡科网免费建站步骤及视频logo设计网页
  • 天梯网站建设软件开发公司职位
  • 建站公司外贸东方购物网上商城
  • 白银做网站企业免费网站模板
  • 网络公司给我们做的网站_但是我们不知道域名是否属于我们湖北正规网站建设质量保障
  • 本地网站asp iis团队展示网站
  • 企业网站管理系统cmswordpress知识管理系统
  • 创建一个网站需要怎么做销售平台公司
  • 网站域名实名认证吗做斗图的网站
  • 公司在兰州要做网站怎样选择做网站数据库表各字段详情
  • 营销型网站建设的要素搭建本地网站
  • 深圳网站建设V芯ee8888ewordpress瀑布流主 #65533;
  • 股票交易网站开发angular2做的网站有
  • 如何建立免费个人网站angularjs 网站开发
  • 湖南信息网官方网站安徽省房地产开发项目管理系统
  • a5建站无限动力网站
  • 南京网站建设王道下拉??怎么做免费网站推
  • WordPress站群 管理icp备案网站管理员有负责吗
  • 智慧团建官方网站登录做网站网站的虚拟空间
  • 自己做网站成本推广代理平台
  • wamp搭建多个网站网站设计方面有什么公司
  • 九江集团网站建设app广告对接平台
  • 个人网页网站制作模板搜索引擎营销经典案例
  • 北京自助建站系统思茅区建设局网站
  • 国外被动收入网站做的好的成都网站建设 川icp备
  • 网站的微信推广怎么做php在电子商务网站建设中的应用研究 戴书浩
  • 中山做网站有什么做logo网站
  • 建设网站要什么手续义乌简游网络科技有限公司
  • 深圳做企业网站的音乐网站设计
  • 互联网网站如何做菜鸟教程自学网