操作系统之提升篇-(2)进程同步

  • 目录

    信号量

    共享内存

    Unix域套接字


  • 信号量

  • 信号量可以说是进化版的互斥量
  • 信号量代表这个资源是互斥的
  • 信号量是一个与队列有关的整型变量,你可以把它想象成一个数后面拖着一条排队的队列
  • 能记录资源的数量,等待资源的进程数,等待资源的进程阻塞队列在哪
  • n>0:当前有可用资源,可用资源数量为n
  • n=0:资源都被占用,可用资源数量为0
  • n<0:资源都被占用,并且还有n个进程正在排队那信号量拖着的那个队列就是用来放正在排队想要使用这一资源的进程
  • 比如信号量S=9代表资源目前还有9个,没有进程阻塞;
  • S=-3代表资源已经都被占用,且阻塞队列中等待资源的进程有3个
  • 共享内存

  • 为何用共享内存
  • 每个进程都有自己的进程空间
  • 进程空间通过页表、通过段页式存储管理与实际的物理内存建立起映射
  • 因此,在某种程度上,多进程是共同使用物理内存的
  • 但是由于操作系统的进程管理,进程间的内存空间是独立的;也就是进程1,2它们逻辑上的内存空间是完全没有联系的,保证了每个进程独立运行时的安全性
  • 进程之间,进程空间互不干扰,相互独立
  • 进程默认是不能访问进程空间之外的内存空间的,也就是说一个进程不能访问另外一个进程的进程空间
  • 而共享内存则能打破这个限制
  • 通过共享内存,进程就可以通过页表来映射到同样的一个内存里去
  • 这个内存既可以被进程1使用,也能被进程2使用,2者都能读写
  • 通过共享内存,进程之间就建立了联系
  • 共享内存简要
  • 共享存储允许不相关的进程访问同一片物理内存
  • 共享内存是两个进程之间共享和传递数据最快的方式
  • 共享内存未提供同步机制,需要借助其它机制管理访问
  • 共享内存是高性能后台开发中最常用的进程同步方式
  • 使用共享内存步骤
  • 1.申请共享内存
  • 2.连接到进程空间
  • 3.使用共享内存
  • 4.脱离进程空间&删除
  • Unix域套接字

  • 域套接字是一种高级的进程间通信的方法
  • Unix域套接字可以用于同一机器进程间通信
  • 套接字原是网络通信中使用的术语
  • Unix系统提供的域套接字提供了网络套接字类似的功能
  • 共享内存需要额外的同步机制来同步多个进程间的通信
  • Unix域套接字则不需要额外的机制来保证多个进程间访问的问题
  • 服务端使用域套接字过程
  • 1.创建套接字
  • 2.绑定套接字
  • 3.监听套接字(监听是否有请求进来)
  • 4.接受&处理信息
  • 客户端使用域套接字过程
  • 1.创建套接字
  • 2.连接套接字
  • 3.发送信息
  • 提供了单机简单可靠的进程通信同步服务
  • 只能在单机使用,不能跨机器使用

猜你喜欢

转载自blog.csdn.net/weixin_59624686/article/details/125090659