8.4 进程控制

进程控制

进程的控制结构

要对进程进行控制,首先就要对进程进行识别,进程本身也应该有其自身的结构

其实,操作系统本身就是一个程序,有一句经典的话:程序 = 算法 + 数据结构所以对于单个进程来说,可以用一种数据结构来表示它,这种数据结构称之为进程控制块PCB

PCB是进程存在的唯一标识。

++那么这些PCB之间是如何组织的?++

通常我们使用的是链表的方式进行组织的,就是把相同状态的进程链在一起,组成各种队列

就绪队列阻塞队列

除此之外,还有索引方式,将相同状态的索引放在一个索引表里

不过一般用的都是链表,更灵活。

进程的切换

也叫做上下文切换一个正在运行的进程被中断,另一个就绪状态的进程进入运行状态。

一般情况下会有以下步骤:

  1. 首先,要保存处理器的上下文环境,将CPU程序计数器和寄存器的值保存到进程的私有堆栈中;
  2. 更新当前进程的PCB(包括状态变更);
  3. 当前的进程移到就绪或者阻塞队列中;
  4. 根据调度算法,选择就绪队列中一个合适的新进程,将其更改为运行态;
  5. 更新内存管理的数据结构;
  6. 新进程内,把新进程内保存的上下文信息载入到CPU的寄存器和程序寄存器,占有CPU

++上下文切换都发生在那些场景里呢?++

  • 为了保证所有的进程都可以得到公平的调度,CPU时间会被划分成一段段的时间片,这些时间片被轮流分给各个进程,当某个进程的时间片被耗尽了,就会被系统挂起,切换到其他正在等待的进程;
  • 进程的系统资源不足时(比如内存),也会被挂起,等待资源满足后再运行;
  • 进程被睡眠函数sleep主动挂起时;
  • 优先级更高的的进程运行时,原进程也会被挂起;
  • 硬件中断时,CPU上的进程被中断挂起,转而执行内核中的中断服务程序。
posted @ 2021-12-04 19:59  iron2222  阅读(45)  评论(0编辑  收藏  举报