Оглавление
Благодарности |
11 |
Введение |
13 |
Основные функции операционных систем |
15 |
Какие бывают ОС |
17 |
Системы с загрузчиком и без него |
17 |
Управление оперативной памятью |
19 |
Управление временем центрального процессора |
27 |
Семейства операционных систем |
38 |
Выбор операционной системы |
39 |
Открытые системы |
43 |
Как организована эта книга |
44 |
Глава 1. Представление данных в вычислительных системах |
47 |
1.1. Введение в двоичную арифметику |
48 |
1.2. Представление рациональных чисел |
53 |
1.3. Представление текстовых данных |
58 |
1.4. Представление изображений |
60 |
1.5. Представление звуков |
64 |
1.6. Упаковка данных |
64 |
1.7. Контрольные суммы |
69 |
1.8. Введение в криптографию |
72 |
Глава 2. Машинные языки |
79 |
2.1. Системы команд |
82 |
2.2. Форматы команд машинного языка |
87 |
2.2.1. Стековые системы команд |
92 |
2.3. Команды перехода |
93 |
2.4. Регистры |
95 |
2.5. Адресация оперативной памяти |
102 |
2.6. Режимы адресации |
106 |
2.6.1. Вырожденные режимы адресации |
108 |
2.6.2. Абсолютная адресация |
110 |
2.6.3. Косвенно-регистровый режим |
111 |
2.6.4. Косвенно-регистровый режим со смещением |
114 |
2.6.5. Базово-индексный режим |
120 |
2.6.6. Сложные режимы адресации |
122 |
2.6.7. Адресация с использованием счетчика команд |
122 |
2.7. Банки памяти |
124 |
2.8. CISC- и RISC-процессоры |
129 |
2.9. Языки ассемблера |
132 |
2.9.1. Многопроходное ассемблирование |
137 |
2.10. Отладчики и деассемблеры |
138 |
2.10.1. Листинги и отладочная информация |
139 |
2.10.2. Отладка |
146 |
2.10.3. Удаленная отладка |
147 |
2.10.4. Деассемблирование |
149 |
Вопросы для самопроверки |
153 |
Вопросы, над которыми следует задуматься |
153 |
Глава 3. Загрузка программ |
155 |
3.1. Абсолютная загрузка |
160 |
3.2. Разделы памяти |
161 |
3.3. Относительная загрузка |
162 |
3.4. Базовая адресация |
167 |
3.5. Позиционно-независимый код |
168 |
3.6. Оверлеи (перекрытия) |
172 |
3.7. Сборка программ |
174 |
3.8. Объектные библиотеки |
186 |
3.9. Сборка в момент загрузки |
188 |
3.10. Динамические библиотеки |
193 |
3.11. Загрузка самой ОС |
200 |
Вопросы для самопроверки |
213 |
Глава 4. Управление оперативной памятью |
215 |
4.1. Открытая память |
216 |
4.2. Алгоритмы динамического управления памятью |
220 |
4.3. Сборка мусора |
252 |
4.3.1. Подсчет ссылок |
255 |
4.3.2. Просмотр ссылок |
256 |
4.3.3. Генерационная сборка мусора |
259 |
4.4. Открытая память (продолжение) |
265 |
4.4.1. Управление памятью в MacOS и Win16 |
270 |
4.5. Системы с базовой виртуальной адресацией |
273 |
Вопросы для самопроверки |
278 |
Глава 5. Сегментная и страничная виртуальная память |
281 |
5.1. Сегменты, страницы и системные вызовы |
289 |
5.2. Взаимно недоверяющие подсистемы |
308 |
5.3. Сегменты, страницы и системные вызовы (продолжение) |
314 |
5.4. Разделяемые библиотеки |
315 |
5.5. Страничный обмен |
327 |
5.5.1. Поиск жертвы |
329 |
5.6. Управление своп-файлом |
335 |
5.7. Одноуровневая память |
338 |
Вопросы для самопроверки |
345 |
Глава 6. Компьютер и внешние события |
349 |
6.1. Опрос |
350 |
6.2. Канальные процессоры и прямой доступ к памяти |
352 |
6.3. Прерывания |
356 |
6.4. Исключения |
359 |
6.5. Многопроцессорные архитектуры |
360 |
Глава 7. Параллелизм с точки зрения программиста |
375 |
7.1. Формулировка задачи |
378 |
7.2. Примитивы взаимоисключения |
381 |
7.2.1. Мертвые и живые блокировки |
385 |
7.3. Примитивы синхронизации с ожиданием |
391 |
7.3.1. Семафоры |
394 |
7.3.2. Блокировки чтения-записи |
398 |
7.3.3. Копирование при записи |
399 |
Введение в обработку транзакций |
401 |
7.3.5. Захват участков файлов |
402 |
7.3.6. Мониторы и серверы транзакций |
403 |
7.4. Гармонически взаимодействующие последовательные потоки |
405 |
7.5. Системы, управляемые событиями |
416 |
Вопросы для самопроверки |
428 |
Глава 8. Реализация многозадачности
на однопроцессорных компьютерах |
431 |
8.1. Кооперативная многозадачность |
432 |
8.2. Вытесняющая многозадачность |
437 |
8.2.1. Планировщики с приоритетами |
450 |
8.2.2. Честное планирование |
458 |
8.2.3. Инверсия приоритета |
461 |
8.3. Пользовательские и ядерные нити |
464 |
8.4. Монолитные системы и системы с микроядром |
465 |
Вопросы для самопроверки |
471 |
Глава 9. Внешние устройства |
473 |
9.1. Доступ к внешним устройствам |
475 |
9.2. Простые внешние устройства |
478 |
9.3. Порты передачи данных |
482 |
9.4. Шины |
496 |
9.5. Устройства графического вывода |
531 |
9.6. Запоминающие устройства прямого доступа |
539 |
9.6.1. Производительность жестких дисков |
553 |
9.6.2. Дисковые массивы |
555 |
9.6.3. Сети доступа к дискам |
558 |
Вопросы для самопроверки |
561 |
Глава 10. Драйверы внешних устройств |
563 |
10.1. Функции драйверов |
569 |
10.2. Многоуровневые драйверы |
575 |
10.3. Защита драйверов |
581 |
10.4. Архитектура драйвера |
586 |
10.4.1. Введение в конечные автоматы |
596 |
10.4.2. Архитектура драйвера |
602 |
10.5. Запросы к драйверу |
608 |
10.5.1. Синхронный ввод/вывод |
609 |
10.5.2. Асинхронный ввод/вывод |
610 |
10.6. Сервисы ядра, доступные драйверам |
612 |
10.6.1. Автоконфигурация |
613 |
10.6.2. Выделение памяти |
615 |
10.6.3. Таймеры |
617 |
10.6.4. Обмен данными с пользовательским процессом |
617 |
10.6.5. Сервисные функции |
618 |
10.7. Асинхронная модель ввода/вывода с точки зрения приложений |
619 |
10.8. Дисковый кэш |
623 |
10.9. Спулинг |
627 |
Вопросы для самопроверки |
629 |
Глава 11. Файловые системы |
631 |
11.1. Файлы с точки зрения пользователя |
633 |
11.1.1. Монтирование файловых систем |
633 |
11.1.2. Формат имен файлов |
637 |
11.1.3. Операции над файлами |
639 |
11.1.4. Тип файла |
642 |
11.2. Простые файловые системы |
647 |
11.3. "Сложные" файловые системы |
657 |
11.4. Устойчивость ФС к сбоям |
668 |
11.4.1. Устойчивость к сбоям питания |
668 |
11.4.2. Восстановление ФС после сбоя |
672 |
11.4.3. Файловые системы с регистрацией намерений |
677 |
11.4.4. Устойчивость ФС к сбоям диска |
691 |
11.5. Файловые системы с копированием при записи |
693 |
Вопросы для самопроверки |
698 |
Глава 12. Обработка ошибок и исключений |
701 |
12.1. Типы ошибок, которые следует обрабатывать |
704 |
12.2. Стратегии обработки ошибок |
707 |
12.2.1. Автоматический перезапуск |
708 |
12.2.2 Неявное освобождение ресурсов |
710 |
12.2.3. Оповещение пользователя |
713 |
12.2.3. Логи |
716 |
12.3. Обнаружение ошибок |
721 |
12.4. Передача информации об ошибках |
726 |
12.4.1. Коды ошибок |
730 |
12.4.2. Простые обработчики ошибок |
733 |
12.4.3. Стековые обработчики ошибок и простая обработка исключений |
738 |
12.4.4. Обработка исключений в стиле PL/I |
747 |
12.4.5. Исключения C++/Java/C# |
750 |
Вопросы для самопроверки |
754 |
Глава 13. Безопасность |
755 |
13.1. Формулировка задачи |
756 |
13.2. Сессии и идентификаторы пользователя |
765 |
13.3. Аутентификация |
767 |
13.4. Авторизация |
772 |
13.4.1. Списки контроля доступа |
773 |
13.4.2. Полномочия |
783 |
13.4.3. Изменение идентификатора пользователя |
787 |
13.5. Ресурсные квоты |
793 |
13.6. Типичные уязвимые места |
794 |
13.7. Ошибки программирования |
797 |
13.7.1. Срыв буфера |
797 |
13.7.2. Внедрение скриптов и SQL |
805 |
13.7.3. Другие ошибки |
807 |
13.8. Троянские программы |
809 |
13.8.1. Троянские программы, внедряемые при разработке |
813 |
13.8.2. Троянские программы, внедряемые при распространении |
820 |
13.8.3. Троянские программы, внедряемые в уже установленную систему |
821 |
13.9. Практические рекомендации |
837 |
Вопросы для самопроверки |
841 |
Приложение 1. Обзор современных ОС |
843 |
П1.1. MVS, OS/390, z/OS |
843 |
П.1.2. ОС для компьютеров DEC |
845 |
П1.2.1 PDP-6 MONITOR и TOPS-10 |
846 |
П1.2. BBN TENEX и TOPS-20 |
849 |
П1.2.3. RT-11 |
851 |
П1.2.4. RSX-11 |
854 |
П1.2.5. VAX/VMS |
857 |
П1.2.6. OpenVMS |
860 |
П1.3. Cемейство Unix |
862 |
П1.3.1. Распространение UNIX |
866 |
П1.3.2. Микроядро |
869 |
П1.3.3. Minix |
869 |
П1.3.4. GNU Not Unix |
870 |
П1.3.5. Open Software Foundation |
871 |
П1.3.6. X/Open |
871 |
П1.3.7. UNIX System V Release 4 |
872 |
П1.3.8. Linux |
876 |
П1.3.9. MacOS X |
877 |
П1.4. Семейство CP/M |
881 |
П.1.4.2 MS DOS |
883 |
П1.4.2. Расширители DOS |
885 |
П1.4.3. Win16 |
887 |
П1.4.4. OS/2 1.x |
890 |
П1.4.5. IBM OS/2 |
893 |
П1.4.6. Windows NT/2000/XP |
899 |
П1.4.7 Microsoft Xbox |
911 |
П1.4.8. Windows 95/98/ME |
913 |
П1.4.9. Windows CE |
915 |
Приложение 2. Архитектура и язык ассемблера x86 |
917 |
П2.1. История |
918 |
П2.2. Архитектура процессора |
926 |
П2.2.1. Регистры |
927 |
П2.2.2. Адресное пространство и диспетчер памяти |
934 |
П2.2.3. Прерывания и исключения |
947 |
П2.3. Система команд и режимы адресации |
951 |
П2.4. Язык ассемблера |
982 |
П2.4.1. Синтаксис |
983 |
П2.4.2. Символы |
983 |
П2.4.3. Секции |
986 |
П2.4.4. Команды |
987 |
П2.4.5. Директивы |
989 |
Список источников информации |
995 |
Документация |
995 |
INMOS |
995 |
National Bureau of Standards |
995 |
NASA |
995 |
US Army Ordnance Dept. |
995 |
Zortech |
996 |
Книги и публикации |
996 |
Интернет-ресурсы |
1003 |
Adobe |
1003 |
ANSI |
1003 |
Atmel |
1003 |
IBM |
1003 |
IETF |
1004 |
Intel |
1005 |
Linux |
1005 |
Microchip |
1005 |
Microsoft |
1006 |
National Semiconductors |
1006 |
SPARC |
1006 |
Sun Microsystems |
1007 |
Другие ресурсы |
1007 |
Предметный указатель |
1015 |
8
Оглавление
9
Оглавление
|