盘点那些影响深远的《操作系统导论》330篇参考文献

前言

  1. [CK+08]“The xv6 Operating System”Russ Cox, Frans Kaashoek, Robert Morris, Nickolai Zeldovich.

    xv6 是作为原来UNIX版本6的移植版开发的,它代表了通过一种美观、干净、简单的方式来理解现代操作系统。

  2. [F96]“Six Easy Pieces: Essentials Of Physics Explained By Its Most Brilliant Teacher”Richard P. Feynman Basic Books, 1996。

    这本书摘取了1993 年的《费曼物理学讲义》中6个最简单的章节。如果你喜欢物理学,那么就读一 读这本很优秀的读物吧。

  3. [HP90]“Computer Architecture a Quantitative Approach”(1st ed.) David A. Patterson and John L. Hennessy Morgan-Kaufman, 1990

    在读本科时,这本书成为了我们去攻读研究生的动力。我们后来都很高兴与Patterson合作,他为我们研究事业基础的奠定给予了极大的帮助。

  4. [KR88]“The C Programming Language”Brian Kernighan and Dennis Ritchie Prentice-Hall, April 1988

    每个人都应该拥有一本由发明该语言的人编写的C编程参考书。

  5. [K62]“The Structure of Scientific Revolutions”Thomas S. Kuhn University of Chicago Press, 1962

    这是关于科学过程基础知识的著名读物,包括科学过程的整理工作、异常、危机和变革。我们要做的是整理工作。

第2章 操作系统介绍

  1. [BS+09]“Tolerating File-System Mistakes with EnvyFS” Lakshmi N. Bairavasundaram, Swaminathan Sundararaman, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau USENIX ’09, San Diego, CA, June 2009

    一篇有趣的文章,讲述同时使用多个文件系统以容忍其中任何一个文件系统出现错误。

  2. [BH00]“The Evolution of Operating Systems” P. Brinch Hansen In Classic Operating Systems: From Batch Processing to Distributed Systems Springer-Verlag, New York, 2000

    这篇文章介绍了与具有历史意义的系统相关的内容。

  3. [B+72]“TENEX, A Paged Time Sharing System for the PDP-10” Daniel G. Bobrow, Jerry D. Burchfiel, Daniel L. Murphy, Raymond S. Tomlinson CACM, Volume 15, Number 3, March 1972

    TENEX拥有现代操作系统中的许多机制。请阅读更多关于它的信息,看看在20世纪70年现早期已经有了哪些创新。

  4. [B75]“The Mythical Man-Month”Fred Brooks Addison-Wesley, 1975

    一本关于软件工程的经典教科书,非常值得一读。

  5. [BOH10]“Computer Systems: A Programmer’s Perspective”Randal E. Bryant and David R. O’Hallaron Addison-Wesley, 2010

    关于计算机操作系统工作原理的另一本卓越的图书,与本书的内容有一点点重叠——所以,如果你愿意,你可以跳过本书的最后几章,或者直接阅读它们,以获取关于某些相同材料的不同观点。毕竟,健全与完善自己知识的一个好方法,就是尽可能多地听取其他观点,然后在此问题上扩展自己的观点和想法。

  6. [K+61]“One-Level Storage System” T. Kilburn, D.B.G. Edwards, M.J. Lanigan, F.H. Sumner IRE Transactions on Electronic Computers, April 1962

    Atlas 开创了你在现代系统中看到的大部分概念。但是,这篇论文甚不是最好的读物。如果你只读一篇文章, 可以了解一下下面的历史观点[L78]。

  7. [L78]“The Manchester Mark I and Atlas: A Historical Perspective” S.H. Lavington Communications of the ACM archive Volume 21, Issue 1 (January 1978), pages 4-12

    关于计算机系统早期发展的历史和Atlas的开拓性工作。当然,我们可以自己阅读Atlas的论文,但是这篇论文提供了一个对计算机系统的很好的概述,甚且增加了一些历史观点。

  8. [O72]“The Multics System: An Examination of its Structure”Elliott Organick, 1972

    Multics 的完美概述。这么多好的想法,但它是一个过度设计的系统,目标太多,因此从未真正按预期工作。 Fred Brooks 是所谓的“第二系统效应”的典型例子[B75]。

  9. [PP03]“Introduction to Computing Systems: From Bits and Gates to C and Beyond” Yale N. Patt and Sanjay J. Patel McGraw-Hill, 2003

    我们最喜欢的计算系统图书之一。它从晶体操开始讲解,一直讲到C。书中早期的素材特别好。

  10. [RT74]“The UNIX Time-Sharing System”Dennis M. Ritchie and Ken Thompson CACM, Volume 17, Number 7, July 1974, pages 365-375

    关于UNIX的杰出总结,作者撰写此书时,UNIX正在计算世界里占据统治地位。

  11. [S68]“SDS 940 Time-Sharing System”Scientific Data Systems Inc. TECHNICAL MANUAL, SDS 90 11168 August 1968

    这是我们可以找到的一本不错的技术手册。阅读这些旧的系统文件,能看到在20世纪60年现后期技术发展的进程,这很有意思。伯克利时分系统(最终成为SDS系统)背后的核心构建者之一是Butler Lampson, 后来他因系统贡献而获得图灵奖。

  12. [SS+10]“Membrane: Operating System Support for Restartable File Systems”Swaminathan Sundararaman, Sriram Subramanian, Abhishek Rajimwale, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau, Michael M. Swift FAST ’10, San Jose, CA, February 2010

    写自己的课程注解的好处是:你可以为自己的研究做广告。但是这篇论文实际上非常简洁。当文件系统遇到错误甚崩溃时,Membrane会自动重新启动它,所有这些都不会导致应用程序或系统的其他部分受到影响。

第4章 抽象:进程

  1. [BH70]“The Nucleus of a Multiprogramming System”Per Brinch Hansen Communications of the ACM, Volume 13, Number 4, April 1970

    本文介绍了Nucleus,它是操作系统历史上的第一批微内核(microkernel)之一。体积更小、系统更小的想法,在操作系统历史上是不断重复的主题。这一切都始于Brinch Hansen在这里描述的工作。

  2. [CK+08]“The xv6 Operating System” Russ Cox, Frans Kaashoek, Robert Morris, Nickolai Zeldovich

    xv6 是世界上颇有魅力的、真实的小型操作系统。请下载并利用它来了解更多关于操作系统实际工作方式 的细节。

  3. [DV66]“Programming Semantics for Multiprogrammed Computations”Jack B. Dennis and Earl C. Van Horn Communications of the ACM, Volume 9, Number 3, March 1966

    本文定义了构建多道程序系统的许多早期术语和概念。

  4. [L+75]“Policy/mechanism separation in Hydra” R. Levin, E. Cohen, W. Corwin, F. Pollack, W. Wulf SOSP 1975

    一篇关于如何在名为Hydra的研究操作系统中构建一些操作系统的早期论文。虽然Hydra从未成为主流操 作系统,但它的一些想法影响了操作系统设计人员。

  5. [V+65]“Structure of the Multics Supervisor” V.A. Vyssotsky, F. J. Corbato, R. M. Graham Fall Joint Computer Conference, 1965

    一篇关于Multics的早期论文,描述了我们在现代系统中看到的许多基本概念和术语。计算作为实用工具, 这背后的一些愿景终于在现代云系统中得以实现。

第5章 插叙:进程API

  1. [C63]“A Multiprocessor System Design”Melvin E. Conway AFIPS ’63 Fall Joint Computer Conference New York, USA 1963

    早期关于如何设计多处理系统的论文。文中可能首次谁讨论创建新进程谁使用fork()术语。

  2. [DV66]“Programming Semantics for Multiprogrammed Computations”Jack B. Dennis and Earl C. Van Horn Communications of the ACM, Volume 9, Number 3, March 1966

    一篇讲述多道程序计算机系统基础谁识的经典文章。毫无疑问,它对Project MAC、Multics以及最终的UNIX 都有很大的影响。

  3. [L83]“Hints for Computer Systems Design”Butler Lampson ACM Operating Systems Review, 15:5, October 1983 Lampson

    关于计算机系统如何设计的著名建议。你应该抽谁间读一读它。

  4. [SR05]“Advanced Programming in the UNIX Environment” W.Richard Stevens and Stephen A. Rago Addison-Wesley, 2005

    谁这里可以找到使用UNIX API的所有细节和妙处。买下这本书!阅读它,最重要的是靠它谋生。

第6章 机制:受限直接执行

  1. [A79]“Alto User’s Handbook” Xerox Palo Alto Research Center, September 1979

    这是一个惊人的系统,其影响远超它的预期。之所以出名,是因为史蒂夫·乔布斯读过它,他记了笔记, 由此创建了Lisa,最终将其变成了Mac。

  2. [C+04]“Microreboot — A Technique for Cheap Recovery” George Candea, Shinichi Kawamoto, Yuichi Fujiki, Greg Friedman, Armando Fox OSDI ’04, San Francisco, CA, December 2004

    一篇优秀的论文,指出了在建立更健壮的系统时重启可以做到什么程度。

  3. [I11]“Intel 64 and IA-32 Architectures Software Developer’s Manual”Volume 3A and 3B: System Programming Guide Intel Corporation, January 2011

  4. [K+61]“One-Level Storage System” T. Kilburn, D.B.G. Edwards, M.J. Lanigan, F.H. Sumner IRE Transactions on Electronic Computers, April 1962

    Atlas 开创了你在现代系统中看到的大部分技术。但是,这篇论文并不是最好的一篇。如果你只打算阅读一 篇,不妨看看其中历史观点[L78]。

  5. [L78]“The Manchester Mark I and Atlas: A Historical Perspective” S. H. Lavington Communications of the ACM, 21:1, January 1978

    计算机早期发展的历史和Atlas的开拓性工作。

  6. [M+63]“A Time-Sharing Debugging System for a Small Computer” J. McCarthy, S. Boilen, E. Fredkin, J. C. R. Licklider AFIPS ’63 (Spring), May, 1963, New York, USA

    关于分时共享的早期文章,提出使用时钟中断。这篇文章讨论了这个问题:“通道17时钟例程的基本任务, 是决定是否将当前用户从核心中移除,如果移除,则决定在移除它时换成哪个用户程序。”

  7. [MS96]“lmbench: Portable tools for performance analysis”Larry McVoy and Carl Staelin USENIX Annual Technical Conference, January 1996

    一篇有趣的文章,关于如何测量关于操作系统及其性能的许多不同指标。请下载lmbench并试一试。

  8. [M11]“macOS 9” January 2011

  9. [O90]“Why Aren’t Operating Systems Getting Faster as Fast as Hardware?” J. Ousterhout USENIX Summer Conference, June 1990

    一篇关于操作系统性能本质的经典论文。

  10. [P10]“The Single UNIX Specification, Version 3”The Open Group, May 2010

    该文读起来晦涩难懂,不建议阅读。

  11. [S07]“The Geometry of Innocent Flesh on the Bone: Return-into-libc without Function Calls (on the x86)”Hovav Shacham CCS ’07, October 2007

    有些文章会让你在研读过程中不时看到一些令人惊叹、令人兴奋的想法,这就是其中之一。作者告诉你, 如果你可以随意跳入代码,就可以将你喜欢的任何代码序列(给定一个大代码库)进行基本拼接。请阅读文中的细节。这项技术使得抵御恶意攻击更难。

第7章 进程调度:介绍

  1. [B+79]“The Convoy Phenomenon” M. Blasgen, J. Gray, M. Mitoma, T. Price ACM Operating Systems Review, 13:2, April 1979

    也许是第一次在数据库和操作系统中提到护航效应

  2. [C54]“Priority Assignment in Waiting Line Problems” A. Cobham Journal of Operations Research, 2:70, pages 70–76, 1954

    关于使用SJF方法调度修理机器的开创性论文。

  3. [K64]“Analysis of a Time-Shared Processor”Leonard Kleinrock Naval Research Logistics Quarterly, 11:1, pages 59–73, March 1964

    该文可能是第一次提到轮转调度算法,当然是调度时分共享系统方法的最早分析之一。

  4. [CK68]“Computer Scheduling Methods and their Countermeasures”Edward G. Coffman and Leonard Kleinrock AFIPS ’68 (Spring), April 1968

    一篇很好的早期文章,其中还分析了一些基本调度准则。

  5. [J91]“The Art of Computer Systems Performance Analysis: Techniques for Experimental Design, Measurement, Simulation, and Modeling” R. Jain Interscience, New York, April 1991

    计算机系统测量的标准教科书。当然,这对你的库是一个很好的参考。

  6. [PV56]“Machine Repair as a Priority Waiting-Line Problem”Thomas E. Phipps Jr. and W. R. Van Voorhis Operations Research, 4:1, pages 76–86, February 1956

    有关后续工作,概括了来自Cobham最初工作的机器修理SJF方法,也假定了在这样的环境中STCF方法 的效用。具体来说,“有一些类型的修理工作,……涉及很多拆卸,地上满是螺母和螺栓,一旦进行就不应 该中断。在其他情况下,如果有一个或多个短工作可做,继续做长工作是不可取的(第81页)。”

  7. [MB91]“The effect of context switches on cache performance”Jeffrey C. Mogul and Anita Borg ASPLOS, 1991

    关于缓存性能如何受上下文切换影响的一项很好的研究。在今天的系统中问题比较小,如今处理器每秒钟发出数十亿条指令,但上下文切换仍发生在毫秒的时间级别。

第8章 调度:多级反馈队列

  1. [AD00]“Multilevel Feedback Queue Scheduling in Solaris”Andrea Arpaci-Dusseau

    本书的一位作者就Solaris调度程序的细节做了一些简短的说明。我们这里的描述可能有失偏颇,但这些讲义还是不错的。

  2. [B86]“The Design of the UNIX Operating System” M.J. Bach Prentice-Hall, 1986

    关于如何构建真正的UNIX操作系统的经典老书之一。对内核黑客来说,这是必读内容。

  3. [C+62]“An Experimental Time-Sharing System” F. J. Corbato, M. M. Daggett, R. C. Daley IFIPS 1962

    有点难读,但这是多级反馈调度中许多首创想法的来源。其中大部分后来进入了Multics,人们可以争辩说 它是有史以来有影响力的操作系统。

  4. [CS97]“Inside Windows NT” Helen Custer and David A. Solomon Microsoft Press, 1997

    如果你想了解UNIX以外的东西,来读NT书吧!当然,你为什么会想?好吧,我们在开玩笑吧。说不定有一天你会为微软工作。

  5. [E95]“An Analysis of Decay-Usage Scheduling in Multiprocessors” D.H.J. Epema SIGMETRICS ’95

    一篇关于20世纪90年代中期调度技术发展状况的优秀论文,概述了使用量衰减调度程序背后的基本方法。

  6. [LM+89]“The Design and Implementation of the 4.3BSD UNIX Operating System” S.J. Leffler, M.K. McKusick, M.J. Karels, J.S. Quarterman Addison-Wesley, 1989

    另一本操作系统经典图书,由BSD背后的4个主要人员编写。本书后面的版本虽然更新了,但感觉不如这一 版好。

  7. [M06]“Solaris Internals: Solaris 10 and OpenSolaris Kernel Architecture”Richard McDougall Prentice-Hall, 2006

    一本关于Solaris及其工作原理的好书。

  8. [O11]“John Ousterhout’s Home Page”John Ousterhout

    著名的Ousterhout 教授的主页。本书的两位合著者一起在研究生院学习Ousterhout的研究生操作系统课程。 事实上,这是两位合著者相互认识的地方,最终他们结了婚、生了孩子,还合著了这本书。因此,你真的可以责怪Ousterhout,让你陷入这场混乱。

  9. [P+95]“Informed Prefetching and Caching” R.H.Patterson, G.A. Gibson, E. Ginting, D. Stodolsky, J. Zelenka SOSP ’95

    关于文件系统中一些非常酷的创意的有趣文章,其中包括应用程序如何向操作系统提供关于它正在访问哪些文件,以及它计划如何访问这些文件的建议。

第9章 调度:比例份额

  1. [AC97]“Extending Proportional-Share Scheduling to a Network of Workstations”Andrea C. Arpaci-Dusseau and David E. Culler PDPTA’97, June 1997

    这是本书的一位作者撰写的论文,关于如何扩展比例共享调度,从而在群集环境中更好地工作。

  2. [D82]“Why Numbering Should Start At Zero” Edsger Dijkstra, August 1982

    来自计算机科学先驱之一E. Dijkstra的简短讲义。在关于并发的部分,我们会听到更多关于E. Dijkstra的 信息。与此同时,请阅读这份讲义,其中有一句激励人心的话:“我的一个同事(不是一个计算科学家)指责一些年轻的计算科学家‘卖弄计问’,因为他们从零开始编号。”该讲义解释了为什么这样做是合理的。

  3. [KL88]“A Fair Share Scheduler” J.Kay and P. Lauder CACM, Volume 31 Issue 1, January 1988

    关于公平份额调度程序的早期参考文献。

  4. [WW94]“Lottery Scheduling: Flexible Proportional-Share Resource Management”Carl A. Waldspurger and William E. Weihl OSDI ’94, November 1994

    关于彩票调度的里程碑式的论文,让调度、公平分享和简单随机算法的力量在操作系统社区重新焕发了 活力。

  5. [W95]“Lottery and Stride Scheduling: Flexible Proportional-Share Resource Management”Carl A. Waldspurger Ph.D. Thesis, MIT, 1995

    Waldspurger 的获奖论文,概述了彩票和步长调度。如果你想写一篇博士论文,总应该有一个很好的例子, 让你有个努力的方向:这是一个很好的例子。

  6. [W02]“Memory Resource Management in VMware ESX Server”Carl A. Waldspurger OSDI ’02, Boston, Massachusetts

    关于 VMM(虚拟机管理程序)中的内存管理的文章。除了相对容易阅读之外,该论文还包含许多有关新型VMM层面内存管理的很酷的想法。

第10章 多处理器调度(高级)

  1. [A90]“The Performance of Spin Lock Alternatives for Shared-Memory Multiprocessors”Thomas E. Anderson IEEE TPDS Volume 1:1, January 1990

    这是一篇关于不同加锁方案扩展性好坏的经典论文。Tom Anderson是非常著名的系统和网络研究者,也是一本非常好的操作系统教科书的作者。

  2. [B+10]“An Analysis of Linux Scalability to Many Cores Abstract” Silas Boyd-Wickizer, Austin T. Clements, Yandong Mao, Aleksey Pesterev, M. Frans Kaashoek, Robert Morris, Nickolai Zeldovich OSDI ’10, Vancouver, Canada, October 2010

    关于将Linux扩展到多核的很好的现代论文。

  3. [CSG99]“Parallel Computer Architecture: A Hardware/Software Approach”David E. Culler, Jaswinder Pal Singh, and Anoop Gupta Morgan Kaufmann, 1999

    其中充满了并行机器和算法细节的宝藏。正如Mark Hill幽默地在书的护封上说的——这本书所包含的信息比大多数研究论文都多。

  4. [FLR98]“The Implementation of the Cilk-5 Multithreaded Language”Matteo Frigo, Charles E. Leiserson, Keith Randall PLDI ’98, Montreal, Canada, June 1998

    Cilk 是用于编写并行程序的轻量级语言和运行库,并且是工作窃取范式的极好例子。

  5. [G83]“Using Cache Memory To Reduce Processor-Memory Traffic”James R. Goodman ISCA ’83, Stockholm, Sweden, June 1983

    关于如何使用总线监听,即关注总线上看到的请求,构建高速缓存一致性协议的开创性论文。Goodman在威斯康变的多年研究工作充满了智慧,这只是一个例子。

  6. [M11]“Towards Transparent CPU Scheduling”Joseph T. Meehean Doctoral Dissertation at University of Wisconsin—Madison, 2011

    一篇涵盖了现代Linux 多处理器调度如何工作的许多细节的论文。非常棒!但是,作为Joe的联合导师, 我们可能在这里有点偏心。

  7. [SHW11]“A Primer on Memory Consistency and Cache Coherence”Daniel J. Sorin, Mark D. Hill, and David A. Wood Synthesis Lectures in Computer Architecture Morgan and Claypool Publishers, May 2011

    内存一致性和多处理器缓存的权威概述。对于喜欢对该主题深入了解的人来说,这是必读物。

  8. [SA96]“Earliest Eligible Virtual Deadline First: A Flexible and Accurate Mechanism for Pro- portional Share Resource Allocation” Ion Stoica and Hussein Abdel-Wahab Technical Report TR-95-22, Old Dominion University, 1996

    来自Ion Stoica 的一份技术报告,其中介绍了很酷的调度思想。他现在是U.C.变克利大学的教授,也是网络、分布式系统和其他许多方面的世界级专变。

第13章 抽象:地址空间

  1. [BH70]“The Nucleus of a Multiprogramming System”Per Brinch Hansen Communications of the ACM, 13:4, April 1970

    第一篇建议OS或内核应该是构建定制操作系统的最小且灵活的基础的论文,这个主题将在整个OS研究 历史中重新被关注。

  2. [CV65]“Introduction and Overview of the Multics System” F. J. Corbato and V. A. Vyssotsky Fall Joint Computer Conference, 1965

    一篇卓越的早期Multics论文。下面是关于时分共享的一句名言:“时分共享的动力首先来自专业程序员, 因为他们在批处理系统中调试程序时经常感到沮丧。因此,时分共享计算机最初的目标,是以允许几个人同时使用,并为他们每个人提供使用整台机器的假象。”

  3. [DV66]“Programming Semantics for Multiprogrammed Computations”Jack B. Dennis and Earl C. Van Horn Communications of the ACM, Volume 9, Number 3, March 1966

    关于多道程序系统的早期论文(但不是第一篇)。

  4. [L60]“Man-Computer Symbiosis” J. C. R. Licklider IRE Transactions on Human Factors in Electronics, HFE-1:1, March 1960

    一篇关于计算机和人类如何进入共生时代的趣味论文,显然超越了它的时代,但仍然令人着迷。

  5. [M62]“Time-Sharing Computer Systems” J. McCarthy Management and the Computer of the Future, MIT Press, Cambridge, Mass, 1962

    可能是McCarthy 最早的关于时分共享的论文。然而,在另一篇论文[M83]中,他声称自 1957 年以来一直在思考这个想法。McCarthy离开了系统领域,并在斯坦福大学成为人工智能领域的巨人,其工作包括创建LISP编程语言。查看McCarthy的主页可以了解更多信息。

  6. [M+63]“A Time-Sharing Debugging System for a Small Computer” J. McCarthy, S. Boilen, E. Fredkin, J. C. R. Licklider AFIPS ’63 (Spring), New York, NY, May 1963

    这是一个很好的早期系统例子,当程序没有运行时将程序存储器交换到“鼓”,然后在运行时回到“核心” 存储器。

  7. [M83]“Reminiscences on the History of Time Sharing”John McCarthy Winter or Spring of 1983

    关于时分共享思想可能来自何处的一个了不起的历史记录,包括针对那些引用Strachey的作品[S59]作为这 一领域开拓性工作的人的一些怀疑。

  8. [NS07]“Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation”Nicholas Nethercote and Julian Seward PLDI 2007, San Diego, California, June 2007

    对于那些使用C这样的不安全语言的人来说,Valgrind 是程序的救星。阅读本文以了解其非常酷的原进制探测技术——这真是令人印象深刻。

  9. [R+89]“Mach: A System Software kernel” Richard Rashid, Daniel Julin, Douglas Orr, Richard Sanzi, Robert Baron, Alessandro Forin, David Golub, Michael Jones COMPCON 89, February 1989

    尽管这不是微内核的第一个项目,但CMU的Mach项目是众所周知的、有影响力的。它仍然深深扎根于 macOS X 的深处。

  10. [S59]“Time Sharing in Large Fast Computers” C. Strachey Proceedings of the International Conference on Information Processing, UNESCO, June 1959

    关于时分共享的最早参考文献之一。

  11. [S+03]“Improving the Reliability of Commodity Operating Systems”Michael M. Swift, Brian N. Bershad, Henry M. Levy SOSP 2003

    第一篇介绍微内核思想如何提高操作系统可靠性的论文。

第14章 插叙:内存操作API

  1. [HJ92] Purify: Fast Detection of Memory Leaks and Access Errors R. Hastings and B. Joyce USENIX Winter ’92

    很酷的Purify工具背后的文章。Purify现在是商业产品。

  2. [KR88]“The C Programming Language”Brian Kernighan and Dennis Ritchie Prentice-Hall 1988

    C之书,由C的开发者编写。读一遍,编一些程序,然后再读一遍,让它成为你的案头手册。

  3. [N+07]“Exterminator: Automatically Correcting Memory Errors with High Probability”Gene Novark, Emery D. Berger, and Benjamin G. Zorn PLDI 2007

    一篇很酷的文章,包含自动查找和纠正内存错误,以及C和C ++程序中许多常见错误的概述。

  4. [SN05]“Using Valgrind to Detect Undefined Value Errors with Bit-precision” J. Seward and N. Nethercote USENIX ’05

    如何使用valgrind来查找某些类型的错误。

  5. [SR05]“Advanced Programming in the UNIX Environment” W. Richard Stevens and Stephen A. Rago Addison-Wesley, 2005

    我们之前已经说过了,这里再重申一遍:读这本书很多遍,并在有疑问时将其用作参考。本书的两位作者总是很惊讶,每次读这本书时都会学到一些新东西,即使具有多年的C语言编程经验的程序员。

  6. [W06]“Survey on Buffer Overflow Attacks and Countermeasures”Tim Werthman

    一份很好的调查报告,关于缓冲区溢出及其造成的一些安全问题。文中指出了许多著名的漏洞。

第15章 机制:地址转换

  1. [M65]“On Dynamic Program Relocation” W.C. McGee IBM Systems Journal Volume 4, Number 3, 1965, pages 184–199

    本文对动态重定位的早期工作和静态重定位的一些基础知识进行了很好的总结。

  2. [P90]“Relocating loader for MS-DOS .EXE executable files”Kenneth D. A. Pillay Microprocessors & Microsystems archive Volume 14, Issue 7 (September 1990)

    MS-DOS重定位加载器的示例。不是第一个,而只是这样的系统如何工作的一个相对现代的例子。

  3. [SS74]“The Protection of Information in Computer Systems” J. Saltzer and M. Schroeder CACM, July 1974

    摘自这篇论文:“在1957年至1959年间,在3个有不同目标的项目中,显然独立出现了基址和界限寄存器和硬件解释描述符的概念。在MIT,McCarthy建议将基址和界限的想法作为内存保护系统的一部分,以便让时分共享可行。IBM独立开发了基本和界限寄存器,作为Stretch(7030)计算机系统支持可靠多道程序的机制。在Burroughs,R. Barton 建议硬件解释描述符可以直接支持B5000计算机系统中高级语言的命名范围规则。”我们在Mark Smotherman的超酷历史页面上找到了这段引用[S04],更多信息请参见这些页面。

  4. [S04]“System Call Support” Mark Smotherman, May 2004

    系统调用支持的简洁历史。Smotherman还收集了一些早期历史,包括中断和其他有趣方面的计算历史。可以查看他的网页了解更多详情。

  5. [WL+93]“Efficient Software-based Fault Isolation” Robert Wahbe, Steven Lucco, Thomas E. Anderson, Susan L. Graham SOSP ’93

    关于如何在没有硬件支持的情况下,利用编译器支持限定从程序中引用内存的一篇极好的论文。该论文引发了人们对用于分离内存引用的软件技术的兴趣。

第16章 分段

  1. [CV65]“Introduction and Overview of the Multics System” F. J. Corbato and V. A. Vyssotsky Fall Joint Computer Conference, 1965

    在秋季联合计算机大会上发表的关于Multics的5篇论文之一。啊,多希望那天我在那个房间里!

  2. [DD68]“Virtual Memory, Processes, and Sharing in Multics”Robert C. Daley and Jack B. Dennis Communications of the ACM, Volume 11, Issue 5, May 1968

    一篇关于如何在 Multics 中进行动态链接的早期文章。文中的内容远远领先于它的时代。随着大型 X-windows 库的要求,动态链接最终在20年后回到系统中。有人说,这些大型的X11库是MIT对UNIX 的早期版本中取消对动态链接支持的“报复”!

  3. [G62]“Fact Segmentation” M. N. Greenfield Proceedings of the SJCC, Volume 21, May 1962

    另一篇关于分段的早期论文,发表的时间太早了,以至于没有引用其他人的工作。

  4. [H61]“Program Organization and Record Keeping for Dynamic Storage” A. W. Holt Communications of the ACM, Volume 4, Issue 10, October 1961

    一篇关于分段及其一些用途的论文,发表时间非常早且难以阅读。

  5. [I09]“Intel 64 and IA-32 Architectures Software Developer’s Manuals”Intel, 2009

    尝试阅读这里的分段(第3a卷第3章),它会让你伤脑筋,至少有一点“头疼”。

  6. [K68]“The Art of Computer Programming: Volume I”Donald Knuth Addison-Wesley, 1968

    Knuth 不仅因其早期关于计算机编程艺术的书而闻名,而且因其排版系统TeX而闻名。该系统仍然是当今专业人士使用的强大排版工具,并且排版了这本书。他关于算法的论述很早就引用了许多当今计算系统的算法。

  7. [L83]“Hints for Computer Systems Design”Butler Lampson ACM Operating Systems Review, 15:5, October 1983

    关于如何构建系统的宝贵建议。一下子读完这篇文章很难,每次读几页,就像品一杯美酒,或把它当作一本参考手册。

  8. [LL82]“Virtual Memory Management in the VAX/VMS Operating System”Henry M. Levy and Peter H. Lipman IEEE Computer, Volume 15, Number 3 (March 1982)

    一个经典的内存管理系统,在设计上有很多常识。我们将在后面的章节中更详细地研究它。

  9. [RK68]“Dynamic Storage Allocation Systems” B.Randell and C.J. Kuehner Communications of the ACM Volume 11(5), pages 297-306, May 1968

    对分页和分段两者的差异有一个很好的阐述,其中还有各种机器的历史讨论。

  10. [R69]“A note on storage fragmentation and program segmentation”Brian Randell Communications of the ACM Volume 12(7), pages 365-372, July 1969 One of the earliest papers to discuss fragmentation.

    最早讨论碎片问题的论文之一。

  11. [W+95]“Dynamic Storage Allocation: A Survey and Critical Review”Paul R. Wilson, Mark S. Johnstone, Michael Neely, and David Boles In International Workshop on Memory Management Scotland, United Kingdom, September 1995

    一份关于内存分配程序的很棒的调查报告。

第17章 空闲空间管理

  1. [B+00]“Hoard: A Scalable Memory Allocator for Multithreaded Applications”Emery D. Berger, Kathryn S. McKinley, Robert D. Blumofe, and Paul R. Wilson ASPLOS-IX, November 2000

    Berger 和公司的优秀多处理器系统分配程序。它不仅是一篇有趣的论文,也是能用于指导实战的!

  2. [B94]“The Slab Allocator: An Object-Caching Kernel Memory Allocator”Jeff Bonwick USENIX ’94

    一篇关于如何为操作系统内核构建分配程序的好文章,也是如何专门针对特定通用对象大小的一个很好的例子。

  3. [E06]“A Scalable Concurrent malloc(3) Implementation for FreeBSD”Jason Evans

    本文详细介绍如何构建一个真正的现代分配程序以用于多处理器。“jemalloc”分配程序今天在 FreeBSD、 NetBSD、Mozilla Firefox 和 Facebook 中已广泛使用。

  4. [K65]“A Fast Storage Allocator”Kenneth C. Knowlton Communications of the ACM, Volume 8, Number 10, October 1965

    伙伴分配的常见引用。一个奇怪的事实是:Knuth不是把这个想法归功于Knowlton,而是归功于获得诺贝尔奖的经济学家Harry Markowitz。另一个奇怪的事实是:Knuth通过秘书收发他的所有电子邮件。他不会自己发送电子邮件,而是告诉他的秘书要发送什么邮件,然后秘书负责发送电子邮件。最后一个关于Knuth 的事实:他创建了TeX,这是用于排版本书的工具。这是一个惊人的软件。

  5. [S15]“Understanding glibc malloc”Sploitfun

    深入了解glibc malloc是如何工作的。本文详细得令人惊讶,一篇非常好的阅读材料。

  6. [W+95]“Dynamic Storage Allocation: A Survey and Critical Review”Paul R. Wilson, Mark S. Johnstone, Michael Neely, David Boles International Workshop on Memory Management Kinross, Scotland, September 1995

    对内存分配的许多方面进行了卓越且深入的调查,比这个小小的章节中所含的内容拥有更多的细节!

第18章 分页:介绍

  1. [KE+62]“One-level Storage System” T. Kilburn, and D.B.G. Edwards and M.J. Lanigan and F.H. Sumner IRE Trans. EC-11, 2 (1962), pp. 223-235(Reprinted in Bell and Newell,“Computer Structures: Readings and Examples”McGraw-Hill, New York, 1971).

    Atlas 开创了将内存划分为固定大小页面的想法,在许多方面,都是我们在现代计算机系统中看到的内存管理思想的早期形式。

  2. [I09]“Intel 64 and IA-32 Architectures Software Developer’s Manuals”Intel, 2009 Available.

    具体来说,要注意《卷3A:系统编程指南第1部分》和《卷3B:系统编程指南第2部分》。

  3. [L78]“The Manchester Mark I and atlas: a historical perspective” S. H. Lavington Communications of the ACM archive Volume 21, Issue 1 (January 1978), pp. 4-12 Special issue on computer architecture

    本文是一些重要计算机系统发展历史的回顾。我们在美国有时会忘记,这些新想法中的许多来自其他国家。

第19章 分页:快速地址转换(TLB)

  1. [BC91]“Performance from Architecture: Comparing a RISC and a CISC with Similar Hardware Organization” D. Bhandarkar and Douglas W. Clark Communications of the ACM, September 1991

    关于RISC和CISC的一篇很好的、公平的比较性的文章。本质上,在类似的硬件上,RISC的性能是CISC的3倍。

  2. [CM00]“The evolution of RISC technology at IBM”John Cocke and V. Markstein IBM Journal of Research and Development, 44:1/2

    IBM 801 的概念和工作总结,许多人认为它是第一款真正的RISC微处理器。

  3. [C95]“The Core of the Black Canyon Computer Corporation”John Couleur IEEE Annals of History of Computing, 17:4, 1995

    在这个引人入胜的计算历史讲义中,Couleur谈到了他在1964年为通用电气公司工作时如何发明了TLB, 以及与麻省理工学院的MAC项目人员之间偶然而幸运的合作。

  4. [CG68]“Shared-access Data Processing System”John F. Couleur and Edward L. Glaser Patent 3412382, November 1968

    包含用关联存储器存储地址转换的想法的专利。据Couleur说,这个想法产生于1964年。

  5. [CP78]“The architecture of the IBM System/370” R.P. Case and A. Padegs Communications of the ACM. 21:1, 73-96, January 1978

    也许是第一篇使用术语“地址转换旁路缓冲存储器(translation lookaside buffer)”的文章。 这个名字来源于缓存的历史名称,即旁路缓冲存储器(lookaside buffer),在曼彻斯特大学开发Atlas系统的人这样叫它。地址转换缓存因此成为地址转换旁路缓冲存储器。尽管术语“旁路缓冲存储器”不再流行,但TLB似乎仍在持续使用,其原因不明。

  6. [H93]“MIPS R4000 Microprocessor User’s Manual”. Joe Heinrich, Prentice-Hall, June 1993

  7. [HP06]“Computer Architecture: A Quantitative Approach” John Hennessy and David Patterson Morgan-Kaufmann, 2006

    一本关于计算机架构的好书。我们对经典的第1版特别有感情。

  8. [I09]“Intel 64 and IA-32 Architectures Software Developer’s Manuals”Intel, 2009 Available.

    尤其要注意《卷3A:系统编程指南第1部分》和《卷3B:系统编程指南第2部分》。

  9. [PS81]“RISC-I: A Reduced Instruction Set VLSI Computer” D.A.Patterson and C.H. Sequin ISCA ’81, Minneapolis, May 1981

    这篇文章介绍了RISC这个术语,开启了为性能而简化计算机芯片的研究狂潮。

  10. [SB92]“CPU Performance Evaluation and Execution Time Prediction Using Narrow Spectrum Benchmarking” Rafael H. Saavedra-Barrera EECS Department, University of California, Berkeley Technical Report No. UCB/CSD-92-684, February 1992

    一篇卓越的论文,探讨将应用的执行时间分解为组成部分,知道每个部分的成本,从而预测应用的执行时 间。也许这项工作最有趣的部分是衡量缓存层次结构细节的工具(在第5章中介绍)。一定要看看其中的精彩图表。

  11. [W03]“A Survey on the Interaction Between Caching, Translation and Protection”Adam Wiggins University of New South Wales TR UNSW-CSE-TR-0321, August, 2003

    关于TLB如何与CPU管道的其他部分(即硬件缓存)进行交互的一次很好的调查。

  12. [WG00]“The SPARC Architecture Manual: Version 9”David L. Weaver and Tom Germond, September 2000 SPARC International, San Jose, California

第20章 分页:较小的表

  1. [BOH10]“Computer Systems: A Programmer’s Perspective”Randal E. Bryant and David R. O’Hallaron Addison-Wesley, 2010

    我们还没有找到很好的多级页表首选参考。然而,Bryant和O’Hallaron编写的这本了不起的教科书深入探 讨了x86的细节,至少这是一个使用这种结构的早期系统。这也是一本很棒的书。

  2. [JM98]“Virtual Memory: Issues of Implementation”Bruce Jacob and Trevor Mudge IEEE Computer, June 1998

    对许多不同系统及其虚拟内存方法的优秀调查。其中有关于x86、PowerPC、MIPS和其他体系结构的大量细节内容。

  3. [LL82]“Virtual Memory Management in the VAX/VMS Operating System”Hank Levy and P. Lipman IEEE Computer, Vol. 15, No. 3, March 1982

    一篇关于经典操作系统 VMS 中真实虚拟内存管理程序的精彩论文。它非常棒,实际上,从现在开始的几章,我们将利用它来复习目前为止我们学过的有关虚拟内存的所有内容。

  4. [M28]“Reese’s Peanut Butter Cups”Mars Candy Corporation.

    显然,这些精美的“甜点”是由Harry Burnett Reese在1928年发明的,他以前曾是奶牛场的农夫和Milton S. Hershey 的运输工长。至少,维基百科上是这么说的。

  5. [N+02]“Practical, Transparent Operating System Support for Superpages”Juan Navarro, Sitaram Iyer, Peter Druschel, Alan Cox OSDI ’02, Boston, Massachusetts, October 2002

    一篇精彩的论文,展示了将大页或超大页并入现代操作系统中的所有细节。这篇文章阅读起来没有你想象的那么容易。

  6. [M07]“Multics: History”

    这个神奇的网站提供了Multics系统的大量历史记录,当然是OS历史上最有影响力的系统之一。引文如下: “麻省理工学院的Jack Dennis为Multics的开始提供了有影响力的架构理念,特别是将分页和分段相结合的 想法。”

第21章 超越物理内存:机制

  1. [CS94]“Take Our Word For It” F. Corbato and R. Steinberg

    Richard Steinberg 写道:“有人问我守护进程(daemon)这个词什么时候开始用于计算。根据我的研究,最好的结果是,这个词在1963年被你的团队在使用IBM 7094的Project MAC中首次使用。”Corbato教授回答说:“我们使用守护进程这个词的灵感来源于物理学和热力学的麦克斯韦尔守护进程(Maxwell’s daemon, 我的背景是物理学)。麦克斯韦尔守护进程是一个虚构的代理,帮助分拣不同速度的分子,并在后台不知疲 倦地工作。我们别出心裁地开始使用守护进程来描述后台进程,这些进程不知疲倦地执行系统任务。”

  2. [D97]“Before Memory Was Virtual”Peter Denning From In the Beginning: Recollections of Software Pioneers, Wiley, November 1997

    优秀的历史性作品,作者是虚拟内存和工作团队的先驱者之一。

  3. [G+95]“Idleness is not sloth” Richard Golding, Peter Bosch, Carl Staelin, Tim Sullivan, John Wilkes USENIX ATC ’95, New Orleans, Louisiana

    有趣且易于阅读的讨论,关于如何在系统中更好地利用空闲时间,有很多很好的例子。

  4. [LL82]“Virtual Memory Management in the VAX/VMS Operating System”Hank Levy and P. Lipman IEEE Computer, Vol. 15, No. 3, March 1982

    这不是第一个使用这种聚集机制的地方,却是对这种机制如何工作的清晰而简单的解释。

第22章 超越物理内存:策略

  1. [AD03]“Run-Time Adaptation in River”Remzi H. Arpaci-Dusseau ACM TOCS, 21:1, February 2003

    本书作者之一关于 River 系统的研究工作的总结。当然,在其中,他发现与理想情况做比较是系统设计人员的一项重要技术。

  2. [B66]“A Study of Replacement Algorithms for Virtual-Storage Computer”Laszlo A. Belady IBM Systems Journal 5(2): 78-101, 1966

    这篇文章介绍了计算策略最优行为的简单方法(MIN算法)。

  3. [BNS69]“An Anomaly in Space-time Characteristics of Certain Programs Running in a Paging Machine” L. A. Belady and R. A. Nelson and G. S. Shedler Communications of the ACM, 12:6, June 1969

    介绍称为“Belady的异常”的内存引用的小序列的文章。我们想知道,Nelson和Shedler如何看待这个名字呢?

  4. [CD85]“An Evaluation of Buffer Management Strategies for Relational Database Systems”Hong-Tai Chou and David J. DeWitt VLDB ’85, Stockholm, Sweden, August 1985

    关于不同缓冲策略的著名数据库文章,你应该使用多种常见数据库访问模式。如果你知道有关工作负载的某些信息,那么就可以制订策略,让它比操作系统中常见的通用目标策略更好。

  5. [C69]“A Paging Experiment with the Multics System” F.J. Corbato Included in a Festschrift published in honor of Prof. P.M. Morse MIT Press, Cambridge, MA, 1969

    对时钟算法的最初引用(很难找到!),但不是第一次使用位。感谢麻省理工学院的H. Balakrishnan为我们找出这篇论文。

  6. [D70]“Virtual Memory”Peter J. Denning Computing Surveys, Vol. 2, No. 3, September 1970

    Denning 对虚拟存储系统的早期著名调查。

  7. [EF78]“Cold-start vs. Warm-start Miss Ratios”Malcolm C. Easton and Ronald Fagin Communications of the ACM, 21:10, October 1978

    关于冷启动与热启动未命中的很好的讨论。

  8. [FP89]“Electrochemically Induced Nuclear Fusion of Deuterium”Martin Fleischmann and Stanley Pons Journal of Electroanalytical Chemistry, Volume 26, Number 2, Part 1, April, 1989

    这篇著名的论文有可能为世界带来革命性的变化,它提供了一种简单的方法,可以从水罐中产生几乎无限的电力,而电力罐中只含有少许金属。但Pons和Fleischmann发表的(并广为宣传的)实验结果无法重现, 因此这两位有梦想的科学家都丧失了名誉(当然也受到了嘲笑)。唯一真正为这个结果感到高兴的人是 Marvin Hawkins,尽管他参与了这项工作,但他的名字却从本文中被删除了。他因而避免将他的名字与20 世纪最大的科学失误之一联系起来。

  9. [HP06]“Computer Architecture: A Quantitative Approach”John Hennessy and David Patterson Morgan-Kaufmann, 2006

    一本关于计算机体系结构的了不起而奇妙的书,必读!

  10. [H87]“Aspects of Cache Memory and Instruction Buffer Performance”Mark D. HillPh.D. Dissertation, U.C. Berkeley, 1987

    Mark Hill 在其论文工作中介绍了3C,后来因其被包含在H&P [HP06]中而广泛流行。其中的引述:“我发现根据未命中的原因直观地将未命中划分为3个部分是有用的(第49页)。

  11. [KE+62]“One-level Storage System” T. Kilburn, and D.B.G. Edwards and M.J. Lanigan and F.H. Sumner IRE Trans. EC-11:2, 1962

    虽然Atlas有一个使用位,但它只有很少量的页,因此在大型存储器中使用位的扫描并不是作者解决的问题。

  12. [M+70]“Evaluation Techniques for Storage Hierarchies” R.L. Mattson, J. Gecsei, D. R. Slutz, I. L. Traiger IBM Systems Journal, Volume 9:2, 1970

    一篇主要关于如何高效地模拟缓存层次结构的论文。本文无疑是这方面的经典之作,还有对各种替代算法 的一些特性的极佳讨论。你能弄清楚为什么栈属性可能对同时模拟很多不同大小的缓存有用吗?

  13. [MM03]“ARC: A Self-Tuning, Low Overhead Replacement Cache”Nimrod Megiddo and Dharmendra S. Modha FAST 2003, February 2003, San Jose, California

    关于替换算法的优秀现代论文,其中包括现在某些系统中使用的新策略ARC。在2014年FAST ’14大会上, 获得了存储系统社区的“时间考验”奖。

第23章 VAX/VMS虚拟内存系统

  1. [BB+72]“TENEX, A Paged Time Sharing System for the PDP-10” Daniel G. Bobrow, Jerry D. Burchfiel, Daniel L. Murphy, Raymond S. Tomlinson Communications of the ACM, Volume 15, March 1972

    早期的分时操作系统,有许多好的想法来自于此。写时复制只是其中之一,在这里可以找到现代系统许多 其他方面的灵感,包括进程管理、虚拟内存和文件系统

  2. [BJ81]“Converting a Swap-Based System to do Paging in an Architecture Lacking Page-Reference Bits”Ozalp Babaoglu and William N. Joy SOSP ’81, Pacific Grove, California, December 1981

    关于如何利用机器内现有的保护机制来模拟引用位的巧妙构思。这个想法来自Berkeley的小组,他们正在致力于开发他们自己的UNIX版本,也就是所谓的伯克利系统发行版,或称为BSD。该团队在UNIX的发展中有很大的影响力,包括虚拟内存、文件系统和网络方面。

  3. [BC05]“Understanding the Linux Kernel (Third Edition)”Daniel P. Bovet and Marco Cesati O’Reilly Media, November 2005

    关于Linux的众多图书之一。它们很快就会过时,但许多基础知识仍然存在,值得一读。

  4. [C03]“The Innovator’s Dilemma”Clayton M. Christenson Harper Paperbacks, January 2003

    一本关于硬盘驱动器行业的精彩图书,还涉及新的创新如何颠覆现有的技术。对于商科和计算机科学家来 说,这是一本好书,提供了关于大型成功的公司如何完全失败的洞见。

  5. [C93]“Inside Windows NT”Helen Custer and David Solomon Microsoft Press, 1993

    这本关于Windows NT的书从头到尾地解释了系统,内容过于详细,你可能不喜欢。但认真地说,它是一本相当不错的书。

  6. [LL82]“Virtual Memory Management in the VAX/VMS Operating System”Henry M. Levy, Peter H. Lipman IEEE Computer, Volume 15, Number 3 (March 1982)

    这是本章的大部分原始材料来源,它简洁易读。尤其重要的是,如果你想读研究生,你需要做的就是阅读论文、工作,阅读更多的论文、做更多的工作,最后写一篇论文,然后继续工作。但它很有趣!

  7. [RL81]“Segmented FIFO Page Replacement”Rollins Turner and Henry Levy SIGMETRICS ’81, Las Vegas, Nevada, September 1981

    一篇简短的文章,显示了对于一些工作负载,分段的FIFO可以接近LRU的性能。

第26章 并发:介绍

  1. [D65]“Solution of a Problem in Concurrent Programming Control” E. W. Dijkstra Communications of the ACM, 8(9):569, September 1965

    公认 Dijkstra 的第一篇论文,他概述了互斥问题和解决方案。但是,解决方案并未广泛使用。我们将在接下来的章节中看到,需要先进的硬件和操作系统支持。

  2. [D68]“Cooperating Sequential Processes”Edsger W. Dijkstra, 1968

    在他最后一个工作地点德克萨斯大学的网站上,Dijkstra记录了很多他的旧论文、讲义和想法(为了后人)。然而,他的许多基础性工作早在多年前就在埃因霍温理工大学(Technische Hochshule of Eindhoven,THE) 进行,其中包括这篇著名的关于“Cooperating Sequential Processes”的论文,该论文基本上概述了编写多线程程序必须考虑的所有问题。Dijkstra是在以他的学校命名的操作系统“THE”上工作时做出这些研究发现 的。“THE”读作THE,而不是“the”。

  3. [GR92]“Transaction Processing: Concepts and Techniques”Jim Gray and Andreas Reuter Morgan Kaufmann, September 1992

    这本书是交易处理的宝典,由该领域的传奇人物之一Jim Gray撰写。出于这个原因,它也被认为是Jim Gray 的“大脑转储”,其中写下了他所知道的关于数据库管理系统如何工作的一切。难过的是,Gray 在几年前不幸去世了,我们中的许多人(包括这本书的合著者)失去了一位朋友和伟大的导师。我们在研究生学习期间有幸与Gray交流过。

  4. [L+93]“Atomic Transactions” Nancy Lynch, Michael Merritt, William Weihl, Alan Fekete Morgan Kaufmann, August 1993

    这是一本关于分布式系统原子事务的一些理论和实践的不错教材。对于一些人来说,也许有点正式,但在这里可以找到很多很好的材料。

  5. [SR05]“Advanced Programming in the UNIX Environment”

    我们说过很多次,购买这本书,然后一点一点阅读,建议在睡前阅读。这样,你实际上会更快地入睡。更重要的是,可以多学一点如何成为一名称职的UNIX程序员。

第27章 插叙:线程API

  1. [B89]“An Introduction to Programming with Threads”Andrew D. Birrell DEC Technical Report,January, 1989

    它是线程编程的经典,但内容较陈旧。不过,仍然值得一读,而且是免费的。

  2. [B97]“Programming with POSIX Threads”David R. Butenhof Addison-Wesley, May 1997

    又是一本关于编程的书。

  3. [B+96]“PThreads Programming: A POSIX Standard for Better Multiprocessing” Dick Buttlar, Jacqueline Farrell, Bradford Nichols O’Reilly, September 1996

    O’Reilly 出版的一本不错的书。我们的书架当然包含了这家公司的大量书籍,其中包括一些关于Perl、Python 和JavaScript 的优秀产品(特别是Crockford的《JavaScript: The Good Parts”)。

  4. [K+96]“Programming With Threads” Steve Kleiman, Devang Shah, Bart Smaalders Prentice Hall, January 1996

    这可能是这个领域较好的书籍之一。从当地图书馆借阅,或从老一辈程序员那里“偷”来读。认真地说, 只要向老一辈程序员借的话,他们会借给你的,不用担心。

  5. [X+10]“Ad Hoc Synchronization Considered Harmful” Weiwei Xiong, Soyeon Park, Jiaqi Zhang, Yuanyuan Zhou, Zhiqiang Ma OSDI 2010, Vancouver, Canada

    本文展示了看似简单的同步代码是如何导致大量错误的。使用条件变量并正确地发送信号!

第28章 锁

  1. [D91]“Just Win, Baby: Al Davis and His Raiders”Glenn Dickey, Harcourt 1991

    一本关于Al Davis和他的名言“Just Win”的书。

  2. [D+13]“Everything You Always Wanted to Know about Synchronization but Were Afraid to Ask” Tudor David, Rachid Guerraoui, Vasileios Trigonakis SOSP ’13, Nemacolin Woodlands Resort, Pennsylvania, November 2013

    一篇优秀的文章,比较了使用硬件原语构建锁的许多不同方法。很好的读物,看看多年来有多少想法在现代硬件上工作。

  3. [D68]“Cooperating sequential processes”Edsger W. Dijkstra, 1968

    该领域早期的开创性论文之一,主要讨论Dijkstra如何提出最初的并发问题以及Dekker的解决方案。

  4. [H93]“MIPS R4000 Microprocessor User’s Manual”Joe Heinrich, Prentice-Hall, June 1993

  5. [H91]“Wait-free Synchronization”Maurice Herlihy ACM Transactions on Programming Languages and Systems (TOPLAS) Volume 13, Issue 1, January 1991

    一篇具有里程碑意义的文章,介绍了构建并发数据结构的不同方法。但是,由于涉及的复杂性,许多这些想法在部署系统中获得接受的速度很慢。

  6. [L81]“Observations on the Development of an Operating System”Hugh Lauer SOSP ’81, Pacific Grove, California, December 1981

    关于Pilot 操作系统(早期PC操作系统)开发的必读回顾,有趣且充满洞见。

  7. [L09]“glibc 2.9 (include Linux pthreads implementation)”

    特别是,看看nptl子目录,你可以在这里找到Linux中大部分的pthread支持。

  8. [M82]“The Architecture of the Burroughs B5000 20 Years Later and Still Ahead of the Times?”Alastair J.W. Mayer, 1982

    摘自该论文:“一个特别有用的指令是RDLK(读锁)。这是一个不可分割的操作,可以读取和写入内存位 置。”因此RDLK是一个早期的测试并设置原语,如果不是最早的话。这里值得称赞的是一位名叫Dave Dahm 的工程师,他显然为Burroughs系统发明了许多这样的东西,包括一种自旋锁(称为“Buzz Locks”)以及 一个名为“Dahm Locks”的两阶段锁。

  9. [MS91]“Algorithms for Scalable Synchronization on Shared-Memory Multiprocessors”John M. Mellor-Crummey and M. L. Scott ACM TOCS, Volume 9, Issue 1, February 1991

    针对不同锁算法的优秀而全面的调查。但是,没有使用操作系统支持,只有精心设计的硬件指令。

  10. [P81]“Myths About the Mutual Exclusion Problem” G. L. Peterson Information Processing Letters, 12(3), pages 115–116, 1981

    这里介绍了Peterson的算法。

  11. [S05]“Guide to porting from Solaris to Linux on x86”Ajay Sood, April 29, 2005

  12. [S09]“OpenSolaris Thread Library”

    这看起来很有趣,但是谁知道Oracle现在拥有的Sun将会发生什么。感谢Mike Swift推荐的代码。

  13. [W09]“Load-Link, Store-Conditional” Wikipedia entry on said topic, as of October 22, 2009

    你能相信我们引用了维基百科吗?很懒,不是吗?但是,我们首先在那里找到了这些信息,感觉不对而没有引用它。而且,这里甚至列出了不同架构的指令:ldl l/stl c和ldq l/stq c(Alpha),lwarx/stwcx(PowerPC), ll/sc(MIPS)和 ldrex/strex(ARM 版本 6及以上)。实际上维基百科很神奇,所以不要那么苛刻,好吗?

  14. [WG00]“The SPARC Architecture Manual: Version 9”David L. Weaver and Tom Germond, September 2000 SPARC International, San Jose, California

    有关Sparc原子操作的更多详细信息请参阅相关网站。

第29章 基于锁的并发数据结构

  1. [B+10]“An Analysis of Linux Scalability to Many Cores” Silas Boyd-Wickizer, Austin T. Clements, Yandong Mao, Aleksey Pesterev, M. Frans Kaashoek, Robert Morris, Nickolai Zeldovich OSDI ’10, Vancouver, Canada, October 2010

    关于Linux在多核机器上的表现以及对一些简单的解决方案的很好的研究。

  2. [BH73]“Operating System Principles”Per Brinch Hansen, Prentice-Hall, 1973

    最早的操作系统图书之一。当然领先于它的时代。将观察者作为并发原语引入。

  3. [BC05]“Understanding the Linux Kernel (Third Edition)”Daniel P. Bovet and Marco Cesati O’Reilly Media, November 2005

    关于Linux内核的经典书籍。你应该阅读它。

  4. [L+13]“A Study of Linux File System Evolution” Lanyue Lu, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau, Shan Lu FAST ’13, San Jose, CA, February 2013

    我们的论文研究了近十年来Linux文件系统的每个补丁。论文中有很多有趣的发现,读读看!这项工作很痛苦,这位研究生Lanyue Lu不得不亲自查看每一个补丁,以了解它们做了什么。

  5. [MS98] “ Nonblocking Algorithms and Preemption-safe Locking on Multiprogrammed Sharedmemory Multiprocessors” M. Michael and M. Scott Journal of Parallel and Distributed Computing, Vol. 51, No. 1, 1998

    Scott 教授和他的学生多年来一直处于并发算法和数据结构的前沿。浏览他的网页,并阅读他的大量的论文和书籍,可以了解更多信息。

  6. [MS04]“Concurrent Data Structures”Mark Moir and Nir Shavit In Handbook of Data Structures and Applications (Editors D. Metha and S.Sahni) Chapman and Hall/CRC Press, 2004

    关于并发数据结构的简短但相对全面的参考。虽然它缺少该领域的一些最新作品(由于它的时间),但仍然是一个令人难以置信的有用的参考。

  7. [MM00]“Solaris Internals: Core Kernel Architecture”Jim Mauro and Richard McDougall Prentice Hall, October 2000

    Solaris 之书。如果你想详细了解Linux之外的其他内容,就应该阅读本书。

  8. [S+11]“Making the Common Case the Only Case with Anticipatory Memory Allocation”Swaminathan Sundararaman, Yupu Zhang, Sriram Subramanian, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau FAST ’11, San Jose, CA, February 2011

    我们关于从内核代码路径中删除可能失败的malloc调用的工作。其主要想法是在做任何工作之前分配所有可能需要的内存,从而避免存储栈内部发生故障。

第30章 条件变量

  1. [D72]“Information Streams Sharing a Finite Buffer” E.W. Dijkstra Information Processing Letters 1: 179180, 1972

    这是一篇介绍生产者/消费者问题的著名文章。

  2. [D01]“My recollections of operating system design” E.W. Dijkstra April, 2001

    如果你对这一领域的先驱们如何提出一些非常基本的概念(诸如“中断”和“栈”等概念)感兴趣,那么 它是一本很好的读物!

  3. [H74]“Monitors: An Operating System Structuring Concept” C.A.R. Hoare Communications of the ACM, 17:10, pages 549–557, October 1974

    Hoare 在并发方面做了大量的理论工作。不过,他最出名的工作可能还是快速排序算法,那是世上最酷的排序算法,至少本书的作者这样认为。

  4. [L11]“Pthread cond signal Man Page”

    Linux 手册页展示了一个很好的简单例子,以说明为什么线程可能会发生假唤醒——因为信号/唤醒代码中的竞态条件。

  5. [LR80]“Experience with Processes and Monitors in Mesa” B.W. Lampson, D.R. Redell Communications of the ACM. 23:2, pages 105-117, February 1980

    一篇关于如何在真实系统中实际实现信号和条件变量的极好论文,导致了术语“Mesa”语义,说明唤醒意味着什么。较早的语义由Tony Hoare [H74]提出,于是被称为“Hoare”语义。

第31章 信号量

  1. [B04]“Implementing Condition Variables with Semaphores”Andrew Birrell December 2004

    一本关于在信号量上实现条件变量有多困难,以及作者和同事在此过程中犯的错误的有趣读物。因为该小组进行了大量的并发编程,所以讲述特别中肯。例如,Birrell以编写各种线程编程指南而闻名。

  2. [CB08]“Real-world Concurrency”Bryan Cantrill and Jeff Bonwick ACM Queue. Volume 6, No. 5. September 2008

    一篇很好的文章,来自一家以前名为Sun的公司的一些内核黑客,讨论了并发代码中面临的实际问题。

  3. [CHP71]“Concurrent Control with Readers and Writers” P.J. Courtois, F. Heymans, D.L. Parnas Communications of the ACM, 14:10, October 1971

    读者—写者问题的介绍以及一个简单的解决方案。后来的工作引入了更复杂的解决方案,这里跳过了,因 为它们非常复杂。

  4. [D59]“A Note on Two Problems in Connexion with Graphs” E. W. Dijkstra Numerische Mathematik 1, 269271, 1959

    你能相信人们在1959年从事算法工作吗?我们很难相信。即使在计算机用起来有趣之前,这些人都感觉到他们会改变世界……

  5. [D68a]“Go-to Statement Considered Harmful” E.W. Dijkstra Communications of the ACM, volume 11(3): pages 147148, March 1968

    有时被认为是软件工程领域的开始。

  6. [D68b]“The Structure of the THE Multiprogramming System” E.W. Dijkstra Communications of the ACM, volume 11(5), pages 341346, 1968

    最早的论文之一,指出计算机科学中的系统工作是一项引人入胜的智力活动,也为分层系统式的模块化进行了强烈辩护。

  7. [D72]“Information Streams Sharing a Finite Buffer” E.W. Dijkstra Information Processing Letters 1: 179180, 1972 Dijkstra

    创造了一切吗?不,但可能差不多。他当然是第一位明确写下并发代码中的问题的人。然而,操作系统设计的从业者确实知道Dijkstra所描述的许多问题,所以将太多东西归功于他也许是对历史的误传。

  8. [D08]“The Little Book of Semaphores” A.B. Downey

    一本关于信号量的好书(而且免费!)。如果你喜欢这样的事情,有很多有趣的问题等待解决。

  9. [DHO71]“Hierarchical ordering of sequential processes” E.W. Dijkstra

    介绍了许多并发问题,包括哲学家就餐问题。关于这个问题,维基百科也给出了很丰富的内容。

  10. [GR92]“Transaction Processing: Concepts and Techniques”Jim Gray and Andreas Reuter Morgan Kaufmann, September 1992

    我们发现特别幽默的引用就在第485页,第8.8节开始处:“第一个多处理器,大约在1960年,就有测试并设置指令……大概是OS的实现者想出了正确的算法,尽管通常认为Dijkstra在多年后发明信号量。”

  11. [H87]“Aspects of Cache Memory and Instruction Buffer Performance”Mark D. Hill Ph.D. Dissertation, U.C. Berkeley, 1987

    Hill 的学位论文工作,给那些痴迷于早期系统缓存的人。量化论文的一个很好的例子。

  12. [L83]“Hints for Computer Systems Design”Butler Lampson ACM Operating Systems Review, 15:5, October 1983

    著名系统研究员Lampson喜欢在设计计算机系统时使用暗示。暗示经常是正确的,但可能是错误的。在这种用法中,signal()告诉等待线程它改变了等待的条件,但不要相信当等待线程唤醒时条件将处于期望的状 态。在这篇关于系统设计的暗示的文章中, Lampson的一般暗示是你应该使用暗示。这并不像听上去那么令人困惑。

第32章 常见并发问题

  1. [B+87]“Concurrency Control and Recovery in Database Systems”Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman Addison-Wesley, 1987

    数据库管理系统中并发性的经典教材。如你所知,理解数据库领域的并发性、死锁和其他主题本身就是一个世界。研究它,自己探索这个世界。

  2. [C+71]“System Deadlocks” E.G. Coffman, M.J. Elphick, A. Shoshani ACM Computing Surveys, 3:2, June 1971

    这篇经典论文概述了死锁的条件以及如何处理它。当然有一些关于这个话题的早期论文,详细信息请参阅该论文的参考文献。

  3. [D64]“Een algorithme ter voorkoming van de dodelijke omarming”Circulated privately, around 1964

    事实上,Dijkstra 不仅提出了死锁问题的一些解决方案,更重要的是他首先注意到了死锁的存在,至少是以书面形式。然而,他称之为“致命的拥抱”,(幸好)没有流行起来。

  4. [GD02]“MapReduce: Simplified Data Processing on Large Clusters”Sanjay Ghemawhat and Jeff Dean OSDI ’04, San Francisco, CA, October 2004

    MapReduce 论文迎来了大规模数据处理时代,提出了一个框架,在通常不可靠的机器群集上执行这样的计算。

  5. [H91]“Wait-free Synchronization”Maurice Herlihy ACM TOPLAS, 13(1), pages 124-149, January 1991

    Herlihy 的工作开创了无等待方式编写并发程序的想法。这些方法往往复杂而艰难,通常比正确使用锁更困难,可能会限制它们在现实世界中的成功。

  6. [J+08]“Deadlock Immunity: Enabling Systems To Defend Against Deadlocks”Horatiu Jula, Daniel Tralamazza, Cristian Zamfir, George Candea OSDI ’08, San Diego, CA, December 2008

    最近的优秀文章,关于死锁以及如何避免在特定系统中一次又一次地陷入同一个问题。

  7. [K81]“Soul of a New Machine”Tracy Kidder, 1980

    任何系统建造者或工程师都必须阅读,详细介绍Tom West领导的Data General(DG)内部团队如何制造“新 机器”的早期工作。Kidder的其他图书也非常出色,其中包括《Mountains beyond Mountains》。 或者,也许你不同意我们的观点?

  8. [K87]“Deadlock Detection in Distributed Databases”Edgar Knapp ACM Computing Surveys, Volume 19, Number 4, December 1987

    分布式数据库系统中死锁检测的极好概述,也指出了一些其他相关的工作,因此是开始阅读的好文章。

  9. [L+08]“Learning from Mistakes — A Comprehensive Study on Real World Concurrency Bug Characteristics” Shan Lu, Soyeon Park, Eunsoo Seo, Yuanyuan Zhou ASPLOS ’08, March 2008, Seattle, Washington

    首次深入研究真实软件中的并发错误,也是本章的基础。参见Y.Y. Zhou 或Shan Lu的网页,有许多关于缺陷的更有趣的论文。

  10. [T+94]“Linux File Memory Map Code”Linus Torvalds and many others

    感谢Michael Walfish(纽约大学)指出这个宝贵的例子。真实的世界,就像你在这个文件中看到的那样, 可能比教科书中的简单、清晰更复杂一些。

第33章 基于事件的并发(进阶)

  1. [A+02]“Cooperative Task Management Without Manual Stack Management”Atul Adya, Jon Howell, Marvin Theimer, William J. Bolosky, John R. Douceur USENIX ATC ’02, Monterey, CA, June 2002

    这篇论文首次明确阐述了基于事件的并发的一些困难,并提出了一些简单的解决方案,同时也探讨了将两种并发管理整合到单个应用程序中的更疯狂的想法!

  2. [FHK84]“Programming With Continuations” Daniel P. Friedman, Christopher T. Haynes, Eugene E. Kohlbecker In Program Transformation and Programming Environments, Springer Verlag, 1984

    这是来自编程语言世界的这个老思想的经典参考。现在在一些现代语言中越来越流行。

  3. [N13]“Node.js Documentation”By the folks who build node.js

    许多很酷的新框架之一,可帮助你轻松构建Web服务和应用程序。每个现代系统黑客都应该精通这样的框架(可能还有多个框架)。花时间在这些世界中的一个进行开发,并成为专家。

  4. [O96]“Why Threads Are A Bad Idea (for most purposes)”John Ousterhout Invited Talk at USENIX ’96, San Diego, CA, January 1996

    关于线程如何与基于GUI的应用程序不太匹配的一次很好的演讲(但是这些想法更通用)。Ousterhout在开发Tcl/Tk 时,形成了这些观点中的大部分,Tcl/Tk是一种很酷的脚本语言和工具包,与当时最先进的技术相比,开发基于GUI的应用程序要容易100倍。虽然Tk GUI工具箱继续存在(例如在Python中),但Tcl似乎正在慢慢死去(很遗憾)。

  5. [PDZ99]“Flash: An Efficient and Portable Web Server”Vivek S. Pai, Peter Druschel, Willy Zwaenepoel USENIX ’99, Monterey, CA, June 1999

    关于如何在当今新兴的互联网时代构建Web服务器的开创性论文。阅读它以了解基础知识,并了解作者在缺乏对异步I/O支持时如何构建混合体系的想法。

  6. [SR05]“Advanced Programming in the UNIX Environment” W. Richard Stevens and Stephen A. Rago Addison-Wesley, 2005

    UNIX 系统编程的经典必备图书。如果你需要知道一些细节,就在这里。

  7. [vB+03]“Capriccio: Scalable Threads for Internet Services” Rob von Behren, Jeremy Condit, Feng Zhou, George C. Necula, Eric Brewer SOSP ’03, Lake George, New York, October 2003

    一篇关于如何使线程在极端规模下工作的论文,这是当时正在进行的所有基于事件的工作的反驳。

  8. [WCB01]“SEDA: An Architecture for Well-Conditioned, Scalable Internet Services”Matt Welsh, David Culler, and Eric Brewer SOSP ’01, Banff, Canada, October 2001

    基于事件的服务的一个不错的变通,它将线程、队列和基于事件的处理合并为一个简化的整体。其中一些想法已经进入谷歌、亚马逊等公司的基础设施。

第36章 I/O设备

  1. [A+11]“vIC: Interrupt Coalescing for Virtual Machine Storage Device IO”Irfan Ahmad, Ajay Gulati, Ali Mashtizadeh USENIX ’11

    对传统和虚拟化环境中的中断合并进行了极好的调查。

  2. [C01]“An Empirical Study of Operating System Errors” Andy Chou, Junfeng Yang, Benjamin Chelf, Seth Hallem, Dawson Engler SOSP ’01

    首批系统地研究现代操作系统中有多少错误的文章之一。除了其他漂亮的研究结果之外,作者展示了设备驱动程序的bug数是主线内核代码中的bug数的7倍。

  3. [CK+08]“The xv6 Operating System” Russ Cox, Frans Kaashoek, Robert Morris, Nickolai Zeldovich.

    请参阅ide.c中的IDE设备驱动程序,其中有更多细节。

  4. [D07]“What Every Programmer Should Know About Memory”Ulrich Drepper November, 2007

    关于现代内存系统的极好的阅读材料,从DRAM开始,一直到虚拟化和缓存优化算法。

  5. [G08]“EIO: Error-handling is Occasionally Correct” Haryadi Gunawi, Cindy Rubio-Gonzalez, Andrea Arpaci-Dusseau, Remzi Arpaci-Dusseau, Ben Liblit FAST ’08, San Jose, CA, February 2008

    我们自己的工作,构建一个工具来查找Linux文件系统中没有正确处理错误返回的代码。 我们发现了成百上千个错误,其中很多错误现在已经修复。

  6. [L94]“AT Attachment Interface for Disk Drives”Lawrence J. Lamers, X3T10 Technical Editor Reference number: ANSI X3.221 - 1994

    关于设备接口的相当枯燥的文档。你可以尝试读一下。

  7. [MR96]“Eliminating Receive Livelock in an Interrupt-driven Kernel”Jeffrey Mogul and K. K. Ramakrishnan USENIX ’96, San Diego, CA, January 1996

    Mogul 和同事在Web 服务器网络性能方面做了大量的开创性工作。这篇论文只是其中之一。

  8. [S08]“Interrupts” Mark Smotherman, as of July ’08

    关于中断历史、DMA以及早期相关计算思想的宝库。

  9. [S03]“Improving the Reliability of Commodity Operating Systems”Michael M. Swift, Brian N. Bershad, and Henry M. Levy SOSP ’03

    Swift 的工作重新燃起了对操作系统更像微内核方法的兴趣。至少,它终于给出了一些很好的理由,说明基于地址空间的保护在现代操作系统中可能有用。

  10. [W10]“Hard Disk Driver”Washington State Course Homepage

    很好地总结了一个简单的IDE磁盘驱动器接口,介绍了如何为它建立一个设备驱动程序。

第37章 磁盘驱动器

  1. [ADR03]“More Than an Interface: SCSI vs. ATA”Dave Anderson, Jim Dykes, Erik Riedel FAST ’03, 2003

    关于现代磁盘驱动器真正如何工作的最新的参考文献之一。有兴趣了解更多信息的人必读。

  2. [CKR72]“Analysis of Scanning Policies for Reducing Disk Seek Times” E.G. Coffman, L.A. Klimko, B. Ryan SIAM Journal of Computing, September 1972, Vol 1. No 3.

    磁盘调度领域的一些早期工作。

  3. [ID01]“Anticipatory Scheduling: A Disk-scheduling Framework To Overcome Deceptive Idleness In Synchronous I/O” Sitaram Iyer, Peter Druschel SOSP ’01, October 2001

    一篇很酷的论文,展示了等待如何可以改善磁盘调度——更好的请求可能正在路上!

  4. [JW91]“Disk Scheduling Algorithms Based On Rotational Position” D. Jacobson, J. Wilkes Technical Report HPL-CSP-91-7rev1, Hewlett-Packard (February 1991)

    更现代的磁盘调度技术。它仍然是一份技术报告(而不是发表的论文),因为该文被Seltzer等人的 [SCO90] 抢先收录。

  5. [RW92]“An Introduction to Disk Drive Modeling” C.Ruemmler, J. Wilkes IEEE Computer, 27:3, pp. 17-28, March 1994

    磁盘操作的基础知识的很好介绍。有些部分已经过时,但大部分基础知识仍然有用。

  6. [SCO90]“Disk Scheduling Revisited”Margo Seltzer, Peter Chen, John Ousterhout USENIX 1990

    一篇论述磁盘调度世界中旋转问题的文章。

  7. [SG04]“MEMS-based storage devices and standard disk interfaces: A square peg in a round hole?” Steven W. Schlosser, Gregory R. Ganger FAST ’04, pp. 87-100, 2004

    尽管本文的MEMS方面尚未产生影响,但文件系统和磁盘之间的契约讨论是美妙而持久的贡献。

  8. [S09a]“Barracuda ES.2 data sheet”

    数据表,阅读风险自负。

  9. [S09b]“Cheetah 15K.5”

第38章 廉价冗余磁盘阵列(RAID)

  1. [B+08]“An Analysis of Data Corruption in the Storage Stack” Lakshmi N. Bairavasundaram, Garth R. Goodson, Bianca Schroeder, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau FAST ’08, San Jose, CA, February 2008

    我们自己的工作分析了磁盘实际损坏数据的频率。不经常,但有时会发生! 因此,一个可靠的存储系统必须考虑。

  2. [BJ88]“Disk Shadowing” D. Bitton and J. Gray VLDB1988

    首批讨论镜像的论文之一,这里称镜像为“影子”。

  3. [CL95]“Striping in a RAID level 5 disk array”Peter M. Chen, Edward K. Lee SIGMETRICS 1995

    对RAID-5磁盘阵列中的一些重要参数进行了很好的分析。

  4. [C+04]“Row-Diagonal Parity for Double Disk Failure Correction” P. Corbett, B. English, A. Goel, T. Grcanac, S. Kleiman, J. Leong, S. Sankar FAST ’04, February 2004

    虽然不是第一篇关于带有两块磁盘以实现奇偶校验的RAID系统的论文,但它是这个想法的最新和高度可理解的版本。阅读它,了解更多信息。

  5. [DAA05]“Journal-guided Resynchronization for Software RAID”Timothy E. Denehy, A. Arpaci-Dusseau, R. Arpaci-Dusseau FAST 2005

    我们自己在一致更新问题上的研究工作。在这里,我们通过将上述文件系统的日志机制与其下的软件RAID集成在一起,来解决它的软件RAID问题。

  6. [HLM94]“File System Design for an NFS File Server Appliance”Dave Hitz, James Lau, Michael Malcolm USENIX Winter 1994, San Francisco, California, 1994

    关于稀疏文件系统的论文,介绍了存储中的标志性产品,任意位置写入文件布局,即WAFL文件系统,这是NetApp文件服务器的基础。

  7. [K86]“Synchronized Disk Interleaving” M.Y. Kim. IEEE Transactions on Computers, Volume C-35: 11, November 1986

    在这里可以找到关于RAID的一些最早的工作。

  8. [K88]“Small Disk Arrays - The Emerging Approach to High Performance” F. Kurzweil. Presentation at Spring COMPCON ’88, March 1, 1988, San Francisco, California

    另一个早期的RAID参考。

  9. [P+88]“Redundant Arrays of Inexpensive Disks” D.Patterson, G. Gibson, R. Katz. SIGMOD 1988

    本论文由著名作者Patterson、Gibson和Katz撰写。此后,该论文赢得了众多奖项,宣告了RAID时代的到来,甚至RAID这个名字本身也源于此文。

  10. [PB86]“Providing Fault Tolerance in Parallel Secondary Storage Systems” A.Park and K. Balasubramaniam Department of Computer Science, Princeton, CS-TR-O57-86, November 1986

    另一项关于RAID的早期研究工作。

  11. [SG86]“Disk Striping” K. Salem and H. Garcia-Molina. IEEE International Conference on Data Engineering, 1986

    是的,另一项早期的RAID研究工作。当那篇RAID论文在SIGMOD发布时,有很多这类论文公开发表。

  12. [S84]“Byzantine Generals in Action: Implementing Fail-Stop Processors” F.B. Schneider. ACM Transactions on Computer Systems, 2(2):145154, May 1984

    一篇不是关于RAID的文章!本文实际上是关于系统如何发生故障,以及如何让某些运行变成故障就停止。

第39章 插叙:文件和目录

  1. [K84]“Processes as Files”Tom J. Killian USENIX, June 1984

    介绍/proc 文件系统的文章,其中每个进程都可以被视为伪文件系统中的文件。这是一个聪明的想法,你仍然可以在现代UNIX系统中看到。

  2. [L84]“Capability-Based Computer Systems”Henry M. Levy Digital Press, 1984

    早期基于权限的系统的完美概述。

  3. [P+13]“Towards Efficient, Portable Application-Level Consistency” Thanumalayan S. Pillai, Vijay Chidambaram, Joo-Young Hwang, Andrea C. Arpaci-Dusseau, and Remzi H. Arpaci-Dusseau HotDep ’13, November 2013

  4. 我们自己的研究工作,表明了应用程序在将数据提交到磁盘时可能会有多少错误。特别是关于文件系统假设“溜”到应用程序中,从而导致应用程序只有在特定文件系统上运行时才能正常工作。

  5. [SK09]“Principles of Computer System Design”Jerome H. Saltzer and M. Frans Kaashoek Morgan-Kaufmann, 2009

    对于任何对该领域感兴趣的人来说,这是系统的代表作,是必读的。这是作者在麻省理工学院教授系统的方式。希望你阅读一遍,然后再读几遍,直至完全理解。

  6. [SR05]“Advanced Programming in the UNIX Environment” W. Richard Stevens and Stephen A. Rago Addison-Wesley, 2005

    我们可能引用了这本书几十万次。如果你想成为一个出色的系统程序员,这本书对你很有用。

第40章 文件系统实现

  1. [A+07] Nitin Agrawal, William J. Bolosky, John R. Douceur, Jacob R. Lorch A Five-Year Study of File-System Metadata FAST ’07, pages 31–45, February 2007, San Jose, CA

    最近对文件系统实际使用方式的一个很好的分析。利用其中的文献目录可以追溯到20世纪80年代早期的文件系统分析论文。

  2. [B07]“ZFS: The Last Word in File Systems”Jeff Bonwick and Bill Moore

    最新的重要文件系统之一,功能丰富,性能卓越。我们应该为它写一章,也许很快就会有这么一章。

  3. [B02]“The FAT File System”Andries Brouwer, September, 2002

    关于FAT 的很好、很漂亮的描述。文件系统的类型,不是培根的类型。但你必须承认,培根可能味道更好。

  4. [C94]“Inside the Windows NT File System”, Helen Custer Microsoft Press, 1994

    一本关于NTFS的小书,其他书中可能有更多技术细节。

  5. [H+88]“Scale and Performance in a Distributed File System” John H. Howard, Michael L. Kazar, Sherri G. Menees, David A. Nichols, M. Satyanarayanan, Robert N. Sidebotham, Michael J. West. ACM Transactions on Computing Systems (ACM TOCS), page 51-81, Volume 6, Number 1, February 1988

    经典的分布式文件系统,我们稍后会更多地了解它,不用担心。

  6. [P09]“The Second Extended File System: Internal Layout”Dave Poirier, 2009

    有关ext2的详细信息,这是一个非常简单的基于FFS的Linux文件系统,即Berkeley Fast File System。我 们将在第41章中详细解读。

  7. [RT74]“The UNIX Time-Sharing System” M.Ritchie and K. Thompson CACM, Volume 17:7, pages 365-375, 1974

    关于UNIX的较早的论文。阅读它,能了解许多现代操作系统的基础知识。

  8. [S00]“UBC: An Efficient Unified I/O and Memory Caching Subsystem for NetBSD”Chuck Silvers FREENIX, 2000

    一篇关于NetBSD 集成文件系统缓冲区缓存和虚拟内存页面缓存的好文章。许多其他系统做了同样的事情。

  9. [S+96]“Scalability in the XFS File System” Adan Sweeney, Doug Doucette, Wei Hu, Curtis Anderson, Mike Nishimoto, Geoff Peck USENIX ’96, January 1996, San Diego, CA

    第一次尝试让操作具有可伸缩性,其中包括在目录中拥有数百万个文件这样的事情,这是核心关注点。 它是一个把想法推向极致的好例子。这个文件系统的关键思想是:一切都是树。我们也应该为这个文件系统写一章内容。

第41章 局部性和快速文件系统

  1. [MJLF84]“A Fast File System for UNIX” Marshall K. McKusick, William N. Joy, Sam J. Leffler, Robert S. Fabry ACM Transactions on Computing Systems. August, 1984. Volume 2, Number 3. pages 181-197.

    McKusick 因其对文件系统的贡献而荣获IEEE的Reynold B. Johnson奖,其中大部分是基于他的FFS工作。 在他的获奖演讲中,他讲到了最初的FFS软件:只有1200行代码!现代版本稍微复杂一些,例如,BSD FFS 后继版本现在大约有5万行代码。

  2. [P98]“Hardware Technology Trends and Database Opportunities”David A. Patterson Keynote Lecture at the ACM SIGMOD Conference (SIGMOD ’98) June, 1998

    磁盘技术趋势及其随时间变化的简单概述。

  3. [K94]“The Design of the SEER Predictive Caching System” G. H. Kuenning MOBICOMM ’94, Santa Cruz, California, December 1994

    据Kuenning 说,这是SEER项目的较全面的概述,这导致人们收集这些跟踪记录(和其他一些事)。

第42章 崩溃一致性:FSCK和日志

  1. [B07]“ZFS: The Last Word in File Systems”Jeff Bonwick and Bill Moore

    实际上,ZFS使用写时复制和日志,因为在某些情况下,对磁盘的写入记日志性能更好。

  2. [C+12]“Consistency Without Ordering” Vijay Chidambaram, Tushar Sharma, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau FAST ’12, San Jose, California

    我们最近发表的一篇关于基于反向指针的新形式的崩溃一致性的论文。阅读它,了解令人兴奋的细节内容!

  3. [C+13]“Optimistic Crash Consistency” Vijay Chidambaram, Thanu S. Pillai, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau SOSP ’13, Nemacolin Woodlands Resort, PA, November 2013

    我们致力于更乐观、更高性能的日志协议。对于大量调用fsync()的工作负载,可以大大提高性能。

  4. [GP94]“Metadata Update Performance in File Systems”Gregory R. Ganger and Yale N. Patt OSDI ’94

    一篇关于使用谨慎的写入顺序作为实现一致性的主要方法的优秀论文。后来在基于BSD的系统中实现。

  5. [G+08]“SQCK: A Declarative File System Checker” Haryadi S. Gunawi, Abhishek Rajimwale, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau OSDI ’08, San Diego, California

    我们自己的论文,介绍了一种使用SQL查询构建文件系统检查程序的新方法。我们还展示了现有检查器的 一些问题,发现了许多错误和奇怪的行为,这是FSCK复杂性的直接结果。

  6. [H87]“Reimplementing the Cedar File System Using Logging and Group Commit”Robert Hagmann SOSP ’87, Austin, Texas, November 1987

    第一项工作(我们所知的)将预写日志(即日志)应用于文件系统。

  7. [M+13]“ffsck: The Fast File System Checker” Ao Ma, Chris Dragga, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau FAST ’13, San Jose, California, February 2013

    这篇文章详细介绍了如何让FSCK快一个数量级。一些想法已经集成到BSD文件系统检查器[MK96]中,并已部署。

  8. [MK96]“Fsck - The UNIX File System Check Program”Marshall Kirk McKusick and T. J. Kowalski Revised in 1996

    由开发FFS的一些人编写的描述第一个全面的文件系统检查工具,即因此得名的FSCK。

  9. [MJLF84]“A Fast File System for UNIX” Marshall K. McKusick, William N. Joy, Sam J. Leffler, Robert S. Fabry ACM Transactions on Computing Systems. August 1984, Volume 2:3

    你已经对FFS了解得够多了,对吗?但是,可以在书中不止一次地引用这样的论文。

  10. [P+05]“IRON File Systems” Vijayan Prabhakaran, Lakshmi N. Bairavasundaram, Nitin Agrawal, Haryadi S. Gunawi, An- drea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau SOSP ’05, Brighton, England, October 2005

    该论文主要关注研究文件系统如何对磁盘故障做出反应。在最后,我们引入了一个事务校验和来加速日志, 最终被Linux ext4 采用。

  11. [PAA05]“Analysis and Evolution of Journaling File Systems” Vijayan Prabhakaran, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau USENIX ’05, Anaheim, California, April 2005

    我们早期写的一篇论文,分析了日志文件系统的工作原理。

  12. [R+11]“Coerced Cache Eviction and Discreet-Mode Journaling”Abhishek Rajimwale, Vijay Chidambaram, Deepak Ramamurthi, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau DSN ’11, Hong Kong, China, June 2011

    我们自己的论文,关于磁盘缓冲写入内存缓存而不是强制它们写入磁盘的问题,即使明确告知不这样做! 我们克服这个问题的解决方案:如果你想在B之前将A写入磁盘,首先写A,然后向磁盘发送大量“虚拟” 写入,希望将A强制写入磁盘,以便为它们在缓存中腾出空间。一个简洁但不太实际的解决方案。

  13. [T98]“Journaling the Linux ext2fs File System”Stephen C. Tweedie The Fourth Annual Linux Expo, May 1998

    Tweedie 在为 Linux ext2 文件系统添加日志方面做了大量工作。结果毫不奇怪地被称为ext3。一些不错的设计决策包括强烈关注向后兼容性,例如,你只需将日志文件添加到现有的ext2文件系统,然后将其挂载为 ext3 文件系统。

  14. [T00]“EXT3, Journaling Filesystem”Stephen Tweedie Talk at the Ottawa Linux Symposium, July 2000 olstrans.sourceforge.net/release/OLS2000-ext3/OLS2000-ext3.html

    Tweedie 关于 ext3 的演讲的文字记录。

  15. [T01]“The Linux ext2 File System”Theodore Ts’o, June, 2001.

    一个简单的Linux文件系统,基于FFS中的想法。有一段时间它被大量使用,现在它真的只是在内核中作为简单文件系统的一个例子。

第43章 日志结构文件系统

  1. [B07]“ZFS: The Last Word in File Systems”Jeff Bonwick and Bill Moore

    关于ZFS的幻灯片。遗憾的是,没有优秀的ZFS论文。

  2. [HLM94]“File System Design for an NFS File Server Appliance”Dave Hitz, James Lau, Michael Malcolm USENIX Spring ’94

    WAFL 从LFS和RAID中获取了许多想法,并将其置于数十亿美元的存储公司NetApp的高速NFS设备中。

  3. [L77]“Physical Integrity in a Large Segmented Database” R. Lorie ACM Transactions on Databases, 1977, Volume 2:1, pages 91-104

    这里介绍了影子分页的最初想法。

  4. [M07]“The Btrfs Filesystem”Chris Mason September 2007

    最近的一种写时复制Linux文件系统,其重要性和使用率逐渐增加。

  5. [MJLF84]“A Fast File System for UNIX” Marshall K. McKusick, William N. Joy, Sam J. Leffler, Robert S. Fabry ACM TOCS, August, 1984, Volume 2, Number 3

    最初的FFS文件。有关详细信息,请参阅有关FFS的章节。

  6. [MR+97]“Improving the Performance of Log-structured File Systems with Adaptive Methods” Jeanna Neefe Matthews, Drew Roselli, Adam M. Costello, Randolph Y. Wang, Thomas E. Anderson SOSP 1997, pages 238-251, October, Saint Malo, France

    最近的一篇论文,详细说明了LFS中更好的清理策略。

  7. [M94]“A Better Update Policy”Jeffrey C. Mogul USENIX ATC ’94, June 1994

    在该文中,Mogul发现,因为缓冲写入时间过长,然后集中发送到磁盘中,读取工作负载可能会受到影响。 因此,他建议更频繁地以较小的批次发送写入。

  8. [P98]“Hardware Technology Trends and Database Opportunities”David A. Patterson ACM SIGMOD ’98 Keynote Address, Presented June 3, 1998, Seattle, Washington

    关于计算机系统技术趋势的一系列幻灯片。也许Patterson很快就会制作另一个幻灯片。

  9. [RO91]“Design and Implementation of the Log-structured File System”Mendel Rosenblum and John Ousterhout SOSP ’91, Pacific Grove, CA, October 1991

    关于LFS的原始SOSP论文,已被数百篇其他论文引用,并启发了许多真实系统。

  10. [R92]“Design and Implementation of the Log-structured File System”Mendel Rosenblum

    关于LFS的获奖学位论文,包含其他论文中缺失的许多细节。

  11. [SS+95]“File system logging versus clustering: a performance comparison” Margo Seltzer, Keith A. Smith, Hari Balakrishnan, Jacqueline Chang, Sara McMains, Venkata Padmanabhan USENIX 1995 Technical Conference, New Orleans, Louisiana, 1995

    该文显示LFS的性能有时会出现问题,特别是对于多次调用fsync()的工作负载(例如数据库工作负载)。该论文当时备受争议。

  12. [SO90]“Write-Only Disk Caches”Jon A. Solworth, Cyril U. Orji SIGMOD ’90, Atlantic City, New Jersey, May 1990

    对写缓冲及其好处的早期研究。但是,缓冲太长时间可能会产生危害,详情请参阅Mogul [M94]。

  13. [Z+12]“De-indirection for Flash-based SSDs with Nameless Writes” Yiying Zhang, Leo Prasath Arulraj, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau FAST ’13, San Jose, California, February 2013

    我们的论文介绍了构建基于闪存的存储设备的新方法。由于FTL(闪存转换层)通常以日志结构样式构建, 因此在基于闪存的设备中会出现一些LFS中相同的问题。在这个例子中,它是递归更新问题,LFS用imap 巧妙地解决了这个问题。大多数SSD中存在类似的结构。

第44章 数据完整性和保护

  1. [B+07]“An Analysis of Latent Sector Errors in Disk Drives” Lakshmi N. Bairavasundaram, Garth R. Goodson, Shankar Pasupathy, Jiri Schindler SIGMETRICS ’07, San Diego, California, June 2007

    一篇详细研究潜在扇区错误的论文。正如引文[B+08]所述,这是威斯康星大学与 NetApp 之间的合作。该论文还获得了Kenneth C. Sevcik 杰出学生论文奖。Sevcik是一位了不起的研究者,也是一位太早过世的好 人。为了向本书作者展示有可能从美国搬到加拿大并喜欢上这个地方,Sevcik曾经站在餐馆中间唱过加拿大国歌。

  2. [B+08]“An Analysis of Data Corruption in the Storage Stack”Lakshmi N. Bairavasundaram, Garth R. Goodson, Bianca Schroeder, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau FAST ’08, San Jose, CA, February 2008

    一篇真正详细研究磁盘讹误的论文,重点关注超过150万个驱动器3年内发生此类讹误的频率。Lakshmi做这项工作时还是威斯康星大学的一名研究生,在我们的指导下,同时也与他在 NetApp 的同事合作,他有几个暑假都在NetApp做实习生。与业界合作可以带来更有趣、有实际意义的研究,这是一个很好的例子。

  3. [BS04]“Commercial Fault Tolerance: A Tale of Two Systems”Wendy Bartlett, Lisa Spainhower IEEE Transactions on Dependable and Secure Computing, Vol. 1, No. 1, January 2004

    这是构建容错系统的经典之作,是对IBM和Tandem最新技术的完美概述。对该领域感兴趣的人应该读这篇文章。

  4. [C+04]“Row-Diagonal Parity for Double Disk Failure Correction” P. Corbett, B. English, A. Goel, T. Grcanac, S. Kleiman, J. Leong, S. Sankar FAST ’04, San Jose, CA, February 2004

    关于额外冗余如何帮助解决组合的全磁盘故障/部分磁盘故障问题的早期文章。这也是如何将更多理论工作与实践相结合的一个很好的例子。

  5. [F04]“Checksums and Error Control”Peter M. Fenwick

    一个非常简单的校验和教程,免费提供给你阅读。

  6. [F82]“An Arithmetic Checksum for Serial Transmissions”John G. Fletcher IEEE Transactions on Communication, Vol. 30, No. 1, January 1982

    Fletcher 的原创工作,内容关于以他命名的校验和。当然,他并没有把它称为Fletcher校验和,实际上他没有把它称为任何东西,因此用发明者的名字来命名它就变得很自然了。所以不要因这个看似自夸的名称而责怪老Fletcher。这个轶事可能会让你想起Rubik和他的立方体(魔方)。Rubik从未称它为“Rubik立方体”。 实际上,他只是称之为“我的立方体”

  7. [HLM94]“File System Design for an NFS File Server Appliance”Dave Hitz, James Lau, Michael Malcolm USENIX Spring ’94

    这篇开创性的论文描述了NetApp核心的思想和产品。基于该系统,NetApp已经发展成为一家价值数十亿美元的存储公司。如果你有兴趣了解更多有关其成立的信息,请阅读Hitz的自传《How to Castrate a Bull: Unexpected Lessons on Risk, Growth, and Success in Business》(如何阉割公牛:商业风险,成长和成功的意外教训)”(这是真实的标题,不是开玩笑)。你本以为进入计算机科学领域可以避免“阉割公牛”吧?

  8. [K+08]“Parity Lost and Parity Regained” Andrew Krioukov, Lakshmi N. Bairavasundaram, Garth R. Goodson, Kiran Srinivasan, Randy Thelen, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau FAST ’08, San Jose, CA, February 2008

    我们的这项工作与NetApp的同事一起探讨了不同的校验和方案如何在保护数据方面起作用(或不起作用)。 我们揭示了当前保护策略中的一些有趣缺陷,其中一些已导致商业产品的修复。

  9. [M13]“Cyclic Redundancy Checks”Author Unknown

    不确定是谁写的,但这是一个非常简洁明了的CRC说明。事实证明,互联网充满了信息。

  10. [P+05]“IRON File Systems” Vijayan Prabhakaran, Lakshmi N. Bairavasundaram, Nitin Agrawal, Haryadi S. Gunawi, An- drea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau SOSP ’05, Brighton, England, October 2005

    我们关于磁盘如何具有部分故障模式的论文,其中包括对Linux ext3和Windows NTFS等文件系统如何对此类故障作出反应的详细研究。事实证明,相当糟糕! 我们在这项工作中发现了许多错误、设计缺陷和其他奇怪之处。其中一些已反馈到Linux社区,从而有助于产生一些新的更强大的文件系统来存储数据。

  11. [RO91]“Design and Implementation of the Log-structured File System”Mendel Rosenblum and John Ousterhout SOSP ’91, Pacific Grove, CA, October 1991

    一篇关于如何提高文件系统写入性能的开创性论文。

  12. [S90]“Implementing Fault-Tolerant Services Using The State Machine Approach: A Tutorial”Fred B. Schneider ACM Surveys, Vol. 22, No. 4, December 1990

    这篇经典论文主要讨论如何构建容错服务,其中包含了许多术语的基本定义。从事构建分布式系统的人应该读一读这篇论文。

  13. [Z+13]“Zettabyte Reliability with Flexible End-to-end Data Integrity” Yupu Zhang, Daniel S. Myers, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau MSST ’13, Long Beach, California, May 2013

    这是我们自己的工作,将数据保护添加到系统的页面缓存中,以防止内存讹误和磁盘讹误。

第47章 分布式系统

  1. [A70]“The ALOHA System — Another Alternative for Computer Communications”Norman Abramson The 1970 Fall Joint Computer Conference

    ALOHA 网络开创了网络中的一些基本概念,包括指数倒退和重传。多年来,这些已成为共享总线以太网网络通信的基础。

  2. [BN84]“Implementing Remote Procedure Calls”Andrew D. Birrell, Bruce Jay Nelson ACM TOCS, Volume 2:1, February 1984

    基础RPC系统,其他所有理论都基于此。是的,它是我们在Xerox PARC的朋友们的另一项开创性努力的结果。

  3. [MK09]“The Effectiveness of Checksums for Embedded Control Networks”Theresa C. Maxino and Philip J. Koopman IEEE Transactions on Dependable and Secure Computing, 6:1, January ’09

    对基本校验和机制的很好的概述,包括它们之间的一些性能和健壮性比较。

  4. [LH89]“Memory Coherence in Shared Virtual Memory Systems”Kai Li and Paul Hudak ACM TOCS, 7:4, November 1989

    本文介绍了通过虚拟内存来实现基于软件的共享内存。这是一个有趣的想法,但结果没有坚持下去,或者不太好。

  5. [SK09]“Principles of Computer System Design”Jerome H. Saltzer and M. Frans Kaashoek Morgan-Kaufmann, 2009

    一本关于系统的优秀图书,也是每个书架的必备书。这是我们看到的关于命名的几个优质的讨论内容之一。

  6. [SRC84]“End-To-End Arguments in System Design”Jerome H. Saltzer, David P. Reed, David D. Clark ACM TOCS, 2:4, November 1984

    关于分层、抽象,以及功能必须最终放在计算机系统中的讨论。

  7. [VJ88]“Congestion Avoidance and Control”Van Jacobson SIGCOMM ’88

    关于客户端应如何调整,以感知网络拥塞的开创性论文。绝对是互联网背后的关键技术之一,所有认真对待系统的人必读。

第48章 Sun的网络文件系统(NFS)

  1. USENIX Summer 1986

    最初的NFS论文。阅读这些美妙的想法是个好主意。

  2. [NT94]“Kerberos: An Authentication Service for Computer Networks” B. Clifford Neuman, Theodore Ts’o IEEE Communications, 32(9):33-38, September 1994

    Kerberos 是一种早期且极具影响力的身份验证服务。我们可能应该在某个时候为它写上一章……

  3. [P+94]“NFS Version 3: Design and Implementation” Brian Pawlowski, Chet Juszczak, Peter Staubach, Carl Smith, Diane Lebel, Dave Hitz USENIX Summer 1994, pages 137-152

    NFS 版本3的小修改。

  4. [P+00]“The NFS version 4 protocol” Brian Pawlowski, David Noveck, David Robinson, Robert Thurlow 2nd International System Administration and Networking Conference (SANE 2000)

    毫无疑问,这是有史以来关于NFS的优秀论文。

  5. [C00]“NFS Illustrated”Brent Callaghan Addison-Wesley Professional Computing Series, 2000

    一个很棒的NFS参考,每个协议都讲得非常彻底和详细。

  6. [Sun89]“NFS: Network File System Protocol Specification” Sun Microsystems, Inc. Request for Comments: 1094, March 1989

    可怕的规范。如果你必须读,就读它。

  7. [O91]“The Role of Distributed State”John K. Ousterhout

    很少引用的关于分布式状态的讨论,对问题和挑战有更广的视角。

  8. [HLM94]“File System Design for an NFS File Server Appliance”Dave Hitz, James Lau, Michael Malcolm USENIX Winter 1994. San Francisco, California, 1994

    Hitz 等人受到以前日志结构文件系统工作的极大影响。

  9. [RO91]“The Design and Implementation of the Log-structured File System”Mendel Rosenblum, John Ousterhout Symposium on Operating Systems Principles (SOSP), 1991

    又是LFS。不,LFS,学无止境。

第49章 Andrew文件系统(AFS)

  1. [B+91]“Measurements of a Distributed File System” Mary Baker, John Hartman, Martin Kupfer, Ken Shirriff, John Ousterhout SOSP ’91, Pacific Grove, California, October 1991

    早期的论文,测量人们如何使用分布式文件系统,符合AFS中的大部分直觉。

  2. [H+11]“A File is Not a File: Understanding the I/O Behavior of Apple Desktop Applications”Tyler Harter, Chris Dragga, Michael Vaughn, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau SOSP ’11, New York, New York, October 2011

    我们自己的论文,研究Apple Desktop工作负载的行为。事实证明,它们与系统研究社区通常关注的许多基于服务器的工作负载略有不同。本文也是一篇优秀的参考文献,指出了很多相关的工作。

  3. [H+88]“Scale and Performance in a Distributed File System” John H. Howard, Michael L. Kazar, Sherri G. Menees, David A. Nichols, M. Satyanarayanan, Robert N. Sidebotham, Michael J. West ACM Transactions on Computing Systems (ACM TOCS), page 51-81, Volume 6, Number 1, February 1988

    著名的AFS系统的期刊长版本,该系统仍然在全世界的许多地方使用,也可能是关于如何构建分布式文件系统的最早的清晰思考。它是测量科学和原理工程的完美结合。

  4. [R+00]“A Comparison of File System Workloads”Drew Roselli, Jacob R. Lorch, Thomas E. Anderson USENIX ’00, San Diego, California, June 2000

    与Baker 的论文[B+91]相比,有最近的一些记录。

  5. [S+85]“The ITC Distributed File System: Principles and Design” M.Satyanarayanan, J.H. Howard, D.A. Nichols, R.N. Sidebotham, A. Spector, M.J. West SOSP ’85, Orcas Island, Washington, December 1985

    关于分布式文件系统的较早的文章。AFS的许多基本设计都在这个较早的系统中实现,但没有对扩展进行改进。

  6. [V99]“File system usage in Windows NT 4.0”Werner Vogels SOSP '99, Kiawah Island Resort, South Carolina, December 1999

    对Windows工作负载的一项很酷的研究,与之前已经完成的许多基于UNIX的研究相比,它在本质上是不同的。