标签:第一轮 操作系统 队列 阻塞 PCB 秋招 上下文 进程 CPU
#
主要参考书籍:《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 来源: https://www.cnblogs.com/black-worrior-2000/p/16586849.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。