Аpифметичнi задачi, Детальна інформація

Аpифметичнi задачi
Тип документу: Реферат
Сторінок: 7
Предмет: Математика
Автор: Олексій
Розмір: 14.1
Скачувань: 2252
- область векторiв (128К), яка забезпечує пам'ять для кожного тiла PRINT-iменi символа (64К) та числового двiйкового вектора кожного числа (64К).

- область вказiвникiв (256К), яка забезпечує пам'ять пiд 2 елементи-вказiвники, необхiднi для кожного cons-а та пiд D-код, необхiдний для визначення функцiї. Оскiльки cons є основною структурою даних Лiспу, область вказiвникiв є найбiльшою серед iнших.

- область стеку (64К), яка забезпечує пам'ять для контрольного стеку та змiнного стеку. Цi два стеки розташованi на протилежних кiнцях областi стекiв.

Таким чином для роботи iнтерпретатора muLisp необхiдно 512К плюс пам'ять пiд DOS.

Збiр смiття

MuLisp має алгоритм збору смiття з двома переглядами (помiтка та чистка). Пiд час першого перегляду пам'ятi помiчаються усi активнi об'єкти даних, доступ до яких забезпечується внаслiдок зчеплення за допомогою елементiв- вказiвникiв, починаючи з елементiв списку значень та властивостей усiх символiв системи, або зi стеку змiнних, або D-коду. Символи з автоматичним посиланням, якi не мають властивостей та поточних визначень функцiй, не помiчаються. Такi символи автоматично видаляються зi списку пiд час другого перегляду.

У процесi другого перегляду збору смiття усi помiченi об'єкти даних ущiльнюються та збираються в одному з кiнцiв вiдповiдної областi даних. Це дозволяє зберегти залишки областей даних для створення нових об'єктiв.

Перерозподiл областей даних

Пiсля збирання смiття однiй або декiльком з чотирьох областей даних може бракувати вiльної пам'ятi для того, щоб програми мали змогу продовжити виконання, незважаючи на те, що iншi областi даних мають достатню кiлькiсть вiльної пам'ятi. Якщо виникає така ситуацiя, то здiйснюється перерозподiл областей даних шляхом дiлення областей, додання пам'ятi, якої не вистачає, однiй або декiльком областям. Але обмеження на розмiри для кожної областi даних, якi описувались вище, мають бути дотриманими.

Отже, muLISP може реагувати на змiни вимог програм до розмiру областей даних.

Хоча збiр смiття та перерозподiл областей даних вiдбуваються автоматично, їхня поява не проходить непомiтно для користувача, оскiльки вони викликають коротку паузу в роботi програм.

Точна сума часу для збирання смiття й перерозподiлу залежить вiд кiлькостi даних в системi. Збiр смiття звичайно займає менше секунди. Точно так же, менше секунди звичайно вiдбувається й перерозподiл областей даних. В дiйсностi, це не повинно турбувати користувача, але при розробцi систем реального часу, що використовують muLISP, це питання необхiдно розглядати.

Явище, вiдоме як "thrashing" виникає в тому разi, коли система змушена витрачати непередбачену кiлькiсть часу на збiр смiття для дуже маленького повернення областi даних. Ознакою "thrashing" є значне зростання часу виконання даної задачi. Дана проблема може бути вирiшена шляхом збiльшення розмiру пам'ятi ЕОМ (до 512К) i (або) модификацiї програми з метою зменшення її вимог до пам'ятi.

Пакети переривань

Пакети переривань muLISP викликаються регулювальником переривань та регулювальником затримки помилок. Коли переривання виникає, то пiсля повiдомлення про переривання чи про помилку на екран дисплея видається пiдказка у виглядi опцiй:

Continue, Break, Abort, Top-level, Restart, System? Потiм система очiкує, допоки користувач обере одну з опцiй шляхом вказання її iменi (С,В,А,Т,R чи S вiдповiдно).

Вiдзначимо, що опцiї перерахованi в порядку посилення їхньої дiї.

- Continue (продовжити): повертає керування програмi, що викликала переривання. Якщо причиною переривання була команда переривання, послана з клавiатури, то виконання продовжується, нiби переривання не було.

Якщо переривання вiдбулося в результатi затримки помилки, величина, передана при перериваннi регулювальником помилок, повертається як значення помилкової функцiї;

- Break (зупинка): тимчасово призупиняє виконання програми й виходить на наступний нижнiй рiвень циклу "read-eval-print" ("читання-обчислення-друк"). Це дозволяє користувачевi перевiрити або (i) змiнити поточне середовище muLISP перед продовженням виконання програми. Для виходу з зупинки й вiдновлення роботи програми наберiть ( RETURN ) пiсля знаку долара;

- Abort (переривання): перериває виконання програми, присвоює формальним параметрам, розмiщеним в стеку змiнних, початковi значення й повертає керування на поточний рiвень циклу "read-eval-print". Визначення функцiй, значення властивостей та глобальних змiнних залишаються незмiнними;

- Тop-level (верхнiй рiвень): перериває виконання програми, присвоює початковi значення формальним параметрам, розташованим в стеку змiнних, висвiчує на консоль поточнi вхiднi й вихiднi данi (CIS та COS) й повертає керування верхньому рiвневi циклу "read-eval-print". Визначення функцiй, значення властивостей та глобальних змiнних залишаються незмiнними;

- Restart (повторний старт): закриває всi вiдкритi файли, вiдмовляється вiд поточного середовища muLISP та iнiцiює нову систему muLISP. Всi зв'язки мiж змiнними, функцiї та значення властивостей в поточному середовищi muLISP руйнуються;

- Sуstem (система): закриває всi вiдкритi файли, завершує виконання muLISP та повертає керування керiвнiй ОС.

Система переривань з консолi

У будь-який час у ходi виконання програми iнiцiйована користувачем система переривань з консолi може зупинити виконання програми й поверне керування на консоль.

Переривання з консолi iнiцiюється шляхом натиснення клавiшi 'ESC' на клавiатурi консолi. Якщо на клавiатурi немає клавiшi 'ESC', то символ переривання може бути з'енеровано шляхом натиснення клавiшi лiвої дужки ([) з одночасним натисненням клавiшi 'CTRL'.

Якщо ж i так не виходить, то символ для генерацiї переривань з консолi може бути змiнений шляхом модифiкацiї Default Readtable основної сторiнки muLISP.

При виникненнi переривання з консолi на екранi консолi висвiчується повiдомлення:

Console Interrupt Break: NIL

The online video editor trusted by teams to make professional video in minutes