4.1 表3.5列出了在一个没有线程的操作系统中进程控制块的基本元素。对于多线程系统,这些元素中那些可能属于线程控制块,那些可能属于进程控制块?
这对于不同的系统来说通常是不同的,但一般来说,进程是资源的所有者,而每个线程都有它自己的执行状态。关于表3.5中的每一项的一些结论如下:进程标识:进程必须被标识,而进程中的每一个线程也必须有自己的ID。处理器状态信息:这些信息通常只与进程有关。进程控制信息:调度和状态信息主要处于线程级;数据结构在两级都可出现;进程间通信和线程间通信都可以得到支持;特权在两级都可以存在;存储管理通常在进程级;资源信息通常也在进程级。
4.2 请列出线程间的模式切换比进程间的模式切换开销更低的原因。
包含的状态信息更少。
4.3 在进程概念中体现出的两个独立且无关的特点是什么?
资源所有权和调度/执行。
4.4 给出在单用户多处理系统中使用线程的四个例子。
前台和后台操作,异步处理,加速执行和模块化程序结构。
4.5 哪些资源通常被一个进程中的所有线程共享?
例如地址空间,文件资源,执行特权等。
4.6 列出用户级线程优于内核级线程的三个优点。
1.由于所有线程管理数据结构都在一个进程的用户地址空间中,线程切换不需要内核模式的特权,因此,进程不需要为了线程管理而切换到内核模式,这节省了在两种模式间进行切换(从用户模式到内核模式;从内核模式返回用户模式)的开销。
2.调用可以是应用程序专用的。一个应用程序可能倾向于简单的轮询调度算法,而另一个应用程序可能倾向于基于优先级的调度算法。调度算法可以去适应应用程序,而不会扰乱底层的操作系统调度器。
3.用户级线程可以在任何操作系统中运行,不需要对底层内核进行修改以支持用户级线程。线程库是一组供所有应用程序共享的应用级软件包。
4.7 列出用户级线程相对于内核级线程的两个缺点。
1.在典型的操作系统中,许多系统调用都会引起阻塞。因此,当用户级线程执行一个系统调用时,不仅这个线程会被阻塞,进程中的所有线程都会被阻塞。
2.在纯粹的用户级进程策略中,一个多线程应用程序不能利用多处理技术。内核一次只把一个进程分配给一个处理器,因此一次进程中只能有一个线程可以执行。
4.8 定义jacketing。
Jacketing通过调用一个应用级的I/O例程来检查I/O设备的状态,从而将一个产生阻塞的系统调用转化为一个不产生阻塞的系统调用。
4.9 简单定义图4.8中列出的各种结构。
SIMD:一个机器指令控制许多处理部件步伐一致地同时执行。每个处理部件都有一个相关的数据存储空间,因此,每条指令由不同的处理器在不同的数据集合上执行。
MIMD:一组处理器同时在不同的数据集上执行不同的指令序列。主/从:操作系统内核总是在某个特定的处理器上运行,其他处理器只用于执行用户程序,还可能执行一些操作系统实用程序。
SMP:内核可以在任何处理器上执行,并且通常是每个处理器从可用的进程或线程池中进行各自的调度工作。集群:每个处理器都有一个专用存储器,而且每个处理部件都是一个独立的计算机。
4.10 列出SMP操作系统的主要设计问题。
同时的并发进程或线程,调度,同步,存储器管理,可靠性和容错。
4.11 给出在典型的单体结构操作系统中可以找到且可能是微内核操作系统外部子系统中的服务和功能。
设备驱动程序,文件系统,虚存管理程序,窗口系统和安全服务。
4.12 列出并简单解释微内核设计相对于整体式设计的七个优点。
一致接口:进程不需要区分是内核级服务还是用户级服务,因为所有服务都是通过消息传递提供的。
可扩展性:允许增加新的服务以及在同一个功能区域中提供多个服务。
灵活性:不仅可以在操作系统中增加新功能,还可以删减现有的功能,以产生一个更小、更有效的实现。
可移植性:所有或者至少大部分处理器专用代码都在微内核中。因此,当把系统移植到一个处理器上时只需要很少的变化,而且易于进行逻辑上的归类。
可靠性:小的微内核可以被严格地测试,它使用少量的应用程序编程接口(API),这就为内核外部的操作系统服务产生高质量的代码提供了机会。
分布式系统支持:微内核通信中消息的方向性决定了它对分布式系统的支持。
面向对象操作系统环境:在微内核设计和操作系统模块化扩展的开发中都可以借助面向对象方法的原理。
4.13 解释微内核操作系统可能存在的性能缺点。
通过微内核构造和发送信息、接受应答并解码所花费的时间比一次系统调用的时间要多。
4.14 列出即使在最小的微内核操作系统中也可以找到的三个功能。
低级存储器管理,进程间通信(IPC)以及I/O和中断管理。
4.15 在微内核操作系统中,进程或线程间通信的基本形式是什么?
消息。