Avoiding Blocking System Calls in a User-Level Threads Scheduler for Shared Memory Multiprocessors

这是我很早就下载的一个pdf文档,具体哪里下的忘了,特向作者致谢,这文档真的不错!题目我保留了,需要全文的朋友可以自己google,这篇文章我只翻译部分,略了很多,主要加上自己的想法。强烈建议阅读原文!
作者信息:
Andrew Borg
andborg@orbit.net.mt
University of Malta
June 26, 2001
摘要

smp近来大规模应用于并行计算,多线程被证明非常适合smp。程序员利用线程库编写多线程程序。线程库要么自己调度线程要么把调度任务交给操作系统内核。但是这两种方法都会引起一些问题。本文描述了两个用户级别的调度器,一个适于单cpu,一个适于smp。这些机制会使在执行阻塞系统调用时不会在内核 阻塞。为了实现这个目的,我们利用系统扩展里面一个叫做“调度激活”的机制。避免阻塞在那些需要同时处理很多客户端的服务器程序里非常有用。一个提供静态页面的web服务器也将从中受益。
1.引言
老版本的unix及类unix系统对多线程并发编程支持的很不让人满意。这些使得设计并行应用非常困难。多线程在很多并行编程中是同时协同过程的容器。
传统意义的线程被分为内核线程和用户线程。用户线程的主要优势就是高效,它的调度核心在用户空间实现。内核线程就不那么高效了,它需要内核来提供调度机制。这篇论文里面,我们提供一个调度激活机制来对用户线程提供内核级别的支持。通过这种犯法,用户线程保持着它的高效,并且调度核心仍然在用户空间。
2.背景
2.1.从进程到内核线程
线程的概念在1965年就有了。在那时它们不叫线程,而叫进程。