Sisteme de operare

Sisteme de operare
Autori: Florian Mircea Boian, Alexandru Vancea, Darius Bufnea, Claudiu Cobarzan, Rares Boian, Adrian Sterca, Dan Cojocar
Titlu: Sisteme de operare
Editura: Risoprint
Anul aparitiei: 2006
ISBN: 973-751-220-0, 978-973-751-220-8
Pagini: 350

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

Darius Bufnea