首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Operating System 05 - 进程通信

有时进程需要在这些内存区域上执行一些具有原子性操作序列, 其他进程在操作完成前不得访问这些区域, 这就需要一种令该进程阻止其他进程访问这些区域方法, 也就是锁....锁实现需要内存系统支持, 一般是由硬件以特殊指令形式提供支持. 使用锁进程之间必须通力合作: 所有进程必须先获取锁才能访问共享内存区域, 访问结束后还需要将锁归还给其他进程使用....读进程可以根据消息类型有选择接收消息, 而不像FIFO那样只能默认接收. 信号量 他是一个计数器, 用于为多个进程提供共享数据对象访问....共享存储 允许多个进程共享一个给定存储区, 因为数据不需要在进程之间复制, 所以这是一种最快IPC. 需要使用信号量来互斥对共享存储进行访问....多个进程可以将同一个文件映射到他们地址空间从而实现共享内存. 另外XSI共享内存不是使用文件, 而是使用内存匿名段. 套接字 和其他通信机制不同是, 他可用于不同机器间进程通信.

31710
您找到你想要的搜索结果了吗?
是的
没有找到

Operating System 03 - 孤儿进程与僵尸进程

孤儿进程与僵尸进程 孤儿进程 一个父进程退出, 而他一个或者多个子进程还在运行, 那么这些子进程将成为孤儿进程....僵尸进程 一个子进程进程描述符在子进程退出不会释放, 只有当父进程通过wait()或者waitpid()获取了子进程信息后才会释放....如果子进程退出, 而父进程并没有调用wait()或者waitpid(), 那么子进程描述符仍然保存在系统中, 这种进程称之为僵尸进程. 僵尸进程通过ps命令显示出来状态为Z(zombie)....系统所能使用进程号是有限, 如果产生大量僵尸进程, 将因为没有可用进程号而导致系统不能产生新进程....要消灭系统中大量僵尸进程, 只需要将其父进程杀死, 此时僵尸进程就会变为孤儿进程, 从而被init收养, 这样init就会释放掉所有的僵尸进程所占有的资源, 从而结束僵尸进程.

51320

Operating System 01 - 进程同步

进程同步 临界区 对临界资源访问区域被称为临界区....等待信号量大于0. up: 对信号量执行+1操作, 唤醒睡眠进程让其完成down操作. down和up操作需要被设计成原语, 不可分割, 通常做法是在执行这些操作时候屏蔽中断....end; end monitor; 管程有一个重要特性: 在一个时刻只能有一个进程使用管程. 进程在无法继续执行时候不能一直占用管程, 否则其他进程永远不能使用管程....对条件变量执行wait()操作会导致调用进程阻塞, 把管程让出来给另一个进程持有. singal()操作用于唤醒被阻塞进程. monitor ProducerConsumer condition...用一个整型变量count记录在对数据进行读操作进程数量, 一个互斥量countMutex用于对count加锁, 一个互斥量dataMutex用于对读写数据加锁. typedef int semaphore

40410

Operating System 08 - 进程与线程

进程与线程 进程 进程是资源分配基本单元. 进程控制块(Process Control Block, PCB)描述进程基本信息和运行状态, 所谓创建进程和撤销进程, 都是对于PCB操作....线程 线程是独立调度基本单位. 一个进程中可以有多个线程, 他们共享进程资源. 区别 拥有资源 进程是资源分配基本单位, 但是线程不拥有资源, 线程可以访问隶属进程资源....调度 线程是独立调度基本单位, 在同一进程中, 线程切换不会引起进程切换, 从一个进程线程切换到另一个进程线程时会引起进程切换....类似的, 在进行进程切换, 设计当前执行进程CPU环境保存以及新调度进程CPU环境设置, 而线程切换时只需要保存和设置少量寄存器内容, 开销很小....通信方面 进程间通信(IPC)需要进程同步和互斥手段辅助, 以保证数据一致性. 而线程间可以通过直接读/写同一进程数据段(如全局变量)来进行通信.

23510

System|并发|进程线程协程综述

权限隔离 一方面,进程具有自己CPU特权级,因此不同进程所能执行指令和访问地址不同。 另一方面,进程拥有自己capability(file descriptor),决定能访问内核对象及权限。...模块化: 数据库单独在一个进程中,可以被复用 加速计算: 不同进程专注于特定计算任务,性能更好 信息共享: 直接共享已经计算好数据,避免重复计算 两个(或多个)不同进程,通过内核或其他共享资源进行通信...确切来说,包含进程间同步和进程间通信 ---- 线程 进程开销是重量级。 从时间角度: 进程之间存在页表隔离,必须通过IPC通信,经过内核态。...进程切换后缓存失效,访存速度严重下降 切换上下文操作复杂,需要改变寄存器多 从空间角度: 每个进程都需要独立地址空间,无法复用代码、数据段。 进程PCB存在和权限有关数据,冗余。...线程结构体存在于内核中,在pthread_create时需要进入内核态,频繁创建开销大 从空间角度: 线程栈空间通常在MB级别,而服务器往往只是无状态地转发,并不需要这么大栈空间 线程利用TCB存储上下文和调度状态

31720

Linux进程间通信之System V

信号量: 信号量相关概念: 信号量数据结构: 信号量集创建: 信号量集删除: 信号量集操作: 进程互斥 认识system V: 对于进程间通信,想必管道大家再熟悉不过了,对于管道这种通信方式...,其实是对底层代码一种复用,linux工程师借助类似文件缓冲区内存空间实现了管道,其实也算偷了一个小懒,随着linux发展,linux正式推出了System V来专门进行进程间通信,它和管道本质都是一样...system V通信3种通信方式: 1.system V共享内存 () 2.system V消息队列 () 3.system V信号量 () 上述中共享内存和消息队列主要用于传输数据,而信号量则是用于保证进程同步与互斥...system V共享内存: 共享内存基本原理: 之前说到了通信原理都是让不同进程看到同一份资源,共享内存让进程看到同一份资源方法就是,在物理内存中申请一块空间,名为共享内存,然后让这块空间与需要通信进程页表建立映射...system信号量: 信号量相关概念: 由于进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程这种关系叫做进程互斥。

7310

关于System V进程通信内核对象删除

System v ipc缺点: 当进程结束时,不会自动删除进程通信内核对象,并且能够使用ipcs命令查看内核对象,如下: 由于进程通信内核对象也属于操作系统资源,如果长期占用并且不使用确实是对操作系统资源浪费...,因此对于不再使用进程通信内核对象应当及时删除,那么如何删除呢?...(2)当进程使用完毕后,调用相应系统API进行删除,当然这里需要注意是调用时机,必须是使用完成后。...(3)使用ipcs命令,是相对简单可行方法: (1)删除消息队列 ipcrm -Q key //按照key删除 ipcrm -q msgid //按照msgid删除 (2)删除共享内存...//按照标识符删除 (3)删除信号量 ipcrm -S key //按照key删除 ipcrm -s msgid //按照标识符删除 举例分别按key删除和按msgid删除消息队列过程

28820

进程通信(二)消息队列(System V 消息队列)

一、System V 消息队列简介 消息队列:消息队列本质是由Linux内核创建用于存放消息链表,并且其功能是用来存放消息,所以又称之为消息队列。...在Linux不同进程中,包括有血缘进程和无血缘进程,都可以通过Linux消息队列API所得到消息队列唯一标识符对消息队列进行操作。...int msg_lspid; //最近一次向消息队列发送消息进程pid int msg_lrpid; //最近一次从消息队列接受消息进程pid }; 消息队列节点结构: struct msg...2.进程通信》 key值指定: (1)指定为IPC_PRIVATE,每次调用msgget都会创建一个新消息队列,这样开销比较大,一般情况下, 只需要一个消息队列即可,因此此方法不建议使用。...msgctl 4.int msgctl(int msqid, int cmd, struct msqid_ds* buff); msgctl接口可以使得进程在msqid所标识消息队列上进行各种控制操作

2.4K20

Nginx服务器进程

Nginx服务器进程有3类:主进程、工作进程、缓存进程 (1)主进程 Nginx启动时运行主要进程,主要功能是与外界通信和对内部其他进程进行管理 主要工作内容 1)读取配置文件,验证有效性和正确性...2)建立、绑定、关闭 socket 3)按照配置生成、管理、结束工作进程 4)接收指令,如 重启、升级、退出 5)不中断服务,平滑重启、升级,升级失败回滚处理 6)开启日志文件,获取文件描述符 (2)...工作进程 由主进程生成,生成数量由配置文件指定,工作进程生存于主进程整个生命周期 主要工作内容 1)接收请求 2)将请求依次送入各个功能模块进行过滤处理 3)IO调用,获取响应数据 4)与后端服务器通信...,接收后端服务器处理结果 5)数据缓存,访问缓存索引、查询、调用缓存数据 6)发送请求结果 7)接收主进程指令,如 重启、升级、退出 (3)缓存进程 缓存进程有两类 1)缓存索引重建进程 nginx启动后由主进程生成...,在缓存元数据重建完成后就自动退出 该进程启动后,对缓存文件目录结构扫描,在内存中建立索引元数据库 2)缓存索引管理进程 生存于主进程整个生命周期 负责在索引元数据更新完成后,对元数据是否过期进行判断

4.4K40

进程服务器

一、思路 先与客户端建立好连接, 每次监听到一个客户端之后,都需要产生一个子进程去处理这个连接,然后父进程继续去等待监听,唯一一个要注意点就是要使用信号来监听子进程是否结束,从而对其进行回收,防止僵尸进程产生...&opt, sizeof(opt)); (3)bind函数 bind(lfd, (struct sockaddr*)&ser_addr, sizeof(ser_addr));b这个函数主要目的就是将服务器地址结构绑定到套接字...lfd上,所以开始要设置服务器ser_addr:ser_addr.sin_family = AF_INET, ser_addr.sin_port = htons(8888);ser_addr.sin_addr.s_addr...= htonl(INADDR_ANY);端口8888是可由自己设置,, (3)listen函数 设置监听上限函数,,并不是阻塞监听函数listen(lfd, 128); (4)accept函数...cfd; 2、创建子进程 监听到了客户端后,就要开始创建子进程来对这个监听进行处理;pid = fork() 3、子进程处理通信 因为子进程不需要监听连接,使用可以close(lfd);之后便可以进行通信处理

4.7K20

从并发处理谈PHP进程间通信(二)System V IPC

,而 PHP 对应则是一族对 UNIX SYSTEM V包装函数,包括信号量(semaphore)、共享内存(shared memory)和消息队列(msg queue)操作。...Unix System V IPC 信号量 信号量又称为信号灯,它是用来协调不同进程数据对象,而最主要应用是共享内存方式进程间通信。...到于共享内存,我们一定要关心其生存周期:System V 共享内存区域对象是随内核持续,除非显式删除共享内存区域对象,即使所有访问共享内存区域对象进程都已经正常结束,共享内存区域对象仍然在内核中存在...函数介绍 ftok int ftok ( string $pathname, string $proj ) ftok将一个路径 pathname 和一个项目名(必须为一个字符), 转化成一个整数形 System...V IPC 键,本文介绍 System V 通信方式都是基于此键来完成,此ID 值也可以自己指定一个 INT 型来确定,不必要使用 ftok 获取; 需要注意是:ftok 结果是通过文档索引节点号来计算获取

1.1K80

Linux服务器进程查看命令详解

Linux 服务器正常启动后,提供服务时会调用程序,占用进程。这时候我们如何查看系统中有哪些进程在被调用呢?我们可以通过以下命令来查看。...通过 ps 命令查看进程,根据所显示信息可以了解哪个进程正在运行、哪个进程被挂起了、进程已运行了多久、进程正在使用资源、进程相对优先级,以及进程标志号(PID)。...SMar16  0:06 nginx: worker process 二、top 命令 top 命令可动态显示服务器进程信息。top 命令和 ps 命令基本作用是相同,都显示系统当前进程状况。...另外,大家有兴趣也可以了解一下 pkill 用法,在服务器里用它来“踢人”还是很方便,这个命令在工作中我们用得不多,大家稍微了解一下即可。...在 Linux 下,最强大进程管理命令莫过于 ps 和 top 了,我们应该掌握它们详细语法,在工作中灵活地使用它们。 注:以上内容整理自《构建高可用 Linux 服务器》一书。

21.9K101

linux系统编程之进程(三):exec系列函数和system函数

一、exec替换进程映象 在进程创建上Unix采用了一个独特方法,它将进程创建与加载一个新进程映象分离。这样好处是有更多余地对两种操作进行管理。...当我们创建 了一个进程之后,通常将子进程替换成新进程映象,这可以用exec系列函数来进行。当然,exec系列函数也可以将当前进程替换掉。...三、system函数 功能:system()函数调用“/bin/sh -c command”执行特定命令,阻塞当前进程直到command命令执行完毕 原型:  int system(const char...*command); 返回值:     如果无法启动shell运行命令,system将返回127;出现不能执行system调用其他错误时返回-1。...如果system能够顺利执行,返回那个命令退出 码。system函数执行时,会调用fork、execve、waitpid等函数。

2.1K60

php进程(线程)通信基础之System V共享内存简单实例分析

本文实例讲述了php进程(线程)通信基础之System V共享内存。...分享给大家供大家参考,具体如下: PHP默认情况没有开启功能,要支持该功能在编译PHP时候要加入下面几个选项 System V消息,–enable-sysvmsg System V信号量支持,–enable-sysvsem...System V共享内存支持,–enable-sysvshm PHP还挺shmop共享内存,在编译时候开启 –enable-shmop System V共享内存相关函数: 1: 创建信号量唯一标识符...$ftok = ftok(__FILE__, 'a'); 2: 创建共享内存端 $id = shm_attach ( $ftok, 1000 , 0666 ) 3: 断开与共享内存段连接 shm_detach...更多关于PHP相关内容感兴趣读者可查看本站专题:《PHP进程与线程操作技巧总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string

52331

【Linux】system V进程间通信——共享内存、消息队列、信号量

system V IPC提供通信方式有三种: 共享内存、消息队列、信号量;并且生命周期是随OS,而不是随进程,这是所有System V进程间通信共性` 一、共享内存 1.共享内存基本原理...对于共享内存理解: 对比以前C语言malloc也可以在物理内存申请空间,并把开辟好空间经过页表映射到进程地址空间当中 但是system V进程间通信是专门设计,用来IPC;共享内存是一种通信方式...On failure -1 is returned, with errno indicating the error as for the stat(2) system call. ftok作用是通过存在路径名...,文件描述符就会自动释放,但是对于共享内存不一样:共享内存生命周期是随OS,而不是随进程,这是所有System V进程间通信共性, 查看共享内存:ipcs -m 删除:ipcsrm -m +...共享内存生命周期是随OS,而不是随进程,这是所有System V进程间通信共性 优点:共享内存是所有进程间通信速度是最快,因为共享内存是被双方所共享,只要写入对方就能立即看到,能大大减少数据拷贝次数

29120

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券