
- •2. Теневая память
- •6.Недостатки ms-dos и пути их преодоления
- •7.Структура conventional памяти
- •9. Обработчики 09h и 16h клавиатуры
- •10. Extended память
- •Expanded память
- •Upper память
- •14.Структура данных на магнитных дисках
- •15. Клавиатура. Scan-код
- •16. Распределение памяти в реальном режиме
- •Адресация озу при использовании сегментации в защищённом режиме
- •19. Hma память
- •Механизм страничной адресации
- •23.Тест клавиатуры
- •24. Прерывания bios
- •Преобразование логического адреса в физический при включённой страничной адресации
- •26. Исключения и их обработка
- •27. Управление клавиатурой
- •28. Приоритет обработки прерываний
- •Привилегии и защита программ
- •30.Механизм виртуальной памяти
- •31.Дескрипторы сегментных регистров
- •32.Кэш память
- •33.Таблицы локальных и глобальных дескрипторов
- •34.Cga, vga адаптеры
- •Характеристики vga адаптеров
- •35.Таблица дескрипторов idt
- •37.Шлюзы и их применение
- •38.Понятие дескриптора
- •39. Адаптер дисплея
- •40.Функции dos и bios для клавиатуры
- •41 Пять компонентов защиты
- •42.Виртуальный 8086
- •43.Классы приоритетов
- •44.Многозадачный режим. Статические и динамические наборы
- •45.Шлюз задач
- •46. Библиотеки dll
- •Явная компоновка
- •47.Виртуальная память процессора
- •48.Адресное пространство w9х
- •49.Адресное пространство nt
- •51. Файл подкачки страниц
- •52. Два процесса – один ехе файл.
- •53. Физическая память и страничный файл
- •Физическая память в страничном файле не хранится
- •54. Алгоритм загрузки программ
- •56. Переданная и зарезервированная память
- •57.Разделы ехе файла
- •58. Проецируемые в память файлы
- •59.Механизмы работы с файлами больших размеров
- •60. Различия в обработке прерываний и исключений
59.Механизмы работы с файлами больших размеров
Спроецировать на адресное пространство размером 4 Гб файл длиной 18 ЕВ нельзя. Придется проецировать не весь файл, а его представление, содержащее лишь небольшую часть данных. Вы начнете с того, что спроецируете представление самого начала файла. Закончив обработку данных в этом представлении, отключите его и спроецируете представление следующей части файла — и так, пока не будет обработан весь файл. Конечно, это делает работу с массивными файлами, проецируемыми в память, не слишком удобной, но утешимся тем, что длина большинства файлов намного меньше 4 Гб.
Система позволяет проецировать сразу несколько представлений одних и тех же файловых данных. Например, можно спроецировать в представление первые 10 Кб файла, а затем — первые 4 Кб того же файла в другое представление. Пока Вы проецируете один и тот же объект, система гарантирует когерентность (согласованность) отображаемых данных. Скажем, если программа изменяет содержимое файла в одном представлении, это приводит к обновлению данных и в другом. Так происходит потому, что система, несмотря на многократную проекцию страницы на виртуальное адресное пространство процесса, хранит данные на единственной странице оперативной памяти. Поэтому, если представления одного и того же файла данных создаются сразу несколькими процессами, данные по-прежнему сохраняют когерентность — ведь они сопоставлены только с одним экземпляром каждой страницы в оперативной памяти. Все это равносильно тому, как если бы страницы оперативной памяти были спроецированы на адресные пространства нескольких процессов одновременно
Файлы с доступом “только для чтения” не вызывают проблем с когерентностью — значит, это лучшие кандидаты на отображение в память. Ни в коем случае не используйте механизм проецирования для доступа к записываемым файлам, размещенным на сетевых дисках, так как система не сможет гарантировать когерентность представлений данных. Если один компьютер обновит содержимое файла, то другой, у которого исходные данные содержатся в памяти, не узнает об изменении информации.
60. Различия в обработке прерываний и исключений
Для определения адресов обработчиков прерываний в защищенном режиме используется дескрипторная таблица прерываний IDT (Interrupt Descriptor Table ), расположение которой определяется содержимым специального системного регистра. Эта таблица содержит дескрипторы специальных типов - шлюзы прерываний, шлюзы исключений и шлюзы задач. Шлюз прерываний содержат не только логический адрес обработчика прерывания, но и поле доступа. Программа может вызвать прерывание только в том случае, если она имеет для этого достаточный уровень доступа. Таким образом, операционная система, работающая в защищенном режиме, может запретить прикладным программам вызывать некоторые или все программные прерывания.
Для обработки прерываний в реальном режиме процессор использует таблицу векторов прерываний. Эта таблица располагается в самом начале оперативной памяти, т.е. её физический адрес - 00000.
Таблица векторов прерываний реального режима состоит из 256 элементов по 4 байта, таким образом её размер составляет 1 килобайт. Элементы таблицы - дальние указатели на процедуры обработки прерываний. Указатели состоят из 16-битового сегментного адреса процедуры обработки прерывания и 16-битового смещения. Причём смещение хранится по младшему адресу, а сегментный адрес - по старшему.
Когда происходит программное или аппаратное прерывание, текущее содержимое регистров CS, IP а также регистра флагов FLAGS записывается в стек программы (который, в свою очередь, адресуется регистровой парой SS:SP). Далее из таблицы векторов прерываний выбираются новые значения для CS и IP, при этом управление передаётся на процедуру обработки прерывания.
Перед входом в процедуру обработки прерывания принудительно сбрасываются флажки трассировки TF и разрешения прерываний IF. Поэтому если ваша процедура прерывания сама должна быть прерываемой, вам необходимо разрешить прерывания командой STI. В противном случае, до завершения процедуры обработки прерывания все прерывания будут запрещены.
Завершив обработку прерывания, процедура должна выдать команду IRET, по которой из стека будут извлечены значения для CS, IP, FLAGS и загружены в соответствующие регистры. Далее выполнение прерванной программы будет продолжено.
Что же касается аппаратных маскируемых прерываний, то в компьютере IBM AT и совместимых с ним существует всего шестнадцать таких прерываний, обозначаемых IRQ0-IRQ15. В реальном режиме для обработки прерываний IRQ0-IRQ7 используются вектора прерываний от 08h до 0Fh, а для IRQ8-IRQ15 - от 70h до 77h.
Для обработки особых ситуаций - исключений - разработчики процессора i80286 зарезервировали 31 номер прерывания. Перед тем, как передать управление обработчику исключения, для многих зарезервированных прерываний процессор помещает в стек 16-битовый код ошибки. Этот код ошибки программа может проанализировать и тем самым получить некоторую дополнительную информацию об ошибке.
Формат кода ошибки процессора i80286.Поле индекса содержит индекс дескриптора, при обращении к которому произошла ошибка. Поле I, равное 1, означает, что этот индекс относится к таблице IDT. В этом случае произошла ошибка при обработке прерывания или исключения. Если бит I равен 0, поле TI выбирает таблицу дескрипторов (GDT или LDT) по аналогии с соответствующим полем селектора. Бит EXT устанавливается в том случае, когда ошибка произошла не в результате выполнения текущей команды, а по внешним относительно выполняемой программы причинам. Коды ошибок включаются в стек не для всех исключений. Программа сможет проанализировать этот код только для следующих исключений: 1) 08h - двойная ошибка; 2)0Ah - недействительный TSS; 3) 0Bh - отсутствие сегмента в памяти; 4) 0Ch - исключение при работе со стеком; 5)0Dh - исключение по защите памяти. При обработке прерываний в защищённом режиме является свойство повторной запускаемости исключений. Пусть в нашей системе реализована виртуальная память. Программа в некоторый момент времени обратилась к отсутствующему в оперативной памяти сегменту, выдав какую-либо команду. Возникло исключение 0Bh - отсутствие сегмента в памяти. Обработчик этого исключения, входящий в состав операционной системы выполнил свопинг соответствующего сегмента в оперативную память. Дальше повтор выполнения прерванной команды. Это можно сделать, так как для всех повторно запускаемых исключений (кроме 03h - прерывание по точке останова и 04h - переполнение) в стек включается адрес не следующей за прерванной командой, а адрес первого байта команды, которая вызвала исключение. Выполнив команду IRET, программа обработки исключения вновь передаст управление прерванной команде. Свойством повторной запускаемости обладает большинство зарезервированных прерываний, кроме следующих: 1)01h - прерывание для пошаговой работы;
08h - двойная ошибка;
09h - превышение сегмента сопроцессором;
0Dh - исключение по защите памяти;
10h - исключение сопроцессора.