七、线程
1、什么是线程?为什么要引入线程
线程是进程的一个实体,是CPU中分配资源的最小单位。
引入线程的原因:随着计算机科技的发展,单个进程的功能越来越庞大,但在功能上依然只能线性的执行它的一系列程序,为此引入线程机制。引入线程后,CPU的服务对象逐渐从进程转换成了线程,进程逐渐变成分配除CPU外的系统资源的分配单位,提高了系统的并发度。
注:引入线程前,进程是系统资源分配的最小单位,是程序执行流的最小单位;引入线程后,进程仅作为系统分配非CPU资源的最小单位。
2、线程与进程的区别
资源调度的基本单位 | 进程 | 线程 |
资源分配的基本单位 | 进程 | 进程,线程拥有资源的调度权,但没有分配权,所以不拥有任何资源 |
并发性 | 只能进程间的并发 | 不但可以进行进程与进程间的并发,也可以进行同进程间不同线程的并发 |
系统开销 | CPU在进程间的切换过程中开销较大 | 如果只是切换不同的线程,开销更小 |
独立性 | 进程间具有较强的独立性 | 线程由于本身体积小,对于线程间的通讯需求大,难度小 |
3、线程的属性
线程是处理机调度的单位
多CPU计算机中,各个线程可占用不同的CPU
每个线程都有一个线程ID、线程控制块(TCB)
线程也有就绪、阻塞、运行三种基本状态
线程几乎不拥有系统资源,同一进程的不同线程间共享进程的资源
由于共享内存地址空间,同一进程中的线程间通信甚至无需系统干预
同一进程中的线程切换,不会引起进程切换;不同进程中的线程切换,会引起进程切换
切换同进程内的线程,系统开销很小
切换进程,系统开销较大
4、线程的组织与控制
①线程控制块:组成与进程控制块类似,但不包括资源分配情况
②线程的三态:线程也有就绪、阻塞、运行三态(也可以是五态)
③线程的创建与终止:线程的创建与终止都是由线程的创建与终止函数执行;终止后的线程并不释放资源,而是等待其他线程执行分离函数,或重新被唤醒。
5、多线程模型
①用户级线程(ULT)与内核级线程(KLT)
用户级线程是指在线程管理都在用户态下完成的线程;内核级线程是指线程管理必须在内核态下完成的线程。内核级线程与用户级线程是映射关系。
注:内核级线程是分配核(cpu)的基本单位,内核级线程数太少,可能会出现“一核有难,多核围观”的局面
对于系统而言,用户级线程对于内核是透明的,因为无法参与资源分配,但由于用户级线程的切换不需要转换内核态,开销更小。
注:进程数≤内核级线程数≤用户级线程数
②多线程模型
多线程模型包括:一对一模型、一对多模型、多对多模型
一对多:线程的切换不需要经过核心态,开销小;当某一线程阻塞后,映射于同一个内核线程的线程都会阻塞
一对一:并发性更强(内核级线程数量多,资源分配更充分合理);开销大
多对多:该模型摒弃了以上的缺点,用户可以创建尽可能多的用户级线程,对应的内核级线程可以运行在多核心处理器上。当一个线程被阻塞,内核也会调度其他的线程来处理。但是整个模型实现起来较为困难。
八、处理机调度
1、什么是调度?
调度指在资源短缺的情况下,按照某种规律,对于需要处理的事件进行排序的行为
2、调度的层次
高级调度 | 作业调度 | 内存与外存间的调度 | 分配内存,建立进程的PCB | 进程的建立 | 一个进程只能高级调度一次 |
中级调度 | 进程调度 | 内存与外存间的调度 | 进程的挂起与唤醒 | 提高内存利用率和系统吞吐量 | 进程调度可能会多次进行 |
低级调度 | 进程调度 | 内存与CPU间的调度 | 进程的并发运行/就绪与运行 | 进程的并发运行 | 进程调度的频率一般很高。 |
注:七模型状态:在就绪状态和阻塞状态外额外添加就绪挂起和阻塞挂起两个状态,两个状态可以看成就绪状态和阻塞状态的扩展
3、调度算法的性能:
①、CPU利用率 :CPU忙碌时间/总时间
②、系统吞吐量:单位时间内CPU完成的作业量
③、周转时间:周转时间=作业完成时间-作业提交时间=等待作业调度的时间+在就绪队列上的时间+在CPU上运行的时间+等待I/O操作的时间。(由此引申出平均周转时间和带权周转时间;带权周转时间=作业周转时间/作业实际运行时间)
④、等待时间:进程处于等处理机状态时间之和。这是衡量算法好坏的重要指标
⑤、响应时间:从用户提交申请到首次产生响应的时间,主要用于交互性系统。
九、进程调度
1、什么时候进行进程调度?什么时候不能进程调度?
①、进程主动的放弃处理机:正常终止、发生异常主动进行中断、主动请求阻塞
②、进程被动的放弃处理机:时间片到、被其他中断信号中断、有更高级的进程进入就绪队列
进程在进行中断处理、进行原子操作(原语)、处在操作系统内核临界区的时候,不能进行进程调度(进程处在临界区时,有可能可以调度。)
注:临界资源:一段时间内只允许一个进程使用的资源。临界区:访问临界资源的代码段。
2、为什么当进程处于操作系统内核临界区的时候,不能进行进程调度?
当进程处于操作系统内核临界区时,会将就绪队列作为临界资源锁定,从而无法调动就绪队列的进程。
3、进程调度方式:剥夺调度方式(抢占方式)和非剥夺调度方式(非抢占方式)
剥夺调度方式:允许处理机暂停当前进程的执行(比较适合分时操作系统和实时操作系统)
4、进程切换与进程调度
广义的进程调度=选择一个进程+进程切换=选择一个进程+前一个进程让出处理机+后一个进程占用处理机