The Unix Service Access Facility

The Service Access Facility was introduced in AT&T Unix System 5 Release 4 in 1988. It obsoleted the notion of init directly spawning getty processes under the control of /etc/inittab, amongst other things. It is so largely forgotten nowadays that there has been no mention of it at all in Wikipedia for over 20 years.

Features

Its major features, derided by some at the time as overcomplicated, will sound eerily familiar to modern ears, because they are the givens of modern service management subsystems. In retrospect, they do not seem complex at all.

What it did not do, compared to modern service management toolsets, is manage socket services that were not invoked on demand, per connection. It also did not have facilities for services that did not fit under the "port" umbrella of a terminal device or a network connection, such as cron.

Basic components

/etc/inittab contained one record to invoke the Service Access Controller, /usr/lib/saf/sac. There were no records invoking getty against terminal devices any more. The configuration information was not /etc/inittab records any more but various system-wide, per-port-monitor, and per-service configuration files all under /etc/saf/. This was a three-level directory tree, with system-wide configuration at the top level, per-port-monitor configuration at the next, and per-service configuration at the level below that.

The SAC in turn spawned the port monitors. One of those port monitors was listen which handled listening sockets. The other was ttymon, which handled connections and disconnections across one or more terminal devices, and itself in turn spawned the TUI login sessions.

It was the SAC and the port monitors that handled updating the Unix login database. init was not involved and had no dealings in login accounting.

Further reading


© Copyright 2018,2023 Jonathan de Boyne Pollard. "Moral" rights asserted.
Permission is hereby granted to copy and to distribute this web page in its original, unmodified form as long as its last modification datestamp is preserved.