Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Управление памятью

В этом разделе обсуждаются следующие вопросы:

Выделение системной памяти

Часто процессу требуется выделить дополнительную память. Функции выделения памяти, существующие в RTX, всегда выделяют блокированную (locked) память, исключая, таким образом, задержки, связанные с ошибками страниц (page faults).

API выделения памяти

Следующие функции служат для доступа к системе выделения памяти RTX:

RtAllocateLockedMemory –
выделяет блокированную память, которой соответствует физическая память, затем проецирует память в виртуальное адресное пространство процесса.
RtFreeLockedMemory –
высвобождает предварительно выделенный блокированный участок памяти.

Замечания по выделению памяти

Блокированная память всегда выделяется из non-paged пула памяти Windows NT. Этот пул памяти сравнительно мал и вскоре после загрузки системы становится фрагментированным в результате выделения памяти драйверам и другим подсистемам Windows NT. Чтобы избежать неудач при попытках выделить большой участок памяти, надо делать это сразу после загрузки и/или вообще минимизировать такие выделения.

В данном примере демонстрируется использование функций выделения блокированной памяти.

Блокировка системной памяти

Для предотвращения ошибок страниц и, следовательно, непредсказуемых задержек в критическом по времени участке кода, real-time приложения должны блокировать данные и код в памяти, включая код и данные самой операционной системы.

API блокирования процессов

Следующие функции служат для блокировки памяти RTX процесса:

RtLockProcess –
блокирует все pageable секции процесса в физической памяти.
RtUnlockProcess –
разблокирует секции виртуального адресного пространства процесса, блокированные ранее в физической памяти.
RtCommitLockProcessHeap –
блокирует кучу процесса.
RtCommitLockHeap –
блокирует указанную при вызове кучу.
RtCommitLockStack -
блокирует указанный при вызове стек.

Замечания по программированию в RTSS подсистеме

По умолчанию, все процессы и объекты в RTSS подсистеме блокированы в физической памяти. Следовательно, выполнение RTSS процесса никогда не повлечет ошибку страницы. Вызов функций Rt*Lock (Process, Heap, Stack) в RTSS подсистеме всегда завершается успешно, но не влечет за собой никаких реальных действий.

Замечания по программированию в Win32 подсистеме

Любые процессы и службы Windows NT могут сбрасывать страницы на диск, если только явным образом не блокированы в физической памяти. Для того, чтобы real-time процесс не осуществлял такой сброс страниц, надо использовать функцию RtLockProcess.

В данном примере демонстрируется использование функций блокирования процесса.

API блокирования ядра

Следующие функции служат для доступа к RTX-службам блокирования ядра:

RtLockKernel –
блокирует pageable участки ядра в физической памяти.
RtUnlockKernel –
разблокирует предварительно блокированные участки ядра Windows NT.

Замечания по программированию в RTSS подсистеме

По умолчанию, все процессы и объекты в RTSS подсистеме блокированы в физической памяти. Блокирование ядра Windows NT не повлияет на производительность RTSS процесса.

Замечания по программированию в Win32 подсистеме

  • Определенные компоненты Windows NT подвержены пэйджингу (pageable), включая большую часть ядра и подсистемы Win32. Для предотвращения задержек в работе real-time процесса, связанных с ошибками страниц, надо использовать функцию RtLockKernel.
  • Драйверы устройств в Windows NT обычно не осуществляют пэйджинг. Драйверы устройств, загружаемые во время загрузки системы, никогда не делают пэйджинг. Для того, чтобы система могла сбрасывать страницы драйвера, разработчик такого драйвера должен тщательно продумать его структуру и явным образом указать участки кода, которые можно сбрасывать. Из-за своей сложности такие драйверы встречаются редко.
  • Блокирование ядра Windows NT и процессов уменьшает пул доступной физической памяти. Это может кардинальным образом сказаться на производительности не real-time части системы. При необходимости для обеспечения желаемой производительности не real-time операций можно просто добавить физической памяти.
В данном примере демонстрируется использование функций блокирования ядра..

Использование часов и таймеров

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

Следующие части описывают:

  • Часы
  • Таймеры
  • Приостановку процессов (sleep)

Часы

Часы в RTX отсчитывают прохождение определенных интервалов времени.

API

Следующие функции служат для доступа к RTX-службам часов:

RtGetClockTime –
возвращает текущее значение указанных часов.
RtSetClockTime –
устанавливает значение указанных часов.
RtGetClockResolution -
возвращает разрешение указанных часов.
RtGetClockTimerPeriod –
возвращает минимальный период таймера для указанных часов.

Значения часов возвращаются и устанавливаются в единицах 100 наносекунд и соответствуют числу прошедших единиц с 12:00 1 Января 1600.

Типы часов

Часы RTX в Win32 и RTSS подсистемах могут быть:

  • CLOCK_1 (или CLOCK_SYSTEM)
  • CLOCK_2 (или CLOCK_FASTEST)

Часы 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-службам таймеров:

RtCreateTimer –
создает таймер, связанный с указанными часами. RtDeleteTimer – уничтожает ранее созданный таймер
RtCancelTimer –
прекращает срабатывание указанного таймера
RtSetTimer –
устанавливает абсолютное время срабатывания и интервал повтора для указанного таймера
RtSetTimerRelative -
устанавливает относительное время срабатывания и интервал повтора для указанного таймера

Отношение к таймерам в Windows NT

Таймеры в RTX не являются объектами синхронизации. Это значит, что потоки не могут использовать Waifor.. функции с хэндлами RTX таймеров. Это отличает их от таймеров Windows NT, являющихся объектами, которые поток может ожидать или получать уведомление.

Программирование в Win32 и RTSS подсистемах

Если приложение должно информировать другие потоки о срабатывании таймера, оно должно использовать соответствующий объект уведомления (notification object) в процедуре-обработчике таймера.

Назад | Содержание | Вперед

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...