Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Бесплатный конструктор сайтов и 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ч)

Управление перегрузками (starvation)

В этом разделе рассматривается сторожевой таймер RTX (watchdog timer) и техника программирования, которая позволит избежать ситуации перегрузки.  

Сторожевой таймер

Ситуация, когда единственный RTSS-поток полностью владеет CPU, чаще всего возникает в результате логической ошибки в программе (что бывает на стадии разработки). Когда единственный RTSS-поток полностью владеет CPU на однопроцессорной системе функционирование Windows NT прекращается. В системе с несколькими процессорами Windows NT продолжает работь, но не может остановить RTSS-поток, владеющий CPU, из-за того, что потоки Service Request Interrupt (SRI) менеджера, имеющие более низкий приоритет, не запустятся.

Работа со сторожевым таймером

Для вышеописанной ситуации можно использовать сторожевой таймер RTX (watchdog timer). При каждом прерывании от таймера (обычно такие прерывания разрешены) этот таймер проверяет, не исполняется ли один и тот же поток (за исключением Windows NT idle thread). При срабатывании сторожевого таймера поток-нарушитель будет остановлен, появится окошко с сообщением о возникшей ошибке, и возобновится нормальная работа Windows NT. Для выгрузки остановленного процесса можно использовать утилиту RTSSkill.

Установка периода сторожевого таймера

Можно устанавливать т.н. Starvation Time Out период (период сторожевого таймера) из контрольной панели RTX или с помощью ключа

	HKLM\System\CurrentControlSet\Control\RTX\StarvationTimeOut

в регистре и последующей перезагрузки.

Значения для ключа:

0 – запрет сторожевого таймера
N – (миллисекунд) разрешает сторожевой таймер и устанавливает период (обычно период составляет несколько секунд или десятков секунд).

Замечания по программированию

Программа может вести себя правильно, но все же иметь один или несколько потоков, которые на определенные промежутки времени занимают CPU. В таких случаях, в этих промежутках Вы можете периодически выделять небольшие отрезки времени для работы Windows NT. Это может потребоваться, например, для того, чтобы Windows NT очистила буфер RS232 UART, обслужила сетевые запросы, совершила дисковые операции, переместила указатель мыши или отобразила что-либо в GUI. Т.к. реально требуемое поведение может быть очень сложным, бессмысленно требовать, чтобы RTX непосредственно управлял выделением Windows NT временных отрезков.

Можно легко справиться с этой ситуацией, создав обработчик таймера, который периодически подвешивает владеющие CPU поток(и) на короткий промежуток времени. Рассиотрим, например, приложение, запускающее каждую секунду поток продолжительностью 100 миллисекунд. Можно подвешивать этот поток на 0.5 миллисекунд каждые 10 миллисекунд. Вообще, можно создать сколь угодно сложный или простой алгоритм для предотвращения перегрузки системы. Обычно пять процентов времени на работу системы является разумной начальной величиной. Затем можно измерять перегрузку и изменять алгоритм.

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

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

Потоки, исполняющиеся в RTSS подсистеме, всегда исполняются в режиме ядра. В то время, как ядро Windows NT не поддерживает операции с плавающей точкой, исполняющиеся в режиме ядра (такой код приводит к краху системы), RTX позволяет RTSS-потокам использовать FPU для операций с плавающей точкой.  

Разрешение поддержки плавающей точки в RTSS программах

Если Вы строите RTSS-программу с использованием NMAKE, Вы должны добавить следующую строчку к make-файлу перед строкой включения rtx.mak:

	RTSS_CRT = 1

Эта строка разрешает использование FPU, включая математические функции, использующие плавающую точку и printf с поддержкой плавающей точки.  

Выполнение RTSS-программ, использующих плавающую точку

Не нужно никаких специальных процедур для выполнения RTSS-программ, использующих плавающую точку. Программа может просто выдавать команды FPU и вызывать математические функции, использующие плавающую точку так же, как обычная Win32 программа.

Взаимодействие с драйверами ядра

В этом разделе рассматривается т.н. RTKAPI - Windows NT Driver Inter-Process Communication API. Функции, содержащиеся в нем, предназначены для доступа к механизму межпроцессного взаимодействия RTX из драйверов ядра Windows NT. Они похожи на функции, содержащиеся в RTAPI (например, RtkOpenSemaphore аналогична RtOpenSemaphore). Вы используете вызовы функций RTKAPI также, как функций RTAPI, но из драйверов NT. Все функции RTKAPI имеют префикс Rtk.

API

Ниже будут перечислены функции RTKAPI. Действие практически всех функций понятно из названий, поэтому описание не дается.

  • RtkCloseHandle
  • RtkCreateEvent
  • RtkCreateMutex
  • RtkCreateSemaphore
  • RtkCreateSharedMemory
  • RtOpenEvent
  • RtOpenMutex
  • RtkOpenSemaphore
  • RtkOpenSharedMemory
  • RtkPulseEvent
  • RtkReleaseMutex
  • RtkReleaseSemaphore
  • RtkResetEvent
  • RtkRtssAttach – “присоединяет” драйвер ядра NT к подсистеме RTSS
  • RtkRtssAttach -“отсоединяет” драйвер ядра NT от RTSS подсистемы
  • RtkSetEvent
  • RtkWaitForSingleObject

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

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

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

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

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

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

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

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

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

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

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

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

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

Новости мира 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
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...