Systemy operacyjne Wydanie III sysop3

background image

Systemy operacyjne.
Wydanie III

Autor:

Andrew S. Tanenbaum

T³umaczenie: Rados³aw Meryk, Miko³aj Szczepaniak
ISBN: 978-83-246-2311-2
Tytu³ orygina³u:

Modern Operating Systems (3rd Edition)

Format: 172

×245, stron: 1288

Wszystko, co chcesz wiedzieæ o systemach operacyjnych!

• Jak dzia³aj¹ algorytmy szeregowania?
• Jakie mo¿liwoœci stoj¹ za wirtualizacj¹?
• Jak systemy operacyjne zarz¹dzaj¹ pamiêci¹?

Ta ksi¹¿ka to aktualne wydanie œwiatowego bestsellera, bêd¹cego kompletnym Ÿród³em
wiedzy na temat wspó³czesnych systemów operacyjnych. Autor tego podrêcznika –
Andrew S. Tanenbaum – przez wiele lat projektowa³ trzy systemy operacyjne lub
wspó³uczestniczy³ w ich projektowaniu, dziêki czemu mo¿e dzieliæ siê sw¹ ogromn¹
wiedz¹ i doœwiadczeniem praktyka. W tej publikacji szczególny nacisk k³adzie on na
mo¿liwie szczegó³ow¹ prezentacjê takich aspektów systemów, jak procesy, w¹tki,
zarz¹dzanie pamiêci¹, systemy plików, operacje wejœcia-wyjœcia, zakleszczenia,
projektowanie interfejsu, multimedia, dylematy zwi¹zane z wydajnoœci¹ czy najnowsze
trendy w projektach systemów operacyjnych. W trakcie lektury poznasz dok³adnie
systemy operacyjne Windows, Linux oraz Symbian. Pozycja ta stanowi niezast¹pione
kompendium wiedzy na temat systemów operacyjnych, zarówno dla studentów
informatyki, jak i wszystkich pasjonatów komputera.

• Rys historyczny systemów operacyjnych
• Sprzêt komputerowy – przegl¹d komponentów
• Rodzaje systemów operacyjnych
• Struktura systemów operacyjnych
• Obs³uga wywo³añ systemowych
• Zarz¹dzanie procesami i w¹tkami oraz komunikacja miêdzy nimi
• Szeregowanie zadañ
• Zarz¹dzanie pamiêci¹
• Obs³uga systemów plików
• Urz¹dzenia wejœcia-wyjœcia
• Metody zarz¹dzania energi¹
• Rozwi¹zywanie problemu zakleszczeñ
• Charakterystyka multimedialnych systemów operacyjnych
• Obs³uga systemów wieloprocesorowych
• Wirtualizacja
• Bezpieczeñstwo danych na poziomie systemu operacyjnego
• Zagro¿enia ze strony z³oœliwego oprogramowania
• System Linux – historia, budowa, dzia³anie
• System Windows Vista – studium przypadku
• System Symbian – przeznaczenie, dzia³anie, obs³uga

Kompendium wiedzy o wspó³czesnych systemach operacyjnych!

background image

5

SPIS TRECI

PRZEDMOWA

23

O AUTORZE

27

1

WPROWADZENIE

29

1.1.

CZYM JEST SYSTEM OPERACYJNY? 32
1.1.1.

System operacyjny jako rozszerzona maszyna 32

1.1.2.

System operacyjny jako meneder zasobów 34

1.2.

HISTORIA SYSTEMÓW OPERACYJNYCH 36
1.2.1.

Pierwsza generacja (1945 – 1955)
— lampy elektronowe 37

1.2.2.

Druga generacja (1955 – 1965)
— tranzystory i systemy wsadowe 37

1.2.3.

Trzecia generacja (1965 – 1980)
— ukady scalone i wieloprogramowo 40

1.2.4.

Czwarta generacja (1980 – czasy wspóczesne)
— komputery osobiste 45

1.3.

SPRZT KOMPUTEROWY — PRZEGLD 50
1.3.1.

Procesory 50

1.3.2.

Pami 54

1.3.3.

Dyski 58

1.3.4.

Tamy 59

background image

6

SPIS TRECI

1.3.5.

Urzdzenia wejcia-wyjcia 59

1.3.6.

Magistrale 63

1.3.7.

Uruchamianie komputera 66

1.4.

PRZEGLD SYSTEMÓW OPERACYJNYCH 67
1.4.1.

Systemy operacyjne komputerów mainframe 67

1.4.2.

Systemy operacyjne serwerów 68

1.4.3.

Wieloprocesorowe systemy operacyjne 68

1.4.4.

Systemy operacyjne komputerów osobistych 68

1.4.5.

Systemy operacyjne komputerów podrcznych 69

1.4.6.

Wbudowane systemy operacyjne 69

1.4.7.

Systemy operacyjne wzów sensorowych 70

1.4.8.

Systemy operacyjne czasu rzeczywistego 70

1.4.9.

Systemy operacyjne kart elektronicznych 71

1.5.

POJCIA DOTYCZCE SYSTEMÓW OPERACYJNYCH 72
1.5.1.

Procesy 72

1.5.2.

Przestrzenie adresowe 74

1.5.3.

Pliki 75

1.5.4.

Wejcie-wyjcie 79

1.5.5.

Zabezpieczenia 79

1.5.6.

Powoka 80

1.5.7.

Ontogeneza jest rekapitulacj filogenezy 81

1.6.

WYWOANIA SYSTEMOWE 85
1.6.1.

Wywoania systemowe do zarzdzania procesami 90

1.6.2.

Wywoania systemowe do zarzdzania plikami 93

1.6.3.

Wywoania systemowe do zarzdzania katalogami 94

1.6.4.

Róne wywoania systemowe 96

1.6.5.

Interfejs Win32 API systemu Windows 97

1.7.

STRUKTURA SYSTEMÓW OPERACYJNYCH 99
1.7.1.

Systemy monolityczne 100

1.7.2.

Systemy warstwowe 101

1.7.3.

Mikrojdra 102

1.7.4.

Model klient-serwer 105

1.7.5.

Maszyny wirtualne 106

1.7.6.

Egzojdra 110

1.8.

WIAT WEDUG JZYKA C 111
1.8.1.

Jzyk C 111

1.8.2.

Pliki nagówkowe 112

1.8.3.

Due projekty programistyczne 113

1.8.4.

Model fazy dziaania 114

background image

SPIS TRECI

7

1.9.

BADANIA DOTYCZCE SYSTEMÓW OPERACYJNYCH 115

1.10. PLAN POZOSTAEJ CZCI KSIKI 117

1.11. JEDNOSTKI MIAR 118

1.12. PODSUMOWANIE 119

2

PROCESY I WTKI

123

2.1.

PROCESY 123
2.1.1.

Model procesów 124

2.1.2.

Tworzenie procesów 126

2.1.3.

Koczenie dziaania procesów 129

2.1.4.

Hierarchie procesów 130

2.1.5.

Stany procesów 131

2.1.6.

Implementacja procesów 133

2.1.7.

Modelowanie wieloprogramowoci 135

2.2.

WTKI 137
2.2.1.

Wykorzystanie wtków 137

2.2.2.

Klasyczny model wtków 143

2.2.3.

Wtki POSIX 147

2.2.4.

Implementacja wtków w przestrzeni uytkownika 150

2.2.5.

Implementacja wtków w jdrze 153

2.2.6.

Implementacje hybrydowe 154

2.2.7.

Mechanizm aktywacji zarzdcy 155

2.2.8.

Wtki pop-up 157

2.2.9.

Przystosowywanie kodu jednowtkowego
do obsugi wielu wtków 158

2.3.

KOMUNIKACJA MIDZY PROCESAMI 161
2.3.1.

Wycig 162

2.3.2.

Regiony krytyczne 163

2.3.3.

Wzajemne wykluczanie
z wykorzystaniem aktywnego oczekiwania 165

2.3.4.

Wywoania sleep i wakeup 171

2.3.5.

Semafory 174

2.3.6.

Muteksy 177

2.3.7.

Monitory 182

2.3.8.

Przekazywanie komunikatów 188

2.3.9.

Bariery 191

background image

8

SPIS TRECI

2.4.

SZEREGOWANIE 193
2.4.1.

Wprowadzenie do szeregowania 193

2.4.2.

Szeregowanie w systemach wsadowych 201

2.4.3.

Szeregowanie w systemach interaktywnych 203

2.4.4.

Szeregowanie w systemach czasu rzeczywistego 210

2.4.5.

Oddzielenie strategii od mechanizmu 212

2.4.6.

Szeregowanie wtków 212

2.5.

KLASYCZNE PROBLEMY
KOMUNIKACJI MIDZY PROCESAMI 214
2.5.1.

Problem piciu filozofów 214

2.5.2.

Problem czytelników i pisarzy 218

2.6.

PRACE BADAWCZE NAD PROCESAMI I WTKAMI 219

2.7.

PODSUMOWANIE 220

3

ZARZDZANIE PAMICI

227

3.1.

BRAK ABSTRAKCJI PAMICI 228

3.2.

ABSTRAKCJA PAMICI: PRZESTRZENIE ADRESOWE 232
3.2.1.

Pojcie przestrzeni adresowej 232

3.2.2.

Wymiana pamici 235

3.2.3.

Zarzdzanie woln pamici 237

3.3.

PAMI WIRTUALNA 241
3.3.1.

Stronicowanie 243

3.3.2.

Tabele stron 247

3.3.3.

Przyspieszenie stronicowania 249

3.3.4.

Tabele stron dla pamici o duej objtoci 253

3.4.

ALGORYTMY ZASTPOWANIA STRON 257
3.4.1.

Optymalny algorytm zastpowania stron 258

3.4.2.

Algorytm NRU 258

3.4.3.

Algorytm FIFO 260

3.4.4.

Algorytm drugiej szansy 260

3.4.5.

Algorytm zegarowy 261

3.4.6.

Algorytm LRU 262

3.4.7.

Programowa symulacja algorytmu LRU 263

3.4.8.

Algorytm bazujcy na zbiorze roboczym 265

background image

SPIS TRECI

9

3.4.9.

Algorytm WSClock 269

3.4.10. Podsumowanie algorytmów zastpowania stron 271

3.5.

PROBLEMY PROJEKTOWE
SYSTEMÓW STRONICOWANIA 273
3.5.1.

Lokalne i globalne strategie alokacji pamici 273

3.5.2.

Zarzdzanie obcieniem 276

3.5.3.

Rozmiar strony 277

3.5.4.

Osobne przestrzenie instrukcji i danych 278

3.5.5.

Strony wspódzielone 279

3.5.6.

Biblioteki wspódzielone 281

3.5.7.

Pliki odwzorowane w pamici 283

3.5.8.

Strategia czyszczenia 284

3.5.9.

Interfejs pamici wirtualnej 284

3.6.

PROBLEMY IMPLEMENTACJI 285
3.6.1.

Zadania systemu operacyjnego
w zakresie stronicowania 286

3.6.2.

Obsuga bdów braku strony 287

3.6.3.

Wznawianie instrukcji 288

3.6.4.

Blokowanie stron w pamici 289

3.6.5.

Magazyn stron 290

3.6.6.

Oddzielenie strategii od mechanizmu 292

3.7.

SEGMENTACJA 294
3.7.1.

Implementacja klasycznej segmentacji 298

3.7.2.

Segmentacja ze stronicowaniem: MULTICS 298

3.7.3.

Segmentacja ze stronicowaniem: Intel Pentium 302

3.8.

BADANIA NAD ZARZDZANIEM PAMICI 307

3.9.

PODSUMOWANIE 308

4

SYSTEMY PLIKÓW

317

4.1.

PLIKI 319
4.1.1.

Nazwy plików 319

4.1.2.

Struktura pliku 321

4.1.3.

Typy plików 323

4.1.4.

Dostp do plików 325

4.1.5.

Atrybuty plików 325

background image

10

SPIS TRECI

4.1.6.

Operacje na plikach 327

4.1.7.

Przykadowy program
wykorzystujcy wywoania obsugi systemu plików 328

4.2.

KATALOGI 331
4.2.1.

Jednopoziomowe systemy katalogów 331

4.2.2.

Hierarchiczne systemy katalogów 332

4.2.3.

Nazwy cieek 333

4.2.4.

Operacje na katalogach 335

4.3.

IMPLEMENTACJA SYSTEMU PLIKÓW 337
4.3.1.

Ukad systemu plików 337

4.3.2.

Implementacja plików 338

4.3.3.

Implementacja katalogów 344

4.3.4.

Pliki wspódzielone 347

4.3.5.

Systemy plików o strukturze dziennika 349

4.3.6.

Ksigujce systemy plików 352

4.3.7.

Wirtualne systemy plików 354

4.4.

ZARZDZANIE SYSTEMEM PLIKÓW I OPTYMALIZACJA 357
4.4.1.

Zarzdzanie miejscem na dysku 357

4.4.2.

Kopie zapasowe systemu plików 365

4.4.3.

Spójno systemu plików 371

4.4.4.

Wydajno systemu plików 375

4.4.5

Defragmentacja dysków 380

4.5.

PRZYKADOWE SYSTEMY PLIKÓW 381
4.5.1.

Systemy plików na pytach CD-ROM 381

4.5.2.

System plików MS-DOS 387

4.5.3.

System plików V7 systemu UNIX 391

4.6.

BADANIA DOTYCZCE SYSTEMÓW PLIKÓW 394

4.7.

PODSUMOWANIE 394

5

WEJCIE-WYJCIE

399

5.1.

WARUNKI, JAKIE POWINIEN SPENIA
SPRZT WEJCIA-WYJCIA 400
5.1.1.

Urzdzenia wejcia-wyjcia 400

5.1.2.

Kontrolery urzdze 402

background image

SPIS TRECI

11

5.1.3.

Urzdzenia wejcia-wyjcia odwzorowane w pamici 403

5.1.4.

Bezporedni dostp do pamici (DMA) 407

5.1.5.

O przerwaniach raz jeszcze 410

5.2.

WARUNKI, JAKIE POWINNO SPENIA
OPROGRAMOWANIE WEJCIA-WYJCIA 415
5.2.1.

Cele oprogramowania wejcia-wyjcia 415

5.2.2.

Programowane wejcie-wyjcie 417

5.2.3.

Wejcie-wyjcie sterowane przerwaniami 419

5.2.4.

Wejcie-wyjcie z wykorzystaniem DMA 420

5.3.

WARSTWY OPROGRAMOWANIA WEJCIA-WYJCIA 420
5.3.1.

Procedury obsugi przerwa 421

5.3.2.

Sterowniki urzdze 422

5.3.3.

Oprogramowanie wejcia-wyjcia
niezalene od urzdze 426

5.3.4.

Oprogramowanie wejcia-wyjcia
w przestrzeni uytkownika 432

5.4.

DYSKI 435
5.4.1.

Sprzt 435

5.4.2.

Formatowanie dysków 452

5.4.3.

Algorytmy szeregowania da dostpu do dysku 456

5.4.4.

Obsuga bdów 459

5.4.5.

Stabilna pami masowa 462

5.5.

ZEGARY 466
5.5.1.

Sprzt obsugi zegara 466

5.5.2.

Oprogramowanie obsugi zegara 468

5.5.3.

Zegary programowe 471

5.6.

INTERFEJSY UYTKOWNIKÓW:
KLAWIATURA, MYSZ, MONITOR 473
5.6.1.

Oprogramowanie do wprowadzania danych 473

5.6.2.

Oprogramowanie do generowania wyjcia 479

5.7.

CIENKIE KLIENTY 496

5.8.

ZARZDZANIE ENERGI 499
5.8.1.

Problemy sprztowe 500

5.8.2.

Problemy po stronie systemu operacyjnego 501

5.8.3.

Problemy do rozwizania
w programach aplikacyjnych 507

background image

12

SPIS TRECI

5.9.

BADANIA DOTYCZCE WEJCIA-WYJCIA 509

5.10. PODSUMOWANIE 510

6

Zakleszczenia

517

6.1.

ZASOBY 518
6.1.1.

Zasoby z moliwoci wywaszczania i bez niej 518

6.1.2.

Zdobywanie zasobu 520

6.2.

WPROWADZENIE W TEMATYK ZAKLESZCZE 521
6.2.1.

Warunki powstawania zakleszcze zasobów 522

6.2.2.

Modelowanie zakleszcze 523

6.3.

ALGORYTM STRUSIA 526

6.4.

WYKRYWANIE ZAKLESZCZE I ICH USUWANIE 526
6.4.1.

Wykrywanie zakleszcze
z jednym zasobem kadego typu 527

6.4.2.

Wykrywanie zakleszcze
dla przypadku wielu zasobów kadego typu 529

6.4.3.

Usuwanie zakleszcze 532

6.5.

UNIKANIE ZAKLESZCZE 534
6.5.1.

Trajektorie zasobów 534

6.5.2.

Stany bezpieczne i niebezpieczne 535

6.5.3.

Algorytm bankiera dla pojedynczego zasobu 537

6.5.4.

Algorytm bankiera dla wielu zasobów 538

6.6.

PRZECIWDZIAANIE ZAKLESZCZENIOM 540
6.6.1.

Atak na warunek wzajemnego wykluczania 540

6.6.2.

Atak na warunek wstrzymania i oczekiwania 541

6.6.3.

Atak na warunek braku wywaszczania 541

6.6.4.

Atak na warunek cyklicznego oczekiwania 542

6.7.

INNE PROBLEMY 543
6.7.1.

Blokowanie dwufazowe 543

6.7.2.

Zakleszczenia komunikacyjne 544

6.7.3.

Uwizienia 546

6.7.4.

Zagodzenia 548

background image

SPIS TRECI

13

6.8.

BADANIA NA TEMAT ZAKLESZCZE 548

6.9.

PODSUMOWANIE 549

7

MULTIMEDIALNE

SYSTEMY OPERACYJNE

555

7.1.

WPROWADZENIE W TEMATYK MULTIMEDIÓW 556

7.2.

PLIKI MULTIMEDIALNE 561
7.2.1.

Kodowanie wideo 562

7.2.2.

Kodowanie audio 565

7.3.

KOMPRESJA WIDEO 567
7.3.1.

Standard JPEG 568

7.3.2.

Standard MPEG 571

7.4.

KOMPRESJA AUDIO 574

7.5.

SZEREGOWANIE PROCESÓW MULTIMEDIALNYCH 577
7.5.1.

Szeregowanie procesów homogenicznych 577

7.5.2.

Szeregowanie w czasie rzeczywistym
— przypadek ogólny 578

7.5.3.

Szeregowanie monotoniczne w czstotliwoci 580

7.5.4.

Algorytm szeregowania EDF 581

7.6.

WZORCE MULTIMEDIALNYCH SYSTEMÓW PLIKÓW 584
7.6.1.

Funkcje sterujce VCR 585

7.6.2.

Wideo niemal na yczenie 587

7.6.3.

Usuga wideo niemal na yczenie
z funkcjami magnetowidu 589

7.7.

ROZMIESZCZENIE PLIKÓW 591
7.7.1.

Umieszczanie pliku na pojedynczym dysku 591

7.7.2.

Dwie alternatywne strategie organizacji plików 592

7.7.3.

Rozmieszczenie plików w usudze wideo
niemal na yczenie 596

7.7.4.

Rozmieszczenie wielu plików na jednym dysku 598

7.7.5.

Rozmieszczanie plików na wielu dyskach 600

background image

14

SPIS TRECI

7.8.

BUFOROWANIE 603
7.8.1.

Buforowanie bloków 603

7.8.2.

Buforowanie plików 605

7.9.

SZEREGOWANIE OPERACJI DYSKOWYCH
W SYSTEMACH MULTIMEDIALNYCH 606
7.9.1.

Statyczne szeregowanie operacji dyskowych 606

7.9.2.

Dynamiczne szeregowanie operacji dyskowych 608

7.10. BADANIA NA TEMAT MULTIMEDIÓW 610

7.11. PODSUMOWANIE 610

8

SYSTEMY WIELOPROCESOROWE

617

8.1.

SYSTEMY WIELOPROCESOROWE 620
8.1.1.

Sprzt wieloprocesorowy 620

8.1.2.

Typy wieloprocesorowych systemów operacyjnych 630

8.1.3.

Synchronizacja w systemach wieloprocesorowych 634

8.1.4.

Szeregowanie w systemach wieloprocesorowych 640

8.2.

WIELOKOMPUTERY 646
8.2.1.

Sprzt wielokomputerów 647

8.2.2.

Niskopoziomowe oprogramowanie komunikacyjne 651

8.2.3.

Oprogramowanie komunikacyjne
poziomu uytkownika 654

8.2.4.

Zdalne wywoania procedur 657

8.2.5.

Rozproszona wspódzielona pami 660

8.2.6.

Szeregowanie systemów wielokomputerowych 665

8.2.7.

Równowaenie obcienia 666

8.3.

WIRTUALIZACJA 669
8.3.1.

Wymagania dla wirtualizacji 671

8.3.2.

Hipernadzorcy typu 1 672

8.3.3.

Hipernadzorcy typu 2 673

8.3.4.

Parawirtualizacja 675

8.3.5.

Wirtualizacja pamici 678

8.3.6.

Wirtualizacja wejcia-wyjcia 679

8.3.7.

Urzdzenia wirtualne 681

8.3.8.

Maszyny wirtualne na procesorach wielordzeniowych 681

8.3.9.

Problemy licencji 682

background image

SPIS TRECI

15

8.4.

SYSTEMY ROZPROSZONE 683
8.4.1.

Sprzt sieciowy 685

8.4.2.

Usugi i protokoy sieciowe 689

8.4.3.

Warstwa middleware bazujca na dokumentach 693

8.4.4.

Warstwa middleware bazujca na systemie plików 694

8.4.5.

Warstwa middleware bazujca na obiektach 700

8.4.6.

Warstwa middleware bazujca na koordynacji 701

8.4.7.

Siatki 707

8.5.

BADANIA DOTYCZCE
SYSTEMÓW WIELOPROCESOROWYCH 708

8.6.

PODSUMOWANIE 710

9

Bezpieczestwo

717

9.1.

RODOWISKO BEZPIECZESTWA 719
9.1.1.

Zagroenia 720

9.1.2.

Intruzi 721

9.1.3.

Przypadkowa utrata danych 723

9.2.

PODSTAWY KRYPTOGRAFII 723
9.2.1.

Kryptografia z kluczem tajnym 725

9.2.2.

Kryptografia z kluczem publicznym 726

9.2.3.

Funkcje jednokierunkowe 727

9.2.4.

Podpisy cyfrowe 727

9.2.5.

Modu TPM 729

9.3.

MECHANIZMY OCHRONY 730
9.3.1.

Domeny ochrony 730

9.3.2.

Listy kontroli dostpu 733

9.3.3.

Uprawnienia 736

9.3.4.

Systemy zaufane 740

9.3.5.

Zaufana baza obliczeniowa 742

9.3.6.

Modele formalne bezpiecznych systemów 743

9.3.7.

Bezpieczestwo wielopoziomowe 745

9.3.8.

Ukryte kanay 748

9.4.

UWIERZYTELNIANIE 753
9.4.1.

Uwierzytelnianie z wykorzystaniem hase 755

background image

16

SPIS TRECI

9.4.2.

Uwierzytelnianie z wykorzystaniem
obiektu fizycznego 765

9.4.3.

Uwierzytelnianie z wykorzystaniem
technik biometrycznych 769

9.5.

ATAKI Z WEWNTRZ 772
9.5.1.

Bomby logiczne 773

9.5.2.

Tylne drzwi 773

9.5.3.

Podszywanie si pod ekran logowania 774

9.6.

WYKORZYSTYWANIE BDÓW W KODZIE 776
9.6.1.

Ataki z wykorzystaniem przepenienia bufora 777

9.6.2.

Ataki z wykorzystaniem acuchów formatujcych 780

9.6.3.

Ataki powrotu do biblioteki libc 782

9.6.4.

Ataki z wykorzystaniem
przepenie liczb cakowitych 783

9.6.5.

Ataki polegajce na wstrzykiwaniu kodu 784

9.6.6.

Ataki polegajce na rozszerzaniu uprawnie 786

9.7.

ZOLIWE OPROGRAMOWANIE 786
9.7.1.

Konie trojaskie 790

9.7.2.

Wirusy 793

9.7.3.

Robaki 805

9.7.4.

Oprogramowanie szpiegujce 808

9.7.5.

Rootkity 813

9.8.

RODKI OBRONY 819
9.8.1.

Firewalle 820

9.8.2.

Techniki antywirusowe i antyantywirusowe 822

9.8.3.

Podpisywanie kodu 830

9.8.4.

Wtrcanie do wizienia 832

9.8.5.

Wykrywanie wama z uyciem modeli 833

9.8.6.

Izolowanie kodu mobilnego 835

9.8.7.

Bezpieczestwo Javy 840

9.9.

BADANIA DOTYCZCE BEZPIECZESTWA 843

9.10. PODSUMOWANIE 844

background image

SPIS TRECI

17

10 Pierwsze studium przypadku: Linux

851

10.1. HISTORIA SYSTEMÓW UNIX I LINUX 852

10.1.1. UNICS 852
10.1.2. PDP-11 UNIX 853
10.1.3. Przenony UNIX 855
10.1.4. Berkeley UNIX 856
10.1.5

Standard UNIX 857

10.1.6. MINIX 858
10.1.7. Linux 860

10.2. PRZEGLD SYSTEMU LINUX 863

10.2.1. Cele Linuksa 863
10.2.2. Interfejsy systemu Linux 865
10.2.3. Powoka 867
10.2.4. Programy uytkowe systemu Linux 870
10.2.5. Struktura jdra 872

10.3. PROCESY W SYSTEMIE LINUX 876

10.3.1. Podstawowe pojcia 876
10.3.2. Wywoania systemowe Linuksa

zwizane z zarzdzaniem procesami 879

10.3.3. Implementacja procesów i wtków w systemie Linux 884
10.3.4. Szeregowanie w systemie Linux 892
10.3.5. Uruchamianie systemu Linux 896

10.4. ZARZDZANIE PAMICI W SYSTEMIE LINUX 899

10.4.1. Podstawowe pojcia 899
10.4.2. Wywoania systemowe Linuksa

odpowiedzialne za zarzdzanie pamici 903

10.4.3. Implementacja zarzdzania pamici w systemie Linux 904
10.4.4. Stronicowanie w systemie Linux 911

10.5. OPERACJE WEJCIA-WYJCIA W SYSTEMIE LINUX 916

10.5.1. Podstawowe pojcia 916
10.5.2. Obsuga sieci 917
10.5.3. Wywoania systemowe wejcia-wyjcia

w systemie Linux 919

10.5.4. Implementacja wejcia-wyjcia w systemie Linux 921
10.5.5. Moduy w systemie Linux 925

background image

18

SPIS TRECI

10.6. SYSTEM PLIKÓW LINUKSA 925

10.6.1. Podstawowe pojcia 926
10.6.2. Wywoania systemu plików w Linuksie 931
10.6.3. Implementacja systemu plików Linuksa 936
10.6.4. NFS — sieciowy system plików 945

10.7. BEZPIECZESTWO W SYSTEMIE LINUX 953

10.7.1. Podstawowe pojcia 953
10.7.2. Wywoania systemowe Linuksa

zwizane z bezpieczestwem 956

10.7.3. Implementacja bezpieczestwa w systemie Linux 957

10.8. PODSUMOWANIE 958

11 Drugie studium przypadku:

Windows Vista

965

11.1. HISTORIA SYSTEMU WINDOWS VISTA 965

11.1.1. Lata osiemdziesite: MS-DOS 966
11.1.2. Lata dziewidziesite: Windows na bazie MS-DOS-a 967
11.1.3. Lata dwutysiczne: Windows na bazie NT 967
11.1.4. Windows Vista 971

11.2. PROGRAMOWANIE SYSTEMU WINDOWS VISTA 972

11.2.1. Rdzenny interfejs programowania aplikacji

(API) systemu NT 975

11.2.2. Interfejs programowania aplikacji Win32 980
11.2.3. Rejestr systemu Windows 984

11.3. STRUKTURA SYSTEMU 987

11.3.1. Struktura systemu operacyjnego 988
11.3.2. Uruchamianie systemu Windows Vista 1006
11.3.3. Implementacja menedera obiektów 1007
11.3.4. Podsystemy, biblioteki DLL

i usugi trybu uytkownika 1019

11.4. PROCESY I WTKI SYSTEMU WINDOWS VISTA 1023

11.4.1. Podstawowe pojcia 1023
11.4.2. Wywoania API zwizane z zarzdzaniem zadaniami,

procesami, wtkami i wóknami 1029

11.4.3. Implementacja procesów i wtków 1036

background image

SPIS TRECI

19

11.5. ZARZDZANIE PAMICI 1045

11.5.1. Podstawowe pojcia 1045
11.5.2. Wywoania systemowe

zwizane z zarzdzaniem pamici 1051

11.5.3. Implementacja zarzdzania pamici 1052

11.6. PAMI PODRCZNA SYSTEMU WINDOWS VISTA 1063

11.7. OPERACJE WEJCIA-WYJCIA

W SYSTEMIE WINDOWS VISTA 1066
11.7.1. Podstawowe pojcia 1067
11.7.2. Wywoania API zwizane z operacjami wejcia-wyjcia 1069
11.7.3. Implementacja systemu wejcia-wyjcia 1072

11.8. SYSTEM PLIKÓW NT SYSTEMU WINDOWS 1079

11.8.1. Podstawowe pojcia 1079
11.8.2. Implementacja systemu plików NTFS 1081

11.9. BEZPIECZESTWO W SYSTEMIE WINDOWS VISTA 1093

11.9.1. Podstawowe pojcia 1095
11.9.2. Wywoania API zwizane z bezpieczestwem 1097
11.9.3. Implementacja bezpieczestwa 1098

11.10. PODSUMOWANIE 1102

12 Trzecie studium przypadku:

Symbian OS

1107

12.1. HISTORIA SYSTEMU SYMBIAN OS 1108

12.1.1. Korzenie systemu operacyjnego Symbian OS:

Psion i EPOC 1108

12.1.2. Symbian OS 6 1110
12.1.3. Symbian OS 7 1111
12.1.4. Wspóczesna wersja systemu operacyjnego

Symbian OS 1111

12.2. PRZEGLD SYSTEMU SYMBIAN OS 1111

12.2.1. Obiektowo 1112
12.2.2. Projekt mikrojdra 1113
12.2.3. Nanojdro systemu Symbian OS 1114
12.2.4. Dostp do zasobów w trybie klient-serwer 1115

background image

20

SPIS TRECI

12.2.5. Funkcje znane z wikszych systemów operacyjnych 1116
12.2.6. Komunikacja i multimedia 1117

12.3. PROCESY I WTKI W SYSTEMIE SYMBIAN OS 1117

12.3.1. Wtki i nanowtki 1118
12.3.2. Procesy 1119
12.3.3. Obiekty aktywne 1120
12.3.4. Komunikacja midzyprocesowa 1121

12.4. ZARZDZANIE PAMICI 1121

12.4.1. Systemy pozbawione pamici wirtualnej 1122
12.4.2. Adresowanie pamici w systemie Symbian OS 1124

12.5. WEJCIE I WYJCIE 1127

12.5.1. Sterowniki urzdze 1127
12.5.2. Rozszerzenia jdra 1128
12.5.3. Bezporedni dostp do pamici (DMA) 1128
12.5.4. Przypadek specjalny: noniki pamici 1129
12.5.5. Blokujce operacje wejcia-wyjcia 1129
12.5.6. Noniki wymienne 1130

12.6. SYSTEMY PRZECHOWYWANIA DANYCH 1130

12.6.1. Systemy plików dla urzdze mobilnych 1131
12.6.2. Systemy plików systemu operacyjnego Symbian OS 1132
12.6.3. Bezpieczestwo i ochrona systemu plików 1132

12.7. BEZPIECZESTWO W SYSTEMIE SYMBIAN OS 1133

12.8. KOMUNIKACJA W SYSTEMIE SYMBIAN OS 1136

12.8.1. Podstawowa infrastruktura 1136
12.8.2. Bardziej szczegóowa analiza

infrastruktury komunikacji 1137

12.9. PODSUMOWANIE 1141

13 Projekt systemu operacyjnego

1143

13.1. ISTOTA PROBLEMÓW ZWIZANYCH

Z PROJEKTOWANIEM SYSTEMÓW 1144
13.1.1. Cele 1144
13.1.2. Dlaczego projektowanie systemów operacyjnych

jest takie trudne? 1146

background image

SPIS TRECI

21

13.2. PROJEKT INTERFEJSU 1148

13.2.1. Zalecenia projektowe 1148
13.2.2. Paradygmaty 1150
13.2.3. Interfejs wywoa systemowych 1155

13.3. IMPLEMENTACJA 1158

13.3.1. Struktura systemu 1158
13.3.2. Mechanizm kontra strategia 1163
13.3.3. Ortogonalno 1164
13.3.4. Nazewnictwo 1165
13.3.5. Czas kojarzenia nazw 1167
13.3.6. Struktury statyczne kontra struktury dynamiczne 1168
13.3.7. Implementacja z góry na dó

kontra implementacja z dou do góry 1170

13.3.8. Przydatne techniki 1171

13.4. WYDAJNO 1177

13.4.1. Dlaczego systemy operacyjne s powolne? 1177
13.4.2. Co naley optymalizowa? 1179
13.4.3. Dylemat przestrze – czas 1180
13.4.4. Buforowanie 1183
13.4.5. Wskazówki 1185
13.4.6. Wykorzystywanie efektu lokalnoci 1185
13.4.7. Optymalizacja z myl o typowych przypadkach 1186

13.5. ZARZDZANIE PROJEKTEM 1186

13.5.1. Mityczny osobomiesic 1187
13.5.2. Struktura zespou 1189
13.5.3. Znaczenie dowiadczenia 1191
13.5.4. Nie istnieje jedno cudowne rozwizanie 1192

13.6. TRENDY W WIECIE PROJEKTÓW

SYSTEMÓW OPERACYJNYCH 1192
13.6.1. Wirtualizacja 1193
13.6.2. Ukady wielordzeniowe 1193
13.6.3. Systemy operacyjne

z wielkimi przestrzeniami adresowymi 1194

13.6.4. Komunikacja sieciowa 1195
13.6.5. Systemy równolege i rozproszone 1196
13.6.6. Multimedia 1196
13.6.7. Komputery zasilane bateriami 1197

background image

22

SPIS TRECI

13.6.8. Systemy wbudowane 1197
13.6.9. Wzy czujników 1198

13.7. PODSUMOWANIE 1198

14 Lista publikacji i bibliografia

1203

14.1. SUGEROWANE PUBLIKACJE DODATKOWE 1203

14.1.1. Publikacje wprowadzajce i ogólne 1204
14.1.2. Procesy i wtki 1204
14.1.3. Zarzdzanie pamici 1205
14.1.4. Wejcie-wyjcie 1205
14.1.5. Systemy plików 1206
14.1.6. Zakleszczenia 1206
14.1.7. Multimedialne systemy operacyjne 1207
14.1.8. Systemy wieloprocesorowe 1208
14.1.9. Bezpieczestwo 1209
14.1.10. System Linux 1211
14.1.11. System Windows Vista 1212
14.1.12. System Symbian OS 1213
14.1.13. Zasady projektowe 1213

14.2. BIBLIOGRAFIA W PORZDKU ALFABETYCZNYM 1214

Skorowidz

1247

background image

123

2

PROCESY I WTKI

Zanim rozpocznie si szczegóowe studium tego, w jaki sposób systemy operacyjne
s zaprojektowane i skonstruowane, warto przypomnie, e kluczowym pojciem we
wszystkich systemach operacyjnych jest proces: abstrakcja dziaajcego programu.
Wszystkie pozostae elementy systemu operacyjnego bazuj na pojciu procesu,
dlatego jest bardzo wane, aby projektant systemu operacyjnego (a take student) jak
najszybciej dobrze zapozna si z pojciem procesu.

Procesy to jedne z najstarszych i najwaniejszych abstrakcji wystpujcych w sys-

temach operacyjnych. Zapewniaj one moliwo wykonywania (pseudo-) wspó-
bienych operacji nawet wtedy, gdy dostpny jest tylko jeden procesor. Przekszta-
caj one pojedynczy procesor CPU w wiele wirtualnych procesorów. Bez abstrakcji
procesów istnienie wspóczesnej techniki komputerowej byoby niemoliwe. W niniej-
szym rozdziale przedstawimy szczegóowe informacje na temat tego, czym s procesy
oraz ich pierwsi kuzynowie — wtki.

2.1. PROCESY

2.1

PROCESY

Wszystkie nowoczesne komputery bardzo czsto wykonuj wiele operacji jedno-
czenie. Osoby przyzwyczajone do pracy z komputerami osobistymi mog nie by do
koca wiadome tego faktu, zatem kilka przykadów pozwoli przybliy to zagadnie-
nie. Na pocztek rozwamy serwer WWW. dania stron WWW mog nadchodzi
z wielu miejsc. Kiedy przychodzi danie, serwer sprawdza, czy potrzebna strona
znajduje si w pamici podrcznej. Jeli tak, jest przesyana do klienta. Jeli nie,
inicjowane jest danie dyskowe w celu jej pobrania. Jednak z perspektywy procesora

background image

124

PROCESY I WTKI

ROZ. 2

obsuga da dyskowych zajmuje wieczno. W czasie oczekiwania na zakocze-
nie obsugi dania na dysk moe nadej wiele kolejnych da. Jeli w systemie
jest wiele dysków niektóre z da moe by skierowanych na inne dyski na dugo
przed obsueniem pierwszego dania. Oczywiste, e potrzebny jest sposób zamo-
delowania i zarzdzania t wspóbienoci. Do tego celu mona wykorzysta procesy
(a w szczególnoci wtki).

Teraz rozwamy komputer osobisty uytkownika. Podczas rozruchu systemu

nastpuje start wielu procesów. Czsto uytkownik nie jest tego wiadomy. Na przy-
kad moe by uruchomiony proces oczekujcy na wchodzce wiadomoci e-mail.
Inny uruchomiony proces moe dziaa w imieniu programu antywirusowego i spraw-
dza okresowo, czy s dostpne jakie nowe definicje wirusów. Dodatkowo mog
dziaa jawne procesy uytkownika — na przykad drukujce pliki lub wypalajce
pyt CD — podczas gdy uytkownik przeglda strony WWW. Dziaaniami tymi trzeba
zarzdza. W tym przypadku bardzo przydaje si system z obsug wieloprogramo-
woci, obsugujcy wiele procesów jednoczenie.

W kadym systemie wieloprogramowym procesor szybko przecza si pomidzy

procesami, powicajc kademu z nich po kolei dziesitki bd setki milisekund.
Chocia cile rzecz biorc w dowolnym momencie procesor realizuje tylko jeden
proces, w cigu sekundy moe obsuy ich wiele, co daje iluzj wspóbienoci.
Czasami w tym kontekcie mówi si o pseudowspóbienoci, dla odrónienia jej
od rzeczywistej, sprztowej wspóbienoci systemów wieloprocesorowych (wypo-
saonych w dwa procesory wspódzielce t sam fizyczn pami lub wiksz liczb
takich procesorów). ledzenie wielu równolegych dziaa jest bardzo trudne. Z tego
powodu projektanci systemów operacyjnych w cigu wielu lat opracowali model poj-
ciowy (procesów sekwencyjnych), które uatwiaj obsug wspóbienoci. Ten
model, jego zastosowania oraz kilka innych konsekwencji stanowi temat niniejszego
rozdziau.

2.1.1. Model procesów

W tym modelu cae oprogramowanie moliwe do uruchomienia w komputerze —
czasami wcznie z systemem operacyjnym — jest zorganizowane w postaci zbioru
procesów sekwencyjnych (lub w skrócie procesów). Proces jest egzemplarzem
uruchomionego programu wcznie z biecymi wartociami licznika programu, reje-
strów i zmiennych. Pojciowo kady proces ma wasny wirtualny procesor CPU.
Oczywicie w rzeczywistoci procesor fizyczny przecza si od procesu do procesu.
Aby jednak zrozumie system, znacznie atwiej jest myle o kolekcji procesów dzia-
ajcych (pseudo) wspóbienie, ni próbowa ledzi to, jak procesor przecza si od
programu do programu. To szybkie przeczanie si procesora jest okrelane jako
wieloprogramowo, o czy mówilimy w rozdziale 1.

Na rysunku 2.1(a) pokazalimy komputer, w którym w pamici dziaaj w trybie

wieloprogramowym cztery programy. Na rysunku 2.1(b) wida cztery procesy —

background image

PODROZ. 2.1

PROCESY

125

kady ma wasny przepyw sterowania (tzn. wasny logiczny licznik programu) i kady
dziaa niezalenie od pozostaych. Oczywicie jest tylko jeden fizyczny licznik pro-
gramu, dlatego kiedy dziaa wybrany proces, jego logiczny licznik programu jest
kopiowany do rzeczywistego licznika programu. Kiedy proces koczy dziaanie (na
pewien czas), jego fizyczny licznik programu jest zapisywany w logicznym liczniku
programu umieszczonym w pamici. Na rysunku 2.1(c) wida, e w duszym prze-
dziale czasu nastpi postp we wszystkich procesach, jednak w danym momencie
dziaa tylko jeden proces.

Rysunek 2.1. (a) Cztery programy uruchomione w trybie wieloprogramowym;
(b) pojciowy model czterech niezalenych od siebie procesów sekwencyjnych;
(c) w wybranym momencie jest aktywny tylko jeden program

W tym rozdziale zaoymy, e jest tylko jeden procesor CPU. Coraz czciej jednak

takie zaoenie okazuje si nieprawdziwe. Nowe ukady czsto s wielordzeniowe —
maj dwa procesory, cztery lub wiksz ich liczb. O ukadach wielordzeniowych
i systemach wieloprocesorowych powiemy wicej w rozdziale 8. Na razie bdzie
prociej, jeli przyjmiemy, e maszyna wykorzystuje jednorazowo tylko jeden proce-
sor. Jeli zatem mówimy, e procesor w danym momencie moe wykonywa tylko
jeden proces, to jeli zawiera dwa rdzenie (lub dwa procesory), na kadym z nich
w okrelonym momencie moe dziaa jeden proces.

Ze wzgldu na szybkie przeczanie si procesora pomidzy procesami, tempo,

w jakim proces wykonuje obliczenia, nie jest jednolite, a nawet trudne do powtórzenia
w przypadku ponownego uruchomienia tego samego procesu. A zatem nie mona
programowa procesów z wbudowanymi zaoeniami dotyczcymi czasu dziaania.
Rozwamy dla przykadu proces wejcia-wyjcia, który uruchamia tam streamera
w celu odtworzenia plików z kopii zapasowej, nastpnie wykonuje 10 000 iteracji pustej
ptli w celu rozpdzenia streamera do waciwej szybkoci i, na koniec, wydaje
polecenie przeczytania pierwszego rekordu. Jeli procesor zdecyduje si na prze-
czenie do innego procesu podczas trwania ptli, w której streamer si rozpdza,
proces obsugi tamy nie bdzie móg ponownie si uruchomi do momentu, kiedy
pierwszy rekord znajdzie si za gowic czytajc. Kiedy proces obowizuj tak
cise wymagania dziaania w czasie rzeczywistym — to znaczy okrelone zdarze-
nia musz wystpi w cigu okrelonej liczby milisekund — trzeba przedsiwzi

background image

126

PROCESY I WTKI

ROZ. 2

specjalne rodki w celu zapewnienia, e tak si stanie. Zazwyczaj jednak wikszoci
procesów nie dotycz ograniczenia wieloprogramowoci procesora czy te wzgld-
ne szybkoci dziaania rónych procesów.

Rónica pomidzy procesem a programem jest subtelna, ale ma kluczowe znacze-

nie. Do wyjanienia tej rónicy posuymy si analogi. Zaómy, e pewien infor-
matyk o zdolnociach kulinarnych piecze urodzinowy tort dla swojej córki. Ma do
dyspozycji przepis na tort urodzinowy oraz kuchni dobrze wyposaon we wszystkie
skadniki: mk, jajka, cukier, aromat waniliowy itp. W tym przykadzie przepis spe-
nia rol programu (tzn. algorytmu wyraonego w odpowiedniej notacji), informatyk
jest procesorem (CPU), natomiast skadniki ciasta odgrywaj rol danych wejcio-
wych. Proces jest operacj, w której informatyk czyta przepis, dodaje skadniki
i piecze ciasto.

Wyobramy sobie teraz, e z krzykiem wbiega syn informatyka i mówi, e u-

dlia go pszczoa. Informatyk zapamituje, w którym miejscu przepisu si znajdowa
(zapisuje biecy stan procesu), bierze ksik o pierwszej pomocy i zaczyna post-
powa zgodnie z zapisanymi w niej wskazówkami. W tym momencie widzimy prze-
czenie si procesora z jednego procesu (pieczenie) do procesu o wyszym priory-
tecie (udzielanie pomocy medycznej). Przy czym kady z procesów ma inny program
(przepis na ciasto, ksika pierwszej pomocy medycznej). Kiedy informatyk poradzi
sobie z opatrzeniem udlenia, powraca do pieczenia ciasta i kontynuuje od miejsca,
w którym skoczy.

Kluczowe znaczenie ma uwiadomienie sobie, e proces jest pewnym dziaaniem.

Charakteryzuje si programem, wejciem, wyjciem i stanem. Jeden procesor moe
by wspódzielony przez kilka procesów za pomoc algorytmu szeregowania. Algo-
rytm ten decyduje, w którym zatrzyma prac nad jednym programem i rozpocz
obsug innego.

Warto zwróci uwag na to, e jeli program uruchomi si dwa razy, liczy si

jako dwa procesy. Na przykad czsto istnieje moliwo dwukrotnego uruchomienia
edytora tekstu lub jednoczesnego drukowania dwóch plików, jeli system kompu-
terowy jest wyposaony w dwie drukarki. Fakt, e dwa dziaajce procesy korzystaj
z tego samego programu, nie ma znaczenia — s to oddzielne procesy. System ope-
racyjny moe mie moliwo wspódzielenia kodu pomidzy nimi w taki sposób,
e w pamici znajduje si jedna kopia. Jest to jednak szczegó techniczny, który nie
zmienia faktu dziaania dwóch procesów.

2.1.2. Tworzenie procesów

Systemy operacyjne wymagaj sposobu tworzenia procesów. W bardzo prostych
systemach lub w systemach zaprojektowanych do uruchamiania tylko jednej aplikacji
(na przykad kontrolera w kuchence mikrofalowej), bywa moliwe zainicjowanie
wszystkich potrzebnych procesów natychmiast po uruchomieniu systemu. Jednak

background image

PODROZ. 2.1

PROCESY

127

w systemach ogólnego przeznaczenia potrzebny jest sposób tworzenia i niszczenia
procesów podczas ich dziaania. W tym punkcie przyjrzymy si niektórym sporód
tych mechanizmów.

S cztery podstawowe zdarzenia, które powoduj tworzenie procesów:

1.

Inicjalizacja systemu.

2.

Uruchomienie wywoania systemowego tworzcego proces przez dziaajcy

proces.

3.

danie uytkownika utworzenia nowego procesu.

4.

Zainicjowanie zadania wsadowego.

W momencie rozruchu systemu operacyjnego zwykle tworzonych jest kilka procesów.
Niektóre z nich s procesami pierwszego planu — to znaczy s to procesy, które
komunikuj si z uytkownikami i wykonuj dla nich prac. Inne s procesami
drugoplanowymi, które nie s powizane z okrelonym uytkownikiem, ale spe-
niaj pewn specyficzn funkcj. Na przykad jeden proces drugoplanowy moe by
zaprojektowany do akceptacji wchodzcych wiadomoci e-mail. Taki proces moe
by upiony przez wikszo dnia i nagle si uaktywni, kiedy nadchodzi wiadomo
e-mail. Inny proces drugoplanowy moe by zaprojektowany do akceptacji wchodz-
cych da stron WWW zapisanych na serwerze. Proces ten budzi si w momencie
odebrania dania strony WWW w celu jego obsuenia. Procesy dziaajce na drugim
planie, które s przeznaczone do obsugi pewnych operacji, takich jak odbiór wiado-
moci e-mail, serwowanie stron WWW, aktualnoci, drukowanie itp., s okrelane
jako demony. W duych systemach zwykle dziaaj dziesitki takich procesów.
W systemie UNIX, aby wywietli list dziaajcych procesów, mona skorzysta
z programu

ps

. W systemie Windows mona skorzysta z menedera zada.

Procesy mog by tworzone nie tylko w czasie rozruchu, ale take póniej. Dzia-

ajcy proces czsto wydaje wywoanie systemowe w celu utworzenia jednego lub
kilku nowych procesów majcych pomóc w realizacji zadania. Tworzenie nowych
procesów jest szczególnie przydatne, kiedy prac do wykonania mona atwo sfor-
muowa w kontekcie kilku zwizanych ze sob, ale poza tym niezalenych, wspó-
dziaajcych ze sob procesów. Jeli na przykad przez sie jest pobierana dua
ilo danych w celu ich póniejszego przetwarzania, to mona utworzy jeden proces,
który pobiera dane i umieszcza je we wspódzielonym buforze, oraz drugi proces, który
usuwa dane z bufora i je przetwarza. W systemie wieloprocesorowym, w którym
kady z procesów moe dziaa na innym procesorze, zadanie moe by wykona-
ne w krótszym czasie.

W systemach interaktywnych uytkownicy mog uruchomi program poprzez

wpisanie polecenia lub kliknicie (ewentualnie dwukrotne kliknicie) ikony. Wyko-
nanie dowolnej z tych operacji inicjuje nowy proces i uruchamia w nim wskazany

background image

128

PROCESY I WTKI

ROZ. 2

program. W systemach uniksowych bazujcych na systemie X Window nowy proces
przejmuje okno, w którym zosta uruchomiony. W systemie Microsoft Windows po
uruchomieniu procesu nie ma on przypisanego okna. Moe on jednak stworzy jedno
(lub wicej) okien i wikszo systemów to robi. W obydwu systemach uytkownicy
maj moliwo jednoczesnego otwarcia wielu okien, w których dziaaj jakie pro-
cesy. Za pomoc myszy uytkownik moe wybra okno i komunikowa si z proce-
sem, na przykad podawa dane wejciowe wtedy, kiedy s potrzebne.

Ostatnia sytuacja, w której s tworzone procesy, dotyczy tylko systemów wsa-

dowych w duych komputerach mainframe. W systemach tego typu uytkownicy
mog przesya do systemu zadania wsadowe (czasami zdalnie). Kiedy system ope-
racyjny zdecyduje, e ma zasoby wystarczajce do uruchomienia innego zadania,
tworzy nowy proces i uruchamia nastpne zadanie z kolejki.

Z technicznego punktu widzenia we wszystkich tych sytuacjach proces tworzy

si poprzez zlecenie istniejcemu procesowi wykonania wywoania systemowego
tworzenia procesów. Moe to by dziaajcy proces uytkownika, proces systemowy,
wywoany z klawiatury lub za pomoc myszy, albo proces zarzdzania zadaniami
systemowymi. Proces ten wykonuje wywoanie systemowe tworzce nowy proces.
To wywoanie systemowe zleca systemowi operacyjnemu utworzenie nowego procesu
i wskazuje, w sposób poredni lub bezporedni, jaki program naley w nim uruchomi.

W systemie UNIX istnieje tylko jedno wywoanie systemowe do utworzenia

nowego procesu:

fork

. Wywoanie to tworzy dokadny klon procesu wywoujcego.

Po wykonaniu instrukcji

fork

procesy rodzic i dziecko maj ten sam obraz pamici,

te same zmienne rodowiskowe oraz te same otwarte pliki. Po prostu s identyczne.
Wtedy zazwyczaj proces-dziecko uruchamia wywoanie

execve

lub podobne wywoa-

nie systemowe w celu zmiany obrazu pamici i uruchomienia nowego programu.
Kiedy uytkownik wpisze polecenie w rodowisku powoki, na przykad

sort

, powoka

najpierw tworzy proces-dziecko za pomoc wywoania

fork

, a nastpnie proces-dzie-

cko wykonuje polecenie

sort

. Powodem, dla którego dokonuje si ten dwuetapowy

proces, jest umoliwienie procesowi-dziecku manipulowania deskryptorami plików
po wykonaniu wywoania

fork

, ale przed wywoaniem

execve

w celu przekierowania

standardowego wejcia, standardowego wyjcia oraz standardowego urzdzenia bdów.

Dla odrónienia w systemie Windows jedna funkcja interfejsu Win32 —

Create

´Process

— jest odpowiedzialna zarówno za utworzenie procesu, jak i zaadowanie

odpowiedniego programu do nowego procesu. Wywoanie to ma 10 parametrów. S
to program do uruchomienia, parametry wiersza polecenia przekazywane do pro-
gramu, róne atrybuty zabezpiecze, bity decydujce o tym, czy otwarte pliki bd
dziedziczone, informacje dotyczce priorytetów, specyfikacja okna, jakie ma by utwo-
rzone dla procesu (jeli proces ma mie okno), oraz wskanik do struktury, w której
s zwracane do procesu wywoujcego informacje o nowo tworzonym procesie. Oprócz
wywoania

CreateProcess

interfejs Win32 zawiera okoo 100 innych funkcji do zarz-

dzania i synchronizowania procesów oraz wykonywania powizanych z tym operacji.

background image

PODROZ. 2.1

PROCESY

129

Zarówno w systemie UNIX, jak i Windows po utworzeniu procesu rodzic i dziecko

maj osobne przestrzenie adresowe. Jeli dowolny z procesów zmieni sowo w swojej
przestrzeni adresowej, zmiana nie jest widoczna dla drugiego procesu. W systemie
UNIX pocztkowa przestrze adresowa procesu-dziecka jest kopi przestrzeni adre-
sowej procesu-rodzica. S to jednak cakowicie odrbne przestrzenie adresowe.
Zapisywalna pami nie jest wspódzielona pomidzy procesami (w niektórych imple-
mentacjach Uniksa tekst programu jest wspódzielony pomidzy procesami rodzica
i dziecka, poniewa nie moe on by modyfikowany). Nowo utworzony proces moe
jednak wspódzieli niektóre inne zasoby procesu swojego twórcy — na przykad
otwarte pliki. W systemie Windows przestrzenie adresowe procesów rodzica i dziecka
od samego pocztku s róne.

2.1.3. Koczenie dziaania procesów

Po utworzeniu proces zaczyna dziaanie i wykonuje swoje zadania. Nic jednak nie
trwa wiecznie — nawet procesy. Prdzej czy póniej nowy proces zakoczy swoje
dziaanie. Zwykle dzieje si to z powodu jednego z poniszych warunków:

1.

Normalne zakoczenie pracy (dobrowolnie).

2.

Zakoczenie pracy w wyniku bdu (dobrowolnie).

3.

Bd krytyczny (przymusowo).

4.

Zniszczenie przez inny proces (przymusowo).

Wikszo procesów koczy dziaanie dlatego, e wykonay swoj prac. Kiedy

kompilator skompiluje program, wykonuje wywoanie systemowe, które informuje
system operacyjny o zakoczeniu pracy. Tym wywoaniem jest

exit

w systemie UNIX

oraz

ExitProcess

w systemie Windows. W programach wyposaonych w interfejs

ekranowy zwykle s mechanizmy pozwalajce na dobrowolne zakoczenie dziaania.
W edytorach tekstu, przegldarkach internetowych i podobnych im programach
zawsze jest ikona lub polecenie menu, które uytkownik moe klikn, aby zleci
procesowi usunicie otwartych plików tymczasowych i zakoczenie dziaania.

Innym powodem zakoczenia pracy jest sytuacja, w której proces wykryje bd

krytyczny.

Jeli na przykad uytkownik wpisze polecenie:

cc foo.c

w celu skompilowania programu foo.c, a taki plik nie istnieje, to kompilator po prostu
skoczy dziaanie. Procesy interaktywne wyposaone w interfejsy ekranowe zwykle
nie kocz dziaania, jeli zostan do nich przekazane bdne parametry. Zamiast
tego wywietlaj okno dialogowe z prob do uytkownika o ponowienie próby.

background image

130

PROCESY I WTKI

ROZ. 2

Trzecim powodem zakoczenia pracy jest bd spowodowany przez proces —

czsto wynikajcy z bdu w programie. Moe to by uruchomienie niedozwolonej
instrukcji, odwoanie si do nieistniejcego obszaru pamici lub dzielenie przez zero.
W niektórych systemach (na przykad w Uniksie) proces moe poinformowa system
operacyjny, e sam chce obsuy okrelone bedy. W takim przypadku, jeli wystpi
bd, proces otrzymuje sygna (przerwanie), zamiast zakoczy prac.

Czwartym powodem, dla którego proces moe zakoczy dziaanie, jest wyko-

nanie wywoania systemowego, które zleca systemowi operacyjnemu zniszczenie
innego procesu. W Uniksie mona to zrobi za pomoc wywoania systemowego

kill

.

Odpowiednikiem tego wywoania w interfejsie Win32 API jest

TerminateProcess

.

W obu przypadkach proces niszczcy musi posiada odpowiednie uprawnienia do
niszczenia innych procesów. W niektórych systemach zakoczenie procesu — nie-
zalenie od tego, czy jest wykonywane dobrowolnie, czy przymusowo — wie si
z zakoczeniem wszystkich procesów utworzonych przez ten proces. Jednak w taki
sposób nie dziaa ani system UNIX, ani Windows.

2.1.4. Hierarchie procesów

W niektórych systemach, kiedy proces utworzy inny proces, to proces-rodzic jest
w pewien sposób zwizany z procesem-dzieckiem. Proces-dziecko sam moe tworzy
kolejne procesy, co formuje hierarchi procesów. Zwrómy uwag, e w odrónieniu
od rolin i zwierzt rozmnaajcych si pciowo proces moe mie tylko jednego
rodzica (ale zero, jedno dziecko lub wicej dzieci).

W Uniksie proces wraz z wszystkimi jego dziemi i dalszymi potomkami tworzy

grup procesów. Kiedy uytkownik wyle sygna z klawiatury, sygna ten jest dostar-
czany do wszystkich czonków grupy procesów, które w danym momencie s powi-
zane z klawiatur (zwykle s to wszystkie aktywne procesy utworzone w biecym
oknie). Kady proces moe indywidualnie przechwyci sygna, zignorowa go lub
podj dziaanie domylne — to znaczy zosta zniszczonym przez sygna.

W celu przedstawienia innego przykadu sytuacji, w której hierarchia procesów

odgrywa rol, przyjrzyjmy si sposobowi, w jaki system UNIX inicjuje si podczas
rozruchu. W obrazie rozruchowym wystpuje specjalny proces o nazwie

init

. Kiedy

rozpoczyna dziaanie, odczytuje plik i informuje o liczbie dostpnych terminali. Nastp-
nie tworzy po jednym nowym procesie na terminal. Procesy te czekaj, a kto si
zaloguje. Kiedy logowanie zakoczy si pomylnie, proces logowania uruchamia
powok, która jest gotowa na przyjmowanie polece. Polecenia te mog urucha-
mia nowe procesy itd. Tak wic wszystkie procesy w caym systemie nale do
tego samego drzewa — jego korzeniem jest proces

init

.

Dla odrónienia w systemie Windows nie wystpuje pojcie hierarchii proce-

sów. Wszystkie procesy s sobie równe. Jedyn oznak hierarchii procesu jest to, e
podczas tworzenia procesu rodzic otrzymuje specjalny znacznik (nazywany uchwy-
tem
— ang. handle), który moe wykorzysta do zarzdzania dzieckiem. Moe jednak

background image

PODROZ. 2.1

PROCESY

131

swobodnie przekaza ten znacznik do innego procesu i w ten sposób zdezaktualizo-
wa hierarchi. Procesy w Uniksie nie maj moliwoci „wydziedziczenia” swoich
dzieci.

2.1.5. Stany procesów

Chocia kady proces jest niezalenym podmiotem, posiadajcym wasny licznik pro-
gramu i wewntrzny stan, procesy czsto musz si komunikowa z innymi proce-
sami. Jeden proces moe generowa wyjcie, które inny proces wykorzysta jako
wejcie. W poleceniu powoki:

cat rozdzial1 rozdzial2 rozdzial3 | grep drzewo

pierwszy proces uruchamia polecenie

cat

, czy i wyprowadza trzy pliki. Drugi proces

uruchamia polecenie

grep

, wybiera wszystkie wiersze zawierajce sowo „drzewo”.

W zalenoci od wzgldnej szybkoci obu procesów (co z kolei zaley zarówno od
wzgldnej zoonoci programów, jak i tego, ile czasu procesora kady z nich ma do
dyspozycji), moe si zdarzy, e polecenie

grep

bdzie gotowe do dziaania, ale nie

bd na nie czekay adne dane wejciowe. Proces bdzie si musia zablokowa do
czasu, a bd one dostpne.

Proces blokuje si, poniewa z logicznego punktu widzenia nie moe kontynu-

owa dziaania. Zazwyczaj dzieje si tak dlatego, e oczekuje na dane wejciowe,
które jeszcze nie s dostpne. Jest równie moliwe, e proces, który jest gotowy
i zdolny do dziaania, zostanie zatrzymany ze wzgldu na to, e system operacyjny
zdecydowa si przydzieli procesor na pewien czas jakiemu innemu procesowi.
Te dwie sytuacje diametralnie róni si od siebie. W pierwszym przypadku wstrzy-
manie pracy jest cile zwizane z charakterem problemu (nie mona przetworzy
wiersza polece wprowadzanego przez uytkownika do czasu, kiedy uytkownik go
nie wprowadzi). W drugim przypadku to techniczne aspekty systemu (niewystar-
czajca liczba procesorów do tego, aby kady proces otrzyma swój prywatny proce-
sor). Na rysunku 2.2 pokazano diagram stanów pokazujcy trzy stany, w jakich moe
znajdowa si proces:

1.

Dziaanie (rzeczywiste korzystanie z procesora w tym momencie).

2.

Gotowo (proces moe dziaa, ale jest tymczasowo wstrzymany, aby inny

proces móg dziaa).

3.

Blokada (proces nie moe dziaa do momentu, w którym wydarzy si jakie

zewntrzne zdarzenie).

Z logicznego punktu widzenia pierwsze dwa stany s do siebie podobne. W obu przy-
padkach proces chce dziaa, ale w drugim przypadku chwilowo brakuje dla niego
czasu procesora. Trzeci stan róni si od pierwszych dwóch w tym sensie, e proces
nie moe dziaa nawet wtedy, gdy procesor w tym czasie nie ma innego zajcia.

background image

132

PROCESY I WTKI

ROZ. 2

Rysunek 2.2. Proces moe by w stanie dziaania, blokady lub gotowoci. Na rysunku
pokazano przejcia pomidzy tymi stanami

Tak jak pokazano na rysunku, pomidzy tymi trzema stanami moliwe s cztery

przejcia. Przejcie nr 1 wystpuje wtedy, kiedy system operacyjny wykryje, e pro-
ces nie moe kontynuowa dziaania. W niektórych systemach proces moe wykona
wywoanie systemowe, na przykad

pause

, w celu przejcia do stanu zablokowania.

W innych systemach, w tym w Uniksie, kiedy proces czyta dane z potoku lub pliku
specjalnego (na przykad terminala) i dane wejciowe s niedostpne, jest automa-
tycznie blokowany.

Przejcia nr 2 i nr 3 s realizowane przez program szeregujcy (ang. process sche-

duler) — cz systemu operacyjnego, a procesy nie s o tym nawet informowane.
Przejcie nr 2 zachodzi wtedy, gdy program szeregujcy zdecyduje, e dziaajcy pro-
ces dziaa wystarczajco dugo i nadszed czas, by przydzieli czas procesora jakie-
mu innemu procesowi. Przejcie nr 3 zachodzi wtedy, gdy wszystkie inne procesy
skorzystay ze swojego udziau i nadszed czas na to, by pierwszy proces otrzyma
procesor i wznowi dziaanie. Zadanie szeregowania procesów — to znaczy decydo-
wania o tym, który proces powinien si uruchomi, kiedy i na jak dugo — jest bardzo
wane. Przyjrzymy si mu bliej w dalszej czci tego rozdziau. Opracowano wiele
algorytmów majcych na celu zapewnienie równowagi pomidzy wymaganiami
wydajnoci systemu jako caoci oraz sprawiedliwego przydziau procesora do indy-
widualnych procesów. Niektóre z tych algorytmów omówimy w dalszej czci niniej-
szego rozdziau.

Przejcie nr 4 wystpuje wtedy, gdy zachodzi zewntrzne zdarzenie, na które

proces oczekiwa (na przykad nadejcie danych wejciowych). Jeli w tym momencie
nie dziaa aden inny proces, zajdzie przejcie nr 3 i proces rozpocznie dziaanie.
W innym przypadku moe by zmuszony do oczekiwania w stanie gotowoci przez
pewien czas, a procesor stanie si dostpny i nadejdzie jego kolejka.

Wykorzystanie modelu procesów znacznie uatwia mylenie o tym, co dzieje si

wewntrz systemu. Niektóre procesy uruchamiaj programy realizujce polecenia
wprowadzane przez uytkownika. Inne procesy s czci systemu i obsuguj takie
zadania, jak obsuga da usug plikowych lub zarzdzanie szczegóami dotycz-
cymi uruchamiania napdu dysku lub tam. Kiedy zachodzi przerwanie dyskowe,
system podejmuje decyzj o zatrzymaniu dziaania biecego procesu i uruchamia
proces dyskowy, który by zablokowany w oczekiwaniu na to przerwanie. Tak wic
zamiast myle o przerwaniach, moemy myle o procesach uytkownika, proce-
sach dysku, procesach terminala itp., które blokuj si w czasie oczekiwania, a co

background image

PODROZ. 2.1

PROCESY

133

si wydarzy. Kiedy nastpi próba czytania danych z dysku albo uytkownik przycinie
klawisz, proces oczekujcy na to zdarzenie jest odblokowywany i moe wznowi
dziaanie.

Ten stan rzeczy jest podstaw modelu pokazanego na rysunku 2.3. W tym przy-

padku na najniszym poziomie systemu operacyjnego znajduje si program szere-
gujcy, zarzdzajcy zbiorem procesów wystpujcych w warstwie nad nim. Cay
mechanizm obsugi przerwa i szczegóów zwizanych z waciwym uruchamianiem
i zatrzymywaniem procesów jest ukryty w elemencie nazwanym tu zarzdc pro-
cesów. Element ten w rzeczywistoci nie zawiera zbyt wiele kodu. Pozostaa cz
systemu operacyjnego ma struktur procesów. W praktyce jednak istnieje bardzo
niewiele systemów operacyjnych, które miayby tak przejrzyst struktur.

Rysunek 2.3. Najnisza warstwa systemu operacyjnego o strukturze procesów
zarzdza przerwaniami i szeregowaniem. Powyej tej warstwy znajduj si sekwencyjne
procesy

2.1.6. Implementacja procesów

W celu zaimplementowania modelu procesów w systemie operacyjnym wystpuje
tabela (tablica struktur), zwana tabel procesów, w której kademu z procesów
odpowiada jedna pozycja — niektórzy autorzy nazywaj te pozycje blokami zarz-
dzania procesami
. W blokach tych s zapisane wane informacje na temat stanu
procesu. Zawieraj one wartoci licznika programu, wskanika stosu, dane dotyczce
przydziau pamici, statusu otwartych procesów, rozlicze i szeregowania oraz
wszystkie inne informacje, które trzeba zapisa w czasie przeczania procesu ze stanu
wykonywany do stanu gotowy lub zablokowany. Dziki nim proces moe by póniej
wznowiony, tak jakby nigdy nie zosta zatrzymany.

W tabeli 2.1. pokazano kilka kluczowych pól w typowym systemie. Pola w pierw-

szej kolumnie s zwizane z zarzdzaniem procesami. Pozostae dwa cz si odpo-
wiednio z zarzdzaniem pamici oraz zarzdzaniem plikami. Naley zwróci uwag
na to, e obecno poszczególnych pól w tabeli procesów w duym stopniu zaley od
systemu. Ponisza tabela daje jednak ogólny obraz rodzajów potrzebnych informacji.

Teraz, kiedy przyjrzelimy si tabeli procesów, moemy wyjani nieco dokad-

niej to, w jaki sposób iluzja wielu sekwencyjnych procesów jest utrzymywana
w jednym procesorze (lub kadym z procesorów). Z kad klas wejcia-wyjcia wie
si lokalizacja (zwykle pod ustalonym adresem w dolnej czci pamici) zwana wek-
torem przerwa
. Jest w niej zapisany adres procedury obsugi przerwania. Zaómy,

background image

134

PROCESY I WTKI

ROZ. 2

Tabela 2.1. Przykadowe pola typowego wpisu w tabeli procesów

Zarzdzanie procesami

Zarzdzanie pamici

Zarzdzanie plikami

Rejestry

Licznik programu

Sowo stanu programu

Wskanik stosu

Stan procesu

Priorytet

Parametry szeregowania

Identyfikator procesu

Proces-rodzic

Grupa procesów

Sygnay

Czas rozpoczcia procesu

Wykorzystany czas CPU

Czas CPU procesów-dzieci

Godzina nastpnego alarmu

Wskanik do informacji
segmentu tekstu

Wskanik do informacji
segmentu danych

Wskanik do informacji
segmentu stosu

Katalog gówny

Katalog roboczy

Deskryptory plików

Identyfikator uytkownika

Identyfikator grupy

e w momencie wystpienia przerwania zwizanego z dyskiem ma dziaa proces
uytkownika nr 3. Sprzt obsugujcy przerwania odkada na stos licznik programu
procesu uytkownika nr 3, sowo stanu programu i czasami jeden lub kilka rejestrów.
Nastpnie sterowanie przechodzi pod adres okrelony w wektorze przerwa. To
jest wszystko, co robi sprzt. Od tego momentu obsug przerwania zajmuje si opro-
gramowanie — w szczególnoci procedura obsugi przerwania.

Obsuga kadego przerwania rozpoczyna si od zapisania rejestrów — czsto

pod pozycj tabeli procesów odpowiadajc biecemu procesowi. Nastpnie infor-
macje odoone na stos przez mechanizm obsugi przerwania s z niego zdejmo-
wane, a wskanik stosu jest ustawiany na adres tymczasowego stosu uywanego
przez procedur obsugi procesu. Takich dziaa, jak zapisanie rejestrów i ustawie-
nie wskanika stosu, nawet nie mona wyrazi w jzykach wysokopoziomowych,
takich jak C. W zwizku z tym operacje te s wykonywane przez niewielk procedur
w jzyku asemblera. Zazwyczaj jest to ta sama procedura dla wszystkich przerwa,
poniewa zadanie zapisania rejestrów jest identyczne, niezalenie od tego, co byo
przyczyn przerwania.

Kiedy ta procedura zakoczy dziaanie, wywouje procedur w jzyku C, która

wykonuje reszt pracy dla tego konkretnego typu przerwania (zakadamy, e system
operacyjny zosta napisany w jzyku C — w tym jzyku napisana jest wikszo
systemów operacyjnych). Kiedy procedura ta wykona swoje zadanie (co moe spo-
wodowa, e pewne procesy uzyskaj gotowo do dziaania), wywoywany jest pro-
gram szeregujcy, który ma sprawdzi, jaki proces powinien zosta uruchomiony
w nastpnej kolejnoci. Nastpnie sterowanie jest przekazywane z powrotem do

background image

PODROZ. 2.1

PROCESY

135

kodu w asemblerze, który aduje rejestry i map pamici nowego biecego procesu
oraz rozpoczyna jego dziaanie. Obsug przerwa i szeregowanie podsumowano
w tabeli 2.2. Warto zwróci uwag, e róne systemy nieco si róni pewnymi
szczegóami.

Tabela 2.2. Szkielet dziaa wykonywanych przez najniszy poziom systemu
operacyjnego w momencie wystpienia przerwania

1.

Sprzt odkada na stos licznik programu itp.

2.

Sprzt aduje nowy licznik programu z wektora przerwa.

3.

Procedura w jzyku asemblera zapisuje rejestry.

4.

Procedura w jzyku asemblera ustawia nowy stos.

5.

Uruchamia si procedura obsugi przerwania w C (zazwyczaj czyta i buforuje dane wejciowe).

6.

Program szeregujcy decyduje o tym, który proces ma by uruchomiony w nastpnej

kolejnoci.

7.

Procedura w jzyku C zwraca sterowanie do kodu w asemblerze.

8.

Procedura w jzyku asemblera uruchamia nowy biecy proces.

Kiedy proces zakoczy dziaanie, system operacyjny wywietla symbol zachty i ocze-
kuje na nowe polecenie. Po otrzymaniu polecenia aduje do pamici nowy program,
nadpisujc star zawarto pamici.

2.1.7. Modelowanie wieloprogramowoci

Zastosowanie wieloprogramowoci pozwala na popraw wykorzystania procesora.
Z grubsza rzecz biorc, jeli przecitny proces jest przetwarzany przez 20% czasu
rezydowania w pamici, to w przypadku gdy w pamici jest jednoczenie pi pro-
cesów, procesor powinien by zajty przez cay czas. Ten model jest jednak niere-
alistycznie optymistyczny, poniewa zakada, e w adnym momencie nie zdarzy si
sytuacja, w której wszystkie pi procesów bdzie jednoczenie oczekiwao na ope-
racj wejcia-wyjcia.

Lepszym modelem jest spojrzenie na wykorzystanie procesora z probabilistycz-

nego punktu widzenia. Zaómy, e proces spdza fragment p swojego czasu na zako-
czeniu operacji wejcia-wyjcia. Przy n procesach znajdujcych si jednoczenie
w pamici prawdopodobiestwo tego, e wszystkie n procesów bdzie jednoczenie
oczekiwao na obsug wejcia-wyjcia (wtedy procesor pozostanie bezczynny),
wynosi p

n

. W takim przypadku wykorzystanie procesora mona opisa za pomoc

wzoru:

Wykorzystanie procesora = 1p

n

Na rysunku 2.4 pokazano procent wykorzystania procesora w funkcji n — co okrela
si jako stopie wieloprogramowoci.

Z rysunku jasno wynika, e jeli procesy spdzaj 80% czasu w oczekiwaniu na

operacje wejcia-wyjcia, to aby wspóczynnik marnotrawienia procesora utrzyma

background image

136

PROCESY I WTKI

ROZ. 2

Rysunek 2.4. Wykorzystanie procesora w funkcji liczby procesów w pamici

na poziomie poniej 10%, w pamici musi by jednoczenie co najmniej 10 procesów.
Kiedy zdamy sobie spraw ze stanu, w którym proces interaktywny oczekuje, a
uytkownik wpisze na terminalu jakie dane, stanie si oczywiste, e czasy ocze-
kiwania na wejcia-wyjcia rzdu 80% i wicej nie s niczym niezwykym. Nawet
na serwerach procesy wykonujce wiele dyskowych operacji wejcia-wyjcia czsto
charakteryzuj si tak wysokim procentem.

Dla cisoci naley doda, e model probabilistyczny opisany przed chwil jest

tylko przyblieniem. Zakada on niejawnie, e wszystkie n procesów jest niezale-
nych. Oznacza to, e w przypadku systemu z picioma procesami w pamici dopusz-
czalnym stanem jest to, aby trzy z nich dziaay, a dwa czekay. Jednak przy jednym
procesorze nie ma moliwoci jednoczesnego dziaania trzech procesów. W zwizku
z tym proces, który osiga gotowo w czasie, gdy procesor jest zajty, bdzie musia
czeka. Tak wic procesy nie s niezalene. Dokadniejszy model mona stworzy
z wykorzystaniem teorii kolejokowania, jednak teza, któr sformuowalimy — wie-
loprogramowo pozwala procesom wykorzystywa procesor w czasie, gdy w innej
sytuacji byby on bezczynny — jest oczywicie w dalszym cigu prawdziwa. Faktu
tego nie zmieniaby nawet sytuacja, w której rzeczywiste krzywe stopnia wielopro-
gramowoci nieco odbiegayby od tych pokazanych na rysunku 2.4.

Mimo e model z rysunku 2.4 jest uproszczony, mona go wykorzystywa w celu

tworzenia specyficznych, jednak przyblionych prognoz dotyczcych wydajnoci pro-
cesora. Przypumy na przykad, e komputer ma 512 MB pamici, przy czym system
operacyjny zajmuje 128 MB, a kady z programów uytkownika równie zajmuje do
128 MB. Te rozmiary pozwalaj na to, aby w pamici jednoczenie znajdoway si trzy
programy uytkownika. Przy rednim czasie oczekiwania na operacje wejcia-wyjcia,
wynoszcym 80%, mamy procent wykorzystania procesora na poziomie 10,8

3

czyli okoo 49%. Dodanie kolejnych 512 MB pamici operacyjnej umoliwia przejcie
systemu z trójstopniowej wieloprogramowoci do siedmiostopniowej, co przyczyni si
do wzrostu wykorzystania procesora do 79%. Mówic inaczej, dodatkowe 512 MB
pamici podniesie przepustowo o 30%.

background image

PODROZ. 2.2

WTKI

137

Dodanie kolejnych 512 MB spowodowaoby zwikszenie stopnia wykorzystania

procesora z 79% do 91%, a zatem podniosoby przepustowo tylko o kolejne 12%.
Korzystajc z tego modelu, waciciel komputera moe zadecydowa, e pierwsza roz-
budowa systemu jest dobr inwestycj, natomiast druga nie.

2.2. WTKI

2.2

WTKI

W tradycyjnych systemach operacyjnych kady proces ma przestrze adresow
i jeden wtek sterowania. W rzeczywistoci prawie tak wyglda definicja procesu.
Niemniej jednak czsto wystpuj sytuacje, w których korzystne jest posiadanie wielu
wtków sterowania w tej samej przestrzeni adresowej, dziaajcych quasi-równo-
legle — tak jakby byy (niemal) oddzielnymi procesami (z wyjtkiem wspódzielonej
przestrzeni adresowej). Sytuacje te oraz wynikajce z tego implikacje omówiono
w kolejnych punktach.

2.2.1. Wykorzystanie wtków

Do czego moe suy rodzaj procesu wewntrz innego procesu? Okazuje si, e
istniej powody istnienia tych miniprocesów zwanych wtkami. Spróbujmy przyjrze
si kilku z nich. Gównym powodem wystpowania wtków jest to, e w wielu aplika-
cjach jednoczenie wykonywanych jest wiele dziaa. Niektóre z nich mog by zablo-
kowane od czasu do czasu. Dziki dekompozycji takiej aplikacji na wiele sekwencyj-
nych wtków dziaajcych quasi-równolegle model programowania staje si prostszy.

Tak sam dyskusj przedstawilimy ju wczeniej. Dokadnie te same argu-

menty przemawiaj za istnieniem procesów. Zamiast myle o przerwaniach, licz-
nikach czasu i przeczaniu kontekstu, moemy myle o równolegych procesach.
Tyle e teraz, przy pojciu wtków, dodajemy nowy element: zdolno równolegych
podmiotów do wspódzielenia pomidzy sob przestrzeni adresowej oraz wszyst-
kich swoich danych. Zdolno ta ma kluczowe znaczenie dla niektórych aplikacji,
dlatego wanie obecno wielu procesów (z oddzielnymi przestrzeniami adresowymi)
w tym przypadku nie wystarczy.

Drugi argument, który przemawia za istnieniem wtków, jest taki, e — ponie-

wa s one mniejsze od procesów — w porównaniu z procesami atwiej (tzn. szybciej)
si je tworzy i niszczy. W wielu systemach tworzenie wtku trwa 10 – 100 razy krócej
od tworzenia procesu. Poniewa liczba potrzebnych wtków zmienia si dynamicznie
i gwatownie, szybko nabiera duego znaczenia.

Trzecim powodem istnienia wtków s wzgldy wydajnoci. Istnienie wtków

nie poprawi wydajnoci, jeli wszystkie one bd zwizane z procesorem. Jednak
w przypadku wykonywania intensywnych oblicze i jednoczenie znaczcej liczby
operacji wejcia-wyjcia wystpowanie wtków pozwala na nakadanie si na siebie
tych dziaa, co w efekcie kocowym przyczynia si do przyspieszenia aplikacji.

background image

138

PROCESY I WTKI

ROZ. 2

Na koniec — wtki przydaj si w systemach wyposaonych w wiele procesorów,

gdzie moliwa jest rzeczywista wspóbieno. Do tego zagadnienia powrócimy
w rozdziale 8.

Najatwiej przekona si o przydatnoci wtków, analizujc konkretne przykady.

W roli pierwszego przykadu rozwamy edytor tekstu. Edytory tekstu zazwyczaj
wywietlaj na ekranie tworzony dokument sformatowany dokadnie w takiej postaci,
w jakiej bdzie on wyglda na drukowanej stronie. Zwaszcza wszystkie znaki podziau
wierszy i stron znajduj si na prawidowych i ostatecznych pozycjach. Dziki temu
uytkownik ma moliwo przegldania i poprawienia dokumentu, jeli zajdzie taka
potrzeba (na przykad w celu wyeliminowania sierot i wdów — niekompletnych
wierszy na pocztku i na kocu strony, które uwaa si za nieestetyczne).

Zaómy, e uytkownik pisze ksik. Z punktu widzenia autora najatwiej

umieci ca ksik w pojedynczym pliku, tak by atwiej byo wyszukiwa tematy,
wykonywa globalne operacje zastpowania itp. Alternatywnie mona umieci
kady z rozdziaów w osobnym pliku. Jednak umieszczenie kadego podrozdziau
i punktu w osobnym pliku, na przykad gdyby zasza potrzeba globalnego zastpienia
jakiego terminu w caej ksice, byoby prawdziwym utrapieniem. W takim przy-
padku trzeba by byo bowiem indywidualnie edytowa kady z kilkuset plików. Jeli
na przykad zaproponowany termin „standard xxxx” zostaby zatwierdzony tu przed
oddaniem ksiki do druku, trzeba by byo w ostatniej chwili zastpi wszystkie
wystpienia terminu „roboczo: standard xxxx” na „standard xxxx”. Jeli ksika znaj-
duje si w jednym pliku, tak operacj mona wykona za pomoc jednego polecenia.
Dla odrónienia, gdyby ksika skadaa si z 300 plików, kady z nich trzeba by
osobno otworzy w edytorze.

Rozwamy teraz, co si zdarzy, kiedy uytkownik nagle usunie jedno zdanie

z pierwszej strony 800-stronicowego dokumentu. Po sprawdzeniu poprawnoci zmo-
dyfikowanej strony zdecydowa, e chce wykona inn zmian na stronie 600 i wpisuje
polecenie zlecajce edytorowi przejcie do tej strony (na przykad poprzez wyszu-
kanie frazy, która znajduje si tylko tam). Edytor tekstu jest w tej sytuacji zmu-
szony do natychmiastowego przeformatowania caej ksiki do strony 600, ponie-
wa nie bdzie wiedzia, jak tre ma pierwszy wiersz na stronie 600, dopóki nie
przetworzy wszystkich poprzednich stron. Zanim bdzie mona wywietli stron
600, moe powsta znaczce opónienie, co doprowadzi do niezadowolenia uyt-
kownika.

W takim przypadku moe pomóc wykorzystanie wtków. Zaómy, e edytor

tekstu jest napisany jako program skadajcy si z dwóch wtków. Jeden wtek zaj-
muje si komunikacj z uytkownikiem, a drugi przeprowadza w tle korekt forma-
towania. Natychmiast po usuniciu zdania ze strony 1 wtek komunikacji z uytkow-
nikiem informuje wtek formatujcy o koniecznoci przeformatowania caej ksiki.
Tymczasem wtek komunikacji z uytkownikiem kontynuuje nasuchiwanie klawia-
tury i myszy i odpowiada na proste polecenia, takie jak przegldanie strony 1. W tym
samym czasie drugi z wtków w tle wykonuje intensywne obliczenia. Przy odrobinie

background image

PODROZ. 2.2

WTKI

139

szczcia zmiana formatu zakoczy si, zanim uytkownik poprosi o przejcie na
stron 600. Jeli tak si stanie, przejcie na stron 600 bdzie mogo si odby bez-
zwocznie.

Kiedy ju jestemy przy edytorach, odpowiedzmy sobie na pytanie, dlaczego by

nie doda trzeciego wtku. Wiele edytorów tekstu jest wyposaonych w mechanizm
automatycznego zapisywania caego pliku na dysk co kilka minut. Ma to zapobiec
utracie caodniowej pracy w przypadku awarii programu, awarii systemu lub proble-
mów z zasilaniem. Trzeci wtek moe obsugiwa wykonywanie kopii zapasowych
na dysku, nie przeszkadzajc w dziaaniu pozostaym dwóm. Sytuacj z trzema wt-
kami pokazano na rysunku 2.5.

Rysunek 2.5. Edytor tekstu skadajcy si z trzech wtków

Gdyby program zawiera jeden wtek, to kade rozpoczcie wykonywania kopii

zapasowej na dysk powodowaoby, e polecenia z klawiatury i myszy byyby igno-
rowane do czasu zakoczenia wykonywania kopii zapasowej. Uytkownik z pew-
noci by to zauway jako obnion wydajno. Alternatywnie zdarzenia zwizane
z klawiatur i mysz mogyby przerwa wykonywanie kopii zapasowej na dysk, co
pozwolioby na zachowanie dobrej wydajnoci, ale prowadzioby do skomplikowanego
modelu programowania bazujcego na przerwaniach. W przypadku zastosowania
trzech wtków model programowania jest znacznie prostszy. Pierwszy wtek zaj-
muje si jedynie interakcjami z uytkownikiem. Drugi wtek przeformatowuje doku-
ment, kiedy otrzyma takie zlecenie. Trzeci wtek okresowo zapisuje zawarto
pamici RAM na dysk.

W tym przypadku powinno by jasne, e istnienie trzech oddzielnych procesów

w tej sytuacji si nie sprawdzi, poniewa wszystkie trzy wtki musz operowa na
tym samym dokumencie. Dziki wystpowaniu trzech wtków zamiast trzech pro-
cesów wtki wspódziel pami i w efekcie wszystkie maj dostp do edytowanego
dokumentu.

background image

140

PROCESY I WTKI

ROZ. 2

Analogiczna sytuacja wystpuje w przypadku wielu innych interaktywnych

programów. Na przykad elektroniczny arkusz kalkulacyjny jest programem umoli-
wiajcym uytkownikowi obsug macierzy — niektóre z jej elementów s danymi
wprowadzanymi przez uytkownika. Inne elementy s wyliczane na podstawie wpro-
wadzonych danych i z wykorzystaniem potencjalnie skomplikowanych wzorów. Kiedy
uytkownik zmodyfikuje jeden element, moe zaj potrzeba obliczenia wielu innych
elementów. Dziki zdefiniowaniu dziaajcego w tle wtku zajmujcego si przelicza-
niem wtek interaktywny pozwala uytkownikowi na wprowadzanie zmian w czasie,
gdy s wykonywane obliczenia. Na podobnej zasadzie trzeci wtek moe samodziel-
nie obsugiwa kopie zapasowe wykonywane na dysku.

Rozwamy teraz jeszcze jeden przykad zastosowania wtków: serwer orodka

WWW. Przychodz dania stron, a w odpowiedzi dane strony s przesyane do
klienta. W wikszoci orodków WWW niektóre strony WWW s czciej odwie-
dzane ni inne. Na przykad gówna strona serwisu Sony jest odwiedzana znacznie
czciej od strony umieszczonej gboko w drzewie katalogów i zawierajcej spe-
cyfikacj techniczn jakiego modelu kamery wideo. Serwery WWW wykorzystuj ten
fakt do poprawy wydajnoci. Utrzymuj kolekcj czsto uywanych stron w pamici
gównej, aby wyeliminowa potrzeb odwoywania si do dysku w celu ich pobrania.
Taka kolekcja jest nazywana pamici podrczn (ang. cache) i wykorzystuje si j
równie take w wielu innych kontekstach. Na przykad w rozdziale 1. zetknlimy
si z pamiciami podrcznymi procesora.

Jeden ze sposobów organizacji serwera WWW pokazano na rysunku 2.6(a). W tym

przypadku jeden z wtków — dyspozytor — odczytuje z sieci przychodzce dania.
Po przeanalizowaniu dania wybiera bezczynny (tzn. zablokowany) wtek pracow-
nika
i przekazuje mu danie — na przykad poprzez zapisanie wskanika do komu-
nikatu w specjalnym sowie powizanym z kadym wtkiem. Nastpnie dyspozytor
budzi upiony wtek pracownika — to znaczy zmienia jego stan z „zablokowany” na
„gotowy”.

Rysunek 2.6. Serwer WWW z obsug wielu wtków

background image

PODROZ. 2.2

WTKI

141

Kiedy wtek si obudzi, sprawdza, czy jest w stanie speni danie z pamici pod-

rcznej strony WWW, do której maj dostp wszystkie wtki. Jeli tak nie jest, roz-
poczyna operacj odczytu w celu pobrania strony z dysku i przechodzi do stanu
„zablokowany”, trwajcego do chwili zakoczenia operacji dyskowej. Kiedy wtek
zablokuje si na operacji dyskowej, inny wtek zaczyna dziaanie, na przykad dys-
pozytor, którego zadaniem jest przyjcie jak najwikszej liczby da, albo inny pra-
cownik, który jest gotowy do dziaania.

W tym modelu serwer moe by zapisany w postaci kolekcji sekwencyjnych

wtków. Program dyspozytora zawiera ptl nieskoczon, w której jest pobierane
danie pracy, póniej wrczane pracownikowi. Kod kadego pracownika zawiera
ptl nieskoczon, w której jest akceptowane danie od dyspozytora i nastpuje
sprawdzenie, czy dana strona jest dostpna w pamici podrcznej serwera WWW.
Jeli tak, strona jest zwracana do klienta, a pracownik blokuje si w oczekiwaniu
na nowe danie. Jeli nie, pracownik pobiera stron z dysku, zwraca j do klienta
i blokuje si w oczekiwaniu na nowe danie.

W uproszczonej formie kod przedstawiono na listingu 2.1. W tym przypadku,

podobnie jak w pozostaej czci tej ksiki, zaoono, e

TRUE

odpowiada staej o war-

toci 1. Natomiast

buf

i

strona

s strukturami do przechowywania odpowiednio da-

nia pracy i strony WWW.

Listing 2.1. Uproszczona posta kodu dla struktury serwera z rysunku 2.6.
(a) Wtek dyspozytora; (b) wtek pracownika

(a)

(b)

while (TRUE){
pobierz_nast_zadanie(&buf);
przekaz_prace(&buf);
}

while (TRUE){
czekaj_na_prace(&buf)
szukaj_strony_w_pamieci_cache(&buf,

´&strona);

if ((&strona))
czytaj_strone_z_dysku(&buf,

´&strona);

zwroc_strone(&strona);
}

Zastanówmy si, jak mógby by napisany serwer WWW, gdyby nie byo wtków.

Jedna z moliwoci polega na zaimplementowaniu go jako pojedynczego wtku.
W gównej ptli serwera WWW nastpowayby pobieranie dania, jego analiza i reali-
zacja. Dopiero potem serwer WWW mógby pobra nastpne danie. Podczas ocze-
kiwania na zakoczenie operacji dyskowej serwer byby bezczynny i nie przetwarzaby
adnych innych przychodzcych da. Jeli serwer WWW dziaa na dedykowanej
maszynie, tak jak to zwykle bywa, w czasie oczekiwania serwera WWW na dysk pro-
cesor pozostaby bezczynny. W efekcie kocowym mona by byo przetworzy znacz-
nie mniej da na sekund. A zatem skorzystanie z wtków pozwala na uzyskanie
znaczcego zysku wydajnoci, ale kady z wtków jest programowany sekwencyj-
nie — w standardowy sposób.

background image

142

PROCESY I WTKI

ROZ. 2

Do tej pory omówilimy dwa moliwe projekty: wielowtkowy serwer WWW

i jednowtkowy serwer WWW. Zaómy, e wtki nie s dostpne, ale projektanci
systemu uznali obnienie wydajnoci spowodowane istnieniem pojedynczego wtku
za niedopuszczalne. Jeli jest dostpna nieblokujca wersja wywoania systemowego

read

, moliwe staje si trzecie podejcie. Kiedy przychodzi danie, analizuje go

jeden i tylko jeden wtek. Jeeli danie moe by obsuone z pamici podrcznej,
to dobrze, ale jeli nie, inicjowana jest nieblokujca operacja dyskowa.

Serwer rejestruje stan biecego dania w tabeli, a nastpnie pobiera nastpne

zdarzenie do obsugi. Moe to by danie nowej pracy albo odpowied dysku doty-
czca poprzedniej operacji. Jeli jest to danie nowej pracy, rozpoczyna si jego
obsuga. Jeli jest to odpowied z dysku, waciwe informacje s pobierane z tabeli
i nastpuje przetwarzanie odpowiedzi. W przypadku nieblokujcych dyskowych ope-
racji wejcia-wyjcia odpowied zwykle ma posta sygnau lub przerwania.

W tym projekcie model „procesów sekwencyjnych” omawiany w pierwszych

dwóch przypadkach nie wystpuje. Stan oblicze musi by jawnie zapisany i odtwo-
rzony z tabeli, za kadym razem, kiedy serwer przecza si z pracy nad jednym
daniem do pracy nad kolejnym daniem. W rezultacie wtki i ich stosy s symu-
lowane w trudniejszy sposób. W projektach takich jak ten wszystkie obliczenia maj
zapisany stan. Ponadto istnieje zbiór zdarze, których wystpienie moe zmienia
okrelone stany. Takie systemy nazywa si automatami o skoczonej liczbie
stanów
— pojcie to jest powszechnie uywane w brany komputerowej.

Teraz powinno by jasne, co oferuj wtki. Pozwalaj na utrzymanie idei procesów

sekwencyjnych wykonujcych blokujce wywoania systemowe (na przykad doty-
czce dyskowych operacji wejcia-wyjcia) z jednoczesnym uzyskaniem efektu wspó-
bienoci. Blokujce wywoania systemowe uatwiaj programowanie, a wspóbie-
no poprawia wydajno. Jednowtkowy serwer zachowuje prostot blokujcych
wywoa systemowych, ale gwarantuje wydajno. Trzecie podejcie pozwala na
osignicie wysokiej wydajnoci dziki wspóbienoci, ale wykorzystuje nieblo-
kujce wywoania i przerwania, dlatego jest trudne do zaprogramowania. Dostpne
modele zestawiono w tabeli 2.3.

Tabela 2.3. Trzy sposoby konstrukcji serwera

Model

Charakterystyka

Wtki

Wspóbieno, blokujce wywoania systemowe

Proces jednowtkowy

Brak wspóbienoci, blokujce wywoania systemowe

Automat o skoczonej liczbie stanów

Wspóbieno, nieblokujce wywoania systemowe,
przerwania

Trzecim przykadem zastosowania wtków s aplikacje, które musz przetwa-

rza due iloci danych. Normalne podejcie polega na przeczytaniu bloku danych,
przetworzeniu go, a nastpnie ponownym zapisaniu. Problem w takim przypadku

background image

PODROZ. 2.2

WTKI

143

polega na tym, e jeli dostpne s tylko blokujce wywoania systemowe, proces
blokuje si, kiedy dane przychodz oraz kiedy s wysyane na zewntrz. Doprowa-
dzenie do sytuacji, w której procesor jest bezczynny w czasie, gdy jest wiele oblicze
do wykonania, to oczywiste marnotrawstwo i w miar moliwoci naley unika takiej
sytuacji.

Rozwizaniem problemu jest wykorzystanie wtków. Wewntrz procesu mona

wydzieli wtek wejciowy, wtek przetwarzania danych i wtek wyprowadzania
danych. Wtek wejciowy czyta dane do bufora wejciowego. Wtek przetwarzania
danych pobiera dane z bufora wejciowego, przetwarza je i umieszcza wyniki w bufo-
rze wyjciowym. Wtek wyprowadzania danych zapisuje wyniki z bufora wyjciowego
na dysk. W ten sposób wprowadzanie danych, ich wyprowadzanie i przetwarzanie
mog by realizowane w tym samym czasie. Oczywicie model ten dziaa tylko wtedy,
kiedy wywoanie systemowe blokuje wycznie wtek wywoujcy, a nie cay proces.

2.2.2. Klasyczny model wtków

Teraz, kiedy pokazalimy, do czego mog si przyda wtki i jak ich mona uywa,
spróbujmy przeanalizowa to zagadnienie nieco dokadniej. Model procesów bazuje
na dwóch niezalenych pojciach: grupowaniu zasobów i uruchamianiu. Czasami
wygodnie jest je rozdzieli — wtedy mona skorzysta z wtków. Najpierw przyj-
rzymy si klasycznemu modelowi wtków. Nastpnie omówimy model wtków
Linuksa, w którym linia pomidzy wtkami i procesami jest rozmyta.

Jednym ze sposobów patrzenia na proces jest postrzeganie go jako sposobu gru-

powania powizanych ze sob zasobów. Proces dysponuje przestrzeni adresow
zawierajc tekst programu i dane, a take inne zasoby. Do zasobów tych mona
zaliczy otwarte pliki, procesy-dzieci, nieobsuone alarmy, porcedury obsugi sygna-
ów, informacje rozliczeniowe i wiele innych. Dziki pogrupowaniu ich w formie
procesu mona nimi atwiej zarzdza.

W innym pojciu proces zawiera wykonywany wtek — zwykle w skrócie uywa

si samego pojcia wtku. Wtek zawiera licznik programu, który ledzi to, jaka
instrukcja bdzie wykonywana w nastpnej kolejnoci. Posiada rejestry zawierajce
jego biece robocze zmienne. Ma do dyspozycji stos zawierajcy histori dziaania —
po jednej ramce dla kadej procedury, której wykonywanie si rozpoczo, ale jeszcze
si nie zakoczyo. Chocia wtek musi realizowa jaki proces, wtek i jego pro-
ces s pojciami odrbnymi i mona je traktowa osobno. Procesy s wykorzysty-
wane do grupowania zasobów, wtki s podmiotami zaplanowanymi do wykonania
przez procesor.

Wtki dodaj do modelu procesu moliwo realizacji wielu wykona w tym

samym rodowisku procesu, w duym stopniu w sposób wzajemnie od siebie nie-
zaleny. Równolege dziaanie wielu wtków w obrbie jednego procesu jest analo-
giczne do równolegego dziaania wielu procesów w jednym komputerze. W pierw-
szym z tych przypadków wtki wspódziel przestrze adresow i inne zasoby.

background image

144

PROCESY I WTKI

ROZ. 2

W drugim przypadku procesy wspódziel pami fizyczn, dyski, drukarki i inne
zasoby. Poniewa wtki maj pewne waciwoci procesów, czasami nazywa si je
lekkimi procesami. Do opisania sytuacji, w której w tym samym procesie moe
dziaa wiele wtków, uywa si take terminu wielowtkowo. Jak widzielimy
w rozdziale 1., niektóre procesory maj bezporedni obsug sprztow wielowt-
kowoci i pozwalaj na przeczanie wtków w skali czasowej rzdu nanosekund.

Na rysunku 2.7(a) wida trzy tradycyjne procesy. Kady proces ma swoj wasn

przestrze adresow oraz pojedynczy wtek sterowania. Dla odmiany w ukadzie
z rysunku 2.7(b) widzimy jeden proces z trzema wtkami sterowania. Chocia w obu
przypadkach mamy trzy wtki, w sytuacji z rysunku 2.7(a) kady z nich dziaa w innej
przestrzeni adresowej, podczas gdy w sytuacji z rysunku 2.7(b) wszystkie wspó-
dziel t sam przestrze adresow.

Rysunek 2.7. (a) Trzy procesy, z których kady posiada jeden wtek; (b) jeden wtek
z trzema wtkami

Kiedy wielowtkowy proces dziaa w jednoprocesorowym systemie, wtki dzia-

aj po kolei. Na rysunku 2.1 widzielimy, jak dziaa wieloprogramowo procesów.
Dziki przeczaniu pomidzy wieloma procesami system daje iluzj oddzielnych
procesów sekwencyjnych dziaajcych wspóbienie. Wielowtkowo dziaa w taki
sam sposób. Procesor przecza si w szybkim tempie pomidzy wtkami, dajc iluzj,
e wtki dziaaj wspóbienie — chocia na wolniejszym procesorze od fizycznego.
Przy trzech wtkach obliczeniowych w procesie wtki bd sprawiay wraenie rów-
nolegego dziaania, ale tak, jakby kady z nich dziaa na procesorze o szybkoci
równej jednej trzeciej szybkoci fizycznego procesora.

Róne wtki procesu nie s tak niezalene, jak róne procesy. Wszystkie wtki

posuguj si dokadnie t sam przestrzeni adresow, co równie oznacza, e wspó-
dziel one te same zmienne globalne. Poniewa kady wtek moe uzyska dostp
do kadego adresu pamici w obrbie przestrzeni adresowej procesu, jeden wtek
moe odczyta, zapisa, a nawet wyczyci stos innego wtku. Pomidzy wtkami
nie ma zabezpiecze, poniewa (1) byyby one niemoliwe do realizacji, a (2) nie
powinny by potrzebne. W odrónieniu od rónych procesów, które potencjalnie

background image

PODROZ. 2.2

WTKI

145

nale do rónych uytkowników i które mog by dla siebie wrogie, proces zawsze
naley do jednego uytkownika, który przypuszczalnie utworzy wiele wtków,
a zatem powinny one wspópracowa, a nie walczy ze sob. Oprócz przestrzeni adre-
sowej wszystkie wtki mog wspódzieli ten sam zbiór otwartych plików, proce-
sów-dzieci, alarmów, sygnaów itp., tak jak pokazano w tabeli 2.4. Tak wic organi-
zacja pokazana na rysunku 2.7(a) mogaby zosta uyta, jeli trzy procesy s ze sob
niezwizane, natomiast organizacja z rysunku 2.7(b) byaby waciwa w przypadku,
gdyby trzy wtki byy czci tego samego zadania i gdyby aktywnie i cile ze sob
wspópracoway.

Tabela 2.4. W pierwszej kolumnie wyszczególniono cechy wspólne dla wszystkich
wtków w procesie. W drugiej kolumnie zamieszczono niektóre elementy prywatne
dla kadego wtku

Komponenty procesu

Komponenty wtku

Przestrze adresowa

Licznik programu

Zmienne globalne

Rejestry

Otwarte pliki

Stos

Procesy-dzieci

Stan

Zalege alarmy

Sygnay i procedury obsugi sygnaów

Informacje dotyczce rozlicze

Elementy w pierwszej kolumnie s waciwociami procesu, a nie wtku. Jeli

na przykad jeden wtek otworzy plik, bdzie on widoczny dla innych wtków w pro-
cesie. Wtki te bd mogy czyta dane z pliku i je zapisywa. To logiczne, ponie-
wa wanie proces, a nie wtek jest jednostk zarzdzania zasobami. Gdyby kady
wtek mia wasn przestrze adresow, otwarte pliki, nieobsuone alarmy itd.,
byby osobnym procesem. Wykorzystujc pojcie wtków, chcemy, aby wiele wtków
mogo wspódzieli zbiór zasobów. Dziki temu mog one ze sob cile wspópra-
cowa w celu wykonania okrelonego zadania.

Podobnie jak tradycyjny proces (czyli taki, który zawiera tylko jeden wtek), wtek

moe znajdowa si w jednym z kilku stanów: „dziaajcy”, „zablokowany”, „gotowy”
lub „zakoczony”. Dziaajcy wtek posiada dostp do procesora i jest aktywny.
Zablokowany wtek oczekuje na jakie zdarzenie, by móg si odblokowa. Kiedy
na przykad wtek realizuje wywoanie systemowe odczytujce dane z klawiatury,
jest zablokowany do czasu, kiedy uytkownik wpisze dane wejciowe. Wtek moe si
blokowa w oczekiwaniu na wystpienie zdarzenia zewntrznego lub moe ocze-
kiwa, a odblokuje go inny wtek. Wtek gotowy jest zaplanowany do uruchomienia
i zostanie uruchomiony, kiedy nadejdzie jego kolej. Przejcia pomidzy stanami wt-
ków s identyczne jak przejcia pomidzy stanami procesów. Zilustrowano je na
rysunku 2.2.

background image

146

PROCESY I WTKI

ROZ. 2

Istotne znaczenie ma zdanie sobie sprawy, e kady wtek posiada wasny stos,

co zilustrowano na rysunku 2.8. Stos kadego wtku zawiera po jednej ramce dla
kadej procedury, która zostaa wywoana, a z której jeszcze nie nastpi powrót.
Ramka ta zawiera zmienne lokalne procedury oraz adres powrotu, który bdzie
wykorzystany po zakoczeniu obsugi wywoania procedury. Jeli na przykad proce-
dura X wywoa procedur Y, a procedura Y wywoa procedur Z, to w czasie, kiedy
dziaa procedura Z, na stosie bd ramki dla procedur X, Y i Z. Kady wtek, ogólnie
rzecz biorc, bdzie wywoywa inne procedury, a zatem bdzie mia inn histori
wywoa. Dlatego wanie kady wtek potrzebuje wasnego stosu.

Rysunek 2.8. Kady wtek ma wasny stos

W przypadku gdy system obsuguje wielowtkowo, procesy zazwyczaj rozpo-

czynaj dziaanie z jednym wtkiem. Wtek ten posiada zdolno do tworzenia nowych
wtków za pomoc wywoania procedury, na przykad

thread_create

. Parametr

procedury

thread_create

zwykle okrela nazw procedury, która ma si uruchomi

dla nowego wtku. Nie jest konieczne (ani nawet moliwe) ustalenie czegokolwiek
na temat przestrzeni adresowej nowego wtku, poniewa wtek automatycznie dziaa
w przestrzeni adresowej wtku tworzcego. Czasami wtki s hierarchiczne i zacho-
dz pomidzy nimi relacje rodzic – dziecko, czsto jednak takie relacje nie wystpuj,
a wszystkie wtki s sobie równe. Niezalenie od tego, czy pomidzy wtkami
zachodzi relacja hierarchii, wtek tworzcy zwykle zwraca identyfikator wtku zawie-
rajcy nazw nowego wtku.

Kiedy wtek zakoczy swoj prac, moe zakoczy dziaanie poprzez wywoanie

procedury bibliotecznej, na przykad

thread_exit

. W tym momencie wtek znika

i nie moe by wicej zarzdzany. W niektórych systemach obsugi wtków jeden
wtek moe czeka na zakoczenie innego wtku poprzez wywoanie procedury, na
przykad

thread_join

. Procedura ta blokuje wtek wywoujcy do czasu zakoczenia

(specyficznego) wtku. Pod tym wzgldem tworzenie i koczenie wtków przypo-
mina tworzenie i koczenie procesów i wymaga w przyblieniu tych samych opcji.

background image

PODROZ. 2.2

WTKI

147

Innym popularnym wywoaniem dotyczcym wtków jest

thread_yield

. Umo-

liwia ono wtkowi dobrowoln rezygnacj z procesora w celu umoliwienia dziaa-
nia innemu wtkowi. Takie wywoanie ma istotne znaczenie, poniewa nie istnieje
przerwanie zegara, które wymuszaoby wieloprogramowo, tak jak w przypadku
procesów. W zwizku z tym istotne znaczenie ma to, aby wtki byy „uprzejme” i od
czasu do czasu dobrowolnie rezygnoway z procesora, tak by inne wtki miay szanse
na dziaanie. S równie inne wywoania — na przykad pozwalajce na to, aby jeden
wtek poczeka, a nastpny zakoczy jak prac, lub by ogosi, e wanie zako-
czy jak prac itd.

Chocia wtki czsto si przydaj, wprowadzaj take szereg komplikacji do

modelu programowania. Na pocztek przeanalizujmy efekty na uniksowe wywoa-
nie systemowej

fork

. Jeli proces-rodzic ma wiele wtków, to czy proces-dziecko

równie powinien je mie? Jeli nie, to proces moe nie dziaa prawidowo, ponie-
wa wszystkie wtki mog mie istotne znaczenie.

Tymczasem gdy proces-dziecko otrzyma tyle samo wtków, co rodzic, to co si

stanie, jeli wtek nalecy do rodzica zostanie zablokowany przez wywoanie

read

,

powiedzmy, z klawiatury? Czy teraz dwa wtki s zablokowane przez klawiatur —
jeden w procesie-rodzicu i drugi w dziecku? Kiedy uytkownik wpisze wiersz, to czy
kopia pojawi si w obu wtkach? A moe tylko w wtku rodzica? Lub tylko w wtku
dziecka? Ten sam problem wystpuje dla twardych pocze sieciowych.

Inna klasa problemów wie si z faktem wspódzielenia przez wtki wielu struktur

danych. Co si dzieje, jeli jeden wtek zamknie plik, podczas gdy inny cigle z niego
czyta? Przypumy, e jeden z wtków zauwaa, e jest za mao pamici, i rozpoczyna
alokowanie wikszej iloci pamici. W trakcie tego dziaania nastpuje przeczenie
wtku. Nowy wtek równie zauwaa, e jest za mao pamici i take rozpoczyna
alokowanie dodatkowej pamici. Pami prawdopodobnie bdzie alokowana dwu-
krotnie. Przy odrobinie wysiku mona rozwiza te problemy, jednak poprawna
praca programów wykorzystujcych wielowtkowo wymaga dokadnych przemy-
le i dokadnego projektowania.

2.2.3. Wtki POSIX

Aby byo moliwe napisanie przenonego programu z obsug wielu wtków, organi-
zacja IEEE zdefiniowaa standard 1003.1c. Pakiet obsugi wtków, który tam zdefi-
niowano, nosi nazw

Pthreads

. Jest on obsugiwany przez wikszo systemów

uniksowych. W standardzie zdefiniowano ponad 60 wywoa funkcji. To o wiele za
duo, by mona je byo dokadnie omówi w tej ksice. Omówimy zatem kilka naj-
waniejszych. Dziki temu Czytelnik uzyska obraz ich dziaania. Wywoania, które
opiszemy, zostay wyszczególnione w tabeli 2.5.

background image

148

PROCESY I WTKI

ROZ. 2

Tabela 2.5. Niektóre wywoania funkcji nalece do pakietu Pthreads

Wywoanie obsugi wtku

Opis

Pthread_create

Utworzenie nowego wtku

Pthread_exit

Zakoczenie wtku wywoujcego

Pthread_join

Oczekiwanie na zakoczenie specyficznego wtku

Pthread_yield

Zwolnienie procesora w celu umoliwienia dziaania innemu
wtkowi

Pthread_attr_init

Utworzenie i zainicjowanie struktury atrybutów wtku

Pthread_attr_destroy

Usunicie struktury atrybutów wtku

Wszystkie wtki pakietu

Pthreads

maj okrelone waciwoci. Kady z nich

posiada identyfikator, zbiór rejestrów (cznie z licznikiem programu) oraz zbiór
atrybutów zapisanych w pewnej strukturze. Do atrybutów tych naley rozmiar stosu,
parametry szeregowania oraz inne elementy potrzebne do korzystania z wtku.

Nowy wtek tworzy si za pomoc wywoania

pthread_create

. Jako warto

funkcji zwracany jest identyfikator nowo utworzonego wtku. Wywoanie to nieprzy-
padkowo przypomina wywoanie systemowe

fork

. W tym przypadku identyfikator

wtku spenia rol identyfikatora PID, gównie do celów identyfikacji wtków w innych
wywoaniach.

Kiedy wtek zakoczy prac, która zostaa do niego przydzielona, moe zakoczy

swoje dziaanie poprzez wywoanie funkcji

pthread_exit

. Wywoanie to zatrzymuje

wtek i zwalnia jego stos.

Czsto wtek musi czeka, a inny wtek zakoczy swoj prac. Dopiero pó-

niej moe kontynuowa dziaanie. Wtek oczekujcy na zakoczenie specyficznego
innego wtku wywouje funkcj

pthread_join

. Identyfikator wtku, który ma si

zakoczy, jest przekazywany jako parametr.

Czasami si zdarza, e wtek nie jest logicznie zablokowany, ale czuje, e dziaa

ju do dugo, i chce da innemu wtkowi szans dziaania. Cel ten mona osign
za pomoc wywoania

pthread_yield

. Nie ma takiego wywoania w przypadku pro-

cesów, poniewa zakada si, e procesy ze sob rywalizuj i kady z nich chce uzyska
maksymalnie duo czasu procesora. Poniewa jednak wtki procesu wspódziaaj
ze sob, a ich kod jest pisany przez tego samego programist, czasami programista
chce, aby kady z wtków otrzyma swoj szans.

Nastpne dwa wywoania obsugi wtków dotycz atrybutów wtku. Wywoanie

Pthread_attr_init

tworzy struktur atrybutów powizan z wtkiem i inicjuje j

do wartoci domylnych. Wartoci te (takie jak priorytet) mona zmienia poprzez
modyfikowanie pól w strukturze atrybutów.

Na koniec — wywoanie

pthread_attr_destroy

usuwa struktur atrybutów wtku

i zwalnia pami. Wywoanie to nie ma wpywu na wtki korzystajce z atrybutów.
Wtki te w dalszym cigu istniej.

background image

PODROZ. 2.2

WTKI

149

Aby uzyska lepszy obraz tego, jak dziaa pakiet

Pthreads

, rozwamy prosty przy-

kad z listingu 2.2. Gówny program wykonuje si w ptli

NUMBER_OF_THREADS

razy.

W kadej iteracji program wywietla komunikat i tworzy nowy wtek. Jeli two-
rzenie wtku nie powiedzie si, program wywietla komunikat o bdzie i koczy
dziaanie. Po utworzeniu wszystkich wtków program gówny koczy dziaanie.

Listing 2.2. Przykadowy program wykorzystujcy wtki

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

#define NUMBER_OF_THREADS 10

void *print-hello_world(void *tid)
{
/*

Funkcja wywietla identyfikator wtku i koczy dziaanie. */

printf("Witaj, wiecie. Pozdrowienia od wtku %d0, tid);
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
/*

Program gówny tworzy 10 wtków i koczy dziaanie. */

pthread_t threads[NUMBER_OF_THREADS];
int status, i;

for(i=0; i < NUMBER_OF_THREADS; i++) {
printf("Tu program gówny. Tworzenie wtku %d0, i);
status = pthread_create(&threads[i], NULL, print_hello_world,

´(void *)i);

if (status != 0) {
printf("Oops. Funkcja pthread_create zwrócia kod bdu %d0, status);
exit(-1);
}
}
exit(NULL);
}

Podczas tworzenia wtek wywietla jednowierszowy komunikat, w którym si

przedstawia, a nastpnie koczy dziaanie. Kolejno, w jakiej bd si pojawiay
poszczególne komunikaty, nie jest okrelona i moe by róna w kolejnych urucho-
mieniach programu.

Pakiet

Pthreads

w adnym razie nie ogranicza si do funkcji opisanych powyej.

Jest ich znacznie wicej. Niektóre z kolejnych wywoa opiszemy póniej, po omó-
wieniu zagadnienia synchronizacji procesów i wtków.

background image

150

PROCESY I WTKI

ROZ. 2

2.2.4. Implementacja wtków w przestrzeni uytkownika

Istniej dwa gówne sposoby implementacji pakietu obsugi wtków: w przestrzeni
uytkownika i w jdrze. Podzia ten jest do pynny. Moliwe s równie implemen-
tacje hybrydowe. Poniej opiszemy obie metody razem z ich zaletami i wadami.

Pierwsza metoda polega na umieszczeniu pakietu wtków w caoci w przestrzeni

uytkownika. Jdro nic o nich nie wie. Z jego punktu widzenia procesy, którymi zarz-
dza, s standardowe — jednowtkowe. Pierwsza i najbardziej oczywista zaleta tego
rozwizania polega na tym, e pakiet obsugi wtków na poziomie przestrzeni uyt-
kownika mona zaimplementowa w systemie operacyjnym, który nie obsuguje
wtków. Do tej kategorii w przeszoci naleay wszystkie systemy operacyjne
i nawet dzi niektóre do niej nale. Przy takim podejciu wtki s implementowane
za pomoc biblioteki.

Wszystkie tego rodzaju implementacje maj tak sam ogóln struktur, co zilu-

strowano na rysunku 2.9(a). Wtki dziaaj na bazie rodowiska wykonawczego —
kolekcji procedur, które nimi zarzdzaj. Do tej pory zapoznalimy si z czterema pro-
cedurami z tej grupy:

pthread_create

,

pthread_exit

,

pthread_join

oraz

pthread_

´yield

. Zwykle jednak jest ich wicej.

Rysunek 2.9. (a) Pakiet obsugi wtków na poziomie uytkownika; (b) pakiet obsugi
wtków zarzdzany przez jdro

Jeli wtki s zarzdzane w przestrzeni uytkownika, kady proces potrzebuje

swojej prywatnej tabeli wtków, która ma na celu ledzenie wtków w tym pro-
cesie. Tabela ta jest analogiczna do tabeli procesów w jdrze. Rónica polega na
tym, e ledzi ona waciwoci tylko na poziomie wtku — na przykad licznik pro-
gramu kadego z wtków, wskanik stosu, rejestry, stan itp. Tabela wtków jest
zarzdzana przez rodowisko wykonawcze. Kiedy wtek przechodzi do stanu goto-
woci lub zablokowania, informacje potrzebne do jego wznowienia s zapisywane
w tabeli wtków, dokadnie w taki sam sposób, w jaki jdro zapisuje informacje o pro-
cesach w tabeli procesów.

background image

PODROZ. 2.2

WTKI

151

Kiedy wtek wykona operacj, która moe spowodowa jego lokalne zabloko-

wanie, na przykad oczekuje, a inny wtek w tym samym procesie wykona jak
prac, wykonuje procedur ze rodowiska wykonawczego. Procedura ta sprawdza,
czy wtek musi by przeczony do stanu zablokowania. Jeli tak, to zapisuje rejestry
wtku (tzn. wasne) w tabeli wtków, szuka w tabeli wtku gotowego do dziaania
i aduje rejestry maszyny zapisanymi wartociami odpowiadajcymi nowemu wt-
kowi. Po przeczeniu wskanika stosu i licznika programu nowy wtek automatycznie
powraca do ycia. Jeli maszyna posiada instrukcj zapisujc wszystkie rejestry
oraz inn instrukcj, która je wszystkie aduje, przeczenie wtku mona przepro-
wadzi za pomoc zaledwie kilku instrukcji. Przeprowadzenie przeczania wtków
w taki sposób jest co najmniej o jeden rzd wielkoci szybsze od wykonywania roz-
kazu puapki do jdra. To silny argument przemawiajcy za implementacj pakietu
zarzdzania wtkami na poziomie przestrzeni uytkownika.

Jest jednak jedna zasadnicza rónica w porównaniu z procesami. Kiedy wtek

zakoczy na chwil dziaanie, na przykad kiedy wywoa funkcj

thread_yield

, kod

funkcji

thread_yield

moe zapisa informacje dotyczce wtku w samej tabeli wt-

ków. Co wicej, moe on nastpnie wywoa zarzdc wtków w celu wybrania innego
wtku do uruchomienia. Procedura zapisujca stan wtku oraz program szeregujcy
s po prostu lokalnymi procedurami, zatem wywoanie ich jest znacznie bardziej
wydajne od wykonania wywoania jdra. Midzy innymi nie jest potrzebny rozkaz
puapki, nie trzeba przecza kontekstu, nie trzeba oprónia pamici podrcznej.
W zwizku z tym zarzdzanie wtkami odbywa si bardzo szybko.

Implementacja wtków na poziomie przestrzeni uytkownika ma take inne

zalety. Dziki temu kademu procesowi mona przypisa wasny, spersonalizowany
algorytm szeregowania. W przypadku niektórych aplikacji, na przykad zawierajcych
wtek mechanizmu odmiecania, brak koniecznoci przejmowania si moliwoci
zatrzymania si wtku w nieodpowiednim momencie jest zalet. Takie rozwizanie
okazuje si równie atwiejsze do skalowania, poniewa wtki zarzdzane na pozio-
mie jdra niewtpliwie wymagaj przestrzeni na tabel i stos w jdrze, a to, w przy-
padku duej liczby wtków, moe by problemem.

Pomimo lepszej wydajnoci implementacja wtków na poziomie przestrzeni uyt-

kownika ma równie istotne wady. Pierwsza z nich dotyczy sposobu implementacji
blokujcych wywoa systemowych. Przypumy, e wtek czyta z klawiatury, zanim
zostanie wcinity jakikolwiek klawisz. Zezwolenie wtkowi na wykonanie wywoania
systemowego jest niedopuszczalne, poniewa spowoduje to zatrzymanie wszyst-
kich wtków. Trzeba pamita, e jednym z podstawowych celów korzystania z wt-
ków jest umoliwienie wszystkim wtkom uywania wywoa blokujcych, a przy
tym niedopuszczenie do tego, by zablokowany wtek mia wpyw na inne. W przy-
padku blokujcych wywoa systemowych trudno znale atwe rozwizanie pozwa-
lajce na spenienie tego celu.

Wszystkie wywoania systemowe mona zmieni na nieblokujce (na przykad

odczyt z klawiatury zwróciby 0 bajtów, gdyby znaki nie byy wczeniej zbuforowane),

background image

152

PROCESY I WTKI

ROZ. 2

ale wymaganie zmian w systemie operacyjnym jest nieatrakcyjne. Poza tym jednym
z argumentów przemawiajcych za obsug wtków na poziomie uytkownika bya
moliwo wykorzystania takiego mechanizmu w istniejcych systemach operacyj-
nych. Co wicej, zmiana semantyki wywoania

read

wymagaaby modyfikacji wielu

programów uytkowych.

Jedn z moliwych alternatyw mona zastosowa w przypadku, gdy mona z góry

powiedzie, czy wywoanie jest blokujce. W niektórych wersjach Uniksa istnieje
wywoanie systemowe

select

, które pozwala procesowi wywoujcemu na spraw-

dzenie, czy wywoanie

read

bdzie blokujce. Jeli jest dostpne to wywoanie,

mona zastpi procedur biblioteczn

read

now wersj, która najpierw wykonuje

wywoanie

select

, a nastpnie wywouje

read

tylko wtedy, gdy jest to bezpieczne

(tzn. nie spowoduje zablokowania). Jeeli wywoanie

read

ma doprowadzi do zablo-

kowania, nie jest wykonywane. Zamiast wywoania

read

uruchamiany jest inny wtek.

Nastpnym razem, kiedy rodowisko wykonawcze otrzyma sterowanie, moe spraw-
dzi ponownie, czy wykonanie wywoania

read

jest bezpieczne. Takie podejcie

wymaga zmiany implementacji czci biblioteki wywoa systemowych, jest niewy-
dajne i nieeleganckie, ale moliwoci wyboru s ograniczone. Kod wokó wywoania
systemowego, który wykonuje test, okrela si oson lub opakowaniem (ang.
wrapper).

W pewnym sensie podobnym problemem do blokujcych wywoa systemowych

jest problem braku stron w pamici (ang. page faults). Zagadnienie to omówimy
w rozdziale 3. Na razie wystarczy, jeli powiemy, e komputery mona skonfiguro-
wa w taki sposób, aby w danym momencie w gównej pamici znajdowaa si tylko
cz programu. Jeeli program wywoa lub skoczy do instrukcji, której nie ma
w pamici, wystpuje warunek braku strony. Wtedy system operacyjny jest zmuszony
do pobrania brakujcej instrukcji (wraz z jej ssiadami) z dysku. Na tym wanie
polega warunek braku strony. Podczas gdy potrzebna instrukcja jest wyszukiwana
i wczytywana, proces pozostaje zablokowany. Jeli wtek spowoduje warunek braku
strony, jdro, które nawet nie wie o istnieniu wtków, blokuje cay proces do czasu
zakoczenia dyskowej operacji wejcia-wyjcia. Robi to, mimo e nie ma przeszkód,
by inne wtki dziaay.

Inny problem z pakietami obsugi wtków na poziomie uytkownika polega na

tym, e jeli wtek zacznie dziaa, to aden inny wtek w tym procesie nigdy nie
zacznie dziaa, o ile pierwszy wtek dobrowolnie nie zrezygnuje z procesora.
W obrbie pojedynczego procesu nie ma przerwa zegara, dlatego nie ma moliwoci
szeregowania procesów w trybie cyklicznym (tzn. po kolei). Jeli wtek z wasnej
woli nie przekae sterowania do rodowiska wykonawczego, program szeregujcy
nigdy nie bdzie mia szansy dziaania.

Jednym z moliwych rozwiza problemu wtków dziaajcych bez przerwy jest

zlecenie rodowisku wykonawczemu dania sygnau zegara (przerwania) co sekund
w celu przekazania mu kontroli. Takie rozwizanie okazuje si jednak toporne i trudne
do zaprogramowania. Okresowe przerwania zegara z wysz czstotliwoci nie

background image

PODROZ. 2.2

WTKI

153

zawsze s moliwe, a nawet jeli tak jest, koszt obliczeniowy takiej operacji moe
by wysoki. Co wicej, wtek równie moe potrzebowa przerwania zegara, co prze-
szkadza wykorzystaniu zegara przez rodowisko wykonawcze.

Innym, rzeczywicie druzgoczcym argumentem przeciwko wtkom zarzdza-

nym na poziomie przestrzeni uytkownika jest fakt, e programici, ogólnie rzecz
biorc, potrzebuj wtków w aplikacjach, gdzie wtki blokuj si czsto — na przy-
kad w wielowtkowym serwerze WWW. Wtki te bezustannie wykonuj wywoa-
nia systemowe. Kiedy zostanie wykonany rozkaz puapki do jdra w celu realizacji
wywoania systemowego, jdro nie ma nic wicej do roboty przy przeczaniu wtków,
w przypadku gdy stary wtek si zablokowa, a zlecenie jdru wykonania tej czyn-
noci eliminuje potrzeb cigego wykonywania wywoa systemowych

select

spraw-

dzajcych, czy wywoania systemowe

read

s bezpieczne. Jaki jest sens istnienia

wtków w aplikacjach cakowicie powizanych z procesorem, które rzadko si blokuj?
Nikt nie jest w stanie zaproponowa sensownego rozwizania problemu wyliczania
liczb pierwszych lub grania w szachy z wykorzystaniem wtków, poniewa realizacja
tych programów w ten sposób nie przynosi istotnych korzyci.

2.2.5. Implementacja wtków w jdrze

Rozwamy teraz sytuacj, w której jdro wie o istnieniu wtków i to ono nimi zarzdza.
rodowisko wykonawcze w kadym z procesów nie jest wymagane, co pokazano na
rysunku 2.9(b). Tabela wtków równie nie wystpuje w kadym procesie. Zamiast
tego jdro dysponuje tabel wtków, która ledzi wszystkie wtki w systemie. Kiedy
wtek chce utworzy nowy wtek lub zniszczy istniejcy, wykonuje wywoanie
systemowe, które nastpnie realizuje utworzenie lub zniszczenie wtku poprzez aktu-
alizacj tabeli wtków na poziomie jdra.

W tabeli wtków w jdrze s zapisane rejestry, stan oraz inne informacje dla

kadego wtku. Informacje s takie same, jak w przypadku wtków zarzdzanych na
poziomie uytkownika, z t rónic, e s one umieszczone w jdrze, a nie w prze-
strzeni uytkownika (wewntrz rodowiska wykonawczego). Informacje te stanowi
podzbiór informacji tradycyjnie utrzymywanych przez jdro na temat jednowtkowych
procesów — czyli stanu procesów. Oprócz tego jdro utrzymuje równie tradycyjn
tabel procesów, która suy do ledzenia procesów.

Wszystkie wywoania, które mog zablokowa wtek, s implementowane jako

wywoania systemowe znaczco wikszym kosztem ni wywoanie procedury ro-
dowiska wykonawczego. Kiedy wtek si zablokuje, jdro moe uruchomi wtek
z tego samego procesu (jeli jaki jest gotowy) lub wtek z innego procesu. W przy-
padku wtków zarzdzanych na poziomie przestrzeni uytkownika rodowisko wyko-
nawcze uruchamia wtki z wasnego procesu do czasu, a jdro zabierze mu proce-
sor (lub nie bdzie wtków gotowych do dziaania).

Ze wzgldu na relatywnie wikszy koszt tworzenia i niszczenia wtków na poziomie

jdra niektóre systemy przyjmuj rozwizanie „ekologiczne” i ponownie wykorzystuj

background image

154

PROCESY I WTKI

ROZ. 2

swoje wtki. W momencie niszczenia wtku jest on oznaczany jako niemoliwy do
uruchomienia, ale poza tym struktury danych jdra pozostaj bez zmian. Kiedy
póniej trzeba utworzy nowy wtek, stary wtek jest reaktywowany, co eliminuje
konieczno wykonywania pewnych oblicze. Recykling wtków jest równie mo-
liwy w przypadku wtków zarzdzanych w przestrzeni uytkownika, ale poniewa
koszty zarzdzania wtkami s znacznie nisze, motywacja do korzystania z tego
mechanizmu jest mniejsza.

Wtki jdra nie wymagaj adnych nowych nieblokujcych wywoa systemo-

wych. Co wicej, jeli jeden z wtków w procesie spowoduje warunek braku strony,
jdro moe atwo sprawdzi, czy proces zawiera inne wtki moliwe do uruchomie-
nia. Jeli tak, uruchamia jeden z nich w oczekiwaniu na przesanie z dysku wymaganej
strony. Gówn wad tego rozwizania jest fakt, e koszty wywoania systemowego
s znaczce. W zwizku z tym, w przypadku duej liczby operacji zarzdzania wtkami
(tworzenia, niszczenia itp.), ponoszone koszty obliczeniowe okazuj si wysokie.

O ile wykorzystanie zarzdzania wtkami na poziomie jdra rozwizuje niektóre

problemy, o tyle nie rozwizuje ich wszystkich. Na przykad co si stanie, jeli wie-
lowtkowy proces wykona wywoanie

fork

? Czy nowy proces bdzie mia tyle

wtków, co stary, czy tylko jeden? W wielu przypadkach najlepszy wybór zaley od
tego, do czego bdzie suy nowy proces. Jeli zamierza skorzysta z wywoania

exec

w celu uruchomienia nowego programu, prawdopodobnie waciwe bdzie

stworzenie procesu z jednym wtkiem, jeli jednak ma on kontynuowa dziaanie,
reprodukcja wszystkich wtków wydaje si waciwsza.

Innym problemem s sygnay. Jak pamitamy, sygnay s przesyane do procesów,

a nie do wtków (przynajmniej w modelu klasycznym). Który wtek ma obsuy
nadchodzcy sygna? Mona wyobrazi sobie rozwizanie, w którym wtki rejestruj
swoje zainteresowanie okrelonymi sygnaami. Dziki temu w przypadku nadejcia
sygnau mógby on by skierowany do wtku, który na ten sygna oczekuje. Co si
jednak stanie, jeli dwa wtki (lub wiksza liczba wtków) zarejestruj zaintereso-
wanie tym samym sygnaem? To tylko dwa problemy, jakie stwarzaj wtki. Jest
ich jednak wicej.

2.2.6. Implementacje hybrydowe

Próbowano rónych rozwiza majcych na celu poczenie zalet zarzdzania wt-
kami na poziomie uytkownika oraz zarzdzania nimi na poziomie jdra. Jednym ze
sposobów jest uycie wtków na poziomie jdra, a nastpnie zwielokrotnienie nie-
których lub wszystkich wtków jdra na wtki na poziomie uytkownika. Sposób
ten pokazano na rysunku 2.10. W przypadku skorzystania z takiego podejcia progra-
mista moe okreli, ile wtków jdra chce wykorzysta oraz na ile wtków poziomu
uytkownika ma by zwielokrotniony kady z nich. Taki model daje najwiksz
elastyczno.

background image

PODROZ. 2.2

WTKI

155

Rysunek 2.10. Zwielokrotnianie wtków uytkownika na bazie wtków jdra

Przy tym podejciu jdro jest wiadome istnienia wycznie wtków poziomu

jdra i tylko nimi zarzdza. Niektóre sporód tych wtków mog zawiera wiele
wtków poziomu uytkownika, stworzonych na bazie wtków jdra. Wtki poziomu
uytkownika s tworzone, niszczone i zarzdzane identycznie, jak wtki na poziomie
uytkownika dziaajce w systemie operacyjnym bez obsugi wielowtkowoci. W tym
modelu kady wtek poziomu jdra posiada pewien zbiór wtków na poziomie
uytkownika. Wtki poziomu uytkownika po kolei korzystaj z wtku poziomu jdra.

2.2.7. Mechanizm aktywacji zarzdcy

Chocia zarzdzanie wtkami na poziomie jdra jest lepsze od zarzdzania nimi na
poziomie uytkownika pod pewnymi istotnymi wzgldami, jest ono równie bezdy-
skusyjnie wolniejsze. W zwizku z tym poszukiwano sposobów poprawy tej sytuacji
bez koniecznoci rezygnacji z ich dobrych waciwoci. Poniej opiszemy jedno
z zaproponowanych rozwiza, opracowane przez zespó kierowany przez Andersona
[Anderson et al., 1992] i nazywane aktywacj zarzdcy (ang. scheduler activations).
Podobne prace zostay opisane w [Edlera et al., 1988] oraz [Scott et al., 1990].

Celem dziaania mechanizmu aktywacji zarzdcy jest naladowanie funkcji wt-

ków jdra, ale z zapewnieniem lepszej wydajnoci i elastycznoci — cech, które
zwykle charakteryzuj pakiety zarzdzania wtkami zaimplementowane w prze-
strzeni uytkownika. W szczególnoci wtki uytkownika nie powinny wykonywa
specjalnych, nieblokujcych wywoa systemowych lub sprawdza wczeniej, czy
wykonanie okrelonych wywoa systemowych jest bezpieczne. Niemniej jednak,
kiedy wtek zablokuje si na wywoaniu systemowym lub sytuacji braku strony,
powinien mie moliwo uruchomienia innego wtku w ramach tego samego pro-
cesu, jeli jaki jest gotowy do dziaania.

Wydajno osignito dziki unikniciu niepotrzebnych przej pomidzy prze-

strzeni uytkownika a przestrzeni jdra. Jeli na przykad wtek zablokuje
si w oczekiwaniu na to, a inny wtek wykona jakie dziaania, nie ma powodu

background image

156

PROCESY I WTKI

ROZ. 2

informowania o tym jdra. Dziki temu unika si kosztów zwizanych z przejciami
pomidzy przestrzeniami jdra i uytkownika. rodowisko wykonawcze przestrzeni
uytkownika moe samodzielnie zablokowa wtek synchronizujcy i zainicjowa nowy.

Kiedy jest wykorzystywany mechanizm aktywacji zarzdcy, jdro przypisuje

okrelon liczb procesorów wirtualnych do kadego procesu i umoliwia rodowisku
wykonawczemu (przestrzeni uytkownika) na przydzielanie wtków do procesorów.
Mechanizm ten moe by równie wykorzystany w systemie wieloprocesorowym,
w którym zamiast procesorów wirtualnych s procesory fizyczne. Liczba procesorów
wirtualnych przydzielonych do procesu zazwyczaj pocztkowo wynosi jeden, ale
proces moe poprosi o wicej, a take zwróci procesory, których ju nie potrze-
buje. Jdro moe równie zwróci wirtualne procesory przydzielone wczeniej,
w celu przypisania ich procesom bardziej potrzebujcym.

Podstawowa zasada dziaania tego mechanizmu polega na tym, e jeli jdro dowie

si o blokadzie wtku (na przykad z powodu uruchomienia blokujcego wywoania
systemowego lub braku strony), to powiadamia o tym rodowisko wykonawcze pro-
cesu. W tym celu przekazuje na stos w postaci parametrów numer zablokowanego
wtku oraz opis zdarzenia, które wystpio. Powiadomienie moe by zrealizowane
dziki temu, e jdro uaktywnia rodowisko wykonawcze znajdujce si pod znanym
adresem pocztkowym. Jest to mechanizm w przyblieniu analogiczny do sygnaów
w Uniksie. Mechanizm ten okrela si terminem wezwanie (ang. upcall).

Po uaktywnieniu w taki sposób rodowisko wykonawcze moe zmieni harmono-

gram dziaania swoich wtków. Zazwyczaj odbywa si to poprzez oznaczenie biecego
wtku jako zablokowany oraz pobranie innego wtku z listy wtków bdcych w goto-
woci, ustawienie jego rejestrów i wznowienie dziaania. Póniej, kiedy jdro dowie
si, e poprzedni wtek moe ponownie dziaa (na przykad potok, z którego czyta
dane, zawiera dane lub brakujca strona zostaa pobrana z dysku), wykonuje kolejne
wezwanie do rodowiska wykonawczego w celu poinformowania go o tym zdarzeniu.
rodowisko wykonawcze moe wówczas we wasnej gestii natychmiast zrestartowa
zablokowany wtek lub umieci go na licie wtków do póniejszego uruchomienia.

Jeeli wystpi przerwanie sprztowe, gdy dziaa wtek uytkownika, procesor

przecza si do trybu jdra. Jeli przerwanie jest spowodowane przez zdarzenie,
którym przerwany proces nie jest zainteresowany — na przykad zakoczenie
operacji wejcia-wyjcia innego procesu — to kiedy procedura obsugi przerwania
zakoczy dziaanie, umieszcza przerwany wtek w tym samym stanie, w jakim znaj-
dowa si on przed wystpieniem przerwania. Jeli jednak proces jest zaintereso-
wany przerwaniem — na przykad nadejcie strony wymaganej przez jeden z wtków
procesu — przerwany proces nie jest wznawiany. Zamiast tego jest on zawieszany,
a na tym samym wirtualnym procesorze zaczyna dziaa rodowisko wykonawcze —
stan przerwanego wtku jest w tym momencie umieszczony na stosie. W tym
momencie rodowisko wykonawcze podejmuje decyzj o tym, jakiemu wtkowi przy-
dzieli dany procesor: przerwanemu, nowo przygotowanemu do dziaania czy jakie-
mu innemu.

background image

PODROZ. 2.2

WTKI

157

Wad mechanizmu aktywacji zarzdcy jest cakowite poleganie na wezwaniach —

jest to pojcie, które narusza wewntrzn struktur kadego systemu warstwo-
wego. Zwykle warstwa n oferuje okrelone usugi, które moe wywoa warstwa
n+1, warstwa n nie moe jednak wywoywa procedur w warstwie n+1. Mechanizm
wezwa narusza t podstawow zasad.

2.2.8. Wtki pop-up

Wtki czsto si przydaj w systemach rozproszonych. Istotnym przykadem moe
by sposób postpowania z nadchodzcymi komunikatami — na przykad daniami
obsugi. Tradycyjne podejcie polega na tym, e na komunikat oczekuje proces lub
wtek zablokowany na wywoaniu systemowym

receive

. Kiedy nadejdzie komu-

nikat, wtek ten przyjmuje go, rozpakowuje, analizuje zawarto i przetwarza.

Moliwe jest jednak cakiem inne podejcie — po dotarciu komunikatu system

tworzy nowy wtek do jego obsugi. Taki wtek okrela si jako wtek pop-up.
Zilustrowano go na rysunku 2.11. Zasadnicza zaleta wtków pop-up polega na tym,
e poniewa s one zupenie nowe, nie maj adnej historii — rejestrów, stosu,
czegokolwiek, co musiaoby by odtworzone. Kady wtek rozpoczyna si jako
nowy i wszystkie s identyczne. Dziki temu takie wtki mona tworzy szybko.
Nowy wtek otrzymuje przychodzcy komunikat do przetworzenia. Dziki zasto-
sowaniu wtków pop-up opónienie pomidzy przybyciem komunikatu a rozpocz-
ciem jego przetwarzania jest bardzo niewielkie.

Rysunek 2.11. Tworzenie nowego wtku po przybyciu pakietu: (a) zanim nadejdzie
komunikat; (b) po nadejciu komunikatu

W przypadku wykorzystania wtków pop-up potrzebne jest pewne zaawansowane

planowanie. Na przykad w którym procesie dziaa wtek? Jeli system obsuguje wtki

background image

158

PROCESY I WTKI

ROZ. 2

dziaajce w kontekcie jdra, to wtek moe tam dziaa (dlatego wanie nie poka-
zalimy jdra na rysunku 2.11). Umieszczenie wtku pop-up w przestrzeni jdra
zazwyczaj jest atwiejsze i szybsze ni umieszczenie go w przestrzeni uytkownika.
Ponadto wtek pop-up w przestrzeni jdra moe atwo uzyska dostp do wszystkich
tabel i urzdze wejcia-wyjcia jdra, co moe by potrzebne do przetwarzania prze-
rwa. Z drugiej strony dziaajcy bdnie wtek jdra moe zrobi wicej szkód ni
bdnie dziaajcy wtek przestrzeni uytkownika. Jeli na przykad dziaa zbyt dugo
i nie ma moliwoci jego wywaszczenia, wchodzce dane mog zosta utracone.

2.2.9. Przystosowywanie kodu jednowtkowego

do obsugi wielu wtków

Dla procesów jednowtkowych napisano wiele programów. Ich konwersja na posta
wielowtkow jest znacznie trudniejsza, ni mogoby si wydawa na pierwszy rzut
oka. Poniej zaprezentujemy kilka problemów, które mog wystpi podczas takiej
konwersji.

Na pocztek naley sobie uwiadomi, e wtek, tak jak proces, zwykle skada si

z wielu procedur. Mog one mie zmienne lokalne, zmienne globalne i parametry.
Zmienne lokalne i parametry nie powoduj adnych problemów, tymczasem zmienne,
które s globalne dla wtku, ale nie s globalne dla caego programu, sprawiaj pro-
blem. S to zmienne, które s globalne w tym sensie, e uywa ich wiele procedur
w obrbie wtku (poniewa mog one wykorzystywa dowolne zmienne globalne),
ale inne wtki nie powinny z nich korzysta.

Dla przykadu przeanalizujmy zmienn

errno

wystpujc w systemie UNIX:

kiedy proces (lub wtek) wykonuje wywoanie systemowe, które koczy si nie-
powodzeniem, do zmiennej

errno

jest zapisywany kod bdu. Na rysunku 2.12

wtek nr 1 wykonuje wywoanie systemowe

access

po to, aby si dowiedzie, czy ma

uprawnienia dostpu do okrelonego pliku. System operacyjny zwraca odpowied
w zmiennej globalnej

errno

. Po zwróceniu sterowania do wtku 1., ale jeszcze przed

przeczytaniem przez niego zmiennej

errno

, program szeregujcy zdecydowa, e

wtek nr 1 mia przydzielony procesor wystarczajco dugo i zdecydowa przeczy
go do wtku 2. Wtek 2. uruchomi wywoanie systemowe

open

, które si nie powio-

do. Spowodowao to nadpisanie zmiennej

errno

, a kod dostpu wtku 1. zosta utra-

cony na zawsze. Kiedy wtek 1. póniej si uruchomi, przeczyta nieprawidow warto
i bdzie dziaa nieprawidowo.

Moliwych jest wiele rozwiza tego problemu. Jedno z nich polega na cako-

witym wyczeniu zmiennych globalnych. Cho mogoby si wydawa, e jest to
rozwizanie idealne, koliduje ono z wikszoci istniejcych programów. Inne roz-
wizanie to przypisanie kademu wtkowi wasnych, prywatnych zmiennych glo-
balnych, tak jak pokazano na rysunku 2.13. W ten sposób kady wtek bdzie mia
wasn, prywatn kopi zmiennej

errno

i innych zmiennych globalnych, co pozwoli

na uniknicie konfliktów. Przyjcie tego rozwizania tworzy nowy poziom zasigu:

background image

PODROZ. 2.2

WTKI

159

Rysunek 2.12. Konflikty pomidzy wtkami spowodowany uyciem zmiennej globalnej

Rysunek 2.13. Wtki mog mie prywatne zmienne globalne

zmienne widoczne dla wszystkich procedur wtku. Poziom ten wystpuje obok ist-
niejcych poziomów: zmienne widoczne tylko dla jednej procedury oraz zmienne
widoczne w kadym punkcie programu.

Dostp do prywatnych zmiennych globalnych jest jednak nieco utrudniony, ponie-

wa wikszo jzyków programowania zapewnia sposób wyraania zmiennych lokal-
nych i zmiennych globalnych, ale nie ma form porednich. Mona zaalokowa fragment
pamici na zmienne globalne i przekaza go do kadej procedury w wtku w postaci
dodatkowego parametru. Chocia nie jest to zbyt eleganckie rozwizanie, okazuje
si jednak skuteczne.

Alternatywnie mona stworzy nowe procedury biblioteczne do tworzenia, usta-

wiania i czytania tych zmiennych globalnych na poziomie wtku. Pierwsze wywoa-
nie moe mie nastpujc posta:

create_global("bufptr");

background image

160

PROCESY I WTKI

ROZ. 2

Wywoanie to alokuje pami dla wskanika o nazwie

bufptr

na stercie lub w specjal-

nym obszarze pamici zarezerwowanym dla wywoujcego wtku. Niezalenie od tego,
gdzie jest zaalokowana pami, tylko wywoujcy wtek ma dostp do zmiennej glo-
balnej. Jeli inny wtek utworzy zmienn globaln o tej samej nazwie, otrzyma inn
lokalizacj w pamici — tak, która nie koliduje z istniejc.

Do dostpu do zmiennych globalnych potrzebne s dwa wywoania: jedno do ich

zapisywania i drugie do odczytu. Do zapisywania potrzebne jest wywoanie postaci:

set_global("bufptr", &buf);

Wywoanie to zapisuje warto wskanika w lokalizacji pamici utworzonej wcze-
niej przez wywoanie do procedury

create_global

. Wywoanie do przeczytania

zmiennej globalnej moe mie nastpujc posta:

bufptr = read_global("bufptr");

Zwraca ono adres zapisany w zmiennej globalnej. Dziki temu mona uzyska dostp
do jej danych.

Nastpny problem podczas przeksztacania programu jednowtkowego na wielo-

wtkowy polega na tym, e wiele procedur bibliotecznych nie pozwala na tak zwan
wielobieno. Oznacza to, e nie ma moliwoci wywoania innej procedury, jeli
poprzednie wywoanie si nie zakoczyo. Na przykad wysyanie wiadomoci w sieci
mona by z powodzeniem zaprogramowa w taki sposób, aby wiadomo bya two-
rzona w ustalonym buforze w obrbie biblioteki, a nastpnie by wykonywany rozkaz
puapki do jdra w celu jej wysania. Co si stanie, jeli jeden wtek utworzy swoj
wiadomo w buforze, a nastpnie przerwanie zegara wymusio przeczenie do dru-
giego wtku, który natychmiast nadpisze bufor wasn wiadomoci.

Podobnie procedury alokacji pamici, na przykad

malloc

w Uniksie, utrzymuj

kluczowe tabele dotyczce wykorzystania pamici — na przykad powizan list
dostpnych fragmentów pamici. Podczas gdy procedura

malloc

jest zajta aktu-

alizacj tych list, mog one czasowo by w niespójnym stanie — zawiera wska-
niki donikd. Jeli nastpi przeczenie wtku w chwili, gdy tabele bd niespójne
i nadejdzie nowe wywoanie z innego wtku, moe doj do uycia nieprawidowego
wskanika, co w efekcie moe doprowadzi do awarii programu. Skuteczne wyelimi-
nowanie wszystkich tych problemów oznacza konieczno przepisania od nowa caej
biblioteki. Wykonanie takiego przedsiwzicia nie jest proste.

Innym rozwizaniem jest wyposaenie kadej procedury w kod opakowujcy,

który ustawia bit do oznaczenia biblioteki tak, jakby bya uywana. Kada próba innego
wtku skorzystania z procedury bibliotecznej, podczas gdy poprzednie wywoanie
nie zostao zakoczone, jest blokowana. Chocia takie rozwizanie jest wykonalne,
w duym stopniu eliminuje ono moliwo wykorzystania wspóbienoci.

Inn opcj jest wykorzystanie sygnaów. Niektóre sygnay z logicznego punktu

widzenia s specyficzne dla wtku, a inne nie. Jeli na przykad wtek wykonuje
wywoanie

alarm

, logiczne jest, aby wynikowy sygna zosta przesany do wtku,

który wykona wywoanie. Jeli jednak wtki s zaimplementowane w caoci w prze-

background image

PODROZ. 2.3

KOMUNIKACJA MIDZY PROCESAMI

161

strzeni uytkownika, jdro nie wie nawet o istnieniu wtków, a zatem trudno mu skie-
rowa sygna do waciwego wtku. Dodatkowe komplikacje wystpuj w przypadku,
gdy proces pozwala na wystpowanie tylko jednego nieobsuonego alarmu w danym
momencie, a kilka wtków niezalenie wykonuje wywoanie

alarm

.

Inne sygnay, na przykad przerwanie klawiatury, nie s specyficzne dla wtku.

Co powinno je przechwyci? Wyznaczony wtek? Wszystkie wtki? Nowo utworzony
wtek pop-up? Ponadto co si stanie, jeli jeden wtek zmieni procedury obsugi
sygnaów bez informowania pozostaych wtków? A co si wydarzy, kiedy jeden wtek
bdzie chcia przechwyci okrelony sygna (na przykad wcinicie przez uytkownika
kombinacji Ctrl+C), a inny wtek bdzie potrzebowa tego sygnau do zakoczenia
procesu? Taka sytuacja moe wystpi, jeli jeden wtek lub kilka wtków korzysta
ze standardowych procedur bibliotecznych, a inne s napisane przez uytkownika.
Jest oczywiste, e yczenia tych wtków koliduj ze sob. Ogólnie rzecz biorc,
sygnay s trudne do zarzdzania w rodowisku jednowtkowym. Przejcie do rodo-
wiska wielowtkowego w aden sposób nie uatwia zarzdzania nimi.

Ostatnim problemem zwizanym z wtkami jest zarzdzanie stosem. W wielu

systemach, w przypadku wystpienia przepenienia stosu, jdro automatycznie dostar-
cza takiemu procesowi wicej miejsca na stosie. Jeli proces ma wiele wtków, musi
równie mie wiele stosów. Jeli jdro nie posiada informacji o wszystkich tych
stosach, nie moe ich automatycznie rozszerza, gdy wyczerpie si na nich miejsce.
W rzeczywistoci jdro moe nawet nie wiedzie, e brak strony w pamici jest zwi-
zany z rozszerzeniem si stosu jakiego wtku.

Problemy te nie s oczywicie nie do rozwizania, ale pokazuj, e wprowadze-

nie wtków do istniejcego systemu bez znaczcej jego przebudowy nie zadziaa.
Trzeba co najmniej zmodyfikowa definicj semantyki wywoa systemowych oraz
biblioteki. Wszystkie te czynnoci trzeba dodatkowo wykona tak, aby zachowa
wsteczn zgodno z istniejcymi programami, przy zaoeniu, e wykorzystuj one
procesy zawierajce po jednym wtku. Wicej informacji na temat wtków mona
znale w nastpujcych pozycjach [Hauser et al., 1993] oraz [Marsh et al., 1991].

2.3. KOMUNIKACJA MIDZY PROCESAMI

2.3

KOMUNIKACJA MIDZY PROCESAMI

Procesy czsto musz si komunikowa z innymi procesami. Na przykad w przypadku
potoku w powoce wyjcie pierwszego procesu musi by przekazane do drugiego
procesu, i tak dalej, do niszych warstw. Tak wic wystpuje potrzeba komunikacji
midzy procesami. Najlepiej, gdyby miaa ona czyteln struktur i gdyby nie korzy-
stano w niej z przerwa. W poniszych punktach przyjrzymy si niektórym pro-
blemom zwizanym z komunikacj midzyprocesow (ang. InterProcess Communi-
cation
IPC).

Mówic w skrócie: wi si z tym trzy problemy. O pierwszym bya mowa ju

wczeniej: w jaki sposób jeden proces moe przekazywa informacje do innego?


Wyszukiwarka

Podobne podstrony:
Analiza sledcza i powlamaniowa Zaawansowane techniki prowadzenia analizy w systemie Windows 7 Wydani
Rafał Polak 12k2 lab8, Inżynieria Oprogramowania - Informatyka, Semestr III, Systemy Operacyjne, Spr
Rafał Polak 12k2 lab9, Inżynieria Oprogramowania - Informatyka, Semestr III, Systemy Operacyjne, Spr
PYTANIA WEJSCIOWKI, Materiały, III semestr, Systemy operacyjne- materiały, egzamin, SO egz, SO egz,
Rafał Polak 12k2 lab4a, Inżynieria Oprogramowania - Informatyka, Semestr III, Systemy Operacyjne, Sp
Egzamin lato 2k00-2, Materiały, III semestr, Systemy operacyjne- materiały, egzamin, so-egzamin, roz
Rafał Polak 12k2 lab4b, Inżynieria Oprogramowania - Informatyka, Semestr III, Systemy Operacyjne, Sp
SO, Materiały, III semestr, Systemy operacyjne- materiały, egzamin, egzamin SO, egzamin SO
Egzamin lato 2k00-1, Materiały, III semestr, Systemy operacyjne- materiały, egzamin, so-egzamin, roz
Rafał Polak 12k2 lab11, Inżynieria Oprogramowania - Informatyka, Semestr III, Systemy Operacyjne, Sp

więcej podobnych podstron