进程

  • 进程的组织:PCB + 程序段 + 数据段
  • 所谓创建进程,实质上是创建进程实体中的PCB;而撤销进程,实质上是撤销进程实体中的PCB

PCB

运行中的程序会有一个称为PCB的数据结构,这个数据结构是用来记录当前程序运行的状态信息的,包含内容如下:
image.png

进程的状态

在一个进程的活动期间至少具备三种基本状态,即运行状态、就绪状态、阻塞状态。
image.png

  • 当然还有创建状态、结束状态

进程的转换

image.png

  • 进程无法从阻塞态直接转化为运行态

进程的组织—链接方式

PCB是通过链表组织的,把具有相同状态的进程链在一起,组成各种队列
image.png

  • 为什么采用链表?因为可能面临进程创建,销毁等调度导致进程状态发生变化,所以链表能够更加灵活的插入和删除。

多进程切换

多进程交替运行需要:内存管理+调度+上下文切换

什么时候发生进程切换?

image.png

不能进行进程调度的时刻:

  • 原子操作
  • 中断操作
  • 进程在临界区运行时

内存管理

image.png
当多进程交替时,我们应该考虑内存管理的问题,两个进程之间内存应该是不互相影响的

解决的办法:进程的地址映射

也就是说,进程1的映射表将访问限制在进程1范围内,进程1根本访问不到其他进程的内容。也就是[100]只是逻辑上的地址,其对应一篇内存上的物理地址,即使不同进程间都有逻辑地址100,但其对应的物理空间不同

合作问题:
在处理共享资源时,应该给共享的资源进行上锁。等待该资源被开锁,下一个进程才能使用

上下文切换是对哪些内容?

进程的上下文切换不仅包含了虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的资源。
image.png

上下文切换是什么?

  • 对原来运行进程各种数据的保存
  • 对新的进程各种数据的恢复

触发上下文切换的场景:

  • 调度(时间片or遇到优先级更高的进程)
  • 进程在系统资源不足(比如内存不足)时,要等到资源满足后才可以运行,这个时候进程也会被挂起,并由系统调度其他进程运行;
  • 运行sleep挂起,自然也会重新调度;
  • 发生硬件中断时,CPU 上的进程会被中断挂起,转而执行内核中的中断服务程序;

进程调度算法

常见的调度算法如下:

  • 先来先服务调度算法
  • 最短作业优先调度算法
  • 高响应比优先调度算法
  • 时间片轮转调度算法
  • 最高优先级调度算法
  • 多级反馈队列调度算法

高响应比优先调度算法:

image.png

  • 也叫【响应比】


多级反馈队列调度算法:

  • 「多级」表示有多个队列,每个队列优先级从高到低,同时优先级越高时间片越短。
  • 「反馈」表示如果有新的进程加入优先级高的队列时,立刻停止当前正在运行的进程,转而去运行优先级高的队列;

image.png

  • 设置了多个队列,赋予每个队列不同的优先级,每个队列优先级从高到低,同时优先级越高时间片越短
  • 新的进程会被放入到第一级队列的末尾,按先来先服务的原则排队等待被调度,如果在第一级队列规定的时间片没运行完成,则将其转入到第二级队列的末尾,以此类推,直至完成;
  • 只有当较高优先级的队列为空,才调度较低优先级的队列中的进程运行。如果进程运行时,有新进程进入较高优先级的队列,则停止当前运行的进程并将其移入到原队列的末尾,接着让较高优先级的进程运行;

该算法很好的兼顾了长短作业,同时有较好的响应时间。