分布式操作系统-多线程.
由于内核对用户层线程没有感知,所有线程的 创建和调度在用户空间完成,不需要内核的干预。
缺点:如果内核是单线程的,那么任何用户级 线程执行一个阻塞系统调用将引起整个进程阻塞,即 便其它线程在该应用程序中是可运行的。
内核级线程:
由操作系统直接支持:内核负责在内核空间执 行线程创建、调度和管理。
线程之间的阻塞相互独立(既一个线程执行阻 塞系统调用时,内核可以调度进程里的其它线程执 行)。
传统的进程概念有两个严重的局限性。首先许多 应用想并发执行彼此间独立的任务,但又必须要共享 一个公共的地址空间和其他资源。但传统的进程概念 对它们以上的要求难以支持,往往把这些应用中的独 立的任务串行化,效率很低。其次传统的进程不能很 好地利用多处理器系统。因为一个进程在某个时刻只 能使用一个处理器。一个应用固然可以创建多个进程, 并把它们分到多个处理器上执行,但如何做到使用相 同的地址空间和资源?这些促使人们引起线程机制。
分布式操作系统
——分布式系统中的进程和处理机
线程与多线程
在单用户多任务的计算机中,如同在 Windows NT 中那样,除进程外,引入了 一 个新概念 ––– 线程 (thread)。对象、线程和进 程三者构成Windows NT 操作系统基本元成分。 线种概念在微型机多任务系统中十分重要。
进程在运行中要提出访问管理程序(系统调用) 的要求,例如提出I/O要求,也可能由于时钟而打断 了当前进程的运行,而调度其他就绪进程运行,也 就是经常会有进程开关问题。另外还有两次模式开 关(用户模式内核模式用户模式)的开销。所有这 些开销的总和,在一定程度上降低了并发进程所带 来的利益。
所以我们可以看出线程的重要优点:
1、在一个已有进程中创建一个新线程比创 建一个全新进程所需的时间少。
2、终止一个线程比终止一个进程花费的时 间少。
3、线程间切换比进程间切换花费的时间少。
4、线程提高了不同的执行程序间通信的效 率。在大多数操作系统中,独立进程间的通信需 要内核的干涉,以提供保护和通信所需要的机制。 但是,由于在同一个进程中的线程共享存储空间 和文件,它们无需调用内核就可以互相通信。
线程的概念
线程是进程内一个相对独立的、可调度的 执行单元。
根据线程定义可知线程有以下性质:
(1) 线程是进程内的一个相对独立的可执行单 元。
(2) 线程是操作系统中的基本调度单元,因此 线程中应包含有调度所需的必要信息。
(3) 由于线程是被调度的基本单元,而进程不 是调度的单元。所以每个进程在创建时,至少需 要同时为该进程创建一个线程。也就是说进程中 至少要有一个或一个以上线程,否则该进程无法 被调度执行。
更好的支持多CPU体系结构。
缺点:创建和管理比用户线程慢。
其它方案:
许多研究者都在尝试结合用户线程和内核线程 的长处,把两种线程结合起来,形成了三种多线程模 型:
多对一模型(m:1)
一对一模型(1:1)
多对多模型 (m:n)
基于线程的观点,可以把O.S.分为以下四类:
(1) 单进程和单线程系统
在这种操作系统中只有一个进程,而且每个进 程中只有一个线程。这种系统的代表是MS-DOS。也 可把单纯基于进程的操作系统看成是具有线程支,只 不过每 个进程中只有一个线程(进程也就是线程了)。
(4) 多进程和多线程系统
在这种操作系统中有多个进程。而且每个 进程有多个线程,是当前最为广泛的多线程操 作系统。现代操作系统如Windows NT等几乎都 是属于这种类型的。
实现一个线程包
有两种方法可以实现一个线程包:在用户空间 中和在内核中。对于这两种方法还存在一些争议,可 能会出现一种混合的方法,分别加以讨论
用户级线程:
用户线程在内核之上被支持,在用户层由一个 线程库实现。
该线程库为线程的创建、调度及管理提供支持, 而无需内核的支持。例如,UNIX并不支持线程,但 已经有了为它而写的各种各样的用户空间的线程包。
(4) 需要时,线程可以创建其他线程。
(5) 进程是被分给并拥有资源的基本单元,同 一进程内的多个线程共享该进程的资源。但线程 并不拥有资源,只是使用它们。
(6) 由于共享资源(包括数据和文件),所 以线程间需要通信和ቤተ መጻሕፍቲ ባይዱ步机制。
(7) 线程有生命期,有诞生和死亡。在生 命期中有状态的变化。
采用线程机制有些什么好处呢?对于多线 程机制而言,一个进程可以有多个线程,这些线 程共享该进程资源。这些线程驻留在相同的地址 空间,共享数据和文件。如果一个线程修改了一 个数据项,其他线程可以了解和使用此结果数据。 一个线程打开并读一个文件时,同一进程中的其 他线程也可以同时读此文件。总而言之,这些线 程运行在同一进程的相同的地址空间内。
…
…
(a)
(b)
(c)
(d)
基于线程和基于进程的操作系统
(2) 多进程和单线程系统
在这种操作系统中有多个进程操作系统。但 每个进程中只有一个线程。该系统的代表就是传 统意义上的UNIX操作系统。
以上两类是传统的操作系统,实际并没有线 程概念。
(3) 单进程和多线程系统
在这种操作系统中只有一个进程。但 每个进程有多个线程。Jave Run-time System可以认为是这种系统。