**LOCUS 845**, også kjent som **LOCUS**, var et eksperimentelt Unix-liknende distribuert operativsystem som ble utviklet av Gerald J. Popek, Bruce J. Walker med flere ved University of California, Los Angeles (UCLA) mellom 1980 og 1983.

LOCUS 845 var en tidlig implementasjon av *single system image*, hvor en regneklynge av datamaskiner simulerte én enkelt stor maskin. Viktige målsetninger med LOCUS 845 var nettverkstransparens og feiltoleranse. I motsetning til Amoeba 809, Mach, V system og Eden, som var andre eksperimentelle distribuerte operativsystemer, ble LOCUS 845 ikke implementert i form en mikrokjerne. Operativsystemkjernen var monolittisk, liksom i tradisjonell UNIX og i det distribuerte operativsystemet Accent.

Ønsket om å kommersialisere teknologien som ble utviklet for LOCUS 845, førte til dannelsen av Locus Computing Corporation i 1982. Ideer fra LOCUS 845 fant veien inn i UNIX-avarten OSF/1 AD (i 1995 omdøpt til Tru64 UNIX) fra Digital Equipment Corporation (DEC) og UnixWare NonStop Clusters – en utvidelse av operativsystemet UnixWare som ble utviklet av Santa Cruz Operation (SCO) og Tandem Computers.

Beskrivelse
-----------

### Eksperimentelt operativsystem for forskning

Det distribuerte operativsystemet LOCUS 845 ble skapt ved University of California, Los Angeles (UCLA) mellom 1980 og 1983. Den første offisielle versjon ble presentert på det åttende *Symposium on Operating Systems Principles* i Pacific Grove, California 14.-16. desember 1981. Tidlig arbeid med prosjektet begynte allerede i slutten av 1970-årene. LOCUS 845 var ikke ment for det kommersielle marked, men ble utelukkende brukt til forskning. Sentrale utviklere var Gerald John Popek og Bruce J. Walker. Av andre bidragsytere kan nevnes Jim Chow, D. Edwards, Charles Kline, G. Rudisin, Gregory I. Thiel, Robert English, Matthew J. Weinstein, Thomas Wingfield Page Jr. og Brian K. Livezey.

LOCUS 845 ble utviklet ved University of California, Los Angeles (UCLA).  Foto: Thomas (18. mars 2008)
I motsetning til distribuerte operativsystemer som Amoeba 809, Mach, V system og Eden, ble LOCUS 845 ikke implementert i form en mikrokjerne. Operativsystemkjernen var monolittisk, liksom i tradisjonell UNIX. LOCUS 845 var et Unix-liknende operativsystem, liksom Domain/OS, Mach og QNX. Andre kategorier er *prosessbaserte* (Accent, Arachne, Charlotte, V system) og *objektbaserte* distribuerte operativsystemer (Eden, Amoeba 809).

To viktige målsetninger med LOCUS 845 var nettverkstransparens og feiltoleranse. LOCUS 845 var en tidlig implementasjon av *single system image*, hvor en dataklynge av datamaskiner tilsynelatende var en enkelt stor maskin. En tredje eksplisitt målsetning var høy ytelse. Dette innebar at aksesstiden til lokale systemressurser burde være sammenlignbar med aksesstiden til sentraliserte systemressurser i UNIX. Dessuten burde aksesstiden til ikke-lokale systemressurser over et datanett være rimelig sammenlignbar med aksesstiden til en lokal systemressurs.

Byggerne av LOCUS 845 ønsket å vise at det var mulig å bygge og implementere et nettverkstransparent, distribuert filsystem med høy ytelse som inneholdt alle de vanlige funksjoner, selv innenfor rammene av et lite datamaskinmiljø. Målsetningen med prosjektet, var å bygge et distribuert operativsystem, som:

* støttet et nettverksvidt filsystem
* tillot automatisk replisering av lagrede elementer
* støttet transparent distribuert prosessutførelse
* forsynte en rekke høyt pålitelige funksjoner (deriblant nøstede transaksjoner)
* var kompatibelt med UNIX

LOCUS 845 benyttet ikke klient-tjener modellen, som var basiskonsepter i V-system og Amoeba 809. I stedet var systemet basert på en integrert modell av distribuert databehandling, hvor hver enkelt maskins programvare var komplett, med et generelt filsystem, navnefortolkningsmekanismer, etc.

Utviklingen av LOCUS 845 ble støttet av Advanced Research Projects Agency (ARPA) gjennom forskningskontrakt DSS-MDA-903-82-C-0189.

### Operativsystem for PDP-11/45 og VAX-11/750

En VAX-11-750 minidatamaskin fra samlingen ved RCS/RI.  Foto: Dave Fischer (21. juni 2008)
Den første implementasjonen var for en regneklynge av PDP-11/45 minidatamaskiner som benyttet 1 megabit og 10 megabit token ring datanett. I 1983 var systemet kjørende på 17 stk VAX-11/750 minidatamaskiner som benyttet et 10 megabit Ethernet.

### UNIX-kompatibelt operativsystem

Operativsystemet var kompatibelt med UNIX og sørget for både en enkelt rot til filsystemet og et felles adresserom på tvers av alle nodene. Det kan beskrives som en distribuert versjon av UNIX. Absolutt all applikasjonsprogramvare var kompatibel på objektnivå, med både Berkeley Software Distribution (BSD) og UNIX System V. Konverteringen fra UNIX til LOCUS 845 gikk ut på å automatisk fjerne UNIX-kjernen og tilknyttet programvare, og sette inn LOCUS 845-kjernen med dens programvare, og reformatere sekundærlager for å oppnå støtte for funksjonelle forbedringer. Hver datamaskin kunne være både en klient og en tjener, med UNIX filaksess, interprosesskommunikasjon (pipe, call) og prosess-skapende (fork) primitiver som var implementert transparent over nettverket.

### Filsystemet

Funksjonene til filsystemet var:

* skaping og eliminering av objekter og/eller kopier av objekter
* støtte av aksess til og modifisering av disse objekter
* implementere atomisk filoppdatering og synkronisering
* oversette søkestier til fysiske adresser
* sørge for støtte for ikke-lokalt utstyr og interprosesskommunikasjon

Enhver maskin i systemet kunne være en fullt funksjonell node. Og systemoperasjoner kunne involvere mer enn en vert. LOCUS 845 kunne operere på filsystemet gjennom systemkallene open, create, read, write, commit, close og unlink. Følgende utvidelser til UNIX ble foretatt:

* Den enkle trestrukturen til LOCUS 845 dekket alle objekter i filsystemet på alle maskiner. Navnene var fullstendig transparente
* Filene kunne repliseres i varierende grad, og LOCUS 845 holdt alle kopiene oppdatert og arrangerte alle aksesser slik at de gjaldt den aller siste tilgjengelige versjon
* LOCUS 845 sørget for standard UNIX usynkronisert filaksess og sørget i tillegg for rådgivende låsing og tvunget låsing

#### Replisering

For å gi pålitelig og rask tilgang til filsystemet i regneklyngen benyttet LOCUS 845 replisering. Dataer fra datafiler kunne bli lagret i mer enn en node, og LOCUS 845 holdt flere forskjellige kopier oppdaterte. Dette ga spesielt god aksesstid for datafiler som ble lest oftere enn de ble skrevet, som normalt er tilfelle for eksempelvis kataloger.

For å sikre at all aksess ble gjort for den nyeste versjon av enhver datafil, nominerte LOCUS 845 en bestemt node til *current synchronization site* (CSS) – «nåværende synkroniseringssted» for et gitt filsystem. Alle aksesser til datafiler i et filsystem ble koordinert med den korrekte CSS.

#### Nodeuavhengige datafiler

LOCUS 845 fant det noen ganger nødvendig å *bryte illusjonen* om et enkelt system, og tillate noen datafiler å være forskjellige på en per-node basis. Deriblant var det mulig å bygge en LOCUS 845-regneklynge som bestod av både PDP-11/45 og VAX-11/750 maskiner, men instruksjonsettene var ikke identiske, slik at to versjoner av hvert objektprogram var behøvelig.

Løsningen var å erstatte datafilene som var nødvendig på en per-node basis med spesielle, skjulte kataloger. Disse katalogene ville da inneholde de forskjellige versjoner av datafilen. Når en bruker aksesserte en av disse skjulte kataloger kunne LOCUS 845 sjekke brukerens *kontekst* og åpne den egnede datafilen.

For eksempel, hvis en bruker kjørte på en PDP-11/45 og skrev kommandoen `/bin/who`, da ville operativsystemet oppdage at `/bin/who` egentlig var en skjult katalog og kjøre kommandoen `/bin/who/45`. En annen bruker som skrev kommandoen `/bin/who` på en VAX-11/750, ville også operere i en skjult katalog og kjøre kommandoen `/bin/who/vax`.

### Utstyr

LOCUS 845 sørget for fjern aksess over datanettet til utstyr for inn- og utmatning.

### Prosesser

LOCUS 845 sørget for et enkelt, homogent prosessrom. Prosesser kunne skapes på en hvilket som helst node i systemet. Unix-kallene fork og exec undersøkte en liste som avgjorde på hvilken node prosessen ville kjøre. LOCUS 845 var konstruert for å arbeide med heterogene noder (en blanding av VAX-11/750 og PDP-11) og kunne bestemme at prosessen skulle utføres på en annen node hvis den behøvde et spesielt instruksjonssett. Som en optimalisering ble et kjørekall tilføyd som var ekvivalent med en kombinert fork og exec, slik at man unngikk å kopiere prosessens minnebilde til en annen node før man skrev over det med det nye bilde.

### Pipes

Prosesser kunne bruke *pipes* for kommunikasjon mellom nodene, inkludert navngitte *pipes*.

### Partisjonering

LOCUS 845 kunne håndtere nettverkspartisjonering, hvor en eller flere noder ble koblet fra resten av systemet. Filsystemet var replisert, og frakoblede noder hadde fortsatt aksess til datafiler. Når nodene ble tilkoblet igjen ble alle datafiler som var blitt modifisert av de frakoblede noder reintegrert med resten av systemet. For noen filtyper (for eksempel e-post) ble reintegreringen utført automatisk. For andre filtyper ble brukeren informert (via e-post) om reintegreringen, og ulike verktøy ga aksess til ulike versjoner av datafilen.

### Lærdommer fra LOCUS 845

En lærdom fra prosjektet, var at en nettverkstransparent distribuert filsystem med høy ytelse kunne konstrueres og implementeres selv i et lite maskinmiljø. I et slikt filsystem er det nyttig å replisere lagringen. For å oppnå høy ytelse er det nødvendig å skille mellom aksess til lokale ressurser og aksess til ikke-lokale ressurser. Den genererte koden for å oppnå dette, gir et resultat som er rettferdiggjort av økt ytelse. Det balanserende behov for protokollsynkronisering og feildeteksjon mens man vedlikeholder god ytelse, representerte derimot en betraktelig utfordring.

Referanser
----------

1. 1 2 3 4 5 6 7  Popek 1981, s. 169
2. 1 2 3 4  Gościński 1991, s. 845
3. 1 2 3 4 5 6 7 8  Walker 1983, s. 49
4. 1 2  Gościński 1991, s. 845-846
5. 1 2 3  Popek 1981
6. ↑  Walker 1983
7. ↑  Weinstein 1985
8. 1 2  Gościński 1991, s. 764-766
9. 1 2 3 4 5 6  Gościński 1991, s. 846
10. ↑  Walker 1983, s. 51
11. ↑  Walker 1983, s. 54
12. 1 2 3 4  Gościński 1991, s. 847
13. 1 2 3 4  Gościński 1991, s. 848
14. ↑  Gościński 1991, s. 862

Litteratur
----------

* Gościński, Andrzej (1991). *Distributed Operating Systems: The Logical Design*. Longman Group, United Kingdom; august 1991. s. 845-862. ISBN 978-0-20141-704-3. ISBN 02-014170-4-9.
* Popek, Gerald John; Walker, Bruce, J.; Chow, Jim; Edwards, D.; Kline, Charles; Rudisin, G.; Thiel, Gregory I. (1981). *LOCUS: A Network Transparent, High Reliability Distributed Operating Systems*. Proceedings of the Eight Symposium on Operating Systems Prinsciples, 14-16 December 1981, Asilomar Conference Grounds, Pacific Grove, California, Volume 15, Issue 5, Association for Computing Machinery (ACM), desember 1981. s. 169-177. ISBN 978-0-89791-062-0. ISBN 0-89791-062-1, DOI 10.1145/800216.806605. CS1-vedlikehold: Flere navn: forfatterliste (link)
* Popek, Gerald John (1986). *The LOCUS Distributed System Architecture*. The MIT Press, Cambridge, Massachusetts, 9. januar 1986. ISBN 978-0-26216-102-2. ISBN 0-26216-102-8, DOI 10.1145/773379.806615.
* Sheltzer, A.B.; Popek, Gerald John (1986). *Internet Locus; Extending Transparency to an Internet Environment*. IEEE Transactions on Software Engineering, Volume SE 12, Issue 11, IEEE Press, Piscataway, New Jersey, november 1986. s. 1067-1075. DOI 10.1109/TSE.1986.6312996. CS1-vedlikehold: Flere navn: forfatterliste (link)
* Thiel, Gregory I. (1991). *LOCUS operating system, a transparent system*. Computer Communications, Volume 14, Issue 6, Locus Computing Corporation, 9800 La Cienega Boulevard, Inglewood, California 90301, juli–august 1991. s. 336-346. DOI 10.1016/0140-3664(91)90059-A.
* Walker, Bruce, J.; Popek, Gerald John; English, Robert; Kline, Charles; Thiel, Gregory I. (1983). *LOCUS: The LOCUS distributed operating system* (PDF). Proceedings of the Ninth Symposium on Operating Systems Prinsciples, Bretton Woods, New Hampshire, USA — October 10 - 13 1983, ACM, New York, Volume 17, Issue 5, oktober 1983. s. 49-70. ISBN 978-0-89791-115-3. ISBN 0-89791-115-6, DOI 10.1145/773379.806615. CS1-vedlikehold: Flere navn: forfatterliste (link)
* Weinstein, Matthew J.; Page Jr. Thomas Wingfield; Livezey, Brian K; Popek, Gerald John (1985). *Transactions and Synchronization in a Distributed Operating System*. Proceedings of the Tenth ACM Symposium on Operating Systems Prinsciples, Orcas Island, Washington, USA, Operating Systems Review, Volume 19, Issue 5, 1.-4. desember 1985. s. 115-126. ISBN 978-0-89791-174-0. ISBN 0-89791-174-1 DOI 10.1145/323647.323640. CS1-vedlikehold: Flere navn: forfatterliste (link)

| * v
* d
* r
Distribuerte operativsystemer |
| --- |
| *Accent* **·** *Aleph* **·** *Amoeba 809* **·** *Arachne* **·** *Cambridge Distributed Computing System* **·** *Charlotte* **·** *Domain/OS*  **·** *Eden* **·** Inferno **·** *LOCUS 845* **·** *Mach* **·** *Plan 9* **·** QNX **·** *Sprite* **·** *TUNIS* **·** *V system* |

| * v
* d
* r
Unix og Unix-lignende operativsystemer |
| --- |
| 
* *386BSD*
* Android
* *Australian Unix Share Accounting Method (AUSAM)*
* *A/UX*
* AIX
* *BSD*
* *CB UNIX*
* *Coherent*
* Chrome OS
* Darwin
* *Domain/OS*
* DragonFly BSD
* *DYNIX*
* Dyson
* *Forsknings-Unix (UNIX versjon 6, UNIX versjon 7)*
* FreeBSD
* GNU Hurd
* HP-UX
* *Idris*
* iOS
* *IRIX*
* Illumos
* Inferno
* *IS/1*
* Linux
* *IS/3*
* *LOCUS 845*
* *LSI UNIX (LSX)*
* LynxOS
* Mac OS X
* Minix
* *MERT/UNIX/RT*
* NetBSD
* *Nexenta OS*
* *NeXTSTEP*
* OpenBSD
* *OpenSolaris*
* *OpenSolaris for System z*
* *PC-UX*
* *PC-UX/V*
* Plan 9
* *PWB/UNIX*
* QNX
* SCO UNIX/SCO Open Desktop/SCO OpenServer
* *SINIX*
* Solaris
* *SPARC64/OS*
* *Sprite*
* *SunOS*
* *System III*
* *System V*
* *TUNIS*
* *Tru64*
* *Ultrix*
* UNICOS
* *UNIX/32V*
* *UnixWare*
* *Venix*
* *Xenix*

 |