Sunteți pe pagina 1din 45

CUPRINS

1 Concepte genetale despre UNIX 5

2 Distribuţii 5

3 Certificate SUS 5

4 Necertificate 6

5 Designul sistemului 6

6 Componente 7

7 Istorie şi dezvoltare 9

8 FreeBSD 5 — schimbări şi dezvoltare 10

9 FreeBSD 6 şi 7 11

10 Compatibilitate cu Linux 11

11 Produse derivate din FreeBSD 12

12 TrustedBSD 12

13 Funcţiunile sistemului de fişiere 13

14 Fişiere 15

15 Operaţiile cu conţinutul fişierelor 16

16 Directoare 17

17 Operaţiile cu atribute 19

18 Protecţie 20

19 Abstracţia de fişier; operaţiile pe fişiere 21

Coala

Mod Coala N Document Semnat Data 1


20 Ţevile cu nume 22

21 Perifericele în Unix: fişierele ``speciale'' 23

22 Pseudo-perifericele (pseudo-devices) 26

23 Sistemul de fişiere /proc 27

24 Concluzie: programarea orientată pe obiecte 28

25 Structura  şi  arhitectura  sistemului  UNIX 29

26 Comentariu despre Supercomputing 31

27 Conjunctura 24

28 Un nou limbaj 36

29 O nouă gazdă 37

30 Propagarea 38

31 Divergenţa 38

32 Standardizarea 39

33 Bariera sonică 40

34 Războiul 40

35 Decăderea 41

36 Supravieţuirea 41

37 Încheiere 42

38 Note Bibliografice 42

39 Versiuni de UNIX 43

Bibliografie 44

Recenzie 45
Coala

Mod Coala N Document Semnat Data 2


1. Concepte genetale despre UNIX

UNIX® este un sistem de operare portabil şi modular dezvoltat iniţial de un grup


de programatori din cadrul AT&T Bell Labs, printre care şi Ken Thomson, Dennis
Ritchie şi Douglas McIlroy. Astăzi, sistemele UNIX sunt dezvoltate de companii
(precum IBM, HP sau SUN), indivizi şi organizaţii non-profit (precum Free Software
Foundation). Astăzi, numele de UNIX nu mai reprezintă atât de mult numele unui
singur sistem de operare, ci mai degrabă numele unei clase de sisteme de operare
compatibile deşi nu împărtăşesc cod sursă comun.
UNIX este un sistem multi-user, multi-tasking, portabil şi modular, fiind conceput
în jurul unor paradigme numite în general filosofie unix - totul este un tratat ca un fişier
(inclusiv procesele rulând sau dispozitivele fizice - de la tastatură până la memoria
RAM), programe care să îndeplinească o singură funcţie, dar să fie capabile să
comunice între ele, alegerea celei mai simple căi spre realizarea unui obiectiv, folosirea
fişierelor text atât pentru configurare cât şi pentu ieşire, separarea kernelului de
programele aplicaţie etc. Nucleul sistemelor UNIX este în general scris în limbajul C
(deşi prima variantă a fost scrisă în limbaj de asamblare pentru calculatoare PDP-7).
Numele UNIX aparţine The Open Group iar codul sursă original (AT&T) este
disputat între Novell şi SCO. Oficial, poate fi numit UNIX doar un sistem de operare
care a trecut de certificarea Single Unix Specification a The Open Group. Cu toate
acestea, o mare parte din producători (mai ales cei non-profit), au ales, atât din cauza
preţului, cât şi din cauza dezvoltării foarte rapide a distribuţiei lor, să nu-şi certifice
sistemul. Acestea, cu toate că sunt perfect sau aproape perfect compatibile cu
standardul, nu pot fi denumite oficial UNIX, şi sunt numite în mod comun "compatibile
UNIX", U*ix sau *nix. Aceste sisteme nu sunt cu nimic inferioare celor certificate, şi îşi
păstrează compatibilitatea cu cele certificate, ba mai mult, la momentul de faţă, deţin
supremaţia din punct de vedere al bazei instalate

2. Distribuţii
Sistemele UNIX actuale se bazează pe trei ramuri originale - UNIX System V
(produs de cei de la AT&T la mijlocul anilor 1980), BSD (ramură desprinsă din
proiectul AT&T la sfârşitul anilor 1970) şi respectiv GNU/Linux (produs ca replică
gratuită şi open-source la celelalte două ramuri - nucleul e dezvoltat de Linus Torvalds
începând cu 1991, iar o mare parte din aplicaţii sunt date de Proiectul GNU). Fiecare
distribuţie de astăzi se bazează pe una din aceste ramuri, dar a preluat şi anumite
caracteristici de la celelalte.
Astăzi se află în producţie următoarele variante:

3. Certificate SUS
 Solaris - produs de firma Sun Microsystems. Este distribuit atât în versiune
closed-source cât şi in versiune open source numită Open Solaris. Rulează pe
arhitectura SPARC, x86 şi x64.
 HP-UX - produs de firma HP. Rulează pe arhitectura PA-RISC şi IA-64
 AIX - produs de firma IBM. Rulează pe arhitectura PowerPC şi POWER
Coala

Mod Coala N Document Semnat Data 3


 IRIX - produs de firma SGI. Rulează pe arhitectura MIPS

4. Necertificate
 Linux (sau GNU/Linux) - produs de multiple organizaţii într-o gama largă
distribuţii, open-source în baza licenţei GNU/GPL şi disponibil gratuit. Rulează
pe diverse arhitecturi, incluzând x86, x64, IA-64, PowerPC, MIPS, PlayStation 2.
 BSD - astăzi open-source, şi disponibil în trei distribuţii principale (FreeBSD,
NetBSD şi OpenBSD). NetBSD rulează pe 54 de arhitecturi diferite, fiind portat
inclusiv pe un microcontroller care controla un prăjitor de pâine [1].

 MacOS X - produs de compania Apple pentru calculatoarele Macintosh.


Estesoftware comercial, bazat pe o combinaţie de FreeBSD, nucleu Mach şi
tehnologii specifice Apple. Rulează pe arhitectura PowerPC şi x86.

5. Designul sistemului
Sistemele Unix sunt bazate pe trei concepte :
 fişierul - totul este un fişier - ele sunt fără tip, şi corespund unei anumite resurse,
fie un dispozitiv fizic, o resursă, un mesaj între procese, sau informaţie stocată pe
un dispozitiv fizic sau pe o reţea. Sistemul cunoaşte toate informaţiile necesare
prelucrării (drepturi pe fişier, proprietar, grup de acces)
 procesul - procesele (instanţe ale unui program) pot rula în paralel, atât având un
Coala

Mod Coala N Document Semnat Data 4


mediu propriu de execuţie, cât şi împărţindu-şi accesul la o resursă comună
(thread). Sistemule UNIX sunt capabile de a se folosi de memorie virtuală
 drepturi de acces - fiecare utilizator sau proces poate fi limitat în resursele pe care
le poate accesa şi la modul în care resursele sunt accesate.

6. Componente
Sistemele UNIX sunt construite în jurul a mai multe niveluri concentrice,
conţinând fiecare o serie de componente, puse împreună pentru a forma sistemul. Un
sistem UNIX conţine, pe lângă nucleu (kernel), un interpretor de comenzi care serveşte
şi drept limbaj de scripting (numit shell), un set de biblioteci tipice, o serie de aplicaţii
canonice şi cod sursă pentru portabilitate. Nu este necesar ca distribuţiile să conţină
aceleaşi programe sau comenzi - ci doar să respecte anumite standarde şi să aibă un
comportamen previzibil şi similar - astfel, kernelul Solaris nu este acelaşi cu kernelul
HP-UX, iar shellul standard de pe un sistem poate fi complet diferit de cel de pe alt
sistem (populare sunt shellurile bash - Bourne Again SHell, ksh - Korn SHell, tcsh - C
Shell, B

Coala

Mod Coala N Document Semnat Data 5


Un exemplu de utilizare a comenzilor canonice Unix - aici, shellul Bourne Again
 Kernelul - în general monolitic cu posibilitatea de încărcare de module (ca în
cazul kernelului original AT&T, prezent în System 5, Linux sau BSD).
 Mediul de dezvoltare - un mediu suficient pentru a reconstrui sistemul direct din
codul sursă. Canonice sunt un compilator de C (cc), un assembler (as) , un linker
pentru combinarea fişierelor obiect (ld), un set tipic de biblioteci pentru limbaj
(lib),un sistem de automatizare a compilării ( make), şi eventual alte limbaje de
programare şi scripting (C++, Java, Perl, Python, Fortran, COBOL, Pascal),
arhivatori (ar, tar, bz2, gzip, zip, rar), unelte pentru dezvoltarea de compilatoare
etc.

Un sistem compatibil UNIX - GNU/Linux rulând cu intefaţa grafică KDE


 Comenzi - UNIX, în general, nu distinge între aplicaţii de sistem şi aplicaţii de uz
general - shellul este o aplicaţie. Există un set de comenzi generale pentru orice
sistem UNIX, necesare pentru lucrul cu sistemul şi cu fişierele de sistem (fişiere
text):
 mount, umount, mkfs, fsck pentru lucrul cu sistemul de fişiere, partiţii şi
discuri
 vi, emacs şi ed - editoare de text
 kill, ps - pentru lucru cu procese
 cd, ls, mv, rm, rmdir, mkdir cp - pentru lucrul cu directoare.
 cat, less, troff, sed, awk, sort, tail, tee, grep - pentru lucrul în fişiere
 date, shutdown, who, chmod, chown - pentru lucrul cu utilizatorii şi cu drepturile
pe fişiere
 mail, telnet, ssh, lynx, finger, ping, whois - pentru comunicare în reţea
 Documentaţie (atât on-line cât şi off-line)
 man, apropos, info - pentru manual şi asistenţă - manualul are şi o pagina în
care se auto-explică - man man
Pe lângă aceste aplicaţii, o distribuţie modernă UNIX vine cu un server grafic (în
general X), pentru afişare în mod grafic, cu un sistem de ferestre (iniţial standardizat
Coala

Mod Coala N Document Semnat Data 6


prin SUS la Motif şi CDE, astăzi omniprezente sunt Gnome şi KDE), cu o serie extinsă
de programe, servere şi aplicaţii pentru diverse scopuri (de la IDE-uri pentru
programare, servere web şi calcul ştiinţific până la browsere, procesoare de text şi jocuri
- spre exemplu, o parte din distribuţii vin cu browserul Firefox).
Adus de la "http://ro.wikipedia.org/wiki/UNIX" .

FreeBSD este un sistem de operare liber Unix-like descendent din AT&T


UNIX® prin ramura Berkeley Software Distribution (BSD), mai exact provine din
sistemele de operare 386BSD şi 4.4BSD. Rulează pe calculatoare cu procesoare
compatibile cu familia Intel x86, dar şi pe procesoare DEC Alpha, UltraSPARC® (al
firmei Sun Microsystems), Itanium (IA-64), AMD64, PowerPC, PC-98, ARM şi MIPS.
FreeBSD este un sistem de operare complet, dezvoltat unitar. Nucleul, driverele pentru
dispozitive şi utilitarele din spaţiul utilizatorului, cum ar fi interpretorul de comenzi sau
shell-ul, sunt ţinute în acelaşi arbore de urmărire a revizuirilor codului sursă (CVS).
Această metodă de dezvoltare vine în contrast cu cea folosită pentru Linux (un sistem
de operare similar, dar mai bine cunoscut), unde nucleul este dezvoltat de o echipă de
dezvoltatori, utilitarele din spaţiul utilizator şi aplicaţiile sunt dezvoltate de alte echipe
(cum ar fi proiectul GNU), iar apoi toate acestea sunt împachetate împreună şi publicate
de alte echipe sub formă de distribuţii Linux.
Ca sistem de operare, FreeBSD este privit în general ca fiind foarte fiabil şi robust, iar
dintre sistemele de operare ce raportează la distanţă timpul de funcţionare de la ultima
iniţializare a sistemului (uptime) [1], FreeBSD este cea mai populară alegere dintre
sistemele de operare libere afişate în lista Netcraft a primelor 50 de servere web cu cel
mai lung uptime [2] (uptime în unele versiuni de GNU/Linux nu poate fi calculat). Un
uptime lung indică de asemenea faptul că nu au fost necesare actualizări ale nucleului
sistemului de operare, pentru că instalarea unui nou nucleu implică reiniţializarea
sistemului şi rescrierea de la zero a contorului sistemului.Istorie şi dezvoltare

7. Istorie şi dezvoltare
Mascota proiectului FreeBSD: BSD Daemon
Dezvoltarea iniţială a sistemului FreeBSD a început în 1993, pornind de la sursele
386BSD. Totuşi, din cauza îngrijorărilor privind legalitatea tuturor surselor folosite în
386BSD şi a unui proces între Novell (pe atunci proprietarul drepturilor pentru UNIX)
şi Berkeley, FreeBSD a sfârşit prin reproiectarea unei mari părţi a sistemului pentru
versiunea FreeBSD 2.0 (ianuarie 1995), folosind versiunea 4.4BDS-Lite de la
Universitatea din California, Berkeley. Manualul FreeBSD (în limba engleză) cuprinde
mai multe date istorice despre geneza sistemului de operare FreeBSD.
Poate cel mai notabil câştig al versiunii FreeBSD 2.0 a fost restructurarea sistemului
Mach Virtual Memory (memorie virtuală Mach) al CMU-ului original, care a fost
optimizat pentru performanţă sub încărcări mari, precum şi crearea sistemului de
porturi, care face ca descărcarea, construirea şi instalarea de software din surse terţe
foarte uşoară. FreeBSD echipează situri de mare succes cum ar fi: cdrom.com (un
depozit imens de software care a doborât multe recorduri din internet), Hotmail şi
Yahoo!.
Coala

Mod Coala N Document Semnat Data 7


FreeBSD 3.0 a adus mai multe schimbări: mutarea la formatul binar ELF, suport
iniţial pentru sistemele SMP şi de asemenea a adăugat suport pentru o nouă platformă
pe 64 bit: Alpha. La vremea sa, ramura 3.X a fost sever criticată pentru că multe
schimbări nu erau evidente în beneficiul şi afectarea performanţei, dar a fost un pas
necesar pentru dezvoltarea a ceea ce avea să fie ramura de mare succes 4.X.
Iniţial, FreeBSD a folosit şi pe post de logo mascota BSD Daemon, dar în anul
2005 a fost organizată o competiţie pentru un logo propriu. Pe data de 8 octombrie,
2005, competiţia a luat sfârşit, iar proiectul propus de Anton K. Gural a fost ales să
devină logo FreeBSD. BSD Daemon, rămâne însă mascota proiectului FreeBSD.

8. FreeBSD 5 — schimbări şi dezvoltare


Versiunea FreeBSD finală şi ultima din ramura 5-STABLE este 5.5, a fost lansată
în mai 2006. Dezvoltatorii FreeBSD menţin (cel puţin) două ramuri de dezvoltări în
acelaşi timp. O ramură -STABLE de FreeBSD este creată pentru fiecare număr de
versiune majoră, pentru care sunt scoase versiuni odată la fiecare 4--6 luni. Ulitma
versiune de FreeBSD 4-STABLE este 4.11, care este şi ultima din versiunile ramurii 4-
STABLE. Prima versiune 5-STABLE a fost 5.3 (de la 5.0 la 5.2.1 au fost parte din
ramura -CURRENT). Prima versiune 6-STABLE a fost 6.0. Ramura de dezvoltare,
-CURRENT, în acest moment este 7.0-CURRENT şi conţine caracteristici agresive
pentru un nucelu nou şi pentru aplicaţii din spaţiul utilizator. Dacă o caracteristică este
suficient de stabilă şi matură, atunci ea poate fi portată pe versiuni anterioare ale ramurii
-STABLE (în slang-ul FreeBSD operaţia este denumită MFC, Merge from CURRENT).
Modelul de dezvoltare FreeBSD este descris mai amănunţit într-un articol, în limba
engleză, de Niklas Saers [3].
Marea diferenţă în FreeBSD 5 a fost o schimbare majoră în mecanismul de nivel
jos al blocării nucleului care permite un suport mai bun pentru multiprocesor simetric
(SMP, symmetric multiprocessor), eliberând o mare parte de nucleu de blocarea
multiprocesorului, menţionată uneori ca Big Giant Lock. Acum este posibilă executarea
în acelaşi timp mai multor procese în mod nucleu.Altă schimbare majoră include o
soluţie de thread-ing m:n, numită KSE, care acum este biblioteca implicită pentru
threading (pthreads) începând cu 5.3 (crearea ramurii 5-STABLE). Terminologia m:n,
unde m şi n sunt întregi pozitivi, implică faptul că m fire de execuţie (thread) din spaţiul
utilizator corespund la n fire de execuţie ale nucleului. Multe alte caracteristici noi sunt
legate de securitate. A fost format proiectul TrustedBSD de către Robert Watson cu
scopul expres de a adăuga încredere în funcţionalitatea sistemului de operare pentru
FreeBSD. Un mediu extensibil pentru controlul obligatoriu al accesului (TrustedBSD
MAC Framework, MAC este acronim pentru mandatory access control), un sistem de
fişiere Access Control Lists (ACL, liste de control pentru acces) şi noul sistem de fişiere
UFS2 toate provin din TrustedBSD. Unele din funcţionalităţile TrustedBSD au
fostntegrate de asemenea şi în sistemele de operare NetBSD şi OpenBSD.
FreeBSD 5 a schimbat de asemenea semnificativ stratul block I/O (bloc de
intrare/ieşire) prin introducerea mediului de transformare a cererii intrare/ieşire pentru
disc modular GEOM (GEOM modular disk I/O request transformation framework),
contribuţie a lui Poul-Henning Kamp. GEOM activează crearea simplă a multor feluri
de funcţionalitate, cum ar fi creare de imagini în oglindă, mirroring, (gmirror) şi
Coala

Mod Coala N Document Semnat Data 8


criptarea (gbde). Lansarea recentă a FreeBSD 5.4 a confirmat ramura FreeBSD 5.X ca
pe o verisiune foarte stabilă şi foarte performantă, în ciuda faptului că a avut o perioadă
de concepţie lungă din motive de set cuprinzător de caracteristici.

9. FreeBSD 6 şi 7
FreeBSD 6.1 a fost lansat în 8 mai, 2006, iar 7.0-CURRENT este în dezvoltare
activă. Aceste versiuni continuă să lucreze la optimizări SMP şi threading, la zona
funcţionalităţii avansate a 802.11 şi la auditarea evenimentelor de securitate
TrustedBSD. Realizările primei versiuni ale acestora includ înlăturarea Giant lock din
VFS, înlocuirea bibliotecii libthr cu o implementare 1:1 pentru threading care se execută
mai bine, şi adăugarea unei implementări de audit BSM, numită OpenBSM creată de
proiectul TrustedBSD, care se bazează solid pe implementarea BSD găsită în producţia
Open Source de la Apple: Darwin, publicată sub o licenţă de tip BSD.

10. Compatibilitate cu Linux


FreeBSD oferă compatibilitate binară cu mai multe alte sisteme de operare Unix-
like (de tip unix), inclusiv cu Linux. Motivaţia din spatele acestui fapt este de obicei
atribuită rulării aplicaţiilor dezvoltate pentru Linux, adesea comerciale, şi care sunt
distribuite de obicei sub formă binară, astfel ele ne putând fi portate pe FreeBSD în
lipsa acceptului acelor care controlează codul sursă.
Din linie de comandă, compatibilitatea permite utilizatorilor de FreeBSD să
ruleze majoritatea aplicaţiilor care sunt distribuite doar ca binare Linux. În comparaţie
cu numărul vast de aplicaţii native disponibile pentru FreeBSD folosind colecţia de
porturi, aceste aplicaţii sunt minoritare. Aplicaţiile folosite în nivel de compatibilitate
Linux includ StarOfice, versiunea Linux de Netscape, Adobe Acrobat, RealPlayer,
VMware, Oracle, WordPerfect, Skype, Doom 3, Quake 4, seria Unreal Tournaments,
Sea Monkey, şi altele. În general, pare să nu existe nici o diminuare notabilă a
performanţei când se rulează binarele Linux comparativ cu aplicaţiile native FreeBSD.
Deşi există multe aplicaţii care rulează fluent în stratul de compatibilitate, trebuie
notat că stratul nu este complet, astfel ducând unele binare Linux în situaţia de nu putea
fi folosite sau de a le limita funcţionalitatea, probabil din cauza faptului că stratul de
compatibilitate suportă doar apelurile de sistem pentru nucleul Linux 2.4.2, o distribuţie
care a făcut istorie. Un exemplu din această categorie este Cedega, produsul firmei
TransGaming pentru rulat jocuri de Microsoft Windows sub Linux. Folosirea acestuia
în acest moment este în mare măsură compromisă din cauza unui strat de
compatibilitate incomplet. Există însă un succes limitat în folosirea lui la rularea
jocurilor pe FreeBSD [4]. A fost acceptat un proiect pentru ediţia 2006 Sumer of code,
de a actualiza stratul de compatibilitate şi de a implementa apeluri de sistem care
lipsesc.
Pentru cele mai multe aplicaţii ştiinţifice, compatibilitatea Linux lucrează corect;
aplicaţii precum nmrpipe, ccp, Mathematica sau Matlab lucrează conform
aşteptărilor.Licenţă
Ca şi sistemele de operare surori, codul din FreeBSD este publicat sub termenii
diferitelor licenţe. Totalitatea codului nucleului şi cea mai nou creată de cod este
publicată sub termenii licenţei BSD cu două clauze, care permite tuturor să folosească şi
Coala

Mod Coala N Document Semnat Data 9


să redistribuie FreeBSD după dorinţă. Există de asemenea părţi publicate sub alte
licenţe: GPL, LGPL, ISC, licenţă BSD cu trei clauze, licenţă BSD cu patru clauze.
Pentru unele funcţionalităţi particulare, există de asemenea şi binare fără cod
sursă cum ar fi Atheros HAL pentru funcţionalitate wireless şi o unealtă doar în format
binar pentru AAC RAID de la Adaptec.

11. Produse derivate din FreeBSD


O gamă largă de produse sunt bazate direct sau indirect pe FreeBSD. Această
gamă cuprinde de la dispozitive de tip embedded (integrate), cum ar fi rutere Juniper
Networks şi sisteme de operare firewall de la Nokia, la porţiuni întregi ale altor sisteme
de operare incluzând aici Linux şi RTOS WxWorks. Darwin, inima Mac OS X de la
Apple, se bazează în mare măsură pe FreeBSD incluzând aici sistemul de fişiere virtual,
stiva de reţea şi componente din spaţiul utilizator. Apple continuă să integreze cod nou
din FreeBSD şi contribuie înapoi către FreeBSD cu schimbări. Produsul open source
OpenDarwin, dezvoltat original din codul de bază al Apple dar acum entitate separată,
include de asemenea cod FreeBSD în mod substanţial. În plus există câteva sisteme de
operare originale desprinse din sau bazate pe FreeBSD incluzând aici PC-BSD şi
DesktopBSD, care include îmbunătăţiri destinate utilizatorilor de acasă sau staţiilor de
lucru; distribuţiile FreeSBIE şi Frenzy live CD; produsele firewall embedded m0n0wall
şi pfSense; DragonFly BSD o notabilă desprindere din FreeBSD 4.8 conceput pentru o
strategie de sincronizare multiprocesor diferită care a fost apoi aleasă pentru FreeBSD 5
şi dezvoltarea unor caracteristici microkernel (micronucleu); şi nu în ultimul rând
RoFreeSBIE, un proiect rezultat colaborării membrilor ROFUG.

12. TrustedBSD
Proiectul TrustedBSD oferă FreeBSD-ului un set de extensii de încredere pentru
sistemul de operare, fiind iniţiat de Robert Watson. Scopul proiectului a fost
implementarea conceptelor de la Common Criteria pentru Information Technology
Security Evaluation (evaluarea securităţii tehnologiei informaţiilor) şi Orange Book.
Acest proiect rămâne încă în dezvoltare, şi multe din aceste extensii de încredere au fost
integrate în lista de dezvoltare a FreeBSD 5.X, 6.X şi acum 7.X-CURRENT.
Pincipalul obiectiv al proiectului TrustedBSD este contribuţia la Access Control
Lists (listele de control al accesului), auditul evenimentului, atribuţii extinse, capacităţi
de acord fin şi mandatory access control (control al accesului obligatoriu). Ca parte din
proiectul TrustedBSD, există de asemenea un port care rulează pe FreeBSD al
implementării FLASK/TE al NSA în SELinux. Contribuţii mai recente includ
dezvoltarea OpenBSM, o implementare open source a API-ului Basic Security Module
(BSM, modul de securitate fundamentală) al companiei Sun şi un format de fişiere
pentru jurnale de audit, care suportă un sistem de audit pentru securitate extinsă care
face parte din FreeBSD 6.1.
Deşi majoritatea componentelor proiectului TrustedBSD sunt incluse în arborele
sursă principal al FreeBSD, aceasta nu este singura lor destinaţie. Multe caracteristici,
odată ajunse la maturitate, îşi găsesc locul în OpenBSD sau Darwin de la Apple
Computer.
Sistemul de operare Unix s-a impus în lumea calculatoarelor datorită multor
Coala

Mod Coala N Document Semnat Data 10


calităţi remarcabile. Acest articol va încerca să ilustreze una dintre ele, şi anume
uniformitatea remarcabilă a operaţiilor. Vom ilustra cum o singură parte a sistemului de
operare, şi anume sistemul de fişiere integrează într-un mod uniform o multitudine de
funcţii independente cum ar fi: stocarea informaţiei, numirea ei, protejarea informaţiei
prin controlul accesului, numirea perifericelor şi controlul accesului la periferice, iar în
sistemele moderne Unix chiar şi numirea proceselor, operaţiile cu procese şi controlul
accesului la procese. Partea frumoasă este că toate aceste lucruri diferite se fac folosind
un număr mic de mecanisme: protecţia fişierelor, perifericelor şi proceselor se face de
către nucleu în exact acelaşi fel. Această uniformitate face sistemul mai uşor de folosit
şi de implementat şi mai flexibil.
Într-un articol anterior am prezentat structurile de date pe care le foloseşte
sistemul de operare Unix pentru a implementa operaţiile cu fişiere (structuri a căror
totalitate poartă denumirea de ``sistem de fişiere''). O oarecare familiaritate cu
conţinutul acelui articol se poate dovedi utilă, dar (sper că) nu este absolut necesară.
Articolul acela este disponibil din pagina de web a autorului în postscript. Articolul de
faţă este o continuare independentă a celuilalt. Sperăm ca peste cîtăva vreme să
augumentăm această suită cu un al treilea articol despre implementarea sistemului de
fişiere din Unix, care este extrem de interesantă.
Am folosit acest articol şi ca un pretext pentru a trece în revistă totalitatea
apelurilor de sistem din Unix care operează cu fişiere. E un lucru foarte instructiv să
înţelegem cum orice operaţie ne putem imagina se poate sintetiza numai din aceste
operaţii primitive puse la dispoziţie de nucleu.

13. Funcţiunile sistemului de fişiere


Un răspuns superficial la întrebarea ``la ce foloseşte un sistem de fişiere (în Unix
-- dar şi în alte multe sisteme de operare)?'' ar fi ``la stocarea informaţiei.'' Răspunsul
este cu siguranţă corect, dar incomplet. Sistemul de fişiere mai are şi multe alte
funcţionalităţi esenţiale, cîteodată foarte departe de misiunea aceasta. Le vom enumera
pe scurt, le vom discuta fugar, şi vom vedea apoi cum unele dintre aceste funcţiuni se
manifestă în sistemul de operare Unix.
Funcţiuni ale sistemelor de fişiere:
 Stocarea persistentă a informaţiei;
 Numirea informaţiei (servicii de directoare);
 Protecţia informaţiei;
 Mecanism de comunicaţie inter-proces (folosirea în comun a informaţiei);
 Interfaţă spre structurile de date ale nucleului (ex: periferice (devices) în Unix;
sistemul de fişiere /proc);
 Interfaţă universală la resurse ale reţelei (ex: URL-uri);
 Aparat de măsură a propriei sale performanţe.
Ultimele două aspecte nu vor fi discutate în acest articol.
Celorlalte le vom consacra grosso modo cîte o secţiune.
Să aruncăm o scurtă privire pe lista de apeluri de sistem care operează cu fişiere (un
apel de sistem este o funcţiune oferită de sistemul de operare). Dăm în tabela 1 o listă
completă (sortată alfabetic) a apelurilor de sistem care operează cu fişiere, din sistemul de
Coala

Mod Coala N Document Semnat Data 11


operare SunOS 4.1.3, o versiune de Unix extrem de populară de la firma Sun Microsystems.

Apel Funcţiune Categorie


access verifică dreptul de acces A
chdir schimbă directorul curent D
chmod schimbă drepturile de acces A
chown schimbă posesorul A
chroot schimbă directorul rădăcină D
close închide un fişier F
creat crează un fişier FD
execve execută un fişier --
fchmod ca şi chmod A
fchown ca şi chown A
fcntl operaţii speciale A
flock ``încuie'' fişier A
fstat ca şi stat A
fsync salvează conţinutul din cache al fişierului F
ftruncate ca şi truncate F
getdents citeşte conţinutul directorului D
ioctl operaţii speciale cu fişiere speciale S
link dă încă un nume unui fişier D
lseek mută cursorul la o nouă adresă în fişier F
lstat ca şi stat A
mkdir face un nou director D
mkfifo face un fişier special ``ţeavă'' S
mknod face un fişier special S
transformă acest fişier într-o zonă de
mmap F
memorie
open deschide un fişier pentru acces F
read citeşte din fişier date F
readlink citeşte o legătură simbolică D
rename schimbă numele unui fişier D
rmdir şterge un director D
stat citeşte atributele unui fişier A
symlink crează un nou nume pentru un fişier D
sync salvează cache-ul pe disc --
tell unde e cursorul în fişier? F
Coala

Mod Coala N Document Semnat Data 12


truncate reduce lungimea fişierului F
umask schimbă drepturile cu care se crează fişiere A
unlink şterge un nume al unui fişier D
write scrie date în fişier F

Table 1: Apelurile de sistem pentru fişiere din SunOS.

Am clasificat apelurile de sistem după tipul operaţiei în categoriile descrise în


tabela 2.

Table 2: Tipuri de apeluri de sistem pentru fişiere

Categorie Semnificaţie Apelur Operaţii distincte


A operaţii cu atribute 11 7
F operaţii cu conţinutul fişierelor 10 9
D operaţii cu directoare 11 11
S operaţii cu fişiere ``speciale'' 3 3
-- nu e o operaţie propriu-zisă pe 2 2
Total 37 32

14. Fişiere
Funcţiunea cea mai evidentă a unui sistem de fişiere este de a organiza datele în
fişiere. Acestea pot avea proprietăţi felurite în diferite sisteme de operare. În Unix
fişierele propriu-zise (adică nu directoarele sau alte varietăţi ciudate pe care le discutăm
mai jos) sunt simple array-uri de octeţi din punct de vedere al sistemului de operare;
utilizatorul îşi organizează în aceste array-uri datele cum doreşte. Acest model este
valabil şi în MS-DOS şi Windows. În plus fişierele mai sunt caracterizate de nişte
atribute a căror semnificaţie este importantă pentru sistemul de operare. Atribute tipice
sunt: numele fişierelor, de care utilizatorul se foloseşte pentru a indica fişierele asupra
cărora vrea să facă operaţiile, posesorul fişierului, data la care fişierul a fost creat,
drepturile de acces la fişier, etc. Atributele unui fişier sunt memorate de Unix într-o
structură de date numită inod, de la ``information-node''.
Atributele sunt oarecum secundare funcţiei principale a fişierelor, cea de a
memora date; fişierele puteau fi folosite pentru a memora date chiar şi fără a avea la-
ndemînă atribute. Sistemul de operare însă menţine atributele pentru că s-a observat că
funcţionalitatea pe care acestea o oferă este foarte utilă. Vom vedea că atributele sunt
Coala

Mod Coala N Document Semnat Data 13


unul dintre mecanismele prin care sistemul de fişiere poate fi folosit şi pentru alte
scopuri.

15. Operaţiile cu conţinutul fişierelor


Să trecem în revistă rapid operaţiile care se ocupă doar de manipularea datelor;
operaţiile cu atribute vor fi explorate într-o secţiune ulterioară.
În tabelul 3 sunt extrase din tabelul 1 operaţiile de categoria ``F'', care lucrează direct cu
conţinutul fişierelor.

Table 3: Apeluri de sistem pentru conţinutul fişierelor.

Apel Sintaxa Descriere


deschide un fişier
specificat prin nume (path)
open fd = open(path, mod) pentru acces în modul
indicat; întoarce un număr
întreg (descriptor) pentru a
manipula ulterior fişierul
close close(fd) închide un fişier deschis cu
open
creat creat(path, drepturi) crează un fişier cu un
nume specificat
truncate truncate(path, lungime) redu lungimea fişierului
dat prin nume la cea
ca şi truncate, doar că
ftruncate ftruncate(fd, lungime) fişierul e indicat prin
descriptor
mută cursorul de
lseek lseek(fd, deplasare, relativ) scriere/citire la o nouă
adresă în fişier
tell tell(fd) află unde e cursorul în
citeşte din fişier date în
read read(fd, memorie, lungime) memorie (de la poziţia
unde e cursorul curent)
scrie date din memorie în
write write(fd, memorie, lungime) fişier (la poziţia dată de
cursorul curent)
salvează conţinutul
fsync fsync(fd) fişierului care era păstrat în
cache

Coala

Mod Coala N Document Semnat Data 14


transformă acest fişier într-
o zonă de memorie;
scrierile în această zonă de
mmap ... memorie se vor reflecta în
fişier, iar citirile din
memorie se vor face din
acel fişier. Argumentele
sunt prea complicate ca să

După cum vedeţi operaţiile sunt relativ clare, poate mai puţin mmap(), de care ne
vom ocupa altă dată, într-un articol referitor la sistemul de memorie virtuală (această
funcţie, de altfel foarte importantă, este o aplicaţie imediată a sistemului de memorie
virtuală).
Putem face mai multe lucruri cu un fişier: îl putem crea, îl putem scurta, ne putem
plimba prin el şi putem citi/scrie în el ``petice''. Funcţia fsync() ne asigură că fişierul
ajunge pe disc; sistemele de operare încearcă să ţină cît mai mult timp informaţiile în
memorie pentru că discul este foarte lent comparativ cu memoria şi orice acces la el este
foarte costisitor. Este demn de observat că doar open(), creat() şi truncate() lucrează cu
fişiere date prin nume; celelalte funcţii lucrează cu fişiere deja deschise cu open()
anterior, şi care sunt indicate cu rezultatul dat de funcţia open(). Cînd open() deschide
un fişier returnează un număr întreg care se numeşte descriptor de fişier: ``file
descriptor'', sau ``file handle'' (în traducere ``mîner de fişier''), folosit de alte funcţii
pentru a indica fişierul. Verificarea dreptului de acces se face o singură dată, la
deschiderea fişierului. Toate celelalte operaţii sunt apoi mult mai rapide.1
Funcţia open() poate crea noi fişiere, ca şi creat().

16. Directoare
Sistemul de directoare are ca misiune de a ordona fişierele într-o ierarhie şi de a
le da nume care să fie convenabile utilizatorilor. Un director este un obiect al cărui
``conţinut'' este format din nume de fişiere şi din nume de alte directoare. Directoarele
mai conţin pentru fiecare nume şi numărul inodului care-i corespunde (articolul citat în
introducere vorbeşte mai mult despre asta). Presupunem că cititorului îi este cunoscută
noţiunea de ``cărare'' (path) care descrie un lanţ de directoare care duce la un fişier (de
exemplu /usr/home/mihaib/data/articles/2fs.tex este cărarea care duce la fişierul în care
tocmai scriu acest articol în această clipă.
Să trecem rapid în revistă în tabelul 4 operaţiile (luate din tabelul 1) care lucrează
cu directoare.

Table 4: Apeluri de sistem pentru directoare

Apel Sintaxa Descriere


Coala

Mod Coala N Document Semnat Data 15


chdir chdir(path) schimbă directorul curent
pentru acest proces
chroot chroot(path) schimbă directorul
rădăcină pentru acest
getdents getdents(fd, memorie, lungime) citeşte conţinutul
directorului în memorie
creat creat(path, drepturi) crează un fişier cu numele
indicat
mkdir mkdir(path, drepturi) fă un nou director cu
numele indicat
rmdir rmdir(path) şterge un director care nu
conţine fişiere
link link(path1, path2) dă încă un nume (path2)
fişierului cu numele path1
unlink unlink(path) şterge un nume al unui
rename rename(path1, path2) schimbă numele unui fişier
din path1 în path2
symlink symlink(path1, path2) crează un nou nume pentru
un fişier
readlink readlink(path, memorie, lungime) citeşte la cine merge o
legătură simbolică

Funcţia creat() apare din nou, pentru că schimbă conţinutul unui director atunci
cînd crează un fişier. mkdir() este echivalentul lui creat(), doar că face un nou director.
Un fişier în Unix poate avea mai multe nume. Primul nume apare cînd fişierul
este creat, următoarele se pot adăuga cu funcţia link(). Un nume al unui fişier poate fi
schimbat cu rename(), sau poate fi şters cu unlink(). rmdir() este echivalentul lui
unlink() pentru directoare.
În fine, în Unix există o clasă specială de fişiere numite legături simbolice
(symbolic links), al căror conţinut este numele altui fişier (o cărare). Aceste fişiere se
crează cu apelul symlink().
Dacă fişierul A este o legătură simbolică la B, atunci orice acces la A este
transformat de nucleu într-un acces la B. Pentru că un read() din fişierul A ne arată
automat conţinutul fişierului B, avem la dispoziţie funcţia specială, readlink(), cu care
putem vedea la ce fişier punctează o legătură simbolică.
Legăturile simbolice sunt foarte asemănătoare cu numele fişierelor, dar există o
serie de diferenţe subtile pe care le vom discuta altă dată. Ele au fost create pentru că,
deşi un fişier poate avea mai multe nume create cu link(), ele toate trebuie să se afle pe
acelaşi disc. Pentru a putea avea nume alternative pentru un fişier pe alte discuri decît
cel pe care se află fişierul, se folosesc legăturile simbolice.
URL-urile (Universal Resource Locators), cu care în Internet se indică paginile de web,
sunt o extensie a noţiunii de legătură simbolică: pe lîngă numele unui fişier ele indică şi
Coala

Mod Coala N Document Semnat Data 16


numele unui calculator plus eventual numele unui protocol, astfel:

http:// www.cs.cmu.edu /afs/cs/user/mihaib/


protocolul de
calculatorul cărarea
comunicaţii
Facem acum o observaţie banală, dar crucială: pentru a putea face orice
operaţie cu un fişier trebuie să cunoaştem o cărare la el (pot exista mai multe, pentru
că un fişier poate avea mai multe nume); singura metodă pentru a specifica un fişier
este printr-o cărare!
De aici rezultă imediat o serie de consecinţe foarte importante. Una dintre ele este
că un fişier care nu are nume nu este accesibil nicicum. Din cauza asta în Unix fişierele
nu pot fi şterse (nu există nici un apel de sistem pentru asta! verificaţi); ele dispar atunci
cînd ultimul lor nume este şters cu unlink().
Dar cele mai importante consecinţe vor apărea abia atunci cînd vom vorbi despre
protecţie. Înainte de asta trebuie însă să vedem cum se manipulează atributele.

17. Operaţiile cu atribute


Toate atributele unui fişier (mai puţin numele) sunt ţinute de Unix în inod.
(Numele sunt ţinute în directoare.) În tabela 5 sunt trecute operaţiile puse la dispoziţie
de către nucleu pentru a opera cu atribute.

Table 5: Apeluri de sistem pentru manipularea atributelor.

Apel Sintaxa Descriere


verifică dacă fişierul path
access access(path, drepturi) poate fi accesat în modul
indicat (de către procesul
curent)
indică drepturile de acces
umask umask(masca) pe care le vor avea fişierele
create de acum încolo (cu
open, creat, mkdir)
chmod chmod(path, drepturi) schimbă drepturile de
acces la fişierul indicat
ca şi chmod, pe un fişier
fchmod fchmod(fd, drepturi)
deschis
chown chown(path, utilizator, grup) schimbă posesorul unui
fişier
fchown fchown(fd, utilizator, grup) ca şi chown

stat stat(path, memorie) citeşte toate atributele unui


fişier
fstat fstat(fd, memorie) ca şi stat
Coala

Mod Coala N Document Semnat Data 17


ca şi stat, doar că citeşte
lstat lstat(path, memorie) atributele unei legături
simbolice
``încuie'' sau descuie un
flock flock(fd, permisiuni) fişier (interzice -- pentru
sincronizare -- accesele
altor procese)
fcntl fcntl(fd, comanda, argumente) operaţii speciale...

Funcţia fcntl() (file control: controlul fişierelor) face o sumedenie de lucruri


diferite în funcţie de valoarea celui de-al doilea argument: află dacă fişierul e încuiat,
modifică modul de lucru cu fişierul (de exemplu poate aranja ca fiecare octet scris să
meargă imediat spre disc, fără să stea în cache), poate pune alte încuietori, etc. O funcţie
complicată care deocamdată nu ne interesează prea tare.
stat() citeşte într-o structură de date atributele fişierului.
Pentru secţiunea următoare ne interesează mai ales să ştim că următoarele sunt
atribute ale unui fişier:

Table 6: Atribute importante ale fişierelor.

Posesorul
Drepturi de acces
Tipul (director,

Funcţiile access(), umask(), [f]chmod() operează cu drepturile, funcţiile


[f]chown() cu posesorul.

18. Protecţie
Cum implementează sistemul de operare Unix protecţia accesului la fişiere?
În primul rînd trebuie să ne fie clar cine poate accesa fişierele. Fişierele sunt
accesate numai de procese (programele care sunt în curs de execuţie). Nu utilizatorii
lucrează cu fişiere2, ci programele lor. Fiecare program are o identitate moştenită de la
programul care a identificat utilizatorul cînd acesta a tastat parola. Pe toate programele
care s-au născut din programul căruia i-am tastat parola mea, scrie undeva ``ăsta e al lui
mihaib'' (numele meu de utilizator).
Atributul ``posesor'' al unui fişier este de aceeaşi natură. Cînd un proces ştampilat
``mihaib'' crează un fişier (cu open(), mknod(), mkdir() sau creat()), acel fişier capătă
aceeaşi ştampilă, care devine atributul ``posesor''. Comanda chown() poate fi folosită
pentru a schimba posesorul unui fişier.
Coala

Mod Coala N Document Semnat Data 18


În cele ce urmează simplificăm puţin discuţia restrîngînd atenţia la drepturile
``utilizatorilor''. După cum ştiţi Unix poate agrega utilizatori în grupuri, dar funcţionarea
sistemului de protecţie este asemănătoare pentru grupuri ca pentru indivizi.
Cum observam mai sus, orice comandă care operează asupra unui fişier trebuie să
manipuleze întîi o cărare la acel fişier (pentru a putea scrie într-un fişier, el trebuie întîi
deschis, şi atunci se indică prin cărare). Unix-ul clasic distinge doar trei tipuri de
operaţii pe fişiere: citire, scriere şi executare.
Regula de protecţie pentru accesul la un fişier în Unix este atunci foarte simplă:
Un proces poate opera asupra unui fişier indicat printr-o cărare dacă are
drept de inspecţie în toate directoarele din cărare, şi dacă are dreptul de a face
operaţia dorită asupra ultimei componente din cărare.

Observaţi un lucru foarte interesant: decizia dacă un proces are dreptul să facă ceva
cu un fişier depinde numai de drepturile procesului pe fiecare componentă a cărării.
Decizia nu depinde nicidecum de conţinutul fişierului, de pildă. Decizia nu depinde
(aproape) nicidecum de tipul fişierului.
Chiar dacă fişierul este un director, un fişier de date, un fişier special (vom vedea ce
sunt astea mai jos), sau o legătură simbolică, dreptul de acces se verifică în acelaşi fel
(pentru toate fişierele care compun cărarea):
 Se compară posesorul din inod cu posesorul procesului care vrea să facă operaţia;
 Se compară drepturile din inod-ul fişierului cu tipul operaţiei cerute.
Observaţi că datorită faptului că un fişier poate avea mai multe cărări, accesul pe
diferite cărări poate avea restricţii diferite pentru un acelaşi proces!
Lăsăm ca exerciţiu cititorului ilustrarea aplicaţiilor acestui mecanism de protecţie.
Exemplele abundă: directoarele fiecărui utilizator au drepturi mai mari pentru posesor,
fişierele executabile de către toţi utilizatorii nu pot fi modificate (decît de
administrator), (deci viruşii nu se pot propaga!), se pot folosi directoare publice pentru
fişiere temporare (/tmp), poşta electronică poate fi stocată în fişiere ordinare fără frică
de violare a secretului corespondenţei, serverele de comunicaţie în reţea (ex.: ftp, www)
lucrează pe o ierarhie de directoare izolată de cea principală a sistemului (cu chroot()3),
etc.

19. Abstracţia de fişier; operaţiile pe fişiere


Sa ne uităm încă odată la tabelul 3.
Observaţi că ceea ce un proces ştie despre conţinutul unui fişier este accesibil
numai prin funcţiile acestea: open(), close(), read(), write(), lseek() (celelalte funcţii
sunt mai puţin importante şi nu neapărat necesare; operaţiile lor principale ar putea fi
sintetizate din cele înşirate aici).
Această interfaţă este foarte generală, pentru că nu presupune nimic despre
organizarea internă a fişierelor. La o adică ne putem imagina aceste operaţii mergînd pe
orice ``container'' cu date. Aceste operaţii sunt o interfaţă abstractă pentru un depozit
de date.
Această putere de expresie a interfeţei a fost sesizată de proiectanţii Unix-ului, la
Coala

Mod Coala N Document Semnat Data 19


începutul anilor '70, şi este premeditată. În Unix o mulţime de alte obiecte pe lîngă
fişiere sunt accesate folosind aceste operaţii!

20. Ţevile cu nume


Unix oferă noţiunea de ``pipe'': o ţeavă între două procese. Există două feluri de
ţevi, dar acum ne vom ocupa doar de una dintre ele, de ``ţeava numită'' (named pipe).
Aceasta are un nume ca un fişier, dar se comportă oarecum diferit: datele pot fi citite o
singură dată; citirea ``consumă'' datele. Partea frumoasă este că o astfel de ţeavă poate fi
manipulată tot cu apelurile indicate mai sus... nimic din interfaţă nu obligă un fişier să
păstreze datele scrise!
O astfel de ţeavă se poate crea cu apelul de sistem mkfifo(path, drepturi);. Dacă
am creat un astfel de ``fişier'', toate celelalte operaţii pe el se efectuează cu aceleaşi
funcţii: open() deschide ţeava şi verifică drepturile de acces, close() o închide, write()
scrie în ţeavă (şi blochează scriitorul pînă apare un cititor), iar read() citeşte din ţeavă
(sau blochează cititorul pînă apare un scriitor). Apelul de sistem lseek() nu se poate
folosi cu astfel de fişiere.
Natura diferită a ţevii nu este vizibilă pentru procese, pentru că interfaţa este
aceeaşi. Această interfaţă este extrem de puternică.
Ca un divertisment, care nu are prea mare legătură cu subiectul articolului, vom
arăta cum se poate folosi o ``ţeavă numită'' pentru a depista pe un calculator legat în
Internet cine face finger ca să afle informaţii despre noi.
Ideea este că atunci cînd cineva face finger adresa_mea@cs.cmu.edu demonul
local de finger citeşte din directorul meu fişierul cu numele .plan. Dacă fac acest fişier o
ţeavă numită şi pun un proces să scrie în ţeavă, acest proces va fi blocat pînă cînd
cineva face un finger spre mine. Acest proces va fi deblocat de demonul de finger. Un
script shell ca cel următor face acest lucru:
cd
rm -f .plan
mknod .plan p # creaza teava
while /bin/true; do
echo "No plan" > .plan
netstat | grep finger >>ma-cauta
done

Comanda echo va fi blocată pînă apare un cititor. După ce apare un cititor


(demonul fingerd), se va executa imediat comanda netstat, care va arăta toate
conexiunile de reţea deschise în clipa aceea, inclusiv cea a demonului fingerd de pe
maşina locală cu programul finger de pe maşina de la distanţă. În fişierul ma-cauta se va
depune adresa maşinii de unde se face finger. (Mai mult de atît este ceva mai greu de
aflat.)

21. Perifericele în Unix: fişierele ``speciale''


Dar să ne întoarcem la drepturile noastre.
Am văzut că abstracţia de fişier poate îmbrăca mai multe obiecte: nu numai
Coala

Mod Coala N Document Semnat Data 20


fişiere, ci şi ţevi. Oare nu există şi alte creaturi care să poată fi manipulate prin această
interfaţă?
Ba da, ba da. O mulţime. De exemplu: toate perifericele.
În Unix toate perifericele conectate la calculator au un nume de fişier şi sunt
operate ca fişiere! Aceste fişiere sunt numite ``fişiere speciale'', şi există două mari
categorii: fişiere speciale de tip ``caracter'' şi fişiere de tip ``bloc''. Diferenţa între ele nu
ne interesează aici4.
Tot ceea ce e periferic în Unix: mouse-ul, tastatura şi ecranul (numite împreună
``consolă''), terminalele conectate şi modemurile, memoria video, discurile şi unităţile
de bandă, cdrom-ul şi placa audio, toate acestea sunt ascunse de Unix sub aceeaşi
abstracţie, asupra căreia se operează cu open(), close(), read(), write(), lseek() şi ioctl().
Singura funcţie nou-venită este ioctl(), care seamănă cu fcntl(), pe care am
prezentat-o mai sus. Diferenţa este că ioctl(), de la ``I/O control'' (controlul intrării şi
ieşirii) se foloseşte numai pentru fişiere speciale, iar fcntl() pentru fişiere ordinare.
Funcţia aceasta este o şmecherie care permite utilizatorilor să facă toate operaţiile pe
care nu le pot face cu celelalte funcţii. Cu alte cuvinte, nu toate perifericele se ``ascund''
bine sub abstracţia prezentată, şi atunci avem nevoie de o funcţie specială.
Deocamdată să lăsăm pe ioctl() la o parte şi să vedem mai multe despre fişierele
speciale.
În sistemele Unix tradiţionale toate fişierele speciale sunt strînse în directorul
/dev, de la ``devices'' (aparate). În sistemele moderne există o întreagă ierarhie de
directoare în directorul acesta: directoare pentru discuri, directoare pentru benzi, etc.
Iată o porţiune din directorul /dev de pe o staţie de lucru Sun cu SunOS 4.1.3 (fac
o selecţie; sunt peste 550 de fişiere!):
crw-rw-rw- 1 root 69, 0 May 6 17:55 audio
crw-rw-rw- 1 root 26, 0 May 6 17:55 bwone0
crw--w--w- 1 mihaib 0, 0 Oct 19 14:06 console
lrwxrwxrwx 1 root 9 May 6 17:37 modem -> /dev/ttya
crw-rw-rw- 1 root 11, 0 May 6 17:55 des
brw-rw-rw- 1 root 16, 0 May 6 17:51 fd0a
crw-rw-rw- 1 root 104, 0 May 6 17:55 lightpen
crw-rw-rw- 1 root 13, 0 May 6 17:51 mouse
crw------- 1 root 37, 40 May 6 17:51 nit
crw-rw-rw- 1 root 30, 0 May 6 17:55 rmt0
crw-rw-rw- 1 root 30, 1 May 6 17:55 rmt1
crw-r----- 1 root 17, 0 May 6 17:51 rsd0a
crw-r----- 1 root 17, 1 May 6 17:51 rsd0b
crw-rw-rw- 1 root 2, 0 Sep 25 11:25 tty
crw-rw-rw- 1 root 12, 0 Oct 19 14:44 ttya
crw-rw-rw- 1 root 12, 1 May 6 17:51 ttyb
^ ^^ ^
tipul major minor

Numele fişierelor speciale nu sunt prea bine standardizate; fiecare sistem va numi
Coala

Mod Coala N Document Semnat Data 21


un anumit periferic în alt fel. Tipul mai sus este ``c'' pentru fişiere de tip ``caracter'' şi
``b'' pentru fişiere de tip ``bloc''. Pe sistemul meu fişierele de mai sus corespund la
(tabela 7):

Table 7: Fişiere speciale.

audio placa de sunet


bwone0 placa grafică alb-negru (Black-and-White ONE)
console consola (tastatură, ecran)
des integratul care criptează DES (Data Encription
fd0a primul floppy disk
lightpe creionul optic
mouse şoarecul
nit placa de reţea (Network Interface Tap)
rmt0 banda nr. 0 (Remote Mag Tape)
rsd0a primul disc SCSI, partiţia A (Raw Scsi Disc 0)
ttya primul terminal (mai precis portul serial; TeleTYpe)

Faptul că fiecare periferic oferă o interfaţă de fişier are următoarele consecinţe:


 Programele lucrează cu perifericele exact ca şi cu fişierele (aceleaşi operaţii);
anumite programe nici nu trebuie să ştie cu ce anume lucrează;
 Protecţia accesului la periferice se face prin aceleaşi mecanisme (drepturi,
posesor).
Fireşte, ca şi ţevile, fişierele speciale nu există fizic pe disc; pe disc există doar
numele acestor fişiere precum şi atributele. ``Conţinutul'' acestor fişiere este ``calculat''
de nucleu. Vom reveni la acest lucru.
Să vedem în acţiune abstracţia de fişier în cazul perifericelor.
Dacă vă uitaţi cu atenţie mai sus veţi observa că ``fişierul'' console îi aparţine
utilizatorului mihaib (eu), şi nu lui root, ca toate celelalte. Asta pentru că atunci cînd eu
am făcut ``login'' la consolă, fişierul special care este consola mi-a fost trecut în posesie
mie de programul ``login''. În felul acesta, toate procesele lansate de mine, care au
``ştampila'' mihaib pe ele pot scrie şi citi de la consolă (un lucru foarte util)!
De asemenea veţi observa că drepturile pentru alţi utilizatori permit scrierea la
consolă! Acest lucru permite altor utilizatori să-mi trimită mesaje folosind comanda
write a shell-ului, a cărei implementare nu face altceva decît să deschidă fişierul
/dev/console şi să scrie mesajele.
Adesea se fac bancuri proaste pe un sistem pe care lucrează mai mulţi utilizatori:
unul găseşte un astfel de terminal al unui coleg permisiv şi aruncă o tonă de date spre el:
Coala

Mod Coala N Document Semnat Data 22


cat /usr/include/*.h >/dev/console. Pentru a nu permite aşa ceva, pot face chmod 600
/dev/console. (Pot face acelaşi lucru cu comanda mesg n.)
Iată deci cum sistemul de fişiere constrînge accesul la periferice şi comunicaţia între
procese. Iar acest lucru este ``pe gratis'': acelaşi mecanism care era folosit pentru fişiere
ordinare merge şi aici.
În general accesul la periferice este restrîns, pentru că altfel utilizatori răutăcioşi
ar putea cauza stricăciuni. Dacă aveţi drepturi de administrator pe o maşină puteţi citi
toate discurile direct, bloc cu bloc, direct ``din'' fişierele speciale. Pe maşina asta aş
putea cu od /dev/sd0a. Dacă aveţi un Linux şi vreţi să încercaţi, discurile se numesc de
obicei /dev/hd0_.
Şi aşa mai departe. Programele care arhivează pe bandă pur şi simplu deschid
fişierul /dev/rmt0 şi scriu apoi ce au de scris acolo. Serverul de ferestre X Windows
deschide (cu open()) fişierele speciale /dev/bwone0 şi /dev/mouse şi scrie, respectiv
citeşte de acolo. Aceste programe nu au nici o instrucţiune magică pentru a opera cu
benzi sau cu ecranul: ştiu doar să scrie şi să citească din ``fişiere'', şi în plus ştiu ce
semnificaţie are ``conţinutul'' fişierelor (adică valorile scrise) pentru hardware.
Cum funcţionează aceste ``fişiere''? Pentru implementarea fiecăruia din ele
nucleul conţine o cantitate impresionantă de ``soft'', numită ``driver'' (şofer?). Pe un
sistem Unix driverele pot lua mai mult de jumătate din codul întregului sistem de
operare!
Fiecare fişier special are printre atribute două valori, numite ``major device
number'' şi ``minor device number''. Acestea sunt cele două coloane de numere care
apar în listingul de mai sus.
Cînd nucleul este compilat, înauntru are un array mare de structuri care corespund
fiecărui driver. De exemplu căsuţa 0 din array corespunde driver-ului de consolă, căsuţa
17 discurilor iar căsuţa 13 mouse-ului. (Am citit numărul ``major'' din listing).
Aceasta este şi asocierea dintre numele de fişier şi programele care
implementează abstracţia de fişier: cînd un proces deschide fişierul /dev/console,
nucleul observă din atributele fişierului stocate în inod, că este vorba de un fişier special
cu major-ul 0, deci roagă driver-ul 0 să manipuleze toate operaţiile pe acel fişier. Acel
driver va face anumite acţiuni cînd se va scrie în fişier, care acţiuni vor duce la afişarea
de informaţii pe ecran. Cum se face acest lucru, depinde foarte tare de hardware-ul în
chestiune.
La ce foloseşte numărul minor? De exemplu sistemul de mai sus are două benzi:
rmt0 şi rmt1. Atunci, pentru că în hardware sunt identice, pentru ele există un singur
driver. Driver-ul va opera însă cu una sau alta din unităţile de bandă, în funcţie de
numărul minor al fişierului: scrierile la rmt0 vor merge pe o banda, iar cele la rmt1 la
cealaltă.
/------------------------->banda 1
/dev/rmt1 |
inod | | driver | | driver | | Array
|---------| | | consola | | banda | | de
| posesor | | |_________|__....___|___^_______|_...__| drivere
Coala

Mod Coala N Document Semnat Data 23


| drepturi| | 0 1 17/ 18
| ..... | | /
| major 17|----|--------------------------/
| minor 1|----/
| |
| tip=c |
|---------| |
|
In sistemul | In nucleu
de fisiere |
<-------|------>

Pentru ca schema să funcţioneze trebuie ca atributele (major-minor) ale fişierelor


speciale să fie corect alocate pentru a corespunde ordinii în care sunt driverele
compilate în nucleu. Administratorul de sistem este cel care crează noi fişiere speciale,
cu comanda mknod, şi trebuie să fie grijuliu să menţină o asociere corectă cînd crează
noi fişiere speciale (şi adaugă noi drivere în nucleu).

22. Pseudo-perifericele (pseudo-devices)


Observaţi că deja un periferic ``seamănă'' foarte puţin cu un fişier: nu poţi depune
date pe care apoi să le extragi în mouse, de pildă. Totuşi perifericul este un dispozitiv
care manipulează informaţie, deci interfaţa generică este potrivită.
Se poate merge şi mai departe cu ideile. La ce altceva se poate ``aplica'' această
interfaţă? Ce fel de funcţionalitate îmi mai poate da sistemul fără a introduce abstracţii
noi?
Foarte multe alte obiecte cu aceeaşi interfaţă pot fi construite. Pe lîngă fişierele
speciale care corespund unor periferice concrete, în directorul /dev mai există o mulţime
de alte fişiere speciale care corespund unor periferice virtuale, sau unor ``pseudo-
periferice''. Acestea sunt nişte aparate imaginare, sintetizate în întregime în software.
Iată cîteva:
crw------- 1 root 16, 0 May 6 17:51 klog
crw-r--r-- 1 root 3, 1 May 6 17:51 kmem
crw-r--r-- 1 root 3, 0 May 6 17:51 mem
crw-rw-rw- 1 root 3, 2 Oct 19 20:50 null
crw-rw-rw- 1 root 21, 0 Oct 19 20:51 ptyp0
crw-rw-rw- 1 root 21, 1 Oct 19 20:36 ptyp1
crw-rw-rw- 1 root 20, 0 Oct 19 20:51 ttyp0
crw-rw-rw- 1 root 20, 1 Oct 19 20:36 ttyp1
crw-rw-rw- 1 root 15, 0 Apr 7 1997 win0
crw-rw-rw- 1 root 15, 1 Apr 7 1997 win1
crw-rw-rw- 1 root 3, 12 May 6 17:51 zero

Ele corespund următoarelor funcţiuni:

Coala

Mod Coala N Document Semnat Data 24


Table 8: Fişiere speciale.

klog depozit pentru mesajele de eroare ale


kmem memoria virtuală vizibilă nucleului
mem memoria fizică a calculatorului
null ``canalul fără fund'' (sink)
ttyp0 terminal virtual 0; master
ptyp0 terminal virtual 0; sclav
win0 fereastra 0
zero şirul infinit de zerouri

De exemplu win0 reprezintă o fereastră de pe ecran; aceasta se comportă ca un


terminal în miniatură, dar nu există fizic; este o noţiune emulată software. Un pseudo-
periferic, deci.
/dev/mem este chiar o imagine directă a memoriei calculatorului. Citind astfel octetul
1000 din /dev/mem:
{
char c;
int i = open("/dev/mem", O_RDONLY);
lseek(i, 1000);
read(i, &c, 1);
close(i);
}

vom afla ce se află în memoria fizică a maşinii la adresa 1000! (Fireşte, presupunînd că
drepturile de acces ne permit acest lucru.)
Alte fişiere bizare: /dev/null este un fişier de lungime 0, în care orice se scrie se
pierde (nu are nici un efect). Este extrem de util într-o sumedenie de circumstanţe. De
pildă dacă nu vrem să vedem erorile care pot fi generate de o comandă, putem să rugăm
comanda să scrie aceste erori ``în'' fişierul /dev/null: ls -R /var/spool/ 2>/dev/null.
Încă odată: protecţia accesului la pseudo-periferice se face în acelaşi fel, de către
codul din sistemul de fişiere care caută în directoare.

23. Sistemul de fişiere /proc


Prezentăm aici o altă spectaculoasă extensie a noţiunii de fişier (sau mai precis o
altă construcţie care foloseşte interfaţa cu care se accesează fişierele): un sistem de
fişiere în care se află... procese!
Această interfaţă a fost propusă în 1991 pentru sistemul Unix de la AT&T,
System V, iniţial pentru a facilita depanarea, dar a evoluat într-o metodă generală de
interacţiune cu procesele care se execută pe un calculator.
Coala

Mod Coala N Document Semnat Data 25


Există o oarecare variabilitate în implementarea acestei construcţii, aşa că
exemplul pe care îl prezentăm ar putea diferi oarecum pe sisteme specifice.
Lucrurile stau cam aşa: există un director /proc, iar în acest director există cîte un
sub-director pentru fiecare proces care se execută pe sistem, numit ca identificatorul
numeric al procesului (adică procesul ``1'' are un director numit ``1''). În directorul
fiecărui proces se află mai multe ``fişiere'' care descriu procesul respectiv. Pentru un
proces putem avea următoarele fişiere:
status
informaţie despre starea procesului (posesori, memorie alocată, etc);
psinfo
informaţie folosită de comanda ps, pentru a descrie acest proces;
ctl
scriind în acest fişier anumite valori se poate influenţa comportarea procesului;
map
descrie harta memoriei virtuale a procesului; cum se traduce fiecare adresă virtuală
într-una fizică;
as
memoria virtuală alocată procesului.
etc.

Acest sistem de fişiere este folosit de debuggere: un debugger care vrea să


depaneze procesul 100 va deschide fişierul /proc/100/as şi va scrie la adresa dorită (cu
lseek(), write()) codul unui breakpoint!
Multe alte operaţii pot fi făcute pe fişiere în acest fel. Linux are în plus în /proc
pentru fiecare proces o listă a tuturor fişierelor pe care procesul le are deschise.
Protecţiile pe directoarele şi fişierele din /proc sunt puse în aşa fel încît
interacţiunile între procese independente sunt strict controlate. De exemplu directorul
care corespunde fiecărui proces aparţine utilizatorului care a lansat procesul.

24. Concluzie: programarea orientată pe obiecte


Faptul că putem folosi interfaţa read-write-open-close-lseek-ioctl pentru creaturi
atît de variate în constituţie, de la fişiere pînă la pseudo-periferice ne face să ne gîndim
dacă nu poate fi folosită ca un mijloc universal de acces la informaţie.
Această interfaţă derivă simultan o fenomenală putere din generalitatea ei, pentru
că orice tip de date poate fi văzut pînă la urmă ca o succesiune de octeţi, dar şi o
fenomenală slăbiciune, pentru că semnificaţia acestor octeţi trebuie stabilită prin alte
mijloace decît cele ale interfeţei. Ce înseamnă să
scriu un x ``în'' fişierul /dev/bwone0, asta numai cel care a scris driver-ul pentru placa
grafică poate şti (şi cel care a citit documentaţia, desigur).
Funcţia ioctl(), despre care n-am spus mare lucru în acest articol, este folosită
pentru a simula toate funcţiunile care nu se pot obţine cu uşurinţă doar cu funcţiile
citate. Un exemplu de acţiune care se obţine cu un ioctl() şi care este greu de
implementat doar cu celelalte funcţii: pentru un driver al unităţii de bandă există o
comandă ioctl() care îi spune să deruleze banda înapoi.
Coala

Mod Coala N Document Semnat Data 26


Varianta diametral opusă de proiectare este prezentă în interfaţa driver-elor de
``terminal'' din sistemele de operare Windows: o sumedenie de apeluri de sistem diferite
pentru fiecare operaţie grafică, de la desenatul unui cerc, la şters fereastra. Este greu de
arbitrat între cele două alternative. Lăsăm cititorul să gîndească la meritele fiecărei
scheme.
Revenind la interfaţa uniformă din Unix: în tehnologia orientată pe obiecte
această situaţie se rezumă astfel: avem o clasă de bază abstractă, care are ca metode
virtuale open(), close(), read(), write(), ioctl() şi lseek(). Fişierele, perifericele, pseudo-
perifericele şi descrierile proceselor sunt toate clase derivate din această clasă de bază.
Deşi sistemul de operare Unix tradiţional (şi chiar şi variantele moderne) este
scris în C, astfel de ``reminiscenţe'' ale programării orientate pe obiecte abundă. Sperăm
să putem vorbi în alte articole despre: variatele tipuri de sisteme de fişiere pe care Unix
le poate folosi (în Linux există cel puţin 10!), despre sistemul de memorie virtuală şi
despre STREAMS. Toate aceste construcţii folosesc aceeaşi tehnologie, de a manipula a
mulţime de obiecte diferite ca natură dar folosind o unică interfaţă.

1. Footnotes
... rapide.1
Dezavantajul este că o schimbare a drepturilor de acces nu are nici un efect pentru
procesele care au deschis anterior fişierul!
... siere2
Un utilizator poate ``accesa'' discul doar cu un ciocan.
...chroot()3
În Unix nu numai noţiunea de ``director curent'' este alta pentru fiecare proces, dar
fiecare proces are propriul lui ``director rădăcină''.
... aici4
Diferenţa este că cele bloc se pot accesa fizic numai în blocuri de informaţie de
mărime fixă, iar cu cele caracter se pot transfera cantităţi arbitrare de informaţie.
Altă diferenţă este că se pot plasa sisteme de fişiere decît pe periferice de tip bloc

25. Structura  şi  arhitectura  sistemului  UNIX


   
Sistemul de operare UNIX este un sistem multitasking şi multiuser destinat pentru
diverse tipuri de calculatoare (microcalculatoare, minicalculatoare,
supercalculatoare) şi pentru reţele puternice de calculatoare, fiind cel mai vechi
sistem de operare ce a rezistat şi s-a impus până azi.
           La ora actuală sistemul UNIX este singurul sistem de operare care
funcţionează simultan pe microcalculatoare şi supercalculatoare. Este practic singurul
sistem de operare pentru minicalculatoare şi staţii de lucru. Este sistemul de operare
care a stat la baza conceperii şi elaborarii

altor sisteme de operare performante, cel mai recent exemplu fiind sistemul de operare
Coala

Mod Coala N Document Semnat Data 27


Linux -primul sistem de operare free software (elaborat în 1992).
           Sistemul Unix este primul sistem care a inclus clasa de protocoale (set standard
de servicii pentru transmiterea de informaţii între calculatoare) TCP/IP ( Transmission
Control Protocol / Internet Protocol) utilizată astăzi de cea mai mare reţea de
calculatoare la nivel mondial: sistemul Internet, cu milioane de abonaţi pe toate
continentele. Unii utilizatori ai sistemului Internet trebuie să fie familiarizaţi cu
filosofia şi comenzile sistemului UNIX, deoarece multe servicii oferite utilizatorilor vor
fi mai eficiente dacă sunt cunoscute unele comenzi UNIX. 
 
           În prezent există mai multe implementări (variante) ale sistemului UNIX:
 
·      System V (licenţă Unix Support Group-AT&T);
·      Solaris (licenţă Sun Microsystems);
·      AIX (licenţă IBM, pentru calculatoare RISC   RS-6000);
·      ULTRIX , OSF  ( produs de firma DEC-Digital);
·      HP-UX ( produs de firma Hewlett-Packard);
·      Linux (free software-Linus Torvalds; Finlanda ).
 
           Sistemul UNIX lucrează în time-sharing fiind  constituit dintr-un nucleu (Kernel)
şi un număr foarte mare de utilitare accesibile prin intermediul interpretorului de
comenzi Shell ce reprezintă interfaţa dintre sistemul de operare şi utilizator:

Nucleul (Kernel) este un intermediar între interfaţa furnizată de apelurile sistem şi


echipamentele fizice din sistemul de calcul. Nucleul UNIX este partea rezidentă a
sistemului de operare care asigură funcţii de supervizare şi gestiune a resurselor
sistemului de calcul   (memorie internă, dispozitive I/O):
 
·      organizarea şi gestiunea memoriei;
·      organizarea şi gestiunea fişierelor;
·      execuţia şi gestiunea proceselor;
·      planificarea unităţii centrale (UC) între procese;
·      controlul şi gestiunea perifericelor;
·      protecţia datelor şi programelor.
 
            Eleganţa interfeţelor sistemului UNIX  şi calitatea remarcabilă a abstracţiilor pe
care le oferă utilizatorilor, au influenţat şi vor continua să influenţeze profund
arhitectura sistemelor de calcul. De asemenea, în ultima perioadă s-au adus noi facilităţi
pentru a lucra cu un număr mare de microprocesoare şi pentru a realiza integrarea
completă a aplicaţiilor Windows NT şi Novell Netware. Sistemele UNIX comerciale
sunt încă realizări impresionante, care oferă funcţionalităţi superioare sistemelor Linux
şi Windows NT.
 
Coala

Mod Coala N Document Semnat Data 28


 
26. Comentariu despre Supercomputing
 
           În anul 1998 a fost lansat pe piaţa de calculatoare Serverul de întreprindere HP
9000 model V2500 (produs al firmei Hewlett Packard) care se caracterizează prin
următoarele:
 
·      oferă cele mai puternice şi flexibile platforme UNIX pe 64 biţi, ce foloseşte
până la 2048 de procesoare moderne RISC  HP  PA-8500 de 440 MHz
superscalare, cu 1.5 Mb memorie Chache pe cip şi cu o performanţă în
execuţie de 1,76 Gigaflops;
·      oferă platformă pe 64 biţi bazată pe microprocesoare de 64 biţi, registrii şi
magistralele pe 64 biţi, cu dresarea memoriei pe 64 biţi şi cu acces DMA pe 64
biţi; sistemul de operare şi Kernel-ul este în intregime pe 64 biţi;
·      lucrează sub sistemul de operare HP-UX ce este o implementare pe 64 biţi
dezvoltată de firma Hewlett Packard special pentru sistemele de mainframe şi
care prezintă compatibilitate totală cu versiunile precedente de 32 şi 64 biţi,
putând executa fără recompilare toate produsele software de 64 şi 32 biţi;
·      oferă mediu de execuţie pentru cele mai complexe aplicaţii în timp real
pentru diverse domenii ale zilelor noastre:
                                          - OLTP (on-line transaction processing)
                                 - ERP ( entreprise resource planning)
                                 - luarea de decizii
- calcule complexe de inginerie şi modelări ştiinţifice
                                 - gestionarea marilor baze de date din domeniul ştiinţific,
financiar-
                                      bancar, economic, militar;
·      permite execuţia aplicaţiilor Java, o integrare completă a aplicaţiilor
Windows NT şi Novell Netware şi suport pentru utilizarea mediilor C/C++,
Fortran 90, Oracle Web.
Sistemul de operare UNIX este constituit din:
 
·      Nucleu (Kernel) - partea rezidentă;
·      Shell - interpretor de comenzi;
·      Utilitare - servicii accesibile prin intermediul interpretorului de comenzi.
 
            Interfaţa utilitarelor şi a aplicaţiilor utilizatorilor cu nucleul, se face prin
intermediul unui ansamblu de funcţii de sistem. Utilizatorul are trei nivele de acces la
aceste funcţii :
 
·      prin utilitare ( nivel extranucleu);
·      prin funcţii de bibliotecă standard a limbajului C/C++ (nivel intermediar);
·      prin directive sistem (nivel inferior).
 
 
Structura  sistemului  UNIX
Coala

Mod Coala N Document Semnat Data 29


Din figură se poate observa că nucleul este intermediarul între interfaţa furnizată
de apelurile de sistem şi echipamentele fizice. Nucleul realizează gestiunea fişierelor şi
memoriei, planificarea unităţii centrale între procese. Apelurile sistem definesc interfaţa
cu programatorul. Apelurile sistem pot fi grupate în trei categorii:
·      pentru prelucrarea fişierelor şi perifericelor;
·      pentru controlul execuţiei proceselor;
·      pentru prelucrarea informaţiei.
           Versiunile actuale de UNIX oferă pentru utilizator atât interfeţe de tip linie
de comandă, desemnată prin Shell -cele mai utilizate fiind sh (Bourne Shell, după
numele creatorului S.R. Bourne), ksh (Korn Shell), csh (C Shell)-, cât şi interfeţe
grafice moderne (GUI-Graphical User Interface).

Coala

Mod Coala N Document Semnat Data 30


Nucleul (Kernel) UNIX este constituit din două componente principale:
 
·      sistemul de gestiune a fişierelor;

·      sistemul de gestiune a proceselor.


 
            Funcţiile generale ale sistemului de gestiune a fişierelor sunt:
 
·      operatii cu fişiere (creare, citire, scriere, copiere, ştergere,
concatenare,etc.);
·      alocare de spaţiu dinamic pentru fişiere pe HD sau FD;
·      accesul la fişiere;
·      administrarea spaţiului liber pe HD sau FD;
·      schimbarea structurii sistemului de fişiere.
 
Funcţiile generale ale sistemului de gestiune a proceselor sunt:
 
·      trecerea proceselor prin diverse stări (creare, aşteptare, execuţie,
Coala

Mod Coala N Document Semnat Data 31


terminare);
·      planificarea proceselor pentru a avea acces la procesor;
·      comunicarea între procese;
·      sincronizarea proceselor.

O SCURTĂ ISTORIE A UNIX-ului


-- de la MULTICS la Linux --

Contents
 Conjunctura
 Faptele
 Un nou limbaj
 O nouă gazdă

 Propagarea
 Divergenţa
 Standardizarea
 Bariera sonică
 Războiul
 Decăderea
 Supravieţuirea?
 Încheiere
 Note Bibliografice
 Versiuni de UNIX
 Cronologie
 Standardul POSIX 1003
Orice informatician profesionist care s-a întîlnit cu UNIX odată s-a îndrăgostit cu
siguranţă de el. Motivele pasiunilor pe care le suscită constituie ele însele un subiect
despre care s-au scris sute de cărţi şi nu despre asta intenţionez să povestesc aici. Nu
despre ``de ce'' voi vorbi, ci mai curînd despre ``cum'' şi ``cînd''. Istoria genezei acestui
sistem de operare este ea însăşi plină de învăţăminte interesante.

27. Conjunctura
Putem coborîpe firul timpului pentru a regăsi rădăcinile UNIX pînă la zilele de
Coala

Mod Coala N Document Semnat Data 32


început ale calculatoarelor, prin anii '40-'50. Atunci lumea (de fapt ``selecta'' comunitate
a informaticienilor) încerca să construiască un set de ``scule'' care să mărească
productivitatea calculatoarelor, care pe atunci costau o grămadă de bani şi-şi petreceau
tare mult timp citind cartele sau facînd alte treburi de acelaşi gen -- plictisitoare şi mari
consumatoare de timp -- scule care vor fi sămînţa a ceea ce mai tîrziu se va numi
``Sistem de Operare''. Ar fi însă prea departe o astfel de întoarcere, deşi cu siguranţă nu
lipsită de interes.
Povestea începe cu adevarat prin 1962, cînd trei mari companii din domeniul
calculatoarelor din Statele Unite şi-au unit forţele pentru a da naştere unui monstru
software. MIT (Massachusets Institute of Technology -- o universitate de numele careia
sunt legate multe pietre de hotar din istoria calculatoarelor), Bell Laboratories, care pe
vremea aceea aparţinea de AT&T (American Telephone and Telegraph -- un colos al
telecomunicaţiilor) şi General Electric (atunci un important producător de calculatoare)
s-au decis să pună la bătaie nişte creiere, şi o grămadă de bani ca să facă un ``utilitar''
sofisticat. Acesta trebuia să permită folosirea unei capacităţi de calcul în comun de către
sute de utilizatori, cu un maximum de eficienţă şi securitate. Modelul la care aspirau era
cel al reţelei de electricitate: vroiau ca fiecare potenţial utilizator să aibă la dispoziţie un
fel de mufă la care să cupleze un terminal şi prin care să aibă acces instantaneu la toate
resursele de calcul ale sistemului. Vroiau sa aibă un singur calculator care să satisfacă
toate nevoile utilizatorilor din Boston. Proiectul s-a numit MULTICS, prescurtare de la
MULTiplexed Information and Computer Service -- serviciu multiplexat la informaţii şi
putere de calcul. Acesta este unul dintre cele mai răsunătoare eşecuri din istoria
informaticii mondiale.
Proiectul n-a ajuns la sfîrşit. Bell s-a retras după cîţiva ani şi cîteva milioane de
dolari cheltuiţi. General Electric a renunţat cu totul să mai lucreze în industria
calculatoarelor.
Motivele eşecului sunt multe. Unul dintre ele este puterea hardware-ului de
atunci. Ideea că peste douăzeci de ani un calculator de puterea celui pe care îl foloseau
va putea să fie vîndut cu numai cîteva mii de dolari drept un calculator personal nu era
bună nici ca SF. Un alt motiv, paradoxal, a fost o prea mare efervescenţă de idei.
Fiecare din cei implicaţi era un artizan, şi varietatea conceptelor a dus la o proastă
integrare a părţilor. Nu în ultimul rînd a contribuit limbajul folosit: MULTICS ar fi
trebuit să fie scris în PL/I, iar compilatorul era dezvoltat în acelaşi timp de o altă echipă,
care niciodată nu era în termen.
Retrospectiv vorbind e greu de spus că MULTICS a fost un mare eşec.
Majoritatea ideilor elaborate atunci sunt acum conceptele fundamentale din teoria
sistemelor de operare. Pe de altă parte MIT a realizat pînă la urmă o variantă funcţională
MULTICS care se foloseşte în cîteva locuri din lume.
MULTICS a fost prima dintre rădăcinile UNIX. O a doua a fost fenomenala
dezvoltare a minicalculatoarelor. De la nişte coloşi (foarte, foarte scumpi), o ``rasă'' de
calculatoare a evoluat spre dimensiuni mici şi preţuri accesibile. Tipică este familia PDP
a lui DEC (numit apoi Digital, cumpărat în 1998 de Compaq), care in 1961 vindea un
PDP-1 cu 4K de memorie RAM de cîte 18 biţi cu numai 120 000$ (de douăzeci de ori
mai ieftin decît un IBM 7094). La preţul ăsta PDP-urile se vindeau ca pîinea caldă. La
asta s-a adăugat şi politica DEC de a scoate o întreagă familie de calculatoare (PDP)
Coala

Mod Coala N Document Semnat Data 33


compatibile unele cu altele.

Faptele
Unul dintre participanţii la proiectul MULTICS din partea Bell Labs, Ken
Thomson, după nefericita experienţă, a găsit prin sediul firmei un PDP-7 pe care aparent
nimeni nu-l folosea. Şi-a propus să scrie pe el un program foarte interesant, şi anume un
joc de simulare a unor nave spaţiale şi a sistemului solar. Calculatorul avea tot hard-ul
necesar, dar soft de loc. Aşa că Thomson s-a apucat de lucru folosind întîi un cross-
assembler (un asamblor care se executa pe o maşină dar genera cod pentru alta).
După ce s-a plictisit să tot care benzi cu hîrtie găurita de la asamblor la PDP ca să
încarce programele s-a hotărît să-şi scrie un asamblor pentru PDP. Zis şi făcut.
Să scrii un joc însă nu e o treabă deloc banală. E o provocare pentru orice programator,
oricît de experimentat. Jocurile sunt programe extrem de complexe, care implică adesea
algoritmi sofisticaţi. Pe deasupra sunt greu de depanat şi testat. Ei, asta-i trebuia de fapt
şi lui Thomson: un mediu de dezvoltare, care să-i permită să scrie uşor şi eficient
programul. Atunci el şi-a folosit cunoştinţele acumulate cu prilejul MULTICS şi a scris,
împreună cu un coleg, Dennis Ritchie, o variantă mai sărăcuţă a acestuia pentru PDP.
Prima piesă a fost un sistem de fişiere, duipă care au urmat un subsistem pentru execuţia
proceselor şi apoi un interpretor de comenzi (shell). Colegii lui au numit rezultatul, ca
să rîdă de Thomson, UNICS (UNiplexed Information...). Uite însă că numele a prins,
deşi grafia a fost apoi schimbată in UNIX. Această primă variantă era scrisă in
assembler PDP-7.
Programul lui Thomson i-a fermecat pe colegii lui, programatori şi ei. Iată însă că
unul din departamentele hîrţogare ale Bell avea nevoie de nişte programe mai de
doamne-ajută pentru prelucrarea de texte. Sarcina a căzut tot pe umerii lui Thomson,
care a primit pentru aceasta un calculator mai mare şi mai frumos, numit PDP-11/20. Si
pentru că decît să scrie direct programele mai simplu i-ar fi fost să aibă un mediu de
programare asemănător pe noua maşină, s-a decis să ``porteze'' UNIX pe noua
arhitectură. Compatibile, compatibile, dar nu chiar de tot. Totul trebuia rescris de la cap,
in limbaj de asamblare PDP-11.

28. Un nou limbaj


Aici interesele lui s-au unit cu al altui grup de la Bell, care lucra la nişte limbaje
de programare care pot exprima algoritmi mai precis decît engleza şi mai fiabil decît
FORTRAN-ul. Ei elaborasera deja două noi limbaje care vor avea un rol important în
evoluţia ulterioară a domeniului. Acestea erau Algol şi BCPL. Thomson şi-a scris un
interpretor de B -- o versiune proprie de BCPL, dar acesta era mult prea lent ca să poată
fi folosit pentru programe mari. Denis Ritchie a fost însărcinat să scrie un compilator
pentru B. Ritchie era şi el un tip foarte inventiv, aşa ca a modificat masiv limbajul
pentru a-l face cit mai eficace fără a pierde însă portabilitatea. Programele nu trebuia să
facă prea multe presupuneri despre arhitectura maşinii pe care rulează, pentru a se
potrivi pe cît mai multe dintre ele. Dialectului creat de el, Ritchie i-a spus C.
C a fost limbajul potrivit la momentul potrivit. Este totodată simplu (sub 40 de
cuvinte rezervate!), flexibil, extrem de eficient (aproape de maşină!), structurat, rapid şi
portabil. De altfel, de atunci încoace a dominat categoric scena programării de sistem:
Coala

Mod Coala N Document Semnat Data 34


majoritatea sistemelor de operare, compilatoarelor şi utilitarelor existente în lume sunt
scrise în C. Succesul C a depăşit cu mult pe cel al Unix-ului. C este încă direct sau
indirect limbajul dominant în lume şi la ora actuală (indirect prin urmaşii săi C++ şi
Java).
Thomson şi Ritchie au rescris UNIX în C pentru noile maşini, şi apoi pe
succesoarele lor PDP-11/45 şi PDP-11/70. Acestea din urmă aveau mecanisme de
protecţie hardware şi au permis o implementare eficientă a mecanismelor de securitate
din UNIX.
Primele versiuni de Unix au fost folosite numai în interiorul Bell Laboratories.
Ediţia a treia, din februarie 1973 includea un compilator de C. În acelaşi an întregul
Unix a fost rescris în C. Thomson şi Ritchie au fost co-autori ai unui articol acum
faimos, numit ``The Unix Time-Sharing System'', publicat în Communications of the
ACM în iulie 1974.

29. nouă gazdă


Prima portare în afara familiei PDP a fost făcută pe un calculator Interdata 8/321.
Aceasta a fost ocazia de a constata că UNIX se baza cîteodată pe anumite particularităţi
ale maşinii pe care trebuia să ruleze (cum ar fi că adresele sunt pe 16 biţi, deci sunt
maximum 64K de memorie). O grămadă de timp a fost petrecută pentru a face UNIX
independent de asemenea idiosincrazii.
La început transpunerea pentru Interdata s-a desfăşurat lent, pentru că dezvoltarea
se făcea pe PDP, care se afla la etajul 5 al clădirii. Interdata era la etajul 1. O nouă
versiune însemna să compilezi la etajul 5, şi să cobori cu benzile la 1, să vezi dacă
merge. Dupa ce s-au uzat scările, a apărut un amplu interes pentru posibilitatea
conectării a două maşini printr-un mediu electronic. Acesta a fost începutul programelor
de comunicaţie în reţea de calculatoare din UNIX.
Sistemul era foarte uşor acum de portat, pentru ca 95 la sută din el era scris in C.
Dacă vroiai să-l muţi pe o maşină nouă, tot ce aveai de făcut era să scrii un compilator
de C pentru maşina aceea, iar un compilator e mult mai mic decît un întreg sistem de
operare. Asta nu era chiar totul, pentru că pe noua maşină trebuia să mai scrii un pic cod
în asamblare (intreruperi, porturi) şi să rescrii partea care se ocupa cu perifericele
(driverele pentru discuri, benzi, terminale). Oricum, treaba era mult mai simplă pentru
că tot ceea ce rămînea putea fi transportat neschimbat, iar asta e mare lucru! (Cîte din
programele scrise de dumneavoastra se compilează uşor pe un calculator complet diferit
de cel pe care le-aţi dezvoltat?)
Lucrurile nu s-au oprit aici! Steve Johnson de la Bell s-a apucat să studieze
compilatorul de C şi a constatat că o mare parte din compilare se face la fel independent
de maşina pentru care se generează codul. Ideea lui a fost să parametrizeze compilatorul
în aşa fel încît să-i furnizezi doar o descriere a maşinii pentru care trebuie să genereze
cod, iar grosul compilatorului să fie neschimbat. Acesta a fost compilatorul portabil de
C. Ani întregi compilatoarele de C de peste tot au fost bazate pe cel al lui Johnson, şi
aceasta a ajutat mult la răspîndirea UNIX-ului.
Versiunea cea mai importantă de Unix numită ``Versiunea 7'' a fost lansată în
ianuarie 1979; era primul sistem Unix cu adevărat portabil, mult mai robust şi mai
Coala

Mod Coala N Document Semnat Data 35


funcţional decît toate versiunile anterioare.

30. Propagarea
Poate nici unul din motivele de mai sus nu ar fi fost suficient pentru ca UNIX să
cunoască popularitatea de care se bucură azi. A mai fost ceva. Pe vremea aceea AT&T
era un monopol pe telecomunicaţii in SUA. Or americanii au nişte legi destul de severe
anti-trust (vedeţi şi procesul intentat de departamentul de justiţie împotriva companiei
Microsoft.) AT&T semnase cu DOJ (Department of Justice) o înţelegere prin care se
abţinea să activeze în industria calculatoarelor. De aceea n-a avut nimic împotrivă să
vîndă licenţa codului sursă UNIX, pentru preţuri modice, universităţilor. PDP-11 era,
printr-o fericită coicidenţă, foarte răspîndit în universităţi, dar sistemul de operare cu
care era livrat de DEC nu prea era pe placul utilizatorilor. UNIX a fost providenţial.
Cursurile erau ţinute pe UNIX, cu exemple luate din UNIX. Codul se putea studia la
seminare. Lumea era într-o efervescenţă nesfîrşită (un informatician obsedat este foarte
obsedat!). Fiecare inova ceva, fiecare depana ceva. Conferinţe, întruniri, comunicări. Un
profesor australian, John Lions, a scris pe marginea codului un comentariu de genul
celor pentru operele lui Shkespeare sau Chaucer. Versiunile se succedau versiunilor.
În 1975 sistemul deja rula în colţuri foarte îndepărtate ale lumii: universitatea
Berkeley din California, universitatea Ebraică din Ierusalim, universitatea South Wales
din Australia şi universitatea din Toronto din Canada. Studenţii absolvenţi au dus apoi
cu ei în industrie lecţiile învăţate cu UNIX, contribuind la răspîndirea lui în continuare.
AT&T încorpora adesea contribuţii din întreaga lume în codul sistemului (colaborare
care s-a deteriorat simţitor cînd AT&T a început mai tîrziu să comercializeze sistemul).
In 1984 Thomson şi Ritchie au primit prestigiosul premiu Turing al ACM
(Association for Computing Machinery) pentru lucrarea lor din 1974 care descria pentru
prima oară UNIX. ACM este o asociaţie profesională a calculatoriştilor din întreaga
lume, de un prestigiu rivalizînd cu IEEE.
Lucrurile păreau a fi într-o deplină concordie, dar nu a fost să rămînă aşa.

31. Divergenţa
În 1979 Microsoft (sic!) împreuna cu Santa Cruz Operations (SCO) au portat
sistemul Unix pentru PCuri cu 80x86, sub numele de XENIX, una dintre primele
variante comerciale ale sistemului.
Cam în acea perioadă, Thomson a avut un an sabatic (în sistemul american un
cercetător cu experienţă din industrie face o dată la cîţiva ani o pauză şi lucrează -- de
obicei -- în învăţămînt şi invers) la Universitatea Berkeley din California. Berkeley era
una dintre primele universităţi care avusese licenţa codului. Studenţii şi cercetătorii de
la Berkeley au dezvoltat un sistem propriu gen UNIX numit BSD (Berkeley Software
Distribution) şi care avea o mulţime de îmbunătăţiri faţă de System V.
Printre părţile tari BSD: un mecanism de memorie virtuală cu paginare, inspirat
din sistemul de operare VMS de la Digital, scris de Bill Joy şi Ozap Babaoglu, care
permitea executarea unor programe mai mari decît încăpeau în memorie, un sistem de
fişiere mult mai rapid (``The Fast File System''), compilatoare de LISP şi Pascal şi o
implementare a protocolului de comunicaţii pentru reţele de calculatoare numit TCP/IP,
Coala

Mod Coala N Document Semnat Data 36


care este de departe cel mai răspîndit astăzi, mult înafara lumii UNIX (este protocolul
folosit în reţeaua Internet), plus o grămadă de utilitare de toate felurile. Armata a
investit o grămadă de bani în cercetarea legată de Unix la Berkeley, prin agenţia
DARPA (Defense Advanced Research Projects Agency)2. Dezvoltarea lui BSD a fost
continuată la Berkeley pîna în 1993.
În 1982 Bill Joy a plecat de la Berkeley pentru a înfiinţa propria lui companie numită
Sun Microsystems, care a lansat o variantă proprie de Unix numită SunOS, bazată pe
BSD.
Tot în 1982 legea americana a spart AT&T în mai multe companii independente
şi concurente pentru a sfărîma monopolul asupra telecomunicaţiilor. AT&T a avut voie
să intre în arena calculatoarelor. Prima mişcare: a schimbat clauzele licenţei şi a făcut
din el un sistem comercial, pentru care trebuia să dai o grămadă de bani şi ale cărui
surse nu erau public disponibile. Prima variantă s-a numit System III, urmată curînd
după aceea de System V. SV (cum mai este numit) avea multe facilităţi şi inovaţii faţă
de BSD (memorie partajată, semafoare, o nouă arhitectură de memorie virtuală,
biblioteci partajate, STREAMS, etc.).
Spre sfîrşitul anilor '80 în lume existau două stiluri mari de UNIX: BSD şi System
V, care adesea nu prea se potriveau între ele. Acest lucru împiedica succesul comercial
al produselor, pentru că nu puteai garanta că programele vîndute vor funcţiona pe orice
variantă.
Marile firme de calculatoare au început să elaboreze propriile variante, cu tot
felul de adaosuri şi modificări. Unele dintre ele se bazează pe codul cumpărat de la
AT&T şi dezvoltat, altele sunt scrise de la cap la coadă, altele împrumută idei de la
BSD. Fiecare mare fabricant de calculatoare are propriul sau UNIX:
Firmă Unix
Hewlet Packard HP UX
IBM AIX
Sun
SunOS, Solaris
Microsystems
Digital Ultrix
Silicon Graphics IRIX
SCO SCO Unix

Numai pentru calculatoarele din familia PC există mai multe UNIXuri mititele:
XENIX, Coherent, 386BSD, Minix, Linux, etc.

32. Standardizarea
Datorită proliferării de variante nu mai era foarte clar ce e şi ce nu e Unix. Fiecare
fabricant adăuga propriile lui ``ornamente''. Sistemele bazate pe BSD şi SV erau diferite
într-o mulţime de aspecte fundamentale.
Din păcate încercarea de a standardiza Unix a dus la apariţia unui întreg set de
standarde incompatibile! În final 3 standarde diferite s-au bucurat de o acceptare largă:
Coala

Mod Coala N Document Semnat Data 37


SVID, POSIX şi X/Open. Standardele descriu numai ce fel de servicii trebuie să exporte
sistemul de operare, şi nu modul în care acestea sunt implementate.
Primul standard a fost făcut public de AT&T şi a fost numit System V Interface
Definition, sau SVID (1983). Acesta este practic o descriere precisă a tuturor
funcţionalităţilor pe care SV le oferea. AT&T a publicat şi o serie de teste pe care un
sistem trebuia să le treacă înainte de a putea fi numit ``Unix''.
Oficiul de standarde al IEEE (Asociaţia Inginerilor Elecronişti) a făcut un alt pas
spre reconciliere. Sute de experţi din industrie, universităţi şi guvern au format un
colectiv numit POSIX (Portable Operating System -- unIX).
Standardul elaborat de ei este publicat într-o serie de documente numite seria
POSIX 1003. Ele spun explicit cum trebuie să arate un sistem de operare ca să fie un
UNIX.
Spre deosebire de standardele obişnuite din calculatoare, acesta este deosebit de
bine scris, şi a extras din Sys V şi BSD intersecţia calităţilor iar nu reuniunea lor, plus
cîteva din lucrurile foarte bune din BSD. Prima versiune a fost publicată în 1990.
In plus limbajul C a fost standardizat de ANSI (American National Standard
Institute).
În fine, X/Open este o coaliţie de fabricanţi şi comercianţi de calculatoare care a
extins specificaţiile POSIX cu o grămadă de alte recomandări, de pildă despre sistemele
de ferestre sau managementul datelor. Recomandările lor sunt publicate sub numele
X/Open Portability Guide.

33. Bariera sonică


La mijlocul anilor '80, la universitatea Carnegie Mellon a început un proiect de
cercetare în arhitectura sistemelor de operare, folosind un nou sistem de operare numit
Mach3. Mach era un sistem revoluţionar, micro-nucleu, care oferea o serie foarte simplă
de servicii peste care se puteau construi ca din cărămizi de Lego oricare altele; de
exemplu Mach putea executa Unix ca pe un proces şi putea oferi toate serviciile Unix,
simultan cu ale unui alt sistem de operare. Mach nu avea nici un fel de restricţii de
licenţiere ca Unix, aşa că a devenit extrem de popular; multe sisteme comerciale se
bazează pe Mach 2.5: OSF/1, despre care vom vorbi mai jos, şi NextSTEP, al
companiei NEXT, fondată de Steve Jobs (cunoscut ca creator al primului calculator
Apple).
Sistemul de operare Windows NT (1992) de la Microsoft are o arhitectură extrem
de apropiată de Mach.

34. Războiul
În 1987 AT&T a cumpărat 20% din ac'tiunile Sun 'si a intrat într-un parteneriat
strîns cu Sun pentru a dezvolta noile versiuni de Unix. AT&T a anunţat că Sun se va
bucura de tratament preferenţial în ceea ce priveşte accesul la surse; Sun a renunţat
complet la nucleul SunOS, bazat pe BSD şi a îmbrăţişat cealaltă versiune, SV. AT&T şi
Sun au lansat împreună System V Release 4, sau SVR4. Sistemul de operare de la Sun
este numit de atunci încoace Solaris 2.x.
Coala

Mod Coala N Document Semnat Data 38


În reacţie, un grup de mari fabricanţi, cuprinzînd IBM, Digital, Hewlet Packard,
Apollo a fondat un consorţiu numit OSF (Open Software Foundation) care lupta
împotriva dominaţiei AT&T şi Sun în arena UNIX. OSF era finanţată de membrii
componenţi şi trebuia să dezvolte o gamă largă de software şi să extindă sistemul Unix
în alte direcţii; unele din părţile dezvoltate sunt: un sistem de ferestre grafice (X11,
dezvoltat la MIT), o interfaţă grafică (Motif), un mediu de calcul distribuit (DCE --
Distributed Computing Environment), un mediu de management distribuit al resurselor
(DME).
Primul sistem de operare al OSF a fost lansat de Digital s-a numit OSF/1 şi era
bazat pe o combinaţie de Mach, 4.3BSD şi anumite funcţiuni din nucleul de la IBM,
AIX. În plus oferea o sumedenie de avantaje tehnologice care nu se găseau în oferta de
la Sun/AT&T (suport pentru multiprocesoare, biblioteci dinamice, etc.)
Ca să se răzbune AT&T, Sun şi alţi comercianţi care se bazau pe SVR4 su făcut
un consorţiu numit Unix International (UI).

35. Decăderea
Cînd doi se ceartă al treilea cîştigă. O scădere economică la începutul anilor '90,
rapida evoluţie a performanţei PCurilor şi dominanţa crescîndă a sistemului de operare
Windows al Microsoft au oprit creşterea şi au ameninţat supravieţuirea Unix. UI a fost
desfiinţată în 1993 iar OSF şi-a îngustat simţitor anvergura planurilor. (Chiar şi sistemul
OSF/1 a fost redenumit în 1995 Digital Unix).
A urmat o serie rapidă de schimbări de proprietar pentru marca comercială Unix
şi drepturi asupra codului. În 1991 Novell a cumpărat o parte din drepturile asupra Unix
de la AT&T şi a lansat propria lui versiune numită UnixWare în 1992. În 1993 Novell a
cumparat ce mai rămăsese de la AT&T, iar Sun a cumpărat dreptul de a folosi cod de la
Novell. De curînd SCO a cumpărat în întregime Unix de la Novell.

36. Supravieţuirea?
Lupta marilor companii pentru dominanţă a dus aproape la pieirea Unix. Dar un
contracurent foarte spectaculos şi-a făcut la apariţia la început pe nesimţite, dar apoi cu
din ce în ce mai multă forţă.
Lucrurile au pornit de la un informatician american care lucrează la universitatea
``Frei'' din Amsterdam, Andrew Tanenbaum. În 1987 el a publicat codul unui mic
sistem de operare, care pe dinafară seamănă cu UNIX, deşi pe dinauntru este complet
diferit (într-un stil micro-nucleu, ca Mach). Sistemul lui Tanenbaum se numea MINIX
şi putea fi folosit fără nici un fel de plată în scopuri academice, dar cu restricţii de
copiere, modificare şi distribuire. Codul merge pe o varietate de calculatoare şi este
excelent comentat. (O a doua ediţie a cărţii şi MINIX 2.0 au fost publicate în 1997.)
Comunitatea utilizatorilor MINIX se bucura de o creştere constantă cînd, în 1992,
un student finlandez în vîrstă de 22 de ani, Linus Torvalds, după lectura cărţii în care
Tanenbaum dă sursele sistemului lui, modifică iniţial MINIX, scrie un sistem pentru PC
cu 80386, şi îl face ``free software'', adică fără restricţii de copiere şi distribuire. Faptul
că era ceva mai performant, datorită design-ului tradiţional, a dus la o răspîndire
explozivă a sistemului, care are la ora actuală milioane de utilizatori în întreaga lume.
Coala

Mod Coala N Document Semnat Data 39


La versiunea actuală de Linux (2.1.10x) au pus umărul mii de programatori
pasionaţi din întreaga lume. Fiecare a găsit un bug, a scris un utilitar, a scris o
documentaţie. În aceste condiţii codul Linux este de foarte bună calitate (eficient şi fără
bug-uri grave) rivalizînd şi surclasînd implementări de firmă. În plus este absolut
gratuit.
Colaborarea aceasta a fost posibilă datorită dezvoltării extraordinare a reţelelor de
calculatoare. La crearea produsului final au contribuit mii de oameni care nu s-au
întîlnit niciodată! Lipsa restricţiilor şi disponibilitatea codului sursă face Linux un
candidat ideal pentru cercetare şi dezvoltare. La ora aceasta Linux este considerat de
analişti singurul sistem de operare care poate oferi o alternativă solidă dominaţiei totale
Microsoft. Cele mai mari firme de calculatoare renunţă încetul cu încetul la variantele
lor de Unix speriate de creşterea rapidă a Windows NT. Deşi Windows NT este încă un
sistem relativ imatur faţă de Unix, forţa comercială a Microsoft precum şi
compatibilitatea cu alte sisteme Windows, care domină 95% din pia't'a sunt ni'ste
adversari de temut.
Pentru comparaţie, iată dimensiunile nucleelor în linii de cod-sursă:

Nucleu Linii
Linux 1 milion
Solaris 11 milioane
Windows
40 milioane
NT
Pe de altă parte Linux se bucură de o creştere constantă, sub directa supervizare a
autorului său, Linus, care acum lucrează la o companie nou înfiinţată în California.
Linux este pe departe cel mai portat sistem de operare din istorie, funcţionînd pe o gamă
extrem de largă de calculatorare şi staţii de lucru, şi pentru care din ce în ce mai multe
companii lansează software.

37. Încheiere
Sistemele Unix comerciale sunt încă nişte realizări impresionante, care oferă
funcţionalităţi superioare Linux sau NT.
Unii analişti cred că versiunile de Unix vor dispărea încet din arena jucătorilor
``grei'' economici; ultimul supravieţuitor comercial pronosticat fiind Sun. Mulţi pariază
pe o luptă Linux/NT. Ce se va întîmpla însă numai un profet ar putea spune. Oricum,
deşi substanţial sub cifra de afaceri a lui Microsoft, sistemele Unix continuă să
reprezinte o piaţă de mai multe zeci de miliarde de dolari.
La ora actuală UNIX este singurul sistem de operare care funcţionează simultan
pe microcalculatoare şi supercalculatoare. Este practic singurul sistem de operare pentru
minicalculatoare şi staţii de lucru. TCP/IP este protocolul folosit pe cea mai mare reţea
de calculatoare din lume: Internet, cu sute milioane de abonaţi pe toate continentele.
Eleganţa interfeţelor sale şi calitatea remarcabilă a abstracţiilor pe care le oferă
utilizatorilor au influenţat şi vor continua să influenţeze profund arhitectura sistemelor
de calcul.
Să ne amintim că totul a început de la un joc.
Coala

Mod Coala N Document Semnat Data 40


38. Note Bibliografice
Informaţiile din acest text sunt extrase dintr-o multitudine de surse. Iată aici unele
dintre ele:
 Andrew S. Tanenbaum, ``Modern Operating Systems'', Prentice Hall, 1995.
 Uresh Vahalia, ``Unix Internals'', Prentica Hall, 1995.
 Thomson, K., Ritchie, D. ``The UNIX Time-Sharing System'', Communications
of the ACM, vol 17, no 7, iulie 1974.

39. Versiuni de UNIX

Nume Bazat pe Fabricant


AIX SV IBM
A/UX SV Apple
BOS SV Bull
University of California at Berkeley
BSD BSD
(UCB)
Chorus SV Chorus
Coherent SV Mark Williams Company
EP/IX POSIX Control Data Corporation
FreeBSD BSD UCB
GNU
Mach Free Software Foundation
Hurd
SV+BS
HP-UX Hewlet Packard
D
IRIX SV Silicon Graphics
Linux -- Linus Torvalds + hackeri
Tanenbaum (Vrije Universitet
Minix clone SV
Amsterdam)
Net/2 BSD UCB
NEWS-OS ? Sony
QNX ? Quantum Software
OSF/1 Mach DEC, Open Software Foundation
Plan 9 - AT&T
SCO
SV SCO
Xenix
SCO Unix SV SCO
Solaris SV Sun Microsystems
SunOs BSD Sun Microsystems
Ultrix BSD DEC
Coala

Mod Coala N Document Semnat Data 41


UNICOS SV Cray
UnixWare SV Novell
UTEK ? Tektronix
Xenix SV Microsoft
Cronologie

1968 Proiectul Multics


1969 Unics pentru PDP-7, Bell Labs, AT&T
1971 Unix versiunea 1, asamblor PDP11/20
1974 Unix versiuna 4, C
1975 Unix versiunea 6, foarte răspîndit
1978 2.x Berkeley Software Distribution (BSD)
1978 3BSD, memorie virtuală
1979 Unix V7 ``ultimul Unix adevărat''
1980 4.0BSD
1982 System III, Unix comercial de la AT&T
1982 Fondat Sun Microsystems
1983 System V
1983 4.2BSD, TCP/IP
System V Release (SVR)2; publicată SV Interface Definition
1984
SVID
1984 X/Open, consorţiu de comercianţi Unix
1985 SVID1, SVR2
1986 SVR3, SVID2
1986 4.3BSD
1986 Mach
1987 X/Open Portability Guide 2 publicat
1987 Alianţă AT&T - Sun
1988 SVR4, amestecă SV, BSD, SunOS
1988 Se fondează OSF
1989 X/Open Portability Guide 3
1991 OSF/1 bazat pe SVR2; micronucleu Mach2.5
1992 Linux e creat
1992 X/Open Portability Guide 4
1992 Windows NT 1.0
1993 4.4BSD; dezvoltarea Unix la Berkeley încetează
1993 Novell cumpără Unix System Laboratories
Coala

Mod Coala N Document Semnat Data 42


1993 Novell vinde dreptul pentru marca UNIX lui X/Open
1995 Digital OSF/1
1996 GNU Hurd alfa lansat
1998 Solaris 2.6
1998 Windows NT 5.0 (amînat)
Standardul POSIX 1003

1003.1 funcţii de bibliotecă, apeluri de sistem


1003.2 shell-ul şi utilitarele
1003.3 metode de testare
1003.4 timp real
1003.5 limbajul Ada pentru Unix
1003.6 securitatea
1003.7 administraţia sistemului
1003.8 accesul la fişiere
1003.9 Limbajul FORTRAN pentru Unix
1003.10 super-calculatoare
1003.12 interfeţele independente de protocol
1003.13 real-time profiles
interfeţele pentru supercalculatoare - batch
1003.15
processing
1003.16 limbajul C
1003.17 servicii de directoare
1003.18 POSIX standardized profile
1003.19 FORTRAN 90

2. Footnotes
... 8/321
Investigaţii istorice au arătat că prima portare a fost de fapt făcută la universitatea
Wollongong din Australia, urmată la scurtă durată de o portare făcută de Bell Labs.
... Agency)2
O mare parte din cercetarea tehnologică în Statele Unite este sposorizată de
DARPA.
... Mach3
Ernst Mach este un mare fizician din secolul 20; 1 Mach este şi unitatea de măsură
a vitezei egală cu viteza sunetului; de aici şi titlul acestei secţiuni.

Coala

Mod Coala N Document Semnat Data 43


BIBLIOGRAFIE

Coala

Mod Coala N Document Semnat Data 44


RECENZIE

Coala

Mod Coala N Document Semnat Data 45

S-ar putea să vă placă și