- •Ижевский государственный технический университет
- •6. Оверлей 32
- •8.10. Стандартные библиотеки 52
- •Экзаменационные вопросы 52
- •1. Назначение системного программного обеспечения (спо)
- •Ос и языки программирования
- •2. Обслуживание ввода-вывода
- •2.1. Организация ввода-вывода
- •2.2 Способы управления пу Понятие драйвера пу
- •2.2.1. Синхронный ввод-вывод
- •2.2.2. Асинхронный ввод-вывод
- •2.2.3. Буферный ввод-вывод
- •3. Буферный обмен информацией в языках программирования.
- •4. Управление и доступ к оперативной памяти.
- •4.3. Управление реальной памятью
- •Разделы фиксированной длины
- •Использование разделов переменного размера
- •Использование перемещаемых разделов
- •Защита памяти
- •5. Библиотека dos
- •12. Прерывание 17h – работа с принтером
- •Функция 00h – прочитать время
- •6. Оверлей
- •6.1 Структура программного комплекса
- •6.2. Распределение памяти в оверлейной структуре
- •7. Встроенный в turbo pascal assembler
- •7.2. Режимы адресации в Ассемблере
- •7.4. Выражения для управления памятью
- •7.5.Выражения в Ассемблере
- •7.6. Команды Ассемблера
- •7.6.3. Команды ввода вывода
- •7.6.4. Адресные команды
- •7.6.7. Строковые команды
- •Test Аналогична команде and, но результат операции не записывается в 1 операнд.
- •Установить операнд:
- •8. Язык программирования с.
- •8.10. Стандартные библиотеки
- •Литература
- •Экзаменационные вопросы
- •На тему: название темы
- •Примечание: если курсовая работа выполняется двумя и более студентами, обязательно разбивка задач для каждого студента конкретно.
- •Состав пояснительной записки:
6. Оверлей
Оверлейной структурой под управлением ОС MS-DOS называется специальный комплекс программ позволяющий экономить оперативную память при выполнении программы. Под управление ОС Windows оверлей называется динамическими библиотеками.
Для того чтобы сделать оверлейную программу в Turbo Pascal пользователь должен осуществить 2 этапа:
Построить структурную схему программы.
Определить в главной программе использование библиотеки overlay и задать опции управления в программах.
6.1 Структура программного комплекса
Выделите процедуры которые участвуют в нескольких ветвях дерева.(G,F).Подпрограммы, которые повторяются в нескольких ветвях называются перекрестными ссылками. Во избежание ошибок они не должны участвовать в оверлейной структуре или могут быть вынесены на верхний уровень, т.е. переделать следующим образом:
Теперь после структурирования модулиB и E, C, D и I могут заменятся друг на друга. При этом длина загруженного модуля будет определятся по длине максимальной ветки оверлея.
Не следует путать перекрестные ссылки при построении оверлейной структуры с таблицей перекрестных ссылок, которая строится на этапе трансляции программы и содержит имена переменных и констант, употребляемых в программе и номера операторов, в которых появляются данные имена.
6.2. Распределение памяти в оверлейной структуре
При использовании оверлея особое внимание следует уделить публичным переменным, т.е. общим областям памяти, в которых хранятся данные в процессе выполнения подпрограмм. В нашем случае допускаются общие переменные для модуля A и всех других. Для модулей B и E, для модулей D и I. Для всех других модулей общих переменных быть не должно. Передача данных должна осуществляется через параметры переменные или возвраты функций.
Вообще, в других ОС (Unix) допускается несколько уровней оверлея. В нашем примере B, С и D могут быть расположены на одном уровне оверлея, а E и I – на втором уровне.
При программировании под ОС Windows в языках Visual C и Delphi пользователь не обязан строить структурную схему Достаточно задать соответствующую опцию транслятора, но проблема общих областей данных не снимается.
Если программа участвует в оверлее то первым утверждением должно быть {$O+}
Утверждение {O+} и короткая ссылка, т.е. модуль занимает меньше чем одну страницу, взаимно исключаются, т.е. общий объем оверлейной программы будет больше чем одна страница и после трансляции программы формируются 2 файла.
<N>.EXE
<N>.OVR
Не рекомендуется в головной программе отдавать процессам управление ввода-вывода ОС, т.е. {I+} не должно быть.
В процессе выполнения оверлея постоянно в оперативную память загружена общая область. А область оверлея изменяется в процессе выполнения программы. Поэтому время выполнения может увеличится и поэтому оверлейные процедуры не желательно очень быстро заканчивать.
6.3. Пример программы с использованием оверлея.
{$O+,F+} ставится в оверлейных модулях, обязательно включение длинной адресации между подпрограммами.
В обычных модулях допускается ставить О+, оверлейная структура будет построена, когда в головной программе будет использована библиотека overlay и описаны модули, входящие в оверлейную структуру.
Пример оверлейной программы
Первый модуль:
{$O+,F+}
unit ovrD1;
interface
procedure OvrDemo1;
implementation
procedure OvrDemo1;
begin
writeln(‘One…’);
end;
begin
end.
Второй модуль:
{$O+,F+}
unit ovrD2;
interface
procedure OvrDemo2;
implementation
procedure OvrDemo2;
begin
writeln(‘Two…’);
end;
begin
end.
Головная программа:
Program OvrDemo;
Uses Overlay,OvrD1,OvrD2,crt;
{далее описываем последовательность заменяемых модулей}
{$O OvrD1}
{$O OvrD2}
begin
OvrInit(‘OvrDemo.ovr’);
{строим оверлейную структуру на основе главного модуля, поетому в отличие от других главных модулей, утверждение programm для построения оверлейной структуры обязательно}
if ovrResult<>0 then
begin
writeln(‘Ошибка N’,ovrResulr);
halt(1);
end;
{если результат инициализации оверлея не равен 0, то выходим из программы с указанием кода ошибки}
{ Ошибки и их номера, могущие возникнуть при использовании оверлея:
-1 ошибка управления оверлея (как правило перекрестная ссылка)
-2 файл оверлея не найден
-3 нет памяти для буфера оверлея
-4 ошибка ввода-вывода оверлейного файла
-5 не загружен драйвер расширенной памяти, если оверлей использует расширенную память.
-6 нет свободной расширенной памяти.}
repeat
ovrDemo1;
ovrDemo2;
until KeyPressed;
end.