Rivinvaihdot RSX-11:ssä ja VMS:ssä

Tämän esityksen päätarkoitus on täydentää koosteen Rivinvaihdot ja kappaleet datan käsittelyssä osaa Tiivistelmä eräistä tavallisista tavoista esittämällä melko yksityiskohtainen havainnollistus rivinvaihtojen tai pikemminkin rivirakenteen esityksistä eräissä järjestelmissä, RSX-11:ssä ja VMS:ssä.

Historiallista taustaa

Digital Equipment Corporationin (Digital, DEC) minikoneissa on aikojen kuluessa käytetty lukuisia käyttöjärjestelmiä, joiden tiedosto- ja tietuerakenteet poikkeavat tänä päivänä vallalla olevista käytännöistä. Compaqin ostettua Digitalin tuotteita myydään nykyisin Compaqin nimellä.

Pienimmissä 16-bittisissä PDP-11-sarjan prosessoreissa, joissa ei ollut muistihallintayksikköjä, käytettiin hyvin usein RT-11-käyttöjärjestelmää. Tässä yhden käyttäjän järjestelmässä levyllä oli vain yksi hakemisto eikä tiedostorakennetta varsinaisesti ollut, vaan teksti ja tulostuksen ohjausmerkit olivat yhtenä pötkönä tiedostossa. Tietueet oli siten eroteltu CR LF -pareilla toisistaan. Tässä suhteessa formaatti muistuttaa hyvin paljon varhaisen MS-DOSin tiedostojärjestelmää. Kun tiedosto halutaan tulostaa, se yksinkertaisesti kopioidaan kirjoittimelle ja tiedostossa olevat kontrollimerkit hoitavat rivin ja sivun vaihdot.

Files-11

Isommissa PDP-11-sarjan koneissa, joissa on muistinhallintayksikkö, käytetään usein monen käyttäjän käyttöjärjestelmiä RSX-11 (lukemattomia versioita) ja IAS. Tiedostojärjestelmänä on Files-11, jossa on käyttöjärjestelmätasolla (loogisen) tietueen käsite. Normaaliversiossa (FCS) tiedostossa voi olla joko kiinteänmittaisia tietueita tai vaihtuvanmittaisia tietueita.

Kiinteänmittaisista tietueista itse tiedostojärjestelmä säilyttää omissa hakemistorakenteissaan (levyn indeksitiedosto) tiedon siitä, mitä tietuepituutta kyseisessä tiedostossa käytettiin. Tiedot ovat peräkkäin levyllä ilman mitään erottimia. Kun sovellusohjelma lukee tietueen, se saa aina tämän vakiomittaisen tietueen jokaisella lukukerralla. Tämä formaatti soveltuu vaikka ns. reikäkortinkuvien säilyttämiseen (tietuepituus 80 merkkiä), mutta enemmän käyttöä sillä on suorasaantitiedostona, jolloin haluttu tietue voidaan lukea tai päivittää suoraan tietueen järjestysnumeron perusteella.

Vaihtuvanmittaisissa tiedostoformaateissa kunkin tietueen edessä on kahden tavun mittainen pituustieto, josta tosin vain 15 bittiä on käytössä, joten tietueen pituus voi vaihdella 0 ja 32767 tavun välillä. (Tuo maksimikoko on itse asiassa puolet siitä 64 kilotavun osoiteavaruudesta, jota PDP-11-ohjelmat pystyvät kerralla osoittamaan.) Koska laitteistoarkkitehtuuri edellyttää, että sanaviittaukset ovat aina parillisessa osoitteessa, on joidenkin tietueiden perässä käyttämätön tavu, jotta seuraavan tietueen pituustieto osuisi parilliseen osoitteeseen. Sovellusohjelman lukiessa vaihtelevan mittaisia tietueita se saa aina oikean mittaisen tietueen ja halutessaan myös tiedon siitä, miten pitkä viimeksi luettu tietue oli.

Kun käyttöjärjestelmä hoitaa tietuerakenteen ylläpidon, voidaan tietueeseen sijoittaa tekstidataa tai vaikkapa binääridataa, tarvitsematta välittää siitä, että binääridatan joukossa sattuu olemaan vaikkapa 0x0D (CR) tai 0x0A (LF) tai vaikkapa 0x00 (NUL) -tavuja, koska näillä ei ole mitään vaikutusta siihen, miten tieto pilkkoutuu tietueiksi (riveiksi).

Normaalisti tekstitiedostoon ei myöskään tallennu mitään kontrollimerkkejä, koska ne voidaan kuitenkin tarvittaessa generoida uudelleen. Tästä tietysti seuraa se, että esim. pääteohjaimelta tai kirjoitinohjaimelta vaaditaan vähän enemmän älykkyyttä. Kun esim. päätteelle kirjoitetaan yksi rivi, tällöin rivin dataosuus annetaan kirjoitinohjaimelle, joka normaalitilanteessa omatoimisesti lisää tietueen eteen rivinvaihdon (LF), jonka jälkeen tulostaa varsinaisen tekstin ja lisää omatoimisesti perään vaununpalautuksen (CR).

Fortran-standardissa on ilmeisesti alusta asti ollut omalaatuinen tulostuksen ohjausmenetelmä, jolla on pyritty mahdollisimman suureen laitteisto-, käyttöjärjestelmä- ja merkistöriippumattomuuteen. Kunkin tulostettavan tietueen alussa ensimmäinen merkki määrää, miten perässä tuleva rivi pitää paperille tulostaa. Jos ensimmäinen merkki on blanko, tulostuu rivi normaalisti allekkain normaalilla rivivälillä. Jos ensimmäinen merkki on '0', kasvaa riviväli kaksinkertaiseksi. Arvolla '1' tulostuu rivi seuraavan sivun alkuun. Plussamerkillä '+' tulostuu uusi rivi entisen päälle, jolla tempulla voi yrittää generoida vaikka uusia kirjaimia esim. O ja /. Dollarimerkillä '$' kirjoitinpää saadaan jäämään rivin loppuun esim. syötteen lukua varten.

Fortran-ohjelmoijat unohtavat yleensä tasan yhden kerran, että ensimmäinen positio on tulostuksessa syytä jättää tyhjäksi, koska laatikollista printteripaperia, jossa vain yksi rivi tekstiä kunkin sivun ylälaidassa (rivi alkoi ykkösellä), ei ole mukava raahata. Myöskin kaikki tulostus voi mustata yhden ainoan kohdan paperista, jos rivit sattuvat kaikki alkamaan plusmerkillä.

Files-11 tiedostojärjestelmä ja RSX-11 käyttöjärjestelmä tukee myös tätä Fortranin tulostusoptiota, jolloin laiteohjaimelle annetaan tekstimuodossa tulostettava rivi, jonka alusta se kaivaa tulostusohjausmerkin ja generoi tarvittavat CR, LF tai FF merkit.

Tieto siitä, pitääkö laiteohjaimen lisätä aina CR- ja LF-merkit, pitääkö sen tulkata Fortran-ohjaukset vai pitääkö sen tulostaa pelkkä teksti siihen mitenkään kajoamatta, löytyy tiedoston otsikkotiedoista, joita käyttöjärjestelmä ylläpitää levyn indeksitiedossa tiedoston koon, luontiajan ja kiinteä/vaihtuvan mittaiset tietueet jne. tietojen ohella.

Yksinkertainen tulostusohjelma avaa tiedoston, hakee tiedon rivinvaihtokäytännöistä, avaa tulostuslaitteen samoilla ominaisuuksilla ja alkaa kopioimaan tekstiä rivi kerrallaan tulostuslaitteelle.

VMS

Virtuaalimuistilla varustettu 32-bittinen VAX/VMS-järjestelmä rakentuu hyvin pitkälle PDP-11/RSX-11-järjestelmän päälle, ja tiedostojärjestelmänä on Files-11:n kakkosversio, jonka RMS-tietueenhallintajärjestelmä hoitaa peräkkäistiedostojen käsittelyn lisäksi relatiivi- ja indeksitiedostojen hallinnan käyttöjärjestelmän tasolla.

Koska VAX-11/7xx-sarjan prosessorilla voitiin suoraan raudan tasolla ajaa 16-bittisiä RSX-11-ohjelmia ja alkuaikoina hyvin suuri osuus sovelluksista olikin RSX-11-ohjelmia, on selvää, että tiedostojärjestelmän rakenteet ovat hyvin samantapaiset. Lisäksi RSTS/E-käyttöjärjestelmästä ja DECsystem20 järjestelmistä siirrettiin paljon ohjelmia VAXille, joten näidenkin tiedostojärjestelmävaatimukset oli huomioitava.

Uusi tietuemuoto RSX-11-käyttöjärjestelmään verrattuna on VFC (Variable-length with Fixed-length Control field), jossa kussakin tietueessa oli kiinteänmittainen hallintaosa ja vaihtelevan mittainen varsinainen dataosuus ja jota käytetään esim. printtaustiedostoissa. Hallintaosassa voidaan määrätä esim. rivivälin suuruus.

Toinen uusi formaatti on STREAM, joka ei sisällä varsinaista tietuehierarkiaa, vaan sovellus generoi itse tulostuksenohjauksen, kuten CR- ja LF-merkit. Tässä suhteessa formaatti muistuttaa RT-11-järjestelmän (ja MS-DOS:n) käytäntöä, ja yhdessä moodissa erottimena on LF, joten se on paremmin yhteensopiva C/Unix-ympäristöjen kanssa.

Lisätietoja

Vaikka netissä on OpenVMS:n dokumentaatio, niin puheena olevasta aiheesta ei näytä olevan mitään hyvää yhtenäistä esitystä.

On syytä pitää mielessä, että tietueformaatit ja riviformatointi ovat yleensä toisistaan riippumattomia. Tiedosto- ja tietueformaateista on ihan hyvä esitys Guide to OpenVMS File Applications -kirjan kappaleessa 2.1.2 Record Formats. Tekstitiedostoissa vaihtuvanmittaiset tiedostot ovat oletusarvona ja yleisesti käytettyjä niin VMS- kuin RSX-11-ympäristöissäkin.

Riviformatoinnista löytyy jotain OpenVMS Record Management Utilities Reference Manual -käsikirjasta. Sen kappaleessa 2.2 Converting Carriage Control Formats on esitelty formaatteja ja niiden välisiä konversioita. Kappaleen lopussa on konversioesimerkkejä Fortranista stream-muotoon. Samassa manuaalissa on komentojen ANALYZE/RMS ja EDIT/FDL yhteydessä joitakin esimerkkejä rivivaihdoista.


Tämän dokumentin laatimisen impulssi oli Paul Keinäsen kirjoitus 2001-08-23 ryhmässä sfnet.atk.ohjelmointi.alkeet. Hänen luvallaan ja hänen antamiensa lisätietojen perusteella olen laatinut tämän dokumentin käyttäen melko suoraan hänen tekstiään.