杨泽彬的神秘商店

博客园 首页 新随笔 联系 订阅 管理
# 

主要参考书籍:《CSAPP》、《图解操作系统》、《MOS现代操作系统》

上一篇主要就是进程概念的阐述与拓展

本篇我们来学习一下:  如何控制进程



控制进程,即控制进程的相关操作,创建什么的...



## 进程的控制结构

操作系统用**进程控制块(PCB)**对进程进行控制
PCB中包含了很多进程的相关控制信息

从代码的层面来看:
PCB就是一个含有很多与进程相关成员的**结构体**或者是**类对象**
抽象来看:
PCB就是**一张表**,上面填满了进程上的信息,或者是**一个块**(存储空间),块(存储空间)里堆放着进程的信息

```c++

  • PCB是进程存在的唯一标识,有进程,肯定有PCB。

具体含有什么信息

  1. 进程描述信息
    • 进程标识符(PID):记录你是哪一个进程咯 相当于是进程的名字
    • 用户标识符(UID):记录进程归属于哪些用户使用
  2. 进程控制和管理信息
    • 进程当前状态:之前提到的那些状态
    • 进程优先级:进程抢占CPU的优先级别
  3. 资源分配清单
    • 内存地址空间
    • 虚拟地址空间
    • 已打开的文件列表
    • 所使用的IO设备列表
  4. CPU相关信息
    • CPU中寄存器的值

上下文

CPU上下文切换

CPU在执行程序的时候,需要有特定的程序计数器和CPU寄存器(让CPU知道程序任务在哪里加载,又从哪里开始运行)
这些都是CPU执行程序时所需的环境,这个环境就称为上下文。

进程上下文切换

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

而能让进程上下文切换实现的就是PCB表中的数据

PCB之间如何组织在一块

链表

最基本就是用链表组织在一块

如何管理

对进程进行控制

进程的创建

创建进程:

  • 为新的进程分配一个唯一的进程标识符,并且申请一个PCB,内存空间是有限的,如果PCB申请失败则无法创建。
  • 为进程分配资源,此处如果资源不够,那么进程就会进入等待状态。
  • 初始化PCB
  • 如果进程的调度队列能够接收新的进程,那就将进程插入到就绪队列中,等待被调度。

进程的阻塞

进程需要等待一件事情(或者一个、一些条件)时,可以通过调用阻塞语句来使自己进入阻塞状态,而唤醒阻塞进程需要另一个进程

阻塞进程的详细过程:

  • 找到将要被阻塞的对应进程的PID的PCB
  • 如果该进程处于运行状态,就保护现场,然后将该进程转成阻塞状态,并停止其运行
  • 将该PCB插入到阻塞队列当中去

进程的唤醒

处于阻塞的进程绝不可能唤醒自己

阻塞进程在等待一个唤醒IO事件,需要由别的进程发消息给它

唤醒过程如下:

  • 在事件的阻塞队列中找到对应唤醒进程的PCB
  • 将其设为就绪状态,并从阻塞队列中移除
  • 将进程PCB插入到就绪队列中,等待调度程序调度

进程的终止

终止进程:三种方式

正常结束

异常结束

外部干预

终止流程:

进程的上下文切换(详细)

什么情况会引起进程的上下文切换

这个常考

哪些场景?

posted on 2022-08-15 00:57  快乐过了阈值  阅读(31)  评论(0)    收藏  举报