• 初步了解进程、进程调度的基本属性、进程间通信


    目录

    一、什么是进程?

    1、什么是程序?

    2、什么是进程控制块(PCB)?

    3、什么是进程实体(进程映像)?

     4、什么是进程?

    4.1、进程的五种基本状态:

    4.2、 进程的执行周期

    4.3、并发和并行 

    二、为了实现进程调度的一些基本属性

    状态

    优先级

    记账信息

    上下文

    所谓的调度就是进行时间管理

    三、进程间通信

    进程通信的方式分类:

    第一种:共享存储。

    第二种进程通信方式:消息传递。

     第三种通信方式:管道通信


    一、什么是进程?

    1、什么是程序?

    • 程序就是一个指令序列

    2、什么是进程控制块(PCB)?

    • 系统为每个运行的程序排至一个数据结构,称为进程控制块 (PCB——progress control block)
    • 里面有进程的寄存器、进程编号、内存界限、程序计数器等

    3、什么是进程实体(进程映像)?

    • PCB、程序段、数据段三部分构成进程实体
    • PCB:内存中存储,记录进程生存周期内状态变化的存储区域。不同操作系统有不同的进程控制块格式和信息,但基本包括进程标识符,当前状态,现场保护区,存储指针,占用资源表以及进程优先级等信息。它是进程存在的唯一标志。
    • 程序段:描述进程本身要完成的功能
    • 数据段:程序加工的对象和场所

     4、什么是进程?

    • 进程是进程实体的运行过程,是系统进行资源和资源调度的一个独立单位
    • 进程并不等同于进程实体,进程实体是静态的,进程是动态的

    4.1、进程的五种基本状态:

    创建态:进程正在被创建,系统为其初始化PCB,分配资源。

    运行态:占有cpu,并且就在cpu上执行。

    就绪态:已经具备运行条件,但由于没有空闲cpu,而暂时不能运行。(也就是cpu没有调度到它)

    阻塞态:因等待某一事件而不能运行。

    终止态:进程正在从系统中撤销,回收进程的资源,撤销其PCB。

    图示:

    注:

    • 就绪态通过进程调度可以变为运行态,运行态通过中断变为就绪态,运行态通过io请求等待事件进入阻塞态,阻塞态被唤醒,即等待事件结束,就变为了就绪态。
    • 不能由阻塞态直接转换为运行态,也不能由就绪态直接转换为阻塞态
    • 运行态——>阻塞态是一种进程自身做出的主动行为

    4.2、 进程的执行周期

    为了管理进程,系统会先创建一个PCB,PCB被创建后,会做以下五项工作:

    1. 标记进程身份:为每个进程创建一个pid,用于区分不同的进程;
    2. 标记进程状态:运行、阻碍、就绪等状态;
    3. 存储进程的内存指针;
    4. 为进程创建描述符表;
    5. 记录进程的调度信息:如执行了多少行代码,等待了多久等;

    4.3、并发和并行 

    • 系统以时间片轮转的方式“同时”执行多个进程的情况,我们把它叫做并发;
    • 随着计算机硬件水平的飞速发展,如今的计算机不再是单一核心的CPU,多核心的好处就是每一个核心都能执行一个进程,所以一个CPU可以同时执行多个进程,我们把这种情况叫做并行;

    二、为了实现进程调度的一些基本属性

    状态

    这个状态描述了当前这个进程接下来应当怎么调度

    就是上述的五种基本状态

    优先级

    先给谁分配时间,后给谁分配时间

    以及给谁分的多,给谁分的少

    记账信息

    统计了每个进程,都分别执行了多久,分别执行了哪些指令

    分别都排队等了多久

    进程调度是供指导依据的

    上下文

    就表示了上次进程被调度出CPU的时候,当时程序的执行状态

    下次进程上CPU的时候,要可以恢复之前的状态,然后继续执行下去。

    进程呗调度出CPU之前,要先把cpu中的所有寄存器中的数据都给保存到内存中

    详单与存档了

    下次进程再被调度上CPU的时候,就可以从刚才的内存中恢复这些数据到寄存器中

    相当于读档

    存档+读档----

    所谓的调度就是进行时间管理

    进程的调度,其实就是系统在考虑CPU资源如何给各个进程分配~

    由于操作系统上,同时进行多个进程

    如果某个进程,出现BUG,进程崩溃了,是否影响其他进程呢?

    依靠“进程的独立性”来保证,依靠“虚拟地址空间'

    进程之间现在通过虚拟地址空间,已经各自隔离开了

    但实际工作中进程之间的的时候还是需要相互交互的。

    三、进程间通信

            进程是操作系统进行资源分配的最小单位,这意味着各个进程互相之间是无法感受到对方存
    在的,这就是操作系统抽象出进程这一概念的初衷,这样便带来了进程之间互相具备 隔离性
    Isolation )”
            要完成一个复杂的业务需求,往往无法通过一个进程独立完成,总是需要进程和进程进
    行配合地达到应用的目的,因此,进程之间就需要有进行 信息交换 的需求。因此就产生了进程间
    通信。

    进程通信的方式分类:

    第一种:共享存储。

            共享存储就是操作系统另外分配一个内存区域用于进程间的通信,这就是共享空间,两个进程都可以访问这个共享空间,但是两个进程对共享空间的访问必须是互斥的,即同一时间段只能有一个进程访问这个空间。

    然后共享存储又分为基于数据结构的共享和基于存储区的共享

    1. 基于数据结构的共享:比如它的共享空间只能放一个长度为10的数组,数据量比较小,存储的数据形式也有限制。所以这种方式速度慢,限制多, 是一种低级通信
    2. 基于存储区的共享:此时操作系统只负责提供内存,然后由进程来控制数据的形式和存放位置。所以这种方式速度更快,是一种高级的共享方式。

    第二种进程通信方式:消息传递。

            进程间的数据交换以格式化的消息为单位,进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。也就是说:一个进程调用“发送原语"这个api就可以把消息发送出去,通过”接收原语“就能取出消息。

            一个消息包括消息头和消息体,消息头包括:发送进程的id,接收进程id,消息类型,消息长度等格式化的消息(计算机网络中发送的”报文“其实就是一种格式化的消息)。而消息体就是消息内容了。

    消息传递又包括两种通信方式:直接通信方式和间接通信方式

    1.  直接通信方式:消息直接挂到接收进程的消息缓冲队列上。也就是说,每个进程都有一个消息缓存队列。当进程A要给进程B通信,就先调用发送原语,把消息发送到进程B的消息缓存队列当中,然后进程B会调用接收原语,从自己的消息缓存队列当中取出消息。
    2. 间接通信方式:消息要先发送到中间实体(信箱)中,因此也称信箱通信方式,比如计算机网络中的电子邮箱系统。这就类似于,有一个中间部门专门管理这些信息,每个进程发送消息都是发送到这里,每个进程接收消息都是从这里取出。因为有消息头的目的进程id等信息,所以这一切都可以实现。

     第三种通信方式:管道通信

            管道:是指用于连接读写进程的一个共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的缓冲区。它的大小一般是和系统的内存页面大小一样,比如linux默认的内存页面大小是4kb,所以linux的管道大小也是4kb.

    1.管道是才有半双工通信,简单说就是同一时间只能实现单向传输,要实现双向同时通信,则需要两个管道。

    2.各进程要互斥地访问管道。

    3.数据以字符流的形式写入管道,当管道写满时,写进程的write()系统调用将被阻塞,等待进程将数据读走。当都进程将数据全部取走后,管道变空,此时读进程的read()系统调用将被阻塞。

    4.如果没写满,就不会允许读。如果没读空,就不允许写。

    5.数据一旦被读出,就会从管道中抛弃,这就意味着读进程最多只能有一个,否则可能会有读错数据的情况。

    目前,主流操作系统提供的进程通信机制有如下:
    1. 管道
    2. 共享内存
    3. 文件
    4. 网络
    5. 信号量
    6. 信号
             其中,网络是一种相对特殊的 IPC 机制,它除了支持同主机两个进程间通信,还支持同一网络内部非同 一主机上的进程间进行通信。

  • 相关阅读:
    伊朗相关的OilRig组织在为期8个月的网络攻击中针对中东政府
    动画原理总结
    冒泡排序及其优化
    国民技术 N32G45x 串口踩坑
    Elasticsearch6.8.12启动常见问题
    基于单片机的太阳能热水器控制系统设计与仿真
    剑指offer-栈总结
    C/C++内存管理
    C#位运算符
    学习笔记--强化学习(1)
  • 原文地址:https://blog.csdn.net/LYJbao/article/details/126556425