#PDF of #Tandem tech report TR-89.3, explaining the programming API of the Transaction Monitoring Facility, which supports transactions distributed across requester and long-lived server processes.
on 02016-08-11#PDF of #Tandem tech report 91.1 on the differences between C and #TAL.
on 02016-08-08#PDF of #Tandem tech report 86.2, which explains the process-pair #fault-tolerance approach, and in particular why they were moving away from having the active process transmit images of its memory space to the backup process. Contains the very amusing sentence, “We believe most faults in production software are transients (Heisenbugs).”
on 02016-08-08All (?) 53 #Tandem tech reports.
on 02016-08-08#Tandem Systems Review; no tables of contents, just a pile of PDFs. In here they refer to “Tandem’s message-based Guardian™ 90 operating system”. Mostly marketing bullshit.
on 02016-08-08#Tandem Guardian Programmer’s Guide #PDF. Very interesting: “Passive checkpoint is impractical in programs using the standard heap, so it is used mostly in TAL and pTAL programming.” A bunch of stuff about “sync depth” for #fault-tolerance that I don’t understand; apparently that’s a number of requests that “the system” remembers the responses to, replaying them if you fail over from a checkpoint, so that you can wait that many requests before checkpointing.
on 02016-08-08#Tandem Guardian User’s Guide #PDF, 1993–2000, with a #TACL #tutorial and a bunch of other sysadmin stuff. Apparently “NSK” is “NonStop Kernel”. Apparently “supergroup” user ids are (255,n), and “EDIT files”, file code 101 are the kind of file that TACL scripts are stored in, and that’s what TEDIT creates. The TACL command interpreter program is in $SYSTEM.SYSnn.TACL for some number nn. Explains users, groups, etc.; rather surprisingly you can run your command interpreter as a failover process pair: “If you want the remote TACL process to run as a NonStop™ process pair instead, enter \HERST.TACL / NAME, CPU 1 / 2.” It had command-line editing that sucked total shit.
Debugging #Tandem programs from Eclipse on Microsoft Windows. Apparently there are “process Snapshot files” with file code 130 that are like core files that you can feed to the debugger. (Also you can connect over ssh to debug live processes on TNS/E and TNS/X but not TNS or TNS/R, where you should use Inspect directly. Apparently the ssh debugging thing works by remote-controlling an Inspect process through its command line.) This shitty #PDF is full of fucking screenshots of Eclipse, but some of them are actually interesting, like Eclipse’s process browser showing the running processes on a live Tandem system. TNS/X is apparently amd64, from the register view, while TNS/E has 8 branch registers, 128 GP registers, 64 floating-point registers… looks like Itanic!
on 02016-08-08#Tandem #PDF from 1993 about their new “D-series” operating system, the one that allowed more than 256 processes per CPU and variable-length filenames, although this document came out with D20, when D10 was already out. At the time they still supported Pascal. Oh my god, TNS had FCBs like CP/M? Also “process control blocks”? Apparently “TNS/R” refers to the hardware, while they just called the operating system “the operating system”; not sure when they started calling it “NSK”. Apparently processes can “open” “applications”, such as “word processors or calculators”, and “requester processes” can “open” a “server” (becoming “an opener”) to make a request and get a reply, either by name or by PIN, and “a typical application consists of several processes”. The old filenames were 12 words, which I guess means 8 bytes each of volume, subvolume, and filename, but the new format didn’t actually expand the limits! (Except in a few corner cases.) Device names begin with dollar signs, such as $TAPE001, $LAZRPTR.#QWERTY, \TOKYO.$TERM080, or \NY.$LINEPTR.#ROOM10. Server names do too, such as $SERVR, $Z146, $SPLS. You can identify remote processes in this way too; you can open both local and remote processes as files. [node-name.]$process-name[:sequence-number][.#q1[.q2]] is the full process name format. The sequence number is used if you want to ensure you notice if a process dies and gets restarted (but not if a backup process takes over for a primary process). Unnamed processes can be referred to with $:cpu:pin, where cpu is a number from 0 to 15.
#PDF of the #Tandem C runtime library reference manual for C programs compiled by the TNS C compiler, which I think is the one with 16-bit pointers and ints some of the time, but not the TNS/R native C compiler. Apparently there is a thing called “Edit files” where you can seek by line number? Which can skip lines? But this involves sequential scanning of the file? And the environment variables are STDIN, STDOUT, STDERR (filenames) and DEFAULTS, which is the cwd? Oh, and to perform a “backup open” from a “backup process”, the “primary process” must send you the “file open state information” through “the $RECEIVE facility”, which is a file?
on 02016-08-08#PDF on the #Tandem Enscribe “database”, which is more like an ISAM library (with an option for unstructured files which are like Unix files). A file can have partitions on different volumes (disks) and different networks nodes.
on 02016-08-08#PDF on #Tandem SQL databases; apparently their old one is called “SQL/MP” and their new one is called “SQL/MX” and supports SQL:1999, moving-window aggregations, statistical sampling, pub-sub, batched results, Java stored procedures, right outer joins, and using a #SQL value expression in a SELECT list or a scalar subquery as the update value in an UPDATE SET clause. MXCI is their SQL REPL for it: “conversational interface”. Interesting note: “Non-audited tables [the Transaction Management Facility, TMF, is a part of their OS that does update logging, called ‘auditing’] are not protected by transactions and follow a different logging and error handling model than audited tables. In NonStop SQL/MX, certain situations such as DML error occurrences or utility operations with DML operations can lead to inconsistent data within a non-audited table or between a non-audited table and its indices.”
#PDF on #Tandem profile-guided optimization, which is supported for programs in C, C++, and pTAL, but not COBOL. Lots of notes about things like what happens if you “move a source file between an OSS directory and a Windows directory or Guardian subvolume.”
on 02016-08-08#PDF on #Tandem linkers eld and xld: eld produces files with a file type of 500 for TNS/E, while xld produces files with a file type of 800 for TNS/X. “The development environments (Guardian, OSS or PC)” is mentioned. Their invocation is Unixy; object files are ELF. There’s also a run-time linker rld. The TNS/E C compiler is in a place such as $data01.toolsy02.ccomp, which with the name of the node (“system name”) might be \SPEEDY.$DATA01.TOOLSY02.CCOMP. This would be mapped into the Guardian namespace at /G/data01/toolsy02/ccomp. Apparently their old linker was called “Binder” and was interactive.
A #Tandem #TACL program. The #syntax looks shitty but at least it supports structured control structures: [#IF [I1] < 1 |THEN| [<a href="../tag/set.html">#SET</a> I1 1]]. The [] are the equivalent of $() or $ in ksh.
A #Tandem TAL program. The TAL surface syntax looks shitty as hell, like stropping Algol-60 with touches of COBOL, although it’s hard to get a handle on what the underlying data model is — is it actually reasonable or does it suck?
on 02016-08-08#PDF on #Tandem T6350 #terminal escape sequences with some TACL scripts. Seems like a more or less standard glass tty with 24 lines plus a status line, print screen, local scrolling, and some basic typography, although apparently it supported local line editing too.
on 02016-08-08The #Tandem users’ group formerly known as “ITUG” is now (along with Encompass and HP-Interex) called “Connect”, which isn’t a shitty ungoogleable name or anything. ITUGLIB is ITUG’s library of open-source Tandem software, mostly ported GNU utilities, including things like dillo and git.
on 02016-08-08a much better, though perhaps somewhat outdated, #Tandem #FAQ with a very good #introduction to Tandem systems. Actually I think the other FAQ I found was a newer or older version of this one; it mentions how “72GB disks are expected in future”, and says “Only recently, with the Pentium,” which probably dates it to about 1996, although another part of the FAQ talks about things that are “scheduled to ship in Q3, 2002”, dating that part to 2001 or 2002. Until the Dxx release, you were limited to 256 processes on a CPU because the PINs were 8-bit; a PID contains the CPU number and the PIN. Enscribe’s disk space allocation scheme sounds fairly manual; a file consists of some small number of physically contiguous extents, and you specify up front how big they will be. suid exists on Tandem, but it’s called PROGID; $PATH exists but is the #PMSEARCHLIST TACL built-in; [foo] is $foo; zombies exist; $SYSTEM.SYSTEM.USERID passwords are crypted with DES, though not by default. Apparently numeric “file codes” are used to identify file types; codes 100 through 999 are reserved for the system. A “persistence manager” process called $ZPM is responsible for restarting “persistent” processes that fail, like svc or init. Root exists, but is called the “super id”.
on 02016-08-08Info-Zip unzip source code for #Tandem support; apparently the Tandem filename (in “NSK”, the Tandem OS) couldn’t be more than 8 characters, had to begin with a letter (with possibly a preceding $), and there was a possible extension after a space; invoking terminate_program with a nonzero code would create a “saveabend” file; mtime and atime were modified with FILE_CHANGELABEL_ with a second argument of 16 or 17; you had _far pointers; system calls (“Guardian procedures”) almost uniformly return 0 for ok; the C syntax is fairly nonstandard; the system datetime format was an array of 8 shorts containing 0-based year, 1-based month, etc.; opening a file with FILE_OPEN_ involves 11 parameters, most of which are optional, and one of which is the address to store the Guardian file number at in case of success; there’s a separate “purge” permission in addition to read, write, and execute, and each permission has three possible values (corresponding to u, ug, a); getch() is a fairly short function using READX and SETMODE on the Guardian file number corresponding to standard input; ...
a 2013 discussion thread about how threads aren’t supported under #Tandem Guardian, but are under “OSS” (“Open System Services”), and how by calling DELAY(1) you can sleep for 10ms to regain your scheduling priority, and showing a bit about how to program a Tandem in C
on 02016-08-08“HP Integrity NonStop J-Series” manuals, i.e. Tandem. Apparently they’re still actively developing #Tandem software at HP, and they have 790 (!!) PDF manuals online here.
on 02016-08-08