第二章 进程与线程
一、进程与线程
1.进程的概念
程序:是静态的,就是个存放在磁盘里的可执行文件,如:QQ.exe。
进程:是动态的,是程序的一次执行过程,如:可同时启动多次QQ程序
引入进程的概念,以便更好地描述和控制程序的并发进行,实现操作系统的并发性和共享性(最基本的两个特征)
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
PCB是进程存在的唯一标志:(进程控制块)
操作系统需要对各个并发运行的进程进行管理,但凡管理时所需要的信息,都会被放在PCB中。
进程的组成:
PCB是给操作系统用的,程序段、数据段是给进程自己用的
进程的特征:
2.进程的状态转换
进程的状态:
一个进程从运行态变成阻塞态是主动的行为,而从阻塞态变成就绪态势别动的行为,需要其他相关进程的协助。
进程的组织方式:
总结:
3.进程控制
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。
简化理解:反正进程控制就是要实现进程状态转换
在操作系统,一般把进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,是一个不可分割的基本单位。(原子性)
进程的创建:
进程的终止:
进程的阻塞和唤醒:
进程的切换:
总结:
如何实现:
4.进程通信
进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。为了保证安全,一个进程不能直接访问另一个进程的地址空间。各个进程可使用操作系统内核提供的同步互斥工具(如P、V操作)
共享存储:
消息传递:
- 直接通信方式:
- 间接通信方式:(信箱)
管道通信:
- 写进程往管道写数据,即便管道没被写满,只要管道没空,读进程就可以从管道读数据
- 读进程从管道读数据,即便管道没被读空,只要管道没满,写进程就可以往管道写数据
总结:
5.线程和多线程模型
引入线程的原因:
引入线程后的变化:(与进程比较)
线程的属性:
线程的实现方式:(以下三种)
用户级线程:
内核级线程:
组合方式:上述两种方式的结合
多线程模型:
- 多对一
- 一对一
- 多对多
总结:
线程的状态转换:(大致与进程相似)
二、处理机调度
1.调度的概念、层次
调度:当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序,这就是“调度”研究的问题。
调度的三个层次:
高级调度(作业调度)。按一定的原则从外存的作业后备队列中挑选一个作业调入内存,并创建进程。每个作业只调入一次,调出一次。作业调入时会建立PCB,调出时才撤销PCB。
低级调度(进程调度/处理机调度)—— 按照某种策略从就绪队列中选取一个进程,将处理机分配给它。进程调度是操作系统中最基本的一种调度,在一般的操作系统中都必须配置进程调度。进程调度的频率很高,一般几十毫秒一次。
中级调度(内存调度)——按照某种策略决定将哪个处于挂起状态的进程重新调入内存。一个进程可能会被多次调出、调入内存,因此中级调度发生的频率要比高级调度更高。
联系、对比:
总结:
2.调度的目标
即调度算法的评价指标
CPU利用率:
系统吞吐量:
周转时间:
等待时间:
响应时间:响应时间,指从用户提交请求到首次产生响应所用的时间。
3.进程调度的时机
即切换与过程调度方式
临界区:
进程调度时机:
进程调度方式:
进程切换以及过程
4.调度器、闲逛进程
调度器:
调度程序的处理对象:
闲逛进程:
5. 调度算法
先来先服务:
短作业优先:
高响应比优先:
三者对比:
时间片轮转:
优先级调度:
多级反馈队列调度:
三者对比:
多级队列调度算法:
三、同步与互斥
1. 进程同步与互斥
2.进程互斥的实现
软件实现:
硬件实现:
中断屏蔽方法:
TestAndSet指令:
Swap指令:
3.互斥锁
4.信号量机制
整型信号量
记录型信号量
总结
信号量的值 = 这种资源的剩余数量(信号量的值如果小于0,说明此时有进程在等待这种资源)
- P( S ) —— 申请一个资源S,如果资源不够就阻塞等待
- V( S ) —— 释放一个资源S,如果有进程在等待该资源,则唤醒一个进程
实现进程互斥:
实现进程同步:
总结:
5.管程
6.经典问题
生产者消费者问题:
多生产者多消费者问题:
吸烟者问题:
读者写者问题:
哲学家进餐问题:
四、死锁
1.概念
2.预防死锁
破坏死锁产生的条件
3.避免死锁
安全序列
使用银行家算法
4. 检测和解除死锁
死锁的检测:
死锁的解除:
主要参考:王道考研课程
后续会持续更新考研408部分的学习笔记,欢迎关注。
github仓库(含所有相关源码):408数据结构笔记