1. 进程的概念
-
程序:是静态的,是存放在磁盘里的可执行文件,是一系列的指令的集合。
-
进程
- 是动态的,是程序的一次执行过程。进程实体(进程映像)是静态的。
- 是进程实体的运行过程,是操作系统进行资源分配和调度的一个独立单位。
2. 进程的组成
-
PCB
-
记录的所有信息被保存在一个数据结构PCB(Process Control Block),即进程控制块。
- 进程描述信息。如PID、UID
- 进程控制和管理信息。如CPU、磁盘、网络流量
- 资源分配清单。如文件、内存、I/O设备
- 处理机相关信息。如PC寄存器
-
当进程被创建的时候,操作系统会为该进程分配一个唯一的、不重复的ID——PID(Process ID),区分各个进程。
- 操作系统记录进程分配的资源,方便系统对资源的管理。
- 操作系统记录进程的运行情况,方便系统对进程的控制和调度。
- 操作系统对各个并发运行的进程进行管理所需的信息,都会存在PCB中。PCB随进程创建而创建,随进程的结束而回收。
-
-
程序段:程序的代码(指令列),供进程自身使用。
-
数据段:运行过程中产生的数据,供进程自身使用。
3. 进程的特征
- 动态性:进程是程序的一次执行过程。
- 并发性:内存中存在多个进程同时执行。
- 独立性:进程是能独立运行、独立获得资源、独立接受调度的基本单位。
- 异步性:各进程按各自独立的、不可预知的速度向前推进。
- 结构性:每个进程都会配置一个PCB。
4. 进程的状态
- 创建态:操作系统为进程分配资源、初始化PCB。
- 就绪态:进程创建完成就处于”就绪态“,但是没有CPU资源运行。
- 运行态:从”就绪态“进程选择其中一个进入CPU运行,进程进入”运行态“。如果时间片到或者CPU被资源被抢占,进程会从”运行态“进入”就绪态“。
- 阻塞态:在进程运行中,可能需要等待某个系统资源的分配,导致无法继续执行,操作系统会剥夺进程的CPU使用权,让它进入”阻塞态“。当请求的资源可以分配给进入”阻塞态“的进程的时候,进程会有”阻塞态“变成”就绪态“,等待系统分配CPU资源。
- 终止态:一个进程执行exit的系统调用,请求操作系统终止进程。进程就会进入”终止态“,等待操作系统完成资源回收,进程就会彻底消失。
5. 进程的组织
- 链接方式。使用队列把PCB组织起来。
- 索引方式。使用索引表把PCB组织起来。
6. 进程控制
-
对操作系统的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。
-
简而言之,就是实现进程状态的转换。
-
用”原语“实现进程控制
- 原语是一种特殊的程序,执行具有原子性。程序的运行必须一气呵成,不可中断。
- 使用”关中断指令“和”开中断指令“这两个特权指令实现原子性。
7. 进程控制相关的原语
-
创建原语
-
操作系统创建一个进程时使用的原语,大致流程如下
- 申请空白PCB
- 为新进程分配所需资源
- 初始化PCB
- 将PCB插入就绪队列
-
引起进程创建的事件
- 用户登录
- 作业调度
- 提供服务
- 应用请求
-
-
撤销原语
-
使一个进程转向终止态,大致流程如下
- 从PCB集合找到终止进程的PCB
- 剥夺进程的CPU资源,将CPU资源分配给其他进程
- 终止其所有子进程
- 将该进程拥有的所有资源归还给父进程或操作系统
- 删除PCB
-
引起进程终止的事件
- 正常结束
- 异常结束
- 外界干预
-
-
阻塞原语
-
使一个进程转向"阻塞态",大致流程如下
- 找到阻塞的PCB
- 保护进程运行现场
- 将PCB插入相应事件的等待队列
-
引起进程阻塞的事件
- 等待系统分配某种资源
- 等待相互合作的其他进程完成工作
-
-
唤醒原语
-
使一个进程从”阻塞态“转向”就绪态“,大致流程如下
- 等待队列中找到PCB
- 从等待队列中移除PCB,设置为就绪态
- 将PCB插入就绪态中,等待被调度
-
引起进程唤醒的事件
- 等待事件的发生
-
-
切换原语
-
使一个进程在”就绪态“和”运行态“之间相互切换,大致流程如下
- 将运行环境信息存入PCB
- PCB移入相应队列
- 选择另一个进程执行,并更新其PCB
- 根据PCB恢复新进程所需的运行环境
-
引起进程切换的事件
- 当前进程时间片到
- 有更高级别的进程到达
- 当前进程主动阻塞
- 当前进程终止
-
8. 进程通信
-
进程通信是进程之间的信息交换。
-
进程通信的方式
-
共享存储
- 两个进程互斥地访问共享空间
- 基于数据结构的共享:速度慢、限制多、低级通信
- 基于存储区的共享:速度快、限制少、高级通信
-
管道通信
- ”管道“是指用于连接读写进程的一个共享文件,又名pipe。实际是在内存中开辟固定大小的缓冲区。
- 管道只能采用半双工通信,一个时间段内只能实现单向的传输。若要实现双向同时通信,则需设置两个管道。
- 各进程要互斥地访问管道。
- 数据以字符流写入管道,当管道写满,写进程的write()系统调用将被阻塞;当管道变空,读进程的read()系统调用将被阻塞。
- 如果没写满,不允许读;没读空,不允许写。
- 数据一旦被读出,就从管道中被抛弃,意味着读进程最多只能有一个,避免读错数据的情况。
-
消息传递
- 进程通过操作系统提供的”发送消息/接收消息“两个原语进行以格式化的消息为单位的数据交换。
- 直接通信方式:消息直接挂接到接收进程的消息缓冲队列上。
- 间接通信方式:消息要发送到中间实体(信箱)中。
-
9. 总结
- 重点:进程的概念,注意与线程的区别。进程是操作系统是进行资源分配的最小单位。
- 重点:进程的五大状态,通过”原语“实现
- 重点:进程间的通信
- 上述重点都是面试常问点
- 请各位大佬发现错误,能指导菜鸟小弟
- 菜鸟也想努力进大厂,加油