IPC UNIX way: межпроцессное взаимодействие через сокеты

Одним из самых популярных механизмов межзадачного (как межпроцессного, так и внутрипроцессного) взаимодействия в UNIX-подобных ОС является механизм сокетов. Сокеты — это универсальный интерфейс абстрактного канала (в некоторых случаях — шины) обмена данными, полностью скрывающий от задач-пользователей средства доставки данных. Сокеты дают прикладным программам простой, но довольно удобный способ обмениваться потоками байтов или отдельными сообщениями через любые возможные физические каналы передачи данных, не задумываясь о внутренней организации транспорта, который обеспечивает обмен. Интерфейс сокетов UNIX оказался настолько удачным, что подавляющее большинство ОСОН и ОСРВ, в том числе, с принципиально иной архитектурой, адаптировали его к использованию в своем API. Исследованию временных характеристик данного механизма ядра FreeBSD посвящена эта статья.

Читать далее

Рубрика: Практика: тесты | Метки: , , , , , | Добавить комментарий

Тестируем очереди сообщений

Очереди сообщений (message queue, MQ) — один из наиболее универсальных и распространенных механизмов меж- и внутрипроцессного взаимодействия задач. Более того, в некоторых ОС, в частности, во многих ОСРВ, построенных на базе технологии микроядра, механизм очередей сообщений является базовым фундаментальным механизмом взаимодействия всех частей системы. Стандарт POSIX, описывающий типовой интерфейс этого механизма ОС для прикладных программ, существует достаточно давно и поддерживается едва ли не всеми распространенными ОС. Вероятно, за долгую историю своего существования, реализации очередей сообщений в различных ОС приобрели значительную эффективность, надежность и высокую пропускную способность. Эта статья посвящена тестам конкретной реализации POSIX-очередей сообщений в ядре FreeBSD.

Читать далее

Рубрика: Практика: тесты | Метки: , , , , , | Добавить комментарий

Сеть и РВ: Ethernet в многомашинных комплексах

При разработке сложных или высокопроизводительных систем управления часто возникает необходимость в создании многомашинных комплексов, где отдельные вычислительные системы решают задачи различного характера. Основная проблема, возникающая при реализации такого подхода при создании СРВ — организация обмена данными между отдельными подсистемами. В настоящее время самым удобным и распространенным способом обмена данными между вычислительными системами являются локальные сети на основе технологии Ethernet, использующие семейство протоколов IP. Но насколько такие сети подходят для использования в СРВ? Ответ на этот вопрос мы попытаемся найти в этой статье.

Читать далее

Рубрика: Практика: тесты, Разное | Метки: , , , , | Добавить комментарий

x86: Атомарные операции и спинлоки

Многопоточные приложения и приложения с асинхронными участками кода часто используют разнообразные структуры данных, обеспечивающие организацию конкурентного доступа к одному общему ресурсу из нескольких параллельно работающих потоков выполнения. Существует множество реализаций таких структур: конкурентные очереди, кольцевые буферы, синхронизированные списки и деревья и т.п. Все они могут быть разделены на два общих класса: структуры с блокировкой (locking) обращающегося потока и неблокирующие (lock-free) структуры. Для организации первых часто используют спинлоки (spin mutex), для организации вторых — атомарные операции (atomic). Но насколько эффективны эти примитивы, и каким следует отдавать предпочтение при решении конкретной задачи? Исследованию этого вопроса посвящена данная статья.

Читать далее

Рубрика: Практика: тесты, Теория: алгоритмы и сложность | Метки: , , , | Добавить комментарий

Прерывания: как это сделано в QNX

ОСРВ QNX широко известна как надежная и быстрая ОСРВ с хорошей поддержкой POSIX API, и благодаря своим высоким качествам получила широкое распространение в самых разных отраслях автоматизации — от простейшего бытового сетевого оборудования до сложнейших медицинских комплексов стоимостью в сотни тысяч и миллионы долларов. ОСРВ QNX построена на базе ставшей в настоящее время классической технологии микроядра. Как и в любой ОСРВ, в QNX повышенное внимание уделено механизмам реагирования на внешние события, т.е., обработке прерываний.

Читать далее

Рубрика: Разное, Теория: СРВ | Метки: , , , , , , | Добавить комментарий

Ввод-вывод: добровольное переключение задач

Как нам уже известно, FreeBSD, будучи ОСОН, оптимизированной под максимальную среднюю производительность, реализует ряд решений, повышающих эффективность выполнения системных вызовов. Одним из используемых в ядре FreeBSD способов является временное повышение приоритета потока, использующего внутренние ресурсы ядра, для скорейшего завершения его работы и освобождения этих ресурсов. К сожалению, такой подход препятствует «честной» работе планировщика в домене приоритетов РВ и вызывает задержки в решении задач РВ.

Читать далее

Рубрика: Практика: проблемы, Практика: решения | Метки: , , , | Добавить комментарий

Тесты: временные характеристики pthreads

FreeBSD, как и все современные ОС реализует интерфейс POSIX threads, или pthreads — интерфейс, предназначенный для организации параллельно работающих потоков выполнения в пользовательских программах. На основе pthreads создано множество полезных прикладных программ, в том числе, мощные высокопроизводительные серверы для Internet-приложений. Но насколько pthreads подходят для разработки СРВ, каковы задержки, вносимые внутренней логикой этого удобного механизма ядра?

Читать далее

Рубрика: Практика: тесты | Метки: , | Добавить комментарий

Драйверы устройств: проблема последнего клиента.

Многие драйверы устройств FreeBSD предоставляют файловый интерфейс своим пользователям. Такие специальные файлы располагаются в каталоге /dev, обращение к ним происходит прозрачно для пользовательских программ, путем использования унифицированных системных вызовов вроде open(), read() и ioctl(). Любой файл в FreeBSD является узлом виртуальной файловой системы, которая постоянно отслеживает «подключившиеся» к файлу процессы-пользователи, обеспечивает логику блокировок и автоматически закрывает файл при отключении последнего пользователя. К сожалению, внутрь драйвера, через стандартный интерфейс FreeBSD, не попадает информация о количестве использующих файл программ, поэтому, процессы-пользователи приходится считать внутри драйвера «вручную».

Читать далее

Рубрика: Практика: решения, Разное | Метки: , , , | Добавить комментарий

Тестируем HPET

Итак, в результате глубокой модификации драйвера HPET (см. «HPET – это, все-таки, event timer.») в нашем распоряжении появился таймер-будильник сверхвысокого разрешения. Неплохо было бы проверить его характеристики, и узнать, какую точность и детерминизм он обеспечивает в реальных условиях. В этой статье мы проведем ряд тестов и попытаемся проанализировать их результаты.

Читать далее

Рубрика: Практика: тесты | Метки: , , , , , , , , , | Добавить комментарий

HPET – это, все-таки, event timer.

IA-PC HPET — это спецификация нового механизма счета времени и формирования однократных и периодических сигналов, разработанная совместно Intel и Microsoft в первой половине 2000-х. Таймеры-счетчики HPET предназначены для замены устаревших и не отвечающих возросшим современным требованиям «стандартных» для архитектуры Intel PC таймеров RTC и i8253/8254. Приблизительно с 2006 года большинство вычислительных систем на Intel-совместимых аппаратных платформах содержат эти таймеры.

Читать далее

Рубрика: Практика: проблемы, Практика: решения | Метки: , , , , , , , , | Добавить комментарий