Access to kmem - System namelist - 'ps' etc

Rob Warnock rpw3 at redwood.UUCP
Sat Dec 8 11:28:20 AEST 1984


Just a hint... Other systems have been faced with this problem in the
past. It might be worth looking around to see how others have addressed it.
For one "reasonable" implementation of system calls to fetch kernel tables,
go look at a copy of the TOPS-10 Monitor Calls Manual (I hear they're still
sold at some local DEC offices) and look at the "gettab" call and the data
structures it references.

- There are "n" tables, sub-indexed by item number. New tables (added as the
  kernel functionality changes) are added to the end. The low numbers don't
  change across releases. Often the sub-index is the job (UNIX "process")
  number. Much more (but not all) of the per-job information is kept in main
  memory than in UNIX (i.e., the "proc" tables are bigger and the "upages" are
  smaller). Functions are provided to assist in finding things on swap space.

- Tables can be variable length, and range-checking is done when you ask
  for an item.

- Some tables are priviledged to the super-user "[1,2]"; some are wide
  open; and some can be read by anyone if you are asking about "this"
  job (but only [1,2] can ask about other jobs).

- As expected, all of the tables and all of the fields and all of the magic
  values within fields have symbolic names. Unfortunately, only languages
  with macro capabilities (such as MACRO-10 or BLISS) can easily get at them.
  (In UNIX read "as" and "C".)

- Provisions are there (and used) to handle sub-tables of arbitrary
  extent, such as when you have multiple CPUs and want per-CPU data
  rather than per-system (TOPS-10/SMP supported up to 6 CPUs, last time
  I looked), such as # of interrupts by CPU, or idle time by CPU, etc.

- For any table, you can get the address of the table (if you are [1,2]).

- Instead of /dev/mem, per se, there are the general "peek" and "poke" calls,
  for those (hopefully rare) times one needs to twiddle bits. (c.f. next para.)

- A system call named "spy" (apt name) allows the kernel itself to be
  mapped read-only into your address space, ENORMOUSLY speeding up "systat"
  (a.k.a.  "ps") and "sysdpy" (a.k.a. "mon" in net.sources recently).

- TOPS-10 has a restricted form of setuid programs ("jacct" programs), so
  all of this can be hidden safely for ordinary users to access (like "ps").
  [See Note]

- There is MUCH MUCH more in these tables than I have ever seen displayed
  on any TOPS-10 program, or any 4.1bsd program for that matter. One sometimes
  wonders at the overhead of maintaining the data in the tables! (although
  much of it there just to help DEC's internal developers tune the system).
  But looking more closely one sees that you're only paying for pointers
  to tables that have to be there anyway (pointers are cheap).

- Along with the "gettab" facility, there is the "meter" facility which allows
  a data-gathering program to activate "meter points" in the kernel. The program
  gets sent an event record each time control passes through such a meter point.
  One can reduce the number of events recorded by qualifying the event with such
  things as job number, number of times per event, contents of some data field,
  etc.

All in all, I think UNIX hackers could gain a number of good ideas by browsing
through the manual for this ancient but venerable O.S. -- in particular, the
software-interrupt, async I/O, and real-time features should drop into UNIX
quite nicely (inasmuch as they were added progressively to TOPS-10 itself).

	[Note] It's my understanding that the Bell Labs patent on "setuid"
	applies only to cases where the setuid is an attribute of the FILE,
	and also only when the "uid" to set to can be a VARIABLE, since systems
	such as TOPS-10 had the restricted case of setuid-root (based on a
	kernel table of magic filenames) some time before UNIX.


Rob Warnock
Systems Architecture Consultant

UUCP:	{ihnp4,ucbvax!dual}!fortune!redwood!rpw3
DDD:	(415)572-2607
Envoy:	rob.warnock/kingfisher
USPS:	510 Trinidad Ln, Foster City, CA  94404



More information about the Comp.unix.wizards mailing list