home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / answers / os-research / part1 next >
Internet Message Format  |  1993-12-02  |  32KB

  1. Path: senator-bedfellow.mit.edu!bloom-beacon.mit.edu!nic.hookup.net!europa.eng.gtefsd.com!library.ucla.edu!agate!darkstar.UCSC.EDU!osr
  2. From: bos@scrg.cs.tcd.ie (Bryan O'Sullivan)
  3. Newsgroups: comp.os.research,comp.answers,news.answers
  4. Subject: Comp.os.research: Frequently answered questions [1/2]
  5. Followup-To: poster
  6. Date: 1 Dec 1993 09:58:40 GMT
  7. Organization: SCRG, Department of Computer Science, Trinity College Dublin
  8. Lines: 690
  9. Approved: comp-os-research@cse.ucsc.edu, news-answers-request@mit.edu
  10. Message-ID: <2dhpsg$her@darkstar.UCSC.EDU>
  11. Reply-To: os-faq@cse.ucsc.edu
  12. NNTP-Posting-Host: ftp.cse.ucsc.edu
  13. Summary: frequent topics of discussion on the operating systems research group
  14. Originator: osr@ftp
  15. Xref: senator-bedfellow.mit.edu comp.os.research:3343 comp.answers:2862 news.answers:15262
  16.  
  17. Archive-name: os-research/part1
  18. Version: $Revision: 1.3 $
  19. Last-Modified: $Date: 1993/11/28 18:01:08 $
  20.  
  21.         Answers to frequently asked questions
  22.           for comp.os.research: part 1 of 2
  23.  
  24.                Bryan O'Sullivan
  25.  
  26.  
  27.  
  28. Please note that this article is still very much in beta at the
  29. moment; I make no particular claims as to the accuracy of the material
  30. below, as some of the information is quite old.
  31.  
  32.  
  33.  
  34.               TABLE OF CONTENTS
  35.  
  36.  
  37. 1.     Introduction
  38. 1.1.   How to read this article
  39. 1.2.   Reader contributions and comments
  40. 1.3.   Acknowledgments and caveats
  41.  
  42. 2.     Recurrent discussions
  43. 2.1.   Microkernels, macrokernels, and the in-betweenies
  44. 2.2.   Threads
  45. 2.2.1. Distinguishing features
  46. 2.2.2. Characterising implementations of multithreading
  47. 2.2.3. The history of threads
  48.  
  49. 3.     File systems
  50. 3.1.   Extent-based versus log-structured file systems
  51.  
  52. 4.     Distributed systems
  53. 4.1.   What is the current status of the (insert name) project?
  54. 4.2.   How do approaches to load balancing differ?
  55. 4.3.   Fault tolerance in distributed systems
  56. 4.4.   Naming in distributed systems
  57. 4.5.   Mobile and disconnected operation
  58. 4.6.   Distributed shared memory
  59. 4.7.   What have we learned?
  60.  
  61. 5.     Operating systems teaching
  62. 5.1.   What good undergraduate-level texts are available?
  63. 5.2.   What instructional operating systems can I use?
  64. 5.3.   Where can I find the canonical list of OS papers for grad courses?
  65.  
  66.  
  67.  
  68. ------------------------------
  69. Subject: [1] Introduction
  70. From: Introduction
  71.  
  72. This posting consists of answers to many of the questions most
  73. frequently asked and summaries of the topics most frequently covered
  74. on comp.os.research, the Usenet operating systems research discussion
  75. group.  The purpose of this posting is to circulate existing
  76. information, and to avoid rehashing old topics of discussion and
  77. questions.  Please read both parts of this document before posting to
  78. this newsgroup.
  79.  
  80. This newsgroup is moderated; the moderator is Darrell Long
  81. <darrell@cse.ucsc.edu>.  A companion posting to the FAQs, `Welcome to
  82. comp.os.research', briefly covers the moderation policy and guidelines
  83. for posting to comp.os.research.  It can be found in either
  84. comp.os.research or news.answers, and is posted regularly.
  85.  
  86. Due to its size, the FAQ is split up into two parts; each is posted
  87. once a month.  The welcome posting is posted weekly.
  88.  
  89. Note: chunks of text of the form [92-02-12-21-20.29] indicate the
  90. original posting from which a section of this article was inspired,
  91. snarfed, or just plain copied wholesale.  Other chunks in square
  92. brackets are comments and reminders to myself.  These latter chunks of
  93. text will be removed as appropriate material is added, but the
  94. attributions will remain.
  95.  
  96. ------------------------------
  97. Subject: [1.1] How to read this article
  98. From: Introduction
  99.  
  100. This article is posted in digest format; using the `G%' command from
  101. within the `nn' newsreader should split it up into separate
  102. sub-articles which you can browse through.
  103.  
  104. To skip to a particular question numbered n.m, use `/: \[n\.m\]' from
  105. most pagers.  From within GNU Emacs, you can use `C-s [n.m]'.  This
  106. article is treated as an outline when edited by GNU Emacs.
  107.  
  108. ------------------------------
  109. Subject: [1.2] Reader contributions and comments
  110. From: Introduction
  111.  
  112. Your contributions, comments, and corrections are welcomed; mail sent
  113. to <os-faq@cse.ucsc.edu> will be dealt with as quickly as I can
  114. manage.  Generally, performing a reply or followup to this article
  115. from within your newsreader should do the Right Thing.
  116.  
  117. While I am more than happy to include submissions of material for the
  118. FAQ if they seem appropriate, it would make my life a lot easier if
  119. such text were proof-read in advance, and kept concise.  I don't have
  120. as much time as I would like to digest 15K text files and summarise
  121. them in three paragraphs for inclusion here.
  122.  
  123. ------------------------------
  124. Subject: [1.3] Acknowledgments and caveats
  125. From: Introduction
  126.  
  127. Although this FAQ has been the result of a co-operative effort, any
  128. blame for inaccuracies and errors lies entirely with my edits.  I
  129. would like to thank the following people for their part in
  130. contributing to this article:
  131.  
  132. Surendar Chandra    <surendar@cs.duke.edu>
  133. Steve Chapin        <sjc@cs.purdue.edu>
  134. Crispin Cowan        <crispin@csd.uwo.ca>
  135. Dan Hildebrand        <danh@qnx.com>
  136. Gordon Irlam        <gordoni@netcom.com>
  137. Darrell Long        <darrell@cse.ucsc.edu>
  138. Peter Magnusson        <psm@sics.se>
  139. Craig Partridge        <craig@bbn.com>
  140. Robert Walsh        <rjwalsh@scrg.cs.tcd.ie>
  141.  
  142.  
  143. ------------------------------
  144. Subject: [2] Recurrent discussions
  145. From: Recurrent discussions
  146.  
  147. A number of topics tend to appear with regularity in comp.os.research.
  148. This section attempts to go over some of the most commonly-covered
  149. ground.  I haven't made the list of topics covered exhaustive by any
  150. means.
  151.  
  152. ------------------------------
  153. Subject: [2.1] Microkernels, macrokernels, and the in-betweenies
  154. From: Recurrent discussions
  155.  
  156. A recurrent topic of discussion in this newsgroup has been the
  157. comparison between microkernel (for example Mach and QNX) and
  158. `macrokernel' (traditional Unix) operating systems.  The basic notion
  159. of a microkernel consists of devolving as much functionality as
  160. possible into processes rather than the kernel itself; different
  161. systems take different approaches to implementing this.
  162.  
  163. However, anecdotal evidence [93-03-03-07-56.52] suggests that the
  164. distinction between microkernel and monolithic architectures is
  165. becoming more blurred as time goes on, as the two advance.  For
  166. example, most modern monolithic kernels now implement multiple threads
  167. of execution and fine-grained parallelism.  Architecturally, this
  168. approach begins to appear similar to a microkernel with several
  169. kernel-space processes working from shared memory.
  170.  
  171. As an aside, people often complain that the Mach system can't be a
  172. `real' microkernel, because it is so large (at least, this is the
  173. argument most frequently cited).  However, I have been told that
  174. automatically-generated code stubs contribute very significantly to
  175. the size of the kernel, and that some size reduction would be likely
  176. if MIG (the stub generator) produced better code.  [Can someone from
  177. CMU comment on this?]
  178.  
  179. Debating microkernels versus monolithic kernels on the basis of kernel
  180. size misses the central, architectural point.  In the same way as the
  181. point of a RISC processor is not to minimise the instruction count,
  182. but rather to make a different tradeoff between what is implemented
  183. in the processor instruction set and what is implemented in other
  184. ways, the microkernel architectural issue is to determine which
  185. services are implemented in the microkernel, and which services are
  186. implemented external to that microkernel.  By making appropriate
  187. choices here, the goal is to enhance various OS attributes in a manner
  188. that might not be addressable with a monolithic kernel OS.  System
  189. attributes such as performance, flexibility, realtime, etc. are all
  190. variables which are taken into account.
  191.  
  192. Some history:
  193.  
  194. Ira Goldstein and Paul Dale were the coiners of the term `microkernel'
  195. back around 1989.
  196.  
  197. ------------------------------
  198. Subject: [2.2] Threads
  199. From: Recurrent discussions
  200.  
  201. The exact meaning of the term `thread' is not generally agreed upon.
  202. One of the more common usages denotes a `lightweight' process
  203. (sequential flow of control) which shares an address space and some
  204. other resources with others, and for which context switching time is
  205. lower than for `heavyweight' (i.e. kernel-supported) processes.
  206.  
  207. Throughout the following material, when we refer to `processes', this
  208. can be taken as meaning heavyweight processes.
  209.  
  210. ------------------------------
  211. Subject: [2.2.1] Distinguishing features
  212. From: Recurrent discussions
  213.  
  214. Some of the features which distinguish different approaches to
  215. threading are listed below:
  216.  
  217. - Number of *concurrent* flows of control: generally, threads may
  218.   potentially make use of multiple processors in order to allow
  219.   several to execute concurrently.  That is, the model usually takes
  220.   into consideration the possibility that there may be more than one
  221.   flow of control active at any time.
  222.  
  223. - Scheduling policy: a thread scheduler may be pre-emptive, in which
  224.   case a thread is put to sleep either when it waits upon some
  225.   resource or runs for the full duration of its time quantum, or
  226.   non-pre-emptive, in which case individual threads continue to run
  227.   until they relinquish the processor themselves (either through
  228.   waiting on a resource or calling the analogue of a sleep()
  229.   function).
  230.  
  231. Systems which are non-pre-emptive and may only ever have a single
  232. active flow of control (regardless of the number of processors
  233. available) are referred to as coroutine systems.  Coroutine
  234. programming requires quite a different approach from threads-based
  235. programming, as many of the synchronisation and resource-sharing
  236. problems which occur in threaded environments need never trouble the
  237. coroutines programmer.
  238.  
  239. ------------------------------
  240. Subject: [2.2.2] Characterising implementations of multithreading
  241. From: Recurrent discussions
  242.  
  243. An important distinction may be made between user-level threads and
  244. kernel-supported threads.  A user-level thread maintains all its state
  245. in user space.  A consequence of this is that no kernel resources need
  246. to be allocated per thread, and switching between threads can be done
  247. without changing address space.  A disadvantage is that user level
  248. threads cannot execute while the kernel is busy, for instance, with
  249. paging or I/O.  This would require some knowledge and participation on
  250. the part of the kernel.
  251.  
  252. It is possible to combine both methods, as is done in SunOS 5.x (aka
  253. Solaris 2.x).  Here, one or more light weight processes (LWPs)
  254. multitask one or more user-level threads, which in turn are
  255. implemented using user-space libraries.
  256.  
  257. Some issues which characterise thread implementations, and which
  258. determine the uses to which a threads package may be put, include:
  259.  
  260. - How much by way of kernel resources does a thread require?  This
  261.   will typically limit the number of threads that can be started by a
  262.   process.
  263.  
  264. - Under what circumstances will the entire process hang?  For
  265.   instance, if some thread gets a page fault, may another thread in
  266.   that process be dispatched?
  267.  
  268. - Does switching threads require a full system call (as on the SPARC),
  269.   or may context switches between threads be performed entirely at
  270.   user level?
  271.  
  272. - How are signals handled?  Can signals be masked individually per
  273.   thread?  Is there a `broadcast' signal?
  274.  
  275. - How are stacks handled?  Will the stacks shrink/grow dynamically on
  276.   a per thread basis?
  277.  
  278. Several systems today (QNX and Plan 9, for instance) take the stance
  279. that threads `fix the symptom, but not the problem'.  Rather than
  280. using threads because the OS context switch time is too slow, a better
  281. approach, according to the architects of these systems, is to fix the
  282. OS.  It's ironic, now that even PC-hosted desktop OSes provide
  283. MMU-protected multitasking, the fashionable programming model has
  284. become multiple threads running in a common address space, making
  285. debugging difficult, and also making it more difficult to generate
  286. reliable code.  With fast context switching, existing OS services like
  287. explicitly allocated shared memory between a team of cooperating
  288. processes can create a `threaded' environment, without opening the
  289. Pandora's box of problems that a fully shared memory space entails.
  290.  
  291. ------------------------------
  292. Subject: [2.2.3] The history of threads
  293. From: Recurrent discussions
  294.  
  295. [93-04-21-13-32.11, 92-01-27-17-05.54] The notion of a thread, as a
  296. sequential flow of control, dates back to 1965, at least, with the
  297. Berkeley Timesharing System.  Only they weren't called threads at that
  298. time, but processes [Dijkstra].  Processes interacted through shared
  299. variables, semaphores, and similar means.  Max Smith did a prototype
  300. threads implementation on Multics around 1970; it used multiple stacks
  301. in a single heavyweight process to support background compilations.
  302.  
  303. Then came Unix, in the early 1970s.  The Unix notion of a `process'
  304. became a sequential thread of control *plus* a virtual address space
  305. (incidentally, the Unix notion of a process derived directly from the
  306. Multics process design [Saltzer]).  So `processes', in the Unix sense,
  307. are quite heavyweight machines.  Since they cannot share memory (each
  308. has its own address space), they interact through pipes, signals,
  309. etc).  Shared memory (also a rather ponderous mechanism) was added
  310. much later.
  311.  
  312. After some time, Unix users started to miss the old processes that
  313. could share memory.  This led to the `invention' of threads: old-style
  314. processes that shared the address space of a single Unix process.
  315. They also were called `lightweight', by way of contrast with
  316. `heavyweight' Unix processes.  This distinction dates back to the very
  317. late 70s or early 80s, i.e. to the first `microkernels' (Thoth
  318. (precursor of the V-kernel and QNX), Amoeba, Chorus, the
  319. RIG-Accent-Mach family, etc).
  320.  
  321. On a side note, threads have been in continuous use in
  322. telecommunications applications for quite a long time.
  323.  
  324. See also:
  325.  
  326.   Cheriton, D. R., `Multi-process structuring and the Thoth operating
  327.     system', Ph.D. Thesis, University of Waterloo, 1979.
  328.  
  329.   Daley, R. C., Dennis, J. B., `Virtual memory, processes, and
  330.     sharing in Multics', Comm, ACM 11, 306-312, May 1968.
  331.  
  332.   Dennis, J. B., van Horn, E. C., `Programming semantics for
  333.     multiprogrammed computations', MAC-TR-21, 1966.
  334.  
  335.   Dijkstra, E. W., `Cooperating sequential processes', in `Programming
  336.     Languages', Genuys, F. (ed.), Academic Press, 1965.
  337.  
  338.   Saltzer, J. H., `Traffic control in a multiplexed computer system',
  339.     MAC-TR-30 (Sc.D. Thesis), July, 1966.
  340.     
  341.  
  342.  
  343. ------------------------------
  344. Subject: [3] File systems
  345. From: File systems
  346.  
  347. This field is discussed both here and in the comp.arch.storage
  348. newsgroup.  This section needs fleshing out at the moment; it will
  349. grow over time (hopefully!).
  350.  
  351. ------------------------------
  352. Subject: [3.1] Extent-based versus log-structured file systems
  353. From: File systems
  354.  
  355. [92-11-18-10-57.53, 92-11-22-10-16.26] A general definition for a
  356. log-structured storage system might be the following: logging is an
  357. append-only storage semantics.  The unit of logging is the record.
  358. Write accesses append records to the end of the log.  A log record may
  359. become obsolete.  Useless records are compacted out of the log when
  360. possible.  Other write accesses are forbidden.
  361.  
  362. An extent-based file system is another candicate for better filesystem
  363. performance.  The approach used under QNX, for example, is to have
  364. files exist as an array of extents on disk, where each is extent is as
  365. many contiguous blocks as could be allocated at that location.  By
  366. using a bitmap for space allocation, files can also grow `in-place',
  367. if adjacent free space on disk exists.  This approach allows the unit
  368. of disk space allocation to remain 512 bytes, which is also the
  369. smallest unit of physical I/O.  The potential performance bottleneck
  370. of this approach does not happen because the filesystem code passes
  371. I/O requests to the disk drivers in units of extents, not 512 byte
  372. blocks.  The filesystem also heuristically modifies the size of the
  373. pre-read requests based on the historical access pattern to the
  374. file.  This approach provides the performance advantages of larger
  375. physical disk block sizes, without the wasted disk space that results
  376. from unused portions of large blocks, or the complexity of trying to
  377. allocate space from partially unused blocks.
  378.  
  379.  
  380. ------------------------------
  381. Subject: [4] Distributed systems
  382. From: Distributed systems
  383.  
  384. A great deal of the high-profile research carried out in operating
  385. systems these days deals with distributed computing.  Not
  386. surprisingly, discussions of distributed systems make up a large
  387. amount of the traffic on comp.os.research.
  388.  
  389. ------------------------------
  390. Subject: [4.1] What is the current status of the (insert name) project?
  391. From: Distributed systems
  392.  
  393. See the section on `available software' for information on
  394. distributions of some of the systems mentioned here.
  395.  
  396. - The Amoeba project is still going.  There are roughly 20 people
  397.   working on it, but most of these are no longer kernel hackers.  They
  398.   are working on using it for parallel programming, wide-area
  399.   distributed systems, and other things.  Amoeba is used in over 100
  400.   universities at the moment, and is also used at commercial
  401.   institutions.
  402.  
  403. - Cronus is still under development at BBN.  The current public
  404.   release is 3.0.
  405.  
  406. - Horus is being developed by the same group that worked on Isis; the
  407.   head of this group is Robbert van Renesse.
  408.  
  409. - Isis is no longer being developed at Cornell; it is now managed as a
  410.   commercial product.
  411.  
  412. - Mach: awaiting response from rfr
  413.  
  414. - Plan 9 is currently being restructured to make good use of a 300MBPS
  415.   fibre-optic network.  A general release of the system is under
  416.   consideration at the moment.
  417.  
  418. - QNX is a commercial realtime OS with an installed base of over
  419.   250,000 systems.  It is used extensively in process control, factory
  420.   automation, medical instrumentation, communications and
  421.   point-of-sale.  A number of universities are also doing research
  422.   with QNX.
  423.  
  424. - The Sprite network operating system project is winding down.  The
  425.   user community is shrinking, and only three people are currently
  426.   using the system as a basis for graduate research.  Sprite is
  427.   continuing to be used as the testbed for the Berkeley RAID project.
  428.  
  429. ------------------------------
  430. Subject: [4.2] How do approaches to load balancing differ?
  431. From: Distributed systems
  432.  
  433. Load-balancing policy falls into two broad groups: static and dynamic.
  434. Static policies use algorithms which operate without regard to
  435. run-time loads across a system, while dynamic policies use the
  436. run-time performance of various parts of a system in order to make
  437. more `informed' decisions about balancing.
  438.  
  439. [92-11-06-12-53.57] A dynamic load-balancing policy is one which uses
  440. run-time state information in making scheduling decisions.
  441.  
  442. There are two kinds of dynamic policies: adaptive and non-adaptive.
  443. The latter always use the same (fixed, load-dependent) policy; the
  444. former may adjust policy parameters in order to gradually improve
  445. their performance.
  446.  
  447. The key point is that while non-adaptive policies use only the
  448. information about the run-time state, adaptive policies use, in
  449. addition to this, information about current performance.
  450.  
  451. In adaptive policies, the rules for adjusting policy parameters may be
  452. static or dynamic.  An example of the former might be: `shift to a
  453. conservative migration rule when system-wide load patterns are varying
  454. too rapidly'.  An example of the latter could be: `increase
  455. sender-side threshold when migrated jobs cause slowdown rather than
  456. speedup'.  Some researchers refer to the performance-driven adaptation
  457. exhibited by the second policy as `learning'.
  458.  
  459. Since both non-adaptive policies and adaptive policies with static
  460. rules really use only load information, it is confusing to distinguish
  461. between them.  One way to avoid such confusion is to restrict the use
  462. of the word `adaptive' to policies that use performance feedback in
  463. order to drive their adjustment of policy parameters.
  464.  
  465. [Steve can polish this section up, rearrange it, and add material.]
  466.  
  467. ------------------------------
  468. Subject: [4.3] Fault tolerance in distributed systems
  469. From: Distributed systems
  470.  
  471. [There has been a lot of traffic on this.  Material sought.]
  472.  
  473. ------------------------------
  474. Subject: [4.4] Naming in distributed systems
  475. From: Distributed systems
  476.  
  477. [Material on naming and/or global naming sought.]
  478.  
  479. ------------------------------
  480. Subject: [4.5] Mobile and disconnected operation
  481. From: Distributed systems
  482.  
  483. [Lots of questions, few answers.]
  484.  
  485. ------------------------------
  486. Subject: [4.6] Distributed shared memory
  487. From: Distributed systems
  488.  
  489. [As for mobile systems.]
  490.  
  491. ------------------------------
  492. Subject: [4.7] What have we learned?
  493. From: Distributed systems
  494.  
  495. Andy Tanenbaum started a (very long) thread on this topic in
  496. comp.os.research in April of 1992 [92-04-03-17-10.05].  The interested
  497. reader is directed to the comp.os.research archives.
  498.  
  499. [Does anyone want to distill that thread into something suitable for
  500.  inclusion here?]
  501.  
  502.  
  503.  
  504. ------------------------------
  505. Subject: [5] Operating systems teaching
  506. From: Operating systems teaching
  507.  
  508. This section attempts to give some useful pointers to people who teach
  509. operating systems, both at undergraduate and postgraduate level.
  510.  
  511. ------------------------------
  512. Subject: [5.1] What good undergraduate-level texts are available?
  513. From: Operating systems teaching
  514.  
  515. The comments below have been provided by a variety of people, so any
  516. `me's or `I's you encounter are not necessarily those of the
  517. maintainer!
  518.  
  519. - `Operating System Concepts', third edition, by Abraham Silberschatz,
  520.   James Peterson, and Peter Galvin is a popular text.  Addison-Wesley,
  521.   1991, ISBN 0-201-51379-X.  It is popularly called the `dinosaur'
  522.   book, because the cover has pictures of dinosaurs to symbolise
  523.   various operating systems.  For you Jurassic Park fans: Mach is a
  524.   velociraptor.
  525.  
  526.   I think this is the `standard' OS text, although I have a couple of
  527.   others that I also think are good, and that I draw from when I teach
  528.   OS.  The dinosaur book doesn't have the greatest organisation, and
  529.   sometimes wanders when describing things.  Its strong point lies in
  530.   the copious examples.
  531.  
  532.   The first 84 pages covers operating system basics, the next 120
  533.   pages covers process management including 30 pages on deadlocks.
  534.   130 pages on storage management: memory, virtual memory, secondary
  535.   storage.  70 pages on file systems and protection.  Then 100 pages
  536.   on distributed systems.  The last part of the book has case studies
  537.   on Unix and Mach: 50 pages on Unix and 30 pages on Mach.  The last
  538.   chapter gives a short 10 page historical perspective.
  539.  
  540.   The book gives a good (but slightly theoretical) overview of
  541.   operating system concepts.  A good complement would be the books
  542.   covering Minix or BSD, which are more implementation-oriented.
  543.  
  544.   The fourth edition of this book should be available from November
  545.   1993; James Peterson is no longer one of the authors involved.
  546.  
  547. - `An Operating Systems Vade Mecum', second edition, by Raphael
  548.   Finkel, 1988, Prentice Hall, ISBN 0-13-637950-8.  I really like this
  549.   book; it is a bit more theoretical than the dinosaur book, but is
  550.   well-written and clear.  I would accompany it with labs based on one
  551.   of the educational experimental OS's (NachOS, OSP) for hands-on
  552.   experience.
  553.  
  554.   The edition mentioned above is now out of print.  However, it may be
  555.   obtained via anonymous ftp from
  556.   ftp.ms.uky.edu:pub/tech-reports/UK/cs/vade.mecum.2.ps.Z.  Here is
  557.   the associated chunk of README:
  558.   
  559.     This textbook is out of print.  It was published by Prentice Hall.
  560.     The author now owns the copyright.  Permission is granted to copy
  561.     this text for any noncommercial purpose.  Feel free to generate
  562.     copies of the text for your students.  You may also photocopy the
  563.     original book without restriction.  Kindly send suggested upgrades
  564.     to the author: raphael@ms.uky.edu.  He is planning a new edition
  565.     sometime.
  566.  
  567.   [It's been a few years since I've looked at this book, so I can't
  568.    remember what it contains.  Can anyone help?]
  569.  
  570. - `The Logical Design of Operating Systems', second edition, Lubomir
  571.   Bic, Alan Shaw, 1988, Prentice Hall, ISBN 0-13-540139-9.  This one
  572.   isn't as theoretical as Finkel's book, nor is it as long as the
  573.   dinosaur book.  I haven't tried to use it in a course yet, but it
  574.   looks like a fairly well-rounded text.
  575.  
  576.   [Can anyone write a paragraph on the various topics covered ... ?]
  577.  
  578. - `Modern Operating Systems,' Andrew Tanenbaum, 1992, Prentice Hall,
  579.   ISBN 0-13-588187-0.  This started out as a rewrite of the Minix
  580.   book, but he pulled the Minix-specific material and added seven
  581.   chapters on distributed systems.  It's a bit heavy for undergrads,
  582.   depending on how far into the distributed systems you go, but I like
  583.   Tanenbaum as an author.  He'll be bringing out a second edition of
  584.   the Minix book sometime soon; as he says, one is for `hands-on'
  585.   (Minix) and one is for `hands-off' (Modern OS).
  586.  
  587.   The book is divided into two parts: `traditional' introductory
  588.   material, taken more or less verbatim from the Minix book, and an
  589.   introduction to distributed systems.  Each parts concludes with a
  590.   case study and comparison of two well-known systems (Unix and
  591.   MS-DOS, and Mach and Amoeba).  The bibliography at the end is
  592.   organised well for more advanced coverage of the topics encountered
  593.   throughout the book.
  594.  
  595.   Topics covered in the first part include process concepts, memory
  596.   management, file system organisation and I/O, and deadlock detection
  597.   and avoidance.  The second part addresses issues such as distributed
  598.   communication, synchronisation (the section on clock synchronisation
  599.   is well put together), processes in distributed environments
  600.   (nothing on process migration), and distributed file systems (using
  601.   AFS as an example).
  602.  
  603. - `Concurrent Systems', Jean Bacon, 1992, Addison-Wesley, ISBN
  604.   0-201-41677-8.  This covers much the same material as `Modern
  605.   Operating Systems', but goes into rather more detail on databases
  606.   and languages.  The book is divided into four parts, and comes with
  607.   a separate instructor's manual (ISBN 0-201-62406-0).  The first
  608.   covers basic material, such as OS functions, and system and language
  609.   support for concurrent processes.  Part 2 deals with simple
  610.   concurrent actions, covering topics such as shared-memory IPC,
  611.   message passing, persistent data, crashes, and distributed data.
  612.   The third part of the book covers transactions, concurrency control,
  613.   and failure recovery.  The final section presents a set of case
  614.   studies, with Unix, Mach and Chorus being covered, along with some
  615.   of the work done at Cambridge over the past decade.  An interesting
  616.   emphasis is placed on language-level support for concurrency
  617.   throughout the book, and the focus on database issues is also a good
  618.   thing.
  619.  
  620.   I haven't read the book in as much detail as I would like, but it
  621.   seems to be well put together.  The cramming of so many topics under
  622.   one cover means that there is probably too much material for a
  623.   single undergraduate course, and the book perforce does not go into
  624.   as much detail as I would like on some topics (a problem I also find
  625.   with Tanenbaum's book).  Well worth a look, however.
  626.  
  627. Two books commonly used in conjunction with the texts listed above
  628. are:
  629.  
  630. - `The Design and Implementation of the 4.3BSD Unix Operating System',
  631.   Samuel Leffler, Kirk McKusick, Michael Karels, John Quarterman,
  632.   1989, Addison-Wesley, ISBN 0-201-06196-1.  This book describes the
  633.   kernel of 4.3BSD Unix in some detail, covering process and memory
  634.   management (the latter being heavily VAX-oriented), file system
  635.   organisation, device driver internals, terminal handling, IPC,
  636.   network communications, some details of the Internet protocols, and
  637.   system operation.  I found this book to be well-written and concise.
  638.  
  639.   Accompanying the above is the `4.3BSD Answer Book', Samuel Leffler,
  640.   Kirk McKusick, 1991, Addison-Wesley, ISBN 0-201-54629-9.  This short
  641.   book provides answers to all of the exercises found at the end of
  642.   each chapter in the daemon book.
  643.  
  644. - `The Design of the Unix Operating System', Maurice Bach, 1986,
  645.   Prentice Hall, ISBN not to hand right now.  This is the
  646.   authoritative description of the internals of System V Unix.  Due to
  647.   copyright restrictions, it contains no actual code, but rather
  648.   pseudo-code (I didn't find this to be a problem).  I haven't read
  649.   this book in a few years, so I can't remember what it covers.
  650.  
  651. I am not aware of any similar book which covers the implementation of
  652. a distributed system.
  653.  
  654. ------------------------------
  655. Subject: [5.2] What instructional operating systems can I use?
  656. From: Operating systems teaching
  657.  
  658. - Minix, from Amsterdam's Vrije Universiteit, was developed by Andy
  659.   Tanenbaum, and is a mostly-Unix lookalike based on a message-passing
  660.   microkernel-similar architecture.  The system is used in Tanenbaum's
  661.   `Modern Operating Systems' and its predecessor, `Operating Systems:
  662.   Design and Implementation'.  See the Minix Information Sheet, posted
  663.   regularly to comp.os.minix, for ordering information; Minix is
  664.   copyrighted and is not in the public domain.
  665.  
  666. - NachOS is an instructional OS developed at Berkeley by Tom Anderson
  667.   <tea@cs.berkeley.edu>, Wayne Christopher, Stephen Procter (and
  668.   others?).  It currently runs on DEC MIPS and Sun SPARC workstations,
  669.   and a port to the HP 700 series is in progress.  The NachOS system,
  670.   along with sample assignments and an overview paper which was
  671.   presented at Usenix, is available via anonymous ftp from
  672.   ftp.cs.berkeley.edu:ucb/nachos.
  673.  
  674. - OSP (current version is 1.7) is an operating systems simulator,
  675.   available via ftp from sblapis1.cs.sunysb.edu, with username ospftp,
  676.   and password as in the instructor's guide.  Used in `OSP---an
  677.   Environment for Operating Systems', Michael Kifer, Scott Smolka,
  678.   Addison-Wesley.
  679.  
  680. - SunOS Minix consists of a set of patches for Minix which allows the
  681.   Minix system to run in a single monolithic Unix process on top of
  682.   SunOS 4.x on Sun 3 and Sun 4 machines.  SunOS Minix is produced by
  683.   applying a set of patches to Mac Minix 1.5 (both 1.5.10.0 and
  684.   1.5.10.1 can be used) or PC Minix 1.5.  Also, Atari Minix has been
  685.   used as the base version by at least one person.  The latest version
  686.   (2.0) includes a preliminary attempt at a port to Solaris 2.x.
  687.   SunOS Minix is available via anonymous ftp from
  688.   csc.canterbury.ac.nz:UNIX/SMX_2_00.TAR_Z.
  689.  
  690. - Xinu was developed at Purdue by Doug Comer and some others.  It was
  691.   designed to be small and layered, so that the code is succinct and
  692.   easily understandable.  It is intended for education, and is a
  693.   `conventional' operating system.  Xinu runs on the IBM PC, Sun-3,
  694.   SPARC, LSI, MIPS, Macintosh, and VAX architectures.  The system is
  695.   used in Comer's `Operating System Design: the Xinu Approach'.
  696.   Contact <xinu-librarian@cs.purdue.edu> or Prentice Hall for ordering
  697.   information; Xinu is copyrighted and is not in the public domain.
  698.  
  699. ------------------------------
  700. Subject: [5.3] Where can I find the canonical list of OS papers for grad courses?
  701. From: Operating systems teaching
  702.  
  703. [93-03-14-17-09.47] Darrell Long <darrell@cse.ucsc.edu> maintains a
  704. bibliography which provides a good starting point for graduate OS
  705. course reading lists.  This may be imported using refdbms as
  706. ucsc.grad.os, from refdbms.cse.ucsc.edu 4117 or refdbms.cs.vu.nl 4117.
  707.