Cuprins

 

 

1      Elemente de interfaţă exterioară Unix. 1

1.1        Probleme generale şi primele comenzi 1

1.1.1      Structura unei comenzi, evitări şi specificări generice. 1

1.1.2      Numele unui fişier Unix. 2

1.1.3      Specificare īn structura de directoare. 4

1.1.4      Primele comenzi 4

1.1.4.1        Comanda login. 4

1.1.4.2        Comanda passwd. 5

1.1.4.3        Terminarea unei sesiuni de lucru. 5

1.1.4.4        Manualele Unix. 5

1.1.4.5        Comanda man. 6

1.1.4.6        Comanda more. 7

1.1.5      Expresii regulare. 8

1.2        Comenzi standard Unix. 9

1.2.1      Comenzi de manipulare a directoarelor şi fişierelor 9

1.2.1.1        Afişarea numelui directorului curent 9

1.2.1.2        Listarea conţinutului unui director 9

1.2.1.3        Schimbarea directorului curent 10

1.2.1.4        Afişarea unui fişier la ieşirea standard. 10

1.2.1.5        Afişarea unui īnceput sau a unui sfārşit de fişier 11

1.2.1.6        Compararea a două fişiere. 11

1.2.1.7        Determinarea (aproximativă) a tipurilor fişierelor 12

1.2.1.8        Căutare de fişiere. 12

1.2.1.9        Crearea unui director 13

1.2.1.10      Copierea unui fişier 13

1.2.1.11      Comanda de mutare (redenumire) a fişierelor 14

1.2.1.12      Ştergeri de fişiere sau de directoare. 15

1.2.2      Filtre Unix. 15

1.2.2.1        Comanda grep. 15

1.2.2.2        Comanda sort 16

1.2.2.3        Editorul sed. 17

1.2.2.4        Comanda tr 18

1.2.2.5        Comanda wc. 18

1.2.2.6        Comenzile od şi dd. 18

1.2.3      Editorul de texte vi 19

1.2.4      Utilitarul awk. 22

1.3        Comunicarea īntre utilizatori 24

1.3.1      Comunicarea on‑line īntre utilizatori 24

1.3.1.1        Comanda write. 24

1.3.1.2        Comanda mesg. 25

1.3.2      Poşta electronică. 25

1.3.2.1        Comanda mailx. 27

1.3.2.2        Utilitarul pine. 27

1.3.3      Informări individuale. 28

1.3.4      Lansarea la termen a unui program.. 28

1.4        Controlul comenzilor. 29

1.4.1      Comanda tee. 29

1.4.2      Comanda nice. 30

1.4.3      Comanda nohup. 30

1.4.4      Comanda kill 30

1.4.5      Comanda ps. 31

2      Shell şi programarea īn shell 33

2.1        Interpretoare de comenzi shell 33

2.1.1      Principalele interpretoare de comenzi shell 33

2.1.2      Lansarea īn execuţie a shell-ului 34

2.1.3      Funcţionarea unui interpretor de comenzi shell 35

2.2        Programarea īn shell 36

2.2.1      Morfologia şi sintaxa limbajului sh.. 36

2.2.1.1        Gramatica limbajului sh. 36

2.2.1.2        Un exemplu de fişier de comenzi 39

2.2.2      Comenzi simple şi succesiuni de comenzi 40

2.2.2.1        Precizări privind semantica lexicului sh. 40

2.2.2.2        Gruparea comenzilor pe o linie. 41

2.2.2.3        Fişierele standard ale unei comenzi. Redirectarea, suprapunerea şi conectarea acestora. 42

2.2.3      Variabile shell şi mecanisme de substituţie. 44

2.2.3.1        Substituţie cu ieşire standard. 44

2.2.3.2        Variabile shell şi substituţia cu valorile lor 45

2.2.3.3        Variabile shell predefinite (variabile de mediu) 47

2.2.3.4        Referirea la argumentele din linia de comandă. 48

2.2.4      Comenzi Unix utile īn contextul programării shell 49

2.2.4.1        shift 49

2.2.4.2        read. 50

2.2.4.3        sleep. 50

2.2.4.4        exit 51

2.2.4.5        uniq. 51

2.2.4.6        cut 51

2.2.4.7        echo. 52

2.2.4.8        test 53

2.2.4.9        expr 55

2.2.5      Structuri de control alternative shell 56

2.2.5.1        if 56

2.2.5.2        case. 58

2.2.6      Structuri de control repetitive shell 59

2.2.6.1        for 59

2.2.6.2        while şi until 60

2.2.6.3        true, false, break, continue. 60

2.2.7      Tratarea liniei de comandă. 62

2.3        Aplicaţii shell 63

2.3.1      Configurări iniţiale ale shell-urilor 63

2.3.1.1        Fişiere de iniţializare sh şi bash. 63

2.3.1.2        Prompter dinamic sh. 64

2.3.1.3        Personalizări utile bash. 65

2.3.2      Exemple de aplicaţii sh.. 66

2.3.2.1        O aplicaţie de supraveghere. 66

2.3.2.2        Conversii Linux - DOS. 67

2.3.2.3        Reunirea fişierelor tipăribile īntr-un singur fişier: pall 69

2.3.2.4        Editări succesive de programe sh urmate de compilare. 70

2.3.2.5        Căutare şir īntr-o structură de fişiere. 71

2.3.2.6        Afişare arbore de fişiere. 72

3      Structura SO Unix. 75

3.1        Evoluţie şi versiuni 75

3.1.1      Scurt istoric. 75

3.1.2      Descendenţa şi relaţiile dintre diverse SO Unix. 77

3.1.3      Standarde. 78

3.1.3.1        POSIX.. 79

3.1.3.2        Biblioteca C de la GNU.. 79

3.2        Structura sistemului de operare Unix. 80

3.2.1      Caracteristici, entităţi participante, contexte de lucru. 80

3.2.2      Principalele componente. 82

3.2.2.1        Partea de servicii 82

3.2.2.2        Kernel 83

3.2.3      Ce sunt apelurile sistem?. 85

3.2.3.1        Apeluri sistem Unix şi apeluri API 85

3.2.3.2        Un exemplu de apel sistem īn diverse variante. 87

3.2.3.3        Trecerea la modul de lucru nucleu pe arhitectura Intel 88

4      Sistemul de fişiere Unix. 93

4.1        Structura arborescentă şi legături suplimentare. 93

4.1.1      Tipuri de fişiere şi sisteme de fişiere. 93

4.1.2      Legături hard şi legături simbolice. 94

4.1.3      Conceptul de montare. 97

4.1.4      Protecţia fişierelor Unix. 99

4.1.4.1        Drepturi de acces. 99

4.1.4.2        Drepturi implicite: umask. 100

4.1.4.3        Drepturi de lansare, drepturi program executabil, biţii setuid şi setgid. 101

4.1.5      Principalele directoare ale unui sistem de fişiere Unix. 103

4.2        Structura internă a discului Unix. 106

4.2.1      Partiţii şi blocuri 106

4.2.2      Directori şi inoduri 107

4.2.3      Schema de alocare a blocurilor disc pentru un fişier 108

4.2.4      Accesul proceselor la fişiere. 110

4.3        Apeluri sistem pentru lucrul cu fişiere. 112

4.3.1      Operaţii I/O.. 112

4.3.2      Apelul sistem open. 113

4.3.3      Apelul sistem close. 114

4.3.4      Apelurile sistem read şi write. 114

4.3.5      Apelul sistem lseek. 116

4.3.6      Apelurile sistem dup şi dup2. 116

4.3.7      Apelul sistem fcntl 117

4.4        Gestiunea fişierelor. 118

4.4.1      Manevrarea fişierelor īn sistemul de fişiere. 118

4.4.2      Creat, truncate, readdir 119

4.4.3      Un exemplu: obţinerea tipului de fişier prin apelul sistem stat 120

4.5        Alte apeluri sistem.. 121

4.5.1      Time. 121

4.5.2      Umask. 121

4.5.3      Gethostname. 122

4.5.4      Gettimeofday. 122

4.5.5      Mmap şi munmap. 122

4.5.6      Fsync şi fdatasync. 122

4.5.7      Uname. 123

4.5.8      Select şi seturi de descriptori 123

4.6        Blocarea fişierelor. 124

4.6.1      Un (contra)exemplu. 124

4.6.2      Tipuri de blocare. 125

4.6.3      Blocarea conciliantă prin fcntl 126

4.6.4      Blocare prin lockf şi flock. 127

5      Procese Unix. 129

5.1        Formatul ELF al unui fişier executabil Unix. 129

5.1.1      Structura. 129

5.1.2      Antetul 130

5.1.3      Antetele de secţiuni 130

5.1.4      Un exemplu. 131

5.2        Procese Unix. 133

5.2.1      Structura unui proces. 133

5.2.1.1        Contextul utilizator 133

5.2.1.2        Contextul nucleu. 134

5.2.2      Apelurile sistem de bază pentru gestiunea proceselor 138

5.2.2.1        Crearea proceselor Unix. Apelul sistem fork() 138

5.2.2.2        Execuţia unui program extern; apelurile sistem exec*() 140

5.2.2.3        Exemple simple de utilizare exec şi fork. 142

5.2.2.4        Ce se moşteneşte din context după fork şi exec*?. 144

5.2.2.5        Apelurile sistem exit(), wait() şi waitpid() 144

5.2.3      Stările unui proces Unix şi tranziţia īntre stări 146

5.2.4      Procese zombie. 147

5.2.4.1        Simularea apariţiei unor procese zombie. 147

5.2.4.2        Evitarea proceselor “zombie”; stilul System V şi stilul BSD.. 149

5.2.5      Procese remarcabile şi daemoni 150

5.2.5.1        Procesele de la īncărcare (bootare) la acţiunile shell 150

5.2.5.2        Oprirea sistemului 152

5.2.5.3        Stările sistemului de operare Unix. 152

5.2.5.4        Procese daemon. 153

5.2.5.5        Principalele procese create la īncărcare. 154

5.2.6      Alte apeluri sistem pentru lucrul cu procese. 155

5.3        Comunicatii intre procese - pipe şi FIFO (pipe cu nume). 156

5.3.1      Problematica IPC.. 156

5.3.1.1        Un contraexemplu remarcabil 156

5.3.1.2        Comunicarea īntre procese. 157

5.3.1.3        Specificul comunicaţiei īntre procese prin flux de octeţi 158

5.3.1.4        Un exemplu de problemă: tipćrirea de propoziţii cāte una pe linie. 160

5.3.2      Pipe sub Unix. 162

5.3.2.1        Mecanismul pipe sub Unix. 162

5.3.2.2        Exemplu: corectarea sumei a 4 numere. 164

5.3.2.3        Exemplu: propoziţii una pe linie. 165

5.3.2.4        Exemplu: who | sort 165

5.3.3      Funcţiile popen, pclose. 166

5.3.3.1        Descriere. 166

5.3.3.2        Exemplu: captarea rezumatului ls -l 167

5.3.3.3        Exemplu: afişarea variabilelor de mediu īn ordine alfabetică. 168

5.3.4      FIFO – pipe cu nume. 168

5.3.4.1        Conceptul de FIFO – pipe cu nume. 168

5.3.4.2        Exemplu: propoziţii pe o linie prin FIFO.. 170

5.3.4.3        Programe de urmărire a comportării FIFO.. 171

5.3.4.4        Client / server prin FIFO.. 172

6      Fişiere de comenzi Ms-Dos şi extensii Windows. 175

6.1        Comenzi utile īn contextul fişierelor de comenzi MS-DOS. 175

6.1.1      Comenzi pentru lucrul cu discul 175

6.1.1.1        format 175

6.1.2      Comenzi pentru lucrul cu directoare. 175

6.1.2.1        mkdir(md) 175

6.1.2.2        chdir(cd) 176

6.1.2.3        rmdir(rd) 176

6.1.2.4        dir 176

6.1.2.5        path. 177

6.1.3      Comenzi pentru lucrul cu fişiere. 177

6.1.3.1        more. 177

6.1.3.2        attrib. 177

6.1.3.3        del, erase. 178

6.1.3.4        copy. 178

6.1.3.5        rename(ren) 179

6.1.3.6        sort 179

6.1.3.7        type. 179

6.1.3.8        find. 179

6.1.3.9        fc. 180

6.1.4      Directive MS-DOS. 180

6.1.4.1        echo. 180

6.1.4.2        pause. 180

6.1.4.3        rem.. 181

6.1.4.4        set 181

6.1.4.5        shift 181

6.1.4.6        goto. 182

6.1.4.7        if 182

6.1.4.8        for 183

6.1.4.9        call 183

6.1.5      Exemple de fişiere de comenzi MS_DOS. 183

6.1.5.1        Exemplul 1. 183

6.1.5.2        Exemplul 2. 187

6.2        Extensii Windows. 188

6.2.1      Instrucţiunea (comanda) compusă. 189

6.2.2      Extensii ale directivei FOR.. 189

6.2.3      Extensii ale directivei SET şi ale gestionării variabilelor de mediu. 189

6.2.4      Evaluarea īntārziată a variabilelor de mediu. 190

6.2.5      Extensii ale directivei IF. 192

6.2.5.1        Alternativa ELSE. 192

6.2.5.2        Operatori de comparare suplimentari. 193

6.2.6      Alte extensii 193

6.2.6.1        Extensii ale directivei SHIFT. 193

6.2.6.2        Accesarea şirului de parametri din linia de comandă. 194

6.2.6.3        Extensii ale directivei CALL. 194

6.2.6.4        Extensii ale directivei GOTO. 194

6.2.6.5        Extensii ale comenzii MD. 194

6.2.7      Exemple de fişiere de comenzi cu extensii Windows. 195

6.2.7.1        Exemplul 1. 195

6.2.7.2        Exemplul 2. 196

7      Arhitectura sistemului de operare Windows. 199

7.1        Versiuni Windows – argumente pro şi contra. 199

7.1.1      Diferenţe īntre Windows familia NT şi familia Windows 9X.. 199

7.1.2      Caracteristicile principale ale seriei NT.. 200

7.1.3      Nivele de protecţie: Kernel Space vs User Space. 201

7.2        Arhitectura SO Windows. 201

7.2.1      Arhitectura internă a nucleului Windows. 201

7.2.1.1        Structura SO Windows. 201

7.2.1.2        Nucleul Windows. 201

7.2.1.3        Executivul NT.. 202

7.2.1.4        Microkernel, drivere şi HAL. 205

7.2.2      Subsistemele oferite de sistemul de operare Windows. 205

7.2.2.1        Caracteristicile subsistemelor Win32, POSIX şi OS/2. 205

7.2.2.2        Procesele de bază ale sistemului de operare. 206

7.2.2.3        Servicii Windows. 207

7.3        Elemente de acces la fişiere sub Windows. 207

7.3.1      Funcţii Win32 API pentru lucru cu fişiere. 207

7.3.1.1        Creare fişier 207

7.3.1.2        Deschidere fişier 208

7.3.1.3        Scriere īntr-un fişier 208

7.3.1.4        Citire dintr-un fişier 208

7.3.1.5        Inchidere fişier 209

7.3.2      Blocare de fişiere īn Windows la nivel zonă de date. 209

7.3.2.1        Funcţiile folosite la blocare. 209

7.3.2.2        Un exemplu de blocare. 210

7.4        Procese Window, comunicare īntre procese. 211

7.4.1      Procese Windows. 211

7.4.1.1        Acţiunile componentelor sistem.. 211

7.4.1.2        Crearea unui proces Windows. 212

7.4.1.3        Terminarea unui proces Windows. 213

7.4.2      Pipe sub Windows NT.. 214

7.4.2.1        Pipe anonim Windows. 214

7.4.2.2        Pipe cu nume sub windows. 215

7.4.2.3        Un exemplu de comunicare prin pipe. 216

7.5        Structuri interne ale sistemelor de fişiere Windows şi DOS. 219

7.5.1      Sistemul de fişiere FAT.. 219

7.5.1.1        Structura unui disc. 219

7.5.1.2        Tabela FAT.. 220

7.5.1.3        Structura directorilor 222

7.5.2      Sistemul de fisiere NTFS/Windows. 223

7.5.2.1        Structura internă a discului NTFS. 223

7.5.2.2        Structura Master File Table. 224

7.5.2.3        Structura şi alocarea spaţiului la un disc logic. 225

7.5.2.4        Atributele unui fişier 225

7.5.2.5        Fişiere sistem NTFS. 226

8      Sisteme de operare – prezentare generală. 229

8.1        Tipuri de sisteme de operare (SO); clasificări 229

8.1.1      Clasificare după gradul de partajabilitate a resurselor 229

8.1.2      Clasificare după tipurile de interacţiuni permise. 230

8.1.3      Clasificare după organizarea internă a programelor ce compun SO. 231

8.2        Structura si funcţiile unui sistem de operare. 232

8.2.1      Stările unui proces şi fazele unui program.. 232

8.2.1.1        Stările unui proces. 232

8.2.1.2        Fazele unui program.. 233

8.2.2      Structura generală a unui sistem de operare. 234

8.2.2.1        Structura unui SO.. 235

8.2.2.2        Partea de control 235

8.2.2.3        Partea de servicii 237

8.3        Incărcarea (lansarea īn execuţie) a unui sistem de operare. 240

9      Teoria generală a sistemelor de operare. 245

9.1        Procese. 245

9.1.1      Conceptul de proces. 245

9.1.2      Concurenţa īntre procese. 246

9.1.2.1        Secţiune critică; resursă critică; excludere mutuală. 246

9.1.2.2        Conceptul de semafor. 249

9.1.2.3        Problema producătorului şi a consumatorului. 250

9.1.2.4        Regiuni critice condiţionate. 251

9.1.2.5        Problema citirilor şi a scrierilor. 253

9.1.3      Problema impasului 254

9.1.3.1        Conceptul de impas. 255

9.1.3.2        Ieşirea din impas. 257

9.1.3.3        Detectarea impasului 257

9.1.3.4        Evitarea (prevenirea apariţiei) impasului. 258

9.1.3.5        Alocarea controlată (conservativă) de resurse; algoritmul bancherului. 260

9.2        Conceptul de multiprogramare. 265

9.2.1      Trecerea unui proces dintr-o stare īntr-alta. 265

9.2.1.1        Cedarea voluntară a procesorului 265

9.2.1.2        Cedarea involuntară a procesorului 266

9.2.2      Funcţionarea unui planificator 266

9.3        Planificarea proceselor. 267

9.3.1      Sarcinile planificatorului de procese. 267

9.3.2      Algoritmi de planificare. 268

9.3.2.1        FCFS (First Come First Served) 269

9.3.2.2        SJF (Shortest Job First). 269

9.3.2.3        Algoritmul bazat pe priorităţi. 269

9.3.2.4        Algoritm bazat pe termene de terminare (deadline scheduling) 270

9.3.2.5        Round‑Robin (planificare circulară). 270

9.3.2.6        Algoritmul de cozi pe mai multe nivele. 270

10     Gestiunea memoriei 271

10.1      Structură; calculul de adresă. 271

10.1.1         Problematica gestiunii memoriei 271

10.1.2         Structura ierarhică de organizare a memoriei 272

10.1.3         Mecanisme de translatare a adresei 273

10.1.3.1      Faza de compilare. 274

10.1.3.2      Faza editării de legături 274

10.1.3.3      Faza de īncărcare şi execuţie. 275

10.2      Scheme simple de alocare a memoriei 276

10.2.1         Clasificarea tehnicilor de alocare. 276

10.2.2         Alocarea la sistemele monoutilizator 276

10.2.3         Alocarea cu partiţii fixe. 277

10.2.4         Alocarea cu partiţii variabile. 278

10.3      Mecanisme de memorie virtuală. 280

10.3.1         Alocarea paginată. 280

10.3.2         Alocare segmentată. 282

10.3.3         Alocare segmentată şi paginată. 283

10.4      Planificarea schimburilor cu memoria. 284

10.4.1         Intrebările gestiunii memoriei şi politici de schimb. 284

10.4.2         Politici de plasare. 285

10.4.2.1      Metode de plasare şi structuri de date folosite. 285

10.4.2.2      Metoda primei potriviri (First‑fit). 288

10.4.2.3      Metoda celei mai bune potriviri (Best‑fit). 288

10.4.2.4      Metoda celei mai rele potriviri (Worst‑fit). 288

10.4.2.5      Metoda alocării prin camarazi (Buddy‑system). 288

10.4.3         Politici de īncărcare. 290

10.4.4         Politici de īnlocuire. 291

10.4.4.1      Metoda NRU. 292

10.4.4.2      Metoda FIFO. 292

10.4.4.3      Metoda LRU. 293

10.4.5         Cum funcţionează o memorie cache?. 294

11     Intrări / ieşiri la nivel fizic. 297

11.1      Tehnica zonelor tampon temporare (buffering, caching). 297

11.1.1         Mecanismul zonelor tampon temporare. 297

11.1.2         Aplicaţii ale zonelor tampon temporare. 298

11.1.2.1      Acces bufferizat la un fişier 298

11.1.2.2      Intreţinerea unui cache disc. 299

11.1.2.3      Intreţinerea unui cache Web. 299

11.1.2.4      Conectarea pipe īntre două comenzi 299

11.1.2.5      Memoria cache. 300

11.2      Canalul de intrare / ieşire. 300

11.2.1.1      Canalul şi interacţiunea lui cu procesorul central 300

11.2.1.2      Utilizarea zonelor tampon multiple. 302

11.3      Elemente specifice lucrului cu discul 304

11.3.1         Partiţionarea unui hard disc. 304

11.3.2         Planificarea accesului la discul magnetic. 305

11.3.2.1      Problematica planificării accesului la disc. 305

11.3.2.2      Reducerea accesului la sectoare vecine. 306

11.3.2.3      Reducerea aşteptării rotaţiei 308

11.3.2.4      Reducerea timpului de poziţionare. 309

12     Sistemul de gestiune a fişierelor. 313

12.1      Gestiunea fişierelor privită de utilizator. 313

12.1.1         Volum, fişier, articol, cāmp, cheie, index. 313

12.1.2         Conceptul de fişier abstract 314

12.1.3         Tipuri de acces la articole. 315

12.1.4         Clasificări ale fişierelor 316

12.2      Moduri de organizare ale fişierelor. 317

12.2.1         Acces direct prin poziţie. 317

12.2.2         Fişiere inverse. 318

12.2.3         Fişiere multilistă. 319

12.2.4         Fişiere secvenţial‑indexate. 320

12.2.5         Fişiere selective. 322

12.2.6         Fişiere organizate folosind B‑arbori 322

12.3      Acţiunile SGF la nivel de articol 324

12.3.1         Actualizarea fişierelor cu suport altul decāt discul 324

12.3.2         Scrierea şi actualizarea fişierelor disc. 325

12.3.3         Modificarea fişierelor text 326

12.3.4         Gruparea articolelor īn zone tampon. 327

12.4      Acţiunile SGF la nivel de fişier. 328

12.4.1         Descriptorul de fişier 328

12.4.2         Rutina de deschidere Open. 329

12.4.3         Rutina de īnchidere Close. 330

12.4.4         Alte operaţii globale cu fişiere. 330

12.5      Acţiunile SGF la nivel de suport disc. 332

12.5.1         Sisteme de cataloage (directori) 333

12.5.1.1      Directori cu un singur nivel 333

12.5.1.2      Directori cu două nivele. 333

12.5.1.3      Directori cu structură arborescentă. 334

12.5.1.4      Directori cu structură de graf aciclic. 334

12.5.2         Evidenţa spaţiului liber disc. 334

12.5.3         Alocarea spaţiului pentru fişiere disc. 337

13     Bibliografie. 339

 

 


 

 

Lista de figuri

 

 

Figura 1.1 O structură de directoare Unix. 13

Figura 1.2 Rezultatele unor copieri sub Unix. 14

Figura 1.3 Rezultatele unor mutări sub Unix. 15

Figura 2.1 Algoritmul după care funcţionează shell-ul Bourne. 35

Figura 2.2 Sintaxa shell sh. 38

Figura 2.3 Scriptul shell compilari 39

Figura 2.4 Referirea argumentelor din linia de comandă īntr-un script shell 49

Figura 2.5 Fişierul de comenzi compara (varianta 1) 54

Figura 2.6 Fişierul de comenzi compara (varianta 2) 54

Figura 2.7 Afişare alfabetică (1) 57

Figura 2.8 Afişare alfabetică (2) 58

Figura 2.9 Utilizare case. 58

Figura 2.10 Mail la toţi utilizatorii conectaţi la sistem.. 60

Figura 2.11 Afişare sortată cu while şi until 60

Figura 2.12 Utilizare break şi continue. 61

Figura 2.13 Afişări stare sistem.. 62

Figura 2.14 Fişier de iniţializare ~./bash_profile. 65

Figura 2.15 Scriptul supraveghere. 66

Figura 2.16 Programul capete.c. 68

Figura 2.17 Scriptul doli 69

Figura 2.18 Scriptul lido. 69

Figura 2.19 Scriptul pall 70

Figura 2.20 Script de editări succesive. 71

Figura 2.21 Script pentru căutarea īntr-o structură de directori 72

Figura 2.22 Script pentru afişare arbore de fişiere. 73

Figura 3.1 Descendenţe Unix. 77

Figura 3.2 Arhitectura sistemului de operare Unix. 81

Figura 3.3 hello.c cu printf 87

Figura 3.4 hello.c cu write. 87

Figura 3.5 hello scris īn limbaj de asamblare. 88

Figura 4.1  O structură arborescentă cu legături 95

Figura 4.2 Operaţia de montare. 98

Figura 4.3 Structura superioară a unui sistem de fişiere Unix. 103

Figura 4.4 Structura unui disc Unix. 106

Figura 4.5 Structura unei intrări īn director. 108

Figura 4.6 Structura unui inod şi accesul la blocurile unui fişier. 109

Figura 4.7 Corespondenţa Unix īntre procese şi fişiere. 111

Figura 4.8 Copierea unui fişier cu apelurile sistem read şi write. 115

Figura 4.9 Sursa testdup2.c.. 117

Figura 4.10 Sursa tipfis.c.. 121

Figura 4.11 Sursa lockfile.c.. 124

Figura 4.12 funcţiile my_lock şi my_unlock folosind fcntl 127

Figura 4.13 funcţiile my_lock şi my_unlock folosind lockf 128

Figura 5.1 Formatul unui fişier ELF. 129

Figura 5.2 Un program C foarte simplu. 131

Figura 5.3 Antetul ELF şi alte antete pentru programul din fig. 5.2. 133

Figura 5.4 Imaginea unui proces īn memorie (variantă simplificată) 134

Figura 5.5 Imaginea unui proces īn memorie (varianta completă [31]) 135

Figura 5.6 Mecanismul fork.. 138

Figura 5.7 Duplicarea prin fork.. 139

Figura 5.8 Sursa err_sys.c.. 139

Figura 5.9 Sursa PrimFork.c.. 140

Figura 5.10 Mecanismul exec. 141

Figura 5.11 Criterii de implementare exec-uri 142

Figura 5.12 Sursa DirExecv.c.. 142

Figura 5.13 Sursa DirExecl.c.. 143

Figura 5.14 Sursă semnaturaTemporala.c.. 143

Figura 5.15 Sursa A.c.. 143

Figura 5.16 Sursa B.c.. 144

Figura 5.17 Conţinutul stării īntoarse de wait.. 145

Figura 5.18 Diagrama tranziţiilor īntre stările procesului Unix. 147

Figura 5.19 Schema de lucru a unui server concurent 148

Figura 5.20 Sursa z.c; provocare zombie. 148

Figura 5.21 Script de urmărire zombie. 148

Figura 5.22 Rezultate ale provocării zombie. 149

Figura 5.23 Succesiunea proceselor la īncărcarea sistemului 151

Figura 5.24 “Adunarea paralel㔠a patru numere: sursa Suma4.c.. 157

Figura 5.25 Evoluţia "adunării paralele". 157

Figura 5.26 Comunicaţii īntre procese (IPC) 158

Figura 5.27 Sursa scriitorInFlux.c.. 161

Figura 5.28 Sursă cititorDinFlux.c.. 162

Figura 5.29 Legătura user – nucleu prin pipe. 162

Figura 5.30 Un pipe leagă două procese īnrudite. 163

Figura 5.31 Comunicarea prin două pipe-uri īntre părinte şi fiu. 164

Figura 5.32 Sursa Suma4bun.c.. 164

Figura 5.33 Sursă PropozitiiPipe.c.. 165

Figura 5.34 Schema comenzii “$ who | sort | lpr”. 166

Figura 5.35 Sursa whoSort.c.. 166

Figura 5.36 Sursa popenLs.c. 167

Figura 5.37 Sursa popenEnvSort.c. 168

Figura 5.38 Sursa PropozitiiFifoScriitor.c.. 170

Figura 5.39 Sursă PropozitiiFifoCititor.c.. 170

Figura 5.40 Sursă SemnaturaFifoScriitor.c.. 171

Figura 5.41 Sursă SemnaturaFifoCititor.c.. 171

Figura 5.42 Sursă SchemaServerFifo.c.. 173

Figura 5.43 Sursă SchemaClientFifo.c.. 173

Figura 6.1 Fişierul NumaraParam.bat 184

Figura 6.2 Fişierul NumaraParamHelp.bat 185

Figura 6.3 Fişierul NumaraParam2.bat 186

Figura 6.4 Fişierul tip_global.bat 187

Figura 6.5 Fişierul afis_conc.bat 188

Figura 6.6 Parcurgerea parametrilor prin for. 195

Figura 6.7 Sursa fişierului de comenzi sub Windows. 197

Figura 7.1 Arhitectura SO Windows. 202

Figura 7.2 Managerii de la nivelul Executivului NT.. 204

Figura 7.3 Fişierul sursă blocare.cpp.. 211

Figura 7.4 Succesiunea de apeluri pentru pipe cu nume. 215

Figura 7.5 Sursa scriitor.cpp. 218

Figura 7.6 Sursa cititor.cpp. 219

Figura 7.7 Structura unui disc logic DOS.. 220

Figura 7.8 Structura sectorului Boot a discului 220

Figura 7.9 O porţiune din FAT.. 221

Figura 7.10 Structura unui descriptor de fişier DOS.. 223

Figura 7.11 Volum formatat cu NTFS.. 224

Figura 7.12 Structura Master File Table. 224

Figura 7.13 Lista atributelor. 226

Figura 7.14 Fişierele sistem NTFS.. 227

Figura 8.1 Stările unui proces şi acţiunile SO aferente. 234

Figura 8.2 Structura generală a unui SO.. 235

Figura 8.3 Programul APASASTART.. 240

Figura 8.4 Structura unui fişier ce conţine un program executabil 241

Figura 8.5 Incărcător (loader) de programe cu structura din fig. 8.4. 241

Figura 8.6 Incărcarea unui SO.. 242

Figura 9.1 O secvenţă de decrementare. 246

Figura 9.2 Programul din fig. 9.1 rulat "defavorabil" īn două procese. 246

Figura 9.3 Programul din fig. 9.1 rulat ca secţiune critică. 247

Figura 9.4 Un program cu secţiune critică. 248

Figura 9.5 Soluţia Peterson pentru secţiune critică. 248

Figura 9.6 Operaţiile P(s) şi V(s) apelate de procesul A.. 249

Figura 9.7 Soluţia cu semafor pentru secţiune critică. 250

Figura 9.8 Problema producătorului şi a consumatorului rezolvată cu semafoare. 251

Figura 9.9 Implementarea unei regiuni critice condiţionate. 253

Figura 9.10 Problema citirilor şi a scrierilor. 254

Figura 9.11 Un impas īntr-o intersecţie. 255

Figura 9.12 Impas provocat de două semafoare. 255

Figura 9.13 O situaţie de impas. 256

Figura 9.14 Un graf de alocare a resurselor. 258

Figura 9.15 Problema filozofilor. 260

Figura 9.16 Algoritmul bancherului 262

Figura 9.17 Implementarea algoritmului bancherului 264

Figura 9.18 Implementarea unui planificator. 266

Figura 9.19 Exemplu de evoluţie īn multiprogramare. 267

Figura 9.20 Schimbul RUN « READY īntre două procese. 268

Figura 9.21 Cozi gestionate de planificatorul proceselor. 268

Figura 10.1 Instanţe posibile ale unui program segmentat 271

Figura 10.2 Structura memoriei unui sistem de calcul 272

Figura 10.3 Fazele translatării unui program.. 274

Figura 10.4 Translatare de la sursă la fişier executabil 274

Figura 10.5 Formatul unei instrucţiuni maşină. 275

Figura 10.6 Funcţionarea CPU şi calculul funcţiei de translatare. 276

Figura 10.7 Alocarea memoriei la sistemele monoutilizator. 277

Figura 10.8 Exemplu de alocare cu partiţii fixe. 277

Figura 10.9 Evoluţia proceselor la alocarea cu partiţii variabile. 278

Figura 10.10 Colaţionarea de spaţii libere vecine. 279

Figura 10.11 Posibilităţi de compactare prin relocare totală sau parţială. 279

Figura 10.12 Translatarea unei pagini virtuale īntr-una fizică. 281

Figura 10.13 Două procese, īntr-o alocare paginată. 281

Figura 10.14 Folosirea īn comun a unui cod. 282

Figura 10.15 Alocare necontiguă prin segmentare. 283

Figura 10.16 Alocare segmentată şi paginată. 284

Figura 10.17 Alocarea de octeţi īntr‑o zonă liberă. 286

Figura 10.18 Comasarea a două zone libere adiacente. 287

Figura 10.19 Eliberarea unei zone ocupate. 287

Figura 10.20 Alocare īn sistem Buddy. 290

Figura 10.21 Anomalia lui Belady. 293

Figura 10.22 Evoluţia unei matrice de referinţe. 294

Figura 10.23 Proiectare directă pe memoria cache. 295

Figura 10.24 Proiectarea set ‑ asociativă. 295

Figura 11.1 Un pool de zone tampon. 298

Figura 11.2 Interacţiuni dintre procesorul central şi canalul de intrare / ieşire. 301

Figura 11.3 O primă soluţie a citirilor multiple. 303

Figura 11.4 Citiri multiple cu două zone tampon. 303

Figura 11.5 Scrieri multiple cu două zone tampon. 304

Figura 11.6 Descrierea unei partiţii hard disc. 305

Figura 11.7 Numerotări ale sectoarelor, cu şi fără interleaving. 307

Figura 11.8 Cereri de sectoare de pe aceeaşi pistă. 308

Figura 11.9 Cereri la disc la un moment dat 310

Figura 12.1 Plasarea articolelor īn sectoare vecine. 318

Figura 12.2 Structura unui fişier invers. 319

Figura 12.3 Fişier multilistă. 320

Figura 12.4 Fişier secvenţial‑indexat 321

Figura 12.5 Un B‑arbore. 323

Figura 12.6 Efectul inserării şi ştergerii īn B‑arbore. 323

Figura 12.7 Modificarea unui fişier pe echipament cu acces secvenţial 324

Figura 12.8 Modificarea unui articol īn acces secvenţial 325

Figura 12.9 Stergerea unui fişier īn acces secvenţial 326

Figura 12.10 Inserarea unui articol la legare īnlănţuită. 326

Figura 12.11 Provocarea unui "Divide by zero". 327

Figura 12.12 Director cu un singur nivel 333

Figura 12.13 Director cu două nivele. 334

Figura 12.14 Structura unui disc cu şase fişiere. 335

Figura 12.15 Evidenţa spaţiului prin listă īnlănţuită. 336

Figura 12.16 Evidenţa prin listă īnlănţuită şi indexată. 337

Figura 12.17 Alocarea indexată. 338