#
主要参考书籍:《CSAPP》、《图解操作系统》、《MOS现代操作系统》
上一篇主要就是进程概念的阐述与拓展
本篇我们来学习一下: 如何控制进程
控制进程,即控制进程的相关操作,创建什么的...
## 进程的控制结构
操作系统用**进程控制块(PCB)**对进程进行控制
PCB中包含了很多进程的相关控制信息
从代码的层面来看:
PCB就是一个含有很多与进程相关成员的**结构体**或者是**类对象**
抽象来看:
PCB就是**一张表**,上面填满了进程上的信息,或者是**一个块**(存储空间),块(存储空间)里堆放着进程的信息
```c++
- PCB是进程存在的唯一标识,有进程,肯定有PCB。
具体含有什么信息
- 进程描述信息
- 进程标识符(PID):记录你是哪一个进程咯 相当于是进程的名字
- 用户标识符(UID):记录进程归属于哪些用户使用
- 进程控制和管理信息
- 进程当前状态:之前提到的那些状态
- 进程优先级:进程抢占CPU的优先级别
- 资源分配清单
- 内存地址空间
- 虚拟地址空间
- 已打开的文件列表
- 所使用的IO设备列表
- CPU相关信息
- CPU中寄存器的值
上下文
CPU上下文切换
CPU在执行程序的时候,需要有特定的程序计数器和CPU寄存器(让CPU知道程序任务在哪里加载,又从哪里开始运行)
这些都是CPU执行程序时所需的环境,这个环境就称为上下文。
进程上下文切换
进程的上下文切换不仅包含了虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的资源。
而能让进程上下文切换实现的就是PCB表中的数据
PCB之间如何组织在一块
链表
最基本就是用链表组织在一块
如何管理
对进程进行控制
进程的创建
创建进程:
- 为新的进程分配一个唯一的进程标识符,并且申请一个PCB,内存空间是有限的,如果PCB申请失败则无法创建。
- 为进程分配资源,此处如果资源不够,那么进程就会进入等待状态。
- 初始化PCB
- 如果进程的调度队列能够接收新的进程,那就将进程插入到就绪队列中,等待被调度。
进程的阻塞
进程需要等待一件事情(或者一个、一些条件)时,可以通过调用阻塞语句来使自己进入阻塞状态,而唤醒阻塞进程需要另一个进程
阻塞进程的详细过程:
- 找到将要被阻塞的对应进程的PID的PCB
- 如果该进程处于运行状态,就保护现场,然后将该进程转成阻塞状态,并停止其运行
- 将该PCB插入到阻塞队列当中去
进程的唤醒
处于阻塞的进程绝不可能唤醒自己
阻塞进程在等待一个唤醒IO事件,需要由别的进程发消息给它
唤醒过程如下:
- 在事件的阻塞队列中找到对应唤醒进程的PCB
- 将其设为就绪状态,并从阻塞队列中移除
- 将进程PCB插入到就绪队列中,等待调度程序调度
进程的终止
终止进程:三种方式
正常结束
异常结束
外部干预
终止流程:
进程的上下文切换(详细)
什么情况会引起进程的上下文切换
这个常考
哪些场景?
标签:第一轮,操作系统,队列,阻塞,PCB,秋招,上下文,进程,CPU
From: https://www.cnblogs.com/black-worrior-2000/p/16586849.html