Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00305 008271 11001433 na godz. na dobę w sumie
Systemy operacyjne. Wydanie III - książka
Systemy operacyjne. Wydanie III - książka
Autor: Liczba stron: 1288
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-2311-2 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> systemy operacyjne >> inne
Porównaj ceny (książka, ebook, audiobook).

Wszystko, co chcesz wiedzieć o systemach operacyjnych!

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śród jej współautorów znajdziesz takich specjalistów, jak Ada Gavrilovska-Habl, Michael Jipping oraz David Robert. Dzięki nim książka została wzbogacona między innymi o rozdziały poświęcone Symbianowi i Linuksowi. W pierwszej kolejności zapoznasz się z ich rysem historycznym. W końcu ich dzisiejsze możliwości to zasługa wielu dekad badań i eksperymentów. Dowiesz się także, na czym polega wirtualizacja, jak działają systemy rozproszone oraz jak chronić je przed atakami. 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.

Kompendium wiedzy o współczesnych systemach operacyjnych!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

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! (cid:129) Jak dzia³aj¹ algorytmy szeregowania? (cid:129) Jakie mo¿liwoœci stoj¹ za wirtualizacj¹? (cid:129) 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. (cid:129) Rys historyczny systemów operacyjnych (cid:129) Sprzêt komputerowy – przegl¹d komponentów (cid:129) Rodzaje systemów operacyjnych (cid:129) Struktura systemów operacyjnych (cid:129) Obs³uga wywo³añ systemowych (cid:129) Zarz¹dzanie procesami i w¹tkami oraz komunikacja miêdzy nimi (cid:129) Szeregowanie zadañ (cid:129) Zarz¹dzanie pamiêci¹ (cid:129) Obs³uga systemów plików (cid:129) Urz¹dzenia wejœcia-wyjœcia (cid:129) Metody zarz¹dzania energi¹ (cid:129) Rozwi¹zywanie problemu zakleszczeñ (cid:129) Charakterystyka multimedialnych systemów operacyjnych (cid:129) Obs³uga systemów wieloprocesorowych (cid:129) Wirtualizacja (cid:129) Bezpieczeñstwo danych na poziomie systemu operacyjnego (cid:129) Zagro¿enia ze strony z³oœliwego oprogramowania (cid:129) System Linux – historia, budowa, dzia³anie (cid:129) System Windows Vista – studium przypadku (cid:129) System Symbian – przeznaczenie, dzia³anie, obs³uga Kompendium wiedzy o wspó³czesnych systemach operacyjnych! SPIS TRE¥CI PRZEDMOWA O AUTORZE 1 WPROWADZENIE 23 27 29 1.1. CZYM JEST SYSTEM OPERACYJNY? 32 1.1.1. 1.1.2. System operacyjny jako rozszerzona maszyna 32 System operacyjny jako menedĝer 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) — ukïady scalone i wieloprogramowoĂÊ 40 1.2.4. Czwarta generacja (1980 – czasy wspóïczesne) — komputery osobiste 45 1.3. SPRZ}T KOMPUTEROWY — PRZEGLkD 50 Procesory 50 1.3.1. 1.3.2. PamiÚÊ 54 1.3.3. Dyski 58 1.3.4. TaĂmy 59 5 6 SPIS TRE¥CI 1.3.5. UrzÈdzenia wejĂcia-wyjĂcia 59 1.3.6. Magistrale 63 1.3.7. Uruchamianie komputera 66 1.4. 1.5. Systemy operacyjne komputerów mainframe 67 Systemy operacyjne serwerów 68 Systemy operacyjne komputerów osobistych 68 Systemy operacyjne komputerów podrÚcznych 69 PRZEGLkD SYSTEMÓW OPERACYJNYCH 67 1.4.1. 1.4.2. 1.4.3. Wieloprocesorowe systemy operacyjne 68 1.4.4. 1.4.5. 1.4.6. Wbudowane systemy operacyjne 69 1.4.7. 1.4.8. 1.4.9. Systemy operacyjne wÚzïów sensorowych 70 Systemy operacyjne czasu rzeczywistego 70 Systemy operacyjne kart elektronicznych 71 Procesy 72 Przestrzenie adresowe 74 Pliki 75 POJ}CIA DOTYCZkCE SYSTEMÓW OPERACYJNYCH 72 1.5.1. 1.5.2. 1.5.3. 1.5.4. WejĂcie-wyjĂcie 79 Zabezpieczenia 79 1.5.5. 1.5.6. Powïoka 80 1.5.7. Ontogeneza jest rekapitulacjÈ filogenezy 81 1.6. WYWO’ANIA SYSTEMOWE 85 1.6.1. Wywoïania systemowe do zarzÈdzania procesami 90 1.6.2. Wywoïania systemowe do zarzÈdzania plikami 93 1.6.3. Wywoïania systemowe do zarzÈdzania katalogami 94 1.6.4. Róĝne wywoïania systemowe 96 1.6.5. Interfejs Win32 API systemu Windows 97 1.7. 1.8. STRUKTURA SYSTEMÓW OPERACYJNYCH 99 1.7.1. Systemy monolityczne 100 1.7.2. Systemy warstwowe 101 1.7.3. MikrojÈdra 102 1.7.4. Model klient-serwer 105 1.7.5. Maszyny wirtualne 106 1.7.6. EgzojÈdra 110 JÚzyk C 111 Pliki nagïówkowe 112 ¥WIAT WED’UG J}ZYKA C 111 1.8.1. 1.8.2. 1.8.3. Duĝe projekty programistyczne 113 1.8.4. Model fazy dziaïania 114 SPIS TRE¥CI 7 1.9. BADANIA DOTYCZkCE SYSTEMÓW OPERACYJNYCH 115 1.10. PLAN POZOSTA’EJ CZ}¥CI KSIk¿KI 117 1.11. JEDNOSTKI MIAR 118 1.12. PODSUMOWANIE 119 2 PROCESY I WkTKI 123 2.1. PROCESY 123 2.1.1. Model procesów 124 2.1.2. Tworzenie procesów 126 2.1.3. Koñczenie dziaïania procesów 129 2.1.4. Hierarchie procesów 130 2.1.5. 2.1.6. 2.1.7. Modelowanie wieloprogramowoĂci 135 Stany procesów 131 Implementacja procesów 133 2.2. WkTKI 137 Implementacja wÈtków w przestrzeni uĝytkownika 150 Implementacja wÈtków w jÈdrze 153 Implementacje hybrydowe 154 2.2.1. Wykorzystanie wÈtków 137 2.2.2. Klasyczny model wÈtków 143 2.2.3. WÈtki POSIX 147 2.2.4. 2.2.5. 2.2.6. 2.2.7. Mechanizm aktywacji zarzÈdcy 155 2.2.8. WÈtki pop-up 157 2.2.9. Przystosowywanie kodu jednowÈtkowego do obsïugi wielu wÈtków 158 2.3. KOMUNIKACJA MI}DZY PROCESAMI 161 2.3.1. WyĂcig 162 2.3.2. Regiony krytyczne 163 2.3.3. Wzajemne wykluczanie z wykorzystaniem aktywnego oczekiwania 165 2.3.4. Wywoïania sleep i wakeup 171 Semafory 174 2.3.5. 2.3.6. Muteksy 177 2.3.7. Monitory 182 2.3.8. 2.3.9. Bariery 191 Przekazywanie komunikatów 188 8 2.4. SPIS TRE¥CI SZEREGOWANIE 193 2.4.1. Wprowadzenie do szeregowania 193 2.4.2. 2.4.3. 2.4.4. 2.4.5. Oddzielenie strategii od mechanizmu 212 2.4.6. Szeregowanie w systemach wsadowych 201 Szeregowanie w systemach interaktywnych 203 Szeregowanie w systemach czasu rzeczywistego 210 Szeregowanie wÈtków 212 2.5. KLASYCZNE PROBLEMY KOMUNIKACJI MI}DZY PROCESAMI 214 2.5.1. 2.5.2. Problem piÚciu filozofów 214 Problem czytelników i pisarzy 218 2.6. 2.7. PRACE BADAWCZE NAD PROCESAMI I WkTKAMI 219 PODSUMOWANIE 220 3 ZARZkDZANIE PAMI}CIk 227 3.1. BRAK ABSTRAKCJI PAMI}CI 228 3.2. ABSTRAKCJA PAMI}CI: PRZESTRZENIE ADRESOWE 232 PojÚcie przestrzeni adresowej 232 3.2.1. 3.2.2. Wymiana pamiÚci 235 3.2.3. ZarzÈdzanie wolnÈ pamiÚciÈ 237 3.3. PAMI}m WIRTUALNA 241 3.3.1. Stronicowanie 243 3.3.2. Tabele stron 247 3.3.3. 3.3.4. Tabele stron dla pamiÚci o duĝej objÚtoĂci 253 Przyspieszenie stronicowania 249 3.4. ALGORYTMY ZAST}POWANIA STRON 257 3.4.1. Optymalny algorytm zastÚpowania 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 bazujÈcy na zbiorze roboczym 265 SPIS TRE¥CI 9 3.4.9. Algorytm WSClock 269 3.4.10. Podsumowanie algorytmów zastÚpowania stron 271 3.5. Lokalne i globalne strategie alokacji pamiÚci 273 ZarzÈdzanie obciÈĝeniem 276 Strony wspóïdzielone 279 PROBLEMY PROJEKTOWE SYSTEMÓW STRONICOWANIA 273 3.5.1. 3.5.2. 3.5.3. Rozmiar strony 277 3.5.4. Osobne przestrzenie instrukcji i danych 278 3.5.5. 3.5.6. Biblioteki wspóïdzielone 281 3.5.7. 3.5.8. 3.5.9. Pliki odwzorowane w pamiÚci 283 Strategia czyszczenia 284 Interfejs pamiÚci wirtualnej 284 3.6. PROBLEMY IMPLEMENTACJI 285 Zadania systemu operacyjnego 3.6.1. w zakresie stronicowania 286 3.6.2. Obsïuga bïÚdów braku strony 287 3.6.3. Wznawianie instrukcji 288 3.6.4. Blokowanie stron w pamiÚci 289 3.6.5. Magazyn stron 290 3.6.6. Oddzielenie strategii od mechanizmu 292 3.7. Implementacja klasycznej segmentacji 298 SEGMENTACJA 294 3.7.1. 3.7.2. Segmentacja ze stronicowaniem: MULTICS 298 3.7.3. Segmentacja ze stronicowaniem: Intel Pentium 302 3.8. BADANIA NAD ZARZkDZANIEM PAMI}CIk 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. DostÚp do plików 325 4.1.5. Atrybuty plików 325 10 SPIS TRE¥CI 4.1.6. Operacje na plikach 327 4.1.7. Przykïadowy program wykorzystujÈcy wywoïania obsïugi systemu plików 328 4.2. KATALOGI 331 Jednopoziomowe systemy katalogów 331 4.2.1. 4.2.2. Hierarchiczne systemy katalogów 332 4.2.3. Nazwy Ăcieĝek 333 4.2.4. Operacje na katalogach 335 IMPLEMENTACJA SYSTEMU PLIKÓW 337 4.3.1. Ukïad systemu plików 337 4.3.2. Implementacja plików 338 Implementacja katalogów 344 4.3.3. Pliki wspóïdzielone 347 4.3.4. 4.3.5. Systemy plików o strukturze dziennika 349 4.3.6. KsiÚgujÈce systemy plików 352 4.3.7. Wirtualne systemy plików 354 ZARZkDZANIE SYSTEMEM PLIKÓW I OPTYMALIZACJA 357 4.4.1. ZarzÈdzanie miejscem na dysku 357 4.4.2. Kopie zapasowe systemu plików 365 4.4.3. 4.4.4. WydajnoĂÊ systemu plików 375 4.4.5 SpójnoĂÊ systemu plików 371 Defragmentacja dysków 380 PRZYK’ADOWE SYSTEMY PLIKÓW 381 4.5.1. 4.5.2. 4.5.3. Systemy plików na pïytach CD-ROM 381 System plików MS-DOS 387 System plików V7 systemu UNIX 391 4.3. 4.4. 4.5. 4.6. BADANIA DOTYCZkCE SYSTEMÓW PLIKÓW 394 4.7. PODSUMOWANIE 394 5 WEJ¥CIE-WYJ¥CIE 399 5.1. WARUNKI, JAKIE POWINIEN SPE’NIAm SPRZ}T WEJ¥CIA-WYJ¥CIA 400 5.1.1. UrzÈdzenia wejĂcia-wyjĂcia 400 5.1.2. Kontrolery urzÈdzeñ 402 SPIS TRE¥CI 11 5.1.3. UrzÈdzenia wejĂcia-wyjĂcia odwzorowane w pamiÚci 403 5.1.4. BezpoĂredni dostÚp do pamiÚci (DMA) 407 5.1.5. O przerwaniach raz jeszcze 410 5.2. WARUNKI, JAKIE POWINNO SPE’NIAm OPROGRAMOWANIE WEJ¥CIA-WYJ¥CIA 415 5.2.1. Cele oprogramowania wejĂcia-wyjĂcia 415 5.2.2. 5.2.3. WejĂcie-wyjĂcie sterowane przerwaniami 419 5.2.4. WejĂcie-wyjĂcie z wykorzystaniem DMA 420 Programowane wejĂcie-wyjĂcie 417 5.3. WARSTWY OPROGRAMOWANIA WEJ¥CIA-WYJ¥CIA 420 Procedury obsïugi przerwañ 421 Sterowniki urzÈdzeñ 422 5.3.1. 5.3.2. 5.3.3. Oprogramowanie wejĂcia-wyjĂcia niezaleĝne od urzÈdzeñ 426 5.3.4. Oprogramowanie wejĂcia-wyjĂcia w przestrzeni uĝytkownika 432 5.4. DYSKI 435 SprzÚt 435 Formatowanie dysków 452 5.4.1. 5.4.2. 5.4.3. Algorytmy szeregowania ĝÈdañ dostÚpu do dysku 456 5.4.4. Obsïuga bïÚdów 459 5.4.5. Stabilna pamiÚÊ masowa 462 5.5. 5.6. SprzÚt obsïugi zegara 466 ZEGARY 466 5.5.1. 5.5.2. Oprogramowanie obsïugi zegara 468 5.5.3. Zegary programowe 471 INTERFEJSY U¿YTKOWNIKÓW: KLAWIATURA, MYSZ, MONITOR 473 5.6.1. Oprogramowanie do wprowadzania danych 473 5.6.2. Oprogramowanie do generowania wyjĂcia 479 5.7. CIENKIE KLIENTY 496 5.8. ZARZkDZANIE ENERGIk 499 5.8.1. 5.8.2. 5.8.3. Problemy sprzÚtowe 500 Problemy po stronie systemu operacyjnego 501 Problemy do rozwiÈzania w programach aplikacyjnych 507 12 SPIS TRE¥CI 5.9. BADANIA DOTYCZkCE WEJ¥CIA-WYJ¥CIA 509 5.10. PODSUMOWANIE 510 6 Zakleszczenia 517 6.1. ZASOBY 518 6.1.1. 6.1.2. Zasoby z moĝliwoĂciÈ wywïaszczania i bez niej 518 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 kaĝdego typu 527 6.4.2. Wykrywanie zakleszczeñ dla przypadku wielu zasobów kaĝdego typu 529 6.4.3. Usuwanie zakleszczeñ 532 6.5. UNIKANIE ZAKLESZCZE” 534 6.5.1. Trajektorie zasobów 534 6.5.2. 6.5.3. Algorytm bankiera dla pojedynczego zasobu 537 6.5.4. Algorytm bankiera dla wielu zasobów 538 Stany bezpieczne i niebezpieczne 535 6.6. 6.7. PRZECIWDZIA’ANIE 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 wywïaszczania 541 6.6.4. Atak na warunek cyklicznego oczekiwania 542 INNE PROBLEMY 543 6.7.1. Blokowanie dwufazowe 543 6.7.2. 6.7.3. UwiÚzienia 546 6.7.4. Zagïodzenia 548 Zakleszczenia komunikacyjne 544 SPIS TRE¥CI 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 Standard JPEG 568 Standard MPEG 571 7.3.1. 7.3.2. 7.4. KOMPRESJA AUDIO 574 7.5. SZEREGOWANIE PROCESÓW MULTIMEDIALNYCH 577 7.5.1. 7.5.2. Szeregowanie procesów homogenicznych 577 Szeregowanie w czasie rzeczywistym — przypadek ogólny 578 Szeregowanie monotoniczne w czÚstotliwoĂci 580 7.5.3. 7.5.4. Algorytm szeregowania EDF 581 7.6. WZORCE MULTIMEDIALNYCH SYSTEMÓW PLIKÓW 584 Funkcje sterujÈce VCR 585 7.6.1. 7.6.2. Wideo niemal na ĝyczenie 587 7.6.3. Usïuga 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 usïudze 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 14 SPIS TRE¥CI 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. 7.9.2. Dynamiczne szeregowanie operacji dyskowych 608 Statyczne szeregowanie operacji dyskowych 606 7.10. BADANIA NA TEMAT MULTIMEDIÓW 610 7.11. PODSUMOWANIE 610 8 SYSTEMY WIELOPROCESOROWE 617 8.1. SprzÚt wieloprocesorowy 620 SYSTEMY WIELOPROCESOROWE 620 8.1.1. 8.1.2. Typy wieloprocesorowych systemów operacyjnych 630 8.1.3. Synchronizacja w systemach wieloprocesorowych 634 Szeregowanie w systemach wieloprocesorowych 640 8.1.4. 8.2. WIELOKOMPUTERY 646 SprzÚt wielokomputerów 647 8.2.1. 8.2.2. Niskopoziomowe oprogramowanie komunikacyjne 651 8.2.3. Oprogramowanie komunikacyjne poziomu uĝytkownika 654 Zdalne wywoïania procedur 657 8.2.4. 8.2.5. Rozproszona wspóïdzielona pamiÚÊ 660 8.2.6. 8.2.7. Równowaĝenie obciÈĝenia 666 Szeregowanie systemów wielokomputerowych 665 8.3. WIRTUALIZACJA 669 Parawirtualizacja 675 8.3.1. Wymagania dla wirtualizacji 671 8.3.2. Hipernadzorcy typu 1 672 8.3.3. Hipernadzorcy typu 2 673 8.3.4. 8.3.5. Wirtualizacja pamiÚci 678 8.3.6. Wirtualizacja wejĂcia-wyjĂcia 679 8.3.7. UrzÈdzenia wirtualne 681 8.3.8. Maszyny wirtualne na procesorach wielordzeniowych 681 8.3.9. Problemy licencji 682 SPIS TRE¥CI 15 8.4. SprzÚt sieciowy 685 SYSTEMY ROZPROSZONE 683 8.4.1. 8.4.2. Usïugi i protokoïy sieciowe 689 8.4.3. Warstwa middleware bazujÈca na dokumentach 693 8.4.4. Warstwa middleware bazujÈca na systemie plików 694 8.4.5. Warstwa middleware bazujÈca na obiektach 700 8.4.6. Warstwa middleware bazujÈca na koordynacji 701 8.4.7. Siatki 707 8.5. BADANIA DOTYCZkCE SYSTEMÓW WIELOPROCESOROWYCH 708 8.6. PODSUMOWANIE 710 9 Bezpieczeñstwo 717 9.1. 9.2. ¥RODOWISKO BEZPIECZE”STWA 719 9.1.1. 9.1.2. 9.1.3. Zagroĝenia 720 Intruzi 721 Przypadkowa utrata danych 723 PODSTAWY KRYPTOGRAFII 723 9.2.1. Kryptografia z kluczem tajnym 725 9.2.2. Kryptografia z kluczem publicznym 726 9.2.3. 9.2.4. 9.2.5. Moduï TPM 729 Funkcje jednokierunkowe 727 Podpisy cyfrowe 727 9.3. MECHANIZMY OCHRONY 730 Listy kontroli dostÚpu 733 9.3.1. Domeny ochrony 730 9.3.2. 9.3.3. Uprawnienia 736 9.3.4. 9.3.5. 9.3.6. Modele formalne bezpiecznych systemów 743 9.3.7. Bezpieczeñstwo wielopoziomowe 745 9.3.8. Ukryte kanaïy 748 Systemy zaufane 740 Zaufana baza obliczeniowa 742 9.4. UWIERZYTELNIANIE 753 9.4.1. Uwierzytelnianie z wykorzystaniem haseï 755 16 SPIS TRE¥CI 9.4.2. Uwierzytelnianie z wykorzystaniem obiektu fizycznego 765 9.4.3. Uwierzytelnianie z wykorzystaniem technik biometrycznych 769 9.5. ATAKI Z WEWNkTRZ 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 B’}DÓW W KODZIE 776 9.6.1. Ataki z wykorzystaniem przepeïnienia bufora 777 9.6.2. Ataki z wykorzystaniem ïañcuchów formatujÈcych 780 9.6.3. Ataki powrotu do biblioteki libc 782 9.6.4. Ataki z wykorzystaniem przepeïnieñ liczb caïkowitych 783 9.6.5. Ataki polegajÈce na wstrzykiwaniu kodu 784 9.6.6. Ataki polegajÈce na rozszerzaniu uprawnieñ 786 Z’O¥LIWE OPROGRAMOWANIE 786 9.7.1. Konie trojañskie 790 9.7.2. Wirusy 793 9.7.3. Robaki 805 9.7.4. Oprogramowanie szpiegujÈce 808 9.7.5. Rootkity 813 Podpisywanie kodu 830 ¥RODKI OBRONY 819 9.8.1. Firewalle 820 9.8.2. Techniki antywirusowe i antyantywirusowe 822 9.8.3. 9.8.4. WtrÈcanie do wiÚzienia 832 9.8.5. Wykrywanie wïamañ z uĝyciem modeli 833 9.8.6. 9.8.7. Bezpieczeñstwo Javy 840 Izolowanie kodu mobilnego 835 9.7. 9.8. 9.9. BADANIA DOTYCZkCE BEZPIECZE”STWA 843 9.10. PODSUMOWANIE 844 SPIS TRE¥CI 10 Pierwsze studium przypadku: Linux 10.1. HISTORIA SYSTEMÓW UNIX I LINUX 852 17 851 10.1.1. UNICS 852 10.1.2. PDP-11 UNIX 853 10.1.3. PrzenoĂny 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. PRZEGLkD SYSTEMU LINUX 863 Interfejsy systemu Linux 865 10.2.1. Cele Linuksa 863 10.2.2. 10.2.3. Powïoka 867 10.2.4. Programy uĝytkowe systemu Linux 870 10.2.5. Struktura jÈdra 872 10.3. PROCESY W SYSTEMIE LINUX 876 10.3.1. Podstawowe pojÚcia 876 10.3.2. Wywoïania systemowe Linuksa zwiÈzane z zarzÈdzaniem procesami 879 Implementacja procesów i wÈtków w systemie Linux 884 10.3.3. 10.3.4. Szeregowanie w systemie Linux 892 10.3.5. Uruchamianie systemu Linux 896 10.4. ZARZkDZANIE PAMI}CIk W SYSTEMIE LINUX 899 10.4.1. Podstawowe pojÚcia 899 10.4.2. Wywoïania systemowe Linuksa odpowiedzialne za zarzÈdzanie pamiÚciÈ 903 Implementacja zarzÈdzania pamiÚciÈ w systemie Linux 904 10.4.3. 10.4.4. Stronicowanie w systemie Linux 911 10.5. OPERACJE WEJ¥CIA-WYJ¥CIA W SYSTEMIE LINUX 916 10.5.1. Podstawowe pojÚcia 916 10.5.2. Obsïuga sieci 917 10.5.3. Wywoïania systemowe wejĂcia-wyjĂcia w systemie Linux 919 10.5.4. Implementacja wejĂcia-wyjĂcia w systemie Linux 921 10.5.5. Moduïy w systemie Linux 925 18 SPIS TRE¥CI 10.6. SYSTEM PLIKÓW LINUKSA 925 10.6.1. Podstawowe pojÚcia 926 10.6.2. Wywoïania 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. BEZPIECZE”STWO W SYSTEMIE LINUX 953 10.7.1. Podstawowe pojÚcia 953 10.7.2. Wywoïania systemowe Linuksa zwiÈzane z bezpieczeñstwem 956 Implementacja bezpieczeñstwa w systemie Linux 957 10.7.3. 10.8. PODSUMOWANIE 958 11 Drugie studium przypadku: Windows Vista 965 11.1. HISTORIA SYSTEMU WINDOWS VISTA 965 11.1.1. Lata osiemdziesiÈte: MS-DOS 966 11.1.2. Lata dziewiÚÊdziesiÈte: Windows na bazie MS-DOS-a 967 11.1.3. Lata dwutysiÚczne: 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 Interfejs programowania aplikacji Win32 980 11.2.2. 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. 11.3.4. Podsystemy, biblioteki DLL Implementacja menedĝera obiektów 1007 i usïugi trybu uĝytkownika 1019 11.4. PROCESY I WkTKI SYSTEMU WINDOWS VISTA 1023 11.4.1. Podstawowe pojÚcia 1023 11.4.2. Wywoïania API zwiÈzane z zarzÈdzaniem zadaniami, procesami, wÈtkami i wïóknami 1029 Implementacja procesów i wÈtków 1036 11.4.3. SPIS TRE¥CI 19 11.5. ZARZkDZANIE PAMI}CIk 1045 11.5.1. Podstawowe pojÚcia 1045 11.5.2. Wywoïania systemowe zwiÈzane z zarzÈdzaniem pamiÚciÈ 1051 Implementacja zarzÈdzania pamiÚciÈ 1052 11.5.3. 11.6. PAMI}m PODR}CZNA SYSTEMU WINDOWS VISTA 1063 11.7. OPERACJE WEJ¥CIA-WYJ¥CIA W SYSTEMIE WINDOWS VISTA 1066 11.7.1. Podstawowe pojÚcia 1067 11.7.2. Wywoïania API zwiÈzane z operacjami wejĂcia-wyjĂcia 1069 11.7.3. Implementacja systemu wejĂcia-wyjĂcia 1072 11.8. SYSTEM PLIKÓW NT SYSTEMU WINDOWS 1079 11.8.1. Podstawowe pojÚcia 1079 11.8.2. Implementacja systemu plików NTFS 1081 11.9. BEZPIECZE”STWO W SYSTEMIE WINDOWS VISTA 1093 11.9.1. Podstawowe pojÚcia 1095 11.9.2. Wywoïania API zwiÈzane z bezpieczeñstwem 1097 11.9.3. Implementacja bezpieczeñstwa 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. PRZEGLkD SYSTEMU SYMBIAN OS 1111 12.2.1. ObiektowoĂÊ 1112 12.2.2. Projekt mikrojÈdra 1113 12.2.3. NanojÈdro systemu Symbian OS 1114 12.2.4. DostÚp do zasobów w trybie klient-serwer 1115 20 SPIS TRE¥CI 12.2.5. Funkcje znane z wiÚkszych systemów operacyjnych 1116 12.2.6. Komunikacja i multimedia 1117 12.3. PROCESY I WkTKI W SYSTEMIE SYMBIAN OS 1117 12.3.1. WÈtki i nanowÈtki 1118 12.3.2. Procesy 1119 12.3.3. Obiekty aktywne 1120 12.3.4. Komunikacja miÚdzyprocesowa 1121 12.4. ZARZkDZANIE PAMI}CIk 1121 12.4.1. Systemy pozbawione pamiÚci wirtualnej 1122 12.4.2. Adresowanie pamiÚci w systemie Symbian OS 1124 12.5. WEJ¥CIE I WYJ¥CIE 1127 12.5.1. Sterowniki urzÈdzeñ 1127 12.5.2. Rozszerzenia jÈdra 1128 12.5.3. BezpoĂredni dostÚp do pamiÚci (DMA) 1128 12.5.4. Przypadek specjalny: noĂniki pamiÚci 1129 12.5.5. BlokujÈce operacje wejĂcia-wyjĂcia 1129 12.5.6. NoĂniki wymienne 1130 12.6. SYSTEMY PRZECHOWYWANIA DANYCH 1130 12.6.1. Systemy plików dla urzÈdzeñ mobilnych 1131 12.6.2. Systemy plików systemu operacyjnego Symbian OS 1132 12.6.3. Bezpieczeñstwo i ochrona systemu plików 1132 12.7. BEZPIECZE”STWO 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 ZWIkZANYCH Z PROJEKTOWANIEM SYSTEMÓW 1144 13.1.1. Cele 1144 13.1.2. Dlaczego projektowanie systemów operacyjnych jest takie trudne? 1146 SPIS TRE¥CI 21 13.2. PROJEKT INTERFEJSU 1148 13.2.1. Zalecenia projektowe 1148 13.2.2. Paradygmaty 1150 13.2.3. Interfejs wywoïañ 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 doïu do góry 1170 13.3.8. Przydatne techniki 1171 13.4. WYDAJNO¥m 1177 13.4.1. Dlaczego systemy operacyjne sÈ powolne? 1177 13.4.2. Co naleĝy 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 lokalnoĂci 1185 13.4.7. Optymalizacja z myĂlÈ o typowych przypadkach 1186 13.5. ZARZkDZANIE PROJEKTEM 1186 13.5.1. Mityczny osobomiesiÈc 1187 13.5.2. Struktura zespoïu 1189 13.5.3. Znaczenie doĂwiadczenia 1191 13.5.4. Nie istnieje jedno cudowne rozwiÈzanie 1192 13.6. TRENDY W ¥WIECIE PROJEKTÓW SYSTEMÓW OPERACYJNYCH 1192 13.6.1. Wirtualizacja 1193 13.6.2. Ukïady wielordzeniowe 1193 13.6.3. Systemy operacyjne z wielkimi przestrzeniami adresowymi 1194 13.6.4. Komunikacja sieciowa 1195 13.6.5. Systemy równolegïe i rozproszone 1196 13.6.6. Multimedia 1196 13.6.7. Komputery zasilane bateriami 1197 22 SPIS TRE¥CI 13.6.8. Systemy wbudowane 1197 13.6.9. WÚzïy czujników 1198 13.7. PODSUMOWANIE 1198 14 Lista publikacji i bibliografia 1203 14.1. SUGEROWANE PUBLIKACJE DODATKOWE 1203 14.1.1. Publikacje wprowadzajÈce i ogólne 1204 14.1.2. Procesy i wÈtki 1204 14.1.3. ZarzÈdzanie pamiÚciÈ 1205 14.1.4. WejĂcie-wyjĂcie 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. Bezpieczeñstwo 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 PORZkDKU ALFABETYCZNYM 1214 Skorowidz 1247 2 PROCESY I WkTKI Zanim rozpocznie siÚ szczegóïowe studium tego, w jaki sposób systemy operacyjne sÈ zaprojektowane i skonstruowane, warto przypomnieÊ, ĝe kluczowym pojÚciem we wszystkich systemach operacyjnych jest proces: abstrakcja dziaïajÈcego programu. Wszystkie pozostaïe elementy systemu operacyjnego bazujÈ na pojÚciu procesu, dlatego jest bardzo waĝne, aby projektant systemu operacyjnego (a takĝe student) jak najszybciej dobrze zapoznaï siÚ z pojÚciem procesu. Procesy to jedne z najstarszych i najwaĝniejszych abstrakcji wystÚpujÈcych w sys- temach operacyjnych. ZapewniajÈ one moĝliwoĂÊ wykonywania (pseudo-) wspóï- bieĝnych operacji nawet wtedy, gdy dostÚpny jest tylko jeden procesor. Przeksztaï- cajÈ one pojedynczy procesor CPU w wiele wirtualnych procesorów. Bez abstrakcji procesów istnienie wspóïczesnej techniki komputerowej byïoby niemoĝliwe. W niniej- szym rozdziale przedstawimy szczegóïowe informacje na temat tego, czym sÈ procesy oraz ich pierwsi kuzynowie — wÈtki. 2.1. PROCESY 2.1 PROCESY Wszystkie nowoczesne komputery bardzo czÚsto wykonujÈ wiele operacji jedno- czeĂnie. Osoby przyzwyczajone do pracy z komputerami osobistymi mogÈ nie byÊ do koñca Ăwiadome tego faktu, zatem kilka przykïadów pozwoli przybliĝyÊ to zagadnie- nie. Na poczÈtek rozwaĝmy serwer WWW. ¿Èdania stron WWW mogÈ nadchodziÊ z wielu miejsc. Kiedy przychodzi ĝÈdanie, serwer sprawdza, czy potrzebna strona znajduje siÚ w pamiÚci podrÚcznej. JeĂli tak, jest przesyïana do klienta. JeĂli nie, inicjowane jest ĝÈdanie dyskowe w celu jej pobrania. Jednak z perspektywy procesora 123 124 PROCESY I WkTKI ROZ. 2 obsïuga ĝÈdañ dyskowych zajmuje wiecznoĂÊ. W czasie oczekiwania na zakoñcze- nie obsïugi ĝÈdania na dysk moĝe nadejĂÊ wiele kolejnych ĝÈdañ. JeĂli w systemie jest wiele dysków niektóre z ĝÈdañ moĝe byÊ skierowanych na inne dyski na dïugo przed obsïuĝeniem pierwszego ĝÈdania. Oczywiste, ĝe potrzebny jest sposób zamo- delowania i zarzÈdzania tÈ wspóïbieĝnoĂciÈ. Do tego celu moĝna wykorzystaÊ procesy (a w szczególnoĂci wÈtki). Teraz rozwaĝmy komputer osobisty uĝytkownika. Podczas rozruchu systemu nastÚpuje start wielu procesów. CzÚsto uĝytkownik nie jest tego Ăwiadomy. Na przy- kïad moĝe byÊ uruchomiony proces oczekujÈcy na wchodzÈce wiadomoĂci e-mail. Inny uruchomiony proces moĝe dziaïaÊ w imieniu programu antywirusowego i spraw- dzaÊ okresowo, czy sÈ dostÚpne jakieĂ nowe definicje wirusów. Dodatkowo mogÈ dziaïaÊ jawne procesy uĝytkownika — na przykïad drukujÈce pliki lub wypalajÈce pïytÚ CD — podczas gdy uĝytkownik przeglÈda strony WWW. Dziaïaniami tymi trzeba zarzÈdzaÊ. W tym przypadku bardzo przydaje siÚ system z obsïugÈ wieloprogramo- woĂci, obsïugujÈcy wiele procesów jednoczeĂnie. W kaĝdym systemie wieloprogramowym procesor szybko przeïÈcza siÚ pomiÚdzy procesami, poĂwiÚcajÈc kaĝdemu z nich po kolei dziesiÈtki bÈdě setki milisekund. Chociaĝ ĂciĂle rzecz biorÈc w dowolnym momencie procesor realizuje tylko jeden proces, w ciÈgu sekundy moĝe obsïuĝyÊ ich wiele, co daje iluzjÚ wspóïbieĝnoĂci. Czasami w tym kontekĂcie mówi siÚ o pseudowspóïbieĝnoĂci, dla odróĝnienia jej od rzeczywistej, sprzÚtowej wspóïbieĝnoĂci systemów wieloprocesorowych (wypo- saĝonych w dwa procesory wspóïdzielÈce tÚ samÈ fizycznÈ pamiÚÊ lub wiÚkszÈ liczbÚ takich procesorów). ¥ledzenie wielu równolegïych dziaïañ jest bardzo trudne. Z tego powodu projektanci systemów operacyjnych w ciÈgu wielu lat opracowali model pojÚ- ciowy (procesów sekwencyjnych), które uïatwiajÈ obsïugÚ wspóïbieĝnoĂci. Ten model, jego zastosowania oraz kilka innych konsekwencji stanowiÈ temat niniejszego rozdziaïu. 2.1.1. Model procesów W tym modelu caïe oprogramowanie moĝliwe do uruchomienia w komputerze — czasami wïÈcznie z systemem operacyjnym — jest zorganizowane w postaci zbioru procesów sekwencyjnych (lub w skrócie procesów). Proces jest egzemplarzem uruchomionego programu wïÈcznie z bieĝÈcymi wartoĂciami licznika programu, reje- strów i zmiennych. PojÚciowo kaĝdy proces ma wïasny wirtualny procesor CPU. OczywiĂcie w rzeczywistoĂci procesor fizyczny przeïÈcza siÚ od procesu do procesu. Aby jednak zrozumieÊ system, znacznie ïatwiej jest myĂleÊ o kolekcji procesów dzia- ïajÈcych (pseudo) wspóïbieĝnie, niĝ próbowaÊ ĂledziÊ to, jak procesor przeïÈcza siÚ od programu do programu. To szybkie przeïÈczanie siÚ procesora jest okreĂlane jako wieloprogramowoĂÊ, o czy mówiliĂmy w rozdziale 1. Na rysunku 2.1(a) pokazaliĂmy komputer, w którym w pamiÚci dziaïajÈ w trybie wieloprogramowym cztery programy. Na rysunku 2.1(b) widaÊ cztery procesy — PODROZ. 2.1 PROCESY 125 kaĝdy ma wïasny przepïyw sterowania (tzn. wïasny logiczny licznik programu) i kaĝdy dziaïa niezaleĝnie od pozostaïych. OczywiĂcie jest tylko jeden fizyczny licznik pro- gramu, dlatego kiedy dziaïa wybrany proces, jego logiczny licznik programu jest kopiowany do rzeczywistego licznika programu. Kiedy proces koñczy dziaïanie (na pewien czas), jego fizyczny licznik programu jest zapisywany w logicznym liczniku programu umieszczonym w pamiÚci. Na rysunku 2.1(c) widaÊ, ĝe w dïuĝszym prze- dziale czasu nastÈpiï postÚp we wszystkich procesach, jednak w danym momencie dziaïa tylko jeden proces. Rysunek 2.1. (a) Cztery programy uruchomione w trybie wieloprogramowym; (b) pojÚciowy model czterech niezaleĝnych od siebie procesów sekwencyjnych; (c) w wybranym momencie jest aktywny tylko jeden program W tym rozdziale zaïoĝymy, ĝe jest tylko jeden procesor CPU. Coraz czÚĂciej jednak takie zaïoĝenie okazuje siÚ nieprawdziwe. Nowe ukïady czÚsto sÈ wielordzeniowe — majÈ dwa procesory, cztery lub wiÚkszÈ ich liczbÚ. O ukïadach wielordzeniowych i systemach wieloprocesorowych powiemy wiÚcej w rozdziale 8. Na razie bÚdzie proĂciej, jeĂli przyjmiemy, ĝe maszyna wykorzystuje jednorazowo tylko jeden proce- sor. JeĂli zatem mówimy, ĝe procesor w danym momencie moĝe wykonywaÊ tylko jeden proces, to jeĂli zawiera dwa rdzenie (lub dwa procesory), na kaĝdym z nich w okreĂlonym momencie moĝe dziaïaÊ jeden proces. Ze wzglÚdu na szybkie przeïÈczanie siÚ procesora pomiÚdzy 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 moĝna programowaÊ procesów z wbudowanymi zaïoĝeniami dotyczÈcymi czasu dziaïania. Rozwaĝmy dla przykïadu proces wejĂcia-wyjĂcia, który uruchamia taĂmÚ streamera w celu odtworzenia plików z kopii zapasowej, nastÚpnie wykonuje 10 000 iteracji pustej pÚtli w celu rozpÚdzenia streamera do wïaĂciwej szybkoĂci i, na koniec, wydaje polecenie przeczytania pierwszego rekordu. JeĂli procesor zdecyduje siÚ na prze- ïÈczenie do innego procesu podczas trwania pÚtli, w której streamer siÚ rozpÚdza, proces obsïugi taĂmy nie bÚdzie mógï ponownie siÚ uruchomiÊ do momentu, kiedy pierwszy rekord znajdzie siÚ za gïowicÈ czytajÈcÈ. Kiedy proces obowiÈzujÈ tak Ăcisïe wymagania dziaïania w czasie rzeczywistym — to znaczy okreĂlone zdarze- nia muszÈ wystÈpiÊ w ciÈgu okreĂlonej liczby milisekund — trzeba przedsiÚwziÈÊ 126 PROCESY I WkTKI ROZ. 2 specjalne Ărodki w celu zapewnienia, ĝe tak siÚ stanie. Zazwyczaj jednak wiÚkszoĂci procesów nie dotyczÈ ograniczenia wieloprogramowoĂci procesora czy teĝ wzglÚd- ne szybkoĂci dziaïania róĝnych procesów. Róĝnica pomiÚdzy procesem a programem jest subtelna, ale ma kluczowe znacze- nie. Do wyjaĂnienia tej róĝnicy posïuĝymy siÚ analogiÈ. Zaïóĝmy, ĝe pewien infor- matyk o zdolnoĂciach kulinarnych piecze urodzinowy tort dla swojej córki. Ma do dyspozycji przepis na tort urodzinowy oraz kuchniÚ dobrze wyposaĝonÈ we wszystkie skïadniki: mÈkÚ, jajka, cukier, aromat waniliowy itp. W tym przykïadzie przepis speï- nia rolÚ programu (tzn. algorytmu wyraĝonego w odpowiedniej notacji), informatyk jest procesorem (CPU), natomiast skïadniki ciasta odgrywajÈ rolÚ danych wejĂcio- wych. Proces jest operacjÈ, w której informatyk czyta przepis, dodaje skïadniki i piecze ciasto. Wyobraěmy sobie teraz, ĝe z krzykiem wbiega syn informatyka i mówi, ĝe uĝÈ- dliïa go pszczoïa. Informatyk zapamiÚtuje, w którym miejscu przepisu siÚ znajdowaï (zapisuje bieĝÈcy stan procesu), bierze ksiÈĝkÚ 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 wyĝszym priory- tecie (udzielanie pomocy medycznej). Przy czym kaĝdy z procesów ma inny program (przepis na ciasto, ksiÈĝka pierwszej pomocy medycznej). Kiedy informatyk poradzi sobie z opatrzeniem uĝÈdlenia, powraca do pieczenia ciasta i kontynuuje od miejsca, w którym skoñczyï. Kluczowe znaczenie ma uĂwiadomienie sobie, ĝe proces jest pewnym dziaïaniem. Charakteryzuje siÚ programem, wejĂciem, wyjĂciem i stanem. Jeden procesor moĝe 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ÈÊ obsïugÚ innego. Warto zwróciÊ uwagÚ na to, ĝe jeĂli program uruchomi siÚ dwa razy, liczy siÚ jako dwa procesy. Na przykïad czÚsto istnieje moĝliwoĂÊ dwukrotnego uruchomienia edytora tekstu lub jednoczesnego drukowania dwóch plików, jeĂli system kompu- terowy jest wyposaĝony w dwie drukarki. Fakt, ĝe dwa dziaïajÈce procesy korzystajÈ z tego samego programu, nie ma znaczenia — sÈ to oddzielne procesy. System ope- racyjny moĝe mieÊ moĝliwoĂÊ wspóïdzielenia kodu pomiÚdzy nimi w taki sposób, ĝe w pamiÚci znajduje siÚ jedna kopia. Jest to jednak szczegóï techniczny, który nie zmienia faktu dziaïania 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 przykïad kontrolera w kuchence mikrofalowej), bywa moĝliwe zainicjowanie wszystkich potrzebnych procesów natychmiast po uruchomieniu systemu. Jednak PODROZ. 2.1 PROCESY 127 w systemach ogólnego przeznaczenia potrzebny jest sposób tworzenia i niszczenia procesów podczas ich dziaïania. W tym punkcie przyjrzymy siÚ niektórym spoĂród tych mechanizmów. SÈ cztery podstawowe zdarzenia, które powodujÈ tworzenie procesów: 1. Inicjalizacja systemu. 2. Uruchomienie wywoïania systemowego tworzÈcego proces przez dziaïajÈcy proces. 3. ¿Èdanie uĝytkownika 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 uĝytkownikami i wykonujÈ dla nich pracÚ. Inne sÈ procesami drugoplanowymi, które nie sÈ powiÈzane z okreĂlonym uĝytkownikiem, ale speï- niajÈ pewnÈ specyficznÈ funkcjÚ. Na przykïad jeden proces drugoplanowy moĝe byÊ zaprojektowany do akceptacji wchodzÈcych wiadomoĂci e-mail. Taki proces moĝe byÊ uĂpiony przez wiÚkszoĂÊ dnia i nagle siÚ uaktywniÊ, kiedy nadchodzi wiadomoĂÊ e-mail. Inny proces drugoplanowy moĝe 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 obsïuĝenia. Procesy dziaïajÈce na drugim planie, które sÈ przeznaczone do obsïugi pewnych operacji, takich jak odbiór wiado- moĂci e-mail, serwowanie stron WWW, aktualnoĂci, drukowanie itp., sÈ okreĂlane jako demony. W duĝych systemach zwykle dziaïajÈ dziesiÈtki takich procesów. W systemie UNIX, aby wyĂwietliÊ listÚ dziaïajÈcych procesów, moĝna skorzystaÊ z programu ps. W systemie Windows moĝna skorzystaÊ z menedĝera zadañ. Procesy mogÈ byÊ tworzone nie tylko w czasie rozruchu, ale takĝe póěniej. Dzia- ïajÈcy proces czÚsto wydaje wywoïanie systemowe w celu utworzenia jednego lub kilku nowych procesów majÈcych pomóc w realizacji zadania. Tworzenie nowych procesów jest szczególnie przydatne, kiedy pracÚ do wykonania moĝna ïatwo sfor- muïowaÊ w kontekĂcie kilku zwiÈzanych ze sobÈ, ale poza tym niezaleĝnych, wspóï- dziaïajÈcych ze sobÈ procesów. JeĂli na przykïad przez sieÊ jest pobierana duĝa iloĂÊ danych w celu ich póěniejszego przetwarzania, to moĝna 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 kaĝdy z procesów moĝe dziaïaÊ na innym procesorze, zadanie moĝe byÊ wykona- ne w krótszym czasie. W systemach interaktywnych uĝytkownicy mogÈ uruchomiÊ program poprzez wpisanie polecenia lub klikniÚcie (ewentualnie dwukrotne klikniÚcie) ikony. Wyko- nanie dowolnej z tych operacji inicjuje nowy proces i uruchamia w nim wskazany 128 PROCESY I WkTKI ROZ. 2 program. W systemach uniksowych bazujÈcych 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. Moĝe on jednak stworzyÊ jedno (lub wiÚcej) okien i wiÚkszoĂÊ systemów to robi. W obydwu systemach uĝytkownicy majÈ moĝliwoĂÊ jednoczesnego otwarcia wielu okien, w których dziaïajÈ jakieĂ pro- cesy. Za pomocÈ myszy uĝytkownik moĝe wybraÊ okno i komunikowaÊ siÚ z proce- sem, na przykïad podawaÊ dane wejĂciowe wtedy, kiedy sÈ potrzebne. Ostatnia sytuacja, w której sÈ tworzone procesy, dotyczy tylko systemów wsa- dowych w duĝych komputerach mainframe. W systemach tego typu uĝytkownicy mogÈ przesyïaÊ do systemu zadania wsadowe (czasami zdalnie). Kiedy system ope- racyjny zdecyduje, ĝe ma zasoby wystarczajÈce do uruchomienia innego zadania, tworzy nowy proces i uruchamia nastÚpne zadanie z kolejki. Z technicznego punktu widzenia we wszystkich tych sytuacjach proces tworzy siÚ poprzez zlecenie istniejÈcemu procesowi wykonania wywoïania systemowego tworzenia procesów. Moĝe to byÊ dziaïajÈcy proces uĝytkownika, proces systemowy, wywoïany z klawiatury lub za pomocÈ myszy, albo proces zarzÈdzania zadaniami systemowymi. Proces ten wykonuje wywoïanie systemowe tworzÈce nowy proces. To wywoïanie systemowe zleca systemowi operacyjnemu utworzenie nowego procesu i wskazuje, w sposób poĂredni lub bezpoĂredni, jaki program naleĝy w nim uruchomiÊ. W systemie UNIX istnieje tylko jedno wywoïanie systemowe do utworzenia nowego procesu: fork. Wywoïanie to tworzy dokïadny klon procesu wywoïujÈcego. Po wykonaniu instrukcji fork procesy rodzic i dziecko majÈ ten sam obraz pamiÚci, te same zmienne Ărodowiskowe oraz te same otwarte pliki. Po prostu sÈ identyczne. Wtedy zazwyczaj proces-dziecko uruchamia wywoïanie execve lub podobne wywoïa- nie systemowe w celu zmiany obrazu pamiÚci i uruchomienia nowego programu. Kiedy uĝytkownik wpisze polecenie w Ărodowisku powïoki, na przykïad sort, powïoka najpierw tworzy proces-dziecko za pomocÈ wywoïania fork, a nastÚpnie proces-dzie- cko wykonuje polecenie sort. Powodem, dla którego dokonuje siÚ ten dwuetapowy proces, jest umoĝliwienie procesowi-dziecku manipulowania deskryptorami plików po wykonaniu wywoïania fork, ale przed wywoïaniem execve w celu przekierowania standardowego wejĂcia, standardowego wyjĂcia oraz standardowego urzÈdzenia bïÚdów. Dla odróĝnienia w systemie Windows jedna funkcja interfejsu Win32 — Create ´Process — jest odpowiedzialna zarówno za utworzenie procesu, jak i zaïadowanie odpowiedniego programu do nowego procesu. Wywoïanie to ma 10 parametrów. SÈ to program do uruchomienia, parametry wiersza polecenia przekazywane do pro- gramu, róĝne atrybuty zabezpieczeñ, bity decydujÈce o tym, czy otwarte pliki bÚdÈ dziedziczone, informacje dotyczÈce priorytetów, specyfikacja okna, jakie ma byÊ utwo- rzone dla procesu (jeĂli proces ma mieÊ okno), oraz wskaěnik do struktury, w której sÈ zwracane do procesu wywoïujÈcego informacje o nowo tworzonym procesie. Oprócz wywoïania CreateProcess interfejs Win32 zawiera okoïo 100 innych funkcji do zarzÈ- dzania i synchronizowania procesów oraz wykonywania powiÈzanych z tym operacji. PODROZ. 2.1 PROCESY 129 Zarówno w systemie UNIX, jak i Windows po utworzeniu procesu rodzic i dziecko majÈ osobne przestrzenie adresowe. JeĂli dowolny z procesów zmieni sïowo w swojej przestrzeni adresowej, zmiana nie jest widoczna dla drugiego procesu. W systemie UNIX poczÈtkowa przestrzeñ adresowa procesu-dziecka jest kopiÈ przestrzeni adre- sowej procesu-rodzica. SÈ to jednak caïkowicie odrÚbne przestrzenie adresowe. Zapisywalna pamiÚÊ nie jest wspóïdzielona pomiÚdzy procesami (w niektórych imple- mentacjach Uniksa tekst programu jest wspóïdzielony pomiÚdzy procesami rodzica i dziecka, poniewaĝ nie moĝe on byÊ modyfikowany). Nowo utworzony proces moĝe jednak wspóïdzieliÊ niektóre inne zasoby procesu swojego twórcy — na przykïad otwarte pliki. W systemie Windows przestrzenie adresowe procesów rodzica i dziecka od samego poczÈtku sÈ róĝne. 2.1.3. Koñczenie dziaïania procesów Po utworzeniu proces zaczyna dziaïanie i wykonuje swoje zadania. Nic jednak nie trwa wiecznie — nawet procesy. PrÚdzej czy póěniej nowy proces zakoñczy swoje dziaïanie. Zwykle dzieje siÚ to z powodu jednego z poniĝszych warunków: 1. Normalne zakoñczenie pracy (dobrowolnie). 2. Zakoñczenie pracy w wyniku bïÚdu (dobrowolnie). 3. BïÈd krytyczny (przymusowo). 4. Zniszczenie przez inny proces (przymusowo). WiÚkszoĂÊ procesów koñczy dziaïanie dlatego, ĝe wykonaïy swojÈ pracÚ. Kiedy kompilator skompiluje program, wykonuje wywoïanie systemowe, które informuje system operacyjny o zakoñczeniu pracy. Tym wywoïaniem jest exit w systemie UNIX oraz ExitProcess w systemie Windows. W programach wyposaĝonych w interfejs ekranowy zwykle sÈ mechanizmy pozwalajÈce na dobrowolne zakoñczenie dziaïania. W edytorach tekstu, przeglÈdarkach internetowych i podobnych im programach zawsze jest ikona lub polecenie menu, które uĝytkownik moĝe kliknÈÊ, aby zleciÊ procesowi usuniÚcie otwartych plików tymczasowych i zakoñczenie dziaïania. Innym powodem zakoñczenia pracy jest sytuacja, w której proces wykryje bïÈd krytyczny. JeĂli na przykïad uĝytkownik wpisze polecenie: cc foo.c w celu skompilowania programu foo.c, a taki plik nie istnieje, to kompilator po prostu skoñczy dziaïanie. Procesy interaktywne wyposaĝone w interfejsy ekranowe zwykle nie koñczÈ dziaïania, jeĂli zostanÈ do nich przekazane bïÚdne parametry. Zamiast tego wyĂwietlajÈ okno dialogowe z proĂbÈ do uĝytkownika o ponowienie próby. 130 PROCESY I WkTKI ROZ. 2 Trzecim powodem zakoñczenia pracy jest bïÈd spowodowany przez proces — czÚsto wynikajÈcy z bïÚdu w programie. Moĝe to byÊ uruchomienie niedozwolonej instrukcji, odwoïanie siÚ do nieistniejÈcego obszaru pamiÚci lub dzielenie przez zero. W niektórych systemach (na przykïad w Uniksie) proces moĝe poinformowaÊ system operacyjny, ĝe sam chce obsïuĝyÊ okreĂlone bïedy. W takim przypadku, jeĂli wystÈpi bïÈd, proces otrzymuje sygnaï (przerwanie), zamiast zakoñczyÊ pracÚ. Czwartym powodem, dla którego proces moĝe zakoñczyÊ dziaïanie, jest wyko- nanie wywoïania systemowego, które zleca systemowi operacyjnemu zniszczenie innego procesu. W Uniksie moĝna to zrobiÊ za pomocÈ wywoïania systemowego kill. Odpowiednikiem tego wywoïania w interfejsie Win32 API jest TerminateProcess. W obu przypadkach proces niszczÈcy musi posiadaÊ odpowiednie uprawnienia do niszczenia innych procesów. W niektórych systemach zakoñczenie procesu — nie- zaleĝnie od tego, czy jest wykonywane dobrowolnie, czy przymusowo — wiÈĝe siÚ z zakoñczeniem wszystkich procesów utworzonych przez ten proces. Jednak w taki sposób nie dziaïa 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 zwiÈzany z procesem-dzieckiem. Proces-dziecko sam moĝe tworzyÊ kolejne procesy, co formuje hierarchiÚ procesów. ZwróÊmy uwagÚ, ĝe w odróĝnieniu od roĂlin i zwierzÈt rozmnaĝajÈcych siÚ pïciowo proces moĝe mieÊ tylko jednego rodzica (ale zero, jedno dziecko lub wiÚcej dzieci). W Uniksie proces wraz z wszystkimi jego dzieÊmi i dalszymi potomkami tworzy grupÚ procesów. Kiedy uĝytkownik wyĂle sygnaï z klawiatury, sygnaï ten jest dostar- czany do wszystkich czïonków grupy procesów, które w danym momencie sÈ powiÈ- zane z klawiaturÈ (zwykle sÈ to wszystkie aktywne procesy utworzone w bieĝÈcym oknie). Kaĝdy proces moĝe indywidualnie przechwyciÊ sygnaï, zignorowaÊ go lub podjÈÊ dziaïanie domyĂlne — to znaczy zostaÊ zniszczonym przez sygnaï. W celu przedstawienia innego przykïadu sytuacji, w której hierarchia procesów odgrywa rolÚ, przyjrzyjmy siÚ sposobowi, w jaki system UNIX inicjuje siÚ podczas rozruchu. W obrazie rozruchowym wystÚpuje specjalny proces o nazwie init. Kiedy rozpoczyna dziaïanie, odczytuje plik i informuje o liczbie dostÚpnych terminali. NastÚp- nie tworzy po jednym nowym procesie na terminal. Procesy te czekajÈ, aĝ ktoĂ siÚ zaloguje. Kiedy logowanie zakoñczy siÚ pomyĂlnie, proces logowania uruchamia powïokÚ, która jest gotowa na przyjmowanie poleceñ. Polecenia te mogÈ urucha- miaÊ nowe procesy itd. Tak wiÚc wszystkie procesy w caïym systemie naleĝÈ do tego samego drzewa — jego korzeniem jest proces init. Dla odróĝnienia w systemie Windows nie wystÚpuje pojÚcie 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 moĝe wykorzystaÊ do zarzÈdzania dzieckiem. Moĝe jednak 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È moĝliwoĂci „wydziedziczenia” swoich dzieci. 2.1.5. Stany procesów Chociaĝ kaĝdy proces jest niezaleĝnym podmiotem, posiadajÈcym wïasny licznik pro- gramu i wewnÚtrzny stan, procesy czÚsto muszÈ siÚ komunikowaÊ z innymi proce- sami. Jeden proces moĝe generowaÊ wyjĂcie, które inny proces wykorzysta jako wejĂcie. W poleceniu powïoki: cat rozdzial1 rozdzial2 rozdzial3 | grep drzewo pierwszy proces uruchamia polecenie cat, ïÈczy i wyprowadza trzy pliki. Drugi proces uruchamia polecenie grep, wybiera wszystkie wiersze zawierajÈce sïowo „drzewo”. W zaleĝnoĂci od wzglÚdnej szybkoĂci obu procesów (co z kolei zaleĝy zarówno od wzglÚdnej zïoĝonoĂci programów, jak i tego, ile czasu procesora kaĝdy z nich ma do dyspozycji), moĝe siÚ zdarzyÊ, ĝe polecenie grep bÚdzie gotowe do dziaïania, ale nie bÚdÈ na nie czekaïy ĝadne dane wejĂciowe. Proces bÚdzie siÚ musiaï zablokowaÊ do czasu, aĝ bÚdÈ one dostÚpne. Proces blokuje siÚ, poniewaĝ z logicznego punktu widzenia nie moĝe kontynu- owaÊ dziaïania. Zazwyczaj dzieje siÚ tak dlatego, ĝe oczekuje na dane wejĂciowe, które jeszcze nie sÈ dostÚpne. Jest równieĝ moĝliwe, ĝe proces, który jest gotowy i zdolny do dziaïania, zostanie zatrzymany ze wzglÚdu 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 ĂciĂle zwiÈzane z charakterem problemu (nie moĝna przetworzyÊ wiersza poleceñ wprowadzanego przez uĝytkownika do czasu, kiedy uĝytkownik go nie wprowadzi). W drugim przypadku to techniczne aspekty systemu (niewystar- czajÈca liczba procesorów do tego, aby kaĝdy proces otrzymaï swój prywatny proce- sor). Na rysunku 2.2 pokazano diagram stanów pokazujÈcy trzy stany, w jakich moĝe znajdowaÊ siÚ proces: 1. Dziaïanie (rzeczywiste korzystanie z procesora w tym momencie). 2. GotowoĂÊ (proces moĝe dziaïaÊ, ale jest tymczasowo wstrzymany, aby inny proces mógï dziaïaÊ). 3. Blokada (proces nie moĝe dziaïaÊ do momentu, w którym wydarzy siÚ jakieĂ zewnÚtrzne zdarzenie). Z logicznego punktu widzenia pierwsze dwa stany sÈ do siebie podobne. W obu przy- padkach proces chce dziaïaÊ, 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 moĝe dziaïaÊ nawet wtedy, gdy procesor w tym czasie nie ma innego zajÚcia. 132 PROCESY I WkTKI ROZ. 2 Rysunek 2.2. Proces moĝe byĂ w stanie dziaïania, blokady lub gotowoĂci. Na rysunku pokazano przejĂcia pomiÚdzy tymi stanami Tak jak pokazano na rysunku, pomiÚdzy tymi trzema stanami moĝliwe sÈ cztery przejĂcia. PrzejĂcie nr 1 wystÚpuje wtedy, kiedy system operacyjny wykryje, ĝe pro- ces nie moĝe kontynuowaÊ dziaïania. W niektórych systemach proces moĝe wykonaÊ wywoïanie systemowe, na przykïad pause, w celu przejĂcia do stanu zablokowania. W innych systemach, w tym w Uniksie, kiedy proces czyta dane z potoku lub pliku specjalnego (na przykïad terminala) i dane wejĂciowe sÈ niedostÚpne, jest automa- tycznie blokowany. PrzejĂcia nr 2 i nr 3 sÈ realizowane przez program szeregujÈcy (ang. process sche- duler) — czÚĂÊ systemu operacyjnego, a procesy nie sÈ o tym nawet informowane. PrzejĂcie nr 2 zachodzi wtedy, gdy program szeregujÈcy zdecyduje, ĝe dziaïajÈcy pro- ces dziaïaï wystarczajÈco dïugo i nadszedï czas, by przydzieliÊ czas procesora jakie- muĂ innemu procesowi. PrzejĂcie nr 3 zachodzi wtedy, gdy wszystkie inne procesy skorzystaïy ze swojego udziaïu i nadszedï czas na to, by pierwszy proces otrzymaï procesor i wznowiï dziaïanie. Zadanie szeregowania procesów — to znaczy decydo- wania o tym, który proces powinien siÚ uruchomiÊ, kiedy i na jak dïugo — jest bardzo waĝne. Przyjrzymy siÚ mu bliĝej w dalszej czÚĂci tego rozdziaïu. Opracowano wiele algorytmów majÈcych na celu zapewnienie równowagi pomiÚdzy wymaganiami wydajnoĂci systemu jako caïoĂci oraz sprawiedliwego przydziaïu procesora do indy- widualnych procesów. Niektóre z tych algorytmów omówimy w dalszej czÚĂci niniej- szego rozdziaïu. PrzejĂcie nr 4 wystÚpuje wtedy, gdy zachodzi zewnÚtrzne zdarzenie, na które proces oczekiwaï (na przykïad nadejĂcie danych wejĂciowych). JeĂli w tym momencie nie dziaïa ĝaden inny proces, zajdzie przejĂcie nr 3 i proces rozpocznie dziaïanie. W innym przypadku moĝe byÊ zmuszony do oczekiwania w stanie gotowoĂci przez pewien czas, aĝ procesor stanie siÚ dostÚpny i nadejdzie jego kolejka. Wykorzystanie modelu procesów znacznie uïatwia myĂlenie o tym, co dzieje siÚ wewnÈtrz systemu. Niektóre procesy uruchamiajÈ programy realizujÈce polecenia wprowadzane przez uĝytkownika. Inne procesy sÈ czÚĂciÈ systemu i obsïugujÈ takie zadania, jak obsïuga ĝÈdañ usïug plikowych lub zarzÈdzanie szczegóïami dotyczÈ- cymi uruchamiania napÚdu dysku lub taĂm. Kiedy zachodzi przerwanie dyskowe, system podejmuje decyzjÚ o zatrzymaniu dziaïania bieĝÈcego procesu i uruchamia proces dyskowy, który byï zablokowany w oczekiwaniu na to przerwanie. Tak wiÚc zamiast myĂleÊ o przerwaniach, moĝemy myĂleÊ o procesach uĝytkownika, proce- sach dysku, procesach terminala itp., które blokujÈ siÚ w czasie oczekiwania, aĝ coĂ PODROZ. 2.1 PROCESY 133 siÚ wydarzy. Kiedy nastÈpi próba czytania danych z dysku albo uĝytkownik przyciĂnie klawisz, proces oczekujÈcy na to zdarzenie jest odblokowywany i moĝe wznowiÊ dziaïanie. Ten stan rzeczy jest podstawÈ modelu pokazanego na rysunku 2.3. W tym przy- padku na najniĝszym poziomie systemu operacyjnego znajduje siÚ program szere- gujÈcy, zarzÈdzajÈcy zbiorem procesów wystÚpujÈcych w warstwie nad nim. Caïy mechanizm obsïugi przerwañ i szczegóïów zwiÈzanych z wïaĂciwym uruchamianiem i zatrzymywaniem procesów jest ukryty w elemencie nazwanym tu zarzÈdcÈ pro- cesów. Element ten w rzeczywistoĂci nie zawiera zbyt wiele kodu. Pozostaïa czÚĂÊ systemu operacyjnego ma strukturÚ procesów. W praktyce jednak istnieje bardzo niewiele systemów operacyjnych, które miaïyby tak przejrzystÈ strukturÚ. Rysunek 2.3. Najniĝsza warstwa systemu operacyjnego o strukturze procesów zarzÈdza przerwaniami i szeregowaniem. Powyĝej tej warstwy znajdujÈ siÚ sekwencyjne procesy 2.1.6. Implementacja procesów W celu zaimplementowania modelu procesów w systemie operacyjnym wystÚpuje tabela (tablica struktur), zwana tabelÈ procesów, w której kaĝdemu z procesów odpowiada jedna pozycja — niektórzy autorzy nazywajÈ te pozycje blokami zarzÈ- dzania procesami. W blokach tych sÈ zapisane waĝne informacje na temat stanu procesu. ZawierajÈ one wartoĂci licznika programu, wskaěnika stosu, dane dotyczÈce przydziaïu pamiÚci, statusu otwartych procesów, rozliczeñ i szeregowania oraz wszystkie inne informacje, które trzeba zapisaÊ w czasie przeïÈczania procesu ze stanu wykonywany do stanu gotowy lub zablokowany. DziÚki nim proces moĝe 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È zwiÈzane z zarzÈdzaniem procesami. Pozostaïe dwa ïÈczÈ siÚ odpo- wiednio z zarzÈdzaniem pamiÚciÈ oraz zarzÈdzaniem plikami. Naleĝy zwróciÊ uwagÚ na to, ĝe obecnoĂÊ poszczególnych pól w tabeli procesów w duĝym stopniu zaleĝy od systemu. Poniĝsza tabela daje jednak ogólny obraz rodzajów potrzebnych informacji. Teraz, kiedy przyjrzeliĂmy siÚ tabeli procesów, moĝemy wyjaĂniÊ nieco dokïad- niej to, w jaki sposób iluzja wielu sekwencyjnych procesów jest utrzymywana w jednym procesorze (lub kaĝdym z procesorów). Z kaĝdÈ klasÈ wejĂcia-wyjĂcia wiÈĝe siÚ lokalizacja (zwykle pod ustalonym adresem w dolnej czÚĂci pamiÚci) zwana wek- torem przerwañ. Jest w niej zapisany adres procedury obsïugi przerwania. Zaïóĝmy, 134 PROCESY I WkTKI ROZ. 2 Tabela 2.1. Przykïadowe pola typowego wpisu w tabeli procesów ZarzÈdzanie pamiÚciÈ Wskaěnik do informacji segmentu tekstu Wskaěnik do informacji segmentu danych Wskaěnik do informacji segmentu stosu ZarzÈdzanie plikami Katalog gïówny Katalog roboczy Deskryptory plików Identyfikator uĝytkownika Identyfikator grupy ZarzÈdzanie procesami Rejestry Licznik programu Sïowo stanu programu Wskaěnik stosu Stan procesu Priorytet Parametry szeregowania Identyfikator procesu Proces-rodzic Grupa procesów Sygnaïy Czas rozpoczÚcia procesu Wykorzystany czas CPU Czas CPU procesów-dzieci Godzina nastÚpnego alarmu ĝe w momencie wystÈpienia przerwania zwiÈzanego z dyskiem ma dziaïaÊ proces uĝytkownika nr 3. SprzÚt obsïugujÈcy przerwania odkïada na stos licznik programu procesu uĝytkownika nr 3, sïowo stanu programu i czasami jeden lub kilka rejestrów. NastÚpnie sterowanie przechodzi pod adres okreĂlony w wektorze przerwañ. To jest wszystko, co robi sprzÚt. Od tego momentu obsïugÈ przerwania zajmuje siÚ opro- gramowanie — w szczególnoĂci procedura obsïugi przerwania. Obsïuga kaĝdego przerwania rozpoczyna siÚ od zapisania rejestrów — czÚsto pod pozycjÈ tabeli procesów odpowiadajÈcÈ bieĝÈcemu procesowi. NastÚpnie infor- macje odïoĝone na stos przez mechanizm obsïugi przerwania sÈ z niego zdejmo- wane, a wskaěnik stosu jest ustawiany na adres tymczasowego stosu uĝywanego przez procedurÚ obsïugi procesu. Takich dziaïañ, jak zapisanie rejestrów i ustawie- nie wskaěnika stosu, nawet nie moĝna wyraziÊ w jÚzykach wysokopoziomowych, takich jak C. W zwiÈzku z tym operacje te sÈ wykonywane przez niewielkÈ procedurÚ w jÚzyku asemblera. Zazwyczaj jest to ta sama procedura dla wszystkich przerwañ, poniewaĝ zadanie zapisania rejestrów jest identyczne, niezaleĝnie od tego, co byïo przyczynÈ przerwania. Kiedy ta procedura zakoñczy dziaïanie, wywoïuje procedurÚ w jÚzyku C, która wykonuje resztÚ pracy dla tego konkretnego typu przerwania (zakïadamy, ĝe system operacyjny zostaï napisany w jÚzyku C — w tym jÚzyku napisana jest wiÚkszoĂÊ systemów operacyjnych). Kiedy procedura ta wykona swoje zadanie (co moĝe spo- wodowaÊ, ĝe pewne procesy uzyskajÈ gotowoĂÊ do dziaïania), wywoïywany jest pro- gram szeregujÈcy, który ma sprawdziÊ, jaki proces powinien zostaÊ uruchomiony w nastÚpnej kolejnoĂci. NastÚpnie sterowanie jest przekazywane z powrotem do PODROZ. 2.1 PROCESY 135 kodu w asemblerze, który ïaduje rejestry i mapÚ pamiÚci nowego bieĝÈcego procesu oraz rozpoczyna jego dziaïanie. ObsïugÚ 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 dziaïañ wykonywanych przez najniĝszy poziom systemu operacyjnego w momencie wystÈpienia przerwania 1. SprzÚt odkïada na stos licznik programu itp. 2. SprzÚt ïaduje nowy licznik programu z wektora przerwañ. 3. Procedura w jÚzyku asemblera zapisuje rejestry. 4. Procedura w jÚzyku asemblera ustawia nowy stos. 5. Uruchamia siÚ procedura obsïugi przerwania w C (zazwyczaj czyta i buforuje dane wejĂciowe). 6. Program szeregujÈcy decyduje o tym, który proces ma byÊ uruchomiony w nastÚpnej kolejnoĂci. 7. Procedura w jÚzyku C zwraca sterowanie do kodu w asemblerze. 8. Procedura w jÚzyku asemblera uruchamia nowy bieĝÈcy proces. Kiedy proces zakoñczy dziaïanie, system operacyjny wyĂwietla symbol zachÚty i ocze- kuje na nowe polecenie. Po otrzymaniu polecenia ïaduje do pamiÚci nowy program, nadpisujÈc starÈ zawartoĂÊ pamiÚci. 2.1.7. Modelowanie wieloprogramowoĂci Zastosowanie wieloprogramowoĂci pozwala na poprawÚ wykorzystania procesora. Z grubsza rzecz biorÈc, jeĂli przeciÚtny proces jest przetwarzany przez 20 czasu rezydowania w pamiÚci, to w przypadku gdy w pamiÚci jest jednoczeĂnie piÚÊ pro- cesów, procesor powinien byÊ zajÚty przez caïy czas. Ten model jest jednak niere- alistycznie optymistyczny, poniewaĝ zakïada, ĝe w ĝadnym momencie nie zdarzy siÚ sytuacja, w której wszystkie piÚÊ procesów bÚdzie jednoczeĂnie oczekiwaïo na ope- racjÚ wejĂcia-wyjĂcia. Lepszym modelem jest spojrzenie na wykorzystanie procesora z probabilistycz- nego punktu widzenia. Zaïóĝmy, ĝe proces spÚdza fragment p swojego czasu na zakoñ- czeniu operacji wejĂcia-wyjĂcia. Przy n procesach znajdujÈcych siÚ jednoczeĂnie w pamiÚci prawdopodobieñstwo tego, ĝe wszystkie n procesów bÚdzie jednoczeĂnie oczekiwaïo na obsïugÚ wejĂcia-wyjĂcia (wtedy procesor pozostanie bezczynny), wynosi pn. W takim przypadku wykorzystanie procesora moĝna opisaÊ za pomocÈ wzoru: Wykorzystanie procesora = 1Řpn Na rysunku 2.4 pokazano procent wykorzystania procesora w funkcji n — co okreĂla siÚ jako stopieñ wieloprogramowoĂci. Z rysunku jasno wynika, ĝe jeĂli procesy spÚdzajÈ 80 czasu w oczekiwaniu na operacje wejĂcia-wyjĂcia, to aby wspóïczynnik marnotrawienia procesora utrzymaÊ 136 PROCESY I WkTKI ROZ. 2 Rysunek 2.4. Wykorzystanie procesora w funkcji liczby procesów w pamiÚci na poziomie poniĝej 10 , w pamiÚci musi byÊ jednoczeĂnie co najmniej 10 procesów. Kiedy zdamy sobie sprawÚ ze stanu, w którym proces interaktywny oczekuje, aĝ uĝytkownik wpisze na terminalu jakieĂ dane, stanie siÚ oczywiste, ĝe czasy ocze- kiwania na wejĂcia-wyjĂcia rzÚdu 80 i wiÚcej nie sÈ niczym niezwykïym. Nawet na serwerach procesy wykonujÈce wiele dyskowych operacji wejĂcia-wyjĂcia czÚsto charakteryzujÈ siÚ tak wysokim procentem. Dla ĂcisïoĂci naleĝy dodaÊ, ĝe model probabilistyczny opisany przed chwilÈ jest tylko przybliĝeniem. Zakïada on niejawnie, ĝe wszystkie n procesów jest niezaleĝ- nych. Oznacza to, ĝe w przypadku systemu z piÚcioma procesami w pamiÚci dopusz- czalnym stanem jest to, aby trzy z nich dziaïaïy, a dwa czekaïy. Jednak przy jednym procesorze nie ma moĝliwoĂci jednoczesnego dziaïania trzech procesów. W zwiÈzku z tym proces, który osiÈga gotowoĂÊ w czasie, gdy procesor jest zajÚty, bÚdzie musiaï czekaÊ. Tak wiÚc procesy nie sÈ niezaleĝne. Dokïadniejszy model moĝna stworzyÊ z wykorzystaniem teorii kolejokowania, jednak teza, którÈ sformuïowaliĂmy — wie- loprogramowoĂÊ pozwala procesom wykorzystywaÊ procesor w czasie, gdy w innej sytuacji byïby on bezczynny — jest oczywiĂcie w dalszym ciÈgu prawdziwa. Faktu tego nie zmieniïaby nawet sytuacja, w której rzeczywiste krzywe stopnia wielopro- gramowoĂci nieco odbiegaïyby od tych pokazanych na rysunku 2.4. Mimo ĝe model z rysunku 2.4 jest uproszczony, moĝna go wykorzystywaÊ w celu tworzenia specyficznych, jednak przybliĝonych prognoz dotyczÈcych wydajnoĂci pro- cesora. PrzypuĂÊmy na przykïad, ĝe komputer ma 512 MB pamiÚci, przy czym system operacyjny zajmuje 128 MB, a kaĝdy z programów uĝytkownika równieĝ zajmuje do 128 MB. Te rozmiary pozwalajÈ na to, aby w pamiÚci jednoczeĂnie znajdowaïy siÚ trzy programy uĝytkownika. Przy Ărednim czasie oczekiwania na operacje wejĂcia-wyjĂcia, wynoszÈcym 80 , mamy procent wykorzystania procesora na poziomie 1Ř0,83 czyli okoïo 49 . Dodanie kolejnych 512 MB pamiÚci operacyjnej umoĝliwia przejĂcie systemu z trójstopniowej wieloprogramowoĂci do siedmiostopniowej, co przyczyni siÚ do wzrostu wykorzystania procesora do 79 . MówiÈc inaczej, dodatkowe 512 MB pamiÚci podniesie przepustowoĂÊ o 30 . PODROZ. 2.2 WkTKI 137 Dodanie kolejnych 512 MB spowodowaïoby zwiÚkszenie stopnia wykorzystania procesora z 79 do 91 , a zatem podniosïoby przepustowoĂÊ tylko o kolejne 12 . KorzystajÈc z tego modelu, wïaĂciciel komp
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Systemy operacyjne. Wydanie III
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: