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

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

pthreads
Собирательное имя для набора вызовов функций pthread_*(). Подавляющее большинство этих вызовов определено стандартом POSIX и используется при работе с потоками.
Абсолютный таймер (absolute timer)
Таймер, истекающий в фиксированный момент времени, например, 20 января 2005 года в 9 часов 42 минуты по московскому времени (UTC+03:00 — Coordinated Universal Time плюс 3 часа). Сравните с определением относительного таймера.
Адаптивное партиционирование (adaptive partitioning)
Адаптивное квотирование ресурсов
В ЗОСРВ «Нейтрино» адаптивное партиционирование — это реализованный с помощью планировщика потоков механизм, позволяющий назначать квоту (минимальное количество ресурсов, называемое партицией) процессорного времени каждому множеству процессов или потоков. См. термин партиция.
Адаптивное планирование (adaptive scheduling)
Политика планирования, реализующая адаптивное партиционирование.
Администратор ресурсов (resource manager, resmgr)
Это серверный процесс, предоставляющий произвольному клиенту ряд строго определенных сервисов на основе файловых дескрипторов. Администратор ресурсов поддерживает некоторый ограниченный набор сообщений, которые соответствуют стандартным клиентским библиотечным функциям Си, таким как open(), write(), lseek(), devctl() и т.д. Предоставляемый сервис может быть как логическим (/dev/null), так и ассоциированным с оборудованием. Во многих ОС данные компоненты системы традиционно связаны с драйверами устройств. В ЗОСРВ «Нейтрино» не имеет специализированных интерфейсов к ядру, используя общие с прикладным кодом механизмы.
Аннулирование кэша (cache invalidating)
Процесс в компьютерной системе, при котором записи в кэше заменяются или удаляются. Аннулирование кеша можно использовать для отправки нового содержимого клиенту . Этот метод работает как альтернатива другим методам отображения нового содержимого для подключенных клиентов. Аннулирование осуществляется путем изменения данных приложения, что в свою очередь отмечает информацию, полученную клиентом, как устаревшую. После того, как кеш становится недействительным, если клиент запрашивает кеш, ему доставляется новая версия.
Аппаратный отказ страницы (major page fault)
Основной механизм, используемый операционной системой для выделения программам памяти по их запросу. Операционная система откладывает загрузку частей программы с диска до тех пор, пока программа не попытается получить доступ к ним и тем самым сгенерирует отказ страницы. По определению, аппаратные отказы страницы требуют физического ввода-вывода.
Асимметричное мультипроцессирование (AMP, ASMP, asymmetric multiprocessing)
Способ организации многопроцессорных систем, при котором на каждом CPU работает отдельная ОС или отдельный экземпляр одной и той же ОС. См. также определение симметричное мультипроцессирование.
Асинхронный (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)
Система виртуальной памяти — это система, в которой виртуальное адресное пространство может, но не обязательно, быть преобразовано на основе взаимно-однозначного соответствия с физическим адресным пространством (посредством аппаратного модуля MMU).
Виртуальный адрес (virtual address)
Адрес, которому не обязательно соответствует физический адрес. В ЗОСРВ «Нейтрино» все потоки работают в режиме виртуальной адресации, когда виртуальные адреса транслируются в физические при помощи MMU и менеджера памяти ядра. Сравните с понятиями физический адрес и виртуальная память.
Вызов ядра (kernel call, system call, syscall)
См. термин системный вызов.
Выравнивание (alignment)
Выравнивание — характеристика операции, при которой доступ к N-байтовому элементу данных должен выполняться только по адресу, кратному N. Например, чтобы обратиться к 4-байтовому целому числу, адрес этого целого числа должен быть кратным 4 байтам (например, Ox2304B008, а не Ox2304B009). В архитектуре некоторых процессоров (CPU) при попытке невыровненного доступа генерируется ошибка выравнивания (alignment fault). В архитектуре других процессоров (например, x86) невыровненный доступ осуществляется медленнее, чем выровненный доступ.
Вытеснение (preemption)
Совокупность действий планировщика в составе микроядра, приводящая к приостановке выполнения одного потока и возобновлению другого. В этом случае считается, что приостановленный поток был «вытеснен» новым потоком. Когда поток с более низким приоритетом активно потребляет CPU, а поток с более высоким приоритетом переходит в состояние READY, последний немедленно вытесняет его.
Дескриптор узла (nd, node descriptor)
Числовой идентификатор узла относительно текущего узла. Дескриптор узла каждого узла сам по себе равен 0 (ND_LOCAL_NODE). См. термины сетевая директория, домен узла, разрешение сетевых имён, Qnet и FQNN.
Динамическая линковка
Динамически слинкованный
Термин обозначает, что программа и библиотеки, от которых она зависит, не были объединены во время компиляции и последующей линковки и эта работа перенесена на этап исполнения.
Диспетчеризация FIFO (FIFO scheduling)
Дисциплина планирования FIFO (FIFO scheduling)
При диспетчеризации FIFO (First In — First Out) поток будет использовать процессор до тех пор, пока поток с более высоким приоритетом не перейдет в состояние готовности или пока поток добровольно не освободит процессор. Если не существует потоков с более высокими приоритетами и поток добровольно не освобождает процессор, он будет выполняться вечно. Сопоставьте с карусельной диспетчеризацией.
Домен узла (node domain)
Строка символов, которую сетевой менеджер Qnet прикрепляет к имени узла для формирования полностью определенное имя узла (FQNN). См. термины сетевая директория, домен узла, Qnet, разрешение сетевых имён, дескриптор узла и FQNN.
Загрузочный образ (image)
Структура, содержащая файлы, необходимые ЗОСРВ «Нейтрино» для выполнения загрузки ядра ОС. Данная структура сама по себе является файлом, архивирующим перечисленные сущности (см. dumpifs). См. также термины IPL, startup и buildfile.
Задержка планирования (scheduling latency)
Интервал времени, между переводом некоторого потока в состояние READY (обычно это вызвано деятельностью другого потока) и фактическим началом его выполнения со стороны CPU. Эта задержка почти всегда подконтрольна разработчику данной системы. Сравните с определением задержка прерывания.
Задержка прерывания (interrupt latency)
Время, прошедшее между генерацией аппаратного прерывания и первой командой, выполненной в контексте ISR. Сравните с определением задержка планирования.
ЗОСРВ
ЗОСРВ «Нейтрино»
Защищенная операционная система реального времени.
Идентификатор отправителя (receive ID)
Когда сервер принимает сообщение от клиента, функции сервера MsgReceive() или MsgReceivev() возвращают идентификатор отправителя (часто сокращенно в программах называемый rcvid). Этот идентификатор rcvid затем используется по отношению к заблокированному клиенту как дескриптор, позволяя серверу отправить клиенту ответ с данными, тем самым разблокировав его. После использования rcvid для ответа клиенту он перестает иметь значение для всех вызовов функций, кроме функции MsgDeliverEvent().
Идентификатор потока (Thread ID, TID)
Уникальный в пределах процесса идентификатор потока. TID является положительным целым числом, которое может быть использовано повторно после того, как поток-владелец умирает.
Идентификатор процесса (Process ID, PID)
Уникальный идентификатор, представляющий процесс. PID является положительным целым числом, которое может быть использовано повторно после того, как процесс-владелец умирает. Только менеджер процессов в составе микроядра имеет идентификатор процесса, равный 1.
Идентификатор соединения (Connection ID, COID)
Дескриптор, возвращаемый функцией ConnectAttach() (на клиентской стороне) и используемый для всех операций обмена данными между клиентом и сервером. Идентификатор соединения аналогичен дескриптору файла в терминах стандартной библиотеки языка Си. Иными словами, когда функция open() в ЗОСРВ «Нейтрино» возвращает дескриптор файла, реально возвращается идентификатор соединения.
Иерархический принцип обмена (send hierarchy)
Принятая в ЗОСРВ «Нейтрино» концепция, в силу которой отправляемые сообщения передаются в одном направлении, а ответы на сообщения — в другом. Основной целью реализации иерархического принципа обмена является необходимость исключения состояния взаимной блокировки потоков. Иерархический принцип реализуется назначением клиентам и серверам "уровней иерархии" и обеспечения того, чтобы сообщения передавались только на более высокий уровень иерархии. Это исключает ситуации взаимной блокировки, когда два потока посылают сообщения друг другу, потому что такая ситуация нарушила бы принцип — поток не должен отправлять сообщения другому, если тот находится на нижнем уровне иерархии.
Импульс (pulse)
Неблокирующее сообщение, получаемое аналогично обычному сообщению. Это сообщение является неблокирующим для отправителя; получатель же может ожидать его применением стандартных функций обмена сообщениями ( MsgReceive() и MsgReceivev()) или же, если необходимо ждать именно импульса, то при помощи функции MsgReceivePulse(). В то время как большинство сообщений обычно посылаются от клиента к серверу, импульсы обычно пересылаются в противоположном направлении, чтобы не нарушать иерархический принцип обмена (это вызвало бы взаимную блокировку). Сравните с определением сигнала. Импульс также часто используется в виде события, которое может быть возвращено таймером или ISR (см. MsgDeliverEvent()).
Инверсия приоритетов (priority inversion)
Явление, возникающее в случае, когда низкоприоритетный поток потребляет ресурсы CPU с более высоким приоритетом, чем должен. Это может быть вызвано отсутствием механизма наследования приоритетов, например, когда поток с более высоким приоритетом отправляет сообщение потоку с более низким. В этом случае низкоприоритетный серверный поток блокирует высокоуровневый поток и неявно исполняется от имени высокоприоритетного потока и на клиента оказывают влияние даже потоки с меньшими приоритетами (чьи приоритеты находятся между серверным и клиентским), что противоречит принципам исполнения в реальном времени.
Исходящий вызов ядра (kernel callout)
ЗОСРВ «Нейтрино» может быть настроена для функционирования на различных аппаратных средствах без необходимости в лицензии на исходный код. Для этого надо предусмотреть в начальном загрузчике возможность обработки исходящих вызовов ядра. Механизм исходящих вызовов ядра позволяет разработчику добавлять в систему свой код, "знающий" о специфике оборудования — например, как опрашивать контроллер прерывания о том, какое прерывание произошло, или о том, как настроить таймер на регулярную генерацию прерываний и т.п. Это очень подробно изложено в книге "Building Embedded Systems" ("Построение встраиваемых систем").
Канал (channel)
chid (Channel ID)
Абстрактный объект микроядра, через который сервер принимает сообщения. Это тот же самый объект, к которому клиент подключается, чтобы отправить сообщение серверу. При создании канала с помощью ChannelCreate() возвращается идентификатор канала ("Channel ID", сокращенно "chid") — тот самый идентификатор канала, который назначается администратором ресурса каждой объявляемой им точке монтирования. После соединения с каналом (см. использование chid в ConnectAttach()) поток может отправить сообщение используя MsgSend(). Для получения сообщений сервер может использовать MsgReceive(). Каналы и соединения идентифицируются внутри процесса небольшим целым числом.
Карусельная диспетчеризация (round robin (RR) scheduling)
Карусельная дисциплина планирования (round robin (RR) scheduling)
При карусельной диспетчеризации поток использует процессор до тех пор, пока либо не будет готов к работе поток с более высоким приоритетом, либо пока этот поток добровольно не освободит процессор, либо пока не истечет выделенный данному потоку квант времени. Если потоков с более высоким приоритетом нет, поток добровольно не освобождает процессор и не существует других потоков с тем же самым приоритетом, поток будет выполняться вечно. Если удовлетворены все вышеизложенные условия, за исключением того, что становится готов к работе другой поток с таким же самым приоритетом, то предыдущий поток освободит процессор после того, как истечет выделенный ему квант времени — таким образом, другой поток будет иметь шанс на обслуживание. Сравните с определением диспетчеризации FIFO.
Клиент (client)
Архитектура обмена сообщениями в ЗОСРВ «Нейтрино» имеет клиент-серверную структуру. Клиент является тем, кто запрашивает услугу у определенного сервера. Обычно клиент запрашивает услуги, используя функции, ориентированные на работу со стандартными файловыми дескрипторами (например, lseek()). Эти функции являются синхронными в том отношении, что вызов, сделанный клиентом, не возвращает ответ до тех пор, пока не будет завершена обработка запроса сервером. Любой поток может являться одновременно и клиентом, и сервером.
КПДА
Четырехбуквенный код предприятия, присвоенный уполномоченной организацией для маркировки технической документации ООО «СВД ВС». Входит в состав буквенно-цифрового кода (так называемого «децимального номера»), идентифицирующего программный, конструкторский или технологический документ ООО «СВД ВС». Например, формуляр ЗОСРВ «Нейтрино» имеет обозначение (децимальный номер) КПДА.10964-01.
КПДА.10964-01
Децимальный номер ЗОСРВ «Нейтрино».
Критическая секция (critical section)
Участок кода, который должен выполняться «последовательно» (т.е. только одним потоком в единицу времени). Самый простой способ защиты критической секции — синхронизация через мьютекс. См. термин мьютекс.
Модуль управления памятью (Memory Management Unit, MMU)
Аппаратный блок (обычно интегрированный с центральным процессором), который обеспечивает трансляцию виртуальных адресов в физические и может использоваться для реализации системы виртуальной памяти. В ЗОСРВ «Нейтрино» главным преимуществом применения менеджер памяти является возможность обнаружить момент, когда поток обращается к виртуальному адресу, который не отображен в адресное пространство соответствующего процесса.
Межпроцессное взаимодействие (Interprocess Communication, IPC)
Механизм взаимодействия двух процессов или потоков. Микроядро предлагает несколько форм IPC, в первую очередь собственный механизм обмена сообщениями, очереди и каналы сообщений, а также сигналы. См. термины POSIX, сообщение, клиент и сервер.
Менеджер ресурса
Менеджер ресурсов
см. термин администратор ресурсов
Мьютекс (mutex, от mutual exclusion — "взаимное исключение")
Объект синхронизации, применяемый для упорядочения последовательности доступа потоков к ресурсу — так, чтобы к ресурсу, определяемому мьютексом, в конкретный момент времени имел доступ только один поток. Например, используя мьютекс всякий раз при обращении к некоторой переменной, вы гарантируете, что только один поток в данный момент времени имеет к ней доступ, тем самым предотвращая гонки. Также см. термин атомарная операция. Обычно захват мьютекса (см. pthread_mutex_lock()) и его освобождение (см. pthread_mutex_unlock()) обрамляют код, который обращается к общим для нескольких потоков данным (зачастую это критическая секция). См. также критическая секция.
Наследование приоритетов (priority inheritance)
Способ защиты от инверсий приоритетов потоков, вызывающий повышение или понижение приоритетов серверных потоков до приоритета клиента, отправившего сообщение. Алгоритм также используется некоторыми примитивами синхронизации (например, с мьютексами). См. термины инверсия приоритетов и мьютекс.
Обмен сообщениями (message-passing)
ЗОСРВ «Нейтрино» имеет в своей основе модель обмена сообщениями, в которой все сервисы предоставляются синхронно, передачей сообщения от клиента к серверу и обратно. Клиент посылает сообщение серверу и блокируется. Сервер принимает сообщение от клиента, выполняет обработку запроса и затем отвечает на сообщение клиента, разблокируя его.
Обработчик прерывания (ISR, interrupt service routine, interrupt handler)
Подпрограмма, которой ядро передает управление (в привилегированном режиме) в результате аппаратного прерывания. Эта подпрограмма не имеет права выполнять системные вызовы и должна обеспечить возврат управления как можно скорее, поскольку ее приоритет реально выше, чем у любого потока в системе. Обработчики прерываний в ЗОСРВ «Нейтрино» могут возвращать структуру типа struct sigevent, которая указывает, какое событие, если нужно, следует сгенерировать.
Ответ на сообщение (reply to a message)
Сервер отвечает на сообщение клиента, чтобы доставить клиенту результаты обработки его запроса.
Отказ страницы (page fault)
Разновидность аппаратного исключения, возникающего в компьютере с виртуальной памятью на основе подкачки страниц в момент обращения к странице памяти, которая не включена блоком управления памятью в адресное пространство процесса. Обычной причиной отказа страницы является прямое обращение программы к странице, которой нет в памяти.
Относительный таймер (relative timer)
Таймер с моментом истечения, определяемым как смещение от текущего момента времени, например, "через 5 минут". Сравните с определением абсолютного таймера.
Партиция (partition)
Способ разделения процессорного времени, памяти, файловых ресурсов или ресурсов ядра с некоторой политикой минимального гарантированного использования. См. термин адаптивное партиционирование.
Передача сообщения (send a message)
Поток может передавать сообщения другому потоку. Для передачи сообщения применяется семейство функций MsgSend*(); передающий сообщение поток блокируется до тех пор, пока принимающий поток не ответит на это сообщение (см. термин обмен сообщениями). Поток, который передает сообщение, считается клиентом.
Периодический таймер (periodic timer, repetitive timer)
Абсолютный или относительный таймер, который после истечения времени отсчета автоматически перезагружается, и продолжает делать так до явной отмены. Полезен для приема регулярных уведомлений.
Полностью определенное имя узла (FQNN)
Уникальное имя, идентифицирующее узел в сети Qnet. FQNN состоит из имени узла и домена узла, соединенных вместе. См. термины сетевая директория, домен узла, Qnet, разрешение сетевых имён, дескриптор узла и FQNN.
Поток (thread)
Поток управления
Одиночный диспетчеризуемый поток управления. Реализация потоков обеспечивается непосредственно ядром ЗОСРВ «Нейтрино» и соответствует вызовам функций POSIX pthread_*(). Поток может быть синхронизирован с другими потоками (если таковые имеются) путем применения различных примитивов синхронизации, таких как мьютексы, условные переменные, семафоры и т.д. Потоки подвергаются диспетчеризации по типу FIFO или RR (карусельного типа).
Поток обработки прерываний
Поток, выполняющий пост-обработку прерывания при передаче управления из ISR. Поскольку ISR может вызывать очень ограниченное число функций API, а длительность нахождения в нём должна быть сведена к минимуму, обычно основная часть работы по обслуживанию прерываний должна выполняться в ассоциированном потоке. Один из вариантов пост-обработки: поток подключается к обработке прерывания (см. InterruptAttach() или InterruptAttachEvent()), а затем блокируется ( InterruptWait()) в ожидании IRQ.
Прерывание (IRQ, Interrupt Request)
Аппаратный запрос со стороны оборудования, выдаваемый периферийным устройством для указания того, что оно требует программного обслуживания. IRQ обрабатывается PIC-контроллером, который затем прерывает работу CPU, заставляя микроядро выполнять программу обработки прерываний (ISR).
Префикс (prefix)
Точка монтирования (mountpoint)
Префикс пространства имён (pathname prefix)
Часть пространства имен (путевое имя), которое закрепляет за собой некоторый менеджер ресурсов. С ним ассоциируется канал и на нем менеджер ожидает входящих сообщений клиентов.
Привилегии ввода-вывода (I/O privileges)
Особые права, которые позволяют потоку выполнять ассемблерные инструкции ввода-вывода и ряд других привилегированных функций. По умолчанию данный вид привилегий отключён, поскольку код, обладающий ими потенциально может нанести ущерб системе. Чтобы запросить данный уровень прав поток должен исполняться от имени пользователя root и вызвать ThreadCtl().
Принять сообщение (receive a message)
Поток может принять сообщение, вызвав функцию MsgReceive() или MsgReceivev(). Если сообщений нет, поток заблокируется в ожидании сообщения (см. термин обмен сообщениями). Поток, который принимает сообщение, считается сервером.
Программируемый контроллер прерываний (PIC, Programmable Interrupt Controller)
Улучшенный программируемый контроллер прерываний (APIC, Advanced Programmable Interrupt Controller)
Аппаратный компонент системы, который занимается маршрутизацией IRQ между периферией и конкретными ядрами CPU. Улучшенный контроллер отличается расширенным числом обслуживаемых источников прерываний. См. также IRQ и ISR.
Программный отказ страницы (minor page fault)
Отказ страницы, при котором требуемая страница либо уже находится в оперативной памяти, но не отмечена в блоке управления памятью как загруженная, либо она вновь выделена и ещё ни разу не использовалась.
Программное прерывание (software interrupt)
Аналог аппаратного прерывания (см. термин IRQ), но источником его является программное обеспечение.
Пространство имен (pathname space)
Дерево префиксов (prefix tree)
Внутренняя таблица менеджера процессов микроядра, характеризующая соответствие менеджеров ресурсов с их префиксами. Микроядро обслуживает поисковые и регистрационные запросы к пространству имен, что позволяет клиентским и серверным процессам находить друг друга и взаимодействовать в рамках стандарта POSIX и концепции UNIX-подобных систем "всё есть файл".
Процесс (process)
Недиспетчеризуемый объект, занимающий память и вмещающий в себя один или более потоков.
Разблокировать (unblock)
Ранее заблокированный поток будет разблокирован, когда условие, на основе которого он был заблокирован, будет удовлетворено. Например, поток может быть заблокирован в ожидании сообщения. Как только ему будет послано сообщение, он будет разблокирован.
Разрешение сетевых имён (name resolution, name resolver)
В сети Qnet разрешение — процесс, с помощью которого FQNN преобразуется в список адресов назначения, к которым транспортный протокол может обратиться. См. термины сетевая директория, домен узла, Qnet, дескриптор узла и FQNN.
Семфор (semaphore)
Примитив синхронизации потоков, с которым ассоциируется счетчик. Потоки могут вызывать функцию sem_wait(), и не будут при этом блокироваться, если в момент запроса счетчик имел ненулевое значение. Вызывая функцию sem_wait(), поток уменьшает значение счетчика. Если поток вызывает sem_wait() в тот момент, когда счетчик равен нулю, поток блокируется, пока некоторый другой поток не вызовет функцию sem_post(), увеличивая тем самым значение счетчика. Сравните с определением барьера.
Сервер (server)
Серверный процесс
Сервер представляет собой обычный процесс, работающий в кольце пользователя и предоставляющий клиентам определенные сервисы (обычно на основе файловых дескрипторов). Серверы, как правило, являются администраторами ресурсов, и в составе ЗОСРВ «Нейтрино» есть библиотека функций, содержащая готовые реализации многих функциональных возможностей администраторов ресурсов. Работа сервера состоит в том, чтобы принимать сообщения от клиентов, обрабатывать запросы и затем отвечать на сообщения, тем самым разблокируя клиентов. Любой поток может одновременно являться и клиентом, и сервером.
Сетевая директория (network directory)
Каталог в пространстве имен путей, реализованный сетевым менеджером Qnet. См. термины Qnet, домен узла, разрешение сетевых имён, дескриптор узла и FQNN.
Сетевое имя
Имя узла (nodename)
Уникальное имя, состоящее из строки символов, которая идентифицирует узел в сети Qnet. См. термины Qnet, домен узла, разрешение сетевых имён, дескриптор узла и FQNN.
Сигнал (signal)
Механизм, относящийся к ранним UNIX-системам, который применялся для посылки асинхронного уведомления о событиях от одного потока к другому. Сигналы не блокируют отправителя. Получатель сигнала может решить сам, обрабатывать ли сигнал синхронным способом, путем его явного ожидания. Сравните с определением импульса.
Симметричное мультипроцессирование (SMP, symmetric multiprocessing)
Способ организации многопроцессорных систем, при котором один экземпляр ОС управляет всей совокупностью CPU одновременно. См. также определение асимметричное мультипроцессирование.
Синхронный (synchronous)
Это понятие применяется для указания на то, что данная операция синхронизирована по отношению к другой операции. Например, в процессе обмена сообщениями, когда сервер выполняет MsgReply() для ответа клиенту, говорят, что деблокирование клиента синхронно по отношению к операции ответа. Сравните с определением асинхронного.
Символьный префикс (symbolic prefix)
Вид префикса, комбинацию точки монтирования и символьной ссылки. Подробнее см. статью Микроядро: менеджер процессов.
Системный вызов (kernel call, system call, syscall)
Интерфейсная функция микроядра операционной системы, доступная через системную библиотеку. Ее предназначение — переключение процессора с исполнения кода прикладного уровня в системный с целью привлечь ядро для выполнения задач, недоступных непривилегированному коду.
Событие (event)
Схема передачи уведомлений, используемая для информирования потока о возникновении определенного условия. События могут быть, например, сигналами или импульсами. Они также могут быть событиями разблокировки или уведомлениями о прерываниях (от таймеров и ISR соответственно). Событие может быть передано потоком, таймером, ядром или ISR. См. MsgDeliverEvent().
Соединение (connection)
Объект микроядра, характеризующий факт подключения клиента к каналу. Соединение устанавливается кли­ентом либо непосредственно (при вызове функции ConnectAttach()), либо "третьей" стороной от имени клиента (в случае вызова библиотечной функции open()). В любом случае, возвращаемый идентификатор соединения ("Connection ID", сокращенно "coid") пригоден для использования в качестве дескриптора для всех операций обмена данными между клиентом и сервером. Как только соединение установлено, клиенты могут отправлять через них сообщения с помощью MsgSendv(). Если несколько потоков процесса подключены к одному и тому же каналу, то будет использовано общее соединение. Каналы и соединения идентифицируются внутри процесса небольшим целым числом. Важно отметить, что соединения и файловые дескрипторы (FD) — это один и тот же объект микроядра. См. также термины канал, coid и FD.
Сообщение (message)
Посылка, состоящая из нескольких байт данных, передаваемая от одного процесса к другому. ОС не анализирует содержимое сообщения — полезная нагрузка имеет значение лишь для отправителя и получателя. Передача сообщений не только обеспечивает передачу данных между процессами, но также является одним из видов синхронизации. При отправке, получении и ответе на сообщение, потоки процесса претерпевают различные изменения своего состояния.
Статическая линковка
Статически слинкованный
Термин обозначает, что программа и библиотеки, от которых она зависит, были объединены в единый исполняемый файл во время компиляции и последующей линковки.
Точка монтирования (mountpoint)
См. термин префикс.
Условная переменная (condition variable)
Объект синхронизации, применяемый для множества потоков и характеризуемый как "точка встречи", в которой несколько потоков могут быть заблокированы в ожидании некоего сигнала (не путать с понятием сигнала в UNIX!). При поступлении сигнала один или более потоков разблокируются.
Файл построения образа ФС (buildfile)
Текстовый файл, содержащий инструкции для mkifs, определяющие содержимое загрузочного образа и стартовый скрипт. См. также термины IPL, startup и загрузочный образ, а также Файл построения образа ФС и Загрузочные образы.
Файловый дескриптор (FD)
Клиент должен открыть дескриптор файла менеджера ресурсов с помощью вызова функции open(). Он служит дескриптором, который клиент может использовать в последующих актах обмена сообщениями. Обратите внимание, что дескриптор файла — это тот же самый объект, что и идентификатор соединения (coid), возвращаемый функцией ConnectAttach().
Физический адрес (physical address)
Адрес, который выставляется ЦП на шину, связанную с подсистемой памяти. Поскольку ЗОСРВ «Нейтрино» работает в режиме виртуальной адресации, это означает, что менеджер памяти должен транслировать виртуальные адреса, которые используются потоками, в физические адреса, пригодные для использования подсистемой памяти. Сравните с виртуальной адресацией и виртуальной памятью.
Фрагментация/дефрагментация сообщений (scatter/gathe)
Применяется для определения операций обмена сообщениями, в которой множество различных фрагментов собираются ядром (на стороне либо клиента, либо сервера) (дефрагментация), после чего сообщение разбивается на фрагменты (их может быть и другое число, нежели было при дефрагментации) с другой стороны (фрагментация). Эта операция чрезвычайно полезна, когда, например, необходимо добавить к данным клиента заголовок прежде, чем их отправят серверу. Клиенту в таком случае следует определить вектор ввода/вывода (IOV), который должен содержать указатель на заголовок и его длину в виде первого элемента, а также указатель на данные и их длину в качестве второго элемента. Тогда ядро "дефрагментирует" эти данные и перешлет их серверу как один непрерывный объект. Действия на стороне сервера будут аналогичными.
Ядро (kernel, core)
Микроядро (microkernel)
Часть операционной системы, предоставляющая минимальные сервисы, используемые группой дополнительных взаимодействующих процессов, которые, в свою очередь, обеспечивают системные функции ОС более высокого уровня. В самом микроядре отсутствуют файловые системы, драйверы и многие другие службы, обычно ожидаемые от ядра ОС. Они являются необязательными процессами и могут быть по запросу как загружены, так и выгружены.
Initial Program Loader (IPL)
Программный компонент, который либо берет на себя управление вектором сброса процессора, либо является расширением BIOS. Этот компонент отвечает за настройку системы в пригодное для использования состояние, чтобы startup мог выполнить дальнейшую инициализацию. IPL написан на ассемблере и Си. См. также термины загрузочный образ, startup и buildfile.
POSIX (Portable Operating System Interface)
Стандарт POSIX
Стандарт IEEE/ISO. Этот термин является аббревиатурой от Portable Operating System Interface, где «X» указывает на «UNIX», на котором основан интерфейс.
Qnet
Собственная прозрачная распределенная сеть ЗОСРВ «Нейтрино». См. термины сетевая директория, домен узла, разрешение сетевых имён, дескриптор узла и FQNN.
startup
Программный компонент, который получает управление от первичного загрузчика или IPL и выполнен минимально необходимый объем инициализации. После сбора информации о системе модуль производит опциональную донастройку в объеме, достаточном для запуска ядра, и в конечном счете передает ему управление. Кроме того, в некоторых случаях здесь может производиться первичная настройка устройств периферии.
TLS (Thread Local Storage)
Локальное хранилище потока — частная область памяти, адресуемая независимо несколькими потоками.




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