操作系统概念(高等教育出版社,第七版)复习——第四章:线程

第四章 线程

基础知识

线程

是进程的一个实体;

是被系统独立调度和分派的基本单位;

自己基本不拥有资源,只拥有一点在运行中必不可少的资源(e.g. 程序计数器、寄存器、栈);

可与同属于一个进程的其他线程共享进程所拥有的资源;

可以创建和撤销另一个线程;

同一进程中的多个线程可以并发执行;

称为light-weight process。

Process –heavy-weight process

一个进程一般拥有若干线程,至少需要一个线程;

进程不再是一个可执行的实体。

概述

       线程是CPU使用的基本单元,它由线程ID、程序计数器、寄存器集合和栈组成。

       一个传统重量级的进程只有单个控制线程,如果进程有多个控制线程,那么它能同时做多个任务。

中文版课本P111图4.1多线程进程和单线程进程的区别。

多线程编程的优点

       响应度高:如果对一个交互程序采用多线程,那么即使其部分阻塞或执行较冗长的操作,该程序仍能继续执行,从而增加了对用户的响应程度。

资源共享:线程默认共享它们所属进程的内存和资源。

经济:进程创建所需要的内存和资源的分配比较昂贵。由于线程能共享它们所属进程的资源,所以创建和切换线程会更经济。。

多处理器体系结构的利用:不管有多少CPU,单线程进程只能运行在一个CPU上,在多CPU上使用多线程加强了并发功能。

多线程模型

多对一模型(将许多用户线程映射到一个内核线程)

一对一模型(每个用户线程映射到一个内核线程)

多对多模型(多路复用了许多用户线程到同样数量或更小数量的内核线程上)

OS中进程的引入

使多个程序并发执行,改善资源利用率,提高系统的吞吐量。

OS中引入线程

为了减少程序并发执行时所付出的时空开销,使OS具有更好的并发性。

进程的两个基本特征

可拥有资源的独立单位,可以独立调度和分派的基本单位。

进程的这两个基本属性,使进程成为一个能独立运行基本单位,从而构成了进程并发执行的基础。

线程VS进程

调度:

传统的OS中,调度和分派的基本单位是进程,拥有资源的基本单位也是进程;

引入线程的OS中,调度和分派的基本单位是线程,拥有资源的基本单位是进程;

线程能轻装上阵,可显著地提高系统的并发度;

同一进程中,线程的切换不会引起进程切换;

不同进程中的线程之间的切换要引起进程的切换。

并发性:

引入线程的系统中,同一进程中的多个线之间可并发执行,使系统具有更好的并发性,进一步提高了资源的利用率及系统的吞吐量,例如web server、迅雷等。

拥有资源:

进程是拥有资源的独立单位;

线程仅拥有比不可少的资源,可以访问其隶属进程的资源;例如进程的代码段、数据段及系统资源,如已打开的文件、I/O设备等,可供同一进程的线程共享。

系统开销:

系统创建及撤销进程时的开销远远大于创建及撤销线程时的开销;

进程切换时的开销也远远大于线程切换时的开销;

由于同一进程中的多个线程具有相同的地址空间,致使他们之间的同步和通信的实现,也变得比较容易;

在有的OS中,线程的切换、同步和通信都无需OS内核的干预。

用户线程

用户级线程仅存在于用户空间中。对于这种线程的创建、 撤消、线程之间的同步与通信等功能,都无须利用系统调用来实现,而是通过用户级线程库来实现。

对于用户级线程的切换,通常是发生在一个应用进程的诸多线程之间,这时,也同样无需内核的支持,也是通过用户级线程库来管理的。

由于切换的规则远比进程调度和切换的规则简单,因而使线程的切换速度特别快

这种线程的管理是与内核无关的。

用户级线程执行时,要将线程映射到核心线程才能执行。

内核线程

       系统支持线程,无论是用户进程中的线程,还是系统进程中的线程,它们的创建、撤消和切换等,都是依靠内核实现的。

在内核空间中为每一个内核支持线程设置了一个线程控制块(TCB),内核是根据该控制块而感知某线程的存在的,并对其加以控制。

用户线程和内核线程类比顾客和银行职员

线程库

目前主要三种线程库:POSIXPthread   Win32   Java

 

课后作业

4.2

在用户和内核线程之间设置一种中间数据结构(通常为LWP)来控制用户级线程上下文切换。

 

4.4

多线程进程共享堆内存和全局变量,每个线程拥有自己的寄存器和栈。

 

4.5

不能。操作系统只能看到一个单一的进程,内核一次只能调度一个线程,并没有增加并发性,所以不能获得更好的性能。

 

4.7

LINE C:CHILD:value=5

LINE P:PARENT:value=0

 

4.8

a.内核线程数比处理器数少会导致部分处理器空闲,性能最低

b.内核线程数与处理器数相等会导致处理器不空闲,但是当发生系统调用时相应处理器会空闲,性能低。

c.内核线程数比处理器数多比用户线程数少会导致处理器不空闲,一个线程被调出则另一个被调入,处理器不会空闲,性能高。

 

思考题:

什么是线程,为什么要引入线程?

线程是进程的一个实体,是被系统独立调度和分派的基本单位。减少程序并发执行时所付出的时空开销,使操作系统具有更好的并发性。

 

用户级线程与内核级线程的概念,以及他们的优缺点:

用户级线程是受内核支持,无须内核管理的线程。用户级线程能够快速创建管理,但是如果内核是单线程的,一个用户级线程阻塞整个进程就会阻塞。

内核级线程是操作系统直接实现、管理和调度的一种线程。内合计线程效率低,缺乏灵活性,但一个线程阻塞不会使整个进程的所有线程阻塞。

映射模型:

一对多、一对一、多对多

 

你可能感兴趣的:(操作系统)