线程、对称多处理(SMP)和微内核
原书《操作系统精髓与设计原理——富兰克林》第四章。
由于该章大部分内容都在之前的文章里有过记录,所以就只把复习题和我的答案发上来。该章节主要介绍线程,对对称多处理和微内核只是进行了简要的介绍。
也可以去看一下我之前的文章:浅谈进程、线程和协程
1. 表3.5列出了在一个没有线程的操作系统中进程控制块的基本元素。对于多线程系统,这些元素中哪些可能属于线程控制块,哪些可能属于进程控制块。
首先我认为这好像没有定数,而且有些信息可能线程和进程都要有
标识符肯定属于进程,但线程也要有自己的标识符,处理器状态信息通常归进程所有,进程控制信息也归进程所有,但像数据结构(控制线程的等待状态)、通信(线程间通信)等信息在线程中也应该存在。
2. 请给出线程间的状态切换比进程间的状态切换开销更低的原因。
因为线程比进程具有更少的状态,同时同一个进程间的线程共享资源。
3. 在进程概念中体现出两个独立且无关的特点是什么
- 资源所有权:每个进程是独立的,具有互相隔离的内存空间以及资源
- 调度/执行
4. 给出在单用户处理器系统中使用线程的4个例子
- 模块化程序结构:一个程序中的两部分逻辑并无逻辑关系,可以独立执行
- 前台和后台工作:一个程序中有些任务工作在前台,有些工作在后台,你不希望后台任务的执行打断前台任务
- 异步处理:一个程序中可能会发起一些异步请求,比如网络,这时你希望程序中的其它部分还能正常运行而不是等待网络请求结束
- 执行速度:在IO密集型操作中提高执行速度,同时在CPU密集型任务中,也可以将同一进程中的线程分配到不同CPU核心上
5. 哪些资源通常被同一进程中的线程所共享
- 地址空间
- 打开的文件
- 执行特权
6. 列出用户级线程对于内核级线程的3个优点
- 在切换线程时需要花费的开销小,因为这完全不涉及到内核操作
- 无论操作系统是否支持线程,都可以在其之上使用用户级线程
- 线程调度算法不受操作系统的限制
7. 列出用户级线程对于内核级线程的2个缺点
- 由于操作系统完全不知道线程的存在,它还是以进程为单位来进行多道程序设计,所以当一个线程遇到阻塞调用时(如IO),它所在的进程被阻塞,那么其中所有的用户级线程都会被阻塞。这可以使用非阻塞调用来解决
- 同样由于操作系统完全不知道线程的存在,用户级线程无法在多核处理器上利用多个核心
8. 定义jacketing
作者大人啊,您只是提了一嘴,就让我定义
我认为应该是将阻塞的系统调用变成非阻塞的以用于支持用户级线程
11. 给出在典型的单体操作系统中可以找到,且可能是微内核操作系统外部子系统的服务和功能
文件系统、虚拟内存管理、系统安全服务等
12. 简单解释微内核设计对于整体结构设计的7个优点
我只知道微内核设计使内核足够简单,减少错误的发生,对于每个子系统服务,它们完全工作在用户态并且可以相互通信,它们每一个都足够小以至于可以很好的被测试。而且相较于传统的纵向层次结构,微内核的功能可以被横向扩展,并且非常灵活。
13. 解释微内核系统可能存在的性能缺点
因为大部分操作系统功能(除了最基本的功能)都在用户态提供,所以当用户程序调用这些功能时,需要于对应的子系统通信,其中包含编码解码的过程,这比一次系统调用需要消耗更多时间。
14. 请列出即使在最小的微内核系统中也可以找到的三个功能
- 物理存储管理
- 进程间通信
- IO中断管理
15. 在微内核系统中,进程或线程间通信的基础是什么?
消息