Multiple threads (program counters executing in the same address
space) make it easier to write programs that deal with related
asynchronous activities and that execute faster on shared-memory
multiprocessors. Supporting multiple threads places new constraints
on the design of operating system interfaces. Part I of this report
presents guidelines for designing (or redesigning) interfaces for
multithreaded clients. We show how these guidelines were used to
design an interface to UNIX-compatible file and process management facilities in the
Topaz operating system. Two implementations of this interface are in
everyday use: a native one for the Firefly multiprocessor, and a
layered one running within a UNIX process. Part II is the actual
programmer's manual for the interface discussed in Part I.