操作系统:进程、线程、死锁、并发性
进程:
定义:程序在数据集合上的运行过程,是系统资源分配和调度的独立单位。
进程的状态:
- 新建状态:进程建立
- 就绪状态:系统资源满足接纳新进程的条件,进程进入就绪队列,只要获得处理机调度便可以运行
- 运行状态:进程获得处理机的调度,进入运行状态
- 阻塞状态:进程等待它请求事件的发生
- 完成状态:进程执行结束,或者由于其他原因无法运行下去
进程状态的转换:
新建 ---- 》 就绪: 系统资源满足接纳新进程的条件,进程进入就绪队列。
就绪------》运行:进程获得处理机的调度,进入运行状态
运行----->阻塞 : 进程等待它请求的事件发生。
运行-----》完成: 进程执行结束或者由于其他原因无法继续下去
阻塞----》就绪: 进程请求的事件发生,进入就绪状态,只需获得处理机的调度便可以执行。
组成:
程序、数据、进程控制块
并发性:
进程通信方式:
共享存储: 在存储区划分一块共享存储,多个进程对共享存储进行读写数据实施通信
消息传递: 两个并发线程通过相互发送消息实现通信。
管道通信:发送进程以字符流形式将数据传入管道,接收进程从管道中接收数据。管道本质上是一个共享文件。
线程:
定义:处理机调度的最小单位,CPU执行的最小单位。
好处:
易于调度。线程的切换相较于进程的切换需要操作系统做得事情要少很多。
提高资源利用率:线程占用资源少,能充分利用多处理器的可并行数量。
开销少:进程的创建和销毁需要系统分配和回收资源,创建和销毁线程代价小得多。
线程与进程的关系:
一个线程只能隶属于一个进程,一个进程可以拥有至少一个线程
资源分配给进程,同一进程的所有线程共享该进程的所有资源
处理机分配给线程,真正在处理机上运行的是线程
不同进程的线程间要利用消息通信的方式实现同步。
进程与线程的区别:
调度:线程是调度的基本单位,进程是拥有资源的基本单位
并发性:不仅进程之间可以并发执行,线程之间也可以并发执行
拥有资源:进程拥有系统分配的资源,线程基本上不拥有资源,但是可以访问隶属于进程的资源
系统开销:在创建或者撤销进程时,系统需要为之分配和回收资源,导致系统的开销明显大于创建和销毁线程的开销。
死锁:
定义:多个进程相互竞争系统资源造成的僵局。一组进程中,每个线程都无线等待被其它线程所占有的资源,因而永远无法得到资源。
原因:
- 竞争系统资源
- 进程推进顺序不当
造成死锁的必要条件:
互斥: 在一段时间内,一个资源只能由一个进程调用,如果别的进程请求资源,需要等待直到占用线程释放资源。
保存且占有:进程保持了一个资源,又请求其他的资源,此时请求进程阻塞,但又不释放自己获得的资源。
非剥夺:进程保持的资源不能由其他进程抢占,只能由自己释放
循环等待:存在进程的循环等待链,前一进程占有的资源正是后一进程需要的资源,结果形成循环等待的僵局。
死锁的处理方法:
预防死锁: 破坏死锁的四个必要条件中的一个或多个,从而预防死锁的发生。
避免死锁:在系统动态分配资源的时候, 采取某些方法避免不安全的行为发生
检测死锁:死锁发生时对其进行检测,精准定位死锁进程,对其进行解除。
解除死锁:对死锁进程进行销毁或者挂起,将其资源分配给阻塞态进程,使其转化为就绪态。