Короткі теоретичні відомості

TURBOASSEMBLER фірми BORLAND (TASM) підтримує два синтаксичні стандарти або режими:

· MASM (по замовчуванню), сумісний з макроасемблером фірми Microsoft,

· IDEAL, режим синтаксису фірми Borland.

· В роботах буде використовуватися режим Ideal.

 

Розробка програми на мові асемблера включає чотири етапи.

Перерахуєте дисципліни обслуговування переривань; поясните, як FIFO (first-in-first-out). Найбільшпростималгоритмомзаміщеннясторінокєалгоритм FIFO. Цейалгоритмасоціюєзкожноюсторінкоючас, колицясторінкабулапоміщенавпам’ять. Длязаміщеннявибираєтьсянайбільшстарасторінка.

Врахуваннячасунеобов’язково, коливсісторінкивпам’ятізв’язанів FIFO-чергу, акожнасторінка, якапоміщаєтьсявпам’ятьдобавляєтьсявхвістчерги.

Алгоритм враховує тільки час надходження сторінки в пам’ять, але не враховує наскільки сторінка використовується. Наприклад, перші сторінки програми можуть містити змінні, які використовуються на протязі роботи всієї програми. Це призводить до негайного повернення до щойно заміщеної сторінки.

Оптимальний алгоритм. Цей алгоритм має найкраще співвідношення кількості заміщених сторінок до кількості посилань. Алгоритм будується за наступним принципом: заміщається та сторінка, наяку не було посилання на протязі найдовшого періоду часу. Для реалізації даного алгоритму необхідно кожен раз сканувати ввесь потік посилань, тому його не реалізують на практиці і використовується для оцінки реально працюючих алгоритмів.

Алгоритм LRU (leastrecentlyused). Алгоритм вибирає длязаміщення ту сторінку, на яку не було посилання на протязі найдовшого періоду часу. Він асоціює з кожною сторінкою час останнього використання цієї сторінки. Для заміщення вибирається та сторінка, яка не використовувалась довше за інші. Зазвичай застосовуються два підходи при використанні цього алгоритму:

- підхід на основі логічного годинника (лічильника) – асоціюють з кожним рядком таблиці поле „час використання”, а в CPU додається логічний годинник. Логічний годинник збільшує своє значення при кожному звертанні до пам’яті. Кожен раз, коли здійснюється посилання на сторінку, значення регістра логічного годинника копіюється в поле „час використання”. Заміняється сторінка з найменшим значенням в цьому полі шляхом сканування всієї таблиці сторінок. Сканування буде відсутнім, якщо використовується підхід на основі стеку;

- підхід на основі стека номерів сторінок – стек номерів сторінок зберігає номери сторінок, впорядкованих в відповідності з історією їх використання, на „вершині” стеку розміщена щойно використана сторінка, а на „дні” довше за всіх не використовувана сторінка. Як тільки здійснюється посилання на сторінку, вона переміщається на вершину стека, а номера всіх сторінок переміщуються вниз.

Алгоритм LFU (least freqently used). Цей алгоритм заміняє ту сторінку, яка використовується найменш частіше. Спосіб упорядкування схожий на LRU.

Також можливий випадковий вибір сторінки. Такий алгоритм називається random – замінюється сторінка, яка вибирається випадково.

В більшості сучасних ОС використовується дисципліназаміщення сторінок LRU, як сама ефективна. Так, саме ця дисципліна використовується в OS/2 і Linux. Але в такій ОС, як Windows NT, розробники, прагнучи зробити систему максимально незалежною від апаратних можливостей процесора, пішли на відмову від цієї дисципліни і застосували правило FIFO.

 

ЛАБОРАТОРНЕ ЗАВДАННЯ

 

1. Провести ассемблювання і компоновку програми Hello.asm з опціями, що передбачають використання відладчика TD. Повторити програму дослідження файла Hello.exe в режимі TD, згідно рекомендацій параграфа §5 роботи.

2 Зробити копії файлів програм Hello.asm і Mov.asm з іншими назвами з метою проведення експерименту з помилками ассемблювання. Виконайте ассемблювання з метою отримання лістинга: Tasm/l/n <file.asm>. Для вказаних файлів внесіть наступні помилки.

Hello.asm:

1. Пропустіть знак долара $ з завдання для змінної Promt.

2. Пропустіть двокрапку біля одної з міток.

3. Мітку Disp замініть на 1Disp

4. Mov ah,9 ® move ah,9

5. Пропустіть [] в стрічці з командою mov al,[ExCode]

Mov.asm:

1. Mov al,255 ® mov al,355

2. Mov [word bx],-2® mov [bx],-2

3. Mov ax,[bx+2] ® mov ax,[dx+2]

4. Додайте стрічки з командами:

· push 01234h

· mov [bx],[bx+si+w_x]

Текст програми Hello.asm

IDEAL

MODEL small

STACK 256

DATASEG

ExCode DB 0

Promt DB 'Ce persha polovina dnya?(yes/no)-[Y/N]$'

GoodMorning DB 13,10,'Dobriy ranok!',13,10,'$'

GoodAfternoon DB 13,10,'Dobriy den!',13,10,'$'

CODESEG

Start: mov ax,@data

mov ds,ax

mov dx,OFFSET Promt

mov ah,9

int 21h

mov ah,1

int 21h

cmp al,'Y'

jz IsAfternoon

cmp al,'y'

jz IsMorning

IsAfternoon: mov dx,OFFSET GoodAfternoon

jmp SHORT Disp

IsMorning: mov dx,OFFSET GoodMorning

Disp: mov ah,9

int 21h

Exit: mov ah,4ch

mov al,[ExCode]

int 21h

END Start

Вихідний результат

4.7) Чим забезпечується незалежність призначених для користувача програм від пристроїв вводу/виводу, підключених до комп'ютера?

 

Як відомо існує два основні режими роботи ведення/виведення: режим обміну з опитуванням готовності пристрою ведення/виведення та режим обміну з переривами. Розглунимо малюнок

    Нехай для спрощення управління ведення/виведення виконується центральним процесором. Центральний процесор посилає пристрою управління команду команди виконання деяких дій пристроїв ведення/виведення. Пристрій управління виконує команду, транслює сигнал, перетворюючи сигнали центрального процесора в зрозумілі для пристроїв ведення/виведення. Але швидкодія пристрою ведення/виведення набагато менша ніж центрального процесора. Тому сигнал готовності приходиться дуже довго чикати, постійно опитуючи стан сигнальної лінії на наявність чи відсутність сигналу. Відправлення нової команди, недолікувавшись сигналу готовності, немає змісту. Тому набагато вигідніше, видавати команду ведення/виведення, на час забути про пристрої ведення/виведення і перейти на виконання інших операцій. А поява сигналу готовності розглядається як запит на переривання від пристрою ведення/виведення. Саме цим сигналом готовності і є сигнал запиту на переривання.

    Режим обміну з перериванням являє собою режим асинхронного управління. Для того щоб втратити зв'язок з пристроймо, можна бути заданий певний інтервал часу, протягом якого пристрій повинен обов’язково виконати команду і видати сигнал на переривання. Максимальний інтерал часу, часто називають таймінгом. Якщо цей час пройшов після видачі пристроєм чергової команди, а пристрій так і не відповів, то видається сигнал про те, що зв'язок з пристроймо втрачений і управляти ним тбільше неможливо. Користувач і/або задача получають відповідне повідомлення.

    Драйвера які працюють в переривання представляють собою складний комплекс програмних модулів і можуть мати декілька секцій: секція запуску, одну або декілька секцій продовження і секцію завершення.

    Секція запуску ініціалізує операцію ведення/виведення. Ця секція запускається для включення пристрою ведення/виведення або для ініціалізації чергової операції ведення/виведення.

    Секція продовження виконує основну роботу по передачі даних. Ця секція по суті є основним обробником переривання. Використовуваний інтерфейс може потребувати для управління ведення/виведення декількох послідовних виконавчих команд, а сигнал переривання у пристрою, як правило, тільки один. Тому після виконання чергової секції переривання супервізор переривання при наступному сигналі готовності повинен передати управління іншій секції. Це робиться за рахунок зміни адреси обробки переривання після виконання чергової секції, якщо ж є лише одна секція переривання, то вона сама передає управління тому абоа іншому модулю обробки.

    Секція закінчення переважно виключає пристрій ведення/виведення або просто завершує операцію.

    Управління операціями ведення/виведення в режимі переривання потребує більше усиль з сторони системних програм – такі програми створювати складніше, ніж ті, що працюють в режимі опитування готовності. Прикладом цьому може бути ситуація з драйверами, які забиспечують друк. Так в ОС Windows 9x/NTдрайвера друку через паралельний порт працювали не в режимі з перериванням, як це зроблено в інших ОС, а в режимі опитування готовності, що приводило до 100%-го завантаження центрального процесора на весь період друку. При цьому, звичайно, виконуються і інші задачі, запущені на виконання, але виключно за рахунок того, що ОС Windowsреалізує витискаючи мультизадачність і час відчасу перериває процеси управління друку і передає центральний процесор іншим задачам.

 

5.7) Що таке POSIX? Якими перевагами володіють програми, створені з використанням тільки стандартних функцій, передбачених POSIX?

 

POSIX (Portable Operating System Interface for uniX) — набір стандартів, які описують інтерфейси між операційною системою та прикладною програмою. Стандарт створений для забезпечення сумісності різних UNIX-подібних операційних систем та портованості прикладних програм на рівні вихідного кодуприкладних програм.

 

Склад

Стандарт складається з чотирьох основних розділів:

· Основні визначення (Base definitions) — список основних визначень і угод, що використані в специфікаціях, і список заголовних файлів мови Сі, які мають бути надані відповідною стандарту системою.

· Оболонка і утиліти (Shell and utilities) — опис утиліт і командної оболонки sh, стандарти стандарти регулярних виразів.

· Системні інтерфейси (System interfaces) — список системних викликів мови Сі.

· Обґрунтування (Rationale) — пояснення принципів, що використані в стандарті.

 

Версії

POSIX пройшов через низку версій:

POSIX.1, Core Services (включений в стандарт ANSI C)

· Створення і керування процесами

· Сигнали

· Винятки плаваючої крапки

· Порушення сегментації

· Неправильна інструкція

· Помилки шини

· Таймери

· Операції з файлами і директоріями

· Конвеєри (Pipes)

· Бібліотека C (Стандарт C)

· Інтерфейс і керування портами введення-виведення

POSIX.1b, Real-time extensions, Розширення реального часу

· Планувальник пріоритетів

· Сигнали реального часу

· Годинники і таймери

· Семафори

· Передача повідомлень

· Розділювана пам’ять

· Асинхронне та синхронне введення-виведення

· Інтерфейс блокування пам’яті

POSIX.1c, Threads extensions. Розширення ниток виконання

· Створення, управління і очистка ниток

· Планувальння ниток

· Синхронизація ниток

· Управління сигналами

 

Програми написанні тільки з використанням стандартних функцій, передбачених POSIX можуть працювати на любій UNIX-подібній ОС.

 

6.10) Опишіть поняття «поштові скриньки»?

 

«Поштові скриньки» - тісний взаємозв’язок між процесам, який не лише синхронізує чи обмінюється тимчасовими сигнали, також для приймання та передачі даних – обмін повідомленнями. В системі з одним процесором відправляючи та приймаючі процеси не можуть працювати одночасно. В мультипроцесорних системах, теж нема ніяких гарантій можливості передавати та получати дані між процесами в реальному часі. Тому для збереження відправлених але ще не отриманих даних необхідно місце. Вони називаються буфером повідомлень, або поштовими ящиками.

Функції відправлення та отримання повідомлень зазвичай мають назву відправити (англ. send) та отримати (англ. receive) відповідно. Вони є примітивами в системах обміну повідомленнями. Функція «відправити» має два параметри — адресу, на яку слід надіслати повідомлення, та буфер даних повідомлення. Функція «отримати» також має два параметри — адреса звідки очікується повідомлення (може бути шаблоном) та буфер для збереження даних повідомлення.

 

За характеристиками, примітиви можна поділити на:

Синхронні: якщо примітиви відправити та отримати встановлюють попередній зв'язок між собою.

 

Асинхронні: примітив відправити називається асинхронним, якщо він повертає керування одразу після завершення зчитування даних з буфера даних повідомлення.

 

Блокуючи: примітив працює у блокуючому режимі, якщо він повертає керування лише після завершення виконання (як в асинхронному, так і в синхронному режимі).

 

Не блокуючи: примітив працює у не блокуючому режимі, якщо він одразу повертає керування, навіть коли повідомлення не зчитане або не отримане.

 

Таким чином, існує чотири варіанти відправки повідомлень:

1. синхронний блокуючий,

2. синхронний не блокуючий,

3. асинхронний блокуючий,

4. асинхронний не блокуючий.

Існує два варіанти для отримання повідомлень:

1. синхронний блокуючий;

2. синхронний не блокуючий.

 

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: