Файл: Debian Таненбаум Бос.pdf

ВУЗ: Не указан

Категория: Книга

Дисциплина: Операционные системы

Добавлен: 29.10.2018

Просмотров: 45398

Скачиваний: 168

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Оглавление  

11

6.6. Предотвращение взаимоблокировки  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  510

6.6.1. Атака условия взаимного исключения  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  510
6.6.2. Атака условия удержания и ожидания  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  511
6.6.3. Атака условия невыгружаемости   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  512
6.6.4. Атака условия циклического ожидания  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  512

6.7. Другие вопросы   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  513

6.7.1. Двухфазное блокирование   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  513
6.7.2. Взаимные блокировки при обмене данными  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  514
6.7.3. Активная взаимоблокировка  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  516
6.7.4. Зависание   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  518

6.8. Исследования в области взаимоблокировок   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  518

6.9. Краткие выводы   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  519

Вопросы   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  520

Глава 7. Виртуализация и облако    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  527

7.1. История   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  529

7.2. Требования, применяемые к виртуализации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  530

7.3. Гипервизоры первого и второго типа  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  533

7.4. Технологии эффективной виртуализации   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  535

7.4.1. Виртуализация оборудования, не готового к виртуализации   . . . . . . . . . . . . . . . .  536
7.4.2. Цена виртуализации  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  539

7.5. Являются ли гипервизоры настоящими микроядрами?   . . . . . . . . . . . . . . . . . . . . . . . . . .  540

7.6. Виртуализация памяти   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  543

7.6.1. Аппаратная поддержка вложенных таблиц страниц   . . . . . . . . . . . . . . . . . . . . . . . .  545
7.6.2. Возвращение памяти   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  546

7.7. Виртуализация ввода-вывода   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  547

7.7.1. Блоки управления памятью при вводе-выводе   . . . . . . . . . . . . . . . . . . . . . . . . . . . .  548
7.7.2. Домены устройств   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  549
7.7.3. Виртуализация ввода-вывода в отдельно взятом физическом устройстве   . . . .  550

7.8. Виртуальные устройства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  551

7.9. Виртуальные машины на мультиядерных центральных процессорах  . . . . . . . . . . . . . . .  551

7.10. Вопросы лицензирования   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  552

7.11. Облака   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  553

7.11.1. Облака в качестве услуги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  554

7.11.2. Миграция виртуальных машин   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  554

7.11.3. Установка контрольных точек   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  555

7.12. Изучение конкретных примеров: VMWARE   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  556

7.12.1. Ранняя история VMware  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  556

7.12.2. VMware Workstation  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  558

7.12.3. Сложности внедрения виртуализации в архитектуру x86   . . . . . . . . . . . . . . . . . .  559

7.12.4. VMware Workstation: обзор решения   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  560

7.12.5. Развитие VMware Workstation   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  570

7.12.6. ESX-сервер: гипервизор первого типа компании VMware  . . . . . . . . . . . . . . . . . .  571

7.13. Исследования в области виртуализации и облаков  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  573

Вопросы   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  573

Глава 8. Многопроцессорные системы  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  576

8.1. Мультипроцессоры   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  579

8.1.1. Мультипроцессорное аппаратное обеспечение   . . . . . . . . . . . . . . . . . . . . . . . . . . .  579

8.1.2. Типы мультипроцессорных операционных систем   . . . . . . . . . . . . . . . . . . . . . . . . .  591


background image

12  

 Оглавление

8.1.3. Синхронизация мультипроцессоров   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  595

8.1.4. Планирование работы мультипроцессора   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  600

8.2. Мультикомпьютеры   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  607

8.2.1. Аппаратное обеспечение мультикомпьютеров   . . . . . . . . . . . . . . . . . . . . . . . . . . . .  608

8.2.2. Низкоуровневые коммуникационные программы  . . . . . . . . . . . . . . . . . . . . . . . . . .  612

8.2.3. Коммуникационные программы пользовательского уровня   . . . . . . . . . . . . . . . . .  615

8.2.4. Вызов удаленной процедуры   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  619

8.2.5. Распределенная совместно используемая память  . . . . . . . . . . . . . . . . . . . . . . . . .  621

8.2.6. Планирование мультикомпьютеров  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  626

8.2.7. Балансировка нагрузки   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  627

8.4. Распределенные системы   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  630

8.4.1. Сетевое оборудование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  633

8.4.2. Сетевые службы и протоколы  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  636

8.4.3. Связующее программное обеспечение на основе документа   . . . . . . . . . . . . . . .  640

8.4.4. Связующее программное обеспечение на основе файловой системы  . . . . . . . .  641

8.4.5. Связующее программное обеспечение, основанное на объектах   . . . . . . . . . . . .  646

8.4.6. Связующее программное обеспечение, основанное на взаимодействии   . . . . .  648

8.5. Исследования в области многопроцессорных систем   . . . . . . . . . . . . . . . . . . . . . . . . . . .  651

8.6. Краткие выводы   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  652

Вопросы   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  653

Глава 9. Безопасность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  659

9.1. Внешние условия, требующие принятия дополнительных мер безопасности   . . . . . . .  661

9.1.1. Угрозы  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  662

9.1.2. Злоумышленники   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  665

9.2. Безопасность операционных систем   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  665

9.2.1. Можно ли создать защищенные системы?  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  666
9.2.2. Высоконадежная вычислительная база   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  667

9.3. Управление доступом к ресурсам  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  669

9.3.1. Домены защиты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  669

9.3.2. Списки управления доступом  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  671

9.3.3. Перечни возможностей   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  674

9.4. Формальные модели систем безопасности   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  677

9.4.1. Многоуровневая защита   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  679

9.4.2. Тайные каналы  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  682

9.5. Основы криптографии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  686

9.5.1.Шифрование с секретным ключом   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  687

9.5.2. Шифрование с открытым ключом   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  688

9.5.3. Односторонние функции   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  689

9.5.4. Цифровые подписи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  689

9.5.5. Криптографические процессоры  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  691

9.6. Аутентификация   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  693

9.6.1. Слабые пароли   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  695

9.6.2. Парольная защита в UNIX   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  697

9.6.3. Одноразовые пароли   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  698

9.6.4. Схема аутентификации «оклик — отзыв»   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  700

9.6.5. Аутентификация с использованием физического объекта   . . . . . . . . . . . . . . . . . .  700

9.6.6. Аутентификация с использованием биометрических данных  . . . . . . . . . . . . . . . .  703


background image

Оглавление     

13

9.7. Взлом программного обеспечения  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  706

9.7.1. Атаки, использующие переполнение буфера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  708

9.7.2. Атаки, использующие форматирующую строку  . . . . . . . . . . . . . . . . . . . . . . . . . . . .  717

9.7.3. Указатели на несуществующие объекты  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  720

9.7.4. Атаки, использующие разыменование нулевого указателя  . . . . . . . . . . . . . . . . . .  721

9.7.5. Атаки, использующие переполнение целочисленных значений  . . . . . . . . . . . . . .  722

9.7.6. Атаки, использующие внедрение команд  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  723

9.7.7 Атаки, проводимые с момента проверки до момента использования   . . . . . . . . .  724

9.8. Инсайдерские атаки   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  725

9.8.1. Логические бомбы   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  725

9.8.2. Лазейки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  726

9.8.3. Фальсификация входа в систему   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  727

9.9. Вредоносные программы  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  728

9.9.1. Троянские кони   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  731

9.9.2. Вирусы   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  733

9.9.3. Черви . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  743

9.9.4. Программы-шпионы  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  745

9.9.5. Руткиты  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  749

9.10. Средства защиты  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  754

9.10.1. Брандмауэры  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  754

9.10.2. Антивирусные и антиантивирусные технологии   . . . . . . . . . . . . . . . . . . . . . . . . . .  756

9.10.3. Электронная подпись двоичных программ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  763

9.10.4. Тюремное заключение   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  764

9.10.5. Обнаружение проникновения на основе модели . . . . . . . . . . . . . . . . . . . . . . . . . .  765

9.10.6. Инкапсулированный мобильный код  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  767

9.10.7. Безопасность в системе Java   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  771

9.11. Исследования в области безопасности  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  773

9.12. Краткие выводы   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  775

Вопросы   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  776

Глава 10. Изучение конкретных примеров: Unix, Linux и Android   . . . . . . . . . . . . . . . . . .  784

10.1. История UNIX и Linux   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  785

10.1.1. UNICS   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  785
10.1.2. PDP-11 UNIX  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  786
10.1.3. Переносимая система UNIX   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  787
10.1.4. Berkeley UNIX  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  788
10.1.5. Стандартная система UNIX   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  789
10.1.6. MINIX  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  790
10.1.7. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  791

10.2. Обзор системы Linux  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  794

10.2.1. Задачи Linux  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  794
10.2.2. Интерфейсы системы Linux  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  795
10.2.3. Оболочка   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  797
10.2.4. Утилиты Linux  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  800
10.2.5. Структура ядра   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  802

10.3. Процессы в системе Linux   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  804

10.3.1. Фундаментальные концепции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  805
10.3.2. Системные вызовы управления процессами в Linux . . . . . . . . . . . . . . . . . . . . . . .  807
10.3.3. Реализация процессов и потоков в Linux   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  811
10.3.4. Планирование в Linux  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  818
10.3.5. Загрузка Linux   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  823


background image

14  

 Оглавление

10.4. Управление памятью в Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  826

10.4.1. Фундаментальные концепции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  826
10.4.2. Системные вызовы управления памятью в Linux  . . . . . . . . . . . . . . . . . . . . . . . . . .  829
10.4.3. Реализация управления памятью в Linux   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  830
10.4.4. Подкачка в Linux   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  837

10.5. Ввод-вывод в системе Linux  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  840

10.5.1. Фундаментальные концепции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  840
10.5.2. Работа с сетью . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  841
10.5.3. Системные вызовы ввода-вывода в Linux  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  843
10.5.4. Реализация ввода-вывода в системе Linux   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  844
10.5.5. Модули в Linux  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  847

10.6. Файловая система UNIX   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  848

10.6.1. Фундаментальные принципы   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  848
10.6.2. Вызовы файловой системы в Linux   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  853
10.6.3. Реализация файловой системы Linux   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  857
10.6.4. Файловая система NFS   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  866

10.7. Безопасность в Linux  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  872

10.7.1. Фундаментальные концепции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  872
10.7.2. Системные вызовы безопасности в Linux  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  875
10.7.3. Реализация безопасности в Linux   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  875

10.8. Android   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  876

10.8.1. Android и Google   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  877
10.8.2. История Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  878
10.8.3. Цели разработки  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  881
10.8.4. Архитектура Android   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  883
10.8.5. Расширения Linux   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  885
10.8.6. Dalvik  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  888
10.8.7. Binder IPC   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  890
10.8.8. Приложения Android  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  898
10.8.9. Намерения  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  909
10.8.10. Песочницы приложений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  911
10.8.11. Безопасность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  912
10.8.12. Модель процесса   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  918

10.9. Краткие выводы   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  923

Вопросы   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  924

Глава 11. Изучение конкретных примеров: Windows 8    . . . . . . . . . . . . . . . . . . . . . . . . . .  931

11.1. История Windows вплоть до Windows 8.1  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  931

11.1.1. 80-е годы прошлого века: MS-DOS   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  932
11.1.2. 90-е годы прошлого столетия: Windows на базе MS-DOS   . . . . . . . . . . . . . . . . . .  933
11.1.3. 2000 год: Windows на базе NT  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  933
11.1.4. Windows Vista  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  936
11.1.5 2010-е годы: Современная Windows  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  937

11.2. Программирование в Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  938

11.2.1. Собственный интерфейс прикладного программирования NT . . . . . . . . . . . . . .  942
11.2.2. Интерфейс прикладного программирования Win32  . . . . . . . . . . . . . . . . . . . . . . .  946
11.2.3. Реестр Windows  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  950

11.3. Структура системы   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  952

11.3.1. Структура операционной системы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  952
11.3.2. Загрузка Windows   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  968
11.3.3. Реализация диспетчера объектов   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  970
11.3.4. Подсистемы, DLL и службы пользовательского режима   . . . . . . . . . . . . . . . . . . .  980


background image

Оглавление     

15

11.4. Процессы и потоки в Windows   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  983

11.4.1. Фундаментальные концепции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  983
11.4.2. Вызовы API для управления заданиями, процессами, 

потоками и волокнами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  990

11.4.3. Реализация процессов и потоков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  996

11.5. Управление памятью  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1003

11.5.1. Фундаментальные концепции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1004
11.5.2. Системные вызовы управления памятью   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1008
11.5.3. Реализация управления памятью . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1009

11.6. Кэширование в Windows  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1019

11.7. Ввод-вывод в Windows   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1020

11.7.1. Фундаментальные концепции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1020
11.7.2. Вызовы интерфейса прикладного программирования ввода-вывода . . . . . . .  1022
11.7.3. Реализация ввода-вывода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1024

11.8. Файловая система Windows NT   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1029

11.8.1. Фундаментальные концепции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1029
11.8.2. Реализация файловой системы NTFS   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1030

11.9. Управление электропитанием в Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1040

11.10. Безопасность в Windows 8   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1042

11.10.1. Фундаментальные концепции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1044
11.10.2. Вызовы интерфейса прикладного программирования безопасности . . . . . .  1046
11.10.3. Реализация безопасности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1046
11.10.4. Облегчение условий безопасности  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1049

11.11. Краткие выводы   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1052

Вопросы   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1053

Глава 12. Разработка операционных систем   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1058

12.1. Природа проблемы проектирования   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1058

12.1.1. Цели   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1058
12.1.2. Почему так сложно спроектировать операционную систему?   . . . . . . . . . . . . .  1060

12.2. Разработка интерфейса   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1062

12.2.1. Руководящие принципы  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1062
12.2.2. Парадигмы  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1064
12.2.3. Интерфейс системных вызовов   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1068

12.3. Реализация   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1071

12.3.1. Структура системы  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1071
12.3.2. Механизм и политика  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1075
12.3.3. Ортогональность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1076
12.3.4. Именование  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1077
12.3.5. Время связывания   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1079
12.3.6. Статические и динамические структуры  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1080
12.3.7. Реализация системы сверху вниз и снизу вверх   . . . . . . . . . . . . . . . . . . . . . . . . .  1081
12.3.8 Сравнение синхронного и асинхронного обмена данными   . . . . . . . . . . . . . . . .  1082
12.3.9. Полезные методы   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1083

12.4. Производительность  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1089

12.4.1. Почему операционные системы такие медленные?   . . . . . . . . . . . . . . . . . . . . . .  1089
12.4.2. Что следует оптимизировать?   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1090
12.4.3. Выбор между оптимизацией по скорости и по занимаемой памяти   . . . . . . . .  1091
12.4.4. Кэширование  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1094
12.4.5. Подсказки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1095
12.4.6. Использование локальности  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1095
12.4.7. Оптимизируйте общий случай   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1096