Словарь терминов

Глоссарий (термины, определения, сокращения)

pthreads
Собирательное имя для набора вызовов функций pthread_*(). Подавляющее большинство этих вызовов определено стандартом POSIX и используется при работе с потоками.
Абсолютный таймер (absolute timer)
Таймер, истекающий в фиксированный момент времени, например, 20 января 2005 года в 9 часов 42 минуты по московскому времени (UTC+03:00 — Coordinated Universal Time плюс 3 часа). Сравните с определением относительный таймер.
Администратор ресурса (resource manager)
Сокращенно также resmgr. Это серверный процесс, предоставляющий произвольному клиенту ряд строго определенных сервисов на основе файловых дескрипторов. Администратор ресурса поддерживает некоторый ограниченный набор сообщений, которые соответствуют стандартным клиентским библиотечным функциям Си, таким как open(), write(), lseek(), devctl() и т.д.
Асинхронный (asynchronous)
Понятие, используемое для того, чтобы указать на то, что данная операция не синхронизирована по отношению к другой операции. Например, временные метки, которые генерируются микросхемой системного таймера, как говорят, "асинхронны" в отношении потока, запрашивающего задержку на некоторое время, поскольку запрос на задержку никак не синхронизирован с возникающим прерыванием отсчета таймера. Сравните с определением синхронный.
Атомарная операция (atomic operation)
Операция, которая является "неделимой", т.е. такая, которая не может быть прервана любой другой операцией. Атомарные операции критично важны, особенно в подпрограммах обработки прерываний и многопоточных программах, поскольку последовательность событий типа "проверить и установить", которая осуществляется в одном потоке, должна быть гарантирована от прерывания другим потоком. Любую последовательность можно сделать атомарной с точки зрения защищености от вмешательства других потоков, применяя мьютексы или — в обработчиках прерываний — функции InterruptLock() и InterruptUnlock(). См. также заголовочный файл <atomic.h>.
Атрибутная запись (attribute structure)
Структура, используемая в пределах администратора ресурса и содержащая информацию, относящуюся к устройству, которое администратор ресурса декларирует в пространстве имен путей. Если администратор ресурса декларирует несколько устройств (например, админитратор последовательного порта может объявить /dev/ser1 и /dev/ser2), он будет поддерживать соответствующее число атрибутных записей. Сравните с определением OCB.
Барьер (barrier)
Объект синхронизации на уровне потоков, которому соответствует некое значение счетчика. Потоки, запрашивающие блокировку по барьеру (функция pthread_barrier_wait()), блокируются до тех пор, пока число потоков, запросивших блокировку, не станет равным указанному значению; как только это произойдет, все эти потоки будут разблокированы. Сопоставьте это с работой семафора.
Блок управления открытым контекстом (OCB, Open Control Block)
Структура данных, используемая администратором ресурсов и содержащая информацию по каждому клиентскому запросу типа open(). Если клиент открыл несколько файлов, то для каждого дескриптора файла, который этот клиент имеет у соответствующих администраторов ресурсов, будет существовать соответствующий блок управления открытым контекстом (OCB, Open Control Block). Сравните с атрибутной записью.
Блокирование (blocking)
Средство синхронизации потоков по отношению к другим потокам или событиям. В заблокированном состоянии (которых имеется порядка дюжины) поток не расходует процессорное время — он находится в ожидании в списке, поддерживаемом в пределах ядра. Когда происходит ожидаемое потоком событие, поток разблокируется и снова становится способным использовать процессор.
Вектор ввода/вывода (I/O Vector, IOV)
Структура, в которой каждый элемент содержит указатель и длину. Обычно применяются не одиночные векторы ввода/вывода, а массивы векторов — такой массив структур из указателей и длин определяет список фрагментов сообщения для операции фрагментации/дефрагментации (scatter/gather), позволяющей выполнять обмен сообщениями намного эффективнее (в противном случае, чтобы сформировать один непрерывный буфер, данные пришлось бы копировать по отдельности).
Взаимная блокировка (deadlock)
Аварийная ситуация, которая возникает, когда два потока взаимно заблокированы, ожидая друг от друга ответ. Это состояние можно легко воспроизвести: просто заставьте два потока отправить друг другу сообщение — с этого момента оба потока перейдут в состояние ожидания ответа. Поскольку оба потока блокированы, они не имеют возможности ответить, следовательно, наблюдается тупиковая ситуация. Для исключения взаимной блокировки клиенты и серверы должны придерживаться иерархического принципа обмена.
Виртуальная память (virtual memory)
Система виртуальной памяти — это система, в которой виртуальное адресное пространство может, но не обязательно, быть преобразовано на основе взаимно-однозначного соответствия с физическим адресным пространством.
Виртуальный адрес (virtual address)
Адрес, которому не обязательно соответствует физический адрес. В ЗОСРВ "Нейтрино" все потоки работают в режиме виртуальной адресации, когда виртуальные адреса транслируются в физические при помощи менеджера памяти. Сравните с понятиями физический адрес и виртуальная память.
Выравнивание (alignment)
Выравнивание — характеристика операции, при которой доступ к N-байтовому элементу данных должен выполняться только по адресу, кратному N. Например, чтобы обратиться к 4-байтовому целому числу, адрес этого целого числа должен быть кратным 4 байтам (например, Ox2304B008, а не Ox2304B009). В архитектуре некоторых процессоров (CPU) при попытке невыровненного доступа генерируется ошибка выравнивания (alignment fault). В архитектуре других процессоров (например, x86) невыровненный доступ осуществляется медленнее, чем выровненный доступ.
Менеджер памяти (Memory Management Unit, MMU)
Аппаратный блок (обычно интегрированный с центральным процессором), который обеспечивает трансляцию виртуальных адресов в физические и может использоваться для реализации системы виртуальной памяти. В ЗОСРВ "Нейтрино" главным преимуществом применения менеджер памяти является возможность обнаружить момент, когда поток обращается к виртуальному адресу, который не отображен в адресное пространство соответствующего процесса.
Диспетчеризация FIFO (FIFO scheduling)
При диспетчеризации FIFO (First In — First Out) поток будет использовать процессор до тех пор, пока поток с более высоким приоритетом не перейдет в состояние готовности или пока поток добровольно не освободит процессор. Если не существует потоков с более высокими приоритетами и поток добровольно не освобождает процессор, он будет выполняться вечно. Сопоставьте с карусельной диспетчеризацией.
ЗОСРВ
Защищенная операционная система реального времени.
Идентификатор отправителя (receive ID)
Когда сервер принимает сообщение от клиента, функции сервера MsgReceive() или MsgReceivev() возвращают идентификатор отправителя (часто сокращенно в программах называемый rcvid). Этот идентификатор rcvid затем используется по отношению к заблокированному клиенту как дескриптор, позволяя серверу отправить клиенту ответ с данными, тем самым разблокировав его. После использования rcvid для ответа клиенту он перестает иметь значение для всех вызовов функций, кроме функции MsgDeliverEvent().
Идентификатор соединения (connection ID, CID)
Дескриптор, возвращаемый функцией ConnectAttach() (на клиентской стороне) и используемый для всех операций обмена данными между клиентом и сервером. Идентификатор соединения аналогичен дескриптору файла в терминах стандартной библиотеки языка Си. Иными словами, когда функция open() в ЗОСРВ "Нейтрино" возвращает дескриптор файла, реально возвращается идентификатор соединения.
Иерархический принцип обмена (send hierarchy)
Принятая в ЗОСРВ "Нейтрино" концепция, в силу которой отправляемые сообщения передаются в одном направлении, а ответы на сообщения — в другом. Основной целью реализации иерархического принципа обмена является необходимость исключения состояния взаимной блокировки потоков. Иерархический принцип реализуется назначением клиентам и серверам "уровней иерархии" и обеспечения того, чтобы сообщения передавались только на более высокий уровень иерархии. Это исключает ситуации взаимной блокировки, когда два потока посылают сообщения друг другу, потому что такая ситуация нарушила бы принцип — поток не должен отправлять сообщения другому, если тот находится на нижнем уровне иерархии.
Импульс (pulse)
Неблокирующее сообщение, получаемое аналогично обычному сообщению. Это сообщение является неблокирующим для отправителя; получатель же может ожидать его применением стандартных функций обмена сообщениями ( MsgReceive() и MsgReceivev()) или же, если необходимо ждать именно импульса, то при помощи функции MsgReceivePulse(). В то время как большинство сообщений обычно посылаются от клиента к серверу, импульсы обычно пересылаются в противоположном направлении, чтобы не нарушать иерархический принцип обмена (это вызвало бы взаимную блокировку). Сравните с сигналом.
Исходящий вызов ядра (kernel callout)
ЗОСРВ "Нейтрино" может быть настроена для функционирования на различных аппаратных средствах без необходимости в лицензии на исходный код. Для этого надо предусмотреть в начальном загрузчике возможность обработки исходящих вызовов ядра. Механизм исходящих вызовов ядра позволяет разработчику добавлять в систему свой код, "знающий" о специфике оборудования — например, как опрашивать контроллер прерывания о том, какое прерывание произошло, или о том, как настроить таймер на регулярную генерацию прерываний и т.п. Это очень подробно изложено в книге "Building Embedded Systems" ("Построение встраиваемых систем").
Канал (channel)
Абстрактный объект, через который сервер принимает сообщения. Это тот же самый объект, к которому клиент подключется, чтобы отправить сообщение серверу. При создании канала с помощью ChannelCreate() возвращается идентификатор канала ("channel ID", сокращенно "chid") — тот самый идентификатор канала, который назначается администратором ресурса каждой объявляемой им точке монтирования.
Карусельная диспетчеризация (round robin (RR) scheduling)
При карусельной диспетчеризации поток использует процессор до тех пор, пока либо не будет готов к работе поток с более высоким приоритетом, либо пока этот поток добровольно не освободит процессор, либо пока не истечет выделенный данному потоку квант времени. Если потоков с более высоким приоритетом нет, поток добровольно не освобождает процессор и не существует других потоков с тем же самым приоритетом, поток будет выполняться вечно. Если удовлетворены все вышеизложенные условия, за исключением того, что становится готов к работе другой поток с таким же самым приоритетом, то предыдущий поток освободит процессор после того, как истечет выделенный ему квант времени — таким образом, другой поток будет иметь шанс на обслуживание. Сравните с диспетчеризацией FIFO.
Клиент (client)
Архитектура обмена сообщениями в ЗОСРВ "Нейтрино" имеет клиент-серверную структуру. Клиент является тем, кто запрашивает услугу у определенного сервера. Обычно клиент запрашивает услуги, используя функции, ориентированные на работу со стандартными файловыми дескрипторами (например, lseek()). Эти функции являются синхронными в том отношении, что вызов, сделанный клиентом, не возвращает ответ до тех пор, пока не будет завершена обработка запроса сервером. Любой поток может являться одновременно и клиентом, и сервером.
КПДА
Четырехбуквенный код предприятия, присвоеный уполномоченной организацией для маркировки технической документации ООО «СВД Встраиваемые Системы». Входит в состав буквенно-цифрового кода (так называемого «децимального номера»), идентифицирующего программный, конструкторский или технологический документ ООО «СВД Встраиваемые Системы». Например, формуляр ЗОСРВ "Нейтрино" имеет обозначение (децимальный номер) КПДА.10964-01 30 01.
КПДА.10964-01
Децимальный номер ЗОСРВ "Нейтрино".
Менеджер ресурса, Менеджер ресурсов
см. "Администратор ресурса"
Мьютекс (mutex, от mutual exclusion — "взаимное исключение")
Объект, применяемый для упорядочения последовательности доступа потоков к ресурсу — так, чтобы к ресурсу, определяемому мьютексом, в конкретный момент времени имел доступ только один поток. Например, используя мьютекс всякий раз при обращении к некоторой переменной, вы гарантируете, что только один поток в данный момент времени имеет к ней доступ, тем самым предотвращая гонки. См. также атомарная операция.
Обмен сообщениями (message-passing)
ЗОСРВ "Нейтрино" имеет в своей основе модель обмена сообщениями, в которой все сервисы предоставляются синхронно, передачей сообщения от клиента к серверу и обратно. Клиент посылает сообщение серверу и блокируется. Сервер принимает сообщение от клиента, выполняет обработку запроса и затем отвечает на сообщение клиента, разблокируя его.
Обработчик прерывания (interrupt service routine)
Подпрограмма, которой ядро передает управление (в привилегированном режиме) в результате аппаратного прерывания. Эта подпрограмма не имеет права выполнять системные вызовы и должна обеспечить возврат управления как можно скорее, поскольку ее приоритет реально выше, чем у любого потока в системе. Обработчики прерываний в ЗОСРВ "Нейтрино" могут возвращать структуру типа struct sigevent, которая указывает, какое событие, если нужно, следует сгенерировать.
Ответить на сообщение (reply to a message)
Сервер отвечает на сообщение клиента, чтобы доставить клиенту результаты обработки его запроса.
Относительный таймер (relative timer)
Таймер с моментом истечения, определяемым как смещение от текущего момента времени, например, "через 5 минут". Сравните с абсолютным таймером.
Передать сообщение (send a message)
Поток может передавать сообщения другому потоку. Для передачи сообщения применяется семейство функций MsgSend*(); передаюший сообщение поток блокируется до тех пор, пока принимающий поток не ответит на это сообщение (см. обмен сообщениями). Поток, который передает сообщение, считается клиентом.
Периодический таймер (periodic timer, repetitive timer)
Абсолютный или относительный таймер, который после истечения времени отсчета автоматически перезагружается, и продолжает делать так до явной отмены. Полезен для приема регулярных уведомлений.
Поток управления, "нить" (thread)
Одиночный диспетчеризуемый поток управления. Реализация потоков обеспечивается непосредственно ядром ЗОСРВ "Нейтрино" и соответствует вызовам функций POSIX pthread_*(). Поток может быть синхронизирован с другими потоками (если таковые имеются) путем применения различных примитивов синхронизации, таких как мьютексы, условные переменные, семафоры и т.д. Потоки подвергаются диспетчеризации по типу FIFO или RR (карусельного типа).
Принять сообщение (receive a message)
Поток может принять сообщение, вызвав функцию MsgReceive() или MsgReceivev(). Если сообщений нет, поток заблокируется в ожидании сообщения (см. "обмен сообщениями"). Поток, который принимает сообщение, считается сервером.
Процесс (process)
Недиспетчеризуемый объект, занимающий память и вмещающий в себя один или более потоков.
Разблокировать (unblock)
Ранее заблокированный поток будет разблокирован, когда условие, на основе которого он был заблокирован, будет удовлетворено. Например, поток может быть заблокирован в ожидании сообщения. Как только ему будет послано сообщение, он будет разблокирован.
Семфор (semaphore)
Примитив синхронизации потоков, с которым асоциируется счетчик. Потоки могут вызывать функцию sem_wait(), и не будут при этом блокироваться, если в момент запроса счетчик имел ненулевое значение. Вызывая функцию sem_wait(), поток уменьшает значение счетчика. Если поток вызывает sem_wait() в тот момент, когда счетчик равен нулю, поток блокируется, пока некоторый другой поток не вызовет функцию sem_post(), увеличивая тем самым значение счетчика. Сравните с барьером.
Сервер, серверный процесс (server)
Сервер представляет собой обычный процесс, работающий в кольце пользователя и предоставляющий клиентам определенные сервисы (обычно на основе файловых дескрипторов). Серверы, как правило, являются администраторами ресурсов, и в составе ЗОСРВ "Нейтрино" есть библиотека функций, содержащая готовые реализации многих функциональных возможностей администраторов ресурсов. Работа сервера состоит в том, чтобы принимать сообщения от клиентов, обрабатывать запросы и затем отвечать на сообщения, тем самым разблокируя клиентов. Любой поток может одновременно являться и клиентом, и сервером.
Сигнал (signal)
Механизм, относящийся к ранним UNIX-системам, который применялся для посылки асинхронного уведомления о событиях от одного потока к другому. Сигналы не блокируют отправителя. Получатель сигнала может решить сам, обрабатывать ли сигнал синхронным способом, путем его явного ожидания. Сравните с импульсом.
Синхронный (synchronous)
Это понятие применяется для указания на то, что данная операция синхронизирована по отношению к другой операции. Например, в процессе обмена сообщениями, когда сервер выполняет MsgReply() для ответа клиенту, говорят, что деблокирование клиента синхронно по отношению к операции ответа. Сравните с определением асинхронный.
Соединение (connection)
Понятие, говорящее о подключении клиента к каналу. Соединение устанавливается либо непосредственно кли­ентом (вызовом функции ConnectAttach()), либо "третьей" стороной от имени клиента (в случае вызова библиотечной функции open()). В любом случае, возвращаемый идентификатор соединения пригоден для использования в качестве дескриптора для всех операций обмена данными между клиентом и сервером.
Условная переменная (condition variable)
Объект синхронизации, применяемый для множества потоков и характеризуемый как "точка встречи", в которой несколько потоков могут быть заблокированы в ожидании некоего сигнала (не путать с понятием сигнала в UNIX!). При поступлении сигнала один или более потоков разблокируются.
Физический адрес (physical address)
Адрес, который выставляется ЦП на шину, связанную с подсистемой памяти. Поскольку ЗОСРВ "Нейтрино" работает в режиме виртуальной адресации, это означает, что менеджер памяти должен транслировать виртуальные адреса, которые используются потоками, в физические адреса, пригодные для использования подсистемой памяти. Сравните с виртуальной адресацией и виртуальной памятью.
Фрагментация/дефрагментация сообщений (scatter/gathe)
Применяется для определения операций обмена сообщениями, в которой множество различных фрагментов собираются ядром (на стороне либо клиента, либо сервера) (дефрагментация), после чего сообщение разбивается на фрагменты (их может быть и другое число, нежели было при дефрагментации) с другой стороны (фрагментация). Эта операция чрезвычайно полезна, когда, например, необходимо добавить к данным клиента заголовок прежде, чем их отправят серверу. Клиенту в таком случае следует определить вектор ввода/вывода (IOV), который должен содержать указатель на заголовок и его длину в виде первого элемента, а также указатель на данные и их длину в качестве второго элемента. Тогда ядро "дефрагментирует" эти данные и перешлет их серверу как один непрерывный объект. Действия на стороне сервера будут аналогичными.
Аннулирование кэша (cache invalidating)
Процесс в компьютерной системе, при котором записи в кэше заменяются или удаляются. Аннулирование кеша можно использовать для отправки нового содержимого клиенту . Этот метод работает как альтернатива другим методам отображения нового содержимого для подключенных клиентов. Аннулирование осуществляется путем изменения данных приложения, что в свою очередь отмечает информацию, полученную клиентом, как устаревшую. После того, как кеш становится недействительным, если клиент запрашивает кеш, ему доставляется новая версия.
Отказ страницы (page fault)
Разновидность аппаратного исключения, возникающего в компьютере с виртуальной памятью на основе подкачки страниц в момент обращения к странице памяти, которая не включена блоком управления памятью в адресное пространство процесса. Обычной причиной отказа страницы является прямое обращение программы к странице, которой нет в памяти.
Аппаратный отказ страницы (major page fault)
Основной механизм, используемый операционной системой для выделения программам памяти по их запросу. Операционная система откладывает загрузку частей программы с диска до тех пор, пока программа не попытается получить доступ к ним и тем самым сгенерирует отказ страницы. По определению, аппаратные отказы страницы требуют физического ввода-вывода.
Программный отказ страницы (minor page fault)
Отказ страницы, при котором требуемая страница либо уже находится в оперативной памяти, но не отмечена в блоке управления памятью как загруженная, либо она вновь выделена и ещё ни разу не использовалась.




Предыдущий раздел: Базовые подсистемы ЗОСРВ «Нейтрино»