您的位置:首页 > 其它

线程机制

2015-12-05 16:56 162 查看
任务:所谓的任务是指一个具有开始时间和完成时间的操作,任务是系统的基本工作单元。

多任务处理:同一个时间内计算机系统中如果允许多个进程同时处于运行状态,这便是多任务。

多重处理:对于有多个CPU的计算机,同时在每一个CPU上执行进程称为多重处理。

线程:线程不能独立存在,必须存在于进程中,各线程间共享进程空间的数据。线程是指进程内部的一个可独立执行的实体。线程是CPU运行的基本单位。

会话:一个会话是一组与用户接口(键盘、显示器、鼠标)相关联的一个或多个进程。一个会话代表了一个交互式的用户应用程序。

用户线程:用户线程仅存在于用户空间中,在用户层通过线程库来实现。线程库提供对线程创建、调度和管理的支持而无需内核支持。

内核线程:内核线程由操作系统内核直接支持的,线程创建、调度和管理都是在内核中进行的。

多线程:多线程是指把执行一个应用程序的进程划分成可以同时运行的线程。线程是可分派CPU的工作单元。

1.如何理解多任务处理和多重处理?

如果你正在使用一台只有一个CPU的计算机,操作系统可以进行多进程并发执行,实现多任务处理。如果你正在使用一台有多个CPU的计算机,操作系统既能进行多任务处理又能进行多重处理。可以认为多重处理是多任务处理在多机系统中的一个特例,多重处理是多任务处理的子集。

2.操作系统引入线程的目的是什么?

PCB增加了内存的空间开销,进程之间的切换需付出CPU的时间开销。在进一步提高进程的并发性时,人们发现进程切换开销所占的比重越来越大,同时进程间通信的效率也受到限制。线程的引入正是为了以小的开销来提高进程内的并发程度。

把进程的两个属性分离,即作为程序的执行单位,不同时作为独立分配资源的单位。对拥有资源的单位,不对之进行频繁切换。这就需要引入线程的概念。

3.如何理解线程是程序执行的基本单位的含义?

有了线程的概念后,程序的执行单位就由传统的进程变为线程,而进程则是作为资源的分配单位存在。线程的执行依赖进程提供的环境,并且使用进程的资源。同一进程内的不同线程之间的通信也变得简单了,因为它们都共享同一地址空间内的所有资源。拥有资源的进程不需要频繁切换,引入线程减少了多个进程的并发执行时系统所付出的空间和时间的开销,使系统具有更好的并发性。

4.进程与线程的主要区别是什么?

⑴资源和调度方面。线程是程序执行的基本单位,进程是拥有资源的基本单位。

⑵地址空间资源。不同进程的地址空间是相互独立的,而同一进程的各线程共享同一地址空间。

⑶通信关系。进程之间的通信比须使用操作系统提供的进程通信机制,而同一进程中的各线程间可以通过直接读/写全局变量来进行通信,甚至无需操作系统的干预。

⑷并发性。多进程之间可以并发执行,多线程之间也可以并发执行,而且同一进程内的多个线程之间也可并发执行。

⑸系统开销。由于创建进程或撤消进程时,系统都要为之分配或回收资源,操作系统所付出的开销远大于创建或撤消线程时的开销。在进行进程上下文切换时,涉及到整个当前进程CPU环境的保存及新调度到进程的CPU环境的设置。而线程上下文切换时,只需保存和设置少量寄存器内容,因此开销很小。另外,由于同一进程内的多个线程共享进程的地址空间,因此,同一进程中的线程上下文切换要更快。

5.引入线程之后,进程的概念发生了哪些变化?

引入线程之后,进程还是一个正在执行的程序的概念,进程是指一个或多个线程和相关系统资源的集合。系统资源包含数据和代码的存储器空间、打开的文件和I/O设备等。

6.线程有几种类型?请说明每种类型的优缺点?

操作系统通过两种不同方法支持线程,这两类线程就是用户层的用户线程和内核层的内核线程。

①在多机系统中,内核线程是CPU调度的基本单位。调度可以为一个进程中的多个内核线程分配多个CPU,使多个内核线程达到并行,提高了程序的执行速度和系统效率;一个多用户线程的应用程序不能充分利用多CPU技术。内核一次只把一个进程分配给一个CPU,因此一个进程中只有一个用户线程可以执行,无法享用多CPU带来的好处。

②如果进程中的一个内核线程被阻塞,内核可以调度同一个进程中的另一个内核线程;如果进程中的一个用户线程阻塞,则整个进程都必须等待,即使还有其他用户线程可以在应用程序内运行。

③系统调用。在用户线程调用一个系统调用时,由于内核把系统调用看作是整个进程的行为,于是使该进程等待,而调度另一个进程执行,同样是在内核完成系统调用返回时,进程才能继续执行;如果系统中设置的是内核线程,则CPU调度是以线程为单位的。当一个内核线程调用一个系统调用时,内核把系统调用只看作是该内核线程的行为,当该内核线程阻塞时,CPU调度便调度同一进程中的其他内核线程执行。这样就提高了执行效率。

④如果采用轮转调度算法,每个进程轮流执行一个时间片。进程P1中包含了10个用户线程,另一个进程P2中含有1个用户线程。这样一来,进程P2中线程的执行时间将是进程P1中各线程执行时间的10倍;如果系统中设置的是内核线程,情况就不一样了,它的调度是以内核线程为单位进行的,这样,进程P1可以获得的CPU时间是进程P2的10倍。

8.多线程技术有那些优点?

使用多线程技术编程具有如下四类主要优点:

⑴用户交互能力强,及时响应。如果对一个交互式应用程序采用多线程,即使其部分阻塞或执行较冗长的操作,那么该程序仍能继续执行,从而保证对用户的响应时间。例如,多线程网页浏览器在用一个线程装入图像时,能通过其中一个线程与用户交互。

⑵资源共享效率高。线程默认共享它们所属进程的内存和资源,允许一个应用程序在同一地址空间内有多个不同的活动线程。各线程间可以通过直接读/写全局变量来进行通信,故多线程间的通信效率高。

⑶系统开销少。进程创建所需要的内存和资源的分配比较昂贵。不过,由于线程能共享它们所属进程的资源,所以线程创建和上下文切换会更为经济。对于Solaris 2,进程创建要比线程创建慢30倍,而进程上下文切换要比线程上下文切换慢5倍。

⑷适合多机系统。多线程的优点之一是能充分使用多CPU体系结构,以便每个线程能并行运行在不同的CPU上。不管有多少CPU,单线程进程只能运行在一个CPU上。在多CPU机器上使用多线程增加了并发功能。对于单CPU体系结构,CPU通常在线程之间快速移动,但是实际上在一个时刻只能运行一个线程。

9.试说明会话、进程和线程三者之间的关系。

一个会话代表了一个交互式的用户应用程序;一个交互式的用户应用程序可能由多个进程并发执行;一个并发进程可能由多个线程并发执行。

10.为什么线程间的模式切换比进程间的模式切换费用更低?请列出原因。

线程间的模式切换比进程间的模式切换费用低。在进行进程上下文切换时,涉及到整个当前进程CPU环境的保存及新调度到进程的CPU环境的设置。而线程上下文切换时,只需保存和设置少量寄存器内容,因此开销很小。另外,由于同一进程内的多个线程共享进程的地址空间,因此,同一进程中的线程上下文切换要更快。

11. 哪些资源通常被一个进程中的所有线程共享?

同一进程内的线程共享内存和文件。

12. 举一个例子,说明多线程方案比单线程方案性能高。

如图3-3所示的例子中,显示了一个执行两个远程过程调用(RPC)的进程,两个RPC分别涉及两个不同的服务器。在进程模型中,结果是按顺序获得的,因此进程必须依次等待来自每个服务器的响应。在多线程模型中,为每个RPC使用一个独立的线程,两个RPC可以并发执行,提高了执行速度。

图3-3进程模型和多线程模型的远程过程调用

13.线程有几种常用的实现模型,请简述每种实现模型的优缺点?

一般有三种常用的多线程实现模型,即用户线程的多对一模型,内核线程的一对一模型和组合多对多模型。

多对一模型实现。由于内核不知道用户线程的活动,多对一模型将一个或多个用户线程映射到其隶属的进程上。由于线程管理是在用户空间进行的,因而效率比较高,但是如果一个线程执行系统调用而阻塞,那么整个进程就会阻塞。某一时刻同一个应用程序中只有一个线程能访问内核,多个线程不能并行运行在多CPU上。

多对一模型更好的并发功能。它也允许多个线程并行地运行在多机系统上。这种模型的惟一缺点是创建一个用户线程就需要创建一个相应的内核线程。由于创建内核线程的开销会影响应用程序的性能,所以这种模型的绝大多数实现限制了系统所支持的线程数量。

组合多对多模型多路复用了许多用户线程到同样数量或更小数量的内核线程上。内核线程的数量可能与特定应用程序或特定机器有关,位于多CPU上的应用程序可比单CPU上的应用程序分配更多数量的内核线程。该模型中同一个应用程序中的多个线程可以在多个CPU上并行地运行,某个线程阻塞不会引起整个进程阻塞

14.请描述线程库进行用户线程上下文切换的过程?

15.请描述内核进行内核线程上下文切换的过程?

16.现代操作系统有那些特征?

17.举两个多线程程序设计的例子来说明多线程比单线程方案提高性能。

18.写一个多线程的Pthread或Java程序来生成Fibonacci序列。这个程序要做到以下几点:用户运行程序时在命令行输入程序所要产生的Fibonacci序列的数,然后创建一个独立的线程来生成Fibonacci数。

19.写一个多线程的Pthread或Java程序来输出素数。这个程序要做到以下几点:用户运行程序时在命令行输入一个数字,然后程序创建一个独立新的线程来输出小于或等于用户所输人数的所有素数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: