进程状态及其转换
- 不同系统设置的进程状态数目不同
- 至少具有三种基本状态
就绪状态:已得到除CPU以外的资源
运行状态:占用CPU
等待(阻塞)状态:正在等待某一事件发生 根据原因可以设置多个阻塞队列
Linux进程树型体系
系统启动时,由操作系统创建一部分承担系统资源分配和管理工作的系统进程。
引起进程终止的事件
①正常结束:exit
②异常结束:越界错误,保护错,特权指令错、非法错误错、运行超时、等待超时、算术运算错、I/O故障。
③外界干预:系统kill进程,父进程终止,父进程请求。
为什么要引入线程:
这个得先从进程说起。
进程:
- 一个可拥有资源的基本单位
- 一个可独立调度的基本单位
进程把一组相关的资源组合起来,构成了一个资源平台,不对之进行频繁的切换。
作为调度的基本单位,线程是代码在资源平台上的一条执行流程。
引入进程的目的:多个程序并发执行,改善资源利用率,提高系统吞吐量。
引入线程的目的:减少程序并发执行的时空开销。
线程的基本概念
A thread is a single execution sequence that represents a separately schedulble task.
进程当中的一条执行流程,CPU调度的基本单位。
引入线程的好处
- 创建一个新线程花费时间少
- 两个进程的切换花费时间少
- 在多处理器系统上,支持真正的并行处理(paralleism)
- 便于共享数据
线程的实现
用户线程:解决上下文切换的问题
内核线程:发挥处理器的并发优势
线程与进程的比较
1.进程=线程+资源平台
2.晋城市资源分配的基本单位
进城拥有一个完整的虚拟地址空间,县城没有自己的地址空间。
线程没有独立资源,共享隶属进程资源。
系统开销:进程的创建,切换和撤销的开销远大于线程。
资源共享所引起的制约
临界区:不允许多个并发进程交叉执行的一段程序
并发进程的制约关系
间接制约(进程互斥)——共享引起的在临界区内不逊于并发进程交叉执行的现象。
举个栗子:A、B进程共同竞争打印机
直接制约(进程同步)——共享对方的私有资源所引起的制约
进程间的合作: 输入计算进程、计算进程、打印进程
互斥加锁
- 加锁法的问题:不能完全保证“只允许一个进程进入临界区”。
- 循环测试锁消耗较多的CPU计算时间。
- 某些情况下出现不公平现象。
信号量和PV原语
信号量(Semaphore)
荷兰科学家 E.W.Dijkstra
信号量S是一个整数,与资源对应。
- s>0: s个资源可用
- s == 0:无资源可用
- s<0: |s| 表示s等待队列中的进程个数
P,V原语
访问信号量的原子操作,不可中断。
P(sem)>>>>>>>>>>>>>> sem-1<<<<<<<<<申请一个资源
V(sem)>>>>>>>>>>>>>>>sem+1<<<<<<<<<释放一个资源
私用信号量
私用信号量
进程同步,制约进程与被制约进程之间
初值:0或某个正整数n。表示资源的数目。
公用信号量
互斥信号量
联系一组并发进程,初值为1,每个进程均可施加P,V操作。
soshite
著名的“生产者-消费者问题”
并发的进程的同步,互斥问题的一般化
资源的消费者,至少有一个缓冲区满
生产者想发送数据,至少一个缓冲区为空。
资源的消费者:使用某一类资源的进程
资源的生产者:释放某一类资源的进程
同步:消费者想接收数据,至少一个缓冲区满
生产者想发送数据,至少一个缓冲区为空。
互斥:每个缓冲区是临界资源。
进程同步与互斥的关系:互斥进程共享资源的使用权,竞争没有固定的必然联系。
同步进程间有一种必然的联系
死锁问题 死锁概述、死锁避免、死锁的检测和解除
死锁的概述
“死锁” (deadlock):事情无法进展下去的情形
死锁的定义
一组并发进程彼此互相等待对方的资源。
在得到对方的资源之前不释放自己的资源。
若无外力推动,各进程不能继续向前推进的僵死状态。
死锁的原因
并发进程的资源竞争
系统中的资源不足以同时满足并发进程的需要 CPU、内存。
可抢占的资源:一个进程正在使用某资源时,将它拿走而不会对该进程产生不良影响。
不可抢占的资源:一个进程正在使用某资源时,将它拿走,会导致该进程运行失败。例如:光盘刻录机。
死锁主要由不可抢占资源引起
进程推进和释放资源的顺序不当。
死锁的必要条件
互斥条件:涉及的资源是临界性
不可抢占条件:进程占用的资源,不会被强制性拿走,由该进程主动释放。
部分分配:进程在等待一新资源时继续占有已分配的资源
环路等待条件:存在一种进程的循环链,链中的每一个进程已获得资源的同时被下一个进程所请求。
死锁的应对策略——无为而治 鸵鸟政策
死锁预防
动态避免
检测并恢复
死锁的避免——银行家算法
安全状态:自身不存在死锁问题,存在着某种调度顺序,在最坏的情况下(所有进程请求他们最大数目的管理,每一个进程都能顺利结束)
死锁的检测和解除
思索的检测算法
确定是否是存在环路等待条件,资源分配 RAG 死锁定理。
死锁的解除:剥夺资源、进程回退、撤销进程。
资源分配图(RAG)
资源:方框表示 资源个数:方框中的黑圆点表示
进程:
圆圈中加进程名表示
分配边:资源->进程的一条有向边
申请边:资源类的一条有向边
资源图的化简(过于简单。。。略)
进程通信
进程间的信息交换:低级通信 控制信息的交换 只传送一个 或几个字节的信息,控制进程执行的速度,锁,信号量机制、效率低。
按通信内容划分:大批量数据交换
效率高
通信实现细节对用户透明,直接利用操作系统所提供的命令。
进程的通信方式:消息缓冲通信
进程的通信方式——消息
信息单位:消息
方式:
直接通信(消息缓冲机制):本地进程
间接通信(信箱):网络上的异地进程之间
实现:一组通信命令(原语)
特点:缓冲区或邮箱存放被传送消息
发送与接受之间无直接联系关系
进程的通信方式——共享存储区
基于共享数据结构:软件共享
- 生产者——消费者的有界缓冲区
- 数据结构的设置及进程间同步由用户完成
基于共享存储区:硬件共享
- 系统提供共享存储区
- 不要求数据的移动
- 特点:高效,速度快、传递大量数据
进程的通信方式——管道
管道通信:UNIX首创,借助文件和文件系统形成,用于本地的写作进程之间。
管道:用于连接一个读进程和一个写进程的pipe文件
逻辑上:管道文件
物理上:文件系统的高速缓冲区组成
消息缓冲:内存缓冲区为基础
管道:以文件系统为基础
处理机管理
衡量调度策略的指标
周转时间、吞吐率、响应时间、设备利用率
处理机调度
分级调度、作业调度、进程调度、调度算法
分级调度
1.提交状态
作业处于从输入设备进入外部存储设备
2.后备状态
作业的全部信息全部输入到输入井,还没被调度前。
3.运行状态
被作业调度程序选中而送入主存中投入运行。
4.完成状态
运行完毕,它所占用的资源尚未被系统全部回收
2018年12月28日00:13:59-----累了 休息会儿