Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Использование перемещаемых разделов
Часто даже после объединения соседних свободных участков бывает так, что для очередного задания нет ни одного подходящего раздела, хотя сумма всей свободной памяти превышает требуемый объем. Эта проблема решается при помощи метода, называемого уплотнением памяти. После окончания каждого задания разделы перемещаются как можно дальше к одному концу памяти. В результате вся доступная память собирается в один свободный блок, который подходит для распределения новых разделов. Этот способ может привести к более эффективному использованию памяти по сравнению с тем, что достигается при помощи неперемещаемых разделов. Однако копирование заданий из одного места в другое может занять большое количество времени. К тому же могут возникнуть проблемы с переместимостью программ, поэтому применение перемещаемых разделов требует некоторой аппаратной поддержки. Для этого используют специальный регистр перемещения, устанавливаемый ОС и содержащий начальный адрес текущего задания. Во время операций контекстного перемещения программы содержимое этого регистра автоматически сохраняется или восстанавливается, а при перемещении программы на новое место его значение изменяется ОС. При любом обращении программы пользователя к памяти значение, содержащееся в регистре перемещения, автоматически складывается с адресом. Регистр перемещения управляется только ОС; пользовательской программе он недоступен. Защита памяти Вне зависимости от способа создания разделов, необходимо чтобы ОС и аппаратные средства обеспечивали защиту памяти. При выполнении задания в одном разделе необходимо, чтобы оно не меняло значения ячеек в других разделах или блоке размещения ОС. В литературе описаны два основных приема организации защиты. а) При помощи аппаратной поддержки вводятся два дополнительных граничных регистра, в которых будут содержаться начальный и конечный (или размер) адреса раздела текущего задания. Это регистры недоступны программам пользователя. ОС устанавливает граничные регистры, когда пользовательскому заданию назначается раздел. Во время операций контекстного переключения значения этих регистров автоматически сохраняется. Т.о. граничные регистры всегда содержат адреса начала и конца раздела, отведенному текущему активному процессу. При любом обращении к памяти аппаратура автоматически сверяет свой адрес, по которому идет обращение к памяти, с граничными регистрами. Если адрес находится вне раздела текущего задания, то обращение к памяти не производится и генерируется программное прерывание. б) При помощи ключей. Каждому блоку памяти ставится в соответствие, как правило, 4-х битовый ключ защиты памяти (следовательно существуют 24=16 вариантов ключей). Каждый пользовательский процесс имеет поставленный ему в соответствие 4-х битовый идентификатор процесса, который хранится в слове состояния. Когда заданию выделяется какой-нибудь раздел, ОС присваивает ключам всех блоков памяти внутри этого раздела значение идентификатора процесса этого задания. При каждом обращении пользовательского процесса к памяти аппаратура сравнивает идентификатор процесса с ключом защиты адресуемого блока. Если значения этих полей не совпадают, то обращение к памяти не происходит и генерируется программное прерывание .
БИБЛИОТЕКА DOS
5.1 Общая информация
Библиотека DOS предназначена для работы системными средствами операционной системы DOS версии 3.0 и выше.
Все основные процедуры и функции делятся на следующие разделы: 1. Работа с системным таймером 2. Работа с файлами 3. Работа с прерываниями 4. Работа с операционной системой
ПРЕРЫВАНИЕМ называется специальная программа, которая находится постоянно во время сеанса в операционной системе и используется в процессе обмена ЦП и периферийного устройства или исключительной ситуации при работе ЦП.
Прерывания делятся на 3 основные группы: 1) Прерывания платформы; 2) Прерывания операционной системы; 3) Пользовательские прерывания.
Примечание. Пользовательские прерывания разрешены в операционной системе MS DOS и Windows 9x. При использовании любых библиотек Turbo Pascal запрещено переопределять типы и использовать имена, совпадающие с именами или константами, входящими в библиотеку.
Группы констант. Атрибуты файлов. 1) Только для чтения. Установлен нулевой разряд. Значение 1 2) Скрытый файл. Установлен 1 разряд. Значение 2. 3) Системный файл. 2 разряд. Значение 4. 4) Метка тома - название диска, винчестера или дискеты. 3 разряд. Значение 8. 5) Директория (каталог). 4 разряд. Значение $10 (в шестнадцатеричной системе исчисления). 6) Архив. 5 разряд. Значение $20.
Другие разряды в MS DOS не используются.
Примечание. Архивный файл, как правило, относятся к любому файлу, за исключением метки тома и директории. Скрытый системный файл: значение =$6.
Типы. - Регистры центрального процессора
Type Registers = record Case Integer of 0:(AX, BX, CX, DX, BP, SI, DI, DS, ES, flags : word); 1:(AL, AH, BL, BH, CL, CH, DL, DH : byte) End;
- Структура для поиска файлов
SearchRec = record File:array [1..21] of byte; Attr:byte; {атрибут файла} Time:longint; {упакованное дата и время создания файла} Size:longint; {длина файла} Name:string[12] {имя (8 байт-имя, 3 байта - расширение)} End;
- Запись - распакованные дата и время
DateTime = record Year, Month, Day, Hour, Min, Sec:word End;
5.2. Регистры центрального процессора.
Первый процессор фирмы INTEL имел длину разрядной сетки 8 бит и только 10 регистров; начиная с процессора 8086i регисты стали иметь длину 16 бит; начиная с процессора 80386i регистры стали иметь длину 32 бита. Итак все регистры делятся на следующие группы: 1. Основные регистры. 2. Регистры статуса и управления вычислений. 3. Сегментные регистры.
5.2.1. Основные регистры:
1-ый регистр носит название А-регистр аккумулятор.
ЕАХ 31 15 АХ 0 0-7 регистр AL
8-15 регистр АН
Т. к. В ТР рассматриваются только команда 286 процессора, то для применения доступны только регистры AL,AH и АХ. В ТР в тексте ассемблера не рекомендуется употреблять индификаторы с именами регистров. В ассемблерном коде эти имена будут игнорироваться и обращение будет к регистрам центрального процессора. 1. Регистр базы: BH, BL, BX, EBX. 2. Регистр счетчика: CH, CL ,CX ECX. 3. Регистр данных: DH, DL, DX, EDX. 4. Указатель базы ВР: Base Point. В отличии от предыдущих регистров, регистр ВР 16-разрядный и не делится на младший и старший байты. 5. Индекс источника SI: 32-разрядный ESI. Структура аналогична (4). Как правило, данный регистр употребляется для хранения адреса массива, для хранения данных. 6. индекс приемника DI: EDI. Употребляется для хранения адреса массива, для выдачи данных. 7. Указатель стека: ESP Stack Pointer. Во встроенном ассемблере запрещается перепрограммировать данный регистр.
5.2.2. Регистры статуса и управления вычислений.
1. Регистр flags - 16-разрядный EFlags - 32-разрядный.
Для процессора 386. Статусные флаги: CF -перенос; PF-четность; AF -вспомогательный перенос: ZF-нуль; SF-знак; OF-переполнение; 2. Управление процессом вычисления. Используется для управления отладочным режимом. DF-декремент, увеличение. TF-ловушка. 3. Системные флаги: Устанавливаются в процессе выполнения следующих команд ассемблера. VM-виртуальный режим; RT-возобновление задачи; NT-вложенная задача; IOPL-уровень привилегии прерывания ввода-вывода; IF-флаг разрешения прерывания; В ТР во встроенном ассемблере из данной группы регистров анализируются только последние 2. CF-установлен в “1”, если в результате операции был перенесен разряд из старшего бита в результате операции. PF-установлен в “1”, если в результате операции получилось четное число. AF-аналогичен флагу CF, но устанавливается для двоичной и десятеричной арифметики. ZF-результат операции равен нулю. SP- установлен в “1” старший разряд в результате операции TF- установлен в “1” для отладочного режим только для процессоров 386 и выше. IF-если он установлен в “1”, то запрещены другие прерывания. DF-установлен в “1” если выполняется последовательность команд от старшего адреса к младшему. OF- установлен в “1” если произошел процесс 1 из старшего разряда, но не хватило разрядной сетки для результата вычсления. IOPL-хранит двубитный номер рапрв прерывания. Прерывания с максимальной рплыврпшр имеет номер 0,а с минимальной -3. NT- установлен в “1”, если программа выполняет программу, вызванную из другой программы. RT- установлен в “1”,если программист отменяет обработку особых ситуаций и возвращает управление программе. VM- установлен в “1” в режиме многозадачности. 4. Указатель команд IP: EIP. Служит для хранения адреса текущей выполняющейся команды, запрещенной для прерывания вообще.
5.2.3. Сегментные регистры.
Служат для хранения адресов основных частей программы. 1. CS-регистр - code segment - сегмент кода. Часть программы, в которой хранятся команды для выполнения. ECS - запрещен для программирования. 2. DS - data segment - сегмент данных. Хранит адрес начала данных в программном коде. 3. SS - stack segment - сегмент стека. ESS - запрещен для программирования. Дополнительные сегментные регистры: ES, FS, GS. Используются для дублирования соответствующих регистров.
5.3 Процедуры работы с файлами
Поиск файла в каталоге осуществляется с помощью процедуры FindFirst (Path:PathStr; Attr:byte; var F:SearchRec); {Path – путь к директории; Attr – атрибут файла; F – первый найденный файл.} Если файл не найден, то переменная DosError не равна 0. Следующий файл можно найти используя FindNext (var F:SearchRec); Процедуру можно использовать только после употребления FindFirst. Если дополнительных файлов нет, то переменная DosError не равна 0. Кроме этих двух процедур пользователь имеет возможность прочитать различные параметры о любом используемом в программе файле. !!!Файл предварительно должен быть назначен. Прочитать параметры (атрибут) файла. |
Последнее изменение этой страницы: 2019-04-19; Просмотров: 228; Нарушение авторского права страницы