diff --git a/.gitignore b/.gitignore index 4488bc2..bc44acf 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,15 @@ build-aux/ /mach/machine /linux/src/include/asm /linux/dev/include/asm +/doc/mach.aux +/doc/mach.cp +/doc/mach.cps +/doc/mach.fn +/doc/mach.fns +/doc/mach.ky +/doc/mach.log +/doc/mach.pdf +/doc/mach.pg +/doc/mach.toc +/doc/mach.tp +/doc/mach.vr diff --git a/doc/mach.texi b/doc/mach.texi index 6fc79f7..937966d 100644 --- a/doc/mach.texi +++ b/doc/mach.texi @@ -16,7 +16,7 @@ @syncodeindex tp fn @c Get the Mach version we are documenting. -@include version.texi +@c @include version.texi @set EDITION 0.4 @c @set ISBN X-XXXXXX-XX-X @@ -408,8 +408,81 @@ system. @node History @section History -XXX A few lines about the history of Mach here. - +Mach has quite a history. Everything actually started at the +University of Rochester in 1975. It was invented to demonstrate how +operating systems could be built using a modular design where +processes communicated using message passing, even across +networks. The system was called the Rochester Intelligent Gateway and +ran on a 16 bit mini computer called Eclipse from Data General. + +One of the engineers behind the project was Richard Rashid. In 1979 he +moved his socks to Carnegie Mellon University to continue his research +on message passing operating systems. The result emerged in 1981 and +was called Accent. + +Accent kept running at CMU until 1984 but was by then being run over +by UNIX. Rashid then decided to use an early embrace strategy and +started designing the third generation OS project called Mach. By +making Mach compatible with UNIX, Mach was supposed to gain a lot of +available UNIX software. + +Mach was a vast improvement over Accent. It incorporated parts +commonly used today, such as: threads, better IPC, multiprocessor +support and an advanced VM system. + +At the time of Mach's conception, DARPA was seeking a multiprocessor +(MP) capable OS and found Mach. With money from the Dept. of Defense, +4.2BSD support was added, to bloat the kernel; but most of all, to add +complete UNIX compatibility. + +Now enters the UNIX war. + +UNIX was owned by AT&T which controlled the market almost +completely. Industry giants such as IBM, DEC and H got together and +formed the Open Software Foundation, OSF. In an effort to conquer +market share, OSF took the Mach 2.5 release and made it the OSF/1 +system. By that time Mach contained a lot of BSD and AT&T code but the +OSF hoped that it would be able to take control of the rudder with +OSF/1. What happens after that is a story better told by someone else. + +In 1989 CMU decided to revamp Mach. They removed the bloat and put the +UNIX emulation in user space making the Mach 3.0 release -- the pure +Mach release. + +Later on support for Mach 3.0 at CMU vaned and the project was taken +over by the University of Utah. The FLUX group started the Mach4 +project. An ambitious project which included complete rewrite of the +x86 support code and integration of Linux 2.0 drivers. That's right, +Linux awoke around 1991 so this makes it apx. 1994. + +GNU Mach is based on Mach4 from University of Utah, which in turn is +based on Mach3 from Carnegie-Mellon University. The last release of +Mach4 was the UK22 release. + +The OSKit was what evolved when the Mach4 project at University of +Utah was dropped. The people involved wanted to reuse the work they +had put into Mach in the form of hardware support and drivers. + +The oskit-mach version of GNU Mach was presented in November 1999 by +Roland +McGrath. http://mail.gnu.org/pipermail/bug-hurd/1999-November/003554.html +The purpose of the port was to get better hardware support through new +drivers and platform code available in the OSKit. + +On May 27 2002, after the Gnumach 1.3 release, Roland McGrath merged +OSKit-Mach onto the HEAD of CVS making it the Gnumach 2.x mainline. + +Meanwhile, OSKit became unmaintained, thus posing more of a burden on +than being helpful in GNU Mach development. Consequently, as of March +2006, nobody is working on OSKit Mach, or trying to use it. + +In 2005 Gianluca Guida started a different attempt to use the osenv +interface with minimal changes to GNU Mach 1.x, thus allowing use of +the generic driver interface while importing as little of the +umaintained OSKit code as possible. However, there turned out to be +serious problems with OSKit, so this attempt was abandoned as well. + +Today, GNU Mach development focuses on the 1.x branch again. @node Installing @chapter Installing @@ -3932,7 +4005,7 @@ primitive. The lock values must be one or more of the following values: Only data which is cached at the time of this call is affected. When a running thread requires a prohibited access to cached data, the kernel will issue a @code{memory_object_data_unlock} call specifying the forms -of access required. +of access required. Once all of the actions requested by this call have been completed, the kernel issues a @code{memory_object_lock_completed} call on the @@ -4209,12 +4282,12 @@ value is ignored. @cindex thread port @cindex port representing a thread -@deftp {Data type} thread_t +@deftp {Data type} thread_t This is a @code{mach_port_t} and used to hold the port name of a thread port that represents the thread. Manipulations of the thread are implemented as remote procedure calls to the thread port. A thread can get a port to itself with the @code{mach_thread_self} system call. -@end deftp +@end deftp @menu * Thread Creation:: Creating new threads. @@ -5445,7 +5518,7 @@ Everything described in this section is declared in the header file @cindex ports representing a host @cindex host name port -@deftp {Data type} host_t +@deftp {Data type} host_t This is a @code{mach_port_t} and used to hold the port name of a host name port (or short: host port). Any task can get a send right to the name port of the host running the task using the @code{mach_host_self} @@ -5694,7 +5767,7 @@ mapped-time interface: @c XXX Complete the example. @example -do +do @{ secs = mtime->seconds; usecs = mtime->microseconds; @@ -5733,7 +5806,7 @@ sets and control the processors and processor sets. A processor is not a central part of the interface. It is mostly of relevance as a part of a processor set. Threads are always assigned to processor sets, and all processors in a set are equally involved in -executing all threads assigned to that set. +executing all threads assigned to that set. The processor set is represented by two ports, a name port @var{processor_set_name} used to query information about the host @@ -5768,7 +5841,7 @@ manipulate it. @cindex processor set name port @cindex port representing a processor set name -@deftp {Data type} processor_set_name_t +@deftp {Data type} processor_set_name_t This is a @code{mach_port_t} and used to hold the port name of a processor set name port that names the processor set. Any task can get a send right to name port of a processor set. The processor set name @@ -5776,7 +5849,7 @@ port allows to get information about the processor set. @end deftp @cindex processor set port -@deftp {Data type} processor_set_t +@deftp {Data type} processor_set_t This is a @code{mach_port_t} and used to hold the port name of a privileged processor set control port that represents the processor set. Operations on the processor set are implemented as remote procedure @@ -6128,7 +6201,7 @@ This is a pointer to a @code{struct processor_set_sched_info}. @cindex processor port @cindex port representing a processor -@deftp {Data type} processor_t +@deftp {Data type} processor_t This is a @code{mach_port_t} and used to hold the port name of a processor port that represents the processor. Operations on the processor are implemented as remote procedure calls to the processor @@ -6307,7 +6380,7 @@ has control over the device master port can use all hardware devices. @cindex device port @cindex port representing a device -@deftp {Data type} device_t +@deftp {Data type} device_t This is a @code{mach_port_t} and used to hold the port name of a device port that represents the device. Operations on the device are implemented as remote procedure calls to the device port. Each device @@ -6864,7 +6937,7 @@ display in signed decimal @item u display in unsigned decimal -@item r +@item r display in current radix, signed @item c