ch3_1_多进程的概念

1. CPU 的管理

CPU的工作原理:
从内存中取出程序的指令, 执行程序中的指令;

1.1 多道程序

假设A 程序运行时, 遇到 IO 处理时, 为了能够执行A 程序的后续指令, 正常情况下 cpu 需要等待着IO 处理完成, 而这个等待的期间 CPU 是闲置着,

为了提高cpu 的利用率,

同时运行程序A 和程序B,

当程序A 需要处理 IO时, 此时,跳出程序A, 去执行程序B, 这样CPU 就不需要等待着, 从而可以继续执行 指令;

1.2 进程的概念

当一个程序运行起来时, 其中包含了多个信息,比方运行到某个时间节点时, 该程序中多个寄存器的数值。

为了区别 运行中的程序和 静态程序,

将运行中的程序 定义为 进程, 即进行中的程序。

1.3 进程五种基本状态

在这里插入图片描述

  • 创建状态:进程在创建时需要申请一个空白PCB,向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态

  • 就绪状态:进程已经准备好,已分配到所需资源,只要分配到CPU就能够立即运行

  • 执行状态:进程处于就绪状态被调度后,进程进入执行状态

  • 阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用

  • 终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行。

如果进程运行时间片使用完也会进入就绪状态。
另外为用户观察需要,进程还有挂起和激活两种操作。挂起后进程处于静止状态进程不再被系统调用,对于操作是激活操作。

1.4 PCB 的作用

然而多道程序并发, 这样引出另外一个问题,

当cpu 从程序B 返回到 程序A 继续执行时, 应该从 程序A 的何处地方开始执行?

这就需要,当CPU从 程序A 切换出去时, 需要保存当时程序A运行的现场信息,
比如CPU 跳出时, 运行到程序A 哪个地址了, 此时程序A 中所对应的各个寄存器存放的数值为多少;

为了将 一个运行中的程序所包含的上述信息保存起来,引入了PCB的概念, 即将上述信息存放在 PCB 的数据结构中。

1.5 小结

当CPU 只执行一个 程序时, 遇到IO 处理的任务时, 此时,CPU会闲置等待着,

所以, 为了提高 CPU的利用率, CPU 同时执行 多个 程序,
从而引入 进程, PCB 数据结构 这两个重要的概念;

2. os 管理多个进程

多个进程所对应的PCB 放在不同的地方, 操作系统都知道。

2.1. 多个进程如何组织:

根据进程的 PCB, 状态, 形成不同的队列,放在不同的位置。

使用进程控制模块 PCB, process control block, 来表示多个进程, 然后将PCB 放在不同的队列中,用状态来推进这多个进程。

在这里插入图片描述

2.2 多个进程之间如何切换

调度,选择下一个进程。
假设这样的场景:

某一个进程A 启动 磁盘读写了, 此时,CPU就会等待,

  1. 将此时进程A 的状态设置为 阻塞态;

  2. 将进程A 对应的PCB 放到一个 磁盘等待阻塞队列中。

调用 schedule() 函数, 在就绪队列中进行切换,则CPU 就会切换到其他进程B;

在这里插入图片描述

切换过程中, 需要将进程A的现场信息 保存到PCB中, 从进程B的PCB 中恢复现场出来, 具体实现;

保存进程A的现场: 便是将进程A ,此时CPU中对应的寄存器中的数值, 存放到进程A对应的PCB中。

恢复进程B的现场: 将进程B中,原始保存在PCB中的寄存器的数值 存入到 现在的CPU 寄存器中。

由于上述的操作,涉及到对CPU 中的寄存器进行操作, 所以需要使用汇编语言进行精细的控制

那么切换到另外一个进程B时, 而就绪队列中,有多个进程, 应该选取哪个进程做为下一个进程呢?

这是 涉及到调度算法。

2.3 多进程在内存中共存

为了让进程之间的 在内存中的 物理地址 互不影响,所以需要使用内存管理中的与进程相关的映射表。

由于不同的进程都是存放在内存中, 会遇到这样的问题,进程A 中 操作的内存地址, 同时也是进程B 中操作的内存地址, 则此时进程A 的操作 会影响到进程B;

为了将多进程的各自对应的地址空间 进行隔离,互不干扰。

内存管理 提供这一功能,

使得不同的进程 有对应各自不同的映射表;

在这里插入图片描述

即进程1的 地址100, 通过映射表, 映射到物理内存时是780;

进程2的地址100, 通过映射表2, 映射到物理内存时, 是1260;

3. 多进程之间何时切换

3.1 生产进程与消费进程

此时,
打印任务便是 生产进程;

打印进程 便是 消费进程;
在这里插入图片描述
由于生产者 和消费者的关系,
生产者进程会往共享空间中 写数据,
与此同时,消费者进程会往共享空间中 取数据。

在这里插入图片描述

3.2 进程之间的共享数据

由于多个进程之间会存在共享数据,

而进程又是在来回切换的,
在进程之间 切换执行的过程中, 为了保持 共享数据存储正确的数值;
在这里插入图片描述

3.3 进程的上锁

在进程A 执行到关键指令时, 这些指令会涉及共享数据;

在这段时间中, 应该给进程A 上锁

  1. 上锁后的进程A , 此时CPU 会继续执行进程A, 即此时CPU 被进程A继续占用着。

  2. 与此同时,其他进程不能够使用CPU, CPU 也不能够切换到其他进程。

  3. 直到进程A 被解锁。

在这里插入图片描述

4. 进程后续内容

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值