1.进程的描述:PCB、状态

2. 进程的引入及其概念

-程序的顺序执行:简单,但资源利用率低
一次只运行一道程序
特点:封闭性(独占全机资源)、可再现性。
-程序的并行执行:复杂,但资源的利用率高
并行执行:计算机同时运行多个程序;以资源共享为条件,提高了资源利用率;增强计算机系统的处理能力。
失去了封闭性与可再现性。
特征:程序间产生了相互制约关系;程序与CPU执行的活动之间不再一一对应。
-进程:又叫任务,是程序的一次执行过程;是程序在一个数据集合上顺序执行时发生的活动。
特性:动态性、独立性、并发性、结构性。
-进程与程序
进程是动态的,程序是静态的;进程是暂时的,程序是永久的;进程包括程序、数据和进程控制块;通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可以包括多个程序;进程可创建其他进程,而程序不能形成新的程序。

3. 进程的描述

进程信息包括【可执行程序、独立的地址空间、执行战区、打开的文件与申请使用的I/O设备】
-进程控制块PCB:进程存在唯一标识。
信息包括:进程标识数(唯一地标识一个进程,外部标识符由用户使用)、进程的状态/调度/存储器管理信息、进程使用的资源信息、CPU现场保护区、记账信息(使用CPU时间量、账号)、进程之间的家族关系、进程的链接指针。
-进程的状态(状态不停变化)
信息记录在PCB
包括运行态、阻塞态、就绪态。
三者之间的关系:运行态–被抢先–>就绪态,就绪态–进程调度–>运行态,运行态–等待事件–>阻塞态,阻塞态–事件完成–>就绪态。
结论:运行态–阻塞态 是由运行进程自己主动改变的;阻塞态–就绪态 是由外界事件引起的
运行态–就绪态 处于运行态的进程被剥夺;就绪态–运行态 被进程调度的程序选中。
创建态:刚刚建立,未进就绪队列。 终止态
创建态-就绪态:准备再接纳一个进程,为了确保系统的性能,大多数系统都限制创建的进程数量。
-进程的组织
线性表:把所有进程的PCB存放在一个数组中,系统通过数组下标访问每个PCB。
链接表:把具有相同状态的PCB组成一个队列,处于就绪态进程可按照某种策略排成多个就绪队列,处于阻塞态的进程又可以根据阻塞的原因不同组织成多个阻塞队列。
-进程控制
进程控制:系统使用一些具有特定功能的程序段来创建、撤销进程,以及完成进程各状态之间的转换。
进程控制是由操作系统内核实现的。
原语:指由若干条指令组成的程序段,用来实现某个特定功能,在执行过程中不可被中断。
-创建原语
创建进程的时机:
批处理系统,为每个提交的作业创建一个进程;
分时系统中,系统会为每个登录用户创建一个终端进程;
交互式系统中,键入一个命令或点击一个图标都会创建一个新进程。
-创建原语的功能
扫描进程表,找到一个空闲的PCB;
为新进程的程序、数据、用户栈分配内存;
初始化PCB,把调用者提供的参数填入PCB种;
将新进程插入就绪队列。
-撤销原语
进程执行完或因故障不能继续运行。
功能:在PCB集合中找到要撤销的进程;若有子进程,也须终止,防止称位不可控的;将其占用的系统资源归还系统;撤销其PCB。
Unix:exit() Windows:ExitProcess()
-阻塞原语
在运行过程中进程等待某一事件发生时,自己执行阻塞原语,由运行态->阻塞态。
功能:中断CPU,将其运行现场信息保存在PCB种;置状态为阻塞态,插入相应事件的阻塞队列中;转进程调度。
-唤醒原语
若进程等待的事件是I/O完成。I/O完成产生中断,CPU响应中断,在中断处理中,将等待进程唤醒(阻塞态à就绪态)。
若等待发送进程发信息,由发送进程调用唤醒原语把等待进程唤醒(阻塞态à就绪态),插入就绪队列。
-阻塞/唤醒
Sleep( ) 将在指定时间内阻塞本进程;
Pause( ) 阻塞本进程,以等待信号;
Wait( ) 阻塞本进程,以等待子进程结束;
Wakeup( ) 唤醒;
WaitForSingleObject( ) 阻塞等待某对象为有信号状态;
ReleaseMutex( ) 释放一个互斥对象,使之成为有信号状态。
-挂起原语
实时系统:根据实时现场的需要,会将正在执行的或没有执行的进程挂起一段时间。被挂起的进程由活动状态变为静止状态(静止就绪、静止阻塞)。
分时系统:把进程从内存换到外存,进程就处于静止状态,不被调度。
-解挂原语
当挂起进程的原因被解除时,系统调用解挂原语将指定的进程解挂,使其由静止状态变为活动状态。
当被解挂的进程变为活动就绪时,通常立即转进程调度。

4.处理机调度

进程数大于处理机数。多进程竞争处理机。
系统运行性能在很大程度上取决于调度。吞吐量大小、周转时间长短、响应及时性。
-处理机的调度级别
作业调度:⾼级调度。多道批处理系统。多个⽤户作业提交到外存,形成后备作业队列。被作业调度选中进内存,就处于运⾏态。
交换调度:中级调度。将主存中暂不具备运⾏条件的进程换出到外存交换区;或将外存交换区中的已具备运⾏条件的进程换⼊主存。
进程调度:低级调度。为进程分配处理机。功能、方式、时机、算法。
-进程调度程序的功能
管理系统中各进程的执行状况;选择就绪进程占有CPU;进行进程上下文的切换。
-进程上下文
进程的运行环境和物理实体:
用户级上下文:进程的程序和数据、用户栈;
寄存器级上下文:CPU现场信息;
系统级上下文:进程的PCB、核心栈。
-进程调度的方式
非抢先方式:某一进程占用CPU,直到运行完或不能运行为止,其间不被剥夺。用在批处理系统。主要优点:简单、系统开销小。
抢先方式:调度程序基于某种策略(优先级、时间片等)剥夺现运行进程的CPU给其它进程。用在分时系统、实时系统。
-进程调度的时机
进程完成或错误终止;
提出I/O请求,等待I/O完成时;
在分时系统,按照时间片轮转,分给进程的时间片用完时;
优先级调度,有更高优先级进程就绪;
进程执行了某种原语操作,如阻塞原语和唤醒原语,都可能引起进程调度。
-进程调度算法
-评价指标:等待时间、平均等待时间(AWT)、周转时间(TAT)、平均周转时间、先来先服务(FCFS)
相关计算:周转时间=完成时间-到达时间=等待时间+运行时间;平均周转时间=(完成时间-到达时间)/进程个数
-先来先服务(FCFS):简单,节省机器时间。缺点:容易被大作业垄断,使得平均周转时间延长。
-最短作业优先(SJF):选取运行时间最短的作业运行,对短作业有利,作业的平均周转时间最佳。
-响应比高者优先(HRN):比值=(作业等待时间+作业估计运⾏时间)/作业估计运⾏时间=1+作业等待时间/作业估计运⾏时间,特点是结合了先来先服务、短作业优先的⽅法。优先运⾏短作业和等待时间⾜够⻓的⻓作业,缺点是算法比较复杂。
-优先级调度法(Priority Scheduling):将CPU分配给就绪队列中优先级最高的进程,静态优先级:在进程创建时确定的,运行时保持不变。通常赋予系统进程较高优先级;赋予申请资源量少的进程较高优先级;动态优先级:原优先级可随进程的推进而改变。根据进程占用CPU或等待CPU时间的长短动态调整。
-轮转法(Round Robin):用在分时系统,轮流调度所有就绪进程;利用一个定时时钟,使之定时地发出中断。时钟中断处理程序在设置新的时钟常量后,立即转入进程调度程序;时间片长短的确定原则:既要保证系统各个用户进程及时地得到响应,又不要因时间片太短而增加调度的开销,降低效率。
-多级反馈队列轮转法(Multilevel Feedback Queue):优先级不同的进程排在不同的就绪队列;刚创建的进程和因请求I/O而未用完时间片的进程排在高优先级队列;高优先级进程的时间片较短,低则较长;运行2~3个时间片还未完成的进程降级;多个就绪队列可采用前后台运行。前台队列采用RR调度;后台采用FCFS。
-实时系统的调度算法
-时钟驱动法:各任务的调度在系统运行前就确定了,调度程序依次调度任务执行。
-加权轮转法:进程的权就是分配给它的一小部分处理机时间。轮转时,不同的进程可以获得不同的处理机时间。广泛用在高速开关网的实时控制中。

5.线程的引入

-线程: 操作系统能够调度的最小单位,被包含在进程之中的一个单一顺序的控制流; 一个进程中可以并发多个线程,每条线程并行执行不同的任务。
进程在逻辑上表示OS要做的一个任务,线程表示完成该任务的许多可能的子任务。
线程是进程中的一个可执行实体。
以进程为单位分配资源,以线程为单位调度执行。
-多线程字处理进程:

  • 一个线程与用户交互;
    -另一个线程在后台进行格式化处理;
    -一旦在某一页中的语句被删除掉,交互线程就立即通知格式化线程对整本书重新进行处理;
    -同时,交互线程继续监控键盘和鼠标;
    -第三个线程可以做磁盘备份。
    分派线程(dispatcher)从网络读入客户请求,之后选一个工作线程提交请求,当该工作线程阻塞在磁盘操作上时,分派线程可另选一个工作线程运行。
    -线程控制块
    包含系统管理线程所需的全部信息:
    -有一个唯一的标识符;
    -有CPU现场保护区,保存处理机状态和运行现场的一组寄存器值;
    -有两个堆栈,分别用于用户态和核心态调用时进行参数传递;
    -有一个独立的程序计数器;
    -关联的进程和线程指针。
    -线程与进程的比较
    -拥有的资源:进程拥有一个独立的地址空间,用来存放若干代码段和数据段,拥有打开的文件,以及至少一个线程;一个进程内的多线程共享该进程的所有资源,线程自己拥有很少资源。
    -调度:进程调度需进行进程上下文的切换,开销大;同一进程内的线程切换,仅把线程拥有的一小部分资源变换了即可,效率高。同一进程内的线程切换比进程切换快得多。
    -并发性:引⼊线程后,使得系统的并发执⾏程度更⾼。进程之间、进程内的多线程之间可并发执⾏。
    -安全性
    -系统对线程的支持
    ⽤户级线程
    有关线程的所有管理⼯作都由⽤户程序通过调⽤在⽤户态运⾏的线程库完成。系统内核并不知道线程的存在。
    -核心级线程
    有关线程的管理⼯作都由内核完成,应⽤程序通过系统调⽤来创建或撤销线程。
    ⼀个线程的阻塞,不影响其他线程的执⾏。
    -两级组合
    既支持用户级线程,也支持核心级线程。
    用户级多个线程对应核心级多个线程。
    当内核了解到一个线程阻塞后,通知运行时系统,重新调度其他线程。
    -LWP
    轻进程:Light Weight Process;
    可以把LWP看作一个虚拟CPU;
    LWP建立了从用户级到内核级的桥梁;
    一个进程可申请多个LWP,一个LWP可交叉运行多个用户线程;
    LWP和内核线程是一对一的关系。