A Brief Retrospective on the Sprite Network Operating System [Romanian]

Original in English by John Ousterhout

O retrospectivă succintă cu privire la sistemul de operare de reţea Sprite

Sprite a fost un sistem de operare de cercetare dezvoltat de grupul meu de cercetare de la UC Berkeley între 1984 şi 1994. Patru absolvenţi şi eu am început proiectul în toamna anului 1984, deoarece am simţit că sistemele actuale de operare nu au fost suficient de atenți la rețele la nivel local. Nouă ne părea că sprijinul reţelei a fost adăugat într-un mod rapid şi murdar pe sistemele care au fost proiectate pentru a fi rulate desinestătător. Ca rezultat, staţii de lucru în reţea nu au lucrat bine împreună. La acel momentul am început să cream Sprite, dar încă nu au existat sisteme de fişiere de reţea bune (chiar NFS nu există încă), precum şi administrarea unei reţele de staţii de lucru a fost un coșmar.

Realizări majore

Scopul nostru pentru Sprite a fost de a "face reţele corecte", prin construirea unui nou kernel a sistemului de operare de la zero şi proiectînd suportul reţelei în sistem de la început. Am sperat să creăm un sistem unde o colecţie de staţii de lucru în reţea s-ar comporta ca un singur sistem, atât cu puterea de procesare cît şi cu stocare partajată în mod uniform între staţiile de lucru. Am sperat că utilizatorii vor putea să valorifice puterea întregei reţele păstrând în acelaşi timp un comportament simplu şi uşurinţa administrative ale unei sistem comune tradiţionale.

Cred ca noi am atins aceste obiective. Patru realizări tehnice eu pot să denumesc. În primul rând a fost sistemul fişierelor de reţea Sprite, care a demonstrat că sistemele de fişiere de reţea pot oferi un model de utilizator convenabil, fără a sacrifica performanţa. Sistemul de fişiere Sprite a permis partajarea de fişiere în timp ce se ascundea complet de reţea. Aceasta a oferit acelați comportament într-un mediu de reţea unde utilizatorii ar vedea dacă toate lucrurile se rulau ca într-un sistem tradiţional de timp partajat. Chiar şi dispozitivele I / O ar putea fi accesate unform în întreaga reţea, şi procesele de utilizator ar putea extinde sistemul de fişiere prin punerea în aplicare a acesteia I / O şi denumirea protocoalelor folosind dispozitive si pseudo-sisteme de fişiere. În acelaşi timp, Sprite a folosit cache agresiv de fișiere de înaltă performanţă. Sistemul de fişiere de reţea Sprite a fost cel mai rapid din lume până în anii 1990.

A doua realizare principală lui Sprite a constat în mecanism de procesare a migrației a acesteia, care a permis proceselor să fie mutate în mod transparent între staţii de lucru în orice moment. Procesul de migrare un singur utilizator ar putea valorifica puterea mai multor staţii de lucru simultan, accelerînduse cu patru sau mai multe sarcini a sistemului comun, cum ar fi recompilarea. Mecanismul migraţiei a ţinut cont de maşini de mers în gol, și le-a folosit pentru migraţie, și a evacuat procese migratoare atunci când returna o staţie de lucru a propietarului, astfel ca migraţia nu a avut impact asupra timpului de răspuns a utilizatorilor activi. Procesele evacuate au fost remigrate la diverse mașini inactive sau executate pe calculatorul lor de origine. Sprite a fost unul din câteva sisteme unde procesul de migraţie a fost fost folosit pe o bază cotidiană a comunității mari de utilizatori.

(De fapt, merită de menţionat faptul că procesul de migraţie a fost complicat prin implementare şi a fost dificil de menținut funcţionare în sistemul evoluat. Nu este surprinzător faptul că migraţia nici o dată nu a găsit loc în sistemele de operare generale. Cele mai bune implementari ale procesului de migraţie sunt acum găsite în monitoarele a maşinei virtuale: API-ul pentru o maşină virtuală este mai uşor pentru incapsulare decît un sistem de operare modern. Unul din implementatori de mecanism virtual a migraţiei de la VMware a fost Mike Nelson, care a fost unul dintre membrii originali a proiectului Sprite.)

Realizarea a treia lui Sprite a fost imaginea unică a sistemului. Sistemul de fişiere şi procesul migraţiei, au furnizat dovada cea mai evidentă a imaginei de sistem unic, deoarece au făcut stocare şi puterea de procesare partajabilă între staţiile de lucru. Dar în multe alte feluri Sprite arată și se simte la fel ca și un sistem unic. A fost doar o partiţie de rădăcină, o parolă de fişier, o zonă de partajare (în sistemul de fişiere de reţea), un login a bazei de date, şi aşa mai departe.  Comanda "deget" ("finger") a raportat la toţi utilizatori de pe toate staţiile de lucru în grupul Sprite, nu doar cele de pe staţia de lucru în cazul în care comanda a fost invocată. Sistem de administrare a fost nici mai greu cu cei cincizeci de maşini în reţea decât cu zece, şi adăugarea unei maşini noi a fost nu mai dificil decât adăugarea unui nou cont de utilizator.

Imaginea unică a sistemului Sprite de asemenea a susţinut diferite arhitecturi în maşină din acelaşi cluster. Noi am dezvoltat un cadru pentru separare de informaţii de arhitectură independentă de la arhitectura de informaţii specifice. Toate informaţiile pentru toate arhitecturile a fost vizibile în orice moment, care a simplificat cross-dezvoltare, dar fiecare mașină a folosit informare de arhitectura dependentă corespunzătoare atunci când a fost nevoie.

A patra realizare cheie lui Sprite a fost sistemul de fişiere său log-structurat (LFS, de la eng log-structured file system), care a demonstrat o nouă abordare radicală la dosarul de proiectare a sistemului. LSF a tratat discul mai mult ca o bandă, scriind informaţia secvenţial, în serii mari, ce permitea mare eficienţă. Am dezvoltat un nou mecanism de colectare a gunoiului, care extindea continuu mult spaţiu liber pe disc. Rezultatul a fost un sistem care a scris fişierelor mici pe discul în ordin de magnitudine mai rapid decât orice alt sistem de fişiere deja existent. În acelaşi timp, sunt manipulate alte operaţiuni, cum ar fi citiri şi scrieri mari, cel puţin la fel precum şi alte sisteme. Sisteme de fişiere log-structurate au multe alte avantaje, cum ar fi recuperarea rapidă a accidentelor, capacitatea de a stoca informaţii pe disc în formă comprimată, şi capacitatea de a varia mărimea blocului din fişierul de la dosar. Tehnicile de la LFS au fost adoptate în produse comerciale a sistemului de fişiere, cum ar fi cele de la NetApp şi sunt de asemenea folosite pentru noi dispozitive, cum ar fi memoria flash.

Pe parcursul proiectului Sprite noi am încercat să caracterizăm comportamentul sistemului şi să folosim aceste informaţii pentru a ghida evoluţiile viitoare. Unele dintre rezultatele cele mai importante au fost măsurări pe care noi am facut. Fondarea proiectului a fost bazată în parte pe măsurări a sistemului de fişiere efectuate la sisteme cu timp comun în 1984 şi 1985.  Noi am facut masurări suplimentare de utilizare Sprite în 1991 pentru a vedea cum modele s-au schimbat şi pentru a analiza potențialul de aplicare a memorie non-volatile în sistemele de reţea.

Poate cea mai semnificativă realizare dintre toate este faptul că am fost în măsură să punem în funcţionare sistemul, nu doar pentru noi înşine, ci pentru o comunitate de utilizatori care consta din 80 sau mai mulți în timpul lansării a proiectului. Mulţi dintre aceşti utilizatori depindeau de Sprite pentru toate nevoile lor de calcul de zi cu zi, cum ar fi e-mail şi imprimare. Pentru o perioadă de mai mulţi ani a fost comun pentru a vedea 25-35 login-uri simultane, din care doar o jumătate de duzină de dezvoltatori au fost din Sprite. Ştiu de un singur proiect de altă universitate care a dezvoltat un nou nucleu de sistem de operare de la zero şi l-a folosit pentru a sprijini o comunitate de utilizatori pentru acest timp. Acest proiect a fost Multics, care a fost efectuat la MIT la sfârşitul anilor 1960.

În plus, am construit Sprite (peste 200.000 de linii de cod nou, în total), cu o echipă mică, care în mediu a constat doar din patru studenti absolvenți și unul sau doi angajaţi sau asistenţi. Noi niciodată nu am avut întâlniri de proiect în biroul meu, deşi au fost momente când a trebuit să împrumutăm două scaune suplimentare pentru a completa cele şase deja existente în biroul meu.

Istoricul proiectului

Istoria lui Sprite se împarte in aproximativ trei faze: dezvoltarea iniţială, consolidarea şi dezvoltarea LFS, şi a întreprinderilor de tip nou şi sfîrșire.

Prima fază lui Sprite, dezvoltare iniţială, a durat de la fondarea proiectului în toamna anului 1984 până la aproximativ sfârşitul anului 1987. Noi am început codare pe staţii de lucru Sun-2 la începutul anului 1985 şi am avut un sistem care ar putea executa comenzi de ambalare în primăvara anului 1986. În vara anului 1986 am început sa se dezvoltăm sistemul de fișiere "real" Sprite (am folosit un sistem de fişiere mai mari de reţea numită BNFS până la acel moment). Atunci am început, de asemenea, să lucrăm cu procesele de migraţie şi am portat sistemul X Window.  Toamna anului 1987 toate aceste lucruri au lucrat, împreună cu un protocol de internet srever.  De asemenea am portat Sprite pe Sun-3. În acest timp am copiat sursele kernel-ului a totului sistem Sprite și am început sa facem kernel-ul nostru de dezvoltare pe Sprite în sine.

A doua fază în istoria lui Sprite a durat de la sfârşitul anului 1987 până la sfârşitul lui 1990. Această fază a constat în mare parte în consolidare. La începutul anului 1988 am facut o revizuire majoră a sistemului de fişiere. Sprijinul dispozitivului de la distanţă a fost îmbunătăţit, punerea în aplicare pseudo dispozitivului a fost rescrisă, şi un protocol de recuperare simplu a fost introdus și astfel sistemul putea să se recupereze gratțos din accidente de server. Procesul de migrare a suferit îmbunătăţiri majore, de asemenea, şi până la sfârşitul anului 1988 a devenit suficient de stabil pentru ca noi să-l folosim zilnic în dezvoltarea sistemului. În 1988 noi am portat Sprite pe multiprocessor de cercetare SPUR (proiectul SPUR a furnizat mare parte din finanţare timpurie lui Sprite), iar în 1989 l-am portat la platforme DECstation-3100 şi Sun-4. O portare la aparatul Sequent Symmetry a fost efectuat la sfârşitul anului 1989 şi la începutul anului 1990.

La sfârşitul anului 1988 am început să sprijinim alţi utilizatori în afară numai de dezvoltatorii lui Sprite. Comunitate de utilizatori a crescut treptat în dimensiuni, ajungand la aproximativ 80 de oameni în 1990 şi 1991. Am pregătit de asemenea, o bandă de distribuţie astfel încât să putem facem disponibil Sprite pentru persoanele din afara orașului Berkeley. Primele benzi au fost trimise la sfârşitul anului 1989, pe durata de viaţă a proiectului Sprite a schimpat aproximativ zece site-uri diferite. Cu toate acestea, instalarea lui Sprite din distributie nu a fost niciodată foarte uşoară, şi aceasta a limitat utilizarea sistemului în exteriorul lui Berkeley.

O evoluţie nouă și mai semnificativă în a doua fază lui Sprite a fost punerea în aplicare lui LFS. Noi am făcut design şi studii preliminare în 1988, dar nu am solidificat proiectarea de prototip până în 1989 (ca parte a proiectului nou început RAID). Codificare a început la sfârşitul anului 1989. Prin primăvara lui 1990 LFS a dat semne de viaţă, şi a intrat în utilizare de producţie în toamna anului 1990. Până la sfârşitul anului 1991, practic, toate zeci de discuri cu Sprite au conținut LFS.

Faza finală a proiectului a început la sfârşitul anului 1990 şi a continuat până la 1995. În această fază am iniţiat mai multe proiecte noi, cele mai multe dintre care reflectau accentul tot mai mare a proiectului cu privire la aspectele legate de management de stocare. În iarna anului 1990 am început să analizăm comportamentul de recuperare după accidente a server-ului de fişiere, și acest lucru a condus la o serie de experimente cu tehnici de recuperare mai bune, cum ar fi recuperare condusă de server şi utilizarea non-volatilă de stocare. În 1991 am început un proiect pentru a vedea dacă Sprite ar putea fi re-pus în aplicare ca un proces de server la nivel de utilizator care rulează sub kernel-ul Mach 3.0; acest proiect s-a finalizat în vara anului 1992, cu o funcționalitate mare, dar performanţă dezamăgitoare. În 1991 şi 1992 am dezvoltat, de asemenea, biblioteca sistemului de bandă Jaquith, care a făcut disponibilă sisteme de bandă controlate automat atât pentru sistemele Sprite cît şi altele feluri de UNIX. În aceeaşi perioadă am început proiecte în care experimentam benzi de fişiere pe servere multiple de fișiere (Zebra), precum şi de a aplica tehnicile de LFS pentru matrice de discuri (Sawmill).

Ca și majoritatea software-ului, kernel-ul Sprite a devenit mai greu şi mai greu să se menţină cu vîrstă. Revizuirile frecvente şi variaţii ale personalului proiectului au condus la o creştere a complexităţii sistemului, în ciuda eforturilor noastre cele mai bune de a menţine lucrurile curate şi simple. În plus, am găsit mai greu şi mai greu să ţinem pasul cu evoluţiile a sistemelor de operare comerciale. Până în 1990 au existat mai multe versiuni de UNIX comerciale cu echipe de sprijin masiv, cum ar fi System V, Solari, şi OSF. Aceste sisteme au adăugat unele caracteristici într-un ritm rapid şi utilizatorii noştri doreau acces la aceste funcţii în conformitate cu Sprite. Noi am adaugat noile caracteristici, cum ar fi bibliotecile partajate şi compatibilitatea binară cu SunOS şi Ultrix, dar am gasit că petrecem mai mult timp pe sarcini care nu au fost orientate spre cercetare.

La sfîrşitul anului 1991 am decis să introducem proiectul într-o treptată strânsă. După ce nu am început să implementăm orice noi evoluţii majoră şi nici studenţi noi absolventi nu au aderat la proiect. Noi am oprit încurajarea noilor utilizatori pentru a lucra la Sprite, astfel încât comunitatea de utilizatori cu încet s-au redus înapoi la doar echipa Sprite. Sprite ne-a servit mult timp și bine ca un vehicul de cercetare. A fost timp pentru a trece la alte lucruri.

Dezamăgiri

Cea mai mare dezamăgire mea referitor la proiectul Sprite este că nu am putut să transferăm tehnologii de utilizare lui Sprite în industrie. Am făcut o distribuţie gratuită de Sprite, dar a fost dificil de a instala Sprite din distribuţie. În plus, a fost greu de obținut oamenii pentru a le comuta la diferite sisteme de operare: sisteme comerciale Unix au adăugat caracteristici la o rată ce nu am putut potrivi, şi a fost greu să menţinem aplicarea de portabilitate. Nu a fost nici o modalitate de a utiliza o parte din tehnologii Sprite (cum ar fi sistemul de fişiere), fără a adopta întregul sistem. Ca rezultat, alte sisteme de fişiere, cum ar fi NFS şi AFS au devenit utilizat pe scară largă în timp ce Sprite nu.

Unele dintre ideile Sprite au găsit treptat modul lor de utilizare mai largă, cum ar fi proces de migraţie (popularizat în formă de maşină de migraţie virtuală) şi LFS (utilizat în produse comerciale, cum ar fi NetApp şi în sistemele de control pentru memorie flash). Cu toate acestea, aceste idei au trebuit să fie reimplementate. Nu a fost posibil pentru alte persoane de a lua pur şi simplu codul Sprite şi de al folosi. Poate că ar fi fost mai bine dacă am fi construit Sprite ca o extensie a unui sistem de operare existent, mai degrabă decât construind un nou sistem de operare de la zero, acest lucru ar fi simplificat transferul de tehnologie. Cu toate acestea, probabil asta aș ne reține de la explorarea aspectele unui sistemul imagine unică, care ar fost dificil să punem în aplicare într-un sistem existent.

Contribuitorii lui Sprite

Multe persoane au contribuit la Sprite de-a lungul anilor. Eu nu pot spera, eventual, de a lista fiecare contribuţie semnificativă, dar voi încerca oricum. Lista de mai jos rezumă activitatea membrilor proiectului principali (studenții mei de cercetare şi personalul care au raportat direct la mine). Oamenii sunt enumerate în ordine cronologică până la data când au început să lucreze la Sprite, iar proiectele sunt listate în ordinea celor mai importante (în opinia mea).

  • Brent Welch (Vara 1984 – primavara 1990): procedura de apeluri de la distanţă; sistemul de fişiere (manager de stocuri, comutarea sistemelor de fişiere, prefixe, nume de căutare, dispozitive de la distanţă, protocol de recuperare în cazul accidentelor, formatare de disc, demontare şi restaurare, sprijin de migraţie); pseudo-dispozitive; sisteme de pseudo-fişiere; sistemul de fişiere BNFS; sprijin NFS, drivere de dispositive, profilare de kernel; procesul de bootstrap.

  • Andrew Cherenson (toamna 1984 – toamna 1987): Internet server protocol; proiectarea sistemului de fereastră şi portarea de X10, timer, interfeţe seriale, depanare la nivel de utilizator; pseudo-dispozitive; procesul inițial, portare de comande (comenzile de reţea, autentificare); solicitări de sistem legate de proces; compatibilitatea UNIX; formatare manuală a intrărilot; bibliotecă C.

  • Fred Douglis (toamna 1984 – toamna 1990): procesul de migraţie şi programul de pmake; compatibilitatea UNIX şi portarea de comande; interfeţe de apel a sistemului; sincronizare, programarea, şi susţinerea procesului; portare şi sprijinul pentru programele majore, cum ar fi emacs şi tex; manipularea cu filtrele şi sprijinul UART pentru SPUR; muncă de proiectare pentru sisteme de fişiere log-structurate; experimente cu discuri optice.

  • Mike Nelson (toamna 1984 – toamna 1988): memorie virtuală, sistemul de fişiere (caching, verificatorul de disc, interacţiunile vm, suport de migrare, recuperarea de accidente, selectare); depanarea de kernel, portatrea la stațiile Sun-3 şi DECstation-3100; drivere de dispozitive şi de reţea; tratare a semnalelor, portarea la SPUR (memoriei virtuală, manipulatori de filtre, etc); portare de comande.

  • John Ousterhout (toamna 1984 – vara 1994): alocarea de memorie, biblioteca C, driver-ul terminalului, comutarea contextului; portare de gcc, mkmf program.

  • Adam de Boor (toamna 1986 – vara 1988): programul Pmake; portare la X11 (de exemplu, drivere de dispozitiv şi codul de regiune), programe xman şi mkmf; depanare de SWAT.

  • Mendel Rosenblum (iarna 1988 – toamna 1992): sistemul de fişiere log-structurat; portul SPUR, depanare de instrumente, drivere de hard disk; portul Sun-4; portare la X11R4. 

  • Mary Baker (iarna 1988 – toamna 1994): analiza de recuperare si redesign; controlul congestiei pentru apeluri de procedură la distanţă; caseta de recuperare; porturi Sun-4, SPARCStation, SPARCStation-2; măsurători de sistem de fişiere, analiza a utilizărilor NVRAM; octet-swapping-ul  RPC; driver de dispozitiv SCSI; multi-procesor de conversie.   

  • Bob Bruce (toamna 1988 – toamna 1990, toamna 1991 – iarna 1992): daemon Spooler, demontarea şi restabilirea utilitaților; banda de distribuţie Sprite; sprijin pentru elaborarea şi instrumente de depanare la nivel de utilizator de profile; sprijin de punct mobil; porturile DECstation-3100 şi Sequent; UNIX compatibilitate; sprijinul Operation Desert Storm support; portul X11R5.

  • John Hartman (toamna 1988 – toamna 1994): sistem de fişiere în dungi Zebra; măsurători de sistem de fişiere; port pentru multiprocesor SPUR; măsurători de Sprite care rulează pe multiprocesor SPUR; drivere de dispozitiv şi de reţea (FDDI şi Ultranet), analize de sincronizare, verificatorul de disc, demontare și alte utilități de disc; suport pentru multiprocesor, procesul de bootstrap, sprijin de depanare, sprijinul LFS; planificator.

  • Don Reeves (primavara 1989): ARP şi ARP invers.

  • Ken Shirriff (vara 1989 – primavara 1995): transfer de fişiere de mare viteză folosind RAID; urme de sistem de fişiere, analiza a numelui de cache; memorie virtuală partajată; fişiere mapate, sincronizare System-V, de executare de securitate, suport e-mail, UNIX compatibilitate; legarea dinamică; demonii de retea, DECstation-3100 comenzi de portare; utilități demontare / restaurare.

  • Mike Kupfer (vara 1990 – vara 1992): Sprite ca procesul de server Mach; măsurători pentru analiză de hârtie Sprite; verificări interne a erorii în kernel; sprijin pentru pmake, X, utilități demontare / restaurare, precum şi alte instrumente administrative.

  • Jim Mott-Smith (iarna 1991 – toamna 1992): banda sistemului de arhiv Jaquith; utilizare de SCSI, sprijin de NFS; protocolul de internet server de sprijin; utilități demontare / restaurare; sprijin de trimitere a e-mail-urilor.

  • Geoff Voelker (toamna 1991 – vara 1992): disc de utilităţi; driverul de reţea FDDI; reţelelor de utilităţi.

  • Matt Secor (vara 1992): sprijin de depanare.

În plus la lista persoanelor enumerate mai sus, au existat mulţi alţii care au adus contribuții semnificative la Sprite, chiar dacă aceştia nu au raportat direct la mine. Iată câteva dintre "ajutători din afara"; scuze tuturor celor pe care am trecut cu vederea.

Bob Beck (port Sequent), Ann Chervenak (drivere de dispozitiv), Doug Johnson (depanare de SPUR), Ed Lee (driver de bandă RAID), Dean Long (stabilire de bug-uri a kernel-ului, procesul de bootstrap, portul SPARCStation), Ethan Miller (sprijin de controler RAID), Srinivasan Seshan (sprijin de Ultranet), Thorsten Von Eicken (port X11R4), Jay Vosburgh (port Sequent).

Notă: această pagină a fost scrisă iniţial la începutul anilor 1990, și am redescoperit-o în februarie 2011 şi am actualizat pe ea pentru a produce această pagină.

ok ok