本文若未注明均摘抄自《操作系统精髓与设计原理》:William Stallings著,陈向群、陈渝译,机械工业出版社出版第六版
关键字 | ||
---|---|---|
内核级线程 | 多线程 | 任务 |
轻量级线程 | 端口 | 线程 |
消息 | 进程 | 用户级线程 |
微内核 | 多对称处理器 | 单体结构的操作系统 |
进程映像是数据、程序、栈和进程控制块中定义的属性的集合。到目前为止金成德概念包含两个特点:资源所有权和调度/执行。为了区分这两个特点,分派的单位通常称做线程或轻量级进程(Light Weight Process, LWP),而拥有资源所有权的单位通常仍称做进程或任务
多线程是指操作系统在点歌进程内支持多个并发执行路径的能力。在一个多线程环境中运行的进程,可能有一个或多个线程,每个线程拥有独立的:
线程的重要优点有:
Mach开发者的研究表明,线程创建要比在UNIX中的进程创建快10倍
在支持线程的操作系统中,调度和分派是在线程基础上完成的
一般来说挂起态对线程没有什么意义,因为挂起是进程级的状态。 线程一般具有四种状态:派生、阻塞、解除阻塞和结束。
这里一个重要的问题是,当一个线程被阻塞,这个阻塞是否会阻止整个它所在的进程的运行,这个问题将在下一节详细讨论。
线程的实现可以分为两大类:用户级线程(User-Level Thread, ULT)和内核级线程(Kernel-Level Thread, KLT)。后者又称作内核支持的线程或轻量级进程
在一个纯粹的用户级线程软件中,有关县城管理的工作都由应用程序完成,内核意识不到线程的存在。因此线程的状态切换、线程间通信、派生、终止等对内核来说都是透明的,它们发生在用户空间中,并且发生在一个进程内,内核对此并不知情。
使用用户级线程而不是内核级线程有许多优点,包括:
用户级线程相对于内核级线程有两个明显的缺点:
博主:这两个缺点实在是太致命,以至于典型的需要并行编程的场景中,用户级线程都可以说是残废的。比如同时发送多个网络请求(每个请求都引起进程阻塞,无法并行请求)、比如密集型计算(只能调动一个CPU核心,多线程甚至不如单线程)。
Windows是采用内核级线程的一个典型例子。
首先,内核可以同时把同一个进程中的多个线程调度到多个处理器中;其次,如果进程中的一个线程被阻塞,内核可以调度同一个进程中的另一个线程。内核级线程的另一个优点就是内核例程自身也是可以使用多线程的。
内核级线程缺点在于,每次切换线程都需要内核态的状态切换。从下表可以看到用户及县城和内核级线程、内核级线程和进程之间都有一个数量级以上的性能差距
操作 | 用户级线程 | 内核级线程 | 进程 |
---|---|---|---|
Null Fork | 34 | 948 | 11300 |
Signal-Wait | 37 | 441 | 1840 |
不过这个差距是否真的能够实现取决于应用本身的性质。如果应用程序中的大多数线程切换都需要内核态的访问,那么基于用户及线程的方案不回避基于内核级线程的方案好多少。
有的操作系统提供了一种这组合的用户级线程/内核级线程设施(见图4.6c)。Solaris就是一个很好的例子
博主:可惜已经快要倒闭了。。。
线程:进程 | 描述 | 实例系统 |
---|---|---|
1:1 | 执行的每个线程是一个唯一的进程 | 传统UNIX |
M:1 | 进程具有地址空间和动态资源所有权,可以在进程中创建多个线程 | Windows NT、Solaris、Linux、OS/2、MACH |
1:M | 一个线程可以从一个进程环境迁移到另一个进程环境 | RS(Clouds)、Emerald |
M:N | 结合了M:1和1:M的情况 | TRIX |
在分布式操作系统领域,人们对把线程作为一个可以在地址空间中移动的实体具有很大兴趣。
传统上计算机被看作是顺序机器,每条指令是以操作序列的方式执行的。但这并不是完全真实的,长久以来指令流水线技术至少可以把取操作和执行操作重叠起来,这些都是并行执行的例子。本书分析两种最流行的通过复制处理器提供并行的手段:对称多处理(SMP)和集群。接下来分析对称多处理,16章分析集群。
Flynn首先提出的对并行处理器系统的分类仍然时最流行的分类法,他把计算机系统分为以下4类:
MIMD中,如果是每个处理器都有一个专用内存,那么每个处理器都可以看作一个单独的计算机,这类系统称作集群(Cluster),或者多计算机系统;如果共享一个公用内存,则称作共享内存多处理器系统。
在主/从结构中,操作系统内核总是在某一特定的处理器上运行,其他处理器只能用于执行用户程序,主处理器负责调度进程或线程。该方法的缺点如下:
在对称多处系统中,内核可以在任何处理器上执行,SMP方法增加了操作系统的复杂性,他必须确保两个处理器不会选择统一进程,并确保进程不会由于某种原因从队列中丢失。
在现代操作系统中,一个处理器通常至少有专用的一级高速缓存,由于每个本地高速缓存包含了一部分内存映像,如果修改了高速缓存中的一个字,可以想象得到,这使得在其他高速缓存中的这个字都变成无效的。这被称为高速缓存的一致性问题,通常是由硬件解决的。
微内核方法通过在Mach操作系统中的使用而得到推广,该操作系统就是现在的Macintosh Mac OSX。在不远的将来,这种通用的设计方法将用于大多数的个人计算机、工作站和服务器的操作系统。
微内核的基本原理是,只有最基本的操作系统功能才能放在内核里,许多传统上属于操作系统一部分的功能现在都是外部子系统,包括设备驱动、文件系统、文件系统、内存管理系统、窗口系统和安全服务。
一致接口、可扩展性、灵活性、可移植性、可靠性、分布式系统支持、对面向对象操作系统的支持。