李治军操作系统学习(四)——多进程图像


前言

多进程是操作系统的核心功能,操作系统在管理CPU时引进了多进程图像,因而应当知道操作系统如何管理CPU。


一、操作系统如何管理CPU

1. 如何使用CPU

给PC寄存器设置好初值,CPU会自动地取指执行。

因而管理CPU的直观方法是设置好PC的初值。

  • 问题:若只靠更改PC来管理CPU,由于IO操作耗费时间很长,而计算操作耗费时间很短,CPU在进行IO操作时等待,会浪费大量的时间,导致CPU利用率极低。

解决方法:多道程序交替执行。将多个程序读入内存,当一个程序进入IO操作时,CPU就切换到另一个程序去执行。

一个CPU上交替地执行多个程序称为并发

2. 如何做到并发

要执行另一个程序时切换PC,且同时保存原程序的相关信息。每个程序有一个存放信息的结构:PCB。

因而运行着的程序和静态的程序不一样了,运行着的程序需要在CPU切换至另一个程序时记录切换前一个瞬间的运行信息,而静态程序只是在硬盘里放着。将运行时的程序称为进程

  • 进程有开始,有结束,程序没有;
  • 进程会走走停停,而走停对程序无意义;
  • 进程需要记录寄存器信息,而程序不用;

3. CPU管理的核心模式

多进程管理,操作系统启动多个进程,管理好CPU让其能运行多个进程。


二、多进程图像

1.多个进程使用CPU的图像

  • 如何使用CPU?

让程序执行起来

  • 如何充分利用CPU?

启动多个程序,交替执行

  • 启动了的程序就是进程,所以是多个进程推进

操作系统需要把进程记录好,按照合理的次序推进(分配资源、进行调度)

上述为多进程图像

在这里插入图片描述
操作系统初始化完之后执行了main.c,main.c的最后用fork()创建了第一个进程,这个进程就是shell或者windows桌面。通过shell/桌面可以再启动其他进程。也就是说,操作系统管理计算机就是管理一堆进程。

2.多进程如何组织

在这里插入图片描述
操作系统通过PCB来感知和组织进程,用PCB形成数据结构来组织多进程。从上图看出进程有主要有三种状态,有一个进程正在执行;有一些进程准备就绪等待执行;有的进程在等待事件完成,处于等待状态。

多个进程所对应的PCB放在不同的位置的数据结构中,操作系统操作这些数据结构管理PCB,进而管理进程。

在这里插入图片描述
进程状态图展示了操作系统通过改变进程的状态,推动进程的进行,实现对进程的管理。

因而多进程的组织:PCB+状态+队列。OS通过PCB组织进程,通过进程的状态变换来推进进程。

3. 多进程如何交替

进程的交替是实现多进程的关键

在这里插入图片描述
交替过程以上图为例,启动磁盘读写后,当前进程的状态切换为阻塞态,将当前进程放在磁盘阻塞队列上,用schedule()切换进程。切换之前从就绪队列中找到下一个进程,最后进行进程的切换,保存当前进程的执行现场,恢复下个进程的执行现场。pCur和pNew是PCB。

  • 如何找到下一个要执行的进程?也称为如何进行进程调度

简单的想法是先来先服务,也可对进程设置优先级。

  • 如何切换进程?

在这里插入图片描述
将物理CPU的寄存器信息保存在当前进程PCB的结构体中,再将下一进程PCB结构体中的信息放入CPU寄存器中,这样的操作需要汇编实现。

4. 多进程之间的相互影响

多个进程同时在内存中时会出现问题,如下图。

在这里插入图片描述
进程1要改写地址100处的数据,而地址100处的数据属于进程2,若进程1改写成功,可能会导致进程2的崩溃。

  • 可以改变进程2的DPL吗?

不行,DPL、CPL是用来保护操作系统内核的,是用于内核态的,而进程1和进程2均位于用户态,因而进程1的CPL为3,进程2的DPL也为3.

解决办法:映射表(内存管理)

在这里插入图片描述
每个进程都有一个映射表,进程1的地址100对应物理内存的地址780,而进程2的地址100对应物理内存的地址1260。两个进程的地址因此可以不冲突,就实现了不同进程内存地址空间的分离。只有多个进程能在内存中共存,才能实现多进程。

5. 多进程之间的合作

在这里插入图片描述
以生产者-消费者为例来说明进程之间的合作可能出现的问题。生产者进程会在共享数据不满时不断向其中写入数据,每次写入数据会让counter++;消费者进程会在共享数据非空时不断从中取数据,每次取出数据会让counter–。因而counter是判断共享数据是空还是满的重要数据。

在这里插入图片描述

两个进程都要修改counter,而计算机会在进程执行的中途切换出去,因而一个可能的执行队列如上图所示,最终的结果是使counter等于4,而counter的正确数值应该为5.

在这里插入图片描述
因而需要有一种机制使计算机能合理地推进进程的进行。在写counter时给counter上锁,阻断其他进程访问counter。在生产者进程访问counter时,要给counter上锁,当消费者进程访问counter时会检查counter锁,有锁则操作系统禁止CPU切换进程,生产者进程执行完语句,给counter开锁,CPU就可以切换到消费者进程。

总结

在这里插入图片描述
操作系统通过PCB感知进程,操作系统若想支持多进程,则必须做到上述这些事情。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值