POLECAMY
Wydawca:
Format:
ibuk
Książka stanowi podręcznik akademicki wprowadzający w zagadnienia tworzenia oprogramowania systemowego, w tym systemów operacyjnych. Autorzy prezentują praktyczne podejście do omawianego tematu. Do książki dołączona jest płyta CD Istotną wartość stanowi także dołączony kod systemu operacyjnego napisany w języku Asembler oraz lista rozkazów dla programowania procesorów.
Rok wydania | 2010 |
---|---|
Liczba stron | 674 |
Kategoria | Programowanie |
Wydawca | Wydawnictwo Naukowe PWN |
ISBN-13 | 978-83-01-16383-9 |
Numer wydania | 1 |
Język publikacji | polski |
Informacja o sprzedawcy | ePWN sp. z o.o. |
POLECAMY
Ciekawe propozycje
Spis treści
Wprowadzenie | 11 |
1. Architektura procesorów rodziny x86 | 17 |
1.1. Model procesorów rodziny x86 w trybie rzeczywistym | 17 |
1.1.1. Rejestry procesora | 18 |
1.1.2. Segmentacja pamięci w trybie rzeczywistym | 19 |
1.1.3. Tryby adresowania | 22 |
1.1.4. Segmenty programowe | 24 |
1.2. Model procesorów rodziny x86 w trybie chronionym | 26 |
1.2.1. Segmentacja pamięci w trybie chronionym | 28 |
1.2.2. Tryby adresowania w-bitowym trybie chronionym | 32 |
1.3. Obsługa przerwań i wyjątków | 34 |
1.3.1. Typy przerwań | 34 |
1.3.2. Obsługa przerwań i wyjątków w trybie rzeczywistym | 36 |
1.3.3. Obsługa przerwań i wyjątków w trybie chronionym | 38 |
2. Podstawy programowania procesorów rodziny x86 w trybie rzeczywistym | 43 |
2.1. Składnia programu | 43 |
2.1.1. Identyfikatory | 43 |
2.1.2. Liczby całkowite | 44 |
2.1.3. Znaki alfanumeryczne i teksty | 44 |
2.1.4. Format linii programu | 44 |
2.1.5. Dyrektywy asemblera definiujące dane | 45 |
2.2. Instrukcje przesłań danych oraz operacje arytmetyczne | 47 |
2.2.1. Instrukcje przesłań danych | 48 |
2.2.2. Instrukcje dodawania i odejmowania | 50 |
2.2.3. Dodawanie i odejmowanie liczb dziesiętnych w kodzie BCD | 51 |
2.2.4. Instrukcje mnożenia | 54 |
2.2.5. Instrukcje dzielenia | 54 |
2.2.6. Mnożenie i dzielenie liczb dziesiętnych w kodzie BCD | 55 |
2.2.7. Zmiana rozmiaru liczby | 56 |
2.3. Instrukcje skoków i pętli | 57 |
2.3.1. Skoki bezwarunkowe bezpośrednie | 57 |
2.3.2. Skoki bezwarunkowe pośrednie | 58 |
2.3.3. Instrukcje porównania i skoków warunkowych | 59 |
2.3.4. Instrukcje pętli | 61 |
2.4. Operacje logiczne | 63 |
2.4.1. Instrukcje operacji logicznych | 64 |
2.4.2. Instrukcje przesunięć | 65 |
2.5. Reprezentacja danych | 66 |
2.5.1. Skalarne typy danych | 67 |
2.5.2. Rekordy i operacje na danych upakowanych | 73 |
2.5.3. Zbiory | 76 |
2.5.4. Tablice | 78 |
2.5.5. Struktury | 81 |
2.6. Dynamiczne struktury danych | 83 |
2.6.1. Teksty | 83 |
2.6.2. Listy | 90 |
2.7. Stos | 96 |
2.7.1. Sprzętowe wykorzystanie stosu podczas realizacji instrukcji CALL adres | 99 |
2.7.2. Podprogramy | 101 |
2.7.3. Przekazywanie parametrów do podprogramów | 102 |
2.7.4. Dane lokalne podprogramów | 106 |
2.8. Programowanie zmiennoprzecinkowej jednostki arytmetycznej | 107 |
2.8.1. Architektura | 107 |
2.8.2. Instrukcje przesłań | 110 |
2.8.3. Instrukcje operacji arytmetycznych | 111 |
2.8.4. Instrukcje porównania | 112 |
2.8.5. Instrukcje obliczania wartości niektórych funkcji przestępnych | 114 |
2.8.6. Instrukcje sterujące | 115 |
2.8.7. Odwrotna notacja polska (ONP) i jej zastosowanie w obliczeniach numerycznych | 116 |
2.8.8. Przykładowe programy obliczeń numerycznych | 118 |
2.9. Makropolecenia | 122 |
2.9.1. Język makropoleceń | 122 |
2.9.2. Bloki powtórzeń | 123 |
2.9.3. Definiowanie i wywoływanie makropoleceń | 125 |
2.10. Podstawowe operacje we/wy w systemie operacyjnym DOS | 130 |
2.10.1. Zakończenie programu | 130 |
2.10.2. Wyprowadzanie tekstu na monitor ekranowy | 130 |
2.10.3. Wprowadzanie tekstu z klawiatury | 132 |
2.10.4. Wyprowadzanie liczb na monitor ekranowy | 134 |
2.10.5. Podstawowe operacje plikowe | 135 |
2.10.6. Wybrane usługi BIOS-u | 146 |
3. Przegląd kompilatorów asemblera | 156 |
3.1. Podstawowa struktura programu | 156 |
3.2. Sposób kompilacji | 162 |
3.3. Operacje na zmiennych | 163 |
3.4. Deklaracje tablic | 165 |
3.5. Procedury | 165 |
3.6. Deklaracje i dostęp do struktur danych | 167 |
3.7. Makropolecenia | 172 |
3.8. Kompilacja warunkowa | 175 |
4. Praca procesorów rodziny x86 w trybie chronionym | 185 |
4.1. Przełączenie procesora do trybu chronionego | 186 |
4.2. Obsługa przerwań i wyjątków w trybie chronionym | 195 |
4.3. Wykorzystanie pamięci rozszerzonej w trybie chronionym | 197 |
4.4. Przełączanie zadań | 203 |
4.4.1. Pseudonimy deskryptorów | 212 |
4.4.2. Przełączanie zadań z wykorzystaniem furtki zadania | 213 |
4.5. Przełączanie zadań inicjowane przerwaniami sprzętowymi | 215 |
4.5.1. Programowanie kontrolera przerwań w trybie chronionym | 215 |
4.5.2. Przełączanie zadań inicjowane przerwaniami sprzętowymi nr 0 i 1 | 217 |
4.6. Separacja środowisk operacyjnych poszczególnych procesów oraz lokalne tablice deskryptorów | 222 |
4.7. Poziomy uprzywilejowania oraz funkcjonowanie systemu ochrony | 225 |
4.8. Zadania realizowane na różnych poziomach uprzywilejowania | 234 |
4.9. Wprowadzenie do 32-bitowego trybu chronionego | 235 |
4.10. Adresowanie w 32-bitowym trybie chronionym | 237 |
4.11. Obsługa klawiatury w trybie chronionym | 238 |
5. Stronicowanie pamięci operacyjnej | 243 |
5.1. Przegląd algorytmów przydziału pamięci | 243 |
5.1.1. Przydział pamięci oparty na blokach o stałym rozmiarze | 244 |
5.1.2. Dynamiczny przydział bloków | 244 |
5.1.3. Przemieszczane bloki pamięci | 245 |
5.2. Zasada stronicowania pamięci | 246 |
5.3. Elementy architektury procesorów rodziny x86 odpowiedzialne za stronicowanie | 249 |
5.3.1. Rejestry sterujące CR0, CR2, CR3, CR4 | 253 |
5.4. Inicjowanie stronicowania | 256 |
5.5. Stronicowanie a wielozadaniowość | 259 |
5.6. Realizacja stronicowania dla całego dostępnego obszaru pamięci operacyjnej | 265 |
5.7. Stronicowanie jednopoziomowe z rozmiarem strony 4 MB | 268 |
5.8. Stronicowanie o rozszerzonym adresie fizycznym | 271 |
5.8.1. Stronicowanie z rozszerzonym adresem fizycznym i rozmiarem strony 4 KB (stronicowanie trójstopniowe) | 272 |
5.8.2. Stronicowanie z rozszerzonym adresem fizycznym i rozmiarem strony 2 MB | 274 |
5.8.3. PSE-36 – stronicowanie z rozszerzonym adresem fizycznym i rozmiarem strony 4 MB | 276 |
5.8.4. Analiza programu paging6.asm | 277 |
5.9. Mechanizm zarządzania przydzielaniem ramek – binarna mapa pamięci | 278 |
6. Pamięć wirtualna | 284 |
6.1. Zasada funkcjonowania pamięci wirtualnej | 284 |
6.2. Obsługa wyjątków nr 11 i 14 | 287 |
6.2.1. Kod błędu dla wyjątku nieobecnego segmentu (nr 11) | 287 |
6.2.2. Kod błędu dla wyjątku braku strony (nr 14) | 289 |
6.3. Tablice zapamiętanych stron/segmentów | 291 |
6.3.1. Tablice zapamiętanych stron | 292 |
6.3.2. Tablice zapamiętanych segmentów | 293 |
6.4. Wybrane algorytmy zastępowania stron | 294 |
6.4.1. Algorytm FIFO | 295 |
6.4.2. Algorytm LRU | 295 |
6.4.3. Algorytm dodatkowych bitów odwołań | 295 |
6.4.4. Algorytm drugiej szansy | 295 |
6.4.5. Algorytmy rodziny buforowania stron | 296 |
6.5. Przykładowa implementacja stronicowania na żądanie | 296 |
6.5.1. Analiza programu paging3.asm | 298 |
7. Tryb zadań wirtualnych 8086 | 305 |
7.1. Przełączenie procesora w tryb VM86 | 306 |
7.2. Obsługa wyjątków i przerwań sprzętowych w procesie działającym w VM86 | 308 |
7.2.1. Analiza programu v86_0.asm | 312 |
7.3. Obsługa przerwań maskowalnych w trybie VM86 | 315 |
7.3.1. Analiza programu v86_1.asm | 317 |
7.4. Obsługa przerwań programowych | 320 |
7.4.1. Analiza programu v86_2.asm | 323 |
7.5. Obsługa we/wy w VM86 | 324 |
7.5.1. Analiza programu v86_3.asm | 326 |
8. Wielozadaniowość | 328 |
8.1. Podstawowe pojęcia z zakresu wielozadaniowości | 328 |
8.1.1. Systemy wielozadaniowe przetwarzania wsadowego | 328 |
8.1.2. Systemy wielozadaniowe z podziałem czasu | 331 |
8.1.3. Systemy czasu rzeczywistego | 331 |
8.1.4. Zastosowanie systemów wieloprocesorowych | 332 |
8.1.5. Rola programu szeregującego | 332 |
8.2. Przegląd wybranych algorytmów szeregowania zadań | 335 |
8.2.1. Algorytm cykliczny | 337 |
8.2.2. Algorytm planowania priorytetowego opartego na zmiennym kwancie czasu | 338 |
8.2.3. Algorytm postarzania priorytetów | 339 |
8.2.4. Planowanie priorytetowe z użyciem kolejek wielopoziomowych | 341 |
8.2.5. Kolejki wielopoziomowe ze sprzężeniem zwrotnym | 343 |
8.3. Przykładowe implementacje wybranych algorytmów pracy programu szeregującego | 344 |
8.3.1. Implementacja algorytmu cyklicznego | 344 |
8.3.2. Analiza programu mult1.asm | 346 |
8.3.3. Implementacja planowania priorytetowego na zasadzie zmiennego kwantu czasu | 354 |
8.3.4. Implementacja planowania metodą postarzania priorytetów | 358 |
8.3.5. Implementacja planowania metodą wielopoziomowych kolejek zadań | 363 |
8.4. Synchronizacja procesów | 373 |
8.4.1. Sekcja krytyczna | 373 |
8.4.2. Synchronizacja procesów za pomocą blokowania przerwań | 375 |
8.4.3. Zmienne blokujące | 376 |
8.4.4. Semafory binarne (muteksy) | 378 |
8.4.5. Przykładowa implementacja semaforów binarnych | 379 |
8.5. Komunikacja międzyprocesowa | 384 |
8.5.1. Wymiana komunikatów | 385 |
8.5.2. Przykładowa implementacja wymiany komunikatów | 387 |
9. Start systemu | 395 |
9.1. System plików FAT12 | 396 |
9.1.1. Tablica FAT12 – analiza wpisów i translacja adresów | 399 |
9.2. Program rozruchowy | 403 |
9.2.1. Instalacja programu rozruchowego w pierwszym sektorze dyskietki | 403 |
9.2.2. Implementacja programu rozruchowego | 405 |
10. Przykładowa realizacja jądra wielozadaniowego systemu operacyjnego – system operacyjny DAMIANIX | 423 |
10.1. Założenia funkcjonalne | 423 |
10.2. Zakres projektu | 424 |
10.3. Struktura systemu operacyjnego | 424 |
10.4. Funkcjonalność modułów systemu operacyjnego | 424 |
10.4.1. Moduł inicjalizacji | 425 |
10.4.2. Moduł pamięci | 427 |
10.4.3. Moduł wielozadaniowości | 429 |
10.4.4. Moduł przerwań | 432 |
10.4.5. Moduł dyskietki | 434 |
10.4.6. Moduł interpretatora | 435 |
10.4.7. Moduł systemu plików | 436 |
10.4.8. Moduł urządzeń | 436 |
10.4.9. Moduł ekranu | 438 |
10.4.10. Moduł kolejek | 439 |
10.4.11. Moduł sterty | 439 |
10.4.12. Moduł czasomierza | 439 |
10.4.13. Moduł usług | 440 |
10.4.14. Moduł wyjątków | 440 |
10.5. Specyfikacja zewnętrzna | 440 |
10.5.1. Interfejs z użytkownikiem | 440 |
10.5.2. Polecenia | 442 |
10.6. Instalacja systemu operacyjnego z plików źródłowych | 445 |
10.7. Format programów obsługiwanych przez system | 446 |
10.8. Mapa pamięci systemu operacyjnego | 447 |
10.9. Możliwe kierunki rozwoju | 448 |
Dodatki | 449 |
A1. Pliki załącznikowe | 451 |
Plik strukt.txt | 451 |
Plik gdt.txt | 452 |
Plik makra.txt | 452 |
Plik proc.txt | 465 |
Plik a20.txt | 467 |
Plik dane.txt | 470 |
Plik kod.txt | 471 |
Plik mult.txt | 472 |
Plik paging.txt | 480 |
Plik pm_data.txt | 481 |
Plik pm_exc.txt | 481 |
Plik pm_idt.txt | 485 |
Plik proc32.txt | 485 |
Plik v86.txt | 487 |
A2. Podstawy trybu chronionego (programy z rozdziału 4) | 490 |
Program p0.asm | 490 |
Program task_2.asm | 491 |
Program task_3.asm | 493 |
Program task_4.asm | 495 |
Program task_5.asm | 498 |
Program task_6.asm | 500 |
Program task_7.asm | 503 |
Program task_8.asm | 508 |
Program task_9.asm | 515 |
Program task_10.asm | 520 |
Program pm32bit.asm | 524 |
Program adr.asm | 528 |
Program sprzet1.asm | 533 |
A3. Stronicowanie i pamięć wirtualna (programy z rozdziału 5 i 6) | 545 |
Program paging1.asm | 545 |
Program paging2.asm | 547 |
Program paging3.asm | 555 |
Program paging4.asm | 562 |
Program paging5.asm | 565 |
Program paging6.asm | 566 |
Program paging7.asm | 570 |
A4. Tryb wirtualnych zadań 8086 (programy z rozdziału 7) | 578 |
Program v86_0.asm | 578 |
Program v86_1.asm | 583 |
Program v86_2.asm | 589 |
Program v86_3.asm | 594 |
A5. Wielozadaniowość (programy z rozdziału 8) | 601 |
Program mult1.asm | 601 |
Program mult2.asm | 607 |
Program mult3.asm | 612 |
Program mult4.asm | 618 |
Program mult5.asm | 630 |
Program mult6.asm | 642 |
B. Zestaw wybranych rozkazów asemblera dla procesorów x86 | 655 |
Literatura | 673 |
Skorowidz | 674 |