进程概念及特征
引入进程的目的:为了使程序能与其他进程的程序并发执行,以提高资源利用率
进程是程序的而一次执行过程
进程由程序段、相关数据段、PCB组成。
PCB描述进程的而基本情况和运行状态,是进程存在的唯一标志
进程状态:运行、就绪、阻塞(等待)、创建、结束
运行态:进程占有处理器正在运行的状态。
就绪态:进程具备运行条件,等待系统分配处理器以便运行的状态。
等待态:又称阻塞态或睡眠态,指进程不具备运行条件,正在等待某个事件完成的状态。
新建态:对应进程被创建时的状态,尚未进入就绪队列
终止态:指进程完成任务到达正常结束点,或出现无法克服的错误而异常终止,或被操作系统及有终止权的进程所终止时所处的状态。
注意:一个进程从运行状态到阻塞状态是一个主动行为,而从阻塞状态到就绪状态是被动的,需要其他进程的协作。
属性:
(1) 结构特征:进程控制块PCB、程序段、相关的数据段
(2) 动态性:进程实体的执行过程
(3) 并发性:多个进程实体同存于内存中,能在一段时间内同时运行
(4) 独立性:能独立运行、独立分配资源和独立接受调度的基本单位
(5) 异步性:进程是进程实体的运行过程,是系统进行资源分配和高度的一个独立单位
进程控制
1、进程创建:中断用户登录、作业调度、系统提供服务、用户程序的应用请求
- 为新进程分配一个唯一的进程标识号,并申请一个空白PCB。若PCB 申请失败,则创建失败
- 为进程分配资源,为新进程的程序和数据,以及用户栈必要的内存空间(在PCB中体现)如果资源不足,并非创建失败,而是处于“阻塞/等待状态”,等待这个资源
- 初始化PCB,主要包括初始化标志信息、处理机状态信息、处理机控制信息、设置进程优先级
- 如果进程就绪队列能够接纳新进程。就将新进程插入到就绪队列,等待被调度运行
2、进程终止:正常结束、发生异常、外界干预
- 根据被终止进程的标识符,检索PCB,读出该进程状态
- 若被终止进程处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程
- 若该进程还有子进程,也要终止所有子进程
- 将该进程所拥有的全部资源,归还给父进程或操作系统
- 将该PCB从所在队列(链表)删除
3、进程阻塞:等待资源
4、进程唤醒:资源到达
5、进程切换:时间片用完、主动放弃处理机、被更高优先级进程剥夺处理机
- 保存处理机上下文,包括程序计数器和其他寄存器
- 更新PCB信息
- 把进程的PCB移入相应的队列中,如就绪、阻塞队列
- 选择另一个进程执行,并更新PCB
- 更新内存管理的数据结构
- 恢复处理机上下文
进程通信
- 共享存储
- 低级方式:基于数据结构的共享
- 高级方式:基于存储区的共享
- 消息传递
- 管道通信
线程
进程和线程区别:
进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位
在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;
线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。
所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)
内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。
包含关系:如果一个进程内有多个线程,则执行过程不是一条线程的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
目的:为了更好的使多道程序并发执行,以提高资源利用率和系统吞吐量,增加程序的并发性
特点:是程序执行的最小单元,基本不拥有任何系统资源
实现方式:用户级线程、系统级线程
处理机调度
1、为什么要进行处理机调度
可以在运行进程等待外部设备时,把处理机调度给其他进程,从而提高处理机的利用率,合理的处理计算机软硬件资源
2、三级调度
作业调度(高级调度):从外存的后备队列中选择一批作业进入内存,为他们建立进程,这些进程就被送入就绪队列,
进程调度(低级调度):从就绪队列中选出一个进程,并把其状态改为运行状态,把CPU分配给它。
中级调度(内存调度):是为了提高内存的利用率,系统将哪些暂时不能运行的进程挂起来。当内存空间宽松时,通过中级调度选择具备运行条件的进程,将其唤醒
调度算法
-
先来先服务FCFS:
不可剥夺算法,对长作业有利,对短作业不利,有利于CPU繁忙型,不利于IO繁忙型 - 短作业优先SJF:对长作业不利
- 优先级调度算法
- 高相应比优先调度算法
- 时间片轮转调度算法
- 多级反馈队列调度算法
进程同步
1、为什么要引入进程同步的概念
在多道程序环境下,进程是并发执行的,不同进程之间存在着相互制约关系。引入进程同步,从而协调进程之间的相互制约关系。
临界资源:一次仅允许一个进程使用的资源
2、不同进程之间会存在的关系
- 同步:直接制约关系,是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。
- 互斥:间接制约关系。当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一个进程才允许区访问此临界资源
实现临界区互斥
1、原则:
空闲让进、忙则等待、有限等待、让权等待
2、基本方法:
- 软件实现方法
- 硬件实现方法
3、 信号量:利用PV操作实现互斥
信号量机制即利用pv操作来对信号量进行处理进程通信方式。
4、什么是管程?如何通过管道机制实现进程间的通信?
管道:是由一组数组以及定义在这组数据之上的对这组数据的操作组成的软件模块,这组操作能初始化并改变管程中的数据和同步进程
是连接读写进程的一个特殊文件,允许按照FIFO方式传送数据,也能使进程同步执行。
写进程在管道的尾端写入数据,读进程在管道的首端读出数据。数据读出后将从管道中移走,其他进程都不能再读到这些数据。进程试图读管道时,再有数据写入管道前,进程将一直阻塞。同样,管道已经满时,进程再试图写入管道,在其他进程从管道中移走数据之前,写进程将一直阻塞
死锁
1、定义
多个进程由于竞争资源而造成一种僵局(互相等待),若无外力作用,这些进程都将无法对前推进。
2、死锁产生的原因及必要条件
- 系统资源的竞争(对不可剥夺资源的竞争)
- 进程在允许过程中,请求和释放资源顺序不当
-
必要条件:同时满足以下四个条件
- 互斥条件:临界资源是独占资源,进程应互斥且排他地使用这些资源。
- 不剥夺条件:进程在请求资源得不到满足而等待时,不释放已占有资源
- 请求和保持条件:又称不可抢占,已获资源只能由进程自愿释放,不允许被其他进程剥夺
- 循环等待条件 :又称环路条件,存在循环等待链,其中每个进程都在等待链中等待下一进程所持有的资源,造成这组进程处于永远等待状态。
死锁处理策略
- 预防死锁:这是一种较简单和直观的事先预防的方法。该方法是通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或几个条件,来预防发生死锁。预防死锁是一种较易实现的方法,已被广泛使用。但由于所施加的限制条件往往太严格,因而可能会导致系统资源利用率和系统吞吐量降低。
- 避免死锁:该方法同样是属于事先预防的策略,但它并不须事先采取各种限制措施去破坏产生死锁的四个必要条件,而是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。这种方法只需事先施加较弱的限制条件,便可获得较高的资源利用率及系统吞吐量,但在实现上有一定的难度。目前在较完善的系统中常用此方法来避免发生死锁。
- 检测死锁:这种方法并不须事先采取任何限制性措施,也不必检查系统是否已经进入不安全区,而是允许系统在运行过程中发生死锁。但可通过系统所设置的检测机构,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源; 然后,采取适当措施,从系统中将已发生的死锁清除掉。
- 解除死锁:这是与检测死锁相配套的一种措施。当检测到系统中已发生死锁时,须将进程从死锁状态中解脱出来。常用的实施方法是撤消或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程,使之转为就绪状态,以继续运行。死锁的检测和解除措施有可能使系统获得较好的资源利用率和吞吐量,但在实现上难度也最大。
银行家算法
安全状态:能找到一个分配资源的序列能让所有进程都顺利完成
银行家算法:采用预先分配的策略,检查分配完成时系统是否处于安全状态