В этом разделе обсуждаются следующие вопросы:
Часто процессу требуется выделить дополнительную память. Функции выделения памяти, существующие в RTX, всегда выделяют блокированную (locked) память, исключая, таким образом, задержки, связанные с ошибками страниц (page faults).
API выделения памяти
Следующие функции служат для доступа к системе выделения памяти RTX:
Замечания по выделению памяти
Блокированная память всегда выделяется из non-paged пула памяти Windows NT. Этот пул памяти сравнительно мал и вскоре после загрузки системы становится фрагментированным в результате выделения памяти драйверам и другим подсистемам Windows NT. Чтобы избежать неудач при попытках выделить большой участок памяти, надо делать это сразу после загрузки и/или вообще минимизировать такие выделения.
В данном примере демонстрируется использование функций выделения блокированной памяти.
Для предотвращения ошибок страниц и, следовательно, непредсказуемых задержек в критическом по времени участке кода, real-time приложения должны блокировать данные и код в памяти, включая код и данные самой операционной системы.
API блокирования процессов
Следующие функции служат для блокировки памяти RTX процесса:
Замечания по программированию в RTSS подсистеме
По умолчанию, все процессы и объекты в RTSS подсистеме блокированы в физической памяти. Следовательно, выполнение RTSS процесса никогда не повлечет ошибку страницы. Вызов функций Rt*Lock (Process, Heap, Stack) в RTSS подсистеме всегда завершается успешно, но не влечет за собой никаких реальных действий.
Замечания по программированию в Win32 подсистеме
Любые процессы и службы Windows NT могут сбрасывать страницы на диск, если только явным образом не блокированы в физической памяти. Для того, чтобы real-time процесс не осуществлял такой сброс страниц, надо использовать функцию RtLockProcess.
В данном примере демонстрируется использование функций блокирования процесса.
API блокирования ядра
Следующие функции служат для доступа к RTX-службам блокирования ядра:
Замечания по программированию в RTSS подсистеме
По умолчанию, все процессы и объекты в RTSS подсистеме блокированы в физической памяти. Блокирование ядра Windows NT не повлияет на производительность RTSS процесса.
Замечания по программированию в Win32 подсистеме
В системах реального времени активно используются различные службы времени. Операционная система должна быть способна отслеживать текущее время, в точно определенное время запускать потоки на исполнение и приостанавливать потоки на точно определенный интервал.
Следующие части описывают:
Часы в RTX отсчитывают прохождение определенных интервалов времени.
API
Следующие функции служат для доступа к RTX-службам часов:
Значения часов возвращаются и устанавливаются в единицах 100 наносекунд и соответствуют числу прошедших единиц с 12:00 1 Января 1600.
Типы часов
Часы RTX в Win32 и RTSS подсистемах могут быть:
Часы CLOCK_1 обеспечиваются real-time HAL и имеют разрешение 1 миллисекунду. Потоки в Win32 и RTSS подсистемах могут, основываясь на этих часах, использовать таймеры с инкрементом в 1 миллисекунду.
Часы CLOCK_2 также обеспечиваются real-time HAL и имеют разрешение 1 микросекунду. Период таймеров, основывающихся на этих часах, переменный и может составлять 100, 200, 500 и 1000 микросекунд.
Период таймера HAL можно установить либо в контрольной панели “RTX settings”, либо в ключе реестра HKLM\System\CurrentControlSet\Control\RTX\HalTimerPeriod (и перезагрузиться).
Таймеры RTX являются скрытыми потоками-обработчиками, которые получают уведомление от RTSS о прохождении определенного интервала времени и вызывают процедуру-обработчик таймера, указанную при его создании.
При создании таймер ассоциируется с определенными часами в системе, по их отсчету срабатывает таймер. Таймер начинает отсчет после того, как был установлен. После того, как таймер сработал и процедура-обработчик возвратила управление, таймер может быть автоматически переустановлен. Таймеры, у которых интервал повторения установлен в 0, являются “одноразовыми” и выполняют процедуру-обработчик один раз. Таймеры, у которых установлен допустимый интервал повторения, будут выполнять процедуру-обработчик с заданным интервалом.
API
Следующие функции служат для доступа к RTX-службам таймеров:
Отношение к таймерам в Windows NT
Таймеры в RTX не являются объектами синхронизации. Это значит, что потоки не могут использовать Waifor.. функции с хэндлами RTX таймеров. Это отличает их от таймеров Windows NT, являющихся объектами, которые поток может ожидать или получать уведомление.
Программирование в Win32 и RTSS подсистемах
Если приложение должно информировать другие потоки о срабатывании таймера, оно должно использовать соответствующий объект уведомления (notification object) в процедуре-обработчике таймера.
Назад | Содержание | Вперед