русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Проверка границы


Дата добавления: 2015-06-12; просмотров: 613; Нарушение авторских прав


Поле Границы дескриптора сегмента не дает программам выполнить адресацию вне сегмента. Действующее значение границы зависит от установки бита G (бит грануляции). Для сегментов данных граница также зависит от бита E (бит направления расширения сегмента). В качестве бита E назначается один из битов поля Типа при ссылках к дескрипторам сегментов данных.

Когда бит G очищен, граница сегмента равна значению 20-разрядного поля Границы дескриптора. В этом случае граница может изменяться в диапазоне от 0 до 0FFFFFH (2**20-1, или 1 мегабайт). Если бит G установлен, то процессор умножает значение поля Границы на масштабный коэффициент 2**12. В этом случае граница будет изменяться в диапазоне от 0FFFH (2**12-1, или 4K), до 0FFFFFFFFH (2**32-1, или 4 гигабайта).Отметим, что при использовании такого масштабирования, проверка границы для младших 12 битов адреса не выполняется; когда бит G установлен, а граница сегмента равна 0, допустимые значения смещения в сегменте лежат в диапазоне от 0 до 4095.

Для всех типов сегментов, за исключением сегментов, расширяемых вниз (т.е. стековых сегментов), значение границы на единицу меньше размера сегмента в байтах. Процессор генерирует исключение общей защиты в любом из следующих случаев:

  • Попытка доступа к байту памяти по адресу, превышающему границу сегмента.
  • Попытка доступа к слову памяти по адресу, превышающему границу сегмента
  • Попытка доступа к двойному слову памяти по адресу, превышающему границу сегмента

Для сегментов, расширяющихся вниз, граница служит для той же функции проверки, но интерпретируется иначе. В этом случае диапазон допустимых значений адреса определяется от (граница+1) до 2** 32-1. Сегмент с расширением вниз имеет максимальный размер при значении границы, равном 0. Контроль границы позволяет отлавливать такие программные ошибки, как неверно вычисленные индексы массивов и недопустимые указатели. Эти ошибки определяются сразу же, как только они произошли, поэтому идентификация вызвавшей их причины существенно упрощается. Без такого контроля границ указанные ошибки могут иметь следствием разрушение важных областей памяти в других модулях, а их существование невозможно обнаружить, пока не произойдет сбой в испорченном таким образом модуле, а такое событие может наступить намного позже, чем фактическая вызвавшая его ошибка. Защита позволяет блокировать такие ошибки и сообщить об их источнике.



В дополнение к проверке границ сегментов существует также проверка границ таблиц дескрипторов. Регистры GDTR и IDTR содержат 16-разрядное значение границы. Оно используется процессором для защиты программ от выбора дескриптора сегмента из области, лежащей вне данной таблицы. Граница таблицы дескрипторов идентифицирует последний допустимый байт этой таблицы. Поскольку каждый дескриптор имеет длину восемь байтов, таблица, содержащая до N дескрипторов, должна иметь значение Границы, равное 8N-1. Дескриптору может быть задано нулевое значение. Это относится к первому дескриптору в таблице GDT, который не используется. Хотя этот дескриптор может быть загружен в сегментный регистр, любая попытка ссылки к памяти при помощи этого дескриптора приведет к генерации исключения общей защиты.



<== предыдущая лекция | следующая лекция ==>
Проверка типа | Уровни привилегированности


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.114 сек.