华南理工大学 陈虎 博士 tommychen74@yahoo.com.cn 多核处理器上的操作系统 华南理工大学 陈虎 博士 tommychen74@yahoo.com.cn
参考文献 Andrew Tanenbaum, Modern Operating Systems, 2nd Edition, Prentice Hall, 2001 David A. Solomon, Inside Microsoft Windows 2000(Windows 2000内核揭密), 3nd Edition, Microsoft Press,2001 Curt Schimmel, UNIX Systems for Modern Architectures(现代体系结构上的UNIX系统:内核程序员的SMP和Caching技术),Addison Wesley, 1994
线程与进程 进程:是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。 程序:只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体。 线程(Thread):是进程的一个实体,是CPU调度和分派的基本单位。
线程和进程 (续) 线程和进程的关系 线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。
什么是线程 一个执行状态(包括运行running, 准备好ready,挂起suspend等) 在线程未运行时需要保存上下文(PC,寄存器的值等) 线程有自己的独立运行堆栈 有些系统的线程可以有自己的私有存储空间 一个进程派生出的所有线程共享一个统一的地址空间
操作系统中的进程和线程 根据进程与线程的设置,操作系统大致分为如下类型: 单进程、单线程: MS-DOS大致是这种操作系统; 多进程、单线程: 多数UNIX(及类UNIX的LINUX) 是这种操作系统; 多进程、多线程: Win32(Windows NT/2000/XP等)、Solaris 2.x和OS/2都是这种操作系统; 单进程、多线程: VxWorks是这种操作系统。
用户级线程 所有线程管理都由用户实现; 线程切换开销小; 一个线程挂起导致所有线程挂起; 内核不知道线程的存在: 内核调度的单位是进程
内核级线程 内核调度的基本单位是线程(Windows) 内核保持了所有线程和进程的上下文现场
组合方案 可以直接创建内核级线程,也可以在内核级线程上创建应用级线程(Solaris)
线程的主要特点 使用线程的主要好处是: 缺陷: 在进程内创建、终止线程比创建、终止进程要快; 同一进程内的线程间切换比进程间的切换要快,尤其是用户级线程间的切换。 一个进程的所有线程共享该地址空间,线程之间的数据交换非常方便 线程对解决客户/服务器模型非常有效 缺陷: 一个线程出现异常情况可能导致所有线程崩溃。
多线程合理利用 多线程确实给应用开发带来了许多好处,在以下情况下可以考虑使用多线程: 应用程序中的各任务相对独立; 某些任务耗时较多; 各任务需要有不同的优先级; 对于一些实时系统应用,应考虑多线程。
多核处理器上操作系统关键问题 线程调度机制; 锁、信号量的实现机制; 存储器一致性的管理机制; 重点:线程调度机制
分时共享调度机制 有一个唯一的调度队列
空间共享调度策略 多个线程组被划分在固定的多处理器区域上
Windows 2000的多线程调度机制 可运行处理器集合掩码(affinity mask) 理想处理器(ideal processor) 指定了线程运行的处理器集合 初始化为所有可以使用的处理器 可以通过SetThreadAffinityMask函数改变 理想处理器(ideal processor) 线程应该运行的处理器 初始化时随机选择 可以通过SetThreadIdealProcessor函数改变 备选处理器(next processor) 线程运行的备选处理器
Windows 2000的线程调度策略 当有线程处于就绪状态时,按照以下次序选择处理器运行 优先选择理想处理器; 然后选择备选处理器; 当前处理器(正在调度代码的处理器) 从可运行处理器集合掩码的最低位向最高位扫描,检查是否有空闲处理器
Windows 2000的线程调度策略 如果所有处理器都处于忙的状态,则检查可否抢占其中一个处理器上的线程,检查顺序为: 理想处理器 备选处理器 可运行处理器掩码的最高位开始扫描
课堂讨论 相对于多进程而言,使用多线程在多核处理器上设计程序有何优势? 为什么在Windows 2000中总是希望将特定线程尽量指定在一个处理器上运行?