LOCUS 845

**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. 

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 replikering 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
 
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 (, ) og prosess-skapende () 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 , , , , ,  og . 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 replikeres 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

#### replikering
For å gi pålitelig og rask tilgang til filsystemet i regneklyngen benyttet LOCUS 845 replikering. 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) &ndash; «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 replikert, 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 å replikere 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




## Litteratur
* 
* 
* 
* 
* 
* 
*