UP
I (Landau) am working on this section on the Mac.
The tape formats supported by Gnosis will be limited. Fixed
length records up to 4096 bytes in length and fixed blocked
records up to 32768 byte blocks will be supported. Undefined
records will be supported up to 4096 bytes in length. Variable
and variable blocked records are supported for record lengths
to 4096 and block lengths to 32768.
There exists a capability to a reel of tape (a set of reels
for multivolume files). This capability is obtained from
a librarian capability and may be called upon to change
the default format of the tape, mount and dismount the tape,
and to generate rescindable copies of the key. When a tape
is mounted, there is a tape access key that can be called
to open and close files on the tape and to read and write
unblocked data to the tape.
A tape capability may be returned to the librarian for reallocation.
There are techniques to claim a tape that has been imported
from another system and to export a tape to another system.
These latter two procedures involve a trusted human operator.
Librarian Function
This is the only public key involved in the Gnosis tape
system. It is called to obtain a capability to a tape or
to return it.
TAPELIB(kt ==> x'22b')
TAPELIB(0,(number of reels);SB,AC ==> c,((8,password));TAPEKEY)
Allocate a tape.
The TAPEKEY returned has full capability to the non-privileged
functions. Excluded are Mount Unverified, Unload tape,
Set label type, and Write Label. "Number of reels" is specified
as a 3 EBDIC digit decimal number between 1 and 400 inclusive.
"password" (EBDIC) may be used to reclaim a tape if the key
is lost. Reclaiming a tape is a way of rescinding all outstanding
tape keys without releasing the tape. Reclaiming can also
be used after big bangs to reestablish the tape keys.
AC is an account key that will be billed for the tape and
storage charges.
Return codes
c = 0 success
c = 1 insufficient number of tapes available
c = 8 account has insufficient funds
c = 9 Spacebank not good enough
TAPELIB(1;TAPEKEY,AC ==>c,) Release a tape.
TAPEKEY key must have release rights.
AC is an account that will be credited for the value of the
tape. This is equivalent to TAPEKEY(kt+4). The space allocated
for the TAPEKEY will be reclaimed. Any subordinate keys
will be destroyed and their space reclaimed. Only if this
key was obtained directly from the librarian will the tape
be released for reuse.
Standard labels are written on the tape.
Return code
TAPELIB(2,(8,password);SB,AC ==> c;TAPEKEY)
Claim a tape.
Like TAPELIB(0) except that the tape was a foreign tape
and the password was obtained from the trusted operator
when the tape was presented or the tape is being reclaimed
and the password is the one received when the tape was first
allocated. The reclaiming operation destroys all existing
tape keys and issues a new one.
This operation can be used to reconstruct TAPEKEYS after
a "Big Bang" provided that the tape database is restored.
The tape database contains keys only for allocated tapes.
It contains textual information about the tapes and the
passwords associated with them.
Return codes
c = 0 success
c = 1 password incorrect
c = 2 tape does not exist
c = 3 tape is part of multireel set
c = 4 incorrect password format (not 8 characters)
c = 8 account has insufficient funds
c = 9 Spacebank not good enough
TAPELIB(3,(n,external designator);TAPEKEY ==>c)
Designate a tape to be exported.
The trusted operator is informed which reel is to be
exported and what should be written on its paper label to
identify it. The destination should be included in the designator.
The capability to the tape is not lost.
Return codes
c = 0 success
c = 1 Tape key does not have export rights
c = 2 Unable to get TAPEOP key
c = 3 Unable to get builder key
c = 4 Unable to get DOMCRE key
c = 5 TAPEKEY is not a tape key
c = 6 TAPEKEY does not specify a single volume tape
TAPELIB(4,(DESCRIPTION);TAPEKEY ==>) associates
the text DESCRIPTION with the reel in a way available to
the tape operator.
TAPELIBP(kt ==> x'32b')
TAPELIBP(1,(6,reel) ==>c) make tape available (used by
TAPEKEY).
{arcane}Librarian manager
This key is related to the Librarian Function and is
closely held by the administrator. It is another start
key to the same domain as TAPELIB but with a different databyte
value.
TAPEMAN(kt ==> x'12b')
TAPEMAN(0,(6,reel number)(n,external id); ==> c) introduce
public tape.
A tape is mounted and a standard label is written on
the tape. Reel number is a 6 byte string that will appear
as the tape label. External id is an alphanumeric string
of a descriptive nature.
Return codes
c = 0 tape added to library
c = 1 reel number not 6 characters
c = 2 tape reel number is not unique
c = 4 cant get tapekey to label tape
c = 5 mount failed
c = 6 label write failed
TAPEMAN(1,(6,reel number); ==> c) withdraw
tape.
The tape is removed from the database. All TAPEKEYS
that might exist are destroyed.
Return codes
c = 0 done
c = 1 reel number not 6 characters
c = 2 tape not in database
c = 3 reel is part of multireel set (not first)
TAPEMAN(2,(6,reel number)(n,external id); ==>
c,(8,password)) introduce new private tape.
Works the same as TAPEMAN(0) except that the tape may
only be claimed if the correct password is given on the
CLAIM request.
Return codes
c = 0 done
c = 1 reel number not 6 characters (param string less than
6 characters)
c = 2 Reel number is not unique.
c = 4 can't get tapekey to label tape
c = 5 mount failed
c = 6 label write failed
TAPEMAN(3,(6,reel number)(n,external id); ==>
c,(8,password)) introduce old private tape.
Works the same as TAPEMAN(0) except that the tape may
only be claimed if the correct password is given on the
CLAIM request.
When the TAPEKEY is constructed and issued to the claimant,
the label is read. If standard label is found the tape
is so marked. If no label is found the checksum of the
first block becomes the verification.
Return codes
c = 0 done
c = 1 reel number not 6 characters
c = 2 Reel number is not unique.
Tape Database
The tape database is a named sequence record collection.
In this collection is a record for each tape in the library.
Tapes are either allocated or unallocated. If the tape
is allocated the record contains the nodekey for the highest
level TAPEKEY that was issued on a claim or allocation of
the tape. There is no key in the record if the tape is
available or unclaimed. If the key in the record is a zero
data key then the tape is a part of a multivolume set and
not the first volume of that set.
Record Format
Areel# (8,password),External information.
Ureel# (8,password),External information NODEKEY
or DK(0).
Preel# (8,password),External information NODEKEY
or DK(0).
There is also a password database that is used
to insure that a password is never reused. It is also used
to access tapes by password.
Record Format
Tape Key
Tape Access key
Tape Drive Allocation
Operator level
This key allocates the specific drives in Gnosis and
is responsible for determining that Gnosis has restarted.
When Gnosis restarts, all access keys disappear. This
key is available only to the TAPEKEY segment keeper. The
REEL and NODEKEY are specified for historical reasons.
TAPEOPERF(0;sb,m,sb,,,COMMONNODE==>c;tapeop) - Create
Tape Operator program (OS program, OSFLOAD TAPEOPERF TAPEOP
akt COMMONNODE)
TAPEOP(0;SIK6,SOK6,CCKNODE ==>c) CCKNODE has CCK6 in slot
0. Run TAPEOPER program.
The TAPEOP program was designed to run in a CAM and as
such has a rather baroque interface with the outside world.
Significant components are ALLOCATE and MOUNTFILE which
it uses to perform the tasks described under TAPEOPER. Implicit in this interface is the fact that COMMONNODE contains
a directory key in slot 2 and that the key TAPEOPER is put
into that directory under the name TAPEOP. I said it was
baroque!!
MOUNTFILE is a named sequenced record collection with
2 record types. Records with a name of 2 bytes of the DRIVE
ADDRESS record pending mounts and have a key of the TAPEKEY
node key. The Resume key of the TAPEKEY object is in slot
7 of the node. Records with a 6 byte name are messages
sent to the TAPEKEY via ordercode 10. Mount pending records
are removed by the operator task that does the mount. Message
records are removed by the Master Full Screen Tape Operator
(p3,fstapop).
For a better understanding of this read the INSTTAPE
CMDFILE and the CAM documentation.
TAPEOPER(kt ==> x'42b')
TAPEOPER(0,(6,reel);TAPEnodeKEY ==>
c;TAPEACCESS,TAPEACCESSDOMKEY)
allocate a drive for a tape. The tape is mounted with no
ring.
TAPEOPER(1,(6,reel);TAPEnodeKEY ==>
c;TAPEACCESS,TAPEACCESSDOMKEY)
allocate a drive for a tape. The tape is mounted with a
ring.
TAPEOPER(2,(6,reel); ==> c) deallocate the
drive used by this tape (if mounted).
The drive is freed and all ACCESS keys are destroyed.
Return codes
c = 0 done
c = 1 tape not mounted
TAPEOPER(3,(6,reel); ==> c) deallocate the
drive used by this tape and forget that the tape is mounted.
This is used during label verification if it is discovered
that the label is incorrect. It is assumed that the operator
mounted the wrong tape and must physically mount another.
Return codes
c = 0 done
c = 1 tape not mounted
TAPEOPER(4,(n,string) ==> 0) Send "string"
as a message to the tape operator.
Tape Drive Allocation
Device level
Design Notes
The function of order 4 on the tapelib key should be
provided by a call on the tape key. This function would
be subject to restriction.