...В реальном времени (Тема - Управление памятью Windows), страница 2

2017-07-08СтудИзба

Описание файла

Файл "...В реальном времени" внутри архива находится в папке "Тема - Управление памятью Windows". Документ из архива "Тема - Управление памятью Windows", который расположен в категории "". Всё это находится в предмете "прикладное программное обеспечение (ппо)" из 1 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "прикладное программное обеспечение (ппо)" в общих файлах.

Онлайн просмотр документа "...В реальном времени"

Текст 2 страницы из документа "...В реальном времени"

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

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

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

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

RTX – расширение реального времени для Windows NT.

Возможность использования Windows NT в качестве ОС реального времени.

В Windows NT доступ к прерываниям осуществляется из драйвера ядра, а сами прерывания обрабатываются в два этапа: сначала вызывается очень короткая Interrupt Service Routine (ISR), осуществляющая критическую обработку, основная обработка прерывания происходит в Deferred Procedure Call (DPC). Все DPC выполняются с одинаковым уровнем приоритета в порядке поступления (FIFO).

Bремя окончания обработки DPC оказывается зависимым непредсказуемым образом от наличия в системе других драйверов и их активности. Для систем с жестким детерминизмом необходимо точно знать максимальное время от момента возникновения прерывания до входа в процедуру обработки и гарантировать его не превышенее.

RTX - real-time расширение для Windows NT.

Одним из возможных решений является использование совместно с Windows NT подсистемы реального времени, исполняющейся на том же процессоре (если процессор один) или на выделенном процессоре(-ах) (если их несколько). Этот подход использован фирмой VenturCom в продукте RTX (Real Time Extension). Сущность подхода заключается в использовании модифицированного HAL (Hardware Abstraction Level). Изменять kernel Microsoft не разрешает, а исходный код HAL предоставляет своим партнерам, одним из которых является VenturCom.

После установки RTX стандартная NT Workstation или Server превращается в операционную систему реального времени с жестким детерминизмом (hard real-time). Сама NT об этом, правда, не подозревает. Ни ядро, ни исполняющая подсистема NT не были изменены. Подсистема реального времени видна из Windows NT, как еще один драйвер устройства. Схема функционирования RTX в составе Windows NT представлена на рисунке.

В системе появляется планировщик задач реального времени. Новый HAL по прерыванию от часов реального времени передает управление этому планировщику, который следит за очередью задач реального времени, находящихся в системе и выделяет им время в соответствии с приоритетом. В RTX существует 128 фиксированных приоритетов для задач реального времени. Если в очереди таких задач нет, то управление передается стандартному планировщику NT. При этом времена исполнения кодов модифицированного и оригинального HAL совпадают, т.е. присутствие RTX не сказывается на производительности Windows в отсутствие real-time процессов. Однако, если real-time процессы будут занимать все процессорное время, то Windows NT не получит управления и окажется подвешенной. В принципе, если данная ситуация не входит в планы разработчика, ее можно предупредить, установив в опциях настройки RTX "сторожевой" таймер, срабатывающий, если один поток занимает CPU больше определенного времени.



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

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

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

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

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

RtAllocateLockedMemory –

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

RtFreeLockedMemory –

высвобождает предварительно выделенный блокированный участок памяти.





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

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

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

#include <windows.h>

#include <stdio.h>

#include <rtapi.h>

static PVOID vAddress; // virtual memory address returned by

RtAllocateLockedMemory

void main(void) {

// Allocate memory

vAddress = RtAllocateLockedMemory(size);

if (!vAddress) {

printf("\nFailure on RtAllocateLockedMemory\t");

printf("Error=%d\n", GetLastError());

break; // if this fails - no use to continue

}

else {

printf("\nSuccess on RtAllocateLockedMemory\n");

printf("Virtual memory address = 0x%08X\n", vAddress);

// Write to the memory

*vAddress= 0;

}

// Free memory

if (!RtFreeLockedMemory(vAddress)) {

printf("\nFailure on RtFreeLockedMemory(0x%08X).\t",

vAddress);

printf("Error Code = %d\n", GetLastError());

}

else {

printf("Success on RtFreeLockedMemory(0x%X).\n",

vAddress);

}

ExitProcess(0);

}

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

Для предотвращения ошибок страниц и, следовательно, непредсказуемых задержек в критическом по времени участке кода, 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.

Использование функций блокирования процесса:

#include <windows.h>

#include <stdio.h>

#include <rtapi.h>

void main(void) {

DWORD dwSections = RT_PLOCK_ALL;

if (!RtLockProcess( dwSections)) {

printf("\nFailure on RtLockProcess.\t");

printf("Error=%d\n", RtGetLastError());

}

else {

printf("\nSuccess on RtLockProcess\n");

if (!RtUnlockProcess( dwSections)) {

printf("\nFailure on RtUnlockProcess.\t");

printf("Error=%d\n", RtGetLastError());

}

else {

printf("\nSuccess on RtUnlockProcess\n", i);

}

}

ExitProcess(0);

}

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 операций можно просто добавить физической памяти.

Использование функций блокирования ядра:

#include <windows.h>

#include <stdio.h>

#include <rtapi.h>

void main(void) {

DWORD dwSections = RT_KLOCK_ALL;

if (!RtLockKernel( dwSections)) {

printf("\nFailure on RtLockKernel.\t");

printf("Error=%d\n", RtGetLastError());

}

else {

printf("\nSuccess on RtLockKernel\n");

if (!RtUnlockKernel( dwSections)){

printf("\nFailure on RtUnlockKernel.\t");

printf("Error=%d\n", RtGetLastError());

}

else {

printf("\nSuccess on RtUnlockKernel\n");

}

}

ExitProcess(0);

}

Заключение.

Разные подсистемы среды представляют память так, как этого ожидают их приложения, все они опираются на систему виртуальной памяти исполнительной системы NT. Диспетчер виртуальной памяти Windows NT реализует изощрённую систему управления виртуальной памятью. Он предоставляет каждому процессу большой набор виртуальных адресов, защищая эту память от других процессов, но позволяя процессам эффективно совместно использовать память и предоставлять им большие возможности управления. Имея надлежащие права доступа, процесс также может работать с адресным пространством других процессов – это свойство используется подсистемами среды. Диспетчер виртуальной памяти предоставляет и такие богатые возможности, как проецирование файлов и выделение несмежных участков памяти. Подсистема Win32 делает многие средства виртуальной памяти NT доступными приложениями через свой 32-разрядный API.

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

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

Литература.

  1. Рихтер Дж. Windows для профессионалов. Третье издание. Microsoft Press /Русская редакция. 1997

  2. Custer H. Inside Windows NT. Second Edition. Microsoft Press. 1998.

  3. А. Калядин Windows NT для встраиваемых приложений. Открытые системы. N 2(28) 1998. Стр.15-18.

  4. А. Жданов Продолжая разговор о расширениях реального времени для Windows NT. Мир компьютерной автоматизации. N 2 1998. стр. 83-87

  5. А. Рыбаков, А. Жданов Windows NT во встраиваемых, промышленных и коммуникационных приложениях. PCWEEK, Russian Edition N 27-28(151-152) 14-27 июля 1998, стр. 28-29.

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5258
Авторов
на СтудИзбе
421
Средний доход
с одного платного файла
Обучение Подробнее