Предисловие | 23 |
Структура книги | 24 |
Рекомендации по изучению материала | 28 |
Благодарности | 31 |
|
Глава 1. Требования к системе | 32 |
|
1.1. Введение | 32 |
1.2. Системы, параллельные по своей природе | 34 |
1.2.1. Системы реального времени и встроенные системы | 34 |
1.2.2. Операционные системы | 38 |
1.2.3. Оконные интерфейсы | 42 |
1.2.4. СУБД и системы обработки транзакций | 42 |
1.2.5. Промежуточное программное обеспечение | 44 |
1.2.6. Веб | 45 |
1.3. Потенциально параллельные системы | 45 |
1.3.1. Подходы к разработке параллельных алгоритмов | 46 |
1.3.2. Доступ к общим данным и синхронизация параллельных задач | 47 |
1.3.3. Области применения параллельных алгоритмов | 47 |
1.3.4. Требования к системам, поддерживающим параллельные приложения | 48 |
1.4. Архитектура аппаратных средств | 48 |
1.5. Параллельные системы: подведение итогов | 51 |
1.6. Общие требования к параллельным системам | 53 |
Контрольные вопросы | 54 |
|
Часть I. Структура и принципы работы |
программных систем | 55 |
|
Глава 2. Структура системы и ее динамические компоненты | 57 |
|
2.1. Концептуальное представление структуры системы | 58 |
2.1.1. Понятие абстрактного типа данных | 58 |
2.1.2. Интерфейс абстрактного типа данных | 60 |
2.1.3. Состояние экземпляра абстрактного типа данных | 60 |
2.2. Структура системы с точки зрения реализации | 61 |
2.2.1. Объектно-ориентированное программирование | 62 |
2.2.2. Интерфейс объекта | 62 |
2.2.3. Реализация объекта | 63 |
2.2.4. Взаимодействие объектов | 65 |
2.2.5. Жизненный цикл объекта | 67 |
2.2.6. Специализация и обобщение | 69 |
2.2.7. Составные объекты | 70 |
2.2.8. Взаимодействие объектов | 70 |
2.3. Концепция процесса | 72 |
2.3.1. Аналогии процесса | 72 |
2.3.2. Многопоточные процессы | 75 |
2.4. функции операционной системы | 76 |
2.5. Вызовы операционной системы и её защита | 78 |
2.6. Структура операционной системы | 80 |
2.6.1. Многослойная структура | 80 |
2.6.2. Микроядро | 81 |
2.7. Операционные системы с поддержкой объектов и объектной структурой | 85 |
2.7.1. Именование объектов | 85 |
2.7.2. Защита, вызов и совместное использование объектов | 86 |
2.7.3. Унифицированные механизмы управления объектами | 87 |
2.8. Распределённые системы и промежуточные платформы | 88 |
2.9. Защита систем | 89 |
2.9.1. Объектная модель системы контроля доступа | 90 |
2.10. Резюме | 91 |
Контрольные вопросы | 91 |
|
Глава 3. Взаимодействие с аппаратным обеспечением | 94 |
|
3.1. Введение | 94 |
3.2. Интерфейс устройств | 95 |
3.2.1. Быстродействие процессора и устройств | 97 |
3.2.2. Компьютеры CISC и RISC | 99 |
3.2.3. Простейший интерфейс устройства | 99 |
3.2.4. Опрос и прерывания | 100 |
3.2.5. Обработка прерываний и их приоритеты | 102 |
3.2.6. Векторы прерываний | 102 |
3.2.7. RISC-подход к обработке прерываний | 103 |
3.2.8. Устройства с прямым доступом к памяти | 105 |
3.2.9. Ввод-вывод с отображением в память | 107 |
3.2.10. Таймеры | 107 |
3.3. Исключения | 108 |
3.3.1. Исключения, вызванные выполнением программы | 108 |
3.3.2. Системный и пользовательский режимы | 110 |
3.3.3. Механизм системного вызова | 110 |
3.3.4. Использование механизма исключения | 111 |
3.3.5. Обработка исключений пользовательского уровня | 112 |
3.4. Мультипроцессоры | 113 |
3.5. Ввод-вывод на прикладном уровне | 115 |
3.5.1. Буферы и синхронизация | 116 |
3.5.2. Синхронный и асинхронный ввод-вывод | 117 |
3.6. Управление сетевым взаимодействием | 118 |
3.7. Коммуникационные сети, интерфейсы и драйверы | 119 |
3.7.1. Сеть Ethernet | 121 |
3.7.2. Локальные сети кольцевой топологии | 122 |
3.7.3. Примеры сетевых интерфейсов | 122 |
3.8. Коммуникационное программное обеспечение | 123 |
3.8.1. Эталонная модель взаимодействия открытых систем | 124 |
3.8.2. Взаимодействие с установкой соединения и без таковой | 127 |
3.9. Прикладные и системные коммуникационные протоколы | 128 |
3.10. Резюме | 130 |
Контрольные вопросы | 131 |
|
Глава 4. Поддержка процессов | 133 |
|
4.1. Использование процессов в системе | 133 |
4.2. Процессы и процессоры | 135 |
4.3. Состояние процесса | 137 |
4.3.1. Сохранение состояния процесса | 137 |
4.3.2. Переключение контекста | 138 |
4.4. Синхронизация с аппаратным обеспечением | 139 |
4.4.1. Условия гонок | 1^0 |
4.4.2. Объекты событий и процессов | 141 |
4.5. Структуры данных, используемые при управлении процессами | 142 |
4.6. Стратегия планирования процессов | 143 |
4.6.1. Унарное, бинарное и общее планирование | 143 |
4.6.2. Поведение процесса и его приоритет | 144 |
4.7. Планирование процессов для мультипроцессоров с общей памятью | 146 |
4.8. Планирование процессов в реальном времени | 148 |
4.8.1. Структура системы и отклик на события | 151 |
4.9. Абстракция и реализация процесса | 152 |
4.10. Процессы в структуре операционной системы | 154 |
4.11. Реализация многопоточных процессов | 155 |
4.12. Реализация процессов в языковых и операционных системах | 157 |
4.13. Состояние процесса в языковых и операционных системах | 158 |
4.13.1. Записи активации в стеке времени выполнения | 160 |
4.13.2. Куча и сборка мусора | 161 |
4.14. Последовательные программы с системными вызовами | 162 |
4.15. Эволюция параллельности в языках программирования | 163 |
4.15.1. Примеры параллельных систем | 163 |
4.15.2. Параллельность, обеспечиваемая средствами последовательного языка | 165 |
4.15.3. Сопрограммы | 167 |
4.15.4. Процессы | 171 |
4.15.5. Поддержка процессов: подведение итогов | 174 |
4.16. Реализация процессов в языковых системах | 176 |
4.16.1. Определение, создание и завершение процессов | 176 |
4.16.2. Управление дочерними процессами | 178 |
4.16.3. Обработка исключений в языках программирования | 179 |
4.16.4. Выделение памяти для процессов уровня языка программирования | 179 |
4.17. Архитектуры управления потоками | 179 |
4.18. Потоки и исключения в языке Java | 184 |
4.19. Резюме | 186 |
Контрольные вопросы | 188 |
|
Глава 5. Управление памятью | 192 |
|
5.1. Введение | 192 |
5.2. Иерархия памяти | 193 |
5.3. Адресное пространство процесса | 195 |
5.3.1. Понятие преобразования адресов | 195 |
5.3.2. Статическое преобразование адресов | 196 |
5.3.3. Динамическое преобразование адресов | 197 |
5.3.4. Аппаратно-управляемая настройка адресов и защита | 198 |
5.4. Сегментация виртуальной памяти | 199 |
5.4.1. Структура виртуального адреса | 201 |
5.4.2. Преобразование адресов | 202 |
5.4.3. Сегментация виртуальной памяти: подведение итогов | 203 |
5.5. Страничная виртуальная память | 203 |
5.5.1. Особенности преобразования адресов | 204 |
5.5.2. Копирование при записи | 206 |
5.5.3. Страничная виртуальная память: подведение итогов | 207 |
5.6. Сегментация и страничная организация памяти | 208 |
5.6.1. Аппаратная поддержка сегментов и страниц | 209 |
5.6.2. Программная поддержка сегментов, аппаратная поддержка страниц | 209 |
5.7. Структуры данных операционной системы | 210 |
5.7.1. Многоуровневые таблицы страниц | 211 |
5.7.2. Ограждённые таблицы страниц | 212 |
5.7.3. Инвертированные таблицы страниц | 213 |
5.7.4. Страницы в основной памяти | 213 |
5.7.5. Страницы во внешней памяти | 214 |
5.7.6. Замещение страниц | 215 |
5.8. Пример диспетчера памяти | 216 |
5.9. Управление памятью и архитектура системы | 219 |
5.10. Резюме | 221 |
Контрольные вопросы | 221 |
|
Глава 6. Управление файлами | 224 |
|
6.1. Введение | 224 |
6.2. Обзор функций файловой системы | 224 |
6.3. Структура файла и каталога | 227 |
6.3.1. Путевые имена и рабочие каталоги | 228 |
6.3.2. Совместное использование объектов, права доступа и ссылки | 228 |
6.3.3. Управление существованием объектов | 230 |
6.4. Интерфейс файловой системы | 230 |
6.4.1. Сервис каталога как менеджер типа | 232 |
6.4.2. Интерфейс сервиса каталога | 233 |
6.4.3. Интерфейс файлового сервиса | 233 |
6.5. Реализация файловой системы | 233 |
6.5.1. Жёсткие и символические ссылки | 236 |
6.5.2. Хранение файлов на диске | 238 |
6.5.3. Хранение мультимедийных данных новых типов | 241 |
6.6. Архитектура современных файловых систем | 242 |
6.6.1. Управление логическими томами | 242 |
6.6.2. Чередование и зазеркаливание | 243 |
6.6.3. Журнальные файловые системы и протоколирование | 245 |
6.7. Сетевые файл-серверы | 246 |
6.7.1. Открытые и закрытые архитектуры хранения | 247 |
6.7.2. Интерфейс сервиса хранения | 248 |
6.7.3. Размещение функций | 249 |
6.7.4. Серверы, не сохраняющие состояние | 251 |
6.7.5. Системы с преобладающей записью | 254 |
6.7.6. Идентификаторы файлов и защита на уровне сервиса хранения | 254 |
6.8. Интеграция виртуальной и постоянной памяти | 256 |
6.8.1. Отображение файлов | 256 |
6.8.2. Отображение объектов | 258 |
6.9. Резюме | 259 |
Контрольные вопросы | 260 |
|
Глава 7. Распределённые системы | 262 |
|
7.1. Введение | 262 |
7.2. Эволюция распределённых систем | 263 |
7.3. Персональные системы | 265 |
7.4. Модель, архитектура и конструкторские решения | 266 |
7.5. Характеристики распределённых систем | 266 |
7.6. Время в распределённых системах | 267 |
7.6.1. Физическое земное время | 267 |
7.6.2. Время и распределённые процессы | 268 |
7.6.3. Логическое время и порядок событий | 269 |
7.6.4. Алгоритмы синхронизации часов | 270 |
7.7. Именование | 272 |
7.7.1. Создание уникальных имён | 272 |
7.7.2. Простые и составные имена | 273 |
7.7.3. Служба доменных имён Интернета | 274 |
7.7.4. Службы имён и связывание | 275 |
7.7.5. Атрибуты объектов, возвращаемые службами имён | 276 |
7.8. Мобильные пользователи, компьютеры и объекты | 277 |
7.8.1. Мобильные компьютеры | 277 |
7.8.2. Мобильные пользователи | 278 |
7.9. Резюме | 278 |
Контрольные вопросы | 279 |
|
Глава 8. Защита | 280 |
|
8.1. Сценарии и требования защиты | 280 |
8.1.1. Взаимодействие между клиентом и сервером | 280 |
8.1.2. Импорт исходного и объектного кода | 281 |
8.1.3. Удаленное соединение с компьютером | 282 |
8.2. Анализ рисков | 282 |
8.3. Виды шифрования | 284 |
8.3.1. Шифрование с секретным ключом | 285 |
8.3.2. Шифрование с открытым ключом | 285 |
8.3.3. Необратимые функции | 286 |
8.4. Алгоритмы | 287 |
8.4.1. Подстановочные шифры | 287 |
8.4.2. Перестановочные шифры | 289 |
8.4.3. Роторные машины | 289 |
8.4.4. Шифрование с помощью компьютера | 289 |
8.5. Протоколы | 291 |
8.5.1. Защищённое взаимодействие | 292 |
8.5.2. Сеансовые ключи в гибридных протоколах | 294 |
8.5.3. Аутентификация | 294 |
8.5.4. Атаки с воспроизведением и одноразовые метки | 297 |
8.6. Примеры применения рассмотренных алгоритмов | 297 |
8.6.1. Сертификация Х.509 | 298 |
8.6.2. Инфраструктура сертификации SPKI | 298 |
8.6.3. Аутентификация и обмен ключами | 299 |
8.6.4. Программа Pretty Good Privacy | 301 |
8.6.5. Протокол Secure Sockets Layer | 302 |
8.7. Резюме | 302 |
Контрольные вопросы | 303 |
|
Часть II. Управление взаимодействием |
между процессами | 305 |
|
Глава 9. Взаимодействие процессов | 308 |
|
9.1. Системы с единым адресным пространством процессов | 308 |
9.1.1. Размещение процессов, выполняющих подсистемы | 310 |
9.2. Процессы с раздельными адресными пространствами | 311 |
9.3. Выполнение процессами кода операционной системы | 313 |
9.4. Варианты размещения процессов | 315 |
9.5. Необходимость взаимодействия процессов | 316 |
9.6. Типы взаимодействия процессов | 318 |
9.7. Особенности взаимодействия процессов | 320 |
9.7.1. Совместное использование данных в памяти | 320 |
9.7.2. Отсутствие общих данных в памяти | 322 |
9.7.3. Уровень структуризации параллельности | 323 |
9.8. Определение одного действия процесса | 324 |
Контрольные вопросы | 325 |
|
Глава 10. Реализация низкоуровневой синхронизации | 328 |
|
10.1. Синхронизация процессов и механизм «ждать-сигнализировать» | 329 |
10.2. Взаимное исключение | 330 |
10.3. Аппаратная поддержка взаимного исключения | 333 |
10.4. Семафоры | 337 |
10.5. Способы использования семафоров | 338 |
10.5.1. Взаимное исключение | 338 |
10.5.2. Условная синхронизация | 340 |
10.5.3. Использование более одного экземпляра ресурса | 341 |
10.6. Реализация операций семафора | 342 |
10.6.1. Параллельная реализация семафоров | 343 |
10.6.2. Планирование очереди semWait(), инверсия приоритетов |
и наследование | 344 |
10.6.3. Реализация семафоров на пользовательском уровне | 346 |
10.7. Резюме | 347 |
Контрольные вопросы | 348 |
|
Глава 11. Алгоритмы низкоуровневой синхронизации | 351 |
|
11.1. Введение | 351 |
11.2. Семафоры как базовый механизм синхронизации | 352 |
11.3. Проблема «производитель-потребитель» | 354 |
11.3.1. Обмен данными через буфер | 354 |
11.3.2. Определение циклического буфера | 355 |
11.3.3. Один производитель, один потребитель | 356 |
11.3.4. Много производителей, много потребителей | 358 |
11.4. Надёжность программ и их жизнеспособность | 359 |
11.5. Проблема «писатель и читатели» | 360 |
11.6. Ограничения, налагаемые на использование семафоров | 365 |
11.7. Счётчики событий и секвенсоры | 366 |
11.7.1. Применение счётчиков событий | 367 |
11.7.2. Применение секвенсоров | 367 |
11.7.3. Решение задачи «производитель-потребитель» | 368 |
11.7.4. Реализация счётчиков событий и секвенсоров | 369 |
11.7.5. Достоинства и недостатки счетчиков событий и секвенсоров | 370 |
11.8. Потоки POSIX | 371 |
11.8.1. Объекты, дескрипторы и атрибуты | 371 |
11.8.2. Синхронизация | 371 |
11.8.3. Операции пакета pthread | 374 |
11.9. Резюме | 376 |
11.10. Учебный пример: управление дисковым кэшем | 377 |
11.10.1. Чтение и запись дисковых данных | 377 |
11.10.2. Выделенные и свободные буферы | 378 |
11.10.3. Структура буфера | 379 |
11.10.4. Алгоритмы для доступа к буферу | 380 |
Вопросы и упражнения к учебному примеру | 382 |
Контрольные вопросы | 383 |
|
Глава 12. Взаимодействие между процессами с общей памятью | 387 |
|
12.1. Критические секции в языках программирования | 387 |
12.2. Мониторы | 390 |
12.2.1. Средства синхронизации в языке Java | 393 |
12.2.2. Критические секции в языке Java | 395 |
12.2.3. Условная синхронизация в языке Java | 396 |
12.2.4. Реализация мониторов в языке Java | 397 |
12.2.5. Дополнительные вопросы, связанные с мониторами | 401 |
12.2.6. Единый класс для доступа к ресурсам | 402 |
12.2.7. Менеджер циклического буфера | 403 |
12.2.8. Решение проблемы читателей и писателей | 405 |
12.2.9. Практика применения мониторов | 406 |
12.3. Синхронизация на уровне целых операций | 408 |
12.3.1. Формулы маршрута | 408 |
12.3.2. Активные объекты | 410 |
12.4. Резюме | 414 |
Контрольные вопросы | 415 |
|
Глава 13. Взаимодействие между процессами и структура системы | 420 |
|
13.1. Виды взаимодействия между процессами | 420 |
13.2. Структура системы и IPC с общей памятью | 422 |
13.3. Структура системы и IPC без общей памяти | 423 |
13.4. Область применения метода взаимодействия через общую память | 424 |
13.5. Системы с обязательным разделением процессов | 425 |
13.6. Взаимодействие процессов в операционной системе UNIX | 425 |
13.7. Обзор механизмов взаимодействия между процессами | 427 |
13.8. Функциональная эквивалентность двух типов системной архитектуры | 429 |
13.9. Именование в параллельных и распределённых системах | 431 |
13.10. Резюме | 432 |
Контрольные вопросы | 432 |
|
Глава 14. Взаимодействие между процессами без общей памяти | 434 |
|
14.1. Введение | 434 |
14.2. Файлы для общих данных | 435 |
14.3. Каналы UNIX | 437 |
14.3.1 Конвейеризация команд | 438 |
14.3.2. Недостатки каналов | 438 |
14.4. Передача сообщений | 439 |
14.5. Разновидности передачи сообщений | 441 |
14.5.1. Сообщение от произвольного отправителя | 442 |
14.5.2. Примитивы запроса и ответа | 442 |
14.5.3. Несколько портов на процесс | 443 |
14.5.4. Входные и выходные порты | 444 |
14.5.5. Глобальные порты | 446 |
14.5.6. Широковещание и мультивещание | 447 |
14.5.7. Перенаправление сообщений | 448 |
14.5.8. Время ожидания | 448 |
14.5.9. Удаление устаревших сообщений | 448 |
14.6. Реализация асинхронной передачи сообщений | 449 |
14.7. Применение синхронной передачи сообщений | 451 |
14.8. Поддержка передачи сообщений языками программирования | 453 |
14.8.1. Каналы occam для синхронного взаимодействия | 453 |
14.8.2. Абстракции языка Linda | 454 |
14.9. Многопоточные клиентские и серверные процессы | 456 |
14.10. Резюме | 457 |
Контрольные вопросы | 458 |
|
Глава 15. Отказоустойчивость и постоянные данные | 460 |
|
15.1. Отказ системы | 460 |
15.2. Модель отказа сбой-остановка | 461 |
15.3. Понятие отказоустойчивости | 4621 |
15.4. Идемпотентные операции | 462 |
15.5. Атомарные операции над постоянными объектами | 462 |
15.5.1. Энергозависимая, постоянная и стабильная память | 463 |
15.6. Реализация атомарных операций | 464 |
15.6.1. Протоколирование | 465 |
15.6.2. Теневое выполнение операций | 465 |
15.7. Энергонезависимая память | 467 |
15.8. Одна операция над постоянными данными | 468 |
15.9. Требования СУБД к операционной системе | 469 |
15.10. Резюме | 471 |
Контрольные вопросы | 472 |
|
Глава 16. Взаимодействие между процессами |
в распределённой системе | 474 |
|
16.1. Введение | 474 |
16.2. Специфические характеристики распределенных систем | 475 |
16.3. Взаимодействие между процессами методом передачи сообщений | 476 |
16.3.1. IPC в распределенной системе | 476 |
16.3.2. Распределенная асинхронная передача сообщений | 476 |
16.4. Интеграция IPC с сетевым сервисом | 478 |
16.4.1. Взаимодействие между процессами через сокеты | 478 |
16.5. Сокеты и потоки Java | 482 |
16.5.1. Пакет java.net | 485 |
16.5.2. Реализация клиента | 485 |
16.5.3. Асинхронная передача сообщений | 486 |
16.6. Парадигмы распределённого программирования | 486 |
16.6.1. Синхронное и асинхронное взаимодействие | 486 |
16.6.2. Процедурное взаимодействие и передача сообщений | 487 |
16.7. Удалённый вызов процедур | 488 |
16.7.1. Системы с поддержкой RPC | 488 |
16.7.2. Учёт вероятности перегрузки сети или сервера | 490 |
16.7.3. Учёт вероятности отказа отдельных узлов | 490 |
16.7.4. Язык CCLU | 492 |
16.7.5. RPC и эталонная модель OSI | 493 |
16.8. Интеграция RPC и языков программирования | 494 |
16.8.1. Прозрачность распределённой реализации | 494 |
16.8.2. Маршалинг аргументов | 496 |
16.8.3. Объектно-ориентированные системы | 497 |
16.8.4. Проверка типов и согласованность версий | 498 |
16.8.5. Представление данных в гетерогенной среде | 498 |
16.9. Пакет java.rmi | 499 |
16.9.1. RMI и объектная модель | 499 |
16.9.2. Механизмы RMI | 500 |
16.9.3. Пример использования RMI | 503 |
16.9.4. Сравнение RMI с механизмом сокетов | 505 |
16.10. Недостатки синхронного вызова | 505 |
16.11. Именование, поиски связывание | 507 |
16.11.1. Именование объектов с использованием IPC | 507 |
16.11.2. Поиск имен объектов | 509 |
16.11.3. Архитектура ANSA | 510 |
16.12. Резюме | 511 |
Контрольные вопросы | 512 |
|
Часть III. Управление транзакциями | 515 |
|
Глава 17. Составные операции | 517 |
|
17.1. Выполнение составной операции | 517 |
17.2. Данные в основной памяти | 518 |
17.3. Данные в постоянной памяти | 519 |
17.3.1. Составные операции в файловых системах | 519 |
17.3.2. Составные операции в СУБД | 520 |
17.4. Параллельное выполнение составных операций | 520 |
17.4.1. Оценка необходимости параллельного выполнения | 521 |
17.5. Проблемы параллельного выполнения составных операций | 522 |
17.5.1. Неконтролируемое чередование подопераций | 523 |
17.5.2. Видимость результатов подопераций | 524 |
17.5.3. Взаимоблокировка | 524 |
17.6. Отказ системы | 525 |
17.7. Резюме | 526 |
Контрольные вопросы | 527 |
|
Глава 18. Выделение ресурсов и взаимоблокировка | 529 |
|
18.1. Требования к динамическому выделению ресурсов | 529 |
18.2. Взаимоблокировка процессов | 530 |
18.3. Активная блокировка и зависание процесса | 531 |
18.4. Условия взаимоблокировки | 532 |
18.4.1. Предотвращение взаимоблокировки | 533 |
18.5. Проблема обедающих философов | 534 |
18.6. Граф выделения ресурсов | 536 |
18.7. Выявление взаимоблокировки | 538 |
18.7.1. Алгоритм выявления взаимоблокировки | 539 |
18.7.2. Пример выявления взаимоблокировки | 539 |
18.7.3. Устранение взаимоблокировки | 540 |
18.8. Предупреждение взаимоблокировки | 541 |
18.8.1. Проблемы, связанные с предупреждением взаимоблокировки | 542 |
18.9. Информация об освобождении объектов, многостадийные процессы | 542 |
18.10. Взаимоблокировка распределённых процессов | 543 |
18.10.1. Выявление взаимоблокировки распределённых процессов | 544 |
18.11. Резюме | 546 |
Контрольные вопросы | 546 |
|
Глава 19. Транзакции | 549 |
|
19.1. Введение | 549 |
19.2. Определение транзакций в приложении | 551 |
19.3. Сериализуемость | 553 |
19.4. Свойства транзакций | 555 |
19.5. Допустимые схемы выполнения транзакций | 556 |
19.6. Модель системы и обработка транзакций | 556 |
19.6.1. Некоммутативные пары операций | 558 |
19.6.2. Условие сериализуемости | 559 |
19.7. Граф зависимостей транзакций | 561 |
19.8. История транзакций | 564 |
19.9. Отмена транзакций и свойство изолированности | 567 |
19.9.1. Каскадная отмена транзакций | 567 |
19.9.2. Возможность восстановления состояния системы | 568 |
19.10. Резюме | 570 |
Контрольные вопросы | 571 |
|
Глава 20. Параллельное выполнение транзакций | 573 |
|
20.1. Введение | 573 |
20.2. Обработка объектов в основной памяти | 573 |
20.2.1. Централизованная система | 574 |
20.2.2. Распределённая система | 575 |
20.2.3. Подходы к разработке параллельных программ | 576 |
20.3. Структура системы обработки транзакций | 577 |
20.4. Методы на основе блокирования | 578 |
20.4.1. Двухфазное блокирование | 579 |
20.4.2. Пример двухфазного блокирования | 579 |
20.4.3. Семантическое блокирование | 581 |
20.4.4. Взаимоблокировка при использовании метода |
двухфазного блокирования | 581 |
20.5. Упорядочение по отметкам времени | 582 |
20.5.1. Изолированность транзакций | 585 |
20.6. Оптимистическое управление транзакциями | 585 |
20.7. Резюме | 594 |
Контрольные вопросы | 596 |
|
Глава 21. Восстановление состояния системы | 600 |
|
21.1. Необходимость восстановления | 600 |
21.2. Восстановление состояния объекта | 601 |
21.3. Параллельное выполнение, отказы и свойства транзакций | 602 |
21.4. Протоколирование и теневое выполнение | 602 |
21.5. Восстановление с использованием журнала | 603 |
21.5.1. Записи в журнале и их использование при восстановлении | 604 |
21.5.2. Опережающая запись в журнал | 604 |
21.5.3. Контрольные точки | 605 |
21.6. Идемпотентные операции отмены и повтора | 606 |
21.7. Состояние транзакции на момент сбоя | 607 |
21.8. Алгоритм восстановления | 608 |
21.9. База данных координат мобильных объектов | 609 |
21.10. Резюме | 610 |
Контрольные вопросы | 611 |
|
Глава 22. Распределённые транзакции | 613 |
|
22.1. Объектная модель для распределённых систем | 613 |
22.2. Распределённая обработка транзакций | 614 |
22.3. Взаимодействие распределённых компонентов системы | 616 |
22.4. Метод двухфазного блокирования | 616 |
22.5. Метод упорядочения по отметкам времени | 617 |
22.6. Оптимистический метод | 618 |
22.7. Фиксация и отмена транзакций | 619 |
22.8. Протокол двухфазной фиксации | 621 |
22.9. Протокол двухфазного подтверждения | 624 |
22.10. Резюме | 627 |
Контрольные вопросы | 628 |
|
Глава 23. Управление распределённой обработкой | 630 |
|
23.1. Введение | 630 |
23.2. Группы процессов | 631 |
23.2.1. Выборы координатора | 632 |
23.3. Согласование реплик данных | 634 |
23.3.1. Сбор кворума для обеспечения строгой согласованности | 635 |
23.3.2. Крупномасштабные системы | 636 |
23.4. Упорядочение доставки сообщений | 636 |
23.4.1. Векторные часы | 638 |
23.5. Взаимное исключение в распределённой системе | 639 |
23.5.1. Реплицированные и распределённые объекты данных | 640 |
23.5.2. Алгоритмы взаимного исключения | 640 |
23.6. Резюме | 642 |
Контрольные вопросы | 644 |
|
Часть IV. Примеры реальных систем | 645 |
|
Глава 24. UNIX | 647 |
24.1. Эволюция UNIX | 647 |
24.2. Структура системы и ядро UNIX | 649 |
24.2.1. Системные вызовы и выполнение кода ядра | 650 |
24.2.2. Управление устройствами | 651 |
24.2.3. Буферный кэш | 652 |
24.3. Файловая система | 652 |
24.3.1. Монтирование файловых систем | 653 |
24.3.2. Каталоги | 654 |
24.4. Реализация файловой системы | 654 |
24.4.1. Индексные узлы | 655 |
24.4.2. Файлы каталогов | 656 |
24.4.3. Защита доступа | 657 |
24.4.4. Выделение дисковых блоков | 658 |
24.4.5. Структуры данных в основной памяти | 658 |
24.4.6. Согласованность файловой системы | 659 |
24.5. Управление процессами | 660 |
24.5.1. Создание процессов | 661 |
24.5.2. Синхронизация между родительским и дочерним процессами | 661 |
24.5.3. Создание процессов при инициализации системы | 662 |
24.5.4. Создание процесса интерпретатором команд | 663 |
24.5.5. Планирование процессов | 663 |
24.5.6. Свопинг и страничная подкачка | 666 |
24.5.7. Состояния процесса | 666 |
24.6. Взаимодействие между процессами в классической UNIX | 668 |
24.6.1. Каналы между командами | 668 |
24.6.2. Сигналы | 670 |
24.6.3. Механизмы IPC в классической UNIX | 671 |
24.7. Классическая UNIX и её современные версии | 672 |
24.8. Совершенствование структуры ядра | 672 |
24.8.1. Загружаемые модули ядра | 673 |
24.8.2. Потоковый интерфейс ядра | 673 |
24.9. Совершенствование механизма обработки прерываний | 674 |
24.10. Поддержка параллельного выполнения процессов | 675 |
24.10.1. Взаимодействие между процессами в SVr4 | 676 |
24.10.2. Сокеты и именованные каналы | 678 |
24.11. Новые механизмы управления памятью | 679 |
24.12. Поддержка мультипроцессорной обработки | 680 |
24.13. Резюме | 680 |
Контрольные вопросы | 681 |
|
Глава 25. Windows 2000 | 683 |
|
25.1. Введение | 683 |
25.1.1. Свойства системы | 684 |
25.2. Структура системы | 686 |
25.2.1. Компоненты исполнительной системы | 688 |
25.3. Объектная модель и менеджер объектов | 689 |
25.3.1. Использование объектов | 691 |
25.3.2. Структура объекта | 691 |
25.3.3. Типы объектов | 693 |
25.3.4. Имена объектов и каталогов | 694 |
25.3.5. Дескрипторы объектов | 695 |
25.3.6. Методы объекта, специфические для конкретного типа | 696 |
25.3.7. Защита объектов | 697 |
25.4. Ядро | 697 |
25.4.1. Объекты, процессы и потоки ядра | 698 |
25.4.2. Планирование и диспетчеризация потоков | 699 |
25.4.3. Обработка прерываний и исключений | 700 |
25.5. Процессы, потоки, нити | 700 |
25.5.1. Синхронизация потоков | 702 |
25.5.2. Оповещения и асинхронные вызовы процедур | 703 |
25.5.3. Управление памятью | 704 |
25.6. Подсистема ввода-вывода | 706 |
25.6.1. Особенности архитектуры подсистемы ввода-вывода | 707 |
25.6.2. Обработка ввода-вывода | 709 |
25.6.3. Модель драйверов Windows | 710 |
25.7. Файловая система NTFS | 711 |
25.7.1. Архитектура NTFS | 712 |
25.8. Сетевое взаимодействие | 714 |
25.9. Резюме | 716 |
Контрольные вопросы | 717 |
|
Глава 26. World Wide Web | 718 |
|
26.1. Взаимодействие между клиентом и сервером Веб | 719 |
26.2. Именование веб-страниц | 720 |
26.3. Протокол HTTP | 722 |
26.4. Структура документа | 722 |
26.5. Выполнение программ на сервере и клиенте | 724 |
26.6. Защита | 726 |
26.6.1. Контроль доступа | 726 |
26.6.2. Передача конфиденциальных данных | 726 |
26.6.3. Мобильный код | 727 |
26.7. Управление параллельным доступом | 727 |
26.8. Масштабируемость | 728 |
26.9. Язык XML и протокол SOAP | 729 |
26.10. Резюме | 731 |
Контрольные вопросы | 731 |
|
Глава 27. Промежуточное программное обеспечение | 733 |
|
27.1. Парадигмы промежуточного программного обеспечения | 733 |
27.1.1. Эволюция объектно-ориентированного промежуточного |
программного обеспечения | 735 |
27.2. Промежуточная платформа Java | 738 |
27.2.1. Java как технология программирования для Веб | 738 |
27.2.2. Удаленный вызов методов в Java | 740 |
27.2.3. Технологии Jini и JavaSpaces | 741 |
27.2.4. Компонентная модель JavaBeans | 744 |
27.2.5. Сервис передачи сообщений Java | 746 |
27.2.6. Технология JXTA | 746 |
27.3. Технологии OMG | 747 |
27.3.1. Компоненты модели ОМА | 748 |
27.3.2. Объектная модель OMG | 750 |
27.4. Инфраструктура CORBA | 751 |
27.4.1. Ядро брокера объектных запросов | 752 |
27.4.2. Язык описания интерфейсов OMG | 753 |
27.4.3. Остальные компоненты инфраструктуры CORBA | 754 |
27.4.4. Поддержка асинхронной передачи данных в CORBA | 756 |
27.5. Консорциум ODMG | 757 |
27.6. Технологии COM, DCOM и .NET | 758 |
27.7. Промежуточные платформы, ориентированные на передачу сообщений | 761 |
27.7.1. Система передачи сообщений MQSeries | 763 |
27.7.2. Система TIB/Rendezvous | 765 |
27.8. Резюме | 767 |
Контрольные вопросы | 768 |
|
Литература | 770 |
|
Алфавитный указатель | 785 |