Shared Libraries: Unique to Suns??
Al Varney
varney at cbnewsd.att.com
Mon Mar 25 16:36:54 AEST 1991
In article <1991Mar24.172224.4514 at yenta.alb.nm.us> dt at yenta.alb.nm.us (David B. Thomas) writes:
>myamin at cbnewsm.att.com (m.yamin) writes:
>
>>In fact, the UnixPC may have had the first released UNIX implementation
>>of shared libraries.
>
>Which brings up a historical question I've wondered about: was the unix pc
>the first unix machine to feature dynamically loadable device drivers?
Answer to the "device driver" question: Nope. These references are
from memory, if you really want facts give me a holler (and some time).
There's UNIX(tm) and there's stuff that's close. For real UNIX, there
was a version called UNIX-RT (real time) that briefly lived under the
name MERT (multi-execution real time??). It died for many reasons....
In life, it was a 3-level OS (user, supervisor and kernel) that implemented
process-to-process communication via message passing. The kernel implemented
a very simple process manager, with swapping. The visible part of UNIX
was really a File Manager process and a Task Manager process running as
"supervisor"-level processes. Device drivers were loaded dynamically,
when the File Manager (or someone) opened them. If there were no active
open()s, the device driver could be replaced without a reboot. If the
devices were never opened, the drivers just took up space on the system
disk. The system also supported real asynchronous I/O direct to user
memory, allowing (for example) a double-buffered tape-to-tape copy with
huge block sizes to really fly -- but the CPU slowed to a crawl because
of memory bandwidth problems.
An offshoot of MERT lives on in the 5ESS(tm) Switch.
At one time, a UNIX lived on top of the core of IBM's TSS (Time Sharing
System) on System 370s, etc. TSS lived a long but totally ignored life
as the "real" OS for System 360/67 multiprocessors. It featured many of
the time-sharing benefits of UNIX before UNIX existed. Unfortunately,
while the features of file-sharing, page swapping, automatic file allocation,
shared read-only text, etc. were all there, the implementation was the
usual IBM monolith that combined task control, file management and
command line interpretation into one unbreakable whole. BUT it did,
I'm told, allow for on-the-fly replacement of some portions of the OS,
including device access control (or whatever it was called).
On the dynamic library topic: TSS implements (it still lives!) a
very dynamic form of library loading/sharing. If you incompletely
link-edit a module, the unresolved references show up as address FFFFFFFF.
When you execute the module, it gets paged in as needed and, if you
reference any of the unresolved addresses, the Paging Supv. looks at
the symbol table for you module to find the desired name, then looks at
all the entry points of all modules on the JOBLIB chain, looking for that
name. If the name resolved to a module that could live as shared text,
it would attempt to load/use a shared reference. Obviously slow for
production stuff, but great for development!!! It has limitations I
don't recall, due in part to the "segment table" limits of the paging
architecture.
So, if you allow a UNIX implemented on "top of" TSS to count, then
a System 370 might well have been the first to implement both UNIX
shared libraries and UNIX loadable "device drivers".... And for the
programmers that got dedicated system time, a sort of BIG UNIX PC...
Additional info. on the MERT/UNIX-RT system was in (I believe) the
second all-UNIX issue of the Bell System Technical Journal, around 1982??
Al Varney, AT&T, Lisle, IL
More information about the Comp.unix.wizards
mailing list