笔者文笔有限,如有不足之处还请斧正
文字内容较多,请细细品读,有些点可能有赘述之处,品完此文,面试与此相关的问题,就能得心应手的对付了,还能总结出一套自己的结论
进程进程是一种抽象的概念,从来没有统一的标准定义
各式各样的定义进程是可并发执行的程序在一个数据集合上的运行过程
进程是指进程实体的运行过程
进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程
操作系统进行资源分配和调度的一个独立单位
行为的一个规则叫做程序,程序在处理机上执行时所发生的活动称为进程
具有一定功能的程序在某个数据集合上的一次活动
进程是一个程序与其数据一道通过处理机的执行所发生的活动
两个基本属性进程是一个资源分配的基本单位
进程是一个可独立调度和分派的基本单位
特点结构性:由程序(段),数据(段),进程控制块(PCB)三部分组成
程序:描述进程要完成的功能
数据:程序执行时所需数据和工作区
进程控制块:进程唯一标识,包含描述信息与控制信息
OS感知进程存在的唯一标志
动态性:进程是程序的执行过程
临时产生的,动态产生/消亡
并发性:多个进程可同时存在于内存中,能在一段时间内同时运行
独立性:独立运行的基本单位,独立获得资源与调度的基本单位
进程是系统进行资源分配和调度的一个独立单位
异步性:各自的进程独立的按不可预知的速度推进
状态运行(Running):占用CPU且正在CPU上运行
就绪(Ready):已具备运行条件(获取了除CPU以外的其它所需资源),但CPU没有空闲
等待/阻塞/睡眠(Waiting/Blocked):因等待某一事件而不能运行
低级调度低级调度又称为进程调度、微观调度或短程调度
非抢占式调度:不允许某进程抢占已经分配出去的处理机。
抢占式调度:允许调度程序根据某种原则,暂停正在执行的进程,将处理*机重新分配给另一进程。
抢占原则
优先权原则
短作业(进程)优先原则
时间片原则
进程调度时机一个进程运行完毕,或因某种错误而终止运行
当一个进程在运行时变为等待状态(等待I/O)
分时系统中时间片到
当有一个优先级更高的进程就绪(抢占式)
在进程通信中,执行中的进程执行了某种原语操作(P操作,阻塞原语)
CPU调度过程即进程切换步骤
为了控制进程的执行,内核必须有能力挂起正在CPU上执行的进程,并恢复以前挂起的某个进程的执行,这叫做进程切换、任务切换、上下文切换
保存现场:顺序保存,最后一步保存PSW
选择要运行的程序
恢复现场:最后一步恢复选中进程的PSW
通信管道:匿名/具名管道
信号量
共享内存
消息队列
套接字
线程将进程的两个基本属性分开,线程作为调度的基本单位,不同时作为独立分配资源的单位
线程会被频繁调度和切换
进程作为拥有资源的单位,不进行频繁切换
定义是进程中的一个实体,是被系统独立调度的基本单位
好处建一个新线程花费时间少
线程的终止时间比进程短
同进程内的线程切换时间比进程短
因为同一进程内的线程共享内存和文件,因此它们之间相互通信无须调用内核
属性轻型实体:基本不拥有资源
独立调度的基本单位
可以并发执行
共享进程资源
线程的特征结构性
TCB:标识、现场信息(寄存器、PC、栈指针)、调度信息(状态、优先级)
数据块:过程参数、数据、系统与用户堆栈
并发性
同一进程中的各线程在同一主存空间,可以共享进程中的所有资源(数据、设备、文件),线程间通信方便
共享性
同一进程的各线程
动态性
有生命周期,有状态变化,可创建子线程
在引入线程的OS中,线程是进程中的一个实体,是被系统独立调度和分派的基本单位
线程自己基本不拥有系统资源,只拥有少量必不可少的资源:程序计数器PC、一组寄存器、栈
线程可与同属一个进程的其它线程共享进程所拥有的全部资源
一个线程可以创建和撤消另一个线程;同一进程中的多个线程之间可以并发执行
系统调度的基本单位是线程而不是进程,每当创建一个进程时,至少要同时为该进程创建一个线程,否则该进程无法被调度执行
线程间通信方式线程间的通信可以通过共享进程级全局变量
通信共享进程级全局变量
自定义消息
同步方式事件
信号量
互斥量
临界区
进程与线程的区别引入进程的目的是为了使多个程序更好的并发执行,改善资源利用率、提高系统效率
引入线程则是为了减少并发执行时所付出的时空开销,使并发粒度更细、并发性更好
关系一个线程属于一个进程
一个进程至少有一个线程
资源分配给进程,线程共享其中的资源
处理机分配给线程
定义进程:可并发执行的程序在一个数据集合上的运行过程
线程:是进程中的一个实体,是被系统独立调度的基本单位
调度传统OS中,拥有资源、独立调度的基本单位是进程
引入线程的系统中,线程是调度和分派的基本单位,而进程是拥有资源的基本单位
在同一个进程内线程切换不会产生进程切换,由一个进程内的线程切换到另一个进程内的线程时,将会引起进程切换
并发性在引入线程的系统中,进程之间可并发,同一进程内的各线程之间也能并发执行。因而系统具有更好的并发性
资源