Cuprins
1 Elemente de
interfaţă exterioară Unix
1.1 Probleme
generale şi primele comenzi
1.1.1 Structura
unei comenzi, evitări şi specificări generice
1.1.3 Specificare
īn structura de directoare
1.1.4.3 Terminarea
unei sesiuni de lucru.
1.2.1 Comenzi
de manipulare a directoarelor şi fişierelor
1.2.1.1 Afişarea
numelui directorului curent
1.2.1.2 Listarea
conţinutului unui director
1.2.1.3 Schimbarea
directorului curent
1.2.1.4 Afişarea
unui fişier la ieşirea standard
1.2.1.5 Afişarea
unui īnceput sau a unui sfārşit de fişier
1.2.1.6 Compararea
a două fişiere
1.2.1.7 Determinarea
(aproximativă) a tipurilor fişierelor
1.2.1.11 Comanda
de mutare (redenumire) a fişierelor
1.2.1.12 Ştergeri
de fişiere sau de directoare
1.3 Comunicarea
īntre utilizatori
1.3.1 Comunicarea
on‑line īntre utilizatori
1.3.4 Lansarea
la termen a unui program
2 Shell
şi programarea īn shell
2.1 Interpretoare
de comenzi shell
2.1.1 Principalele
interpretoare de comenzi shell
2.1.2 Lansarea
īn execuţie a shell-ului
2.1.3 Funcţionarea
unui interpretor de comenzi shell
2.2.1 Morfologia
şi sintaxa limbajului sh
2.2.1.1 Gramatica
limbajului sh
2.2.1.2 Un
exemplu de fişier de comenzi
2.2.2 Comenzi
simple şi succesiuni de comenzi
2.2.2.1 Precizări
privind semantica lexicului sh
2.2.2.2 Gruparea
comenzilor pe o linie
2.2.2.3 Fişierele
standard ale unei comenzi. Redirectarea, suprapunerea şi conectarea
acestora
2.2.3 Variabile
shell şi mecanisme de substituţie
2.2.3.1 Substituţie
cu ieşire standard
2.2.3.2 Variabile
shell şi substituţia cu valorile lor
2.2.3.3 Variabile
shell predefinite (variabile de mediu)
2.2.3.4 Referirea
la argumentele din linia de comandă
2.2.4 Comenzi Unix
utile īn contextul programării shell
2.2.5 Structuri
de control alternative shell
2.2.6 Structuri
de control repetitive shell
2.2.6.3 true,
false, break, continue
2.2.7 Tratarea
liniei de comandă
2.3.1 Configurări
iniţiale ale shell-urilor
2.3.1.1 Fişiere
de iniţializare sh şi bash
2.3.1.3 Personalizări
utile bash
2.3.2.1 O
aplicaţie de supraveghere
2.3.2.3 Reunirea
fişierelor tipăribile īntr-un singur fişier: pall
2.3.2.4 Editări
succesive de programe sh urmate de compilare
2.3.2.5 Căutare
şir īntr-o structură de fişiere
2.3.2.6 Afişare
arbore de fişiere
3.1.2 Descendenţa
şi relaţiile dintre diverse SO Unix
3.1.3.2 Biblioteca
C de la GNU
3.2 Structura
sistemului de operare Unix
3.2.1 Caracteristici,
entităţi participante, contexte de lucru
3.2.3 Ce sunt
apelurile sistem?
3.2.3.1 Apeluri
sistem Unix şi apeluri API
3.2.3.2 Un
exemplu de apel sistem īn diverse variante
3.2.3.3 Trecerea
la modul de lucru nucleu pe arhitectura Intel
4.1 Structura
arborescentă şi legături suplimentare
4.1.1 Tipuri
de fişiere şi sisteme de fişiere
4.1.2 Legături
hard şi legături simbolice
4.1.4 Protecţia
fişierelor Unix
4.1.4.2 Drepturi
implicite: umask
4.1.4.3 Drepturi
de lansare, drepturi program executabil, biţii setuid şi setgid
4.1.5 Principalele
directoare ale unui sistem de fişiere Unix
4.2 Structura
internă a discului Unix
4.2.3 Schema de alocare a blocurilor disc
pentru un fişier
4.2.4 Accesul
proceselor la fişiere
4.3 Apeluri sistem pentru lucrul cu fişiere
4.3.4 Apelurile
sistem read şi write
4.3.6 Apelurile
sistem dup şi dup2
4.4.1 Manevrarea
fişierelor īn sistemul de fişiere
4.4.2 Creat,
truncate, readdir
4.4.3 Un
exemplu: obţinerea tipului de fişier prin apelul sistem stat
4.5.8 Select
şi seturi de descriptori
4.6.3 Blocarea
conciliantă prin fcntl
4.6.4 Blocare
prin lockf şi flock
5.1 Formatul
ELF al unui fişier executabil Unix
5.2.2 Apelurile
sistem de bază pentru gestiunea proceselor
5.2.2.1 Crearea
proceselor Unix. Apelul sistem fork()
5.2.2.2 Execuţia
unui program extern; apelurile sistem exec*()
5.2.2.3 Exemple
simple de utilizare exec şi fork.
5.2.2.4 Ce
se moşteneşte din context după fork şi exec*?
5.2.2.5 Apelurile
sistem exit(), wait() şi waitpid()
5.2.3 Stările
unui proces Unix şi tranziţia īntre stări
5.2.4.1 Simularea
apariţiei unor procese zombie
5.2.4.2 Evitarea
proceselor zombie; stilul System V şi stilul BSD
5.2.5 Procese
remarcabile şi daemoni
5.2.5.1 Procesele
de la īncărcare (bootare) la acţiunile shell
5.2.5.3 Stările
sistemului de operare Unix
5.2.5.5 Principalele
procese create la īncărcare
5.2.6 Alte
apeluri sistem pentru lucrul cu procese
5.3 Comunicatii
intre procese - pipe şi FIFO (pipe cu nume)
5.3.1.1 Un
contraexemplu remarcabil
5.3.1.2 Comunicarea
īntre procese
5.3.1.3 Specificul
comunicaţiei īntre procese prin flux de octeţi
5.3.1.4 Un
exemplu de problemă: tipćrirea de propoziţii cāte una pe linie
5.3.2.1 Mecanismul
pipe sub Unix
5.3.2.2 Exemplu:
corectarea sumei a 4 numere
5.3.2.3 Exemplu:
propoziţii una pe linie
5.3.3.2 Exemplu:
captarea rezumatului ls -l
5.3.3.3 Exemplu:
afişarea variabilelor de mediu īn ordine alfabetică
5.3.4.1 Conceptul
de FIFO pipe cu nume
5.3.4.2 Exemplu:
propoziţii pe o linie prin FIFO
5.3.4.3 Programe
de urmărire a comportării FIFO
5.3.4.4 Client
/ server prin FIFO
6 Fişiere de comenzi Ms-Dos
şi extensii Windows
6.1 Comenzi utile īn contextul fişierelor de
comenzi MS-DOS
6.1.1 Comenzi
pentru lucrul cu discul
6.1.2 Comenzi
pentru lucrul cu directoare
6.1.3 Comenzi
pentru lucrul cu fişiere
6.1.5 Exemple
de fişiere de comenzi MS_DOS
6.2.1 Instrucţiunea
(comanda) compusă.
6.2.2 Extensii
ale directivei FOR
6.2.3 Extensii
ale directivei SET şi ale gestionării variabilelor de mediu.
6.2.4 Evaluarea
īntārziată a variabilelor de mediu.
6.2.5 Extensii
ale directivei IF.
6.2.5.2 Operatori
de comparare suplimentari.
6.2.6.1 Extensii
ale directivei SHIFT.
6.2.6.2 Accesarea şirului de parametri din linia de comandă.
6.2.6.3 Extensii
ale directivei CALL.
6.2.6.4 Extensii
ale directivei GOTO.
6.2.6.5 Extensii
ale comenzii MD.
6.2.7 Exemple
de fişiere de comenzi cu extensii Windows
7 Arhitectura
sistemului de operare Windows
7.1 Versiuni Windows argumente pro şi contra
7.1.1 Diferenţe
īntre Windows familia NT şi familia Windows 9X
7.1.2 Caracteristicile
principale ale seriei NT
7.1.3 Nivele
de protecţie: Kernel Space vs User Space
7.2.1 Arhitectura
internă a nucleului Windows
7.2.1.4 Microkernel,
drivere şi HAL
7.2.2 Subsistemele
oferite de sistemul de operare Windows.
7.2.2.1 Caracteristicile
subsistemelor Win32, POSIX şi OS/2
7.2.2.2 Procesele
de bază ale sistemului de operare.
7.3 Elemente de acces la fişiere sub Windows
7.3.1 Funcţii
Win32 API pentru lucru cu fişiere.
7.3.1.3 Scriere
īntr-un fişier
7.3.1.4 Citire
dintr-un fişier
7.3.2 Blocare
de fişiere īn Windows la nivel zonă de date
7.3.2.1 Funcţiile
folosite la blocare
7.4 Procese Window, comunicare īntre procese
7.4.1.1 Acţiunile
componentelor sistem
7.4.1.2 Crearea
unui proces Windows
7.4.1.3 Terminarea
unui proces Windows
7.4.2.2 Pipe
cu nume sub windows
7.4.2.3 Un
exemplu de comunicare prin pipe
7.5 Structuri
interne ale sistemelor de fişiere Windows şi DOS
7.5.1.3 Structura
directorilor
7.5.2 Sistemul
de fisiere NTFS/Windows
7.5.2.1 Structura
internă a discului NTFS
7.5.2.2 Structura
Master File Table
7.5.2.3 Structura
şi alocarea spaţiului la un disc logic
7.5.2.4 Atributele
unui fişier
8 Sisteme
de operare prezentare generală.
8.1 Tipuri de sisteme de operare (SO);
clasificări
8.1.1 Clasificare
după gradul de partajabilitate a resurselor
8.1.2 Clasificare
după tipurile de interacţiuni permise
8.1.3 Clasificare după organizarea internă a programelor
ce compun SO.
8.2 Structura si funcţiile unui sistem de
operare
8.2.1 Stările unui proces şi fazele unui program
8.2.2 Structura generală a unui sistem de operare
8.3 Incărcarea
(lansarea īn execuţie) a unui sistem de operare
9 Teoria generală a sistemelor de operare
9.1.2 Concurenţa
īntre procese
9.1.2.1 Secţiune
critică; resursă critică; excludere mutuală.
9.1.2.3 Problema
producătorului şi a consumatorului.
9.1.2.4 Regiuni
critice condiţionate.
9.1.2.5 Problema
citirilor şi a scrierilor.
9.1.3.4 Evitarea
(prevenirea apariţiei) impasului.
9.1.3.5 Alocarea
controlată (conservativă) de resurse; algoritmul bancherului.
9.2 Conceptul
de multiprogramare.
9.2.1 Trecerea unui proces dintr-o stare īntr-alta
9.2.1.1 Cedarea voluntară a procesorului
9.2.1.2 Cedarea involuntară a procesorului
9.2.2 Funcţionarea
unui planificator
9.3.1 Sarcinile
planificatorului de procese.
9.3.2 Algoritmi
de planificare.
9.3.2.1 FCFS (First Come First Served)
9.3.2.2 SJF (Shortest Job First).
9.3.2.3 Algoritmul bazat pe priorităţi.
9.3.2.4 Algoritm bazat pe termene de terminare
(deadline scheduling)
9.3.2.5 Round‑Robin (planificare circulară).
9.3.2.6 Algoritmul de cozi pe mai multe nivele
10.1 Structură;
calculul de adresă
10.1.1 Problematica gestiunii memoriei
10.1.2 Structura ierarhică de organizare a
memoriei
10.1.3 Mecanisme de translatare a adresei
10.1.3.2 Faza
editării de legături
10.1.3.3 Faza
de īncărcare şi execuţie
10.2 Scheme
simple de alocare a memoriei
10.2.1 Clasificarea tehnicilor de alocare
10.2.2 Alocarea la sistemele monoutilizator
10.2.3 Alocarea
cu partiţii fixe
10.2.4 Alocarea cu partiţii variabile
10.3 Mecanisme
de memorie virtuală
10.3.3 Alocare segmentată şi
paginată
10.4 Planificarea
schimburilor cu memoria
10.4.1 Intrebările gestiunii memoriei şi politici de schimb.
10.4.2.1 Metode
de plasare şi structuri de date folosite
10.4.2.2 Metoda primei potriviri (First‑fit).
10.4.2.3 Metoda celei mai bune potriviri (Best‑fit).
10.4.2.4 Metoda celei mai rele potriviri (Worst‑fit).
10.4.2.5 Metoda alocării prin camarazi (Buddy‑system).
10.4.5 Cum funcţionează o memorie cache?
11 Intrări / ieşiri la nivel fizic
11.1 Tehnica zonelor tampon temporare (buffering, caching)
11.1.1 Mecanismul zonelor tampon
temporare
11.1.2 Aplicaţii ale zonelor tampon temporare
11.1.2.1 Acces
bufferizat la un fişier
11.1.2.2 Intreţinerea
unui cache disc
11.1.2.3 Intreţinerea
unui cache Web
11.1.2.4 Conectarea
pipe īntre două comenzi
11.2 Canalul
de intrare / ieşire
11.2.1.1 Canalul
şi interacţiunea lui cu procesorul central
11.2.1.2 Utilizarea zonelor tampon multiple.
11.3 Elemente
specifice lucrului cu discul
11.3.1 Partiţionarea
unui hard disc
11.3.2 Planificarea accesului la discul
magnetic
11.3.2.1 Problematica
planificării accesului la disc
11.3.2.2 Reducerea
accesului la sectoare vecine
11.3.2.3 Reducerea aşteptării rotaţiei
11.3.2.4 Reducerea timpului de poziţionare
12 Sistemul
de gestiune a fişierelor
12.1 Gestiunea
fişierelor privită de utilizator
12.1.1 Volum,
fişier, articol, cāmp, cheie, index
12.1.2 Conceptul
de fişier abstract
12.1.3 Tipuri
de acces la articole.
12.1.4 Clasificări
ale fişierelor
12.2 Moduri
de organizare ale fişierelor
12.2.1 Acces
direct prin poziţie
12.2.4 Fişiere
secvenţial‑indexate
12.2.6 Fişiere
organizate folosind B‑arbori
12.3 Acţiunile
SGF la nivel de articol
12.3.1 Actualizarea
fişierelor cu suport altul decāt discul
12.3.2 Scrierea
şi actualizarea fişierelor disc
12.3.3 Modificarea
fişierelor text
12.3.4 Gruparea
articolelor īn zone tampon
12.4 Acţiunile
SGF la nivel de fişier
12.4.2 Rutina
de deschidere Open
12.4.3 Rutina
de īnchidere Close
12.4.4 Alte
operaţii globale cu fişiere.
12.5 Acţiunile
SGF la nivel de suport disc
12.5.1 Sisteme
de cataloage (directori)
12.5.1.1 Directori
cu un singur nivel
12.5.1.2 Directori
cu două nivele
12.5.1.3 Directori
cu structură arborescentă
12.5.1.4 Directori
cu structură de graf aciclic
12.5.2 Evidenţa
spaţiului liber disc
12.5.3 Alocarea
spaţiului pentru fişiere disc
Lista de
figuri
Figura
1.1 O structură de directoare Unix
Figura 1.2 Rezultatele unor copieri sub Unix
Figura 1.3 Rezultatele unor mutări sub Unix
Figura 2.1 Algoritmul după care
funcţionează shell-ul Bourne.
Figura 2.3 Scriptul shell compilari
Figura 2.4 Referirea argumentelor din linia de
comandă īntr-un script shell
Figura 2.5 Fişierul de comenzi compara (varianta 1)
Figura 2.6 Fişierul de comenzi compara (varianta 2)
Figura 2.7 Afişare alfabetică (1)
Figura 2.8 Afişare alfabetică (2)
Figura 2.10 Mail la toţi utilizatorii conectaţi
la sistem
Figura 2.11 Afişare sortată cu while şi
until
Figura 2.12 Utilizare break şi continue
Figura 2.13 Afişări stare sistem
Figura 2.14 Fişier de iniţializare
~./bash_profile
Figura 2.15 Scriptul supraveghere
Figura 2.16 Programul capete.c
Figura 2.20 Script de editări succesive
Figura 2.21 Script pentru căutarea īntr-o
structură de directori
Figura 2.22 Script pentru afişare arbore de
fişiere
Figura 3.2 Arhitectura sistemului de operare Unix
Figura 3.5 hello scris īn limbaj de asamblare
Figura 4.1 O
structură arborescentă cu legături
Figura 4.2 Operaţia de montare
Figura 4.3 Structura superioară a unui sistem de
fişiere Unix
Figura 4.4 Structura unui disc Unix
Figura 4.5 Structura unei intrări īn director
Figura 4.6 Structura unui inod şi accesul la
blocurile unui fişier
Figura 4.7 Corespondenţa Unix īntre procese şi
fişiere
Figura 4.8 Copierea unui fişier cu apelurile sistem
read şi write
Figura 4.12 funcţiile my_lock şi my_unlock
folosind fcntl
Figura 4.13 funcţiile my_lock şi my_unlock
folosind lockf
Figura 5.1 Formatul unui fişier ELF
Figura 5.2 Un program C foarte simplu
Figura 5.3 Antetul ELF şi alte antete pentru
programul din fig. 5.2
Figura 5.4 Imaginea unui proces īn memorie (variantă
simplificată)
Figura 5.5 Imaginea unui proces īn memorie (varianta
completă [31])
Figura 5.7 Duplicarea prin fork
Figura 5.11 Criterii de implementare exec-uri
Figura 5.14 Sursă semnaturaTemporala.c
Figura 5.17 Conţinutul stării īntoarse de wait
Figura 5.18 Diagrama tranziţiilor īntre stările
procesului Unix
Figura 5.19 Schema de lucru a unui server concurent
Figura 5.20 Sursa z.c; provocare zombie
Figura 5.21 Script de urmărire zombie
Figura 5.22 Rezultate ale provocării zombie
Figura 5.23 Succesiunea proceselor la īncărcarea
sistemului
Figura 5.24 Adunarea paralelă a patru numere:
sursa Suma4.c
Figura 5.25 Evoluţia "adunării
paralele"
Figura 5.26 Comunicaţii īntre procese (IPC)
Figura 5.27 Sursa scriitorInFlux.c
Figura 5.28 Sursă cititorDinFlux.c
Figura 5.29 Legătura user nucleu prin pipe
Figura 5.30 Un pipe
leagă două procese īnrudite.
Figura 5.31 Comunicarea prin două pipe-uri īntre
părinte şi fiu
Figura 5.33 Sursă PropozitiiPipe.c
Figura 5.34 Schema comenzii $ who | sort | lpr
Figura 5.37 Sursa popenEnvSort.c
Figura 5.38 Sursa PropozitiiFifoScriitor.c
Figura 5.39 Sursă PropozitiiFifoCititor.c
Figura 5.40 Sursă SemnaturaFifoScriitor.c
Figura 5.41 Sursă SemnaturaFifoCititor.c
Figura 5.42 Sursă SchemaServerFifo.c
Figura 5.43 Sursă SchemaClientFifo.c
Figura 6.1 Fişierul NumaraParam.bat
Figura 6.2 Fişierul NumaraParamHelp.bat
Figura 6.3 Fişierul NumaraParam2.bat
Figura 6.4 Fişierul tip_global.bat
Figura 6.5 Fişierul afis_conc.bat
Figura 6.6 Parcurgerea parametrilor prin for
Figura 6.7 Sursa fişierului de comenzi sub Windows
Figura 7.1 Arhitectura SO Windows
Figura 7.2 Managerii de la nivelul Executivului NT
Figura 7.3 Fişierul sursă blocare.cpp
Figura 7.4 Succesiunea de apeluri pentru pipe cu nume
Figura 7.7 Structura unui disc logic DOS
Figura 7.8 Structura sectorului Boot a discului
Figura 7.10 Structura unui descriptor de fişier DOS
Figura 7.11 Volum formatat cu NTFS
Figura 7.12 Structura Master File Table
Figura 7.14 Fişierele sistem NTFS
Figura 8.1 Stările unui proces şi
acţiunile SO aferente
Figura 8.2 Structura generală a unui SO
Figura 8.3 Programul APASASTART
Figura 8.4 Structura unui fişier ce conţine un
program executabil
Figura 8.5 Incărcător (loader) de programe cu
structura din fig. 8.4
Figura 9.1 O secvenţă de decrementare
Figura 9.2 Programul din fig. 9.1 rulat
"defavorabil" īn două procese
Figura 9.3 Programul din fig. 9.1 rulat ca secţiune
critică
Figura 9.4 Un program cu secţiune critică
Figura 9.5 Soluţia Peterson pentru secţiune
critică
Figura 9.6 Operaţiile P(s) şi V(s) apelate de
procesul A
Figura 9.7 Soluţia cu semafor pentru secţiune
critică
Figura 9.8 Problema producătorului şi a
consumatorului rezolvată cu semafoare
Figura 9.9 Implementarea unei regiuni critice
condiţionate
Figura 9.10 Problema citirilor şi a scrierilor
Figura 9.11 Un impas īntr-o intersecţie
Figura 9.12 Impas provocat de două semafoare
Figura 9.13 O situaţie de impas
Figura 9.14 Un graf de alocare a resurselor
Figura 9.15 Problema filozofilor
Figura 9.16 Algoritmul bancherului
Figura 9.17 Implementarea algoritmului bancherului
Figura 9.18 Implementarea unui planificator
Figura 9.19 Exemplu de evoluţie īn multiprogramare
Figura 9.20 Schimbul RUN «
READY īntre două procese
Figura 9.21 Cozi gestionate de planificatorul proceselor
Figura 10.1 Instanţe posibile ale unui program
segmentat
Figura 10.2 Structura memoriei unui sistem de calcul
Figura 10.3 Fazele translatării unui program
Figura 10.4 Translatare de la sursă la fişier
executabil
Figura 10.5 Formatul unei instrucţiuni
maşină
Figura 10.6 Funcţionarea CPU şi calculul
funcţiei de translatare
Figura 10.7 Alocarea memoriei la sistemele monoutilizator
Figura 10.8 Exemplu de alocare cu partiţii fixe
Figura 10.9 Evoluţia proceselor la alocarea cu
partiţii variabile
Figura 10.10 Colaţionarea de spaţii libere
vecine
Figura 10.11 Posibilităţi de compactare prin
relocare totală sau parţială
Figura 10.12 Translatarea unei pagini virtuale īntr-una
fizică
Figura 10.13 Două procese, īntr-o alocare
paginată
Figura 10.14 Folosirea īn comun a unui cod
Figura 10.15 Alocare necontiguă prin segmentare
Figura 10.16 Alocare segmentată şi
paginată
Figura 10.17 Alocarea de octeţi īntr‑o
zonă liberă
Figura 10.18 Comasarea a două zone libere adiacente
Figura 10.19 Eliberarea unei zone ocupate
Figura 10.20 Alocare īn sistem Buddy
Figura 10.21 Anomalia lui Belady
Figura 10.22 Evoluţia unei matrice de referinţe
Figura 10.23 Proiectare directă pe memoria cache
Figura 10.24 Proiectarea set ‑ asociativă
Figura 11.1 Un pool de zone tampon
Figura 11.2 Interacţiuni dintre procesorul central
şi canalul de intrare / ieşire
Figura 11.3 O primă soluţie a citirilor
multiple
Figura 11.4 Citiri multiple cu două zone tampon
Figura 11.5 Scrieri multiple cu două zone tampon
Figura 11.6 Descrierea unei partiţii hard disc
Figura 11.7 Numerotări ale sectoarelor, cu şi
fără interleaving
Figura 11.8 Cereri de sectoare de pe aceeaşi
pistă
Figura 11.9 Cereri la disc la un moment dat
Figura 12.1 Plasarea articolelor īn sectoare vecine
Figura 12.2 Structura unui fişier invers
Figura 12.4 Fişier secvenţial‑indexat
Figura 12.6 Efectul inserării şi ştergerii
īn B‑arbore
Figura 12.7 Modificarea unui fişier pe echipament cu
acces secvenţial
Figura 12.8 Modificarea unui articol īn acces
secvenţial
Figura 12.9 Stergerea unui fişier īn acces
secvenţial
Figura 12.10 Inserarea unui articol la legare
īnlănţuită
Figura 12.11 Provocarea unui "Divide by zero"
Figura 12.12 Director cu un singur nivel
Figura 12.13 Director cu două nivele
Figura 12.14 Structura unui disc cu şase
fişiere
Figura 12.15 Evidenţa spaţiului prin listă
īnlănţuită
Figura 12.16 Evidenţa prin listă
īnlănţuită şi indexată
Figura 12.17 Alocarea indexată