小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
进程
进程(Process)是一个程序及其数据在处理机上顺序执行所发生的活动。
为了使程序能独立运行,操作系统配置了专门的数据结构:进程控制块(PCB)用来描述进程基本情况和运行状态,进而控制和管理进程。相应的,程序段、相关数据、PCB三者构成了进程映像。PCB是进程存在的唯一标志,创建进程表实际上是在创建进程的PCB;撤销进程实际上是在撤销进程的PCB。
线程
线程是“轻量级”进程,是CPU的执行单元,它的出现是为了减小程序早并发执行时所付出的时空开销,提高操作系统的并发性能。
线程由线程id、程序计数器、寄存器集合、堆栈组成。
线程不拥有自己的系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他兄弟线程共享父进程的所有资源。
进线程比较
- 调度:线程是获得处理机的基本单位;
- 资源:进程是资源分配的基本单位;
- 系统开销:线程上下文切换代价小,进程切换涉及到当前执行进程的CPU环境的保存,以及新调度到进程的CPU环境设置,开销较大,线程切换只需要保存和设置少量寄存器内容,开销很小;
- 地址空间和资源:进程间的地址空间相互独立;兄弟线程共享同父亲进程资源;进程内线程对其他进程不可见;
- 通信:进程间通信(IPC)需要进程同步互斥手段以保证数据一致性;线程间可直接读写进程的全局变量完成通信;
死锁
死锁指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都无法向前推进。
死锁定理:当且仅当S状态的资源分配图不可完全简化时称此刻状态死锁
死锁产生的原因:
- 系统资源竞争
- 进程推进顺序非法
- 死锁产生的四个必要条件:互斥条件;不可剥夺条件;请求和保持条件;循环等待条件;
死锁的处理策略:
- 死锁预防:破坏死锁的四个必要条件
- 死锁避免:银行家算法
- 死锁检测和解除