styx.ms 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737
  1. .ds TM \u\s-2TM\s+2\d
  2. .nr dT 6
  3. .nr XT 6
  4. .TL
  5. The Styx Architecture for Distributed Systems
  6. .AU
  7. Rob Pike
  8. Dennis M. Ritchie
  9. .AI
  10. Computing Science Research Center
  11. Lucent Technologies, Bell Labs
  12. Murray Hill, New Jersey
  13. USA
  14. .FS
  15. .FA
  16. Originally appeared in
  17. .I "Bell Labs Technical Journal" ,
  18. Vol. 4,
  19. No. 2,
  20. April-June 1999,
  21. pp. 146-152.
  22. .br
  23. Copyright © 1999 Lucent Technologies Inc. All rights reserved.
  24. .FE
  25. .AB
  26. A distributed system is constructed from a set of relatively
  27. independent components that form a unified, but geographically and
  28. functionally diverse entity. Examples include networked operating
  29. systems, Internet services, the national telephone
  30. switching system, and in general
  31. all the technology using today's diverse digital
  32. networks. Nevertheless, distributed systems remain difficult
  33. to design, build, and maintain, primarily because of the lack
  34. of a clean, perspicuous interconnection model for the
  35. components.
  36. .LP
  37. Our experience with two distributed operating systems,
  38. Plan 9 and Inferno, encourages us to propose such a model.
  39. These systems depend on, advocate, and generally push to the
  40. limit a fruitful idea: to present their
  41. resources as files in a hierarchical name space.
  42. The objects appearing as files may represent stored data, but may
  43. also be devices, dynamic information sources, interfaces to services,
  44. and control points. The approach unifies and provides basic naming,
  45. structuring, and access control mechanisms for all system resources.
  46. A simple underlying network protocol, Styx, forms
  47. the core of the architecture by presenting a common
  48. language for communication within the system.
  49. .LP
  50. Even within non-distributed systems, the presentation of services
  51. as files advantageously extends a familiar scheme for naming, classifying,
  52. and connecting to system resources.
  53. More important, the approach provides a natural way to build
  54. distributed systems, by using well-known technology for attaching
  55. remote file systems.
  56. If resources are represented as files,
  57. and there are remote file systems, one has
  58. a distributed system: resources available in one place
  59. are usable from another.
  60. .AE
  61. .SH
  62. Introduction
  63. .LP
  64. The Styx protocol is a variant of a protocol called
  65. .I 9P
  66. that
  67. was developed for the Plan 9 operating system[9man].
  68. For simplicity, we will use the name
  69. Styx throughout this paper; the difference concerns only the initialization of
  70. a connection.
  71. .LP
  72. The original idea behind Styx was to encode file operations between
  73. client programs and the file system,
  74. to be translated into messages for transmission on a computer network.
  75. Using this technology,
  76. Plan 9 separates the file server\(ema central repository for
  77. permanent file storage\(emboth from the CPU server\(ema large
  78. shared-memory multiprocessor\(emand from the user terminals.
  79. This physical separation of function was central to the original
  80. design of the system;
  81. what was unexpected was how well the model could be used to
  82. solve a wide variety of problems not usually thought of as
  83. file system issues.
  84. .LP
  85. The breakthrough was to realize that by representing
  86. a computing resource as a form of file system,
  87. many of the difficulties of making that resource available
  88. across the network would disappear naturally, because
  89. Styx could export the resource transparently.
  90. For example,
  91. the Plan 9 window system,
  92. .CW 8½
  93. [Pike91],
  94. is implemented as a dynamic file server that publishes
  95. files with names like
  96. .CW /dev/mouse
  97. and
  98. .CW /dev/screen
  99. to provide access to the local hardware.
  100. The
  101. .CW /dev/mouse
  102. file, for instance,
  103. may be opened and read like a regular file, in the manner of UNIX\*(TM device
  104. files, but under
  105. .CW 8½
  106. it is multiplexed: each client program has a private
  107. .CW /dev/mouse
  108. file that returns mouse events only when the client's window
  109. is the active one on the display.
  110. This design provides a clean, simple mechanism for controlling
  111. access to the mouse.
  112. Its real strength, though, is that the representation of the window system's
  113. resources as files allows Styx to make those resources available across the
  114. network.
  115. For example, an interactive graphics program may be run on a CPU server
  116. simply by having
  117. .CW 8½
  118. serve the appropriate files to that machine.
  119. .LP
  120. Note that although the resources published by Styx behave like files\(emthey
  121. have file names, file permissions, and file access methods\(emthey do not
  122. need to exist as standard files on disk.
  123. The
  124. .CW /dev/mouse
  125. file is accessed by standard file I/O mechanisms but is nonetheless a
  126. transient object fabricated dynamically by a running program;
  127. it has no permanent existence.
  128. .LP
  129. By following this approach throughout the system, Plan 9 achieves
  130. a remarkable degree of transparency in the distribution of resources[PPTTW93].
  131. Besides interactive graphics, services such as debugging, maintenance,
  132. file backup, and even access to the underlying network hardware
  133. can be made available across the network using Styx, permitting
  134. the construction of distributed applications and services
  135. using nothing more sophisticated than file I/O.
  136. .SH
  137. The Styx protocol
  138. .LP
  139. Styx's place in the world is analogous to
  140. Sun NFS[RFC][NFS] or Microsoft CIFS[CIFS], although it is simpler and easier to implement
  141. [Welc94].
  142. Furthermore, NFS and CIFS are designed for sharing regular disk files; NFS in particular
  143. is intimately tied to the implementation and caching strategy
  144. of the underlying UNIX file system.
  145. Unlike Styx, NFS and CIFS are clumsier at exporting dynamic device-like
  146. files such as
  147. .CW /dev/mouse .
  148. .LP
  149. Styx provides a view of a hierarchical, tree-shaped
  150. file system name space[Nee89], together with access information about
  151. the files (permissions, sizes, dates) and the means to read and write
  152. the files.
  153. Its users (that is, the people who write application programs),
  154. don't see the protocol itself; instead they see files that they
  155. read and write, and that provide information or change information.
  156. .LP
  157. In use, a Styx
  158. .I client
  159. is an entity on one machine that establishes communication with
  160. another entity, the
  161. .I server ,
  162. on the same or another machine.
  163. The client mechanisms may be built into the operating system, as they
  164. are in Plan 9 or Inferno[INF1][INF2], or into application libraries;
  165. a server may be part of the operating system, or just as often
  166. may be application code on a separate server machine. In any case, the
  167. client and server entities
  168. communicate by exchanging messages, and the effect is that the client
  169. sees a hierarchical file system that exists on the server.
  170. The Styx protocol is the specification of the messages that are exchanged.
  171. .LP
  172. At one level, Styx consists of messages of 13 types for
  173. .RS
  174. .IP \(bu
  175. Starting communication (attaching to a file system);
  176. .IP \(bu
  177. Navigating the file system (that is, specifying and
  178. gaining a handle for a named file);
  179. .IP \(bu
  180. Reading and writing a file; and
  181. .IP \(bu
  182. Performing file status inquiries and changes
  183. .RE
  184. .LP
  185. However, application writers simply code requests to open, read, or write
  186. files; a library or the operating system translates the requests
  187. into the necessary byte sequences transmitted over a communication
  188. channel. The Styx protocol proper specifies the interpretation of these
  189. byte sequences. It fits, approximately, at the OSI Session Layer level
  190. of the ISO standard classification.
  191. Its specification is independent of most details of machine architecture
  192. and it has been successfully used among machines of varying instruction
  193. sets and data layout.
  194. The protocol is summarized in Table 1.
  195. .KF
  196. .TS
  197. center box;
  198. l l
  199. --
  200. lfCW l.
  201. Name Description
  202. attach Authenticate user of connection; return FID
  203. clone Duplicate FID
  204. walk Advance FID one level of name hierarchy
  205. open Check permissions for file I/O
  206. create Create new file
  207. read Read contents of file
  208. write Write contents of file
  209. close Discard FID
  210. remove Remove file
  211. stat Report file state: permissions, etc.
  212. wstat Modify file state
  213. error Return error condition for failed operation
  214. flush Disregard outstanding I/O requests
  215. .TE
  216. .ce 100
  217. .ps -1
  218. Table 1. Summary of Styx messages.
  219. .ps
  220. .ce 0
  221. .KE
  222. .LP
  223. In use, an operation such as
  224. .P1
  225. open("/usr/rob/.profile", O_READ);
  226. .P2
  227. is translated by the underlying system into a sequence of Styx messages.
  228. After establishing the initial connection to the
  229. file server, an
  230. .CW attach
  231. message authenticates the user (the person or agent accessing the files) and
  232. returns an object called a
  233. .CW FID
  234. (file ID) that represents the root of the hierarchy on the server.
  235. When the
  236. .CW open()
  237. operation is executed, it proceeds as follows.
  238. .RS
  239. .IP \(bu
  240. A
  241. .CW clone
  242. message duplicates the root
  243. .CW FID ,
  244. returning a new
  245. .CW FID
  246. that can navigate the hierarchy without losing the connection to the root.
  247. .IP \(bu
  248. The new
  249. .CW FID
  250. is then moved to the file
  251. .CW /usr/rob/.profile
  252. by a sequence of
  253. .CW walk
  254. messages that step along, one path component at a time
  255. .CW usr , (
  256. .CW rob ,
  257. .CW .profile ).
  258. .IP \(bu
  259. Finally, an
  260. .CW open
  261. message checks that the user has permission to read the file,
  262. permitting subsequent
  263. .CW read
  264. and
  265. .CW write
  266. operations (messages) on the
  267. .CW FID .
  268. .IP \(bu
  269. Once I/O is completed, the
  270. .CW close
  271. message will release the
  272. .CW FID .
  273. .RE
  274. .LP
  275. At a lower level, implementations of Styx depend only on a reliable,
  276. byte-stream Transport communications layer. For example, it runs over either
  277. TCP/IP, the standard transmission control protocol
  278. and Internet protocol,
  279. or Internet link (IL), which is a sequenced, reliable datagram protocol
  280. using IP packets.
  281. It is worth emphasizing, though, that the model does not require the
  282. existence of a network to join the components; Styx runs fine
  283. over a Unix pipe or even using shared memory.
  284. The strength of the approach is not so much how it works over a network
  285. as that its behavior over a network is identical to its behavior locally.
  286. .SH
  287. Architectural approach
  288. .LP
  289. Styx, as a file system protocol, is merely a component in a
  290. more encompassing approach
  291. to system design: the presentation of resources as files.
  292. This approach will be discussed using a sequence of examples.
  293. .SH
  294. .I "Example: networking
  295. .LP
  296. As an example, access to a TCP/IP network in Inferno and Plan 9 systems
  297. appears as a piece of a file system, with (abbreviated) structure
  298. as follows[PrWi93]:
  299. .P1
  300. /net/
  301. dns/
  302. tcp/
  303. clone
  304. stats
  305. 0/
  306. ctl
  307. status
  308. data
  309. listen
  310. 1/
  311. ...
  312. ...
  313. ether0/
  314. 0/
  315. ctl
  316. status
  317. ...
  318. 1/
  319. ...
  320. ...
  321. .P2
  322. This represents a file system structure in which one can name, read, and write `files' with
  323. names like
  324. .CW /net/dns ,
  325. .CW /net/tcp/clone ,
  326. .CW /net/tcp/0/ctl
  327. and so on;
  328. there are directories of files
  329. .CW /net/tcp
  330. and
  331. .CW /net/ether0 .
  332. On the machine that actually has the network interface, all of these
  333. things that look like files are constructed by the kernel drivers that maintain
  334. the TCP/IP stack; they are not real files on a disk.
  335. Operations on the `files' turn into operations sent to the device drivers.
  336. .LP
  337. Suppose an application wishes to establish a connection over TCP/IP to
  338. .CW www.bell-labs.com .
  339. The first task is to translate the domain name
  340. .CW www.bell-labs.com
  341. to a numerical internet address; this is a complicated process, generally
  342. involving communicating with local and remote Domain Name Servers.
  343. In the Styx model, this is done by opening the file
  344. .CW /dev/dns
  345. and writing the literal string
  346. .CW www.bell-labs.com
  347. on the file; then the same file is read.
  348. It will return the string
  349. .CW 204.178.16.5
  350. as a sequence of 12 characters.
  351. .LP
  352. Once the numerical Internet address is acquired, the connection must be established;
  353. this is done by opening
  354. .CW /net/tcp/clone
  355. and reading from it a string that specifies a directory like
  356. .CW /net/tcp/43 ,
  357. which represents a new, unique TCP/IP channel.
  358. To establish the connection,
  359. write a message like
  360. .CW "connect 204.178.16.5
  361. on the control file for that connection,
  362. .CW /net/tcp/43/ctl .
  363. Subsequently, communication with
  364. .CW www.bell-labs.com
  365. is done by reading and
  366. writing on the file
  367. .CW /net/tcp/43/data .
  368. .LP
  369. There are several things to note about this approach.
  370. .RS
  371. .IP \(bu
  372. All the interface points look like files, and are
  373. accessed by the same I/O mechanisms already available in
  374. programming languages like C, C++, or Java. However, they do not
  375. correspond to ordinary data files on disk, but instead are creations
  376. of a middleware code layer.
  377. .IP \(bu
  378. Communication across the interface, by convention, uses printable character strings where
  379. feasible instead of binary information. This means that the syntax
  380. of communication does not depend on CPU architecture or language details.
  381. .IP \(bu
  382. Because the interface, as in this example with
  383. .CW /net
  384. as the interface with networking facilities, looks like a piece of a
  385. hierarchical file system, it can easily and nearly automatically
  386. be exported to a remote machine and used from afar.
  387. .RE
  388. .LP
  389. In particular, the Styx implementation encourages a natural way of providing
  390. controlled access to networks.
  391. Lucent, like many organizations, has an internal network not
  392. accessible to the international Internet, and has a few
  393. gateways between the inside and outside networks.
  394. Only the gateway machines are connected to both, and they implement
  395. the administrative controls for safety and security.
  396. The advantage of the Styx model is the ease with which
  397. the outside Internet can be used from inside.
  398. If the
  399. .CW /net
  400. file tree described above is provided on a gateway machine,
  401. it can be used as a remote file system from machines on the
  402. inside. This is safe, because this connection is one-way:
  403. inside machines can see the external network interfaces,
  404. but outside machines cannot see the inside.
  405. .SH
  406. .I "Example: debugging
  407. .LP
  408. A similar approach, borrowed and generalized from the UNIX
  409. system [Kill], is useful for controlling and discovering the status
  410. of the running processes in the operating system.
  411. Here a directory
  412. .CW /proc
  413. contains a subdirectory for each process running on the
  414. system; the names of the subdirectories correspond to
  415. process IDs:
  416. .P1
  417. /proc/
  418. 1/
  419. status
  420. ctl
  421. fd
  422. text
  423. mem
  424. ...
  425. 2/
  426. status
  427. ctl
  428. ...
  429. ...
  430. .P2
  431. The file names in the process directories refer to various aspects
  432. of the corresponding process:
  433. .CW status
  434. contains information about the state of the process;
  435. .CW ctl ,
  436. when written, performs operations like pausing, restarting,
  437. or killing the process;
  438. .CW fd
  439. names and describes the files open in the process;
  440. .CW text
  441. and
  442. .CW mem
  443. represent the program code and the data respectively.
  444. .LP
  445. Where possible, the information and control are again
  446. represented as text strings. For example, one line
  447. from the
  448. .CW status
  449. file of a typical process might be
  450. .DS
  451. .CW "samterm dmr Read 0 20 2478910 0 0 ...
  452. .DE
  453. which shows the name of the program, the owner, its state, and several numbers
  454. representing CPU time in various categories.
  455. .LP
  456. Once again, the approach provides several payoffs.
  457. Because process information is represented in file form,
  458. remote debugging (debugging programs on another machine)
  459. is possible immediately by remote-mounting the
  460. .CW /proc
  461. tree on another machine.
  462. The machine-independent representation of information means
  463. that most operations work properly even if the remote machine
  464. uses a different CPU architecture from the one doing the
  465. debugging.
  466. Most of the programs that deal
  467. with status and control contain no machine-dependent parts
  468. and are completely portable.
  469. (A few are not, however: no attempt is made to render the
  470. memory data or instructions in machine-independent form.)
  471. .SH
  472. .I "Example: PathStar\*(TM Access Server
  473. .LP
  474. The data shelf of Lucent's PathStar Access Server[PATH] uses Styx to connect
  475. the line cards and other devices on the shelf to the control computer.
  476. In fact, Styx is the protocol for high-level communication on the backplane.
  477. .LP
  478. The file system hierarchy served by the control computer includes a structure
  479. like this:
  480. .P1
  481. /trip/
  482. config
  483. admin/
  484. ospfctl
  485. ...
  486. boot/
  487. 0/
  488. ctl
  489. eeprom
  490. memory
  491. msg
  492. pack
  493. alarm
  494. ...
  495. 1/
  496. ...
  497. /net/
  498. ...
  499. .P2
  500. The directories under
  501. .CW /net
  502. are similar to those in Plan 9 or Inferno; they form the interface to the
  503. external IP network.
  504. The
  505. .CW /trip
  506. hierarchy represents the control structure of the shelf.
  507. .LP
  508. The subdirectories under
  509. .CW /trip/boot
  510. each provide access to one of the line cards or other devices in the shelf.
  511. For example, to initialize a card one writes the text string
  512. .CW reset
  513. to the
  514. .CW ctl
  515. file of the card, while bootstrapping is done by copying the control
  516. software for the card into the
  517. .CW memory
  518. file and writing a
  519. .CW reset
  520. message to
  521. .CW ctl .
  522. Once the line card is running,
  523. the other files present an interface to the higher-level structure of the device:
  524. .CW pack
  525. is the port through which IP packets are transferred to and from the card,
  526. .CW alarm
  527. may be read to discover outstanding conditions on the card, and so on.
  528. .LP
  529. All this structure is exported from the shelf using Styx.
  530. The external element management software (EMS) controls and monitors the
  531. shelf using Styx operations.
  532. For example, the EMS may read
  533. .CW /trip/boot/7/alarm
  534. and discover a diagnostic condition.
  535. By reading and writing the other files under
  536. .CW /trip/boot/7/ ,
  537. the card may be taken off line, diagnosed, and perhaps reset or substituted,
  538. all from the system running the EMS, which may be elsewhere in the network.
  539. .LP
  540. Another example is the implementation of SNMP in the PathStar Access Server.
  541. The functionality of SNMP is usually distributed through the various components
  542. of a network, but here it is a straightforward adaption process,
  543. running anywhere in the network, that translates SNMP requests to Styx
  544. operations in the network element.
  545. Besides dramatically simplifying the implementation, the natural
  546. ability for aggregation permits
  547. a single process to provide SNMP access to an arbitrarily complex network subsystem.
  548. Yet the structure is secure: the file-oriented nature of the operations make it
  549. easy to establish standard authentication and security controls to guarantee
  550. that only trusted parties have access to the SNMP operations.
  551. .LP
  552. There are local benefits to this architecture, as well.
  553. Styx provides a single point in the design where control can be separated
  554. from the details of the underlying fabric, isolating both from changes in the
  555. other. Components become more adaptable: software can be upgraded
  556. without worrying about hidden dependencies on the hardware,
  557. and new hardware may be installed without updating the control
  558. software above.
  559. .SH
  560. Security issues
  561. .LP
  562. Styx provides several security mechanisms for
  563. discouraging hostile or accidental actions that injure the integrity
  564. of a system.
  565. .LP
  566. The underlying file-communication protocol includes
  567. user and group identifiers that a server may check against
  568. other authentication.
  569. For example, a server may check, on a request to open a file,
  570. that the user ID associated with the request is permitted to
  571. perform the operation.
  572. This mechanism is familiar from general-purpose operating
  573. systems, and its use is well-known.
  574. It depends on passwords or stronger mechanisms for authenticating
  575. the identity of clients.
  576. .LP
  577. The Styx approach of providing remote resources
  578. as file systems over a network encourages genuinely secure access
  579. to the resources in a way transparent to applications, so that
  580. authentication transactions need not be provided as part of each.
  581. For example, in Inferno, the negotiation of an initial connection
  582. between client and server may include installation of any of
  583. several encrypting or message-digesting protocols that
  584. supervise the channel.
  585. All application use of the resources provided by the server
  586. is then protected against interference, and the server
  587. has strong assurance that its facilities are being used in
  588. an authorized way.
  589. This is relevant both for general-purpose file servers,
  590. and, in the telephony field, is especially useful for safe
  591. remote administration.
  592. .SH
  593. Summary
  594. .LP
  595. Presentation of resources as a piece of a possibly remote file system
  596. is an attractive way of creating distributed systems that treads a
  597. path between two extremes:
  598. .IP 1
  599. All communication with other parts of the system is by
  600. explicit messages sent between components.
  601. This communication differs in style from applications' use
  602. of local resources.
  603. .IP 2
  604. All communication is by means of
  605. closely shared resources: the CPU-addressable memory in
  606. various parts is made directly available across a big network;
  607. applications can read and write far-away objects exactly as
  608. they do those on the same motherboard as their own CPU.
  609. .LP
  610. Something like the first of these extremes is usually more evident
  611. in today's systems, although either the operating system or software
  612. layered upon it usually paper over some of the rough spots.
  613. The second remains more difficult to approach, because
  614. networks (especially big ones like the Internet) are not very
  615. reliable, and because
  616. the machines on them are diverse in processor architecture
  617. and in installed software.
  618. .LP
  619. The design plan described and advocated in this paper
  620. lies between the two extremes.
  621. It has these advantages:
  622. .IP \(bu
  623. .I "A simple, familiar programming model for reading and writing named files" .
  624. File systems have well-defined naming, access, and permissions structures.
  625. .IP \(bu
  626. .I "Platform and language independence" .
  627. Underlying access to resources is
  628. at the file level, which is provided nearly everywhere, instead
  629. of depending on facilities available only with particular languages
  630. or operating systems.
  631. C++ or Java classes, and C libraries can be constructed
  632. to access the facilities.
  633. .IP \(bu
  634. .I "A hierarchical naming and access control structure" .
  635. This encourages clean
  636. and well-structured design of resource naming and access.
  637. .IP \(bu
  638. .I "Easy testing and debugging" .
  639. By using well-specified, narrow interfaces
  640. at the file level, it is straightforward to observe the communication
  641. between distributed entities.
  642. .IP \(bu
  643. .I "Low cost" .
  644. Support software, at both client and server,
  645. can be written in a few thousand lines
  646. of code, and will occupy only small space in products.
  647. .LP
  648. This approach to building systems is successful in the general-purpose
  649. systems Plan 9 and Inferno;
  650. it has also been used to construct systems specialized for telephony, such
  651. as Mantra[MAN] and the PathStar Access Server.
  652. It supplies a coherent, extensible structure both to the internal communications
  653. within a single system and external communication between heterogeneous
  654. components of a large digital network.
  655. .LP
  656. .SH
  657. References
  658. .nr PS -1
  659. .nr VS -1
  660. .IP [NFS] 11
  661. R. Sandberg, D. Goldberg, S. Kleiman, D. Walsh, and
  662. B. Lyon,
  663. ``Design and Implementation of the Sun Network File System'',
  664. .I "Proc. Summer 1985 USENIX Conf." ,
  665. Portland, Oregon, June 1985,
  666. pp. 119-130.
  667. .IP [RFC] 11
  668. Internet RFC 1094.
  669. .IP [9man] 11
  670. .I "Plan 9 Programmer's Manual" ,
  671. Second Edition,
  672. Vol. 1 and 2,
  673. Bell Laboratories,
  674. Murray Hill, N.J.,
  675. 1995.
  676. .IP [Kill84] 11
  677. T. J. Killian,
  678. ``Processes as Files'',
  679. .I "Proc. Summer 1984 USENIX Conf." ,
  680. June 1984, Salt Lake City, Utah, June 1984, pp. 203-207.
  681. .IP [Pike91] 11
  682. R. Pike,
  683. ``8½, the Plan 9 Window System'',
  684. .I "Proc. Summer 1991 USENIX Conf." ,
  685. Nashville TN, June 1991, pp. 257-265.
  686. .IP "[PPTTW93] " 11
  687. R. Pike, D.L. Presotto, K. Thompson, H. Trickey, and P. Winterbottom, ``The Use of Name Spaces in Plan 9'',
  688. .I "Op. Sys. Rev." ,
  689. Vol. 27, No. 2, April 1993, pp. 72-76.
  690. .IP [PrWi93] 11
  691. D. L. Presotto and P. Winterbottom,
  692. ``The Organization of Networks in Plan 9'',
  693. .I "Proc. Winter 1993 USENIX Conf." ,
  694. San Diego, Calif., Jan. 1993, pp. 43-50.
  695. .IP [Nee89] 11
  696. R. Needham, ``Names'', in
  697. .I "Distributed systems" ,
  698. edited by S. Mullender,
  699. Addison-Wesley,
  700. Reading, Mass., 1989, pp. 89-101.
  701. .IP [CIFS]
  702. Paul Leach and Dan Perry, ``CIFS: A Common Internet File System'', Nov. 1996,
  703. .I "http://www.microsoft.com/mind/1196/cifs.htm" .
  704. .IP [INF1]
  705. .I "Inferno Programmer's Manual",
  706. Third Edition,
  707. Vol. 1 and 2, Vita Nuova Holdings Limited, York, England, 2000.
  708. .IP [INF2]
  709. S.M. Dorward, R. Pike, D. L. Presotto, D. M. Ritchie, H. Trickey,
  710. and P. Winterbottom, ``The Inferno Operating System'',
  711. .I "Bell Labs Technical Journal"
  712. Vol. 2,
  713. No. 1,
  714. Winter 1997.
  715. .IP [MAN]
  716. R. A. Lakshmi-Ratan,
  717. ``The Lucent Technologies Softswitch\-Realizing the Promise of Convergence'',
  718. .I "Bell Labs Technical Journal" ,
  719. Vol. 4,
  720. No. 2,
  721. April-June 1999,
  722. pp. 174-196.
  723. .IP [PATH]
  724. J. M. Fossaceca, J. D. Sandoz, and P. Winterbottom,
  725. ``The PathStar Access Server: Facilitating Carrier-Scale Packet Telephony'',
  726. .I "Bell Labs Technical Journal" ,
  727. Vol. 3,
  728. No. 4,
  729. October-December 1998,
  730. pp. 86-102.
  731. .IP [Welc94]
  732. B. Welch,
  733. ``A Comparison of Three Distributed File System Architectures: Vnode, Sprite, and Plan 9'',
  734. .I "Computing Systems" ,
  735. Vol. 7, No. 2, pp. 175-199 (1994).
  736. .nr PS +1
  737. .nr VS +1