- •Історична довідка
- •Характеристика й особливості мови
- •Алфавіт мови
- •Службові (зарезервовані) слова.
- •Структура програми мови Turbo Pascal
- •Процедури введення-виведення. Деякі вбудовані функції Турбо-Паскаля.
- •Функції числових параметрів.
- •Базові управляючі конструкції Турбо-Паскаля Оператори умовного переходу.
- •Оператори циклів у Паскалі
- •Концепція типів даних. Типи даних в мові Pascal
- •Дійсні типи
- •Бульовий (логічний) тип
- •Символьні і рядкові змінні
- •1. Символьний тип
- •2. Рядковий тип
- •Перерахований та обмежений типи
- •1. Перерахований тип
- •2. Обмежений тип
- •1. Поняття масиву. Одномірні масиви
- •2. Багатомірні масиви
- •3. Сортування і пошук
- •Множинний тип
- •Тип запис
- •Процедури і функції
- •Формальні і фактичні параметри. Механізм параметрів
- •Параметри - значення
- •Параметри-змінні
- •Безтипові параметри
- •Приведення типів.
- •Процедурні типи
- •Рекурсія Рекурсивні визначення
- •Рекурсивні підпрограми
- •Алгоритми з поверненням. Розв’язок задачі про рух коня
- •Алгоритми з поверненням. Розв’язок задачі про вісьмох ферзів
- •Модулі в Турбо Паскалі
- •Модуль crt
- •1. Керування екраном
- •2. Робота з клавіатурою
- •3. Інші можливості
- •Графіка в Турбо Паскалі
- •1. Включення і вимикання графічного режиму.
- •2. Побудова елементарних зображень
- •3. Виведення текстової інформації.
- •Файли в мові програмування Pascal
- •Установчі і завершальні операції
- •Операції введення-виведення
- •Обробка помилок введення-виведення
- •Переміщення по файлу
- •Спеціальні операції
- •Текстові файли
- •Двійкові файли
- •Статичні і динамічні змінні
- •Покажчики
- •Стан покажчика
- •Установка розмірів динамічної пам'яті
- •Сумісність і перетворення посилкових типів
- •Динамічні структури даних
- •Динамічні змінні: інші види списків, стек і черга.
- •1. Інші види списків
- •2. Стек і черга
- •Дерева і пошук у деревах
- •1. Визначення й описи структур даних
- •2. Алгоритми
- •Змішані таблиці
- •Об’єктно-орієнтоване програмування. Що таке об’єктно-орієнтоване програмування
- •Інкапсуляція
- •Спадкування
- •Віртуальні методи і поліморфізм
- •Конструктори, динамічні об'єкти і деструктори
- •Поля і методи: сховані і загальнодоступні
- •Системно- залежні розширення
- •Налагодження змінних
- •Оверлеї
- •Переривання і системні виклики
- •Доступ до пам'яті і портів
- •Перевизначення переривань
Оверлеї
Використання мови Turbo Pascal для програмуванні реальних задач у ряді випадків ускладнюється обмеженнями зв'язаними з розміщенням великих програм в оперативній пам'яті. У загальному випадку без використання спеціальних засобів максимальний розмір програми не може перевищувати обсяг вільної оперативної пам'яті.
З метою подолання цього природного обмеження в системі Turbo Pascal мається спеціальний механізм, що називається оверлейним. Застосування оверлейного механізму дозволяє розробляти великі і складні програми, розмір яких значно перевищує об’єм оперативної пам'яті.
Базовим принципом оверлейного механізму є представлення програми у виді сукупності фрагментів, що поперемінно займають ту саму область оперативної пам'яті. При необхідності виконання того чи іншого фрагмента він завантажується в оперативну пам'ять, витісняючи з неї фрагмент, що виконувався раніше.
Оверлейний механізм є відомим і найбільш поширеним методом подолання обмежень по оперативній пам'яті при відсутності в операційної системи засобів віртуалізації пам'яті. Крім системи Turbo Pascal, розвитий оверлейний механізм використовується, наприклад, при формуванні об'єктного коду в системі Сlіррег. Як правило, алгоритм розміщення і видалення оверлейних фрагментів реалізується спеціальним системним монітором, який розташовують в коді розроблювальної програми.
Природно, оверлейна програма буде виконуватися повільніше, ніж виконується (чи могла б виконуватися) еквівалентна їй звичайна програма, за рахунок часу підкачування оверлейних фрагментів. Однак це уповільнення є необхідною платою за виграш у загальному розмірі програми.
Засоби побудови оверлейних структур у мові Turbo Pascal досить прості для використання (зберігаючи в цьому відношенні загальний дух ясності і компактності мови Pascal), і базуються на наступних основних принципах.
-
Оверлейна програма повинна бути реалізована як керуюча (резидентна) частина, що постійно буде знаходитися в пам'яті, і декілька оверлейних фрагментів, коди яких будуть поперемінно завантажуватися в спеціальний оверлейний буфер в оперативній пам'яті, що автоматично виділяється між сегментом стека і динамічною областю пам'яті. За замовчуванням для оверлейного буфера вибирається мінімальний можливий розмір, але під час виконання програми його розмір може бути легко збільшений шляхом виділення додаткової області.
-
Оверлейні фрагменти повинні бути оформлені у виді МОДУЛІВ, з спеціальною директивою {$О+}.
-
Ніяких додаткових мовних конструкцій для оверлейного механізму не передбачено; усі засоби керування оверлеями зосереджені в системному модулі Overlay.
-
При трансляції оверлейної програми Turbo Pascal-компілятор працює в так: керуюча (не-оверлейна) частина програми оформляється у виді EXE-файлу; всі оверлейні частини (тобто коди модулів) об’єднуються у файл із тим же самим ім'ям, але з розширенням . OVR:
У сі звертання до оверлейних процедур і фуикцій повинні здійснюватися за допомогою далекого типу викликів. Для цього такі підпрограми (чи оверлейні модулі в цілому), а також основну програму необхідно компілювати з включеною директивою $F чи додавши після заголовка підпрограм службове слово far.
-
Основна частина оверлейнї програми повинна, зрозуміло, містити оператор uses, у якому перелічуються використовувані оверлейні модулі (у цьому ж описі можуть бути зазначені і не оверлейні модулі, використовувані програмою). Першим модулем в описі повинний бути зазначений системний модуль Overlay. Крім того, слідом за цим описом повинні розміщатися директиви компілятора, що вказують, які модулі з перерахованих в описі uses є оверлейними. Кожна така директива має вид:
{$О Ім'я_модуля}
Ім'я модуля в цій директиві повинне ідентифікувати дисковий файл із кодом оверлейного модуля. Допускається вказівка дисковода і/або адреси модуля. Розширення імені (. TPU) може бути опущено.
Помітимо, що з усіх системних модулів TurboPascal у якості оверлейного може бути використаний ТІЛЬКИ модуль Dos.
-
У тілі головної програми перед першим звертанням до якої-небудь оверлейної підпрограмі повинний бути виклик стандартної процедури OvrInit з модуля Overlay. Ця процедура ініціалізує підсистему керування оверлеями; єдиним її параметром є рядок з ім'ям файлу, у якому зібрані коди оверлейних модулів (ovr-файл).
Нижче приведений простий приклад оверлейної програми, що складається з головної програми і двох оверлейних модулів. Цей приклад входить у групу демонстраційних файлів стандартного постачання системи Turbo Pascal.
{$F+,O+} { директиви $F, $0 включені }
program OvrDemo;{ головна частина оверлейної
програми }
{ У uses-списку повинний бути зазначений модуль Overlay, a також оверлейні модулі; указівка модуля Crt показує, що в списку повинні бути усі використовувані в програмі модулі }
uses
Overlay, Crt, OvrDemol, OvrDemo2;
{$0 OvrDemol} { Вказівка оверлейних модулів з }
{$0 OvrDemo2} { числа зазначених у uses-списку }
begin
{ Використовуємо засоби модуля Crt }
TextAttr := White; ClrScr;
{ Ініціалізація системи керування оверлеями }
OvrInit('OVRDEMO.OVR')
if OvrResult <> 0 then
begin
Writeln('Помилка: ', OvrResult); Halt(l)
end;
{Коди процедур Writel і Write2, розташовані в оверлейних модулях, будуть при виконанні програми поперемінно завантажуватися в оверлейний буфер }
repeat
Writel; Write2 until
KeyPressed
end.
Файл OVRDEM01.PAS {$0+,F+} unit OvrDemol; interface procedure Writel; implementation procedureWritel; begin Writeln('Один. . . '); end; end. |
|
Файл OVRDEMO2.PAS {$0+,F+} unit OvrDemo2; interface procedure Write2; implementation procedure Write2; begin Writeln('Два. . .'); end; end. |