home *** CD-ROM | disk | FTP | other *** search
/ ftp.pasteur.org/FAQ/ / ftp-pasteur-org-FAQ.zip / FAQ / os-research / part3 < prev    next >
Encoding:
Internet Message Format  |  1997-11-01  |  25.7 KB

  1. Path: senator-bedfellow.mit.edu!bloom-beacon.mit.edu!news-out.internetmci.com!newsfeed.internetmci.com!164.67.42.145!awabi.library.ucla.edu!128.32.155.1!agate!news.ucsc.edu!osr
  2. From: bos@serpentine.com (Bryan O'Sullivan)
  3. Newsgroups: comp.os.research,comp.answers,news.answers
  4. Subject: Comp.os.research: Frequently answered questions [3/3: l/m 13 Aug 1996]
  5. Followup-To: poster
  6. Date: 1 Nov 1997 10:00:34 GMT
  7. Organization: Polymorphous Thaumaturgy
  8. Lines: 552
  9. Approved: comp-os-research@cse.ucsc.edu, news-answers-request@mit.edu
  10. Message-ID: <63euk2$iv@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@cse.ucsc.edu
  15. Xref: senator-bedfellow.mit.edu comp.os.research:6840 comp.answers:28751 news.answers:115889
  16.  
  17. Archive-name: os-research/part3
  18. Version: $Revision: 1.3 $
  19. Posting-Frequency: monthly
  20. Last-Modified: Tue Aug 13 21:03:20 1996
  21. URL: http://www.serpentine.com/~bos/os-faq/
  22.  
  23.         Answers to frequently asked questions
  24.           for comp.os.research: part 3 of 3
  25.  
  26.                Copyright (C) 1994--1996
  27.                Bryan O'Sullivan
  28.  
  29.  
  30.  
  31.               TABLE OF CONTENTS
  32.  
  33.  
  34. 1.     Distributed systems
  35. 1.1.   What is the current status of the (insert name) project?
  36. 1.2.   How do approaches to load balancing differ?
  37. 1.3.   Fault tolerance in distributed systems
  38. 1.4.   Naming in distributed systems
  39. 1.5.   Distributed shared memory
  40. 1.5.1. Data consistency
  41. 1.5.1.1. Strictly consistent systems
  42. 1.5.1.2. Relaxing consistency
  43. 1.5.1.3. Application-specific coherence
  44. 1.5.2. Access synchronisation
  45. 1.5.3. Transfer and caching granularity
  46. 1.5.4. Address space structure
  47. 1.5.5. Fault tolerance
  48. 1.5.6. A brief bibliography on distributed shared memory
  49. 1.6.   What have we learned?
  50.  
  51. 2.     Needful things
  52.  
  53.  
  54.  
  55. ------------------------------
  56. Subject: [1] Distributed systems
  57. From: Distributed systems
  58.  
  59. A great deal of the high-profile research carried out in operating
  60. systems these days deals with distributed computing.  Not
  61. surprisingly, discussions of distributed systems make up a large
  62. amount of the traffic on comp.os.research.
  63.  
  64. ------------------------------
  65. Subject: [1.1] What is the current status of the (insert name) project?
  66. From: Distributed systems
  67.  
  68. See the section on `available software' for information on
  69. distributions of some of the systems mentioned here.
  70.  
  71. - The Amoeba project is still going.  There are roughly 20 people
  72.   working on it, but most of these are no longer kernel hackers.  They
  73.   are working on using it for parallel programming, wide-area
  74.   distributed systems, and other things.  Amoeba is used in over 100
  75.   universities at the moment, and is also used at commercial
  76.   institutions.
  77.  
  78. - Brazil is the new research operating system being developed at AT&T
  79.   Bell Labs.  Research topics being addressed in Brazil center on
  80.   higher-performance machines and, particularly, networks. A new
  81.   in-house 300 megabit/s switched fiber network increases the
  82.   potential bandwidth between machines by at least an order of
  83.   magnitude; our aim is to realize and exploit that bandwidth. The
  84.   overall design is to eliminate unnecessary overhead, particularly by
  85.   restructuring and redesigning where necessary to avoid copying data
  86.   from element to element along the communications path.  Most of this
  87.   software (except the operating system kernel) is written in a new
  88.   concurrent systems programming language, Alef, which makes it easy
  89.   to write multi-process servers and applications that can communicate
  90.   using messages or shared memory, as appropriate.  A paper on Alef is
  91.   available from the Plan 9 ftp site; see part 2 of this FAQ for a
  92.   pointer.
  93.  
  94. - Cronus is still under development at BBN.  The current public
  95.   release is 3.0.  The project currently has two thrusts---as the base
  96.   for advanced distributed system R&D, and as a platform for
  97.   constructing and deploying sophisticated distributed applications.
  98.  
  99.   Ongoing research topics include the integration of Cronus and Mach
  100.   technology, the exploration of techniques for the construction of
  101.   WAN-based and multi-organisational applications, investigation into
  102.   the integration of distributed systems and network management
  103.   systems, and work in high-performance distributed computing.
  104.  
  105. - Horus is being developed by the same group that worked on Isis; the
  106.   head of this group is Robbert van Renesse.
  107.  
  108. - Isis is no longer being developed at Cornell; it is now managed as a
  109.   commercial product.
  110.  
  111. - Mach is no longer being developed at CMU.  Current work on Mach is
  112.   being carried out by the OSF Research Institute and at the
  113.   University of Utah.
  114.  
  115. - Plan 9 is no longer in development at AT&T Bell Labs.  fibre-optic
  116.   network.  The operating systems research group at Bell Labs has
  117.   moved on to a new project, called Brazil, which addresses portable
  118.   computing and distributed applications programming.
  119.  
  120. - QNX is a commercial POSIX-certified realtime OS with an installed
  121.   base of over 250,000 systems.  It is used extensively in process
  122.   control, factory automation, medical instrumentation, communications
  123.   and point-of-sale.  A number of universities are also doing research
  124.   with QNX.
  125.  
  126. - The Sprite network operating system project has ended.
  127.  
  128. ------------------------------
  129. Subject: [1.2] How do approaches to load balancing differ?
  130. From: Distributed systems
  131.  
  132. Load-balancing policy falls into two broad groups: static and dynamic.
  133. Static policies use algorithms which operate without regard to
  134. run-time loads across a system, while dynamic policies use the
  135. run-time performance of various parts of a system in order to make
  136. more `informed' decisions about balancing.
  137.  
  138. [92-11-06-12-53.57] A dynamic load-balancing policy is one which uses
  139. run-time state information in making scheduling decisions.
  140.  
  141. There are two kinds of dynamic policies: adaptive and non-adaptive.
  142. The latter always use the same (fixed, load-dependent) policy; the
  143. former may adjust policy parameters in order to gradually improve
  144. their performance.
  145.  
  146. The key point is that while non-adaptive policies use only the
  147. information about the run-time state, adaptive policies use, in
  148. addition to this, information about current performance.
  149.  
  150. In adaptive policies, the rules for adjusting policy parameters may be
  151. static or dynamic.  An example of the former might be: `shift to a
  152. conservative migration rule when system-wide load patterns are varying
  153. too rapidly'.  An example of the latter could be: `increase
  154. sender-side threshold when migrated jobs cause slowdown rather than
  155. speedup'.  Some researchers refer to the performance-driven adaptation
  156. exhibited by the second policy as `learning'.
  157.  
  158. Since both non-adaptive policies and adaptive policies with static
  159. rules really use only load information, it is confusing to distinguish
  160. between them.  One way to avoid such confusion is to restrict the use
  161. of the word `adaptive' to policies that use performance feedback in
  162. order to drive their adjustment of policy parameters.
  163.  
  164. ------------------------------
  165. Subject: [1.3] Fault tolerance in distributed systems
  166. From: Distributed systems
  167.  
  168. One approach to providing fault tolerance in distributed systems
  169. involves the use of redundant services, such that standby facilities
  170. can become active in the event of the failure of, or loss of
  171. connection to, a primary service.
  172.  
  173. Another approach is to provide multiple paths of connectivity between
  174. the computers that make up the distributed system.  The QNX system,
  175. for example, supports multiple network drivers per node.  The purpose
  176. of the network connection under QNX is to merge the microkernels on
  177. the LAN into a single logical kernel.  Hence, if multiple LAN
  178. connections per node are present, the networking code can load balance
  179. the LAN traffic on the paths available.  It can also route around
  180. failed links, providing both greater LAN bandwidth and better fault
  181. tolerance.
  182.  
  183. See below for treatment of fault tolerance in systems which make use
  184. of distributed shared memory.
  185.  
  186. ------------------------------
  187. Subject: [1.4] Naming in distributed systems
  188. From: Distributed systems
  189.  
  190. [Material on naming and/or global naming sought.]
  191.  
  192. ------------------------------
  193. Subject: [1.5] Distributed shared memory
  194. From: Distributed systems
  195.  
  196. Distributed computer systems have evolved using message passing as
  197. their main method of communication.  Other communication systems used
  198. in loosely coupled distributed systems, such as RPC, are usually
  199. implemented on top of an underlying message passing system.  On the
  200. other hand, in tightly coupled systems, such as a multi-processor
  201. machine, the communication method used is usually shared memory.
  202.  
  203. In distributed shared memory (DSM) systems [Nitzberg & Lo, 91],
  204. processes share data transparently across node boundaries; data
  205. faulting, location, and movement is handled by the underlying system.
  206. Among other things, this allows parallel programs designed to use
  207. shared memory to execute transparently on a loosely coupled
  208. distributed system.  While the performance implications cannot be
  209. ignored, the advantages of the shared memory programming model are
  210. well known:
  211.  
  212. - Shared memory programs are usually shorter and easier to understand
  213.   than equivalent message passing programs.
  214.  
  215. - Large or complex data structures may easily be communicated.
  216.  
  217. - Shared memory gives transparent process-to-process communication.
  218.  
  219. - Programming with shared memory is a well-understood problem.
  220.  
  221. Shared-memory (or `procedure-oriented') and message-oriented operating
  222. systems are, in some sense, equivalent [Lauer & Needham, 78], though
  223. it has been claimed that the former are `more powerful' [Tam et al.,
  224. 90].
  225.  
  226. ------------------------------
  227. Subject: [1.5.1] Data consistency
  228. From: Distributed systems
  229.  
  230. Despite recent advances in both local and wide-area networking
  231. technologies, network latency is still a major factor in distributed
  232. systems and likely to remain so.  All DSM systems provide some sort of
  233. caching in an attempt to improve the performance beyond that provided
  234. by doing a network access on every reference to a non-local data item.
  235. Each system must decide whether or not to attempt to keep the data
  236. coherent, and, if so, what coherence strategy to use.  The coherence
  237. semantics which may be provided to the programmer include:
  238.  
  239. - `strict' consistency, where a read always returns the value written
  240.   by the most recent write
  241.  
  242. - a `loosely' consistent system where the system enforces some form of
  243.   weak consistency guarantees and the application (or compiler or
  244.   user) can indicate synchronisation points where consistency must be
  245.   enforced;
  246.  
  247. - no automatic consistency mechanism, but provide the user with the
  248.   facilities necessary to implement user level synchronisation and
  249.   consistency.
  250.  
  251. ------------------------------
  252. Subject: [1.5.1.1] Strictly consistent systems
  253. From: Distributed systems
  254.  
  255. Older, strictly consistent systems tend to enforce a single writer,
  256. multiple reader model, where at any time data will be held either at a
  257. single node (which may have write access) or several nodes (none of
  258. which may have write access).
  259.  
  260. Given this model, we must be able to locate a copy of our data when it
  261. is not resident.  The method most frequently used is to assign an
  262. `owner' to each item of data, where the owner has either the only
  263. writeable copy of the data, or one of the read-only copies.  Ownership
  264. may remain fixed throughout the life of a datum, or it may change
  265. dynamically.  In the latter case, the problem arises of locating the
  266. owner.  A database of locations may be maintained by centralised
  267. managers, or ownership information can be distributed among nodes of
  268. the system [Li and Hudak, 89].
  269.  
  270. In a strictly consistent system, we must also be able to synchronise
  271. writes.  The two major solutions to this problem are:
  272.  
  273. - Write broadcast.  The effects of every write are broadcast to ever
  274.   node that has a copy of the data being written; this effectively
  275.   implements a replication algorithm.  Write broadcast is usually
  276.   considered too expensive to be used as a general solution.
  277.  
  278. - Write invalidation.  Each node in the system holding a read-only
  279.   copy of the data being written is sent an invalidation message.
  280.  
  281. ------------------------------
  282. Subject: [1.5.1.2] Relaxing consistency
  283. From: Distributed systems
  284.  
  285. Permitting temporary inconsistencies is a common method of increasing
  286. performance in distributed systems.  Memory is said to be loosely
  287. coherent if the value returned by a read operation is the value
  288. written by an update operation to the same object that `could' have
  289. immediately preceded the read operation in some legal schedule of the
  290. threads in execution [Bennett et al., 90].
  291.  
  292. Using loose coherence, more than one thread may have write access to
  293. the same object, provided that the programmer knows that the writes
  294. will not conflict.
  295.  
  296. Another memory consistency model is `release consistency'
  297. [Gharachorloo et al., 90], in which memory accesses are divided into
  298. ordinary and synchronisation-related accesses.  The latter are further
  299. divided into `acquire' and `release' operations.  The `acquire'
  300. operation indicates that shared data is needed, and a processor's
  301. updates are not guaranteed to be performed at other nodes until a
  302. `release' is performed.  The primary advantage of this form of
  303. consistency is that it allows consistency updates to be tied to
  304. synchronisation events, and therefore to be delayed until actually
  305. needed by applications.  However, most release consistent systems
  306. require the programmer to make explicit use of `acquire' and `release'
  307. operations.
  308.  
  309. A DSM system called Midway introduces another new consistency model,
  310. `entry consistency' [Bershad et al., 93].  Entry consistency is weaker
  311. than many of the other models suggested, including release
  312. consistency; it requires explicit annotations to associate
  313. synchronisation objects and data.  On an `acquire', only the data
  314. associated with the synchronisation object is guaranteed to be
  315. consistent.  This extra weakness permits higher performance
  316. implementations of the underlying consistency protocols to be written.
  317. Midway also supports stronger consistency models, so that the
  318. application programmer can trade-off performance against the extra
  319. effort required to write entry consistent programs.
  320.  
  321. ------------------------------
  322. Subject: [1.5.1.3] Application-specific coherence
  323. From: Distributed systems
  324.  
  325. From [Cheriton, 86]:
  326.   `Problem-oriented shared memory' is a shared memory that implements
  327.   fetch and store operations specialised to the particular problem or
  328.   application it is supporting.  In particular, a problem-oriented
  329.   shared memory commonly provides a specialised form of consistency
  330.   and consistency maintenance that exploits application-specific
  331.   semantics.
  332. Cheriton goes on to propose that consistency constraints be relaxed
  333. and more use be made of problem semantics.  He suggests that, in some
  334. cases, stale data may be detected on use by the client, and the client
  335. may then recover.  A example would be hint caching.  In some
  336. applications, stale data may actually be sufficiently accurate,
  337. provided that the client can obtain up to date information when
  338. necessary.  In other applications, some data may be optional in the
  339. sense that the client can continue without it.  Other applications may
  340. tolerate having the results of store operations being lost or undone,
  341. for example, an application that regularly updates the entire data
  342. set.
  343.  
  344. Another approach is presented by the designers of Munin, where the
  345. runtime system accepts hints from the compiler or user to determine
  346. the coherence mechanism to be used for each object.  The default, in
  347. the absence of hints, is to use a general read-write consistency
  348. mechanism, much like that employed by IVY.  Munin supports several
  349. different object types that are based on the results of a survey of
  350. shared memory access characteristics.  The results of the survey
  351. showed that a very small percentage of all accesses to shared data
  352. fall under the general read-write type.  The Munin designers also note
  353. that a program moves through various stages of execution, and the
  354. types associated with objects change as time progresses
  355.  
  356. ------------------------------
  357. Subject: [1.5.2] Access synchronisation
  358. From: Distributed systems
  359.  
  360. Most parallel applications will use some sort of synchronisation
  361. system to order and control accesses to shared data before actually
  362. accessing the data.  The most important thing to note in DSM systems
  363. is that just blindly using standard test and set operations on bytes
  364. in shared pages will produce a high fault rate; faults are usually
  365. expensive, making this approach unacceptable.
  366.  
  367. Clouds merges locking with the cache consistency protocol, so that the
  368. user may obtain both a lock and the data in one network transaction.
  369. This system has the advantage that no invalidation messages are
  370. required, since the granting of the lock guarantees that there are no
  371. conflicting copies; it has the disadvantage that an explicit
  372. unlock/discard operation is required to release access to the data.
  373. This is acceptable in Clouds, as the DSM system was designed
  374. specifically to support object invocation, so it is easy to discard on
  375. a return.
  376.  
  377. Munin provides a distributed lock mechanism using `proxy objects' to
  378. reduce network load.  Proxy objects are maintained by a lock server on
  379. each node; when a thread wants to obtain a lock on an object, it
  380. attempts to lock the proxy instead.  The server obtains the global
  381. lock if it is not already held locally.  Global locking is done by
  382. negotiating with all the other lock servers in the system.  Each lock
  383. may be migrated from server to server, and part of the Munin system
  384. allows objects to be migrated along with their locks.
  385.  
  386. Other systems, such as IVY and Mermaid, use modified versions of classic
  387. multiprocessor synchronisation facilities.
  388.  
  389. ------------------------------
  390. Subject: [1.5.3] Transfer and caching granularity
  391. From: Distributed systems
  392.  
  393. When caching objects in local memory, it is necessary to decide what
  394. level of granularity to use.  All current systems use a fixed block
  395. size in the cache, rather than varying the granularity based on object
  396. size.  Usually this is due to constraints imposed by the system
  397. hardware and memory management.
  398.  
  399. The choice of the block size in the cache depends on several issues.
  400.  
  401. - Cost of communication: for example, on many local area networks
  402.   there is little difference between the time required to send a
  403.   one-byte message and that required to send a 1024-byte message.
  404.   Transmitting bulk changes rather than single-byte modifications
  405.   would therefore seem desirable.
  406.  
  407. - The choice of granularity also depends on the locality of reference
  408.   in the application, as thrashing may occur when two machines are
  409.   both accessing the same block (this is also known as the `ping-pong
  410.   effect').  This would seem to argue for a smaller block size.  It
  411.   should be noted that many object-oriented systems exhibit very poor
  412.   locality of reference.
  413.  
  414. In practice, a compromise must be achieved, as with conventional
  415. virtual memory systems.  Most systems use a block size which is the
  416. same as that of the virtual memory management unit on the system, or a
  417. multiple thereof.  Among other things, it allows the hardware to be
  418. used to help in the maintenance of consistency.  The choice is
  419. complicated somewhat when heterogeneous machines are being used, but
  420. in these cases, the lowest common multiple of hardware supported page
  421. sizes can usually be used.
  422.  
  423. The only major system that doesn't use a large block size is Memnet,
  424. in which a hardware based DSM system was implemented on a high speed
  425. token ring; a 32-byte block size was used instead [Delp & Farber].
  426. The choice of a small block size is appropriate, as the system is much
  427. closer to a shared memory multi-processor than it is to a software DSM
  428. system.  This is because the entire processor is blocked on a cache
  429. miss; the processor is not actually aware of the distributed nature of
  430. its address space.  Also, the ratio between remote and local memory
  431. access times is much lower than in the software based systems due to
  432. the dedicated token ring (200Mbps) and hardware assistance.
  433.  
  434. ------------------------------
  435. Subject: [1.5.4] Address space structure
  436. From: Distributed systems
  437.  
  438. In a single shared address space system, the system appears as a set
  439. of threads executing in a shared distributed address space.  Objects
  440. always appear at the same addresses on all nodes.  Single address
  441. space systems have had a resurgence in popularity with the arrival of
  442. 64-bit processors.  A number of researchers believe that a 64-bit
  443. address space is large enough to act as a single global address space
  444. for all the memory (both primary and secondary) in a distributed
  445. system.  Examples of such systems include Angel, Mungi, and Opal.
  446. Security and protection are a major problem in such systems, and
  447. current approaches either rely on hardware assistance or stochastic
  448. algorithms, or ignore the problem.
  449.  
  450. Another approach is to divide each process's address space into
  451. different fixed regions, some of which are private and not shared, and
  452. some of which are shared with some other processes.  Ra, the Clouds
  453. kernel, takes this approach using O, P, and K address regions, with
  454. the O region shared between all processes executing in a given object;
  455. the P and K regions are local to a process and kernel, respectively.
  456. Here objects always appear at the same address but may not be visible
  457. from every address space.  By contrast, some systems, including Mirage
  458. and Mach, allow shared data to exist at differing addresses in
  459. different processes address spaces.  However, neither system does
  460. transparent pointer translation, so the address changes are not
  461. entirely transparent to the application.
  462.  
  463. As for the structuring of the shared region itself, some systems --
  464. for example, IVY and Mether -- use a single flat region: one
  465. continuous range of virtual addresses represent the shared address
  466. space and are managed by the DSM system.  This single address space is
  467. usually sub-divided into pages.  Most systems use paged segmentation:
  468. the shared region consists of disjoint pieces, which are usually
  469. managed separately and are not all mapped in any one process.
  470. Frequently, the segments (sometimes called memory objects, or windows)
  471. are related to the backing store.  For example, in Clouds, the object
  472. address space consists of windows onto larger segments; these segments
  473. are usually maintained on secondary storage.
  474.  
  475. ------------------------------
  476. Subject: [1.5.5] Fault tolerance
  477. From: Distributed systems
  478.  
  479. Most DSM systems ignore the fault tolerance issue or maintain that it
  480. is an operating system issue and should be handled by the underlying
  481. system.  However, it would appear that in practice a DSM system would
  482. strongly effect the fault tolerance of a system.  For example, in a
  483. system where several systems are sharing access to a set of data, the
  484. failure of any one of them could lead to the failure of all the
  485. connected sites (or, at least, some of the processes on each site).
  486. We are also presented with an unusual failure handling problem.  It is
  487. fairly easy to see how to handle a failed message or RPC, but how do
  488. you handle a failed page fault?
  489.  
  490. The original Clouds system provided recoverability using shadowing of
  491. segments and a transactional system using commits.  The recovery
  492. system was not really integrated with the DSM system and was merely
  493. implemented at the segment storage site.  In order to maintain a
  494. consistent view of data when one transaction is active at multiple
  495. nodes, they have more recently been forced to integrate the
  496. transaction system with the DSM support system.
  497.  
  498. ------------------------------
  499. Subject: [1.5.6] A brief bibliography on distributed shared memory
  500. From: Distributed systems
  501.  
  502. [Nitzberg & Lo, 1991]
  503.   Nitzberg, W. and Lo, V., `Distributed shared memory: a survey of
  504.     issues and algorithms', IEEE Computer, August 91, pp. 52-60
  505.  
  506. [Lauer & Needham, 1978]
  507. [Tam et al., 90]
  508.   Tam, M.-C., Smith, J. M. & Farber, D. J., `A taxonomy-based
  509.     comparison of several distributed shared memory systems', ACM
  510.     Operating Systems Review 24(3), July 90, pp. 40-67
  511.  
  512. [Li and Hudak, 89]
  513.   Li, K. & Hudak, P., `Memory coherence in shared virtual memory
  514.     systems', ACM Transactions on Computer Systems 7(4), November 89,
  515.     pp. 321-359
  516.  
  517. [Bennett et al., 90]
  518.   Bennett, J. K., Carter, J. B. & Zwaenopoel, W., `Munin:
  519.     distributed shared memory based on type-specific memory
  520.     coherence', Proceedings of the 2nd ACM SIGPLAN Symposium on
  521.     Principles and Practice of Parallel Programming, SIGPLAN Notices
  522.     25(3), March 90, pp. 168-176
  523.  
  524. [Gharachorloo et al., 90]
  525.   Gharachorloo, K., et al., `Memory consistency and event ordering in
  526.     scalable shared-memory multiprocessors', ACM SIGARCH News 18(2),
  527.     June 90
  528.  
  529. [Bershad et al., 93]
  530.   Bershad, B. N., et al., `The Midway distributed shared memory
  531.     system', Technical Report CMU-CS-93-119, School of Computer
  532.     Science, Carnegie Mellon University, 1993.  Available via
  533.     anonymous ftp from
  534.     <URL:ftp://ftp.cs.cmu.edu/project/mach/public/doc/published/midway.ps>.
  535.  
  536. [Cheriton, 86]
  537.   Cheriton, D. R., `Problem-oriented shared memory: a decentralized
  538.     approach to distributed system design', Proceedings of the 6th
  539.     International Conference on Distributed Computing Systems, May 86,
  540.     pp. 190-197
  541.  
  542. [Delp & Farber]
  543.   Delp, G. S. & Farber, D. J., `Memnet -- a different approach to a
  544.     network', Technical Report, Department of Electrical Engineering,
  545.     University of Delaware, ???
  546.  
  547.  
  548. ------------------------------
  549. Subject: [1.6] What have we learned?
  550. From: Distributed systems
  551.  
  552. Andy Tanenbaum started a (very long) thread on this topic in
  553. comp.os.research in April of 1992 [92-04-03-17-10.05].  The interested
  554. reader is directed to the comp.os.research archives, since this thread
  555. proved rather divisive (i.e. nobody really agreed on any issue).
  556.  
  557.  
  558. ------------------------------
  559. Subject: [2] Needful things
  560. From: Needful things
  561.  
  562. This FAQ is incomplete, and will probably remain in this state to a
  563. greater or lesser extent for ever and ever.  Should you feel willing
  564. to contribute some material, the following is a list of topics which
  565. ``urgently'' require treatment (some of which I may get around to
  566. covering myself at some point):
  567.  
  568. - naming in distributed systems
  569.