1、进程和线程
在多线程环境中,一个进程被定义成资源分配的单位和一个被保护的单位,与进程相关联的有:
- 存放进程映像(程序、数据、栈和进程控制块中定义的属性的集合)的虚拟地址空间
- 受保护的对处理器、其他进程(用于进程间通信)、文件和IO资源(设备和通道)的访问
在一个进程中,可能有一个或多个线程,
每个线程有:
- 线程执行状态(运行、就绪等)
- 在未运行时保存的线程上下文
- 一个执行栈
- 用于每个线程局部变量的静态存储空间
- 与进程内的其他线程共享的对进程的内存和资源的访问
在多线程进程中,
每个线程都有一个独立的栈,还有独立的线程控制块用于包含寄存器值、优先级和其他与线程相关的状态信息。
在大多数操作系统中,独立进程间的通信需要内核的介入,以提供保护和通信所需要的机制。但是,由于
在同一个进程中的线程共享内存和文件,他们无需调用内核就可以相互通信。
2、用户级线程
线程的实现可分为两大类,用户级线程(user-level thread,ULT)和
内核级线程(kernel-level thread,KLT)。后者又称为内核支持的线程或轻量级进程。
在一个纯粹的用户级线程软件中,有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。
使用用户级线程而不是内核级线程的优点有:
- 线程切换不需要内核态特权,进程并不需要为了线程管理而切换到内核态
- 可以为应用程序量身定做调度算法而不扰乱底层的操作系统调度程序
- 用户级线程可以在任何操作系统中运行,不需要对底层内核进行修改以支持用户级线程
相比内核级线程,用户级线程有两个明显的缺点:
- 许多系统调用都会引起阻塞,当用户级线程执行一个系统调用时,不仅这个线程会被阻塞,进程中的所有线程都会被阻塞
- 在纯粹的用户级线程策略中,一个多线程应用程序不能利用多处理技术
3、内核级线程
在一个纯粹的内核级线程软件中,有关线程管理的所有工作都是由内核完成的,应用程序部分没有进行线程管理的代码,只有一个到内核线程设施的应用程序编程接口(API)。
该方法克服了用户级线程方法的两个基本缺陷:内核可以同时把同一个进程的
多个线程调度到多个处理器中;如果进程中的一个线程被阻塞,内核可以调度同一个进程中的另一个线程。相比用户级线程它的主要缺点是:把控制从一个线程传送到进程中的另一个线程时,需要到内核的状态切换。
某些操作系统采用组合用户级线程和内核级线程的方法,同一个应用程序中的多个线程可以在多个处理器上并行的运行,某个会引起阻塞的系统调用不会阻塞整个进程。如果设计正确,该方法会结合两种线程的优点,同时减少他们的缺点。
线程:进程 描述 事例系统
1:1 每个线程是一个唯一的进程 传统的UNIX
M:1 一个进程中可以创建和执行多个线程 Windows NT、Solaries、Linux、MACH、OS/2、OS/390
1:M 一个线程可以从一个进程环境迁移到另一个进程环境 RS(Clouds) 、 Emerald
M:N 结合了M:1和1:M情况下的属性 TRIX
4、微内核
微内核的基本原理是,只有最基本的操作系统功能才能放在内核中。非基本的服务和应用程序在微内核之上构造,并在用户态下执行。
尽管什么应该在微内核中、什么应该在微内核外,不同的设计有不同的界限,但是共同的特点是许多传统上属于操作系统一部分的功能现在都在外部子系统,包括设备驱动程序、文件系统、虚存管理程序、窗口系统和安全服务。他们可以与内核交互,也可以互相交互。
微内核起着以下信息交换的作用:验证信息、在部件内部传递信息并授权访问硬件。微内核还执行保护功能:除非允许交换,否则它阻止消息传递。
微内核结构的优点:
- 一致接口:进程不区分内核级还是用户级,所有的服务都是通过消息传递提供的
- 可扩展性:新服务程序添加或修改过的服务程序的影响被限制在系统的一个子集中,不会导致需要构造一个新的内核
- 灵活性:可以在现有的操作系统中添加新功能或删除现有的功能
- 可移植性:大部分处理器专用代码都在微内核中,,当把系统移植到一个处理器上时只需要很少的变化,而且易于进行逻辑上的分类
- 可靠性:小的微内核可以被严格的测试,它使用少量的应用程序编程接口,不易影响到其他系统部件
- 分布式系统支持:微内核有助于提供分布式系统支持,包括分布式操作系统控制的集群
- 对面向对象操作系统的支持:微内核也适用于面向对象操作系统。
微内核潜在的缺点:
通过微内核构造和发送消息、接受应答并解码所花费的时间比进行一次系统调用的时间要多。
解决这个问题的一种方法是,把一些关键的服务程序和驱动程序重新放回操作系统,这将增大内核。这样可以减少用户-内核态切换的次数以及地址空间进程切换的次数,但是,它是以微内核的设计强度(最小接口、灵活性等)为代价减少性能损失的。
另一种方法是使得微内核不会变大而会变小。通过正确的设计,一个非常小的微内核可以消除性能损失并提高灵活性和可靠性。
4、微内核的设计
微内核必须包括直接依赖于硬件的功能,以及那些支持服务程序和应用程序在用户态下运行的功能。这些功能主要包括:
- 低级存储管理:微内核只要负责把每个虚拟页映射到一个物理页框,其他的保护进程地址空间、页面置换算法以及分页的逻辑等都可以在内核外实现
- 进程间通信(IPC):微内核操作系统中进程间的通信的基本形式是消息。消息由消息头和消息体组成,消息头描述了发送消息和接受消息的进程;消息体含有数据或者指向一个数据块的指针或者是关于进程的某些控制信息。 在典型的情况下,我们可以认为进程间通信基于与进程相关联的端口。端口实际上是发往某个特定进程的消息队列,与端口相关联是一组功能,用于表明哪些进程可以与这个进程进行通信。端口的标识和功能是由内核维护的。
- IO和中断管理:在微内核中以消息的方式处理硬件中断和把I/O端口包含到地址空间中。微内核可以识别中断但是不处理中断,它产生一条消息给与该中断相关联的用户级进程,把中断转换成消息的工作必须由微内核完成。