一战成硕
- 2.1 进程与线程
- 2.1.1 进程的概念和特征
- 2.1.2 进程的状态与转换
- 2.1.3 进程的组织
- 2.1.4 进程控制
- 2.1.5 进程的通信
- 2.1.6 线程和多线程模型
- 2.2 处理机调度
- 2.2.1 调度的概念
- 2.2.2 调度的目标
- 2.2.3 调度的实现
- 2.2.4 典型的调度算法
2.1 进程与线程
2.1.1 进程的概念和特征
- 进程的概念
实现操作系统的并发性和共享性。
系统利用PCB来描述进程的基本情况和运行状态,进而控制和管理进程。
由程序段、相关数据和PCB三部分构成了进程实体(进程映像)。
所谓创建进程,实质上是创建进程实体中的PCB,而撤销进程,实际是撤销PCB。
进程映像是静态的,进程则是动态的。
PCB是进程存在的唯一标志。
进程从不同的角度有不同的定义:
- 进程是程序的一次执行
- 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
3)进程是具有独立功能的程序在一个数据集合上运行的过程,他是系统进行资源分配和调度的一个独立单位。
- 进程的特性
1)动态性
2)并发性
3)独立性
4)异步性
2.1.2 进程的状态与转换
基本状态
1)运行态:进程正在处理机上运行。在单处理机中,每个时刻仅有一个进程处于运行态。
2)就绪态:进程获得处理机外一切所需资源,一旦得到处理机,便可立即运行。系统中处于就绪状态的进程可能有多个,通常排成一个就绪队列。
3)阻塞态:又称等待态。进程正在某一个事件而暂停运行,如等待某资源可用(不包括处理机)或等待输入输出完成,即使处理机空闲,也不能运行,根据阻塞原因不同设置多个阻塞队列。
非基本状态
4)创建态:进程正在被创建
5)结束态:进程从系统中消失,进一步处理资源释放和回收工作。
2.1.3 进程的组织
- 进程控制块
PCB是进程实体的一部分,是进程存在的唯一标志。
常见组织方式有两种:链式和索引
- 程序段
被进程调度程序调度到cpu执行的程序代码段。程序可被多个进程共享,即多个进程可以运行同一个程序。 - 数据段
可以是进程对应程序加工的原始数据,也可以是程序执行时产生的中间或者最终结果。
2.1.4 进程控制
原语:执行具有原子性,不可中断,一气呵成。
关中断指令
开中断指令
cpu执行了关中断指令之后,就不再例行检查中断信号,直到执行开中断指令之后,才会恢复检查。
- 进程的创建
允许一个进程创建另一个进程,创建者称为父进程,被创建者称为子进程,可以继承父进程所拥有的资源,子进程撤销,继承的资源也归还父进程。父进程撤销,其所创建的子进程也通常同时撤销。
操作系统创建一个新进程的过程如下(创建原语):
1)为新进程分配唯一一个进程标志。并申请一个空白的PCB,若PCB请求失败,则创建失败。
2)为进程分配其运行所需资源,如果资源不足,则并不是创建失败,而是处于创建态。
3)初始化PCB,主要包括初始化标志信息,初始化处理机状态信息和初始化处理机控制信息,以及设置进程优先级。
4)若进程就绪队列能够接纳新进程,则将新进程插入就绪队列,等待被调度运行。
- 进程的终止
引起进程终止的事件有:
a正常结束
b异常结束
c外界干预
操作系统终止进程的过程如下(终止原语):
1)根据被终止进程的标识符,检索出该进程的PCB,从中读出该进程的状态。
2)若被终止进程处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程。
3)若该进程还有子孙进程,则应将其所有子孙进程终止。
4)将该进程所拥有的全部资源,或归还其父进程,或归还操作系统。
5)将该PCB从所在队列链表中删除。
- 进程阻塞和唤醒
进程可通过调用阻塞原语(block)使自己由运行态变为阻塞态,阻塞是进程自身的一种行为。
只有处于运行态的进程(获得cpu)才能将其转变为阻塞态,阻塞原语执行过程如下:
1)找到将要被阻塞进程的PCB
2)若该进程为运行态,则保护其现场,将其转换为阻塞态,停止运行。
3)把该PCB插入相应等待队列,将处理机资源调度给其他就绪进程。
阻塞进程所期待的事件出现时,调用唤醒原语(wakeup)将该等待进程唤醒,唤醒原语执行过程如下:
1)找到PCB
2)将其从等待队列中移出,并设置其状态为就绪态。
3)把该PCB插入就绪队列,等待调度程序调度。
注意,阻塞和唤醒原语要成对使用。
- 进程的切换
2.1.5 进程的通信
进程通信是指进程之间的信息交换。PV操作是低级通信方式,高级通信方式是指以较高的效率传输大量数据的通信方式,高级通信方法有以下三类。
-
共享存储
在通信进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行读写操作实现进程之间的信息交换。
在对共享空间进行读写操作时,需要使用同步互斥工具(如P操作,V操作)对共享空间的读写进行控制。
共享存储又分为两种,低级共享是基于数据结构的共享,高级共享是基于存储区的共享。
操作系统只负责提供共享空间和同步互斥工具,数据交换则由用户自己安排读写指令完成。
注意,进程空间一般是独立的,进程运行期间一般不能访问其他进程空间,想让两个进程共享空间,必须通过特殊的系统调用实现。而进程内的线程是自然共享进程空间的。 -
消息传递
在消息传递系统中,进程间的数据交换一格式化的消息(Message)为单位。若通信间的进程不存在可直接访问的共享空间,则必须利用操作系统提供的消息传递方法实现进程通信。进程提供系统提供的发送消息和接收消息的两个原语进行交换,这种方式隐藏了通信的细节,通信对用户透明,简化了通信的程序设计。
- 管道通信
所谓管道,是指连接一个读进程和一个写进程以实现他们之间的通信一个共享文件,又名pipe文件(管道文件)。
管道机制必须提供以下三方面的协调能力:互斥、同步和确定对方的存在。
在linux中,管道是一种使用频繁的通信机制。本质上管道也是一种文件,但又和一般文件不同,管道可以克服使用文件通信的两个问题,具体表现如下:
1)限制管道大小
2)读进程可能工作地比写进程快。
注意:管道只能支持半双工通信,要实现互动通信,要定义两个管道。
2.1.6 线程和多线程模型
- 线程的基本概念
引入线程的目的是减小程序在并发执行时所付出的时空开销,提高操作系统并发性能。
线程可以理解为轻量级的进程,是一个基本的cpu执行单元,也是程序执行流的最小单元。由线程ID,程序计数器,寄存器集合和堆栈组成。
线程是进程的一个实体,是被系统独立调度和分配的基本单元。线程不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程可以并发执行。由于线程直接相互制约,致使线程在运行中呈现间断性。
线程也有就绪阻塞运行三种状态。
-
线程与进程比较
1)调度:线程切换代价低于进程
2)并发性:使操作系统具有更好的并发性
3)拥有资源:线程不拥有资源
4)独立性:进程有独立地址和资源,同一进程中线程共享进程的地址空间和资源
5)系统开销:创建撤销进程系统开销明显大于创建撤销线程
6)支持多处理机系统:单线程进程,进程只能运行在一个处理机,多线程进程,可将多个线程分配到多个处理机上执行。 -
线程的属性
-
线程的状态与转换
- 线程的组织与控制
- 线程的实现方式
线程的实现可以分为两类:用户级线程、内核级线程(内核支持的线程)
(1)用户级线程
(2)内核级线程
- 多线程模型
2.2 处理机调度
2.2.1 调度的概念
-
调度的基本概念
处理机调度是对处理机进行分配,即从就绪队列中按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程并发执行。 -
调度的层次
一个作业从提交开始直到完成,往往要经历以下三级调度:
(1)高级调度(作业调度)
内存与辅存之间的调度。对于每个作业只调入一次,调出一次。
(2)中级调度(内存调度)
中级调度实际上是存储器管理中的对换功能。
(3)低级调度(进程调度)
按照某种算法从就绪队列中选取一个进程,将处理机分配给它,是一种基本调度。 -
三级调度联系
-
补充:七状态模型
2.2.2 调度的目标
评价标准:
1)cpu利用率:
2)系统吞吐量:
表示单位时间内cpu完成的作业数量
3)周转时间:
4)等待时间:
进程处于处理机等待时间之和
衡量一个算法的优劣,常常只需简单地考察等待时间。
5)响应时间
用户提交请求到系统首次响应所用时间。是重要衡量标准。
2.2.3 调度的实现
- 调度程序(调度器)
- 调度的时机、切换与过程
- 进程调度方式
- 闲逛进程
- 两种线程的调度
2.2.4 典型的调度算法
-
先来先服务(FCFS)调度算法
每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使其投入运行,直到运行完成或因某种原因而阻塞才释放处理机。
-
短作业优先(SJF)调度算法
从后备队列中选择一个或若干个估计运行时间最短的作业,将他们调入内存运行。
- 高响应比优先(HRRN)调度算法
- 时间片轮转(RR)调度算法
- 优先级调度算法
- 多级反馈队列调度算法