Next:
Введение
Up:
mainfile
Previous:
mainfile
Contents
Локальные и удаленные средства межпроцессного взаимодействия
Процессы
Основные сведения о процессах
Таблица процессов
Создание процессов с помощью вызова fork().
Запуск процессов с помощью вызова exec()
Сигналы
Понятие о сигналах
Посылка сигналов с помощью raise() и kill()
Работа с сигналами в Linux
Применение сигналов для IPC
Трубы (pipes)
Использование труб
Функция popen()
FIFO - именованные каналы
Блокировка файлов
Необходимость блокировки
Структура flock
Режимы блокировки
Блокировка частей файла и тупики
Очереди сообщений
Общие сведения
Структуры данных очередей сообщений
Создание очередей сообщений
Управление очередями сообщений
Операции над очередями сообщений
Семафоры
Основные сведения
Структуры данных семафоров
Создание множеств семафоров
Управление семафорами через semctl
Операции над множествами семафоров
Разделяемые сегменты памяти
Общие сведения
Структуры для разделяемых сегментов памяти
Создание разделяемых сегментов памяти
Управление разделяемыми сегментами памяти
Операции над разделяемыми сегментами памяти
Потоки (threads)
Различие между процессами и потоками
Преимущества многопоточности
Уровни потоков
Пользовательские потоки
Потоки уровня ядра
Создание потока
Ожидание завершения потока
Отделение потока
Работа с ключами потока
Остановка потока
Компиляция многопоточного приложения
Отладка многопоточного приложения
Атрибуты потоков
Состояние отделенного потока
Ограничения потока
Дисциплина планирования потока
Размер стека в потоке
Создание собственного стека потока
Синхронизация потоков
Блоки взаимного исключения (мьютексы - mutex)
Инициализация и удаление объекта атрибутов мьютекса
Область видимости мьютекса
Инициализация мьютекса
Запирание мьютекса
Захват мьютекса без блокирования
Удаление мьютекса
Пример использования мьютексов
Иерархическая блокировка
Вложенные блокировки односвязного списка
Переменные состояния
Работа с атрибутами переменных состояния
Видимость переменной состояния
Инициализация переменной состояния
Блокировка через переменную состояния
Сокеты
Общие сведения о сокетах
Создание и именование сокетов
Соединение сокетов
Обмен данными через сокеты
Закрытие сокетов
Приложение архитектуры клиент-сервер с использованием сокетов
Удаленный вызов процедур
Общие сведения
Разработка протокола взаимодействия
Порядок компиляции приложения архитектуры клиент-сервер
Интерфейсные процедуры RPC
Упрощенный интерфейс RPC
Пример rusers.c
Клиентская часть
Серверная часть
Передача произвольных типов данных
Разработка высокоуровневых приложений RPC
Определение протокола
Разделение данных
Серверная часть
Клиентская часть
Компиляция протоколов и низкоуровневое программирование RPC
Преобразование локальных процедур в удаленные
Передача сложных структур данных
Директивы препроцессора
Высокоуровневые средства межпроцессного взаимодействия
DIPC - Распределенные межпроцессные коммуникации
Введение
Кластеры
Сбои работы при использовании DIPC
Ключи DIPC
Как работает dipcd
Процессы dipcd
Как dipcd создает процессы
Как компоненты dipcd ``общаются'' между собой
Арбитраж
Как пересылаются данные и информация
Сокращение числа копирований
Почему DIPC не использует указанных методов
Создание структур IPC и доступ к ним
Концепция владельца
Удаление структур IPC
Окончательное удаление структур IPC
Локальная информация ядра
Безопасность
Системные вызовы
Разделяемая память
Планирование разделяемой памяти
Прокси
UDP/IP
Как определяются адреса
Программирование с помощью DIPC
Введение
Удаленное выполнение программ
Обмен данными
Синхронизация
Снижение сетевой нагрузки
Поддерживаемые системные вызовы
Инсталляция программного обеспечения
Программы-примеры
Интерфейс передачи сообщений MPI
Первая программа MPI
Структура программы MPI
Определение номера процесса
Структура сообщения
Функции передачи сообщений MPI_Send() и MPI_Recv()
Пример приложения с обменом сообщениями
Параллелизация правила трапеции
Ввод / вывод для параллельных процессоров
Коллективные коммуникации
Коммуникации в виде дерева
Широковещательные посылки
Редукция
Другие функции для коллективных коммуникаций
Группировка данных для пересылки
Параметр count
Производные типы и MPI_Type_struct
Другие конструкторы производных типов
Упаковка и распаковка
Выбор используемого метода передачи данных
Коммуникаторы и топологии
Алгоритм Фокса
Коммуникаторы
Работа с группами, контекстами и коммуникаторами
Функция MPI_Comm_split
Топологии
Функция MPI_Cart_sub
Реализация алгоритма Фокса
Начальные сведения о PETSc
Запуск программ PETSc.
Написание программ PETSc
Простые примеры PETSc
Структура каталогов
Основная информация профилирования
Интерпретация вывода -log summary (основы)
Интерпретация вывода -log summary: Параллельная производительность
Использование -log_mpe вместе с Upshot / Jumpshot
Профилирование кода приложения
Профилирование нескольких секций кода
Ограничение регистрации событий
Интерпретация вывода -log_info: Информативные сообщения
Время
Сохранение вывода в файле
Точное профилирование: избегание перегрузки страниц
Опции компилятора
Профилирование
Агрегация
Эффективное распределение памяти
Сборка разреженных матриц
Факторизация разреженных матриц
Вызовы PetscMalloc()
Повторное использование структур данных
Численные эксперименты
Советы по эффективному использованию линейных решателей
Обнаружение проблем распределения памяти
Системные проблемы
Сборочные файлы PETSc
Команды сборочных файлов
Настраиваемые сборочные файлы
Флаги PETSc
Примеры сборочных файлов
Ограничения
PVM - параллельная виртуальная машина
Обзор PVM
Система PVM
Использование PVM
Как получить программное обеспечение PVM
Установка PVM для ее использования
Запуск PVM
Типичные ошибки при запуске
Выполнение программ PVM
Подробное описание консоли PVM
Опции в файле хостов.
Базовые технологии программирования
Общие парадигмы параллельного программирования
Распределение рабочей нагрузки
Декомпозиция данных
Функциональная декомпозиция
Портирование существующих приложений в PVM
Пользовательский интерфейс PVM
Контроль процессов
Информация
Динамическая конфигурация
Посылка сигналов
Установка и получение опций
Обмен сообщениями
Буферы сообщений
Упаковка данных
Передача и прием данных
Распаковка данных
Динамические группы процессов
Примеры программ
``Раздваивание - присоединение''
Точечное произведение
Пример с ошибкой
Матричное умножение
Одномерное температурное уравнение
Практическое использование средств разработки приложений в ОС Linux
Базовые средства программирования в ОС Linux
Компилятор GCC
Основные группы системных функций
Ассемблеры gas и nasm
Отладчик GDB
Интерфейсы gdb и другие отладчики
Средство управления проектом make
Назначение make
Файл описания проекта - make-файл
Алгоритм работы make
Переменные в make-файлах
Шаблонные правила
Специальные действия
Создание make-файлов
LEX - лексический анализатор
Введение
Команда lex
Регулярные выражения
Структура LEX-программы
Структура файла lex.yy.c
YACC - еще один компилятор компиляторов
Введение
Входные спецификации
Действия
Лексический анализ
Управление версиями с помощью CVS
Введение
Что такое CVS
Чем CVS не является
Пример работы с CVS
Утилита Autoconf
Введение
Создание скриптов configure.
Написание `configure.in'.
Использование программы autoscan для создания `configure.in'.
Использование программы Autoconf для создания скрипта configure
Файлы инициализации и выходные файлы
Нахождение ввода configure
Создание выходных файлов
Настройки и проверки
Создание макросов
Запуск скриптов configure
Утилита Automake
Введение
Основные идеи
Примеры
Простой пример (от начала до конца)
Классический ``Hello, world''
Создание файла `Makefile.in'
Subsections
Введение
2004-06-22