Предисловие . 15
От издательства 17
Об авторе 17
Глава 1. Введение . 19
1.1. Что такое операционная система? . 21
1.1.1. Операционная система как расширенная машина . 22
1.1.2. Операционная система в качестве менеджера ресурсов 24
1.2. История операционных систем . 26
1.2.1. Первое поколение (1945–1955): электронные лампы 26
1.2.2. Второе поколение (1955–1965): транзисторы и системы пакетной обработки 27
1.2.3. Третье поколение (1965–1980): интегральные схемы и многозадачность 29
1.2.4. Четвертое поколение (с 1980 года по наши дни): персональные компьютеры 35
1.3. Обзор аппаратного обеспечения компьютера . 39
1.3.1. Процессоры . 40
1.3.2. Многопоточные и многоядерные микропроцессоры 43
1.3.3. Память 44
1.3.4. Диски 48
1.3.5. Ленты 49
1.3.6. Устройства ввода-вывода . 50
1.3.7. Шины . 54
1.3.8. Загрузка компьютера . 56
1.4. Зоопарк операционных систем . 58
1.4.1. Операционные системы мейнфреймов 58
1.4.2. Серверные операционные системы 58
1.4.3. Многопроцессорные операционные системы . 59
1.4.4. Операционные системы персональных компьютеров 59
1.4.5. Операционные системы карманных персональных компьютеров 60
1.4.6. Встроенные операционные системы . 60
1.4.7. Операционные системы сенсорных узлов 61
1.4.8. Операционные системы реального времени . 61
1.4.9. Операционные системы смарт-карт 62
1.5. Понятия операционной системы 63
1.5.1. Процессы . 63
1.5.2. Адресные пространства . 65
1.5.3. Файлы . 66
1.5.4. Ввод-вывод данных 70
1.5.5. Безопасность . 70
1.5.6. Оболочка 70
1.5.7. Онтогенез повторяет филогенез 72
1.6. Системные вызовы . 76
1.6.1. Системные вызовы для управления процессами 80
1.6.2. Системные вызовы для управления файлами . 83
1.6.3. Системные вызовы для управления каталогами . 84
1.6.4. Разные системные вызовы 86
1.6.5. Windows Win32 API . 87
1.7. Структура операционной системы . 90
1.7.1. Монолитные системы . 90
1.7.2. Многоуровневые системы . 91
1.7.3. Микроядра . 92
1.7.4. Клиент-серверная модель . 95
1.7.5. Виртуальные машины . 96
1.7.6. Экзоядра 100
1.8. Устройство мира согласно языку C 100
1.8.1. Язык С . 101
1.8.2. Заголовочные файлы . 102
1.8.3. Большие программные проекты . 102
1.9. Исследования в области операционных систем 104
1.10. Краткое содержание остальных глав этой книги . 106
1.11. Единицы измерения . 107
1.12. Краткие выводы . 108
Вопросы . 109
Глава 2. Процессы и потоки . 112
2.1. Процессы 112
2.1.1. Модель процесса 113
2.1.2. Создание процесса 115
2.1.3. Завершение процесса . 118
2.1.4. Иерархии процессов 118
2.1.5. Состояния процессов . 119
2.1.6. Реализация процессов . 121
2.1.7. Моделирование режима многозадачности 124
2.2. Потоки . 125
2.2.1. Применение потоков 125
2.2.2. Классическая модель потоков 131
2.2.3. Потоки в POSIX 136
2.2.4. Реализация потоков в пользовательском пространстве 138
2.2.5. Реализация потоков в ядре . 141
2.2.6. Гибридная реализация . 143
2.2.7. Активация планировщика 143
2.2.8. Всплывающие потоки . 145
2.2.9. Превращение однопоточного кода в многопоточный . 146
2.3. Взаимодействие процессов 150
2.3.1. Состязательная ситуация 151
2.3.2. Критические области . 152
2.3.3. Взаимное исключение с активным ожиданием . 153
2.3.4. Приостановка и активизация 159
2.3.5. Семафоры 162
2.3.6. Мьютексы . 165
2.3.7. Мониторы . 170
2.3.8. Передача сообщений . 176
2.3.9. Барьеры 180
2.4. Планирование 181
2.4.1. Введение в планирование . 182
2.4.2. Планирование в пакетных системах 190
2.4.3. Планирование в интерактивных системах 192
2.4.4. Планирование в системах реального времени 199
2.4.5. Политика и механизмы . 201
2.4.6. Планирование потоков . 201
2.5. Классические задачи взаимодействия процессов 203
2.5.1. Задача обедающих философов 203
2.5.2. Задача читателей и писателей . 207
2.6. Исследования, посвященные процессам и потокам . 208
2.7. Краткие выводы . 209
Вопросы . 210
Глава 3. Управление памятью 216
3.1. Память без использования абстракций . 217
3.2. Абстракция памяти: адресные пространства . 220
3.2.1. Понятие адресного пространства 221
3.2.2. Свопинг . 223
3.2.3. Управление свободной памятью 226
3.3. Виртуальная память 230
3.3.1. Страничная организация памяти . 232
3.3.2. Таблицы страниц . 236
3.3.3. Ускорение работы страничной организации памяти 238
3.3.4. Таблицы страниц для больших объемов памяти 242
3.4. Алгоритмы замещения страниц 245
3.4.1. Оптимальный алгоритм замещения страниц . 246
3.4.2. Алгоритм исключения недавно использовавшейся страницы 247
3.4.3. Алгоритм «первой пришла, первой и ушла» . 249
3.4.4. Алгоритм «второй шанс» 249
3.4.5. Алгоритм «часы» 250
3.4.6. Алгоритм замещения наименее востребованной страницы . 251
3.4.7. Моделирование LRU в программном обеспечении . . . . . . . . . . . . . . . . . . . . . . . 252
3.4.8. Алгоритм «Рабочий набор» 254
3.4.9. Алгоритм WSClock . 258
3.4.10.Краткая сравнительная характеристика алгоритмов замещения страниц 261
3.5. Вопросы разработки систем страничной организации памяти . 262
3.5.1. Сравнительный анализ локальной и глобальной политики 262
3.5.2. Управление загрузкой 265
3.5.3. Размер страницы 266
3.5.4. Разделение пространства команд и данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
3.5.5. Совместно используемые страницы . 269
3.5.6. Совместно используемые библиотеки 270
3.5.7. Отображаемые файлы . 273
3.5.8. Политика очистки страниц . 273
3.5.9. Интерфейс виртуальной памяти . 274
3.6. Вопросы реализации 275
3.6.1. Участие операционной системы в процессе подкачки страниц 275
3.6.2. Обработка ошибки отсутствия страницы 276
3.6.3. Перезапуск команды 277
3.6.4. Блокировка страниц в памяти . 279
3.6.5. Резервное хранилище 279
3.6.7. Разделение политики и механизма . 282
3.7. Сегментация 283
3.7.1. Реализация чистой сегментации . 287
3.7.2. Сегментация со страничной организацией памяти: система MULTICS . 288
3.7.3. Сегментация со страничной организацией памяти: система Intel Pentium . 292
3.9. Краткие выводы . 298
Вопросы . 299
Глава 4. Файловые системы 306
4.1. Файлы . 308
4.1.1. Имена файлов . 308
4.1.2. Структура файла . 310
4.1.3. Типы файлов 311
4.1.4. Доступ к файлам . 313
4.1.5. Атрибуты файлов 314
4.1.6. Операции с файлами 316
4.1.7. Пример программы, использующей файловые системные вызовы 317
4.2. Каталоги 320
4.2.1. Системы с одноуровневыми каталогами 320
4.2.2. Иерархические системы каталогов . 320
4.2.3. Имена файлов . 321
4.2.4. Операции с каталогами . 324
4.3. Реализация файловой системы 325
4.3.1. Структура файловой системы . 325
4.3.2. Реализация файлов 326
4.3.3. Реализация каталогов 332
4.3.4. Совместно используемые файлы . 336
4.3.5. Файловые системы с журнальной структурой . 338
4.3.6. Журналируемые файловые системы . 340
4.3.7. Виртуальные файловые системы . 342
4.4. Управление файловой системой и ее оптимизация 346
4.4.1. Управление дисковым пространством 346
4.4.2. Резервное копирование файловой системы 353
4.4.3. Непротиворечивость файловой системы . 360
4.4.4. Производительность файловой системы . 364
4.4.5. Дефрагментация дисков . 369
4.5. Примеры файловых систем . 370
4.5.1. Файловые системы компакт-дисков 370
4.5.2. Файловая система MS-DOS 376
4.5.3. Файловая система UNIX V7 379
4.6. Исследования в области файловых систем 382
4.7. Краткие выводы . 383
Вопросы . 383
Глава 5. Ввод и вывод информации 387
5.1. Основы аппаратного обеспечения ввода-вывода . 387
5.1.1. Устройства ввода-вывода . 388
5.1.2. Контроллеры устройств . 389
5.1.3. Ввод-вывод, отображаемый на пространство памяти . 390
5.1.4. Прямой доступ к памяти (DMA) . 395
5.1.5. Еще раз о прерываниях 398
5.2. Принципы создания программного обеспечения ввода-вывода 403
5.2.1. Задачи, стоящие перед программным обеспечением ввода-вывода . 403
5.2.2. Программный ввод-вывод . 405
5.2.3. Ввод-вывод, управляемый прерываниями . 407
5.2.4. Ввод-вывод с использованием DMA . 408
5.3. Уровни программного обеспечения ввода-вывода . 408
5.3.1. Обработчики прерываний . 409
5.3.2. Драйверы устройств . 410
5.3.3. Программное обеспечение ввода-вывода, не зависящее от конкретных
устройств . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
5.3.4. Программное обеспечение ввода-вывода, работающее в пространстве
пользователя 421
5.4. Диски . 423
5.4.1. Аппаратная часть дисков . 423
5.4.2. Форматирование диска . 441
5.4.3. Алгоритмы планирования перемещения блока головок 445
5.4.4. Обработка ошибок 449
5.4.5. Стабильное хранилище данных 452
5.5. Часы . 456
5.5.1. Аппаратная составляющая часов . 456
5.5.2. Программное обеспечение часов 458
5.5.3. Программируемые таймеры . 461
5.6. Пользовательский интерфейс: клавиатура, мышь, монитор . 463
5.6.1. Программное обеспечение ввода информации 463
5.6.2. Программное обеспечение вывода информации . 469
5.7. Тонкие клиенты 486
5.8. Управление энергопотреблением 488
5.8.1. Роль оборудования . 490
5.8.2. Роль операционной системы 491
5.8.2. Роль прикладных программ 497
5.9. Исследования в области ввода-вывода данных . 499
5.10. Краткие выводы . 500
Вопросы . 501
Глава 6. Взаимоблокировка . 507
6.1. Ресурсы . 508
6.1.1. Выгружаемые и невыгружаемые ресурсы 508
6.1.2. Получение ресурса . 510
6.2. Введение во взаимоблокировки . 511
6.2.1. Условия возникновения ресурсных взаимоблокировок . 512
6.2.2. Моделирование взаимоблокировок 512
6.3. Страусиный алгоритм . 516
6.4. Обнаружение взаимоблокировок и восстановление работоспособности 516
6.4.1. Обнаружение взаимоблокировки при использовании одного ресурса
каждого типа . 516
6.4.2. Обнаружение взаимоблокировки при использовании нескольких
ресурсов каждого типа . 519
6.4.3. Выход из взаимоблокировки . 522
6.5. Уклонение от взаимоблокировок 524
6.5.1. Траектории ресурса 524
6.5.2. Безопасное и небезопасное состояние 525
6.5.3. Алгоритм банкира для одного ресурса . 527
6.5.4. Алгоритм банкира для нескольких типов ресурсов . 528
6.6. Предотвращение взаимоблокировки 530
6.6.1. Атака условия взаимного исключения . 530
6.6.2. Атака условия удержания и ожидания . 531
6.6.3. Атака условия невыгружаемости 532
6.6.4. Атака условия циклического ожидания . 532
6.7. Другие вопросы . 534
6.7.1. Двухфазное блокирование 534
6.7.2. Взаимные блокировки при обмене данными . 534
6.7.3. Активная взаимоблокировка . 536
6.7.4. Зависание 538
6.8. Исследования в области взаимоблокировок 539
6.9. Краткие выводы . 540
Вопросы . 540
Глава 7. Мультимедийные операционные системы 545
7.1. Введение в мультимедиа . 546
7.1.1. Мультимедийные файлы 550
7.1.2. Кодирование изображения . 552
7.1.3. Кодирование звука . 555
7.2. Сжатие видеоинформации 557
7.2.1. Стандарт JPEG . 557
7.2.2. Стандарт MPEG . 561
7.3. Сжатие аудиоинформации 563
7.4. Планирование процессов в мультимедийных системах . 567
7.4.1. Планирование однородных процессов . 567
7.4.2. Общие вопросы планирования работы
в режиме реального времени 568
7.4.3. Алгоритм планирования RMS . 570
7.4.4. Алгоритм планирования EDF . 572
7.5. Парадигмы мультимедийной файловой системы 574
7.5.1. Функции управления кассетным видеомагнитофоном 575
7.5.2. Виртуальный кинозал . 577
7.5.3. Виртуальный кинозал с функциональностью, присущей видеомагнитофону 579
7.6. Размещение файлов . 581
7.6.1. Размещение файла на одном диске 582
7.6.2. Две альтернативные стратегии файловой организации 583
7.6.3. Размещение файлов для виртуального кинотеатра 587
7.6.4. Размещение нескольких файлов на одном диске . 589
7.6.5. Размещение файлов на нескольких дисках 591
7.7. Кэширование . 594
7.7.1. Блочное кэширование 594
7.7.2. Кэширование файлов . 596
7.8. Планирование работы диска в интересах мультимедиа . 597
7.8.1. Статическое планирование работы диска 597
7.8.2. Динамическое планирование работы диска . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
7.9. Исследования в области мультимедиа 601
7.10. Краткие выводы . 601
Вопросы . 602
Глава 8. Многопроцессорные системы 607
8.1. Мультипроцессоры . 610
8.1.1. Мультипроцессорное аппаратное обеспечение 610
8.1.2. Типы мультипроцессорных операционных систем . 620
8.1.3. Синхронизация мультипроцессоров . 625
8.1.4. Планирование работы мультипроцессора 630
8.2. Мультикомпьютеры . 637
8.2.1. Аппаратное обеспечение мультикомпьютеров 638
8.2.2. Низкоуровневые коммуникационные программы . 642
8.2.3. Коммуникационные программы пользовательского уровня . 644
8.2.4. Вызов удаленной процедуры . 648
8.2.5. Распределенная совместно используемая память . 651
8.2.6. Планирование мультикомпьютеров . 657
8.2.7. Балансировка нагрузки 657
8.3. Виртуализация . 660
8.3.1. Требования, которые необходимо выполнить для осуществления
виртуализации 663
8.3.2. Гипервизоры первого типа 664
8.3.3. Гипервизоры второго типа 665
8.3.4. Паравиртуализация 667
8.3.5. Виртуализация памяти . 669
8.3.6. Виртуализация устройств ввода-вывода 671
8.3.7. Виртуальные приложения . 673
8.3.8. Виртуальные машины на многоядерных центральных процессорах . 674
8.3.9. Вопросы лицензирования . 674
8.4. Распределенные системы . 675
8.4.1. Сетевое оборудование 677
8.4.2. Сетевые службы и протоколы . 681
8.4.3. Связующее программное обеспечение на основе документа 685
8.4.4. Связующее программное обеспечение на основе файловой системы . 687
8.4.5. Связующее программное обеспечение, основанное на объектах . 692
8.4.6. Связующее программное обеспечение, основанное на взаимодействии 694
8.4.7. Grid-системы . 700
8.5. Исследования в области многопроцессорных систем . 700
8.6. Краткие выводы . 702
Вопросы . 703
Глава 9. Безопасность 709
9.1. Внешние условия, требующие принятия дополнительных мер безопасности . 711
9.1.1. Угрозы . 711
9.1.2. Злоумышленники 713
9.1.3. Случайная утрата данных . 714
9.2. Основы криптографии 715
9.2.1.Шифрование с секретным ключом . 716
9.2.2. Шифрование с открытым ключом 717
9.2.3. Односторонние функции 718
9.2.4. Цифровые подписи . 718
9.2.5. Криптографический процессор . 720
9.3. Механизмы защиты . 721
9.3.1. Домены защиты . 721
9.3.2. Списки управления доступом . 724
9.3.3. Перечни возможностей . 727
9.3.4. Надежные системы . 730
9.3.5. Высоконадежная вычислительная база 731
9.3.6. Формальные модели систем безопасности . 733
9.3.7. Многоуровневая защита 734
9.3.8. Тайные каналы . 737
9.4. Аутентификация . 742
9.4.1. Аутентификация с использованием паролей . 743
9.4.2. Аутентификация с использованием физического объекта 752
9.4.3. Аутентификация с использованием биометрических данных . 755
9.5. Инсайдерские атаки . 758
9.5.1. Логические бомбы 759
9.5.2. Лазейки . 759
9.5.3. Фальсификация входа в систему . 760
9.6. Использование дефектов программного кода . 762
9.6.1. Атаки, использующие переполнение буфера . 763
9.6.2. Атаки, использующие форматирующую строку . 765
9.6.3. Атаки, использующие возвращение управления в libc . 767
9.6.4. Атаки, использующие переполнение целочисленных значений . 769
9.6.5. Атаки, использующие внедрение программного кода . 770
9.6.6. Атаки, связанные с эскалацией привилегий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771
9.7. Вредоносные программы 771
9.7.1. Троянские кони 775
9.7.2. Вирусы 777
9.7.3. Черви . 788
9.7.4. Программы-шпионы . 790
9.7.5. Руткиты . 794
9.8. Средства защиты 800
9.8.1. Брандмауэры . 800
9.8.2. Антивирусные и анти-антивирусные технологии . 802
9.8.3. Электронная подпись двоичных программ . 810
9.8.4. Тюремное заключение . 811
9.8.5. Обнаружение проникновения на основе модели . 812
9.8.6. Инкапсулированный мобильный код . 814
9.8.7. Безопасность в системе Java 819
9.9. Исследования в области безопасности . 821
9.10. Краткие выводы . 822
Вопросы . 823
Глава 10. Изучение конкретных примеров: Linux 829
10.1. История UNIX и Linux . 830
10.1.1. UNICS 830
10.1.2. PDP-11 UNIX . 831
10.1.3. Переносимая система UNIX 832
10.1.4. Berkeley UNIX . 834
10.1.5. Стандартная система UNIX 834
10.1.6. MINIX . 836
10.1.7. Linux 837
10.2. Обзор системы Linux . 840
10.2.1. Задачи Linux . 840
10.2.2. Интерфейсы системы Linux . 841
10.2.3. Оболочка 843
10.2.4. Утилиты Linux . 846
10.2.5. Структура ядра 848
10.3. Процессы в системе Linux . 851
10.3.1. Фундаментальные концепции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 851
10.3.2. Системные вызовы управления процессами в Linux 854
10.3.3. Реализация процессов и потоков в Linux 858
10.3.4. Планирование в Linux . 865
10.3.5. Загрузка Linux 868
10.4. Управление памятью в Linux 871
10.4.1. Фундаментальные концепции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 872
10.4.2. Системные вызовы управления памятью в Linux . 875
10.4.3. Реализация управления памятью в Linux 876
10.4.4. Подкачка в Linux 883
10.5. Ввод-вывод в системе Linux 887
10.5.1. Фундаментальные концепции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887
10.5.2. Работа с сетью . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
10.5.3. Системные вызовы ввода-вывода в Linux . 890
10.5.4. Реализация ввода-вывода в системе Linux 891
10.5.5. Модули в Linux . 895
10.6. Файловая система UNIX . 896
10.6.1. Фундаментальные принципы 896
10.6.2. Вызовы файловой системы в Linux 901
10.6.3. Реализация файловой системы Linux 905
10.6.4. Файловая система NFS 914
10.7. Безопасность в Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921
10.7.1. Фундаментальные концепции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921
10.7.2. Системные вызовы безопасности в Linux . 923
10.7.3. Реализация безопасности в Linux 924
10.8. Резюме . 925
Вопросы . 926
Глава 11. Изучение конкретных примеров: Windows Vista 931
11.1. История Windows Vista 931
11.1.1. Восьмидесятые годы прошлого века:
MS-DOS . 932
11.1.2. Девяностые годы прошлого столетия: Windows на базе MS-DOS 933
11.1.3. Двухтысячный год: Windows на базе NT 933
11.1.4. Windows Vista . 937
11.2. Программирование в Windows Vista . 938
11.2.1. Собственный интерфейс прикладного программирования NT . 940
11.2.2. Интерфейс прикладного программирования Win32 . 944
11.2.3. Реестр Windows . 948
11.3. Структура системы . 951
11.3.1. Структура операционной системы . 951
11.3.2. Загрузка Windows Vista . 967
11.3.3. Реализация диспетчера объектов 968
11.3.4. Подсистемы, DLL и службы пользовательского режима 980
11.4. Процессы и потоки в Windows Vista 983
11.4.1. Фундаментальные концепции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983
11.4.2. Вызовы API для управления заданиями, процессами, потоками
и волокнами 988
11.4.3. Реализация процессов и потоков 994
11.5. Управление памятью 1002
11.5.1. Фундаментальные концепции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002
11.5.2. Системные вызовы управления памятью . 1007
11.5.3. Реализация управления памятью . 1008
11.6. Кэширование в Windows Vista 1018
11.7. Ввод-вывод в Windows Vista . 1021
11.7.1. Фундаментальные концепции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021
11.7.2. Вызовы интерфейса прикладного программирования ввода-вывода 1023
11.7.3. Реализация ввода-вывода 1026
11.8. Файловая система Windows NT . 1031
11.8.1. Фундаментальные концепции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1032
11.8.2. Реализация файловой системы NTFS . 1033
11.9. Безопасность в Windows Vista . 1044
11.9.1. Фундаментальные концепции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1045
11.9.2. Вызовы интерфейса прикладного программирования безопасности . 1047
11.9.3. Реализация безопасности . 1048
11.10. Резюме . 1051
Вопросы . 1052
Глава 12. Разработка операционных систем . 1055
12.1. Природа проблемы проектирования . 1055
12.1.1. Цели 1056
12.1.2. Почему так сложно спроектировать операционную систему? 1057
12.2. Разработка интерфейса . 1059
12.2.1. Руководящие принципы . 1059
12.2.2. Парадигмы . 1061
12.2.3. Интерфейс системных вызовов . 1065
12.3. Реализация . 1068
12.3.1. Структура системы . 1068
12.3.2. Механизм и политика . 1072
12.3.3. Ортогональность . 1073
12.3.4. Именование . 1074
12.3.5. Время связывания 1076
12.3.6. Статические и динамические структуры . 1077
12.3.7. Реализация системы сверху вниз и снизу вверх . 1079
12.3.8. Полезные методы . 1080
12.4. Производительность 1085
12.4.1. Почему операционные системы такие медленные? 1086
12.4.2. Что следует оптимизировать? 1087
12.4.3. Выбор между оптимизацией по скорости и по занимаемой памяти 1088
12.4.4. Кэширование . 1090
12.4.5. Подсказки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1092
12.4.6. Использование локальности . 1092
12.4.7. Оптимизируйте общий случай 1093
12.5. Управление проектом . 1093
12.5.1. Мифический человеко-месяц . 1094
12.5.2. Структура команды . 1095
12.5.3. Роль опыта . 1097
12.5.4. Панацеи нет . 1098
12.6. Тенденции в проектировании операционных систем . 1099
12.6.1. Виртуализация 1099
12.6.2. Многоядерные процессоры 1099
12.6.3. Операционные системы с большим адресным пространством 1100
12.6.4. Сеть . 1101
12.6.5. Параллельные и распределенные системы . 1101
12.6.6. Мультимедиа . 1102
12.6.7. Компьютеры на аккумуляторах . 1102
12.6.8. Встроенные системы . 1103
12.7. Сенсорные сети 1104
12.8. Резюме . 1104
Вопросы . 1105
Глава 13. Библиография 1108
13.1. Дополнительная литература . 1108
13.1.1. Введение и общие труды . 1108
13.1.2. Процессы и потоки . 1109
13.1.3. Управление памятью 1109
13.1.4. Ввод-вывод 1109
13.1.5. Файловые системы . 1110
13.1.6. Взаимоблокировка . 1110
13.1.7. Мультимедийные операционные системы . 1110
13.1.8. Многопроцессорные системы 1111
13.1.9. Безопасность . 1112
13.1.10. Linux 1113
13.1.11. Windows Vista . 1114
13.1.12. Принципы проектирования . 1114
Алфавитный список литературы . 1115