|
| ||||||||||||
| ||||||||||||
Управление памятьюВ этом разделе обсуждаются следующие вопросы: Выделение системной памятиЧасто процессу требуется выделить дополнительную память. Функции выделения памяти, существующие в 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) в процедуре-обработчике таймера. Назад | Содержание | Вперед |
|
CITForum © 1997–2025