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ч)

Часть II.

Функциональность RTX

Управление процессами и потоками

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

Использование процессов и потоков

Понятие процесса включает в себя адресное пространство, хэндлы объектов и один или несколько исполняемых потоков. Потоки используются, например, в качестве обработчиков прерываний и для обработки асинхронных, связанных с процессом событий, в контексте потока. Функционирование потоков и процессов в RTSS во многом аналогично Win32.

Использование процессов

Ниже кратко описывается работа процессов в RTSS и Win32 среде.

Процессы в RTSS подсистеме

Процесс, исполняющийся в RTSS, состоит из набора хэндлов объектов, адресного пространства процесса, по меньшей мере одного потока и исполняемого файла. При создании процесса RTSS выполняет следующие действия:

  • Загружает исполняемый файл, как драйвер
  • Выделяет процессу heap из non-paged kernel page pool
  • Создает основной поток
Процесс может быть запущен одним из следующих способов:
  • Загрузка в качестве драйвера устройства во время загрузки системы (используя утилиту RTSSrun)
  • Выполнение RTSS-программы из Win32
Процесс прекращает работы при одном из следующих условий:
  • Последний поток закончил работу
  • Один из потоков вызвал ExitProcess
  • Процесс убит утилитой RTSSkill
Максимальное число процессов, одновременно существующих в RTSS, равняется числу слотов RTSS-процессов, заданному в регистре (по умолчанию 10). RTSS-процесс не может использоваться в качестве объекта синхронизации.

Процессы в Win32 подсистеме

Процессы, выполняющиеся подсистеме Win32, начинают взаимодействовать с RTX, когда они вызывают функции RTAPI. Такой вызов связывает процесс с rtapi_w32.dll. После этого RTX может выделять ресурсы для этого процесса, изменять его приоритет и т.д. Число Win32 процессов, которое может взаимодействовать с RTX, непостоянно – оно зависит от конфигурации системы и свободных ресурсов.
 

Использование потоков

Функция CreateThread создает либо RTSS, либо Win32 поток, в зависимости от текущей исполняющей подсистемы процесса. Возвращаемый хэндл и ID потока действителен только в окружении, вызвавшем CreateThread. Например, Win32 процесс не может управлять приоритетом RTSS потока, потому что хэндл этого потока действителен только в RTSS подсистеме. Вы можете, однако, использовать средства межпроцессного взаимодействия (Inter-Process Communication,IPC), предоставляемые RTX – такие как mutex, semaphore, events и shared memory – для синхронизации и коммуникации между Win32 и RTSS процессами и потоками. См. раздел “Межпроцессное взаимодействие”.  

Объекты таймеры и прерывания

Объекты-таймеры и прерывания происходят от потоков, следовательно, хэндлы этих объектов действительны только в их собственной (Win32 или RTSS) среде. Аналогично, этими объектами можно управлять только из процессов в их собственной среде.

RTSS подсистема

Единицей исполнения в подсистеме RTSS является поток. Готовый к исполнению RTSS-поток получает приоритет над всеми Win32 потоками. RTSS-поток исполняется до тех пор, пока он не освободит CPU. Поток освобождает CPU, когда он:

  • Ожидает объекта синхронизации
  • Понижает собственный приоритет или повышает приоритет другого потока
  • Подвешивает (suspend) себя
  • Возвращается из процедуры обработки таймера или прерывания (относится только к потокам таймера и прерывания)
  • Вызывает функцию Sleep c аргументом 0
RTSS-потоки не могут быть использованы как объекты синхронизации. Первичный поток процесса имеет стек размером 8 KB. Можно указать размер стека созданных впоследствии потоков с помощью функции CreateThread.

Приоритеты потоков

В этом разделе описывается система приоритетов потоков в RTSS и Win32 подсистемах.  

RTSS подсистема

RTSS подсистема не имеет понятия классов приоритетов, поэтому потоки всех RTSS-процессов состязаются за процессорное время только на основании приоритетов потоков. Поток в RTSS может иметь один из 128 уровней приоритета. Потоки выполняются в соответствии с приоритетом, а потоки одного приоритета – по принципу FIFO (first in-first out). Потоки не квантуются по времени. Это означает, что исполняющийся поток будет выполняться, до тех пор, пока не освободит CPU или внешнее событие не подготовит поток с более высоким приоритетом. Планировщик RTSS использует протокол продвижения приоритета для предотвращения инверсии приоритетов.

Win32 подсистема

Win32 RTX программа начинает исполняться в real-time классе приоритета. RTX обеспечивает соответствие между приоритетами в Win32 и RTSS. Однако, планировщик Win32 не исключает инверсии приоритетов.

В таблице 1 показано, как имена приоритетов RTSS транслируются в приоритеты Win32 при вызове функции RtSetThreadPriority из Win32 программы.

Таблица 1.

RTSS Symbolic Priority Name RTSS Value Windows NT Symbolic Priority Name for Real-Time Priority Class Win32 Value
RT_PRIORITY_MIN 0 THREAD_PRIORITY_IDLE  16
RT_PRIORITY_MIN + 1  1 THREAD_PRIORITY_LOWEST 22
RT_PRIORITY_MIN + 2  2 THREAD_PRIORITY_BELOW_NORMAL 23
RT_PRIORITY_MIN + 3  3 THREAD_PRIORITY_NORMAL 24
RT_PRIORITY_MIN + 4  4 THREAD_PRIORITY_ABOVE_NORMAL 25
RT_PRIORITY_MIN+ 5 …+ 126  5…126 THREAD_PRIORITY_HIGHEST 26
RT_PRIORITY_MAX  127 THREAD_PRIORITY_TIME_CRITICAL 31

Например, вызов RtSetThreadPriority(Thread,RT_PRIORITY_MIN+1) преобразуется в SetThreadPriority(Thread, THREAD_PRIORITY_LOWEST)

Если Win32 программа вызывает RtGetThreadPriority(), возвращается real-time приоритет, указанный в вызове RtSetThreadPriority().

В таблице 2 показано, как преобразуются вызовы Win32 “set” и “get” в RTSS подсистеме.

Таблица 2.

Windows NT Symbolic Priority Name for Real-Time Priority Class Win32 Value RTSS Symbolic Priority Name Value
THREAD_PRIORITY_IDLE  16 RT_PRIORITY_MIN 0
THREAD_PRIORITY_LOWEST  22 RT_PRIORITY_MIN + 1 1
THREAD_PRIORITY_BELOW_NORMAL  23 RT_PRIORITY_MIN + 2 2
THREAD_PRIORITY_NORMAL  24 RT_PRIORITY_MIN + 3 3
THREAD_PRIORITY_ABOVE_NORMAL  25 RT_PRIORITY_MIN + 4 4
THREAD_PRIORITY_HIGHEST  26 RT_PRIORITY_MIN + 5 5
THREAD_PRIORITY_TIME_CRITICAL  31 RT_PRIORITY_MAX 127
 

Между THREAD_PRIORITY_IDLE и THREAD_PRIORITY_HIGHEST нет других уровней приоритетов. Если необходим более широкий набор приоритетов в этом диапазоне, надо использовать спектр приоритетов RTSS.

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

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