IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 操作系统OS学习笔记(4)进程(阻塞唤醒、进程通信) -> 正文阅读

[网络协议]操作系统OS学习笔记(4)进程(阻塞唤醒、进程通信)

进程的阻塞与唤醒

引起进程阻塞和唤醒的事件:

  1. 向系统申请资源时失败。如一个进程(A)申请打印机但是此时打印机被其他进程(B)正在使用,此时A进程则处于阻塞状态。
  2. 等待某种操作的完成:进程A启动了某I/O设备,如果只有完成了指定的I/o任务后进程A才能执行,则进程A启动了I/O设备后会自动进入阻塞。
  3. 新数据尚未到达:对于相互合作的进程,如果一个进程需要先获得另一个进程的数据后才能对该数据进行处理,只要数据尚未到达其便会进入阻塞状态。
  4. 等待新任务的到达:每当这种进程完成自己的任务便把自己阻塞起来,等待新任务到达,才将其唤醒。

进程阻塞的过程:正在执行的进程,如果遇到上面阻塞的事件后

  • 进程调用阻塞原语(block)将自己阻塞(阻塞是进程自身的一种主动行为)
  • 将正在运行的进程立即停止运行
  • 把PCB中进程状态信息改为阻塞
  • 将PCB插入阻塞队列
    • 如果系统设置了不同阻塞原因的队列,则应将其插入到对应原因引起的阻塞队列中。

进程唤醒的过程:当被阻塞进程所期待的事件发生时

  • 则有关的进程会调用唤醒原语(wakeup
  • 将等待的进程唤醒
    • 首先把阻塞的进程从阻塞队列中移除,将其PCB中的先行状态由阻塞改为就绪
    • 然后再将其PCB插入就绪队列中

进程通信

由于进程的互斥与同步,需要在进程间交换一定的信息,故称进程通信。但通过进程交换信息是一种低级进程通信,以信号量机制为例,原因如下:

  • 效率低。生产者每次只能向缓冲区投放一个产品(消息) ,消费者每次只能从缓冲区中得到一个消息。
  • 通信对用户不透明。OS为进程间通信提供了共享存储器。而关于进程间通信所需之共享数据结构的设置、数据的传送、进程的互斥与同步,都必须由程序员去实现。

进程通信的类型

  1. 共享存储器系统(shared-memory system)
    在共享存储器系统中,相互通信的进程共享某些数据结构或贡献存储区,进程间通过这些空间进行通信。

    • 基于共享数据结构的通信方式
      • 在这种通信方式中,要求各个进程公用某些数据结构,借以实现各个进程间的信息交换。
      • 这种通信方式仅适用于传递相对少量的数据,通信效率低下,属于低级通信
    • 基于共享存储区的通信方式
      • 为了传输大量数据,在内存中划出了一块共享存储区域,各个进程可通过对该共享区的读或写交换信息,实现通信,数据形式和位置甚至访问控制都是由进程负责,而不是OS。
      • 属于高级通信,需要通信的进程在进程通信前,先向系统申请获得共享存储区中的一个分区,并将其附加到自己的自己的地址空间中,便可对其中的数据进行正常读写,读写完或者不在需要时,将其归还给共享存储区,完成数据通信。
  2. 管道(pipe)通信系统

所谓“管道”,是指用于连接一个读进程和一个写进程以实现他们之间通信的一个文件,又名pipe文件。
向管道(共享文件)提供输入的发送进程(即写进程)以字符流形式将大量数据送入管道,而接受管道输出的接受进程(即读进程)则从管道中接受数据。由于发送进程和接受进程都是利用管道通信的,故又称管道通信。
三方面的协调能力:

  • 互斥,当一个进程正在对管道进行读/写操作时,其他进程必须等待
  • 同步,当写进程把一定数量的数据写入管道,便去睡眠(等待),当直到读进程取走数据后再把他唤醒。当读进程读一个空管道时,也应睡眠(等待),直至写进程将数据写入管道后才将之唤醒。
  • 确定对方是否存在,只有确定对方已存在才通信。
  1. 消息传递系统

该方式隐藏了通信实现细节,使通信过程对用户透明化,降低了通信程序设计的复杂性和错误率。

  • 直接通信方式,是指发送进程利用OS所提供的发送原语,直接把消息发送给目标进程
  • 间接通信方式,是指发送和接受进程,都通过共享中间实体(称为邮箱)的方式进行消息的发送和接收,完成进程间的通信。
  1. 客户机-服务器系统

其主要实现方法分为三类:套接字远程过程调用远程方法调用

  • 套接字
    一个套接字就是一个通信标识类型的数据结构,包含了通信目的地址、通信使用端口号、通信网络的传输层协议、进程所在的网络地址、以及针对客户或服务器程序提供的不同系统调用,是进程通信和网络通信的基本构件。

    • 套接字的优势在于,它不仅适用于同一台计算机内部的进程通信,也适用于网络环境中不同计算机的进程通信。
      套接字包括两类
      • 基于文件型
      • 基于网络型
  • 远程过程调用和远程方法调用

    • 远程过程(函数)调用RPC(Remote Produce Call),是一个通信协议,用于通过网络连接的系统。该协议允许运行于一台主机(本地)系统上的进程调用另一台主机(远程)系统上的进程。

    • 需要特别说明的是,如果涉及的软件采用面向对象编程,那么远程过程调用亦可以称作远程方法调用

负责处理远程过程调用的进程——网络守护进程:主要负责在网络间的消息传递,一般情况下,这两个进程都是处于阻塞状态,等待消息。

  • 本地客户进程
  • 远程服务进程
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 22:34:38  更:2022-03-11 22:36:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:32:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码