You are on page 1of 178

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

ВІННИЦЬКИЙ ФАХОВИЙ ТЕХНІЧНИЙ КОЛЕДЖ

МЕТОДИЧНІ ВКАЗІВКИ
до виконання самостійної роботи
з дисципліни

«АРХІТЕКТУРА КОМП’ЮТЕРІВ І ПЕРИФЕРІЙНІ


ПРИСТРОЇ»

для студентів спеціальності:


123 Комп’ютерна інженерія

Вінниця 2021
Укладач:
Непийвода М.В. – викладач спец. дисциплін Вінницького фахового технічного
коледжу, спеціаліст І категорії

Рецензент:
Колесник І.С. – кандидат технічних наук, доцент Вінницького національного
технічного університету

Методичні вказівки до виконання самостійних робіт з дисципліни


«Архітектура комп’ютерів». Методична розробка. – Вінниця, 2022. – 178с.

Методична розробка містить рекомендації та завдання для самостійної


роботи студентів спеціальності 123 Комп’ютерна інженерія. Складена у
відповідності з програмою курсу. Методичні вказівки забезпечують виконання 44
тем самостійного опрацювання.

Розглянуто та схвалено
на засіданні циклової комісії
«Інформатики та інформаційних
икомп’ютерних технологій»

Протокол № ____
від «____» _____________20___ р.
Голова циклової комісії
__________ А.І. Колесник
Зміст
Вступ ............................................................................................................................. 8

СРС №1 ......................................................................................................................... 9

Тема: Однокристальний 8-розрядний процесор і8080 ............................................ 9

СРС №2 ....................................................................................................................... 15

Тема: Структурна схема і8086 ................................................................................. 15

СРС №3 ....................................................................................................................... 17

Тема: Графічне позначення і призначення виводів ............................................... 17

СРС №4 ....................................................................................................................... 20

Тема: Побудова модуля ЦП на основі і8086 .......................................................... 20

СРС №5 ....................................................................................................................... 24

Тема: Загальні відомості і80286 ............................................................................... 24

СРС №6 ....................................................................................................................... 26

Тема: Організація пам’яті і програмна модель і80286 .......................................... 26

СРС №7 ....................................................................................................................... 31

Тема: Архітектура 32-розрядних МП ...................................................................... 31

СРС №8 ....................................................................................................................... 36

Тема: Особливості архітектури МП і386 та і486 ................................................... 36

СРС №9 ....................................................................................................................... 39

Тема: Пакетний режим передачі даних. Мікропроцесор Pentium та AMD ......... 39

СРС №10 ..................................................................................................................... 43

Тема: Внутрішні регістри. Загальне призначення ................................................. 43

СРС №11 ..................................................................................................................... 46

Тема: Регістри прапорців. Системні регістри ........................................................ 46

СРС №12 ..................................................................................................................... 50

Тема: Керуючі регістри. Відладочні регістри ........................................................ 50


СРС №13 ..................................................................................................................... 54

Тема: Регістри співпроцесора .................................................................................. 54

СРС №14 ..................................................................................................................... 56

Тема: Арифметичні дії над двійковими числами ................................................... 56

СРС №15 ..................................................................................................................... 58

Тема: Арифметичні дії над числами з основою 8 .................................................. 58

СРС №16 ..................................................................................................................... 61

Тема: Повні системи бульових функцій ................................................................. 61

СРС №17 ..................................................................................................................... 65

Тема: Представлення у різних формах бульових функцій ................................... 65

СРС №18 ..................................................................................................................... 68

Тема: Використання бітових зсувів ......................................................................... 68

СРС №19 ..................................................................................................................... 71

Тема: Комбінаційна логіка та її застосування ........................................................ 71

СРС №20 ..................................................................................................................... 73

Тема: Подання чисел у МП ...................................................................................... 73

СРС №21 ..................................................................................................................... 77

Тема: Моделювання схем з використанням комбінаційної логіки ...................... 77

СРС №22 ..................................................................................................................... 79

Тема: Історія розвитку персонального комп’ютера............................................... 79

СРС №23 ..................................................................................................................... 88

Тема: Способи адресації даних ................................................................................ 88

СРС №24 ..................................................................................................................... 94

Тема: Проектування мікропроцесорів ..................................................................... 94

СРС №25 ..................................................................................................................... 97

Тема: Паралельні матричні та векторні архітектури ............................................. 97


СРС №26 ................................................................................................................... 101

Тема: Приклади кластерних рішень різноманітних фірм-виробників .............. 101

СРС №27 ................................................................................................................... 106

Тема: Розвиток сучасних матричних та векторних архітектур. Обчислювальні


комплекси. Класифікація, призначення, принципи побудови ............................ 106

СРС №28 ................................................................................................................... 110

Тема: Організація багатопрограмної роботи ЕОМ. Основні архітектурні та


технічні рішення. Принципи розмежування функцій між апаратурою і
програмним забезпеченням .................................................................................... 110

СРС №29 ................................................................................................................... 113

Тема: Опис ієрархічних структур, алгоритмізація процесів ієрархічних


перетворень структур обчислювальних машин і систем .................................... 113

СРС №30 ................................................................................................................... 117

Тема: Архітектурні принципи підвищення надійності ЕОМ і достовірності


обчислень. Загальні відомості про методи підвищення достовірності передачі та
обробки інформації ................................................................................................. 117

СРС №31 ................................................................................................................... 120

Тема: Загальна характеристика 8-розрядних мікропроцесорів. Архітектура 8-


розрядних мікропроцесорів .................................................................................... 120

СРС №32 ................................................................................................................... 125

Тема: Загальна характеристика 16-розрядних мікропроцесорів. Архітектура 16-


розрядних мікропроцесорів .................................................................................... 125

СРС №33 ................................................................................................................... 130

Тема: Загальна характеристика арифметичних співпроцесорів. Архітектура


арифметичних співпроцесорів ............................................................................... 130

СРС №34 ................................................................................................................... 132

Тема: Загальна характеристика 32-розрядних мікропроцесорів CISC. Архітектура


32-розрядних мікропроцесорів CISC, використання дискрипторів ................... 132
СРС №35 ................................................................................................................... 134

Тема: Структура мікроконтролерів. Основні функції та параметри


мікроконтролерів. Загальна характеристика мікроконтролерів ......................... 134

СРС №36 ................................................................................................................... 139

Тема: Сторінкова і сегментна організація пам’яті. Динамічна пам’ять. Вибірка


слів змінної довжини. Принципи побудови віртуальної пам’яті ....................... 139

СРС №37 ................................................................................................................... 142

Тема: Засоби підтримки мультизадачності і захисту .......................................... 142

СРС №38 ................................................................................................................... 145

Тема: Перемикання задач в програмах 3Dnow, SIMD ........................................ 145

СРС №39 ................................................................................................................... 149

Тема: Механізм захисту. Формат використовуваних елементів (селектори,


дескриптори) ............................................................................................................ 149

СРС №40 ................................................................................................................... 159

Тема: Елементи каталогів і таблиць сторінкових перетворень .......................... 159

СРС №41 ................................................................................................................... 166

Тема: Сегмент стану задачі TSS ............................................................................ 166

СРС №42 ................................................................................................................... 170

Тема: Формат команд FPU, MMX, 3DNow, SIMD .............................................. 170

СРС №43 ................................................................................................................... 172

Тема: Техніка модульного програмування ........................................................... 172

СРС №44 ................................................................................................................... 176

Тема: Набір команд MMX ...................................................................................... 176

Список літератури ................................................................................................... 178


РЕЦЕНЗІЯ

на методичні вказівки щодо виконання самостійної роботи студентів


з дисципліни «Архітектура комп’ютерів»

Методичні рекомендації щодо виконання самостійних робіт з дисципліни


«Архітектура комп’ютерів», що розроблені викладачем Непийводою М.В.,
складені у відповідності з начальною програмою, містять усю необхідну
інформацію для виконання самостійної роботи та допомагають розширити та
закріпити теоретичні знання з відповідної дисципліни.
Представлені на рецензію методичні вказівки відповідають вимогам щодо
змісту та рівню підготовки молодших спеціалістів і дозволяють студентам
правильно організувати свою самостійну роботу з технічних дисциплін.
Методичні вказівки Непийводи М.В. щодо виконання самостійної роботи з
дисципліни «Архітектура комп’ютерів» розглядались на засідані циклової комісії
«Інформатики та інформаційних комп’ютерних технологій» та отримали схвальні
відгуки, тому методичні вказівки щодо виконання самостійної роботи з
дисципліни «Архітектура комп’ютерів» рекомендуються ВНЗ I-II р. а. для
впровадження у навчальний процес для підготовки кваліфікованих фахівців за
спеціальностями: 5.05010201 «Обслуговування комп’ютерних систем та мереж».

Рецензент: к.т.н., доцент кафедри ОТ, ВНТУ


Колесник І.С.
Вступ

В даний час видано багато книг і всіляких посібників з архітектури


обчислювальних машин і систем. В них, як правило, наведена архітектура
якихось окремих пристроїв або дано їх технічний опис, також наводиться робота
мереж. В цій методичній розробці описана архітектура комп’ютера і систем для
сучасних обчислювальних машин.
Дана методична розробка орієнтована на студента спеціальності 5.05010201
«Обслуговування комп’ютерних систем і мереж». Ставиться завдання ознайомити
його з проблемами різного типу архітектур комп’ютерів.
У широкому сенсі архітектурою цифрової обчислювальної машини
називають сукупність її властивостей і характеристик, що розглядається з точки
зору користувача машини.
При описі архітектури наводяться блок-схеми, що ілюструють структуру
тих чи інших вузлів комп’ютера або обчислювальних систем.
В методичній розробці наведено список літератури, що дозволяє розширити
знання з потрібних тем.
СРС №1

Тема: Однокристальний 8-розрядний процесор і8080

Дещо спрощена блок-схема мікропроцесора КР580ВМ80 (у міжнародному


позначенні 8080) зображена на рисунку 1. Це однокристальний 8-розрядний
мікропроцесор, з якого розпочалася лінія Intel-овських мікропроцесорів.

Рис. 1 – Спрощена блок-схема мікропроцесора КР580ВМ80 (у міжнародному


позначенні 8080)

Найважливішим елементом у схемі мікропроцесора є, мабуть, арифметико-


логічний пристрій (АЛП), який здійснює обробку інформації. АЛП являє собою
складну цифрову комбінаційну схему, яка може здійснювати багато
арифметичних та логічних дій. Інформація, яка підлягає обробці (операнди),
потрапляє до АЛП з внутрішньої шини даних, розрядність якої складає у даного
мікропроцесора вісім розрядів. Однак ці операнди потрапляють до АЛП не
безпосередньо. Перший операнд надходить до АЛП через регістр А (акумулятор)
та буферний регістр БР-1, а другий - через буферний регістр БР-2.
Потреба у буферних регістрах обумовлена тим, що АЛП не містить у собі
елементів пам’яті. Тому при потраплянні на його вхід вхідних даних результат дії
АЛП одразу з’являється на його виході. Отже процедури введення до АЛП
вхідних даних і виведення з нього результату повинні бути розділеними у часі:
спершу до АЛП підводиться перший операнд, потім другий і лише після цього,
коли вхідні операнди вже зняті з внутрішньої шини даних, на неї виводиться
результат дії АЛП. Одержаний результат може бути тепер записаний до основної
пам’яті ЕОМ, яка на даному рисунку не зображена.
Однак, якщо одержаний результат має бути використаний у найближчий
час, його не варто засилати у основну пам’ять. Його можна записати до одного з
робочих регістрів (РР) мікропроцесора: регістрів B,C,D,E.H або L, які утворюють
внутрішню швидкодіючу пам’ять мікропроцесора. Дані записані до РР
знаходяться поруч з АЛП і можуть бути швидко викликані і задіяні без порівняно
довгої процедури звернення до основної пам’яті.
Окрім самого результату АЛП видає ще й відомості про якісний характер
цього результату: чи він є позитивним або негативним, чи трапилось
переповнення найстаршого розряду при підсумовуванні або чи не відбулась
позика з нього при віднімання, тощо. Всі ці відомості передаються до регістра
ознак, кожний розряд котрого (наявністю одиниці або нуля) характеризує
одержаний результат за одною з перелічених ознак.
Ці відомості вельми важливі, бо у залежності від характеру результату
мікропроцесор може обрати передбачену у програмі альтернативу про шлях
подальшої обробки інформації. Можливість розгалуження програми та
спроможність мікропроцесора “самостійно” обирати шлях своєї подальшої
роботи надає йому певну “інтелектуальність” і істотно розширює його
можливості що до обробки наданої йому інформації.
Уся робота мікропроцесора спрямовується програмою, яка записана і
зберігається в основній пам’яті. По запиту мікропроцесора на його внутрішню
шину даних видається з основної пам’яті чергова команда - командне слово, яке
складається з чотирьох частин:
1. кода операції,
2. адреси першого операнда,
3. адреси другого операнда,
4. адреси для розташування результату.
Командне слово може бути і коротшим, коли та чи інша адреса мається на
увазі за умовчанням. Так наприклад, якщо дія відбувається лише з одним
операндом, командне слово може складатися лише з трьох частин. Якщо ж у
операції основна пам’ять взагалі не використовується а дія відбувається з
операндами, що містяться в акумуляторі та одному з робочих регістрів,
виявляється достатнім сам код операції, у якому міститься вказівка про те, який
саме робочий регістр має бути задіяним.
Звернення до основної пам’яті для одержання чергової команди, даних або
для запису одержаного результату здійснюється через регістр шини адреси
(регістр ША) та багаторозрядну (на 16 розрядів) шину адреси. Сигнал, переданий
по цій шині, активізує відповідну комірку пам’яті і підключає її до шини даних,
по якій і відбувається читання вмісту задіяної комірки або запис до неї.
Командне слово, що надходить по шині даних, сприймається регістром
команд і зберігається у ньому доти, доки дешифратор команд не дешифрує його і
не передасть до керуючого пристрою (КП). Цей керуючий пристрій є дуже
важливою частиною мікропроцесора, бо він координує і узгоджує роботу всіх
його частин. Керуючий пристрій пов’язаний з усіма функціональними блоками
мікропроцесора спеціальними лініями зв’язку (на рис.1 ці лінії не зображені, щоб
не затемнювати його). У апаратному відношенні КП являє собою складний ПЗП,
котрий у відповідь на дешифровану команду виробляє групу керуючих імпульсів,
які він розсилає до усіх блоків мікропроцесора, активізуючи або блокуючи їх.
Слід мати на увазі, що хоча кожний функціональний блок, зображений на рисунку
1 начебто приєднаний до внутрішньої шини даних, підключитися до неї він може
лише при одержанні відповідного дозволяючого сигналу від керуючого
пристрою.
Після того як виконання чергової команд закінчено, лічильник команд
(знову ж таки за сигналом від керуючого пристрою) рееструє номер і адресу
виконаної команди і формує запит до основної пам’яті на наступну команду.
Звичайно адреса наступної команди одержується шляхом додавання одиниці до
адреси попередньої. Але в окремих випадках така сувора черговість порушується
і відбувається стрибок до інших адрес у полі програми. Подібний стрибок може
бути заздалегідь закладений у програму (безумовний перехід) або ж відбувається
як умовний перехід в залежності від характеру одержаного результату. При
цьому відповідним чином змінюється вміст лічильника команд.
Окрім керування роботою блоків самого мікропроцесора керуючий
пристрій організовує ще й взаємодію мікропроцесора з зовнішніми пристроями.
Для цього від керуючого пристрою відходять лінії сигналів керування, по яких
керуючі сигнали виходять з МП або надходять до нього від зовнішніх пристроїв.
По двох таких лінях надходять сигнали від генератора тактових імпульсів, не
зображеного на рисунку 1. З цих тактових імпульсів КП виробляє свої керуючі
імпульси, які розсилаються до всіх блоків мікропроцесора. Отже, частота
тактових імпульсів задає темп роботи мікропроцесора і усіх пов’язаних з ним
пристроїв. Для МП-80 мінімальний період тактових імпульсів складає 400-500 нс,
що відповідає тактовій частоті 2 - 2,5 МГц.
Інші лінії сигналів керування служать для спілкування мікропроцесора з
зовнішніми пристроями. Цими пристроями можуть бути АЦП, які постачають
мікропроцесорові інформацію від аналогових датчиків, пристрої магнітної
пам’яті, дисплеї, принтери, тощо.
По лініях керування циркулюють сигнали, за допомогою яких МП
“домовляється” з зовнішніми пристроями про обмін інформацією. Цими
сигналами МП і зовнішні пристрої повідомляють один одного про свою
готовність (або неготовність) сприймати або видавати інформацію, бажання
зовнішнього пристрою вступити у контакт з МП, згоду МП на це, підтвердження
того що МП сприйняв або видав інформацію і багато іншого.
Для обміну інформацією МП і зовнішні пристрої поєднані між собою
магістральною шиною даних, до якої внутрішня шина даних підключена через
буферний регістр. Цей регістр, у принципі, не обов’язковий: внутрішня ШД могла
б бути безпосередньо приєднана до магістральної. Але тоді, виставивши дані на
магістральну шину доводилося б щоразу чекати, поки МП цю інформацію
сприйме. Буферний регістр даних швидко знімає інформацію з магістральної
шини і утримує її на внутрішній шині даних доти, доки МП не подасть сигнал
підтвердження, що ця інформація ним сприйнята і засвоєна. Після запису у
буферний регістр інформація може бути знята з магістральної шини даних. Це
розвантажує магістральну шину і дає змогу використовувати її для подальших
актів обміну інформацією.
Для цієї ж мети передбаченні і інші внутрішні буферні регістри
мікропроцесора: регістр команд, регістр адреси пам’яті (регістр ША), буферні
регістри БР-1 і БР-2. Сприйнявши і утримуючи інформацію, вони розвантажують
внутрішню шину даних і дають змогу використовувати її для передачі інших
інформаційних сигналів. Це істотно збільшує швидкодію мікропроцесора і всієї
мікропроцесорної системи в цілому.

Деякі особливі режими роботи мікропроцесора


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

Переривання
Нехай мікропроцесор виконує загадану йому (так звану фонову) програму,
обробляючи дані, що закладені в його основну пам’ять. Але в будь-який момент
часу деякий зовнішній пристрій може зажадати уваги до себе, бажаючи щоб
мікропроцесор обробляв дані саме від цього пристрою. (Таким зовнішнім
пристроєм може бути, наприклад, клавіатура, коли користувач натискає на одну з
її клавіш).
Тоді зовнішній пристрій виставляє на шину керування процесора сигнал
запиту на переривання, тобто вимагає щоб процесор припинив роботу з фоновою
програмою і обробив би інформацію від цього зовнішнього пристрою. У
відповідь мікропроцесор, скінчивши виконання чергової команди фонової
програми, припиняє роботу з нею і сприймає інформацію від зовнішнього
пристрою. В ній повинна бути вказівка на адресу підпрограми (заздалегідь
закладеної в основну пам’ять машини), за якою мають оброблятися дані від
зовнішнього пристрою. Мікропроцесор виконує цю підпрограму і повертається до
фонової програми. На цьому процедура переривання скінчається.

Захоплення шин
Обмін інформацією зовнішнього пристрою з основною пам’яттю
здійснюється звичайно через мікропроцесор. Але це досить повільна процедура і
тому при необхідності швидкого обміну зовнішнього пристрою з основною
пам’яттю великим об’ємом інформації (а це буває необхідним, наприклад, при
завантаженні основної пам’яті з жорсткого диску, або при запису на цей диск)
бажано такий обмін здійснювати безпосередньо, обминаючи мікропроцесор. У
режимі такого обміну мікропроцесор відключається, віддаючи ША і ШД
зовнішньому пристрою, котрий, як то кажуть, “захоплює шини”. Захоплення
триває стільки часу, скільки потрібно для обміну інформацією між зовнішнім
пристроєм і основною пам’яттю.
Після цього магістральна шина знову повертається у розпорядження
мікропроцесора.

ІМС мікропроцесора КР580ВМ80


ІМС типу КР580ВМ80 (скорочено МП-80) являє собою однокристальний
(тобто виготовлений на одному кристалі кремнію) мікропроцесор. Він
виготовлений за КМОН - технологією, має габарити 48х14 мм (власне кристал
5х5 мм), містить 4500 транзисторів і має 40 виводів. Споживана ним потужність
складає 1,5 Вт, вихідна напруга низького рівня є U (0)  0,45 B, високого рівня
U(1)  3,7 В. Виводи ІМС, їх позначення та нумерація наведені на рисунку 2.
Розглянемо їх по черзі.
Виводи живлення 20,11,28 та 2 - відповідно +5 В, - 5 В, +12 В та 0.
Виводи 3 - 10 - це двоспрямовані виводи шини даних, а 25 -27, 29 - 36, 1,
40, 37 - 39 - виводи адресної шини.
F1 - F2 - (22 та 15) входи для тактових імпульсів від ГТІ.
Решта - входи та виходи шини керування.

RESET (вхід) – Скидання. Надходженням ззовні сигналу високого рівня,


який триває не менш 3 тактів, лічильник команд встановлюється на нульову
адресу. Якщо надалі програмою не буде вказана інша адреса, то починається
виконання команд з адреси 0000. Вміст робочих регістрів та ОЗП основної
пам’яті при скиданні не змінюється.

Рис. 2 – Виводи ІМС, їх позначення та нумерація

READY (вхід) – Готовність. Використовується при зверненні МП до ОЗП


або зовнішніх пристроїв. На цей вхід надходять від них сигнали високого рівня,
які сповіщають, що ці пристрої готові до обміну даними з мікропроцесором.
Якщо пам’ять або зовнішній пристрій не підтвердять своєї готовності і на вході
READY буде низький рівень, то МП припиняє свою роботу і видає на виході
WAIT одиницю, сповіщaючи про тe, що він знаходиться у режимі очікування.
INT (вхід) – Запит на переривання. Сигнал високого рівня надходить на цей
вхід від деякого зовнішнього пристрою, що бажає здійснити обмін інформацією з
МП. При надходженні такого сигналу мікропроцесор, скінчивши виконання
чергової команди, виставляє одиницю на виході INTE, підтверджуючи тим, що
готовий до обміну з зовнішнім пристроєм. Далі мікропроцесор припиняє
виконання своєї фонової програми і переходить до обслуговування зовнішнього
пристрою.
HOLD (вхід) – Запит на захоплення шини. Надходить від зовнішнього
пристою, який бажає розпочати обмін даними безпосередньо з пам’яттю. При
надходженні цього сигналу МП видає на виході HLDA одиницю,
підтверджуючи, що він готовий поступитися шиною зовнішньому пристрою,
зупиняє свою роботу і відключається від шини адреси та шини даних.
DBIN (вихід) – Строб приймання. Високий рівень вказує, що МП здійснює
приймання (читання) даних від зовнішнього пристрою або пам’яті. 1)
WR (вихід) – Строб видачі даних. Вказує, що МП здійснює видачу даних
(запис) до зовнішнього пристрою або пам’яті. На відміну до всіх розглянутих
вище сигналів, у яких активному стану відповідає високий рівень (“1”), активним
станом сигналу WR є низький рівень (“0”). Тому на рис.3.2 вивід WR позначено з
рискою зверху і кружечком (символами інверсії).
SYNC (вихід) – Сигнал синхронізації. Цим сигналом мікропроцесор
повідомляє, що розпочинає черговий машинний цикл - звернення до пам’яті або
зовнішнього пристрою. Цей сигнал потрібний для синхронізації роботи МП з
цими пристроями.

Що таке програмна модель та архітектура мікропроцесора та ЕОМ


Мікропроцесор або ЕОМ - великі та складні пристрої. Але для того, хто
працює з ними та складає для них програми (назвемо його користувачем) зовсім
необов’язково розумітися на схемотехнічних тонкощах та особливостях будови і
внутрішнього функціонування МП або ЕОМ. Йому необхідні лише ті відомості,
котрі потрібні для складання програм. До таких відомостей відносяться:
1. розрядність шини даних;
2. розрядність шини адрес та розмір адресного простору;
3. система команд, формат та коди команд;
4. тривалість виконання цих команд;
5. імена і адреси програмно-доступних регістрів (наприклад, робочих
регістрів МП);
6. адреси зовнішніх пристроїв та правила звернення до них.
Сукупність цих відомостей має назву архітектури мікропроцесора і складає
його програмну модель, тобто те, яким бачиться мікропроцесор користувачеві.
До інших властивостей, параметрів та конструкції користувачеві немає діла. Так
наприклад, список і значення тільки-но розглянутих керуючих сигналів не
входить у програмну модель і архітектуру: це внутрішні сигнали ЕОМ і до них
користувач не має відношення доти, доки він не побажає підключити до ЕОМ
будь-які нештатні зовнішні пристрої.
СРС №2

Тема: Структурна схема і8086

У МП і8086 застосовано конвеєрну архітектуру, що дає змогу поєднувати у


часі цикли вибирання команди та вибірки з пам'яті кодів наступних команд. Це
досягається паралельною роботою двох порівняно незалежних пристроїв –
операційного пристрою та шинного інтерфейсу. Структурну схему МП і8086
зображено на рис. Операційний пристрій виконує команду, а шинний інтерфейс
здійснює взаємодію із зовнішньою шиною — виставляє адреси, зчитує коди
команд, операнди, записує результати обчислень у пам'ять або пристрої введення-
виведення.

Операційний пристрій складається з:


− РЗП, призначених для зберігання проміжних результатів — даних та
адрес;
− АЛЛ із буферними регістрами;
− регістра прапорців;
− блока керування та синхронізації, який дешифрує коди команд і генерує
керуючі сигнали для всіх блоків схеми МП.

Шинний інтерфейс складається із:


− шестибайтової регістрової пам'яті, яку називають чергою команд,
− чотирьох сегментних регістрів ( CS, DS, ES, SS),
− покажчика команд IP,
− суматора,
− допоміжних регістрів зв'язку і буферних схем шин адреси-даних.

Черга команд працює за принципом FIFO (First Input – First Output, тобто
перший прийшов — перший пішов) і зберігає на виході порядок надходження
команд. Довжина черги — 6 байт. Якщо операційний пристрій зайнятий
виконанням команди, шинний інтерфейс самостійно ініціює випереджальну
вибірку кодів команд із пам'яті у чергу команд. Вибирання з пам'яті чергового
командного слова здійснюється тоді, коли в черзі виявляється два вільних байти.
Черга збільшує швидкодію процесора у разі послідовного виконання команд. Під
час вибирання команд переходів, викликів і повернень із підпрограм та
оброблення запитів переривань черга команд скидається і вибирання починається
з нового місця програмної пам'яті.
Крім того, одним із завдань шинного інтерфейсу є формування фізичної 20-
розрядної адреси із двох 16-розрядних слів. Першим словом є вміст одного із
сегментних регістрів CS, DS,SS, ES, друге слово залежить від типу адресації
операнда або коду команди. Складання 16-розрядних слів відбувається зі
зміщенням на чотири розряди і здійснюється за допомогою суматора, що входить
до складу шинного інтерфейсу.
Рис. 1 – Структурна схема і8086

Організація пам’яті МПС Intel 8086


Пам'ять – масив ємністю 1 Мбайт. У пам'яті зберігаються як байти, так і
двобайтові слова. Слова розміщуються у двох сусідніх комірках пам'яті; старший
байт зберігається у комірці зі старшою адресою, молодший – з молодшою.
Адресою слова вважається адреса його молодшого байта. На рисунку подано
приклад, коли з адресою 00000 зберігається байт 35H, а за адресою 00001 – слово
784AH. Початкові (00000H-003FFH) і кінцеві (FFFF0H-FFFFFH) адреси
зарезервовані для системи переривань та початкового встановлення.
Організацію пам’яті, коли кожній адресі відповідає вміст однієї комірки
пам’яті називають лінійною. У МП i8086 застосовано сегментну організацію
пам'яті, яка характеризується тим, що програмно доступною є не вся пам'ять, а
лише деякі сегменти, тобто області пам'яті. Усередині сегмента використовують
лінійну адресацію. Впровадження сегментної організації можна пояснити таким
чином. Мікропроцесор i8086 являє собою 16-розрядний процесор, тобто він має
16-розрядну внутрішню шину, 16-розрядні регістри і суматори. Прагнення
розробників ВІС адресувати якомога більший масив пам'яті зумовило
використання 20-розрядної шини даних.
Для формування 20-розрядної адреси у 16-розрядному процесорі
використовують інформацію двох 16-розрядних регістрів. У МП i8086 20-
розрядна адреса формується з двох 16-розрядних адрес, які називають логічними.
Перша логічна адреса, доповнена праворуч чотирма нулями, являє собою
початкову адресу сегмента ємністю 64 Кбайт. Друга логічна адреса визначає
зміщення у сегменті, тобто відстань від початку сегмента до адресованої комірки.
Якщо вона дорівнює 0000, то адресується перша комірка сегмента, якщо FFFFH –
то остання. Отже, логічний адресний простір розподілено на блоки суміжних
адрес розміром 64 Кбайт, тобто сегменти.
Такий підхід до організації пам'яті зручний ще й тому, що пам'ять логічно
поділяється на області коду (програмної пам'яті), даних і стека. Фізична 20-
розрядна адреса комірки пам'яті формується з двох 16-розрядних адрес – адреси
сегмента Seg і виконавчої адреси ЕА (Executive Address), які додаються зі
зміщенням на чотири розряди.
СРС №3

Тема: Графічне позначення і призначення виводів

Умовне графічне зображення МП i8086 ілюструє рисунку 1.


Призначення контактів ВІС залежить від режиму роботи МП. Вісім
контактів має подвійне позначення, причому позначення в дужках відповідають
максимальному режиму.

Рис. 1 – Графічне зображення ВІС МП і8086

В таблиці 1 наведенпризначення контактів МП, однакових для обох


режимів, в таблиці 2 – призначення контактів, які використовуються тільки в
мінімальному режимі, в таблиці 3 – призначення контактів, які використовуються
тільки в максимальному режимі.
Літерою z позначено тристабільні виходи, що переводяться у третій
високоімпедансний стан при переході МП у режим захоплення; в дужках
наведено альтернативні позначення контактів, що зустрічаються в літературі.
Таблиця 1 – Призначення контактів МП i8086 для мінімального і
максимального режимів
Позначення Призначення Тип
1 2 3
АD15-АD0 Address/data – мультиплексна двонапрямлена шина адреси/даних (ADB – Вхід/вихід
Address Data Bus), за якою з розподілом у часі передаються адреси і дані. (z)
Адреси передаються в першому такті циклу шини і супроводжується
сигналом ALE, а дані – у другій половині циклу шини і супроводжується
сигналом DЕN
Byte High Enable/Status 7 – вихідний сигнал дозволу старшого байта/сигнал Вихід (z)
/ST7 стану. У першому такті циклу водночас з адресною інформацією передається

сигнал . Активний (нульовий) рівень означає, що по старшій


половині AD15-AD8 шини адреси/даних передаються 8-розрядні дані. Сигнал
використовується для дозволу доступу до старшого банку пам’яті або
до зовнішнього пристрою з байтовою організацією, підключеного до старшої
половини шини даних. В інших тактах формується сигнал стану ST7.
Read – вихідний сигнал читання. Вказує на те, що МП виконує цикл читання Вихід (z)
READY Ready – вхідний сигналу готовності, який підтверджує, що комірка пам’яті Вхід
або пристрій введення/виведення, який адресується у команді, готовий до
взаємодії з MП при передачі даних
INTR Interrupt Request – вхідний сигнал запиту (при одиничному рівні) Вхід
маскованого переривання. Якщо переривання дозволено, МП переходить до
підпрограми обробки переривання. В іншому випадку МП ігнорує цей сигнал
Test – вхідний сигнал перевірки. Сигнал використовується разом з командою Вхід
очікування WAIТ, виконуючи яку, МП перевіряє рівень сигналу .
Якщо = 0, МП переходить до виконання наступної після WAIТ
команди. Якщо = 1, МП знаходиться у стані очікування, виконує
холості такти і періодично, з інтервалом 5ТCLK, перевіряє значення сигналу

CLK, (CLC) Clock – вхідні тактові імпульси, які забезпечують синхронізацію роботи MП Вхід
RESET Reset (Clear) – сигнал апаратного скидання (при одиничному рівні). Вхід
(CLR) Переводить МП у початковий стан, при якому скинуті сегментні регістри
(крім СS, усі розряди якого встановлюються в одиничний стан), вказівник
команд IР, усі прапорці, регістри черги команд і всі внутрішні тригери у
пристрої керування. Сигнал RЕSЕТ не впливає на стан загальних регістрів.
Під час дії сигналу RESET усі виходи, що мають три стани, переводяться у
третій стан; виходи, що мають два стани, стають пасивними. Мінімальна
тривалість сигналу RЕSЕТ при першому ввімкненні МП становить 50 мкс, а
при повторному запуску – чотири такти синхронізації, тобто 0,8 мкс при
тактовій частоті 5 MГц. Після закінчення сигналу RESET починається цикл
вибірки команди з пам’яті з адресою 0FFFFH: 0000
Minimum/maximum – вхід сигналу вибору мінімального або максимального Вхід
MN/
режимів. Сигнал на цьому вході визначає режим роботи МП: 1 –
мінімальний, 0 – максимальний
Таблиця 2 – Призначення контактів МП i8086 у мінімальному режимі
Позначення Призначення Тип
Interrupt Acknowledge – вихідний сигнал підтвердження переривання, що Вихід
визначає читання вектора переривання
Address Latch Enable – вихідний сигнал дозволу фіксації адреси; Вихід
ALE видається на початку кожного циклу шини і використовується для запису
адреси в регістр-фіксатор
Data Enable – вихідний сигнал дозволу даних, що визначає появу даних Вихід
на шині адреси/даних (z)

Data Transmit/Receive (Output-Input) – вихідний сигнал Вихід


передавання/приймання даних; визначає напрям передачі даних поADB. (z)
Призначений для керування шинними формувачами і діє протягом усього
циклу шини
Memory/Input-Output – вихідний сигнал ознаки звернення до пам’яті (M/ Вихід
(z)
= 1) або зовнішнього пристрою (M/ = 0). Використовується для
розподілу адресного простору пам’яті і введення/виведення
Write – вихід сигналу запису. Строб, який вказує на те, що МП виконує Вихід
цикл запису в пам’ять або зовнішній пристрій і супроводжує дані, що (z)
видаються МП на шину даних
HOLD Hold – вхід сигналу запиту захоплення шин від зовнішнього пристрою або Вхід
контролера прямого доступу до пам’яті
HLDA Hold Acknowledge – вихідний сигнал підтвердження захоплення. Сигнал Вихід
вказує на те, що МП перевів свої шини адреси/даних, адреси/стану і
керування у z-стан

Таблиця 2.4 – Призначення контактів МП i8086 в максимальному режимі


Позначення Призначення Тип
ST2, ST1, Вихідні сигнали ліній стану; характеризують тип виконуваного Вихід (z)
ST0 (S2-S0) циклу шини; використовуються для формування керуючих
сигналів
Request/Grant (Request/Enable) – два вхідних/ вихідних сигнали Вхід/
запиту/ надання локальної шини; використовуються для зв'язку з вихід
іншими процесорами, а саме з арифметичним співпроцесором.
Лінія RQ/GТ1 має менший пріоритет

LOCK Lock – вихідний сигнал блокування (зайнятості) шини - сигнал Вихід


монополізації керування шиною; формується під час виконання
команди за префіксом LOCK й інформує інші процесори і
пристрої про те, що вони не повинні запрошувати системну шину
QS1, QS0 Queue Status – два вихідних сигнали стану черги; ідентифікують Вихід
стан внутрішньої шестибайтової черги команд МП і діють
протягом такту синхронізації після виконання операції над
чергою. Сигнали QS1, QS0 призначені для співпроцесора, що
контролює шину адреси/даних, фіксує момент, коли з програмної
пам’яті вибирається призначена для нього команда з префіксом
ЕSС, а після цього стежить за чергою команд і визначає момент,
коли ця команда повинна виконуватися
СРС №4

Тема: Побудова модуля ЦП на основі і8086

Мікропроцесорна система складається з трьох основних блоків:


мікропроцесора МП, пристрої сполучення з об'єктом УСО і об'єкта управління
(див. рис. 1).

Рис. 1 – Мікропроцесорна система

Основним і центральним блоком МПС є ядро МПС у складі самого МП і


шинних формувачів, які забезпечує узгодження навантажень в МПС (див. рис. 2).

Рис. 2 – Схема модуля центрального процесора

Нагадаємо, що за технічними умовами експлуатації здатність навантаження


висновків МП не повинна перевищувати навантаження одного входу елемента
ТТЛ. Така низька здатність навантаження висновків мікропроцесора пояснюється
прагненням зменшити величину струму, що протікає через транзистори кристала
мікропроцесора, і пов'язану з ним виділяється теплову енергію. Збільшення
здатності навантаження висновків мікропроцесора неминуче вимагало б
використання транзисторів більшої потужності. Це призвело б, по-перше, до
збільшення їх кількості і, по-друге, до підвищення температури кристала.
Для побудови модуля ЦП необхідно забезпечити синхронізацію роботи
системи та узгодження роботи з ЦП з системною шиною. Для синхронізації
використовується зовнішній генератор схема якого наведена на рисунку 3.

Рис. 3 – Умовне позначення зовнішнього генератора

Для узгодження навантаження різних пристроїв використовуються буферні


регістри, структура яких показана на рисунку 4, які є основою шинних
формувачів.
Рис. 4 – Структурна схема буферного регістра

Однак практичні завдання, які вирішуються МС, вимагають підключення


пам'яті, дешифраторів, зв'язкових адаптерів і т.д., що значно перевищує
допустиму навантаження висновків мікропроцесора. Тому для збільшення
навантажувальної здатності мікропроцесора в шини адреси і даних вбудовують
спеціальні буфери, виконані на ІС, які називаються шинними формувачами (ШФ).
Найбільш поширеними є чотирирозрядні ШФ К589АП16, К589АП26 і
восьмирозрядні ШФ К580ВА86 і К580ВА87 (див. Рис. 9.5)

Рис. 5 – Умовні позначення шинних формувачів

З точки зору розрядності перевагу слід віддати ШФ серії К580 .. Корпус 8-


розрядного ШФ К580ВА86 має інформаційні висновки А0-А7 і В0-В7, висновок
Т, логічний зміст якого визначає напрямок передачі інформації, і висновок OE
(вибірки кристала).
Формування шини адреси системи. Шина адреси МС на базі
мікропроцесора i 8086 є односпрямованої 20-розрядної. Тому для її буферірованія
необхідно використовувати три корпуси ІС К580ВА86. На рис. 9.6 показана схема
включення трьох ШФ для освіти ША системи.
Рис. 6 – Функціональна схема модуля центрального процесора

Оскільки напрям передачі в ША системи відбувається в одному напрямку, а


вивід каналу А шинного формувача переважно підключити до мікропроцесора, то
ШФ повинен бути включений в режим для передачі даних з каналу А в канал В,
для чого на виводі Т необхідно подати сигнал високого рівня. Це досягається
підключенням до висновку Т джерела живлення + 5В через резистор 1 кОм.
Виводи ВК формувача можна об’єднати і підключити до спільного виводу плати.
В тому випадку, якщо в системі передбачається використовувати режим
ПДП, в якому необхідно відключати шину адреси від мікропроцесора при
наявності сигналу високого рівня ПЗХ, то цей сигнал можна використовувати для
перекладу ШФ у вимкнений стан. Для цього сигнал ПЗХ мікропроцесора
потрібно підключити до висновку ВК формувача через будь-який логічний
елемент, що забезпечує більшу навантажувальну здатність.

Формування шини даних системи


Шина даних системи служить для передачі 16-розрядних даних у двох
напрямках: від МП до ВУ і в зворотному напрямку. Тому буфер шини даних,
реалізований на двох мікросхемах К580ВА86, повинен мати можливість
перемикання напрямку передачі даних. Для цієї мети зручно використовувати
сигнали мікропроцесора ПМ - прийом і ВД - запис. У режимі прийому високим
рівнем сигналу ПМ формувач забезпечує передачу даних з каналу В і шини даних
в мікропроцесор. В режимі запису низьким рівнем сигналу ПМ на вході Т
формувач змінить напрямок передачі даних, і дані будуть передаватися від
мікропроцесора в шину даних системи. У режимі захоплення високим рівнем
сигналу ПЗХ на вході ВК формувача передачі будуть блоковані.
Формування системної шини управління. Мікропроцесорна система може
містити значну кількість зовнішніх пристроїв. Для обміну даними між ними все
ВУ підключаються до загальної системної шині даних і системної адресній шині.
Для чіткої взаємодії мікропроцесора і ВУ необхідні спеціальні керуючі сигнали,
що становлять системну шину управління. Для управління процесом обміну
даними з ВУ мікропроцесор має тільки два сигнали управління: ПМ - прийом і
ВД - запис. Цих сигналів явно недостатньо, тому сигнали системної шини
управління формуються спеціальної схемою з використанням керуючих сигналів
ПМ і ВД і байта «слова стану» мікропроцесора.
Нагадаємо, що в такті Т1 кожного циклу мікропроцесор видає на свою ШД
одночасно з синхронізуючим сигналом С байт «слова стану» МП, яке в такті Т2
записується в зовнішній регістр, щоб його можна було використовувати протягом
усього машинного циклу. Розряди байта стану мікропроцесора, записані в регістр,
використовуються далі для формування сигналів системної шини управління.
СРС №5

Тема: Загальні відомості і80286

Мікропроцесор i80286 належить до другого покоління 16-розрядних МП.


Він виконаний за тех­нологією 1,5 мкм, містить 134 000 транзисторів і працює з
тактовою частотою 12,5 МГц. Після вдосконалення архітек­тури швидкодія МП
i80286 у 6 разів вища, ніж МП i8086 з тактовою частотою 5 МГц. Розрядність
регістрів дорівнює 16. Шина адреси 24-розрядна, що дає змогу адресувати 16
Мбайт пам'яті. Простір адрес введення-виведення становить 64 Кбайт. Система
команд містить усі команди i8086, кілька нових команд загального призначення
та команди керування захистом. Мікропроцесор i80280 має спеціальні засоби для
роботи у системах з багатьма користувачами та багатозадачиих режимах. Його
найістотнішою відмінністю від мікропроцесорів серії i8086/88 є механізм
керування адресацією пам'яті, що забезпечує чотирирівневу систему захисту та
підтримку віртуальної пам'яті. Спеціальні засоби призначено для підтримки
механізму перемикання задач. Мікропроцесор i80286 має засоби контролю за
переходом через межу сегмента, які працюють у реальному режимі.

Мікропроцесор може працювати у двох режимах:


• 8080 Real Address Mode, або Real Mode, — режим реальної адресації, або
реальний режим. У цьому режимі МП i80286 фактично є високошвидкісним МП
i8086 і адресує 1 Мбайт пам'яті;
• Protected Virtual Address Mode, або Protected Mode, — захищений режим
віртуальної адресації або просто захищений режим. У цьому режимі МП адресує
до 16 Мбайт пам'яті, а за використання механізму сторінкової адресації до 1 Гбайт
віртуальної пам'яті кожної задачі.

Перемикання у захищений режим здійснюється швидко — однією


командою (із заздалегідь підготовленими таблицями дескрипторів), а в режим
реальної адресації — повільно, лише через апаратне скидання процесора. У MS
DOS використовується реальний режим. Захищений режим використовуєть­ся в
операційних системах на зразок XENIX, UNIX, OS/2, NetWare286, MS Windows.
Для процесора i80286 можливі 256 різних типів перери­вань. Відрізняється
від системи переривань МП i8086 пере­риванням під час виникнення особливих
умов під час виконан­ня команд, наприклад за розміщення двобайтового операнда
в останній комірці сегмента даних зі зміщенням FFFFH. Таке переривання
називають особливим випадком, або винятком. На відміну від переривань після
оброблення винятків (крім винятку 9, що стосується співпроцесора) керування
передаєть­ся знову тій самій команді (включаючи всі префікси), що зумовила
переривання. Після усунення умов, що спричинили виняток, відбувається
повторне виконання команди.

Загальні характеристики
Розширення
1. тактова частота від 8 до 10 Мгц, продуктивність у 2-3 рази вища, ніж
у і8086;
2. адресує до 16 Мбайт фізичної пам'яті, з можливістю виділення кожній
програмі віртуальної пам'яті розміром до 1 Гбайта;
3. реалізовано конвеєрне виконання команд;
4. реалізовано багатозадачний режим роботи.
Найістотнішою відмінністю від Intel 8086 є механізм керування адресацією
пам'яті, що забезпечує 4-рівневу систему захисту і підтримання віртуальної
пам'яті, та спеціальні засоби призначені для підтримання механізму перемикання
задач.

Технічні характеристики
1. Тактова частота (МГц): залежить від маркування: 80286-6 — 6 МГц,
80286-8 — 8 МГц, 80286-10 — 10 МГц, 80286-12 — 12,5 МГц
2. Розрядність регістрів: 16 біт
3. Розрядність шини даних: 16 біт
4. Розрядність шини адреси: 24 біт
5. Об'єм адресованої пам'яті: 16 Мбайт
6. Об'єм віртуальної пам'яті: 1 Гбайт
7. Кількість транзисторів: 134 000
8. Техпроцес (нм): 1500 (1,5 мкм)
9. Площа кристала: 49 мм²
10.Напруга : +5 В
11.Роз'єм: 68-pin
Корпус: 68-контактний керамічний LCC (R80286), пластиковий LCC
(N80286), керамічний PGA (CG80286 або A80286)
СРС №6

Тема: Організація пам’яті і програмна модель і80286

Організація пам'яті. У реальному режимі адресація пам'яті переважно така


сама, як і в МП i8086. Відмінність полягає у можливості використання
додаткового блока пам'яті ємністю 64 Кбайт. Якщо у процесі виконання команди
під час обчислення адреси комірки пам'яті виникає переповнення у двадцятий
розряд шини адреси A20, процесор починає працюва­ти з комірками пам'яті,
адреси яких знаходяться в діапазоні 100 000H-10FFFFH.
Ще однією особливістю реального режиму i80286 є можливість контролю за
переходом за межі сегмента. Під час адресації слова зі зміщенням 0FFFFH
генерується виняток 13 (Segment Overrun Exception). За спроби виконання
команди ESC з операндом пам'яті, що не вміщається у сегменті, генерується
виняток 9 — Processor Extension Segment Overrun Interrupt.

Рис. 1 – Формат селектора сегмента

Рис. 2 – Формування фізичної 24-розрядної адреси у захищеному режимі

У захищеному режимі також використовується сегментна адресація;


кількість сегментів може бути від 1 до 16 Мбайт, дов­жина сегментів задається і
може варіювати від 1 до 64 Кбайт, задаються атрибути або права доступу до
сегмента (дозвіл запису або лише читання, рівні привілеїв тощо). Кожний сегмент
характеризується 8-розрядною структурою даних — дескриптором сегмента, що
містить інформацію про базову адресу сегмента, його межу та атрибути.
Дескриптори розміщені у спеціальних таблицях — глобальній дескрипторній
таблиці GDT або локальній дескрипторній таблиці LDT, які зберігаються в ОЗП.
Незалежно від рівня привілею програма не може звертатися до сегмента доти,
доки він не описаний у дескрипторній таблиці.
У захищеному режимі вміст сегментних регістрів називають селекторами
сегментів. їх використовують для пошуку базової (початкової) адреси сегмента в
одній з дескрипторних таблиць. Формат селектора показано на рисунку 1.
Селектори, що завантажуються у 16-розрядні сегментні регістри CS, DS, SS,
ES, мають три поля:
• RPL (Requested Privilege Level) (біти 0 і 1) — запро­шений рівень привілеїв
сегмента;
• ТІ (Table Indicator) (біт 2) — індикатор використання таблиці дескрипторів
(якщо ТІ = 1, використовується гло­бальна таблиця, а якщо ТІ = 0, — локальна);
• INDEX (біти 3 — 15) — номер дескриптора у таблиці.

Глобальна дескрипторна таблиця єдина. Вона містить дескриптори для всіх


задач, які виконує МП у багатозадачному режимі. Локальних дескрипторних
таблиць може бути кілька, причому для кожної задачі можна задати свою
локальну дескрипторну таблицю.
Фізичну 24-розрядну адресу операнда знаходять додаван­ням початкової 24-
розрядної адреси сегмента з дескрипторної таблиці та адреси-зміщення, яка
вказується у команді. Формування фізичної 24-розрядної адреси у захищеному
режимі наведено на рисунку 2.
Програмна модель. До програмної моделі МП i80286 (див. рис. 3) входять
19 програмно-доступних регістрів і 6 недо­ступних (тіньових). Із 19 програмно-
доступних регістрів МП i80286 14 повторюють регістри процесора i8086. П’ять
нових регістрів такі:
40-розрядний регістр GDTR (Global Descriptor Table Re­gister) — регістр
глобальної дескрипторної таблиці. Призначений для задання розміщення
глобальної дескрипторної таблиці в пам'яті. Регістр GDTR безпосередньо містить
базову адресу і значення межі таблиці, яке задає її розмір. Розмір таблиці
більший, ніж значення межі, на оди­ницю;
16-розрядний регістр LDTR (Local Descriptor Table Register) — регістр-
селектор локальної дескрипторної таблиці. Його вміст вказує, де в глобальній
дескрипторній таблиці знаходиться інформація про початкову адресу, межу і
права доступу до локальної таблиці. Ця інформація переписується у тіньовий
програмно-недоступний регістр;
40-розрядний регістр IDTR (Interrupt Descriptor Table Register) — регістр
дескрипторної таблиці переривань. Завдяки цьому регістру в МП i80286 з'явилася
можливість розміщувати таблицю векторів переривань у довільному місці ОЗП, а
не з нульової адреси, як у МП і8086. Регістр IDTR за структурою аналогічний
регістру GDTR;
16-розрядний регістр задачі TR (Task Register) — регістр-селектор сегмента
стану поточної задачі TSS (Task State Segment). Такі сегменти асоціюються з
кожною задачею. їхнє призначення — збереження контексту задачі під час
перемикання задач;
Рис. 3 – Програмна модель МП i80286

16-розрядний регістр стану машини MSW (Machine State Word), що керує


режимом процесора і містить такі біти (див. рис. 4):
РЕ (Protection Enable) — дозвіл захисту. Встановлення цього прапорця
переводить процесор у захищений режим. Повернення до реального режиму
можливе лише за сигналом RESET.
MP (Monitor Processor Extension) — наявність співпроцесора. Якщо
арифметичний співпроцесор i80287 з'єднаний з процесором i80286, то за
ініціалізації операційна система має встановити цей біт у етап логічної одиниці.
Тоді під час виконання команд WAIT та ESC і значення TS = 1 мікропроцесор
генеруватиме виняток 7.

Рис. 4 – Регістр стану машини MSW


EM (Processor Extension Emulated) — емуляція співпроцесора. Встановлення
цього прапорця викликає виняток 7 після виконання команд арифметичного
співпроцесора.
TS (Task Switch) — перемикання задач. Зі встановленням прапорця наступна
команда, яка належить до співпроцесора, викличе виняток 7.
Тіньові регістри відіграють роль надоперативної пам'яті, їхнє призначення —
підвищення швидкодії роботи МП (на рисунку 3 тіньові регістри показано
штриховою лінією).
Крім того, у програмній моделі, на відміну від МП i8086, додано нові біти у
регістрі прапорців і змінено використання сегментних регістрів у захищеному
режимі. У регістрі прапорців біт 14 визначений як NT (Nested Task Flag —
прапорець певної задачі), а біти 13—12 — як IOPL (Input/Output Privilege Level —
двобітове поле рівня привілеїв введення-виведення). Ці прапорці діють лише в
захищеному режимі. Прапорець NT встановлюється у стан логічної одиниці під
час перемикання задач за допомогою команди CALL. Після виконання команди І
RET перевіряється стан прапорця NT і якщо NT = 1, здійснюється перемикання,
якщо ні, то виконується звичайне повернення з переривання. Поле IOPL вказує
рівень привілею поточної задачі, за якого дозволяєть­ся виконання певних
операцій.
Сегментні регістри CS, SS, ES і DS визначають початкові адреси сегментів.
У реальному режимі 20-розрядна початкова адреса сегмента визначається як вміст
16-розрядиого сегментного регістра, доповненого праворуч чотирма нульовими
бітами. У захищеному режимі початкова 24-розрядна базова адреса сегмента
знаходиться у дескрипторній таблиці в ОЗП, а вміст сегментних регістрів є
селекторами, які вказують на тип таблиці та номер запису в ній (див. рис. 1).
Під час завантаження нового значення селектора дескрип­тори зчитуються з
ОЗП і запам'ятовуються у внутрішніх програмно-недоступних або тіньових
регістрах процесора. Це дає змогу підвищити швидкодію процесора, оскільки
значен­ня базових адрес сегментів змінюються порівняно рідко.
Регістри GDTR, LDTR, IDTR задають розташування дескрипторних таблиць
у пам'яті (див. рис. 5). На рисунку 5 показано, що глобальна дескриптор на
таблиця містить N + 1 дескрипторів, локальна — К + 1, дескрипторна таблиця
перери­вань — М + 1. Початкова адреса глобальної дескрипторної таблиці
визначається бітами 39—16 регістра GDTR та об­числюється додаванням значень
початкової адреси і межі таблиці (біти 15 — 0). Аналогічно початкова і кінцева
адреси таблиці переривань визначаються вмістом регістра IDTR. Для адресації
дескрипторів локальної таблиці використо­вують вміст регістра LDTR, який є
селектором. Він вказує на номер дескриптора у глобальній дескрипторній
таблиці. Цей дескриптор завантажується у тіньовий регістр (на рисунку 5
зображено штриховою лінією). Перша та остання адреси локальної дескрипторної
таблиці визначаються вмістом цього регістра.
Рис. 5 – Розміщення дескрипторних таблиць у пам'яті

Зазначимо, що команди завантаження регістрів таблиць GDTR, LDTR,


IDTR, LGDT, LLDT, LIDT є привілейованими і виконуються у програ­мах з
вищим рівнем пріоритету.
СРС №7

Тема: Архітектура 32-розрядних МП

Архітектура Intel Architecture стала стандартом «де-факто» сучасної


комп'ютерної індустрії після того, як у 1981 р. компанія IBM вибрала для свого
першого персонального комп'ютера IBM PC процесор Intel 8088. Основними
факторами І такої популярності Intel вважає повну сумісність програмного
забезпечення, І розробленого під Intel Architecture процесори, і чимраз більш
серйозні збільшення І продуктивності, що пропонувалися з появою нових
поколінь процесорів.
Родоначальниками процесорної архітектури Intel Architecture були 16-
розрядні процесори 8088 і 8086, причому об'єктний код, розроблений у
розрахунку І на них у 1978 p., і понині без проблем виконується на останніх
процесорах І 32-розрядної архітектури ІА-32.
Процесор 8086 мав 16-розрядні регістри загального призначення, 16-
розрядну шину даних і 20-розрядну шину адреси, що дозволяло йому оперувати
адресним простором у 1 МБ. Відмінність процесора 8088 полягала у 8-розрядній
шині даних.
Ці процесори привнесли сегментацію в архітектуру ІА-32. Пам'ять
розділялася на сегменти завбільшки до 64 КБ. Оперуючи чотирма сегментними
регістрами одночасно, процесор мав можливість адресації до 256 кілобайт пам'яті
без переключення між сегментами. При цьому 20-розрядні адреси отримувалися
шляхом додавання 16-розрядної адреси до покажчика сегментного регістра.
Процесор 80286 привніс в архітектуру ІА-32 захищений режим. У ньому
вміст сегментних регістрів використовується як покажчики на таблиці
дескрипторів, які давали можливість 24-розрядної адресації, що складало 16 МБ
адресного простору. До того ж з'явилася можливість перевірки границь сегментів,
опцій read і execute-only для сегментів і 4 рівні захисту коду операційної системи
від застосування і захист застосування один від одного.
Процесор Pentium став першим процесором, у якому була застосована
супер-скалярна архітектура — два конвеєри, які називалися U і V, дозволяли
виконувати 2 інструкції за такт. Кількість Ll-кеша подвоїлася — тепер на команди
і дані припадало по 8 КБ, причому кеш даних використовував ефективнішу схему
зі зворотним записом. Для ефективного передбачення переходів у циклічних
конструкціях застосовувалася вбудована таблиця розгалужень
У віртуальному х86-режимі на додаток до 4-кілобайтних сторінок з'явилася
підтримка 4-мегабайтних сторінок. Регістри залишилися 32-розрядними, але
Деякі внутрішні шини розширилися до 64 і навіть 128 розрядів. Також 64-роз-
Рядною стала зовнішня шина даних. s
Останній процесор цього покоління, Pentium MMX. привніс в архітектуру
Розширений набір команд, що дозволяв ефективно оперувати упакованими
цілочисловими даними, які знаходяться в 64-розрядних ММХ-регістрах
У 1995 р. було представлене сімейство, процесорів Р6, що мало вже 3
незалежні конвеєри. Першим процесором цього сімейства був процесор Pentium
Pro.
Принципова відмінність цього сімейства полягає-в тому, що Р6 перетворює
команди х86 у внутрішні, RISC-подібні команди, їх називають мікрокомандами
(micro-ops). Це дозволяє усунути багато обмежень, властивих набору команд х86:
нерегулярність кодування команд, операції цілочислових пересилань типу
«регістр—пам'ять» і змінна довжина безпосередніх операндів.
Шина адреси процесорів Р6 розширилася до 36 розрядів, що дозволяє
використовувати адресний простір обсягом до 64 ГБ.
У процесор Pentium II до архітектури процесора Pentium Pro додані команди
ММХ. Для процесора Pentium II вводиться нова специфікація установки в
материнську плату слота 1 і слота 2. У цій новій специфікації кеш L2 виноситься з
кристала. Для слота 1 і слота 2 використовується ножове з'єднання замість сокета.
У процесорі Pentium II збільшений кеш даних L1 і кеш інструкцій L1 до 16 КБ
кожний. У процесорі Pentium II розмір кеша L2 може бути 256 КБ, 512 КБ і 1 МБ
або 2 МБ (тільки для слота 2). Процесори слота 1 використовують «половинну
тактову частоту» шини, а процесори слота 2 використовують «повну тактову
частоту» шини.
Процесор Pentium ІІІ, випущений у 1999 p., привніс в архітектуру ІА-32
розширення SSE (Streaming SIMD (Single Instruction Multiple Data) Extensions) —
стали доступні нові 128-розрядні регістри і SIMD-операції над упакованими
операндами з плаваючою комою з одинарною точністю.

Як працюють процесори ІА-32


Повна обробка кожної інструкції займає певну кількість тактів процесора.
При цьому можна розділити процес обробки на етапи, що дозволить почати
виконання наступної команди відразу після того, як попередня команда пройде
перший етап — це, власне, і є принцип конвеєрної обробки (pipelining),
застосовуваний ще з часів процесорів i486 і Pentium, у яких використовувався
стандартний 5-ступінчастий конвеєр.
Суперконвесризація (superpipelining), застосована в сімействі Р6, поділяє
ступені стандартного конвеєра на дрібніші частини. Зі збільшенням числа
ступенів кожний окремий ступінь виконує меншу роботу і, таким чином, містить
менше апаратної логіки. Часовий інтервал між надходженням набору вхідних
впливів на входи схеми й появою результуючих сигналів на її виходах —
затримка поширення (propagation delay) — у результаті стає істотно меншим.
Завдяки більш коротким затримкам поширення сигналу в кожному окремо
взятому ступені конвеєра стає можливим підвищення тактової частоти.
Аналогічний ефект зменшення затримок поширення сигналу досягається за
допомогою переходу на тонший технологічний процес, наприклад, з 0,18 мікрон
на 0,13. Очевидний шлях підвищення продуктивності — збільшення числа
ступенів конвеєра й підвищення частоти процесора. Але суперконвеєрна
архітектура має серйозний недолік. При виконанні неправильно передбачених
переходів і операцій необхідне повне очищення конвеєра, що займає тим більше
часу, чим більше ступенів нараховує конвеєр, причому зниження продуктивності
в деяких випадках виходить просто обтяжуючим.
Розглянемо роботу конвеєра процесора Р6, що складається з 12 ступенів.
Конвеєр можна розділити на три самостійні функціональні блоки — вхідний блок
упорядкованої обробки (in-order front end), відповідальний за декодування й
обробку команд, ядро виконання зі зміною послідовності (out-of-order core), де,
власне, і відбувається виконання команд, і конвеєр упорядкованого виведення
команд із послідовності (in-order retirement).
Блок вибірки команди (instruction fetch unit) зчитує потік інструкцій з 1,1-
кеша команд порціями по 32 байти за такт. Для пошуку початку команди
використовується поточний покажчик команди (IP-instruction pointer), а потім
команди передаються на три дешифратори. Перш ніж перейти до розгляду роботи
дешифраторів, розглянемо механізм передбачення переходів
Покажчик команди розраховується блоком вибірки команди на підставі
інформації, отриманої від буфера адреси переходу (ВТВ — branch target buffer), і
заснованої на бітах передісторії розгалужень, що генеруються блоком
цілочислових обчислень, призначеним для обробки мікрокоманд переходів
(Integer Unit). Передбачення переходів (розгалужень) покликано звести до
мінімуму холосту роботу конвеєра і забезпечити його безперервним потоком
команд. Узагалі, в середньому до 10 відсотків коду програми складають безумовні
переходи, що передають управління за новою зазначеною адресою, і від 10 до 20
% — умовні переходи, що змінюють або не змінюють хід виконання програми в
залежності від результату порівняння або виконання якої-небудь іншої умови. У
випадку, якщо умовний перехід не виконується, програма просто продовжує
виконання наступної команди.
Безумовні переходи проблем не викликають, процесор точно знає, що вони
будуть виконані, і тому просто починає вибірку команд за зазначеною адресою.
Команди умовних переходів становлять певні труднощі, тому що процесор не
знає, чи буде виконаний перехід доти, поки команда не пройде виконавчий
ступінь конвеєра. Однак очікування, поки команда розгалуження покине
виконавчий, ступінь, означає тимчасову відмову від можливості вибірки й
обробки подальших команд.
Для передбачення переходів процесор використовує розширений алгоритм
Yeh'a, що дозволяє з великою вірогідністю спрогнозувати, чи буде виконуватися
перехід. Якщо передбачення виявиться правильним, то виконання продовжиться з
малою затримкою або зовсім без затримки. Якщо ж припущення помилкове, то
частково виконані команди доведеться видаляти з конвеєра, а нові команди
вибирати з області пам'яті з правильною адресою, декодувати й виконувати їх. Це
спричинить за собою істотне зниження продуктивності, що прямо залежить від
глибини конвеєра — для архітектури Р6 у випадку помилкового передбачення
переходу втрати складуть від 4 до 15 тактів.
Алгоритм передбачення розгалужень є динамічним дворівневим і
ґрунтується на поводженні команд переходу за попередній період часу (оскільки
той самий перехід часто виконується більш ніж один раз, наприклад у циклі), а
також на поводженні конкретних груп команд, для яких із великою ймовірністю
можна передбачити конкретний перехід. Точність передбачення цього алгоритму
складає приблизно 90 відсотків.
Отже, 16-байтові команди передаються в дешифратор команд (Instruction
Decoder), що складається з трьох паралельних дешифраторів, два з яких — прості
(Simple) і один — складний (Complex). Завдання кожного дешифратора —
перетворення ІА-інструкції на одну або кілька мікрокоманд (micro-ops).
Прості дешифратори обробляють команди х86, трансльовані в єдину
мікрокоманду. Складний дешифратор працює з командами, яким відповідають від
однієї до чотирьох мікрокоманд. Деякі особливо складні команди неможливо
безпосередньо декодувати навіть складним дешифратором, тому вони переда-
ються в планувальник послідовності мікрокоманд (MIS — microcode instruction
sequencer), що генерує необхідну кількість мікрокоманд. Якщо простий
дешифратор зустрічає команду, яка не піддається трансляції, то вона передається
в складний дешифратор або в планувальник послідовності мікрокоманд.
У випадку, якщо складні й прості команди бездоганно вирівняні їхніми
відповідними дешифраторами, то дешифратори здатні генерувати загалом шість
мікрокоманд за такт, але, як правило, з усіх трьох дешифраторів за один такт
видаються три мікрокоманди, що відповідають у середньому двом-трьом ІА-
командам, які передаються в буфер відновлення послідовності (ROB — Reorder
Buffer). ROB містить 40 елементів завбільшки 254 байт кожен і може зберігати
мікрокоманду, два зв'язаних із нею операнди, результат і кілька бітів стану.
Останнім етапом перед виконанням команд є відображення регістрів,
здійснюване в таблиці псевдонімів регістрів (RAT — register alias table).
Архітектура х86 передбачає тільки вісім 32-розрядних регістрів загального
призначення, а з таким малим числом регістрів імовірність того, що дві сусідні
команди будуть використовувати один регістр, відносно велика. Відображення
регістрів допомагає послабити вплив таких реєстрових взаємозалежностей
(register dependencies) — у разі потреби запису в той самий регістр для двох
команд їх неможливо буде виконати позачергово без відображення регістрів, тому
що пізніша команда не може бути оброблена до завершення більш ранньої
команди.
При відображенні регістрів відбувається перетворення програмних
посилань на архітектурні регістри в посилання на 40 фізичних регістрів
мікрокоманд, реалізованих у буфері оновлення послідовності. Власне кажучи,
процесор «розмножує клонуванням» обмежену кількість програмованих
архітектурних регістрів і відслідковує, які клони містять найбільш пізні значення.
Це запобігає затримкам, які у протилежному випадку з'явилися б у процесі
обробки команд взаємо-залежностями в результаті конфліктуючих звертань до
регістрів.
Станція-резервуар виступає диспетчером і планувальником мікрокоманд,
для чого безупинно сканує буфер оновлення послідовності й вибирає команди,
готові до виконання (що мають усі вихідні операнди). Результат виконання
повертається назад у буфер і зберігається разом із мікрокомандою до виведення.
Порядок виконання команд ґрунтується не на їхній первісній послідовності, а на
факті готовності команди і її операндів до виконання, це і є out-of-order —
виконання зі зміною послідовності.
Якщо дешифратори призупинили роботу, виконавчі блоки продовжують
працювати, користуючись командами, що постачаються резервуаром, а у випадку
зайнятості виконавчих пристроїв резервуар надає можливість дешифраторам
працювати. Заповнюється резервуар у дуже рідкісних випадках, що приводить до
припинення роботи дешифраторів.
Виконання мікрокоманд здійснюється двома цілочисловими блоками, двома
блоками обчислень із плаваючою крапкою й одним блоком взаємодії з пам'яттю
— таким чином, можливе виконання до п'яти мікрокоманд за такт процесора.
Два цілочислові блоки здатні виконувати дві цілочислові мікрооперації
одночасно. Один із блоків розроблений спеціально для виконання операцій
переходу. Він здатний виявляти помилково передбачений перехід і оповіщати
буфер передбачення переходів про необхідність перезапуску конвеєра.
Блок взаємодії з пам'яттю відповідає за виконання мікрокоманд
завантаження й зберігання. Завантаження вимагає тільки вказівки адреси пам'яті,
тому що вже бути представлене однією мікрокомандою. Зберігання вимагає
також вказівки змісту для зберігання, тому кодується двома мікрокомандами.
Частина блоку, яка обробляє команди зберігання, має два порти, що дозволяє
обробляти адресну і мікрокоманду даних паралельно. Також можливим є
паралельне виконання операцій завантаження й зберігання в одному такті.
Для операцій із плаваючою крапкою передбачені два блоки обчислень,
причому другий призначений для обробки SIMD-інструкцій.
Команди, що виконуються не в тій послідовності, яка запропонована
програмою (speculative), доводиться, зрештою, розташувати в належній
послідовності — інакше процесор не завжди зможе одержати правильні
результати.
Буфер оновлення послідовності зберігає статус виконання й результати
кожної мікрокоманди. Блок виведення сканує буфер оновлення послідовності на
предмет виявлення мікрокоманд, які уже не вплинуть на виконання інших
мікрокоманд. Такі команди визнаються завершеними, і блок виведення вибудовує
їх у первісну послідовність, зважаючи на переривання, виключення, точки
зупинки і неправильні передбачення переходів.
Блок виведення здатний виводити три мікрокоманди за такт. Після того як
мікрокоманда виведена, вона видаляється з буфера оновлення послідовності.
Операції запису в пам'ять відкладаються до того часу, поки мікрокоманда,
що їх викликала, не буде виведена. Для цього в Р6 передбачений буфер
упорядкування звертань до пам'яті (МОВ — memory order buffer), у якому за
командами, що видаються блоком запису в пам'ять, зберігається інформація про
дані й адреси. Буфер упорядкування звертань до пам'яті пересилає дані в пам'ять
тільки після того, як буфер оновлення послідовності повідомить йому про те, що
мікрокоманда, про яку зроблений запис у пам'ять, знищується.
СРС №8

Тема: Особливості архітектури МП і386 та і486

Intel 80386 став першим 32-розрядним процесором в архітектурі ІА-32. В


архітектуру введені 32-розрядні регістри загального призначення (GP — general
purpose), що підходять як для зберігання адрес, так і для операндів. Нижня й
верхня половина зберегли можливість працювати як самостійні регістри для
забезпечення сумісності з попередніми процесорами. Для забезпечення
ефективного виконання коду, створеного під ранні процесори, на 32-розрядних
процесорах був уведений віртуальний х86-режим.
Маючи 32-розрядну шину адреси, 80386 процесор підтримував адресацію
до 4 ГБ пам'яті. При цьому була можливість використання як сегментованої
пам’яті, так і «плоскої», при якій усі сегментні регістри містили покажчик на ту
саму адресу, і в кожному сегменті доступним є весь 4-гігабайтний адресний
простір. Для віртуального управління пам'яттю вводиться сторінковий метод, при
якому адресний простір ділиться на фіксовані сторінки завбільшки по 4
кілобайти, ефективність якого значно перевищувала використання сегментів» 16-
розрядні інструкції, що дісталися в спадщину від попередніх процесорів одержали
можливість працювати з 32-розрядними операндами й адресами, також був
доданий ряд нових 32-розрядних інструкцій.
В архітектурі процесорів Intel підтримується зворотна сумісність з
об'єктним кодом для зберігання сумісності програмного забезпечення, але
одночасно в кожному новому поколінні використовуються чимраз ефективніші
мікропроцесорні архітектури й технології конструювання. Intel працювала над
упровадженням і з'єднанням складної техніки архітектури mainframe у
мікропроцесорну архітектуру. Чимало моделей паралельної обробки набагато
посилювали продуктивність техніки, і процесор 80386 був першим процесором
ІА, у який включили шість рівнобіжних стадій. Це інтерфейсний блок шини
(доступ до пам'яті й пристрою введення/виведення інших блоків), блок
попереднього коду (одержує об'єктний код із блоку шини і поміщає його в 16-
байт-ну чергу), блок декодування інструкції (декодує об'єктний код з
попереднього блоку в мікрокод), блок Виконання (виконує інструкції мікрокоду).
сегментний блок (переводить логічні адреси в лінійні адреси і виконує перевірку
захисту), і сторінковий блок (переводить лінійні адреси у фізичні, виконує
перевірку сторінкового захисту і містить кеш з інформацією про 32 найчастіше
використовувані сторінки).
У процесор i486 додана можливість паралельного виконання за допомогою
розширення блоку декодування інструкції й блоку Виконання процесора 80386 у
п'ять конвеєрних стадій, де кожна стадія (якщо потрібно) працює паралельно з
іншими й одночасно може виконуватися до п'яти інструкцій у різних стадіях.
Кожна стадія може виконати свою роботу над однією інструкцією за один такт,
тобто процесор i486 може виконати роботу над однією інструкцією за один такт
CPU. Також до процесора i486 був доданий 8-кіло-байтний кеш L1 для
збільшення відсотка інструкцій, що можуть бути виконані за один такт: інструкції
доступу в пам'ять (якщо операнд знаходився в кеші L1). У процесорі i486 уперше
на чіп з CPU був інтегрований блок арифметичного пристрою з плаваючою
комою (FPU) і додані нові контакти, біти й інструкції для підтримки більш
складних і потужних систем (підтримку L1-кеша й мультипроцесорності).
Пізніше Intel додала в процесор i486 SL Enhanced (розширений) функції
підтримки енергозберігання й інші можливості системного управління Ці функції
були розвинуті в процесорах 80386 SL і i486 SL, які були спеціалізовані для
швидко зростаючого ринку ноутбуків PC, що працюють від батарей. Ці функції
включали новий режим управління системою, який запускається власним
виділеним контактом переривання, що дозволяє керувати системою (такою як
керування енергозберіганням) і додається до системи прозоро для інших
операційних систем і всіх програм. Функції стоп таймер і автоматична зупинка
дозволяють CPU працювати на зниженій частоті (для зберігання енергії) або
зупинитися (зі зберіганням поточного стану).
Поява наступною після i80286 моделі процесора фірми Intel - процесора
i80386 - зумовило кінець ери використання середніми і деякими великими
організаціями великих комп'ютерів класу IBM-360/370 (аналогами яких є широко
поширені в нашій країні ЕОМ серії ЄС). За своїми можливостями персональні
комп'ютери, виконані на базі процесора i80386 порівнянні, а в ряді випадків
перевершують ЕОМ серії ЄС. І це ще без урахування споживчих властивостей і
витрат на ремонт та обслуговування. Остання на момент написання даної книги
модель - процесор i80486 - володіє ще більшою продуктивністю.
Незважаючи на значні архітектурні відмінності порівняно з процесорами
i8086 і i80286, процесори i80386 і i80486 забезпечують повну сумісність з
програмним забезпеченням, розробленим для більш ранніх моделей процесорів.
Процесор i80386 виконує всі програми, складені для процесора i8086, і притому
робить це значно швидше, ніж сам i8086.
На жаль, часто власники такої потужної техніки, як персональні комп'ютери
на базі i80386 і i80486, не використовують можливостей цих комп'ютерів навіть
наполовину. Працюючи в середовищі операційної системи MS-DOS з
програмами, підготовленими спеціально для цієї операційної системи, ви будете
використовувати тільки режим сумісності процесорів i80386 і i80486, решта
переваги нових процесорів (крім більш високої швидкості виконання програм)
будуть вам недоступні.
Аналогічне можна сказати і про операційну систему OS/2 версій від 1.0 до
1.3. Ця операційна система розрахована на процесор i80286. Зрозуміло, ви можете
використовувати OS / 2 цих версій в комп'ютерах на базі i80386 або i80486, проте
краще придбати OS / 2 версії 2.0 або більш старшої версії, орієнтованої на
використання архітектурних особливостей нових процесорів.
Які ж переваги мають процесори i80386 і i80486 перед попередніми
моделями? Наведемо лише найважливіші, на наш погляд, особливості нових
процесорів:
1. Висока швидкодія, що визначається, зокрема, високою тактовою частотою
(25 Мгц, 33 Мгц і навіть більше).
2. Розрядність процесорів i80386 і i80486 становить 32 біта (попередні моделі
від i8086 до i80286 були 16-розрядними). Збільшення розрядності процесора
призводить до збільшення швидкості виконання програм, оскільки
процесор здатний за один машинний такт обробити більший обсяг
інформації.
3. Розширений набір машинних команд і велика кількість підтримуваних
процесором типів даних дозволяють створювати більш ефективні, більш
компактні програми, які працюють значно швидше орієнтованих на 16-
розрядні процесори.
4. Новий механізм перетворення адрес, що є подальшим розвитком механізму,
використаного в процесорі i80286. Тепер процесор може розглядати пам'ять
як один або кілька сегментів, причому розмір сегмента може досягати 4
гігабайт (4 * 2 * 30 байт). З іншого боку, сторінкова адресація дозволяє
організувати захист пам'яті для кожної сторінки. Розмір сторінки складає 4
кілобайти. Використання сторінок значно полегшує реалізацію віртуальної
пам'яті.
5. Крім реального і захищеного режиму роботи, в процесорах i80386 і i80486
передбачений режим віртуального процесора 8086 (віртуальний режим), в
який процесор може увійти із захищеного режиму. Віртуальний режим
дозволяє емулювати процесор i8086, перебуваючи в захищеному режимі.
Це, зокрема, дає можливість в мультизадачной операційній системі
організувати одночасне виконання декількох програм, орієнтованих на
процесор i8086.

Об’єм книги обмежений, тому ми не зможемо детально розглянути всі


особливості процесорів i80836 і i80486. Для повного опису було б потрібно багато
сотень сторінок. Але це і не є нашою метою. Всі подробиці при необхідності ви
зможете дізнатися з літератури, список якої приведений в кінці книги. Однак для
практичного використання багатьох переваг нових процесорів вам не будуть
потрібні докладні знання всіх особливостей.
Це пов'язано з тим, що реально ви будете працювати в середовищі
мультизадачной операційної системи або використовувати інше програмне
забезпечення, яке надасть вам значну допомогу в складанні програм для
захищеного режиму. Якщо ж ваша область інтересів пов'язана з розробкою
операційних систем захищеного режиму для процесорів i80386 або i80486, вам не
обійтися без товстих посібників з процесорам, що поставляються фірмою Intel.
Отже, ми сконцентруємо увагу на практичному використанні
найважливіших особливостей процесора i80836. І перше, з чого ми почнемо - це
механізм перетворення адрес в процесорі i80836.
Додатково читайте за адресою:
- http://programming-lang.com/html/cpu/80486/ch5.htm
СРС №9

Тема: Пакетний режим передачі даних. Мікропроцесор Pentium та AMD

Пакетний режим передачі даних. Пакетний режим передачі даних (Burst


Mode) призначений для швидких операцій з рядками кеш-пам’яті. При цьому
вміст чотирьох 32-розрядних комірок основної пам’яті пересилається у один
рядок кеш-пам’яті або навпаки – вміст одного рядка кеш-пам’яті пересилається у
чотири 32-розрядні комірки основної пам’яті. Оскільки рядок кеш-пам’яті
процесора 486 має довжину 16 байт (128 біт), то для його пересилання потрібно
чотири 32-розрядних циклів шини, протягом кожного з яких відбувається
пересилання вмісту однієї 32-розрядної комірки з основної пам’яті або 32 біт з
кеш-пам’яті.
Буфери відкладеного запису. Буфери відкладеного запису призначені для
запам’ятовування даних у буфері, коли зовнішня шина зайнята. Процесор i486
має чотири буфери відкладеного запису. Інформація у буфер записується за один
такт. Після закінчення поточного циклу шини інформація з буферів передається
зовні – у пам’ять або ПВВ. Зовнішні операції запису з буферів виконуються у
тому самому порядку, в якому надійшли запити на запис. Але, якщо при
незвільнених буферах усі запити на запис у пам’ять пов’язані з кеш-попаданнями,
а запит на читання пов’язаний з кеш-промахом, то операція читання може
виконатися раніше, ніж операції запису. Але більше ніж один раз не можна
змінювати порядок виконання команд у МП, оскільки нові прочитані дані можуть
замінити модифікований рядок кеш–пам’яті, з якого поновлена інформація очікує
у буфері черги на запис в основну пам’ять. У такому разі друга спроба зміни
послідовності команд може порушити цілісність даних. Для операцій введення-
виведення зміна послідовності команд не допускається, бо це може порушити
протокол обміну.
OverDrive-процесори призначені для модернізації мікропроцесорної
системи або ПЕОМ. Модернізація здійснюється заміною початкової моделі МП
на нові моделі, так звані OverDrive-процесори, які мають вищі техніко-економічні
показники. Такими моделями для і486 є Intel DX2 OverDrive, Intel DX4 OverDrive,
Pentium OverDrive 63 та 83 МГц.
Для модернізації мікропроцесорної системи на системній платі, крім уже
встановленого процесора, у додатковий сокет (роз’єднувач), позначений як
overdrive, встановлюється OverDrive-процесор у корпусі PGA-69. OverDrive-
процесор спеціальним вихідним сигналом від’єднує основний процесор, що
залишається на платі.
Режим системного керування 32-розрядних мікропроцесорів. Деякі
модифікації процесорів 386 і 486, крім перерахованих режимів (реального,
захищеного і віртуального V86), мають режим системного керування SMM
(System Management Mode), який призначено для керування енергоспоживанням
або виконання програм, повністю ізольованих як від прикладного програмного
забезпечення, так і від операційної системи. Перемикання в режим SMM
здійснюється або апаратно – подачею нульового потенціалу на контакт
мікросхеми процесора, або, у деяких моделях, програмно – за прийняттям
повідомлення по шині APIC. Після цього процесор зберігає свій стан – вміст
майже всіх регістрів – у спеціальній області пам’яті SMRAM. Якщо режим SMM
використовується для вимкнення живлення процесора з можливістю швидкого
ввімкнення, пам’ять SMRAM має бути енергонезалежною. У цій області пам’яті
знаходиться підпрограма обробки переривання SMI. Доступ до пам’яті
дозволений тільки за наявності відповідного сигналу. Повернення з режиму SMM
здійснюється як програмно, так і за перериванням.

Особливості архітектури мікропроцесорів Pentium


У процесорах Pentium реалізується архітектура IA-32 (Intel Architеcture-32),
загальна для всіх 32-розрядних мікропроцесорів Intel, починаючи з i386. У
процесі розвитку IA-32 провадилося розширення можливостей обробки даних,
представлених у різних форматах. Процесори i386 виконували обробку тільки
цілочисельних операндів. Для обробки чисел з “плаваючою комою” використався
зовнішній співпроцесор i387, що підключався до мікропроцесора. До складу
процесорів i486 і наступних моделей Pentium введено спеціальний блок FPU
(Floating-Point Unit), що виконує операції над числами з “плаваючою комою”. У
процесорах Pentium MMX була вперше реалізована групова обробка кількох
цілочисельних операндів розрядністю 1, 2, 4 або 8 байт за допомогою однієї
команди. Така обробка забезпечується введенням додаткового блоку MMX (Multi-
Media Extension - Мультимедійне Розширення). Назва блоку відображає його
спрямованість на обробку відео- і аудіоданних, коли одночасне виконання однієї
операції над декількома операндами дозволяє істотно підвищити швидкість
обробки зображень і звукових сигналів. Починаючи з моделі Pentium III, у
процесори вводиться блок SSE (Streaming SIMD Extension - Потокове SIMD-
розширення) для групової обробки чисел з “плаваючою комою”. В процесорах
Pentium використані принципи суперскалярної і суперконвеєрної організації.
Суть суперскалярної організації полягає в здатності незалежно
виконувати команди паралельно на різних конвеєрах. Процесор має декілька
функціональних вузла, які паралельно виконують кілька машинних команд,
причому кожен вузол реалізований у вигляді конвеєра. У процесорі, показаному
на схемі, одночасно можуть виконуватися дві арифметичні команди із цілими
операндами, дві арифметичні команди з операндами у форматі із плаваючою
точкою й одна команда, що звертається до пам'яті (або команда збереження, або
команда завантаження).
Принцип суперконвеєрної організації базується на тім факті, що операції,
виконувані на багатьох позиціях конвеєра, займають менш половини машинного
такту. Отже, подвоєння частоти внутрішніх тактових імпульсів конвеєра дозволяє
виконувати дві задачі за один період зовнішніх синхроімпульсів.
Розширена 64-разрядна шина даних. Завдяки цьому МП Pentium
підтримує декілька типів циклів шини, включаючи і пакетний режим, при якому
частина даних з 256 біт передається у кеш-пам’ять даних за один цикл. Це істотно
підвищує швидкість передачі порівняно з процесором i486 DX. Наприклад, МП
Pentium із частотою шини 66 МГц має швидкість передачі 528 Мбайт/с, МП i486
DX із частотою шини 50 МГц – 160 Мбайт/с. Розширена шина даних забезпечує
конвеєризацію циклів шини, що збільшує пропускну здатність шини і дозволяє
другому циклу починатися раніше, ніж завершився перший.
Суперскалярна архітектура. Термін “суперскалярна” означає
мікропроцесорну архітектуру, що містить більше, ніж один обчислювальний блок.
Процесор Pentium має два конвеєри, які можуть виконувати дві команди
одночасно – U-конвеєр з повним набором і V-конвеєр з обмеженим набором
команд.
Перший етап виконується блоком БВВ, який має чотири 32-розрядних
буфери. Дві незалежні пари буферів вибірки працюють сумісно з БПАП, який
передбачає, буде перехід чи ні. Якщо перехід не передбачається, продовжується
вибірка, якщо передбачається – то дозволяється робота іншого буфера, і він
починає передвибірку з точки переходу. Якщо передбачений перехід не
здійснився, конвеєри команд очищаються, і передвибірка починається знову. На
другій стадії декодування команди формуються адреси операндів пам’яті.
Кожний конвеєр має свій 64-розрядний буфер відкладеного запису, які
можуть заповнюватися за один такт, наприклад, при одночасних кеш-промахах
запису на обох конвеєрах. Ніякі запити на читання не порушують порядку запитів
на запис, які вже знаходяться у буфері. Pentium підтримує строгий порядок
запису.
Високопродуктивний математичний співпроцесор БКОПК містить
восьмитактовий конвеєр і апаратні засоби реалізації арифметичних операцій –
множення, додавання, ділення. Більша частина команд операцій з плаваючою
комою можуть виконуватися в одному цілочисловому конвеєрі, після чого вони
надходять у конвеєр обчислень з плаваючою комою. Продуктивність вбудованого
арифметичного співпроцесора Pentium переважає продуктивність математичного
співпроцесора FPU-486 (Floating-Point Unit) у 2-10 разів.
Використання подвійного конвеєра дозволяє декільком командам
знаходитися в різних стадіях виконання і додатково збільшувати продуктивність
МП повним заповненням конвеєрів командами. У процесорі Pentium
використовується апаратне виконання команд, що також підвищує
продуктивність процесора.
Вже зараз існуют групи користувачів, яким потрібні МП з 64-бітними
шинами адреси та даних адресація:
1. користувачі систем проектування, симулятори яких вже давно мають
потребу в обсязі оперативної пам'яті більше 4 гігабайт. Хоча способи
обходити це обмеження відомі (приміром, Intel PAE), за ці способи
доводиться розплачуватися продуктивністю. Дійсно, процесори Xeon
підтримують режим 36 бітної адресації, у якій можуть адресувати до
64GB оперативної пам'яті. Але сегментація пам‘яті приводить до
втрати близька 30% продуктивності при операціях з пам'яттю.
2. користувачі баз даних, для яких важливо розширення обсягу пам'яті
таиможливість адресувати дані в базі даних з лінійною адресацією.
3. наукові обчислення, які потребують великого обсягу пам'яті, лінійної
адресації, велику розрядність оброблюваних даних. Крім того, деякі
алгоритми в 64 бітному поданні мають значно більш простий вид.
4. У області криптографії та додатків, що створені для забезпечення
безпеки. застосування, застосування 64-розрядних МП здатне
привести якщо не до революції, то до величезного ривка вперед.
Провідні розробники мікропроцесорів- фірми Intel, HP і AMD - для
побудови 64-розрядних МП обрали полярні підходи. Фірма Intel зробила ставку
на те, що архітектура EPIC (Explicitly ParallelInstruction Computing) за рахунок
пропонованої продуктивності змусить компанії більш активно використовувати
існуючі додатки (32-бітні) на новій платформі. Але цей процес виявився не таким
швидким, як передбачалося,
Фірма AMD обрала іншу стратегію. Її фахівці розраховують, що більш
раціонально зберегти виконання 32-бітних додатків на нових 64-розрядних
системах протягом того періоду, що піде на розробку й впровадження 64-бітних
версій програмних продуктів. Крім того, на відміну від Intel, що робить ставку на
просування Itanium 2 у сегменті високорівневих систем, AMD спробує переконати
користувачів серверів середнього рівня почати перехід на 64-бітну платформу.
Архітектура AMD64. МП, виконаний за цією архітектурою містить
процесорне ядро Hammer Athlon 64, вбудований контролер пам'яті DDR, роздільні
кеш пам'ять першого рівняL1команд та даних, вбудовану кеш-память другого
рівня L2 та шину HyperTransport.
Ядро процесора Athlon 64 для підвищення швидкодії підсистеми пам'яті
включає комутатор, що управляє потоками даних, команд і керуючих сигналів
між основними компонентами комп'ютера - процесором, оперативною пам'яттю й
периферійними пристроями. Контролер пам'яті з'єднаний із загальним
комутатором безпосередньо, усередині чипа, а той у свою чергу підключений до
внутрішньої шини процесора. Однак вбудований контролер пам'яті не має такою
ж гнучкості, як зовнішній. Для його модифікації необхідно переробляти весь
процесор, міняти маски для літографії, проводити безліч нових тестів - витрачати
час і гроші.
З появою Athlon 64 в архітектуру ПК прийшла нова концепція – тунелі,
тобто контролери, що підключаються до єдиного високошвидкісного каналу
обміну даними HyperTransport. Ця шина претендує на роль універсального
промислового стандарту й уже застосовується в різних пристроях. В архітектурі
Athlon 64 шина HyperTransport у загальному випадку використовується для
підключення до комутатора процесора одного тунелю - AGP-Контролера, і одного
пристрою - периферійного мосту (південного мосту як у попередній архітектурі
на базі IA-32). Гнучкість нового рішення полягає в тому, що в ланцюжок між
процесором і периферійним мостом можна підключати практично необмежену
кількість тунелів, що підтримують різні шини й пристрої. Розширення
можливостей системи стає можливим без складної модифікації всієї платформи в
цілому.
Базова частота шини HyperTransport збігається із частотою шини процесора
й становить 200 Мгц. Для збільшення продуктивності може бути застосований
множник частоти; максимальний рівняється восьми. За один такт по убудованій у
процесор шині передається два 16-бітних пакети (технологія DDR), звідси
виходить пропускна здатність - 3.2 Гб/с у кожному з напрямків. На сьогодні цього
цілком достатньо для обслуговування й AGP-Відеокарти, і всіх інших пристроїв
В МП AMD64 до наявних регістрів додано кілька нових регістрів, а існуючі
– розширені. Найбільш кардинальні зміни відбулися в регістрах загального
призначення (РЗП), регістрах SSE і регістрі покажчика інструкцій. Всі вони, за
винятком регістрів SSE, стали 64-бітними. Колишні 32-бітні РЗП тепер входять до
складу нових 64-бітних РЗП як молодші частини. Крім того, додано ще 8, дійсно
нових, регістрів загального призначення R 8-R15, аналогів яких в x 86-процесорах
не було. Нововведення обіцяє помітний ріст продуктивності, звичайно, за умови
використання відповідних компіляторів.
СРС №10

Тема: Внутрішні регістри. Загальне призначення

Внутрішні регістри процесора представляють собою надоперативну пам'ять


невеликого розміру, що призначена для тимчасового збереження службової
інформації чи даних. Кількість регістрів у різних процесорах може бути від 6-8 до
декількох десятків. Регістри можуть бути універсальними і спеціалізованими.
Спеціалізовані регістри, що присутні в більшості процесорів, - це регістр-
лічильник команд, регістр стану (PSW), регістр покажчика стека. Інші регістри
процесора можуть бути як універсальними, так і спеціалізованими.
Наприклад, у 16-розрядному процесорі Т-11 фірми DEC було 8 регістрів
загального призначення (РЗП) і один регістр стану. Усі регістри мали по 16
розрядів. З регістрів загального призначення один виділявся під лічильник
команд, інший - під показник стека. Всі інші регістри загального призначення
цілком взаємозамінні, тобто мають універсальне призначення, можуть зберігати
як дані, так і адреси (покажчики), індекси і т.д. Максимально допустимий об'єм
пам'яті для даного процесора складав 64 Кбайт (адрес пам'яті 16-розрядний).
У 16-розрядному процесорі MC68000 фірми Motorola було 19 регістрів: 16-
розрядний регістр стану, 32-розрядний регістр лічильника команд, 9 регістрів
адреси (32-розрядних) і 8 регістрів даних (32-розрядних). Два регістри адреси
відведені під показники стека. Максимально допустимий об'єм адресованої
пам'яті - 16 Мбайт (зовнішня шина адреси 24-розрядна). Усі 8 регістрів даних
взаємозамінні. 7 регістрів адреси - теж взаємозамінні.
У 16-розрядному процесорі Intel 8086, що став базовим у лінії процесорів,
які використовувались у персональних комп'ютерах, реалізований принципово
інший підхід. Кожен регістр цього процесора має своє особливе призначення, і
заміняти один одного регістри можуть тільки частково чи ж не можуть узагалі.
Зупинимося на особливостях цього процесора докладніше.
Процесор 8086 має 14 регістрів розрядністю по 16 біт. З них чотири регістри
(AX, BX, CX, DX) - це регістри даних, кожен з яких крім збереження операндів і
результатів операцій має ще і своє специфічне призначення:
 регістр АХ - множення, ділення, обмін із пристроями вводу/виводу
(команди вводу і виводу);
 регістр ВХ - базовий регістр в обчисленнях адреси;
 регістр СХ - лічильник циклів;
 регістр DX - визначення адреси вводу/виводу.
Для регістрів даних існує можливість роздільного використання обидвох
байтів (наприклад, для регістра АХ вони мають позначення AL - молодший байт і
AH - старший байт).
Наступні чотири внутрішніх регістри процесора - це сегментні регістри,
кожний з яких визначає положення одного з робочих сегментів (Рис. 3.10):
 регістр CS (Code Segment) відповідає сегменту команд, які виконуються в
даний момент;
 регістр DS (Data Segment) відповідає сегменту даних, з якими працює
процесор;
 регістр ES (Extra Segment) відповідає додатковому сегменту даних;
 регістр SS (Stack Segment) відповідає сегменту стека.
Рис. 1 – Сегменти команд, даних і стека в пам'яті

У принципі, усі ці сегменти можуть і перекриватися для оптимального


використання простору пам'яті. Наприклад, якщо програма займає тільки частину
сегмента, то сегмент даних може починатися відразу після завершення роботи
програми (з точністю 16 байт), а не після закінчення всього сегмента програми.
Наступні п'ять регістрів процесора (SP - Stack Pointer, BP - Base Pointer, SI -
Source Index, DI - Destination Index, IP -Instruction Pointer) служать показниками
(тобто визначають зсув у межах сегмента). Наприклад, лічильник команд
процесора утвориться парою регістрів CS і IP, а покажчик стека - парою регістрів
SP і SS. Регістри SI, DI використовуються в лінійкових операціях, тобто при
послідовній обробці декількох комірок пам'яті однією командою.
Останній регістр FLAGS - це регістр стану процесора (PSW). З його 16
розрядів використовуються тільки дев'ять (Рис. 3.11): CF (Carry Flag) - прапор
переносу при арифметичних операціях, PF (Parity Flag) - прапор парності
результату, AF (Auxiliary Flag) - прапор додаткового переносу, ZF (Zero Flag) -
прапор нульового результату, SF (Sign Flag) - прапор знаку (збігається зі старшим
бітом результату), TF (Trap Flag) - прапор покрокового режиму (використовується
при налагодженні), IF (Interrupt-enable Flag) - прапор дозволу апаратних
переривань, DF (Direction Flag) - прапор напрямку при лінійкових операціях, OF
(Overflow Flag) - прапор переповнення.

Рис. 2 – Регістр стану процесора 8086

Біти регістра стану встановлюються чи очищаються в залежності від


результату виконання попередньої команди і використовуються деякими
командами процесора. Біти регістра стану можуть також встановлюватися й
очищатися спеціальними командами процесора (про систему команд процесора
буде розказано в наступному розділі).
У багатьох процесорах виділяється спеціальний регістр, який називається
акумулятором (тобто накопичувачем). При цьому, як правило, тільки цей регістр-
акумулятор може брати участь у всіх операціях, тільки через нього може
відбуватися взаємодія з пристроями вводу/виводу. Іноді в ньому ж міститься
результат будь-якої виконаної команди (у цьому випадку говорять навіть про
"акумуляторну" архітектуру процесора). Наприклад, у процесорі 8086 регістр
даних АХ можна вважати своєрідним акумулятором, тому що саме він
обов'язково бере участь у командах множення і ділення, а також тільки через
нього можна пересилати дані в пристрої вводу/виводу і з них. Виділення
спеціального регістра-акумулятора спрощує структуру процесора і прискорює
пересилання кодів усередині процесора, але в деяких випадках сповільнює роботу
системи в цілому, тому що весь потік інформації повинен пройти через один
регістр-акумулятор. У випадку, коли кілька регістрів процесора цілком
взаємозамінні, таких проблем не виникає.
СРС №11

Тема: Регістри прапорців. Системні регістри

В багатьох випадках регістри даних цілком еквівалентні, проте переважно


користуватися регістром АХ, оскільки багато команд займають в пам'яті менше
місця і виконуються швидше, якщо їх операндом є регістр АХ (або його половина
AL). З іншого боку, ряд команд використовує певні регістри неявним чином. Так,
всі команди циклів використовують регістр СХ як лічильник числа повторень; у
командах множення і ділення регістри АХ і DX виступають як неявні операнди;
операції введення-виводу можна здійснювати тільки через регістри АХ або AL і
так далі
Індексні регістри SI і DI так само, як і регістри даних, можуть
використовуватися довільним чином. Проте їх основне призначення - зберігати
індекси, або зсуви щодо деякої бази (тобто початки масиву) при вибірці операндів
з пам'яті. Адреса бази при цьому може знаходитися в базових регістрах ВХ або
ВР. Спеціально передбачені команди роботи з рядками використовують регістри
SI і DI як неявні покажчики в оброблюваних рядках.
Регістр ВР служить покажчиком бази при роботі з даними в стекових
структурах, але може використовуватися і довільним чином в більшості
арифметичних і логічних операцій.
Останній з групи регістрів-покажчиків, покажчик стека SP, стоїть осібно від
інших в тому відношенні, що використовується виключно як покажчик вершини
стека - спеціальної структури, яка буде розглянута нижче.
Регістри SI, DI, BP і SP, на відміну від регістрів даних, не допускають
побайтову адресацію.
Чотири сегментні регістри CS, DS, ES і SS є найважливішим елементом
архітектури процесора, забезпечуючи, як вже наголошувалося вище, адресацію
20-розрядного адресного простору за допомогою 16-розрядних операндів.
Докладніше про них буде розказано в наступному розділі.
Покажчик команд IP "стежить" за ходом виконання програми, указуючи в
кожен момент відносну адресу команди, наступної за виконуваною. Регістр IP
програмно недоступний (IP - це просто його скорочена назва, а не мнемонічне
позначення, використовуване в мові програмування); нарощування адреси в нім
виконує мікропроцесор, враховуючи при цьому довжину поточної команди.
Команди переходів, переривань, виклику підпрограм і повернення з них
змінюють вміст IP, здійснюючи тим самим переходи в необхідні точки програми.
У наступному розділі ми ще повернемося до ролі регістра IP у виконанні
програми.
Регістр прапорців (його часто називають FLAGS), еквівалентний регістру
стану процесора інших обчислювальних систем, містить інформацію про
поточний стан процесора (див. рис. 1). Він включає 6 прапорців стану і 3 біта
управління станом процесора, які, втім, теж називаються прапорцями.

Рис. 1 – Регістр прапорців


Прапорці стану наново встановлюються процесором після виконання
кожної чергової команди, і по ним можна якоюсь мірою судити про результат
виконання цієї команди (наприклад, чи не рівний її результат, нулю). Прапори
управління дозволяють змінювати деякі умови роботи процесора, наприклад,
вирішувати або забороняти апаратні переривання. Розглянемо спочатку прапори
стану.
Прапорець перенесення CF (Carry Flag) відображає перенесення або позика
при виконанні арифметичних операцій. Перенесенням називається ситуація, коли
в результаті виконання правильною, загалом, команди утворюється число, що
містить більше 16 двійкових розрядів і, отже, що не поміщається в регістр або
елемент пам'яті. Хай, наприклад, в регістрі АХ міститься число 60000, а в регістрі
ВХ - 40000. При виконанні команди складання
add ax,bx
у регістрі-приймачі результату, яким в даному випадку служитиме регістр
АХ, має бути записане число 100000, яке, зрозуміло, там поміститися не може. В
цьому випадку і встановлюється прапор CF, за станом якого можна встановити,
що відбулося перенесення і, отже, вміст АХ (яке в даному випадку дорівнюватиме
100000 - 65536 = 34464) не є правильним результатом.
Необхідно підкреслити, що ситуація перенесення, як і взагалі будь-яка
помилка, що виникла по ходу виконання програми, не приводить ні до яких
наслідків, окрім установки відповідного прапора. Процесор, встановивши
прапорець, вважає свою місію за виконану і переходить до виконання наступної
команди. Якщо перенесення в даному випадку дійсно є індикатором помилки,
програма повинна після виконання команди складання проаналізувати стан
прапорця CF, і при встановленому прапорі перейти на фрагмент обробки цієї
помилки. Такий аналіз виконується за допомогою команд умовного переходу, в
даному випадку за допомогою команди jc (jump if carry, перехід по перенесенню):
add AX,BX
jc error ;B випадку перенесення перехід
;на мітку
error ;
Нормальне продовження
Сказане справедливо по відношенню до всіх помилкових ситуацій, що
виникають в програмі, - програма сама зобов'язана відловлювати всі помилки і
виконувати передбачені для таких випадків дії. Єдине, що може зробити процесор
- це повідомити програму про підозрілий результат установкою того або іншого
прапорця.
Прапорець паритету PF (Parity Flag) встановлюється в 1, якщо результат
операції містить парне число двійкових одиниць, і скидається в Про, якщо число
двійкових одиниць непарно. Цей прапор можна використовувати, наприклад, для
пошуку помилок при передачі даних і при виконанні діагностичних тестів.
Прапорець допоміжного перенесення AF (Auxiliary Flag) використовується
в операціях над двійково-десятковими числами. Він відображає перенесення або
позику із старшої тетради (4 біта). Двійково-десятковий формат має на увазі запис
в кожній половинці байта десяткової цифри у вигляді її двійкового еквівалента,
що дозволяє зберігати в байті дворозрядне десяткове число в діапазоні від 0 до 99
Двійково-десяткових чисел використовуються, зокрема, для обміну даними з
вимірювальними приладами. Для їх обробки в процесорі передбачений цілий ряд
специфічних команд, при використанні яких доводиться аналізувати стан прапора
допоміжного перенесення.
Прапорець нуля ZF (Zero Flag) встановлюється в 1, якщо результат операції
дорівнює 0. Наприклад, прапор ZF встановиться, якщо з 5 відняти 5 або до 10
додати -10.
Прапорець знаку SF (Sign Rag) показує знак результату операції,
встановлюючись в 1 при негативному результаті. Як буде показано в наступному
розділі, процесор розрізняє числа без знаку, тобто істотно позитивні, і числа із
знаком, які можуть бути як позитивними, так і негативними. Ознакою
отріцательності числа служить встановлений старший біт цього числа (битий 15
для слів або біт 7 для байтів). Прапор SF встановлюється, якщо в результаті якої-
небудь операції сформовано число зі встановленим старшим бітом, наприклад,
S000h або Ffffh.
Прапорець переповнювання OF (Overflow Rag) фіксує переповнювання,
тобто вихід результату за межі допустимого діапазону значень для чисел із
знаком. У знаковому представленні числа від 0000h до 7fffh вважаються за
позитивних, а числа від S000h до Ffffh, тобто числа зі встановленим старшим
бітом - негативними. Прапор OF встановлюється, якщо, наприклад, при складанні
двох позитивних чисел вийшов результат, 7fffh (тому що, починаючи з S000h,
йдуть вже негативні числа), що перевищує, або при відніманні з негативного
числа вийшов результат, менший S000h (тому що такі числа вважаються за
позитивні). Пізніше це питання буде розглянуто детальніше.
Перейдемо тепер до прапорців, що управляють, яких в регістрі прапорців
реального режиму всього три.
Прапорець трасування (пастки) TF (Trace Rag), що управляє,
використовується для здійснення покрокового виконання програми. Якщо Tf=1,
то після виконання кожної команди процесор реалізує процедуру переривання
через вектор з номером 1, розташований за фізичною адресою 04. Цей прапор
активно використовується в програмах відладчиків, які повинні допускати
виконання відладжуваної програми по кроках або з точками останову.
Прапорець дозволу переривань IF (Interrupt Rag), що управляє, вирішує
(якщо рівний 1) або забороняє (якщо рівний 0) процесору реагувати на
переривання від зовнішніх пристроїв. Тим самим створюється можливість
виконання особливо відповідальних фрагментів програм без яких-небудь
перешкод.
Прапорець напряму DF (Direction Rag), що управляє, використовується
командами обробки рядків. Якщо Df=0, рядок обробляється в прямому напрямі,
від менших адрес до великих; якщо Df=1, обробка рядка йде у зворотному
напрямі. Приклади використання цього прапора будуть приведені при розгляді
відповідних команд процесора.
Для установки і скидання прапорців, що управляють, передбачені особливі
команди, наприклад sti (set interrupt, встановити переривання) або cli (clear
interrupt, скинути переривання).

Системні регістри мікропроцесора


Сама назва цих регістрів говорить про те, що вони виконують специфічні
функції в системі. Використання системних регістрів жорстко регламентовано.
Саме вони забезпечують роботу захищеного режиму. Їх також можна розглядати
як частину архітектури мікропроцесора, що навмисно залишена видимою для
того, щоб кваліфікований системний програміст міг виконати операції на
найнижчому рівні.
Системні регістри можна розділити на три групи:
1. чотири регістра керування;
2. чотири регістра системних адрес;
3. вісім регістрів відладки.
СРС №12

Тема: Керуючі регістри. Відладочні регістри

Керуючі регістри BIU: CS (покажчик командного сегмента), DS покажчик


сегмента даних), SS (покажчик сегмента стека), ES (покажчик додаткового
сегмента) та ін. служать для визначення фізичних адрес ВП – операндів і команд.
Регістр IP (Instruction Pointer) є покажчиком адреси команди, яка буде
вибиратися в конвеєр команд як чергову команди (у вітчизняній літературі такий
пристрій називається лічильник команд). Конвеєр команд МП зберігає декілька
команд, що дозволяє при виконанні лінійних програм поєднати підготовку
чергової команди з виконанням поточної.
До керуючим регістрів МП відноситься і регістр прапорів, кожен розряд
якого має строго певне призначення. Зазвичай розряди регістра прапорів
встановлюються апаратно при виконанні чергової операції залежно від
отримуваного в АЛУ результату. При цьому фіксуються такі властивості
одержуваного результату, як нульовий результат, від'ємне число, переповнення
розрядної сітки АЛУ і т.д. Але деякі розряди регістра прапорів можуть
встановлюватися за спеціальними командам. Деякі розряди мають чисто
службове призначення (наприклад, зберігають розряд, «що випав» з АЛУ під час
зсуву) або є резервними (тобто не використовуються).
Усі прапорці молодшого байта регістра встановлюються арифметичними
або логічними операціями МП. Усі прапорці старших байтів, за винятком прапора
переповнення, встановлюються програмним шляхом, для цього в МП є команди
установки прапорців (STC, STD, STI), скидання (CLC CLD, CLI), інвертування
(CMC).
Налагоджувальні регістри (або регістри налагодження) введені в процесори
починаючи з Intel386. Вони призначені для використання розробниками ПЗ при
перевірці та налагодженні коду програми. Ці регістри дозволяють встановлювати
контрольні точки по коду і читаним / записуваним даними, виконувати
трасування, відстежуючи таким чином місця виникнення помилок.
Налагоджувальні регістри є привілейованим ресурсом і доступні програмі чи в
режимі реальної адресації, або в захищеному режимі при CPL = 0.
Доступ до налагоджувальні регістри здійснюється командою MOV DR.
Спроба використання даної команди на рівні привілеїв відмінному від 0
призводить до генерації помилки загального захисту (#GP). Для цілей
налагодження та перевірки програм можуть використовуватися і деякі спеціальні
регістри MSR (Спеціальні регістри моделі) підтримувані в процесорах Pentium,
Pentium Pro, ... Формат налагоджувальних регістрів наведено на рисунку 1.
Рис. 1 – Формат налагоджувальних регістрів

Регістри DR0 ... DR5


Регістри DR0, DR1, DR2, DR3 містять лінійні адреси чотирьох точок
зупину. Порівняння цих адрес виробляється до трансляції фізичної адреси. Кожна
з чотирьох точок зупину описується окремо в регістрі DR7.
Регістри DR4 і DR5 зарезервовані. Процесори Intel386 і Intel486 асоціюють
ці регістри з регістрами DR6 і DR7 відповідно. Коли розширення налагодження
вимкнено (CR4.DE = 0), процесори Pentium ... надходять аналогічно. Але якщо
включено розширення налагодження (CR4.DE = 1), то будь-які посилання на
регістри DR4 і DR5 призводять до генерації помилки "невизначений код операції"
(#UD).
Регістр DR6
Регістр стану налагодження DR6 містить інформацію про те, яка з точок
зупину викликала особливу ситуацію налагодження, і деяку іншу інформацію.
Процесор ніколи самостійно не очищає вміст регістра DR6. Тому відладчик
завжди повинен стежити за тим, щоб на його роботу не чинили впливу старі дані
в DR6.
B0..B3 (біти 0..3)
Встановлюються при зустрічі відповідної контрольної точки (кожна
контрольлная точка повинна бути правильно описана бітами LENi і R / Wi
регістра DR7) незважаючи на те, дозволена для неї генерація особливої ситуації
налагодження чи ні (задається бітами Li і Gi регістра DR7).
BD (біт 13)
Використовується спільно з прапором DR7.GD для забезпечення
сверхзахисту відладчика. Коли сверхзащіта включена (DR7.GD = 1), прапор BD
буде встановлюватися, якщо наступна команда читає або записує один з
налагоджувальних регістрів, тим самим сигналізуючи отладчику про те, що
особлива ситуація налагодження (#DB) має місце через відмову при спробі
звернення до налагоджувальні регістри.
BS (біт 14)
Біт BS встановлюється, якщо пастка налагодження генерується через
включеного покрокового режиму (EFLAGS.TF = 1). Покроковий режим є
найбільш привілейованим, але коли встановлений BS, також можуть
встановлюватися і будь-які з інших бітів стану налагодження.
BT (біт 15)
Процесор встановлює біт BT перед входом в обробник переривань
налагодження, якщо відбувається перемикання завдань і в TSS нової задачі біт T
(біт шлюзу налагодження) встановлений. Перемикання відбувається нормально,
але перед виконанням першої команди нового завдання генерується пастка
налагодження (#DB). Таким чином, біт T в TSS дозволяє організувати точки
зупину при перемиканні задач (що не може бути задане будь-яким з бітів регістра
управління налагодженням DR7), а біт DR6.BT индицирует отладчику про те, що
особлива ситуація налагодження викликана перемиканням завдань.
Регістр DR7
Регістр управління налагодженням DR7 встановлює режими спрацювання
точок зупинки і задає викликають їх спрацьовування форми доступу до пам'яті
або введення / висновку для кожної точки зупину.
Li / Gi (біти 0 ... 7)
Біти дозволу відповідно локальних і глобальних контрольних точок. Коли
при виконанні програми процесор зустрічає одну з контрольних точок і для неї
встановлений відповідний біт DR7.Li або DR7.Gi, генерується особлива ситуація
налагодження. Біти Li дозволяють встановлювати контрольні точки для
конкретних завдань, не зачіпаючи інші. Gi впливають на всі завдання. Біти Li
автоматично очищаються при перемиканні задач.
LE, GE (біти 8, 9)
Керують можливістю "точної відповідності контрольних точок даних".
Якщо LE або GE встановлений, повідомлення про будь пастці в контрольній точці
за даними матиме місце безпосередньо після завершення команди, яка викликала
пересилку операнда. Якщо ці біти не встановлені, повідомлення про останове за
даними може надійти через кілька команд або не вступити взагалі.
Рекомендується встановлювати ці біти щоразу, коли використовуються
контрольні точки даних. При перемиканні задач LE очищається, GE - ні.
LENi (біти 18, 19, 22, 23, 26, 27, 30, 31)
Поля LEN задають довжину перевіряється значення для кожної контрольної
точки (область, усередині якої умови зупинки можуть спрацювати). Довжина
може становити 1, 2 або 4 байти. Значення цих полів інтерпретується таким
чином:
00 - один байт;
01 - два байти;
10 - не визначено;
11 - чотири байти.
Якщо задано: поле RWi = 00 (переривання при виконанні команди), то LENi
має дорівнювати нулю. Залежно від LEN має дотримуватися вирівнювання адрес
контрольних точок (міститися в DR0 ... DR3) по межах слів (LENi = 01) або
подвійних слів (LENi = 11). Перед порівнянням адрес процесор маскує молодші
біти записаного в DR0 ... DR3 адреси бітами LENi, а адреси введення / виводу
розширюються нулями з 16 до 32-х біт. Спрацювання точки зупину за даними
відбувається, якщо адреса хоча б одного байта з записуваного / читаного значення
потрапляє в інтервал задається адресою в DR0 ... DR3 і відповідним значенням в
полі DR7.LENi. Наприклад, при DR = B0002h, R / W = 11b (читання / запис
даних), LEN = 01b (2 байти): читання / запис 1 або 2-байтових операндів за
адресою B0002h приведуть до спрацьовування пастки, читання / запис 4-
байтового операнда за адресою B0001h призведе до спрацьовування пастки,
читання / запис 1 або 2-байтових операндів за адресою B0000h не приведуть до
спрацьовування пастки.
RWi (біти 16, 17, 20, 21, 24, 25, 28, 29)
Біти R і W задають, відповідно, для кожної контрольної точки в DR0 ... DR3
тип дії, при якому повинна спрацювати пастка.
00 - виконання команди;
01 - запис даних;
10 - Intel386, Intel486: не визначено;
Pentium ...: читання / запис введення / виводу (якщо CR4.DE = 1 -
включено розширення налагодження); не визначено (якщо CR4.DE = 0);
11 - читання / запис даних (виключаючи вибірку команд).
GD (біт 13)
Біт призначений для захисту відладчика. Використовується спільно з бітом
DR6.BD. Регістри налагодження доступні тільки в реальному режимі або в
захищеному режимі при рівні привілеїв 0. Установка біта GD в реальному режимі
і захищеному режимі на рівні привілеїв 0 забезпечує сверхзащіту усіх звернень до
регістрів налагодження. При необхідності це гарантує програмному отладчику
повний контроль над регістрами налагодження. Коли біт GD встановлений,
спроба звернутися до кожного з регістрів налагодження викликає особливу
ситуацію 1 (Переривання налагодження). При виклику процедури обробки біт GD
автоматично скидається, що забезпечує цій процедурі вільний доступ до регістрів
налагодження, в той же час біт DR6.BD индицирует причину генерації
переривання
СРС №13

Тема: Регістри співпроцесора

Математичний або арифметичний співпроцесор (FPU) призначений для


виконання операцій над числами в форматі з плаваючою комою і довгими цілими
числами. Він значно прискорює обрахунки, які пов’язані з дійсними числами.
Співпроцесор може виконати як прості арифметичні операції (множення,
додавання, віднімання, ділення),так і обраховувати значення різних
функцій(косинус, синус, тангенс, котангенс).
Основна область застосування математичного співпроцесора – наукові
обрахунки, машинна графіка, і звичайно ж ігри, які моделюють реальний світ,
оскільки такі ігри, як правило, включають в себе і машинну графіку, та інженерні
обрахунки.
Безпосереднє програмування арифметичного співпроцесора позволяє більш
оптимально побудувати код програми і пришвидшити обрахунки. Багато засобів
програмування дозволяють робити асемблерні вставки, які дають можливість
напряму звертатись до співпроцесора. Це в свою чергу, дозволяє відмовитися від
використання додаткових бібліотек, необхідних для роботи з дійсними числами.
При цьому, відповідальність за коректність операндів і перевірку результатів у
випадку безпосереднього програмування арифметичного співпроцесора, повністю
покладається на програміста.
Зараз переважна більшість персональних комп’ютерів в якості центрального
процесора використовують різні покоління процесора Pentium фірми Intel. Цей
процесор має вбудований математичний співпроцесор.
Регістри співпроцесора
Арифметичний співпроцесор має наступну систему регістрів:
1. 8 регістрів загального призначення для роботи з даними (R0–R7, кожний
розміром 10 байт), до яких можна звертатися тільки як до елементів стеку
(де ST(0) – його вершина);
2. регістр стану SR (два байта) – якісно характеризує результати обчислень
(помилки, переповнення тощо);
3. регістр управління CR (два байта) – управління точністю, заокругленням,
маски особливих ситуацій;
4. регістр тегів TW (два байта) – описує вміст регістру даних (пусто, містить
число, нуль, не-число);
5. регістр вказівника команди FIP (шість байтів);
6. регістр вказівника операнду команди FDIP (шість байтів).

Останні 2 регістри (FIP, FDIP) використовуються сумісно при опрацюванні


виключних ситуацій і містять адресу останньої виконаної команди і адресу
операнду цієї команди.

Числові регістри
Числові регістри, як правило, в технічній літературі позначаються ST0 -
ST7. Числові регістри використовуються за принципом стеку. Регістр стану в полі
ST містить номер числового регістра, що є вершиною стеку. При виконанні
команд як операнди можуть виступати числові регістри. В цьому випадку номер
вказаного в команді регістра додається до вмісту поля ST регістра стану і таким
чином визначається регістр, що використовується. Більшість команд після
виконання збільшують поле ST регістра стану, записуючи результати своєї роботи
в стек числових регістрів.
Регістр тегів (TW)
Цей регістр розділений на вісім двобітових полів, які позначаються
TAG0...TAG7. Кожне поле відноситься до свого числового регістра.
Поля регістра тегів класифікують вміст "свого" числового регістра:
00 - Регістр містить дійсне ненульове число
01 - В регістрі знаходиться нуль
10 - Регістр містить недійсне число - нечисло, нескінченність, невизначеність
11 - Порожній неініціалізований регістр

Наприклад, якщо всі регістри співпроцесора були порожні, а потім в стек


числових регістрів було занесено одне дійсне ненульове значення, вміст регістра
тегів в шістнадцятковому представленні буде 3FFFh.
СРС №14

Тема: Арифметичні дії над двійковими числами

Арифметичні дії в двійковій системі проводиться за тими ж правилами, що і


в десятковій системі числення. Проте оскільки в двійковій системі числення
використовуються тільки дві цифри 0 і 1, то арифметичні дії виконуються
простіше, ніж десятковій системі.

Додавання двозначних чисел


Додавання виконується поразрядно стовпчиком, починаючи з молодшого
розряду і використовуючи таблиці двійкового складання:
0+0=0
0+1=1
1+0=1
1 + 1 = 10
При складанні необхідно пам'ятати, що 1+1 дають нуль в даному розряді і
одиницю перенесення в старший.
Приклад 1. Додати два числа:

Віднімання двозначних чисел


Віднімання виконується порозрядно стовпчиком, починаючи з молодшого
розряду і використовуючи таблиці двійкового віднімання:
0-0=0
1-0=1
1-1=0
10 - 1 = 1
Приклад 2. Знайти різницю двох чисел:

Тобто при відніманні двозначних чисел у разі необхідності займається 1 з


старшого розряду, яка дорівнює двом одиниць молодшого розряду.

Множення двозначних чисел


Множення в двійковій системі проводиться по тому ж принципу, що і в
десятковій системі числення, при цьому використовується таблиця двійкового
множення:
0*0=0
0*1=0
1*0=0
1*1=1
Приклад 3. Знайти множення двох чисел:

Як видно з наведених прикладів, операція множення може бути


представлена як операції зсуву і підсумовування.

Ділення двозначних чисел


Поділ у двійковій системі проводиться вирахуванням дільника зі зрушенням
вправо, якщо залишок більше нуля.
Приклад 4. Знайти приватне двох чисел якщо:

1. Ділене більше дільника:

2. Ділене менше дільника:

Як видно з наведених прикладів, операція поділу може бути представлена


як операції порівняння, зсуву і підсумовування.
СРС №15

Тема: Арифметичні дії над числами з основою 8

У вісімковій системі числення всі операції проводяться за тими ж


правилами, за якими ці дії виконуються в десятковій системі числення. При
виконанні операцій додавання і віднімання зручно використовувати вісім-кову
таблицю складання, при виконання операції множення використовує-мо таблицю
множення.

Приклад 1. Додавання вісімкових чисел 7418 + 2528

7 4 1
+2 5 2
1 2 1 3

Зробимо перевірку в десятковій системі числення:


21 0
7 4 18 = 7∙82 + 4∙81 + 1∙80 = 48110;

21 0
2 5 2 8 = 2∙82 + 5∙81 + 2∙80 = 13610;

3210
1 2 1 38 = 1∙83+2∙82+1∙81+3∙80=65110; 48110 + 13610 = 65110.

Приклад 2. Віднімання вісімкових чисел 3468 – 1548

−3 4 6
1 5 4

1 7 2

Зробимо перевірку в десятковій системі числення:

21 0
3 4 6 8 = 3∙82 + 4∙81 + 6∙80 = 23010;

210
1 5 4 8 = 1∙82 + 5∙81 + 4∙80 = 10810; 23010 – 15410 = 12210;

210
1 7 2 8 = 1∙82 + 7∙81 + 2∙80 = 12210.
Приклад 3. Виконати множення вісімкових чисел 318 ∙ 238

∙3 1
2 3

7 3 3

Зробимо перевірку в десятковій системі числення:

10
318 = 3 ∙ 81 + 1∙80 = 2510;

10
2 3 8 = 2 ∙ 81 + 3 ∙ 80 = 1910; 2510 ∙ 1910 = 47510;

21 0
7 3 3 8 = 7 ∙ 82 + 3 ∙ 81 + 3 ∙ 80 = 47510.

Приклад 4. Виконати множення вісімкових чисел 1170,648 ∙ 46,38


*1170,64 46,3
+ 355 234
+ 7324 70
47432 0

57334,134 Отже, 1170,648 ∙ 46,38 = 57334,1348.

Зробимо перевірку в десятковій системі числення:

1170,648 = 83 ∙ 1 + 82 ∙ 1 + 8 1 ∙ 7 + 80 ∙ 0 + 8−1 ∙ 6 + 8−2 ∙ 4 = 632,812510;


46,38 = 81 ∙ 4 + 80 ∙ 6 + 8−1 ∙ 3 = 38,37510;

632,812510 ∙ 38,37510 = 24284,179610;


57334,1348 = 84∙5 + 83∙7 + 82∙3 + 81∙3 + 80∙4 + 8−1∙1 + 8−2∙3 + 83∙4 =24284,179610.
Таблиці додавання та множення в вісімковій системі числення

Таблиця 1 – Додавання в вісімковій системі числення


+ 0 1 2 3 4 5 6 7 10
0 0 1 2 3 4 5 6 7 10
1 1 2 3 4 5 6 7 10 11
2 2 3 4 5 6 7 10 11 12
3 3 4 5 6 7 10 11 12 13
4 4 5 6 7 10 11 12 13 14
5 5 6 7 10 11 12 13 14 15
6 6 7 10 11 12 13 14 15 16
7 7 10 11 12 13 14 15 16 17
10 10 11 12 13 14 15 16 17 20

Таблиця 2 – Множення в вісімковій системі числення

∙ 0 1 2 3 4 5 6 7 10
0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 10
2 0 2 4 6 10 12 14 16 20
3 0 3 6 11 14 17 22 25 30
4 0 4 10 14 20 24 30 34 40
5 0 5 12 17 24 31 36 43 50
6 0 6 14 22 30 36 44 52 60
7 0 7 16 25 34 43 52 61 70
10 0 10 20 30 40 50 60 70 100
СРС №16

Тема: Повні системи бульових функцій

Будь-яка булева функція може бути подана аналітично однією з нормальних


форм. Останні використовують обмежене число елементарних булевих функцій.
Наприклад, для ДДНФ такими функціями є «кон’юнкція», «диз’юнкція» і
«заперечення». Отже, існують системи булевих функцій, за допомогою яких можна
аналітично подати будь-яку скільки завгодно складну булеву функцію.
Проектування цифрових автоматів основане на знанні таких систем булевих
функцій. Останнє особливо важливе для розробки комплектів інтегральних
мікросхем, з яких можна побудувати довільний цифровий автомат.
Означення. Функціонально повною системою булевих функцій (ФПСБФ)
називається сукупність таких булевих функцій , що довільна булева
функція може бути записана у вигляді формули через функції цієї сукупності.
Проблема функціональної повноти є центральною проблемою функціональних
побудов в алгебрі логіки. Розв’язання цієї задачі основане на понятті замкнутого
відносно операції суперпозиції класу функцій [9].
Клас булевих функцій, функціонально замкнутий за операцією суперпозиції, є
множина функцій, будь-яка суперпозиція яких дає функцію, що також належить цій
множині. Серед функціонально замкнутих класів виділяють класи особливого типу,
які називаються передповними. Проведені дослідження показали, що передповних
класів п’ять, а для побудови ФПСБФ необхідно і достатньо, щоб її функції не
містилися повністю в жодному з п’яти передповних класів.
Перерахуємо передповні класи булевих функцій:
1. Булеві функції, що зберігають константу 0;
2. Булеві функції, що зберігають константу 1;
3. Самодвоїсті булеві функції;
4. Лінійні булеві функці;
5. Монотонні булеві функції.
Означення. До булевих функцій, які зберігають константу 0, відносять такі
булеві функції , для яких справедливе співвідношення
.
Прикладами булевих функцій, що зберігають константу 0, є функції і (див.
табл. 2.2) і функції , , … (див. табл. 2.3).
Означення. До булевих функцій, що зберігають константу 1, відносять такі
булеві функції , для яких справедливо співвідношення .
Прикладами булевих функцій, що зберігають константу 1, є функції і
(табл.2.2) і функції , , , , , , , (див. табл. 2.3).
Для введення поняття класу самодвоїстих функцій, використаємо поняття
двоїстих функцій.
Означення. Булеві функції і називаються двоїстими
одна одній, якщо виконується співвідношення:

.
Двоїстими є функції і , і , і тощо (див. табл. 2.3).
Означення. До самодвоїстих булевих функцій відносять такі булеві функції, які є
двоїстими відносно самих себе, тобто справедливе співвідношення

. Будемо називати протилежними наборами набір ( , ,

…, ) і набір ( , , …, ), тоді означення самодвоїстих функцій дамо таке.


Означення. Булева функція називається самодвоїстою, якщо на будь-яких двох
протилежних наборах вона приймає протилежні значення.
Самодвоїстими є функції , , , (див. табл. 2.3).
Означення. До лінійних булевих функцій відносять такі булеві функції, які
можуть бути подані у вигляді
,
де , а — операція «сума за mod 2».
Лінійними є булеві функції f0, f3, f5, f6, f9, f10, f12, f15.
Перш ніж ввести поняття класу монотонних булевих функцій, дамо таке
означення.
Означення. Двійковий набір не менше двійкового набору
, (тобто ), якщо для кожної пари
справедливе співвідношення .
Так, набір 1011 1010. Разом з тим набори 1011 і 0100 непорівнянні в тому
значенні, що для них не виконується ні співвідношення , ні .
Означення. Булева функція називається монотонною, якщо для
будь-яких двох наборів і таких, що
має місце нерівність .
Монотонними є булеві функції , , , , , , (див. табл. 2.3). Разом з
тим функція з табл. 2.3 не є монотонною, оскільки , хоча набір
менше, ніж набір .
Наведемо без доведення формулювання теореми про функціональну повноту.
Теорема. Для того, щоб система булевих функцій була функціонально
повною, необхідно і достатньо, щоб ця система містила хоча б одну булеву
функцію, що не зберігає константу 1, хоча б одну булеву функцію, що не зберігає
константу 0, хоча б одну несамодвоїсту булеву функцію, хоча б одну нелінійну
булеву функцію і хоча б одну немонотонну булеву функцію.
Розглянемо приклади ФПСБФ. Для зручності викладу матеріалу зведемо
елементарні булеві функції двох змінних і деякі функції однієї змінної в табл. 2.4. З
табл. 2.4 видно, що кожна з функцій , є ФПСБФ. Іншими словами,
використовуючи, наприклад, тільки булеву функцію — «штрих Шеффера»,
можна записати у вигляді формули будь-яку булеву функцію. Табл. 2.4 дозволяє
одержати і інші ФПСБФ. Ознакою функціональної повноти є, очевидно, наявність
плюса в кожному стовпці табл. 2.4, хоча б для однієї з складових системи булевих
функцій. До таких ФПСБФ, найпоширеніших в практиці побудови цифрових
автоматів, слід віднести: ; ; ; ; , де
символами , , , , 1, позначені булеві функції: «диз’юнкція», «кон’юнкція»,
«сума за mod 2», «заперечення», «константа 1», відповідно.
Принцип двоїстості булевих функцій
Введене поняття двоїстих булевих функцій дозволяє сформулювати принцип
двоїстості, що полягає в такому: якщо формула реалізує

булеву функцію , то формула ,


одержана з заміною функцій на двоїсті функції ,

відповідно реалізує функцію , двоїсту функції . Формулу

*
називають двоїстою . Для формул над множиною
принцип двоїстості може бути сформульований так: для отримання формули ,
двоїстої формулі , достатньо у формулі усюди замінити 0 на 1, 1 на 0, & на ,
на &.

Приклад. Із співвідношення застосуванням принципу двоїстості

виходить співвідношення . Принцип двоїстості дозволяє майже в два


рази скоротити зусилля на виведення співвідношень при розгляді властивостей
елементарних булевих функцій.
СРС №17

Тема: Представлення у різних формах бульових функцій

Існує багато способів задання логічних функцій. Раніше був розглянутий


табличний спосіб, при якому кожному набору значень змінних в таблиці істинності
указується значення логічної функції. Цей спосіб наочний і може бути застосований
для запису функцій від будь-якої кількості змінних. Проте при аналізі властивостей
функцій алгебри логіки (ФАЛ) такий запис не є компактним. Простіше виглядає
аналітичний запис у вигляді формул.
Розглянемо функцію, яка подана у вигляді суперпозицій булевої алгебри

.
Застосовуючи наведені вище тотожності, перетворимо цю функцію

.
Таким чином, одна і та ж функція може бути подана різними формулами. В
зв’язку з цим виникає задача знаходження такої форми запису функцій, при якій
кожній функції відповідає одна і лише одна формула, а формулі відповідає одна і
лише одна функція.
Такі форми запису називають канонічними.
Канонічні форми запису називаються також досконалими диз’юнктивними
нормальними формами (ДДНФ) або досконалими кон’юнктивними нормальними
формами (ДКНФ).

Досконала диз’юнктивна нормальна форма


Елементарними добутками в алгебрі логіки називають вирази у вигляді

, тобто заперечення ставиться тільки над кожною окремою


змінною. Диз’юнкція добутків називається диз’юнктивною нормальною формою
(ДНФ).
Окрім нормальних диз’юнктивних форм можуть бути і інші диз’юнктивні

форми. Наприклад, не можна називати ДНФ, оскільки не є


елементарним добутком.
Нехай дано набір змінних . Добуток всіх змінних, взятих з
запереченнями або без них, називають конституентами одиниці. Будь-яка
конституента дорівнює одиниці лише на одному наборі змінних.
Щоб записати конституенту одиниці n змінних, яка дорівнює одиниці на m-му
наборі, потрібно число m подати у вигляді n-розрядного двійкового числа і в
добутку взяти з запереченнями ті змінні, яким в двійковому числі відповідають нулі.
Наприклад, конституента одиниці змінних яка дорівнює
одиниці на 25-му наборі, має вигляд:
Диз’юнкція конституент одиниці називається досконалою диз’юнктивною
нормальною формою.
Будь-яку логічну функцію (окрім константи нуля) можна подати в досконалій
диз’юнктивній нормальній формі, яка є єдиною для цієї функції.
На наступному прикладі розглянемо порядок визначення ДДНФ.
Приклад. Подати в ДДНФ логічну функцію п’яти аргументів ,
яка дорівнює 1 на наборах з номерами 4, 10, 15, 20 і нулю на решті наборів.
Для знаходження ДДНФ виконаємо такі операції:
1. Номери наборів, які набувають значення 1, записуються в двійковому коді,
потім подаються у вигляді добутку змінних, в якому над аргументами, які
дорівнюють нулю, ставиться знак заперечення.
4 00100

10 01010

15 01111

20 10100
.
2. Набори добутків об’єднуються знаком диз’юнкції

Досконала кон’юнктивна нормальна форма


Якщо задано, що логічна функція дорівнює одиниці на більшості наборів
аргументів, то подання функції в ДДНФ – громіздке. В таких випадках зручніше
використовувати досконалу кон’юктивну нормальну форму.
В алгебрі логіки конституентою нуля називають логічну функцію n
аргументів, яка набуває значення, що дорівнює нулю, лише на одному наборі.
Оскільки наборів аргументів 2n, то і конституент нуля - 2n.
Конституенти нуля можна виразити у вигляді диз’юнкцій всіх аргументів,
частина з яких береться з запереченнями.
Заперечення ставляться так, щоб обернути в нуль диз’юнкцію в потрібному
наборі.
Наприклад, конституенту нуля двох аргументів отримаємо
при ; ;
при ; ;

при ; ;

при ; .
Приклад. Записати конституенту нуля на одинадцятому наборі; число
аргументів дорівнює шести:
11 001011

Заперечення вказується над аргументами, які дорівнюють одиниці

.
Означення: добуток конституент нуля, які дорівнюють нулю на тих самих
наборах, що і задана функція, називається досконалою кон’юктивною нормальною
формою.
Будь-яка логічна функція має єдину досконалу кон’юктивну нормальну
форму.
Отримання ДКНФ розглянемо на такому прикладі.
Необхідно подати в ДКНФ функцію трьох аргументів, яка дорівнює нулю на
наборах 1, 3, 6.
Для подання функції виконуються дії:
– записують диз’юнкцію всіх аргументів для наборів, на яких функція
перетворюється в нуль, і над аргументами, які дорівнюють одиниці, вказують знак
заперечення
1 001

3 011

6 110
– записують функцію у вигляді:

.
СРС №18

Тема: Використання бітових зсувів

Бітова операція в програмуванні — деякі операції над ланцюжками бітів. У


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

Побітові логічні операції


Ряд джерел за мовами низького рівня називає побітові логічні операції просто
логічними, але в термінології програмування на мовах високого рівня в назвах
бітових операцій присутні прикметники бітовий, побітовий (наприклад: «побітове
логічне І», воно ж «побітове множення»), порозрядний. У деяких мовах
програмування назви операторів, відповідних логічним та побітовим логічним
операціям, схожі. Крім того, мова програмування може допускати неявне
приведення числового типу до логічного та навпаки. У таких мовах програмування
необхідно уважно стежити за використанням логічних та побітових операцій,
перемішування яких може призвести до помилок. Наприклад, в C++ результатом
виразу «2 && 1» (логічне І) є булеве значення true, а результатом виразу «2 & 1»
(побітове І) — ціле 0.

Побітове заперечення (NOT)


Побітове заперечення (або побітове НІ, або доповнення) — це унарна
операція, дія якої еквівалентна застосуванню логічного заперечення до кожного біту
двійкового подання операнда. Іншими словами, на тій позиції, де в двійковому
поданні операнда був 0, внаслідок буде 1, і, навпаки, де була 1, там буде 0.
Приклад:
НІ 01
10
Побітове І (AND)
Побітове І — це бінарна операція, дія якої еквівалентно застосування
логічного І до кожної пари бітів, які стоять на однакових позиціях у двійкових
уявленнях операндів. Іншими словами, якщо обидва відповідних біта операндів
рівні 1, результуючий двійковий розряд дорівнює 1, якщо ж хоча б один біт з пари
дорівнює 0, результуючий двійковий розряд дорівнює 0.
Приклад:
0011
І
0101
0001
Побітове АБО (OR)
Побітове АБО — це бінарна операція, дія якої еквівалентно застосування
логічного АБО до кожної пари бітів, які стоять на однакових позиціях у двійкових
уявленнях операндів. Іншими словами, якщо обидва відповідних біта операндів
рівні 0, двійковий розряд результату дорівнює 0, якщо ж хоча б один біт з пари
дорівнює 1, двійковий розряд результату дорівнює 1.
Приклад:
0011
АБО
0101
0111
Додавання за модулем два (XOR)
Додавання за модулем два (або двомісна операція виключне АБО) — це
бінарна операція, результат дії якої дорівнює 1, якщо число складаємих одиничних
бітів непарне, якщо ж їх число парне, то результат дорівнює 0.
Приклад:
0011
Викл. АБО
0101
0110
Перша назва операції обумовлена тим, що результат цієї операції відрізняється
від результату «АБО» лише в одному з 4 випадків входу (1 випадок одночасної
істинності аргументів «виключається»). Ще значення цієї логічної зв'язки
передається союзом «або».
Друга назва — тим, що дійсно є складанням в кільці вирахувань за модулем
два, з чого слідують деякі цікаві властивості. Наприклад, на відміну від
вищеописаних «І» та «АБО», ця операція є оборотною, або інволютивною:
. В комп'ютерній графіці «додавання по модулю два»
застосовується при виведенні спрайтів на картинку — повторне її застосування
прибирає спрайт з картинки. Завдяки інволютивності ця ж операція знайшла
застосування в криптографії як найпростіша реалізація ідеального шифру (шифру
Вернама). «Додавання за модулем два» також може використовуватися для обміну
двох змінних, використовуючи алгоритм обміну за допомогою виключає АБО.
Також ця операція може називатися «інверсією по масці», тобто у вихідного
двійкового числа інвертуються біти, які збігаються з 1 в масці.

Бітові зсуви
До бітових операцій також відносять бітові зсуви. При зсуві значення бітів
копіюються в сусідні за напрямом зсуву. Розрізняють декілька видів зсувів —
логічний, арифметичний і циклічний, залежно від обробки крайніх бітів.
Також розрізняють зсув вліво (в напрямку від молодшого біта до старшого) і
вправо (в напрямку від старшого біта до молодшого).

Логічний зсув
Арифметичний зсув (правий)

Циклічний зсув

Циклічний зсув через перенесення

У мовах програмування
У наступній таблиці для деяких мов програмування наведено вбудовані
оператори та функції, що реалізують побітові логічні операції.
Викл. Зсув Зсув
Мова НІ І АБО Інші
АБО вліво вправо
C/С++, Java, C#,
~ & | ^ << >>
Ruby
Pascal not and or xor shl shr
INOT IAND IOR IEOR
PL/I BOOL
¬ & | ¬
Prolog \ /\ \/
СРС №19

Тема: Комбінаційна логіка та її застосування

В теорії цифрових пристроїв комбінаційною логікою (комбінаційною схемою)


називають логіку функціонування пристроїв комбінаційного типу. У комбінаційних
пристроїв стан виходу однозначно визначається набором вхідних сигналів. Це
відрізняє комбінаційну логіку від секвенційної логіки, в рамках якої вихідне
значення залежить не тільки від поточного вхідного впливу, але й від передісторії
функціонування цифрового пристрою. Іншими словами, секвенційна логіка
припускає наявність пам'яті, яку комбінаційна логіка не передбачає.
Комбінаційна логіка використовується в обчислювальних схемах для
формування вхідних сигналів і для підготовки даних, які підлягають збереженню.
На практиці обчислювальні пристрої зазвичай поєднують комбінаційну та
секвенційну логіку. Наприклад, Арифметико-логічний пристрій (АЛП) для
математичних обчислень містить комбінаційні вузли. Математику комбінаційної
логіки забезпечує булева алгебра. Базовими операціями є: кон'юнкція ,
диз'юнкція і заперечення (інверсія) або . У комбінаційних схемах
використовуються логічні елементи: кон'юнктор (І), диз'юнктор (АБО), інвертор
(НЕ), а також похідні елементи: І-НІ, АБО-НІ і «Рівнозначність». Найбільш відомі
комбінаційні пристрої це суматор, напівсуматор, шифратор,дешифратор,
мультиплексор і демультиплексор.
Форми представлення логічних виразів засновані на поняттях «істина» (T —
true) і «брехня» (F — false). У двійковому обчисленні — це відповідає значенням 1 і
0, якими кодуються пропозіціональние змінні. Вирази комбінаційної логіки можуть
бути представлені у формі таблиці істинності, або у вигляді формули булевої
алгебри. Нижче показаний приклад таблиці істинності для трьох змінних.
Логічна формула Результат
F F F T
F F T T
F T F Т
F T T F
T F F T
T F T F
T T F F
T T T T
Таблиця істинності служить основою для подання логічного виразу у вигляді
алгебраїчної формули:

На відміну від таблиці, логічна формула здатна перетворюватися за правилами


булевої алгебри. Таким чином знаходиться скорочений вираз:

З точки зору комбінаційної логіки представлені формули визначають одну і ту


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

Процедура мінімізації дозволяє спростити логічну функцію і, тим самим,


домогтися більш компактною реалізації комбінаційних схем.
СРС №20

Тема: Подання чисел у МП

У мові асемблера є засоби запису цілих і речових чисел, а також символьних


рядків і окремих символів. Цілі числа можуть бути із знаком і без знаку, а також
записаними в двійково-десятковому форматі. Для цілих чисел і символів у складі
команд мікропроцесора і, відповідно, в мові асемблера, є засоби обробки - аналізу,
порівняння, пошуку і інші. Для дійсних чисел таких засобів в самому
мікропроцесорі немає, вони містяться в арифметичному співпроцесорі. Оскільки
програмування співпроцесора в справжній книзі не розглядається, то і дійсними
числами ми займатися не будемо.
Розглянемо спочатку цілі числа без знаку і із знаком. Числа без знаку
отримали свою назву тому, що серед цих чисел немає негативних. Це найпростіший
вид чисел: вони є всім діапазоном двійкових чисел, які можна записати в байті, слові
або подвійному слові. Для байта числа без знаку можуть набувати значень від 00h
(0) до Ffh (255); для слова - від 0000h (0) до Ffffh (65535); для подвійного слова - від
00000000h (0) до Ffffffffh (4294967295).
У величезній кількості додатків обчислювальної техніки для чисел немає
поняття знаку. Це справедливо, наприклад, для адрес елементів пам'яті, код ASCII
символів, результатів вимірювань багатьох фізичних величин, код управління
пристроями, що підключаються до комп'ютера. Для таких чисел природно
використовувати весь діапазон чисел, записуваних в осередок того або іншого
розміру. Якщо, проте, ми хочемо працювати як з позитивними, так і з негативними
числами, нам доведеться половину чисел з їх повного діапазону вважати за
позитивних, а іншу половину - негативними. В результаті діапазон зміни числа
зменшується в два рази. Крім того, необхідно передбачити систему кодування, щоб
позитивні і негативні числа не перекривалися.
В обчислювальній техніці прийнято записувати негативні числа в так званому
додатковому коді, який утворюється з прямого шляхом заміни всіх двійкових нулів
одиницями і навпаки (зворотний код) і збільшення до отриманого числа одиниці. Це
справедливо як для байтових (8-бітових) чисел, так і для чисел розміром в слово або
в подвійне слово.
Утворення негативних чисел різного розміру:
Такий спосіб утворення негативних чисел зручний тим, що дозволяє
виконувати над ними арифметичні операції по загальних правилах з отриманням
правильного результату. Так, складання чисел +5 і -5 дає 0; в результаті віднімання 3
з 5 виходить 2; віднімання -3 з -5 дає -2 і так далі
Аналізуючи алгоритм утворення негативного числа, можна відмітити, що для
всіх негативних чисел характерна наявність двійкової одиниці в старшому біті.
Позитивні числа, навпаки, мають в старшому біті 0. Це справедливо для чисел будь-
якого розміру. Крім того, з рисунку 1 видно, що для перетворення негативного 8-
бітового числа в слово досить доповнити його зліва вісьма двійковими одиницями.
Легко зміркувати, що для перетворення позитивного 8-бітового числа в слово його
треба доповнити вісьма двійковими нулями. То ж справедливо і для перетворення
слова із знаком в подвійне слово із знаком, тільки додати доведеться вже не 8, а 16
одиниць або нулів. У системі команд МП 86 і, відповідно, в мові асемблера, для цих
операцій передбачені спеціальні команди cbw і cwd.
Слід підкреслити, що знак числа умовний. Одне і те ж число, наприклад,
зображене на рисунку 2 8-бітове число Fbh можна в одному контексті розглядати, як
негативне (-5), а в іншому - як позитивне, або, правильніше, число без знаку
(Fbh=251). Знак числа є характеристикою не самого числа, а нашого уявлення про
його сенс.
Далі представлена вибіркова таблиця 16-бітових чисел з вказівкою їх
машинного уявлення, а також значень без знаку і із знаком. З таблиці видно, що для
чисел із знаком розміром в слово діапазон позитивних значень тягнеться від 0 до
32767, а діапазон негативних значень - від -1 до -32768.

Нижче наводиться аналогічна таблиця для 8-бітових чисел. З таблиці видно,


що для чисел із знаком розміром в байт діапазон позитивних значень тягнеться від 0
до 127, а діапазон негативних значень - від -1 до -128.
Серед команд процесора, що виконують ту або іншу обробку чисел, можна
виділити команди, байдужі до знаку числа (наприклад, inc, add, test), команди,
призначені для обробки чисел без знаку (mul, div, ja, jb і ін.), а також команди,
спеціально розраховані на обробку чисел із знаком (imul, idiv, jg, jl і так далі).
Особливості використання цих команд будуть описані в наступному розділі.
Розглянемо тепер інший вид представлення чисел - двійково-десятковий
формат (binary-coded decimal, BCD), використовуваний у ряді прикладних областей.
У такому форматі видають дані деякі вимірювальні прилади; він же
використовується КМОП-ЧАСАМІ реального часу комп'ютерів IBM РС для
зберігання інформації про поточний час. У МП 86 передбачений ряд команд для
обробки таких чисел.
Двійково-десятковий формат існує в двох різновидах: упакований і
розпакований. У першому випадку в байті записується дворозрядне десяткове число
від 00 до 99. Кожна цифра числа займає половину байта і зберігається в двійковій
формі. Також можна відмітити, що для запису в байт десяткового числа в двійково-
десятковому форматі досить супроводжувати записуване десяткове число символом
h.

У машинному слові або в 16-розрядному регістрі можна зберігати в двійково-


десятковому форматі чотирирозрядні десяткові числа від 0000 9999.
Розпакований формат відрізняється від упакованого тим, що в кожному байті
записується лише одна десяткова цифра (як і раніше в двійковій формі). В цьому
випадку в слові можна записати десяткові числа від 00 99.

При зберіганні десяткових чисел в апаратурі зазвичай використовується


економніший упакований формат; множення і ділення виконуються тільки з
розпакованими числами, операції ж складання і віднімання застосовні і до тих, і до
інших.
СРС №21

Тема: Моделювання схем з використанням комбінаційної логіки

Для логічного синтезу комбінаційної схеми необхідно визначити базис


перемикальної функції, на основі якої будуватиметься схема. Функціонально
повною системою, чи базисом, перемикальної функції називають систему
перемикальних функції Х1,Х2,...Хn, за допомогою якої може бути представлена
будь-яка функція алгебри логіки. Функціонально повними системами є базиси:
1. І, АБО, НІ (основний);
2. І, НІ;
3. АБО, НІ;
4. І - АБО - НІ;
5. І - НІ;
6. АБО - НІ;
Базис І, АБО, НІ прийнято називати основним, так як будь-яка складна
перемикальна функція може бути виражена за допомогою цього базису. Також базис
І, АБО, НІ вважається зайвим, так як можливо видалення з нього деяких функцій.
Базиси (2) та (3) називають нормованими базисами, так як при видалені з цих
базисів однієї форми, функціонально повна система перетворюється на неповну.
Розглянемо методи логічного опису електричної схеми (далі ЕС). В залежності
від вихідного сигналу ЕС діляться на два види:
1. Схеми “першого роду”. Це комбінаційні схеми вихідний сигнал в яких
залежить тільки від стану входів в кожний проміжок часу.
2. Схеми “другого роду”. Це комбінаційні схеми, вихідний сигнал в яких
залежить як від вхідних сигналів так і від стану схеми в попередній проміжок часу.
Це так звані схеми з пам’яттю.
3. По кількості входів та виходів:
 з одним входом та одним виходом;
 з декількома входами та одним виходом;
 з декількома входами та декількома виходами;
 з одним входом та декількома виходами;
4. По способу здійснення синхронізації:
 зовнішня синхронізація - “синхронний автомат”;
 внутрішня синхронізація - “А-синхронний автомат”;

Логічний оператор схеми – це елементарна логічна функція, за допомогою


якої описується робота схеми. Будь-яку схему можна представити за допомогою
логічних операторів.
Для аналізу ЕС за допомогою апарата алгебри логіки потрібно знайти логічну
функцію, яка описує роботу заданої схеми. При цьому кожному функціональному
елементу схеми ставлять у відповідність логічній оператор. Існують задачі аналізу
та синтезу ЕС. Аналіз ЕС здійснюється в два етапи:
З принципової схеми видаляють всі допоміжні елементи, які не впливають на
логіку роботи схеми.
Через логічні оператори виражають усі елементи, отримуючи логічні
рівняння, які являють собою модель виконання цієї схеми.
Але з точки зору інженерного проектування частіше доводиться вирішувати
обернену задачу – задачу синтезу ЕС.

Задача синтезу – при заданих вхідних змінних та відомій вихідній функції


спроектувати логічний пристрій, який реалізує цю логічну функцію. Також можуть
бути накладені обмеження у вигляді заданого наперед базису, чи в кількості
операторів. Результат синтезу – логічна схема, яка реалізує задану функцію.
Найчастіше вирішуючи задачу аналізу та синтезу, використовують
функціонально повні базиси.
При реалізації ЕС за основний критерій приймають:
 мінімум апаратури;
 мінімум типів використаних елементів;
 максимум надійності;
 можливість тестування та само тестування.

Задачі при синтезі ЕС:


1. Складається математичне описання (система логічних рівнянь), яке
адекватно відображає усі процеси в схемі.
2. Аналіз логічних рівнянь та отримання мінімальної форми для кожного із
заданих базисів.

Перехід від логічних рівнянь до логічної схеми, за допомогою використання


логічних операторів.
СРС №22

Тема: Історія розвитку персонального комп’ютера

Розвиток торгівлі й науки спричинив збільшення потреби в обчисленнях.


Причому самі обчислення ставали чимраз складнішими. Усний рахунок і прості
пристосування не могли задовольнити ці потреби. Тому багато математиків й
інженерів витратили роки праці на створення машин, що полегшують лічбу.
Однак основним споживачем таких машин у XX столітті стали військові.
Розрахунки траєкторій ракет і снарядів, обрахування аеродинаміки літаків,
навігаційні розрахунки ставали чимраз складнішими і виконувати їх потрібно було
чимраз швидше.
«Хрещеною матір'ю» обчислювальної техніки в сучасному її розумінні стала
Друга світова війна. Для розшифрування кодів шифрувальної машини «Енігма»,
якою користувалися німецькі військово-морські сили для передачі секретних
повідомлень у Блечлі-Парк, в Англії були зібрані найкращі математики
Великобританії і США. Вони не тільки зуміли створити дешифрувальні машини, які
практично моментально розшифровували коди «Енігми», аде й заклали основу для
розвитку обчислювальної техніки в післявоєнний період.
Після Другої світової війни протягом довгого часу тільки військові були
основними замовниками робіт по створенню обчислювальних машин через їхню
величезну вартість. Але чим далі просувалася робота, чим досконалішими й
дешевшими ставали створені машини, тим більше з'являлося серед замовників
абсолютно мирних організацій: наукових інститутів, університетів, метеорологічних
центрів тощо.
Але лише з появою персонального комп'ютера основним споживачем, що
фінансує вчених і інженерів, стали звичайні громадяни.
Розвиток елементної бази комп'ютерів
У 1883 р. Томас Альва Едісон, намагаючись подовжити термін праці лампи з
вугільною ниткою, ввів у її вакуумний балон платиновий електрод і позитивну
напругу і з'ясував, що у вакуумі між електродом і ниткою починає проходити струм.
Не знайшовши ніякого пояснення настільки незвичайного явища, Едісон обмежився
тим, що докладно описав його, про всякий випадок узяв патент і відправив лампу на
Філадельфійську виставку. Про неї у грудні 1884 р. у журналі «Інженеринг» була
надрукована замітка «Явище в лампочці Едісона».
Американський винахідник не розпізнав відкриття виняткової важливості (по
суті, це було його єдине фундаментальне відкриття — термоелектронна емісія). Він
не зрозумів, що його лампа розжарювання з платиновим електродом, власне кажучи,
була першою у світі електронною лампою.
Першим, кому спала на думку ідея практичного використання «ефекту
Едісона», був англійський фізик Дж. А. Флемінг (1849—1945). Працюючи з 1882 р.
консультантом едісонівської компанії в Лондоні, він довідався про «явище» із
перших вуст — від самого Едісона. Свій діод — двоелектродну лампу Флемінг
створив у 1904 р.
У жовтні 1906 р. американський інженер Лі де Форест винайшов електронну лампу
— підсилювач, або аудіон, як він її тоді назвав, що мав третій електрод — сітку.
Ним був запроваджений принцип, на основі якого будувалися всі наступні
електронні лампи, — керування струмом, що протікає між анодом і катодом, за
допомогою інших допоміжних елементів.
У 1910 р. німецькі інженери Лібен, Рейне і Штраус сконструювали тріод, сітка
в якому виконувалася у формі перфорованого листа алюмінію і містилася в центрі
балона, а щоб збільшити емісійний струм, вони запропонували вкрити нитку
розжарювання шаром окису барію або кальцію.
У 1911 р. американський фізик Ч. Д. Кулідж запропонував застосувати як покриття
вольфрамової нитки розжарювання окис торію — оксидний катод — і одержав
вольфрамовий дріт, який зробив переворот у ламповій промисловості.
У 1915 р. американський фізик Ірвінг Ленгмюр сконструював двоелектродну
лампу — кенотрон, що застосовувалася як випрямна лампа в джерелах живлення. У
1916 р. лампова промисловість почала випускати особливий тип конструкції ламп
— генераторні лампи з водяним охолодженням.
Ідея лампи з двома сотками — тетрода — була висловлена в 1919 р. німецьким
фізиком Вальтером Шотткі й незалежно від нього в 1923 р. — американцем Е. У.
Халлом, а реалізована ця ідея англійцем X. Дж. Раундом у другій половині 20-х
років минулого століття.
У 1929 р. голландські вчені Г. Хольст і Б. Теллеген створили електронну
лампу з трьома сітками — пентод. У 1932 р. був створений гептод, у 1933 — гексод і
пектагрид, у 1935 р. з'явилися лампи в металевих корпусах. Подальший розвиток
виробництва електронних ламп рухався шляхом поліпшення їхніх функціональних
характеристик.
У 1940-х—1950-х роках комп'ютери створювалися на основі електронних
ламп. Тому комп'ютери були дуже великими (вони займали величезні зали),
дорогими й ненадійними — адже електронні лампи, як і звичайні лампочки, часто
перегоряють. Але в 1948 р. були винайдені транзистори — мініатюрні й недорогі
електронні прилади, що змогли замінити електронні лампи. Це призвело до
зменшення розмірів комп'ютерів у сотні разів і підвищення їхньої надійності.
Перші комп'ютери на основі транзисторів з'явилися наприкінці 1950-х років, а
до середини 60-х років були створені й значно компактніші зовнішні пристрої для
комп'ютерів, що дозволило фірмі Digital Equipment випустити в 1965 р. перший міні-
комп'ютер PDP-8 завбільшки з холодильник і вартістю всього 20 тис. дол.
(комп'ютери 1940-х—1950-х років зазвичай коштували мільйони дол.).
Після появи транзисторів найбільш трудомісткою операцією при виробництві
комп'ютерів було з'єднання й спаювання транзисторів для створення електронних
схем. Але в 1959 р. Роберт Нойс (майбутній засновник фірми Intel) винайшов спосіб,
що дозволяє створювати на одній пластині кремнію транзистори і всі необхідні
з'єднання між ними. Отримані електронні схеми почали називатися інтегральними
схемами, або чіпами. У 1968 р. фірма Burroughs випустила перший комп'ютер на
інтегральних схемах, а в 1970 р. фірма Intel почала продавати інтегральні схеми
пам'яті. Надалі кількість транзисторів, що вдавалося розмістити на одиницю площі
інтегральної схеми, збільшувалася приблизно вдвічі щороку, що й забезпечує
постійне зменшення вартості комп'ютерів і підвищення їх швидкодії.
У середині 1960-х років голова Intel Gordon Moore вивів принцип, або закон,
який діє протягом уже більше чотирьох десятиліть: кількість транзисторів у кожнім
чіпі кремнієвої інтегрованої мікросхеми процесора подвоюється кожні два роки, і
вартість кожного чіпа процесора зменшується вдвічі.
Процесор 8086, випущений у 1978 p., містив 29 тис. транзисторів, 80386 (1985
р.) — 275 тисяч, Pentium (1993 p.) — 3,1 млн транзисторів, Pentium !!! (1999 p.) — 18
млн транзисторів, a Pentium 4 (2001 p.) — 42 млн транзисторів.
Історія обчислювальних машин
Першим пристроєм, призначеним для полегшення обчислень, була рахівниця.
За допомогою кісточок рахівниць можна було здійснювати операції додавання й
віднімання і нескладне множення. Однак рахівниця зовсім непридатна
для операцій над нецілими числами і не може здійснювати складних операцій. А
потреби людства в обчисленнях чимраз збільшувалися.
У 1642 р. французький математик Блез Паскаль сконструював першу
механічну рахункову машину — «Паскаліна», що могла механічно виконувати
додавання чисел. У 1673 р. Готфрід Вільгельм Лейбніц сконструював арифмометр,
що дозволяв механічно виконувати чотири арифметичні дії. Починаючи з XIX ст.
арифмометри одержали дуже широке застосування. З їх допомогою виконували
навіть дуже складні розрахунки, наприклад, розрахунки балістичних таблиць для
артилерійських стрільб. Існувала і спеціальна професія — обліковець — людина, що
працює з арифмометром, швидко й точно дотримується певної послідовності
інструкцій (таку послідовність інструкцій згодом почали називати програмою). Але
багато розрахунків здійснювалися дуже повільно — навіть десятки обліковців
повинні були працювати по кілька тижнів і місяців. Причина проста — при таких
розрахунках вибір виконуваних дій і запис результатів здійснювався людиною, а
швидкість її роботи досить обмежена.
Ще в першій половині XIX ст. англійський математик Чарльз Беббідж
спробував побудувати універсальний обчислювальний пристрій, тобто комп'ютер.
Беббідж називав його аналітичною машиною. Саме Беббідж уперше додумався до
того, що комп'ютер повинен містити пам'ять і управлятися за допомогою програми.
Беббідж хотів побудувати свій комп'ютер як механічний пристрій, а програми
збирався задавати за допомогою перфокарт — карт із цупкого паперу з
інформацією, що наноситься за допомогою отворів (вони на той час уже широко
вживалися в ткацьких верстатах). Однак довести до кінця цю роботу Беббідж не зміг
— вона виявилася занадто складною для техніки того часу.
Першим реалізував ідею перфокарт Холлерит. Він винайшов машину для
обробки результатів перепису населення. У своїй машині він уперше застосував
електрику для розрахунків.
У 40-х роках XX ст. відразу кілька груп дослідників повторили спробу Беб-
біджа на основі техніки XX ст. — електромеханічних реле. Деякі з цих дослідників
нічого не знали про роботи Беббіджа і перевідкрили його ідеї заново. Першим із них
був німецький інженер Конрад Цузе, який у 1941 р. побудував невгликий комп'ютер
на основі декількох електромеханічних реле. Але через війну роботи Цузе не були
опубліковані. А в США в 1943 р. на одному з підприємств фірми IBM (International
Businness Machines Corporation) американець Говард Ейкен створив потужніший
комп'ютер під назвою «Марк-1». Він уже проводив обчислення в сотні разів
швидше, ніж вручну (за допомогою арифмометра) і реально використовувався для
військових розрахунків. У ньому використовувалося поєднання електричних
сигналів і механічних приводів. «Марк-1» мав розміри 15x2,5 м і містив 750.000
деталей, він міг перемножити два 23-розрядні числа за 4 секунди.
Однак електромеханічні реле працюють досить повільно й не дуже надійно.
Тому починаючи з 1943 р. у США група фахівців під керівництвом Джона Мочлі й
Преспера Екерта почала конструювати комп'ютер ENIAC на основі електронних
ламп. Створений ними комп'ютер працював у тисячу разів швидше, ніж «Марк-1».
Але виявилося, що більшість часу цей комп'ютер простоював — адже для задавання
методу розрахунків (програми) у цьому комп'ютері доводилося протягом декількох
годин або навіть декількох днів приєднувати потрібним чином дроти. А сам
розрахунок після цього міг зайняти усього лише кілька хвилин або навіть секунд.
Щоб спростити й прискорити процес задавання програм, Мочлі й Екерт почали
конструювати новий комп'ютер, який міг би зберігати програму у своїй пам'яті. У
1945 р. до роботи був залучений знаменитий математик Джон фон Нейман, який
підготував доповідь про цей комп'ютер. Доповідь була розіслана багатьом вченим і
одержала широку популярність, оскільки в ній фон Нейман зрозуміло і просто
сформулював загальні принципи функціонування комп'ютерів, тобто універсальних
обчислювальних пристроїв. І дотепер переважна більшість комп'ютерів зроблена
відповідно до тих принципів, що .виклав у своїй доповіді в 1945 р. Джон фон
Нейман. Перший комп'ютер, у якому були втілені принципи фон Неймана, був
побудований у 1949 р. англійським дослідником Морісом Уїлксом.
Розробка першої електронної серійної машини UNIVAC (Universal Automatic
Computer) почалася приблизно в 1947 р. Екертом і Мочлі, що заснували в грудні
того ж року фірму ECKERT-MAUCHLI. Перший зразок машини (UNIVAC-1) був
побудований для бюро перепису США і запущений в експлуатацію навесні 1951 р.
Синхронна, послідовної дії обчислювальна машина UNIVAC-1 створена на базі
ЕОМ ENIAC і EDVAC. Працювала вона з тактовою частотою 2.25 МГц і містила
близько 5000 електронних ламп. Внутрішній запам'ятовуючий пристрій з об'ємом
1000 12-розрядних десяткових чисел був виконаний на 100 ртутних лініях затримки.
Незабаром після введення в експлуатацію машини UNIVAC-1 її розробники
висунули ідею автоматичного програмування. Вона зводилася до того, щоб машина
сама могла готувати таку послідовність команд, яка потрібна для розв'язання цієї
задачі.
Сильним стримуючим фактором у роботі конструкторів ЕОМ початку 1950-х
років була відсутність швидкодіючої пам'яті. За словами одного з піонерів
обчислювальної техніки Д. Екерта, «архітектура машини визначається пам'яттю».
Дослідники зосередили свої зусилля на запам'ятовуючих властивостях феритових
кілець, нанизаних на дротові матриці.
У 1951 р. Дж. Форрестер опублікував статтю про застосування магнітних
сердечників для зберігання цифрової інформації. У машині «Whirlwind-1» уперше
була застосована пам'ять на магнітних сердечниках. Вона являла собою 2 куби з
32x32x17 сердечниками, що забезпечували зберігання 2048 слів для 16-розрядних
двійкових чисел з одним розрядом контролю на парність.
У розробку електронних комп'ютерів включилася фірма IBM. У 1952 р. вона
випустила свій перший промисловий електронний комп'ютер IBM 701, що являв
собою синхронну ЕОМ рівнобіжної дії, яка містить 4000 електронних ламп і 12 000
германієвих діодів. Удосконалений варіант машини IBM 704 відрізнявся високою
швидкістю роботи, у ній використовувалися індексні регістри і дані представлялися
у формі з плаваючою комою.
Після ЕОМ IBM 704 була випущена машина IBM 709, яка в архітектурному
плані наближалася до машин другого й третього поколінь. У цій машині вперше
була застосована непряма адресація і вперше з'явилися канали введення-виведення.
У 1956 р. фірмою IBM були розроблені магнітні плаваючі головки на повітряній
подушці. Винахід їх дозволив створити новий тип пам'яті — дискові запам'ятовуючі
пристрої (ЗП), значущість яких була повною мірою оцінена в наступні десятиліття
розвитку обчислювальної техніки. Перші ЗП на диска з'явилися в машинах IBM 305
і RAMAC. Остання мала пакет, що складався з 50 металевих дисків із магнітним
покриттям, які оберталися зі швидкістю 12 000 об/хв. На поверхні диска
розміщалося 100 доріжок для запису даних, по 10 000 знаків кожна.
Услід за першим серійним комп'ютером UNIVAC-1 фірма Remington-Rand у
1952 p. випустила ЕОМ UNIVAC-1103, що працювала в 50 разів швидше. Пізніше в
комп'ютері UNIVAC-1103 уперше були застосовані програмні переривання.
Співробітники фірми Remington-Rand використовували алгебраїчну форму
запису алгоритмів під назвою «Short Code» (перший інтерпретатор, створений у
1949 р. Джоном Мочлі). Крім того, необхідно відзначити офіцера ВМФ США і
керівника групи програмістів, на той час капітана (надалі — єдина жінка-адмі-рал у
ВМФ) Грейс Хопер, що розробила першу програму-компілятор. До речі, термін
«компілятор» уперше ввела Г. Хопер у 1951 р. Ця компілювальна програма
здійснювала трансляцію на машинну мову всієї програми, записаної у зручній для
обробки алгебраїчній формі. Грейс Хопер належить також авторство терміна «баг» у
застосуванні до комп'ютерів. Якось через відкрите вікно в лабораторію залетів жук
(англійською — bug), який, сівши на контакти, замкнув їх, чим викликав серйозну
несправність у роботі машини. Обгорілий жук був підклеєний в адміністративний
журнал, де фіксувалися різні несправності. Так був задокументований перший баг у
комп'ютерах.
Фірма IBM також зробила перші кроки в області автоматизації програмування,
створивши в 1953 р. для машини IBM 701 «Систему швидкого кодування». У СРСР
О. А. Ляпунов запропонував одну з перших мов програмування. У 1957 р. група під
керівництвом Д. Бекуса закінчила роботу над першою мовою програмування
високого рівня, що отримала назву ФОРТРАН. Мова, реалізована вперше на ЕОМ
IBM 704, сприяла розширенню сфери застосування комп'ютерів і згодом набула
популярності.
У Великобританії в липні 1951 р. на конференції в Манчестерському
університеті М. Уїлкс представив доповідь «Найкращий метод конструювання
автоматичної машини», що стала першою роботою з основ мікропрограмування.
Запропонований ним метод проектування пристроїв управління знайшов широке
застосування. І
Свою ідею мікропрограмування М. Уілкс реалізував у 1957 р. при створенні
машини EDSAC-2. М. Уїлкс разом із Д. Уіллером і С. Гіллом у 1951 р. написали
перший підручник із програмування «Складання програм для електронних
обчислювальних машин».
У 1956 р. фірма Ferranti випустила ЕОМ «Pegasus», у якій уперше знайшла
втілення концепція регістрів загального призначення (РЗП). З появою РЗП було
усунуте розходження між індексними регістрами й акумуляторами, і в
розпорядженні програміста виявився не один, а кілька регістрів-акумуляторів.
Поява персональних комп'ютерів
Спочатку мікропроцесори використовувалися в різних спеціалізованих
пристроях, наприклад у калькуляторах. Але в 1974 р. кілька фірм оголосили про І
створення на основі мікропроцесора Intel-8008 персонального комп'ютера, тобто
пристрою, що виконує ті ж функції, що й великий комп'ютер, але розрахованого на
одного користувача. На початку 1975 р. з'явився перший комерційно
розповсюджуваний персональний комп'ютер «Альтаїр-8800» на основі
мікропроцесора Intel-8080. Цей комп'ютер продавався за ціною близько 500 дол. І
хоча можливості його були досить обмежені (оперативна пам'ять складала всього
256 байт, клавіатура й екран були відсутні), його поява була зустрінута з великим
ентузіазмом: у перші ж місяці були продані кілька тисяч комплектів машини.
Покупці обладнували цей комп'ютер додатковими пристроями: монітором для !
виведення інформації, клавіатурою, блоками розширення пам'яті й т. д. Незабаром
ці пристрої почали випускатися іншими фірмами. Наприкінці 1975 р. Пол Аллен і
Білл Гейтс (майбутні засновники фірми Microsoft) створили для комп'ютера
«Альтаїр» інтерпретатор мови Basic, що дозволило користувачам досить просто
спілкуватися з комп'ютером і легко писати для нього програми. Це також сприяло
популярності персональних комп'ютерів.
Успіх Альтаїр-8800 змусив багато фірм також зайнятися виробництвом
персональних комп'ютерів. Персональні комп'ютери почали продаватися вже в
повній комплектації, із клавіатурою й монітором, попит на них склав десятки, а
потім і сотні тисяч штук на рік. З'явилося кілька журналів, присвячених
персональним комп'ютерам. Зростанню обсягів продажу сприяли численні корисні
програми, розроблені для ділових застосувань. З'явилися також комерційно
розповсюджувані програми, наприклад, програма для редагування текстів WordStar і
табличний процесор VisiCalc (1978 p. і 1979 p. відповідно). Ці й багато інших
програм зробили придбання персональних комп'ютерів досить вигідним для бізнесу:
за їхньою допомогою стало можливим виконувати бухгалтерські розрахунки,
складати документи і т. д. Використання ж великих комп'ютерів для цих операцій
було занадто дорогою втіхою,
Наприкінці 1970-х років поширення персональних комп'ютерів навіть
призвело до деякого зниження попиту на великі комп'ютери й міні-комп'ютери
(міні-ЕОМ). Це стало предметом серйозного занепокоєння фірми IBM (International
Business Machines Corporation) — провідної компанії з виробництва великих
комп'ютерів, і в 1979 р. фірма IBM вирішила спробувати свої сили на ринку
персональних комп'ютерів. Однак керівництво фірми недооцінило майбутню
важливість цього ринку і розглядало створення персонального комп'ютера усього
лише як дрібний експеримент — щось иа зразок однієї з десятків робіт, що
проводилися у фірмі, із створення нового обладнання. Щоб не витрачати на цей
експеримент занадто багато грошей, керівництво фірми надало підрозділу,
відповідальному за цей проект, небачену свободу. Зокрема, йому було дозволено не
конструювати персональний комп'ютер «із нуля», а використовувати блоки,
виготовлені іншими фірмами. І цей підрозділ сповна використав наданий шанс.
Як основний мікропроцесор комп'ютера був обраний новітній тоді 16-роз-рядний
мікропроцесор Intel-8088. Його використання дозволило значно збільшити
потенційні можливості комп'ютера, тому що новий мікропроцесор дозволяв
працювати з 1 мегабайтом пам'яті, а всі комп'ютери, які тоді існували, були
обмежені 64 кілобайтами.
У серпні 1981 р. новий комп'ютер під назвою IBM PC був офіційно
представлений публіці, і незабаром після цього він набув великої популярності у
користувачів. Через пару років комп'ютер IBM PC зайняв провідне місце на ринку,
витіснивши моделі 8-бітових комп'ютерів.
Секрет популярності IBM PC у тому, що фірма IBM не зробила свій комп'ютер
єдиним нероз'ємним пристроєм і не захищала його конструкцію патентами.
Навпаки, вона зібрала комп'ютер із незалежно виготовлених частин і не тримала
специфікації цих частин і способи їхнього з'єднання в секреті. Принципи
конструкції IBM PC були доступні всім бажаючим. Цей підхід, названий принципом
відкритої архітектури, забезпечив приголомшливий успіх комп'ютеру IBM PC, хоча
і позбавив фірму IBM можливості особисто користуватися плодами цього успіху.
Ось як відкритість архітектури IBM PC вплинула на розвиток персональних
комп'ютерів.
Перспективність і популярність IBM PC зробила досить привабливим
виробництво різних комплектуючих і додаткових пристроїв для IBM PC.
Конкуренція між виробниками призвела до здешевлення комплектуючих і
пристроїв. Дуже скоро багато фірм перестали задовольнятися роллю виробників
комплектуючих для IBM PC і почали самі збирати комп'ютери, сумісні з IBM PC.
Оскільки цим фірмам не треба було оплачувати великої витрати фірми IBM на
дослідження й підтримку структури величезної фірми, вони змогли продавати свої
комп'ютери значг: дешевше (іноді в 2—3 рази) від аналогічних комп'ютерів фірми
IBM. Сумісні з IBM PC комп'ютери спочатку зневажливо називали «клонами», але
це прізвисько не прижилося, тому що багато фірм — виробників IBM РС-сумісних
комп'ютерів почали реалізовувати технічні досягнення швидше, ніж сама IBM.
Користувачі одержали можливість самостійно модернізувати свої комп'ютери й
оснащувати їх додатковими пристроями сотень різних виробників.
Персональні комп'ютери майбутнього (2010 рік)
Основою комп'ютерів майбутнього стануть не кремнієві транзистори, де
передача інформації здійснюється електронами, а оптичні системи. Носієм
інформації стануть фотони, тому що вони легші й швидші, ніж електрони. У
результаті комп'ютер стане дешевшим і компактнішим. Але найголовнішим є те, що
опто-електронні обчислення виконуються набагато швидше, ніж застосовувані
сьогодні, тому комп'ютер стане набагато продуктивнішим.
ПК буде малим за розмірами і матиме потужність сучасних суперкомп'ютерів.
ПК стане сховищем інформації, що охоплює всі аспекти нашого повсякденного
життя, він не буде прив'язаний до електричних мереж. Цей ПК буде захищений від
злодіїв, завдяки біометричному сканерові, який впізнаватиме свого власника за
відбитком пальця.
Основним способом спілкування з комп'ютером буде голос. Настільний
комп'ютер перетвориться на стіл, який у свою чергу перетвориться на гігантський
комп'ютерний екран — інтерактивний фотонний дисплей. Клавіатура не
знадобиться, адже всі дії можна буде здійснити дотиком пальця. Але для тих, хто
віддає перевагу клавіатурі, у будь-який момент на екрані може бути створена
віртуальна клавіатура і вилучена тоді, коли в ній не буде потреби.
Комп'ютер стане операційною системою вдома, і він почне реагувати на
потреби господаря, знати його вподобання (приготувати каву о 7 годині, запустити
улюблену музику, записати потрібну телепередачу, відрегулювати температуру й
вологість і т. д.)
Твердий диск буде голографічним і чимось буде схожий на CD-ROM або
DVD. Тобто це буде прозора обертова пластинка з записуючим лазером з одного
боку і лазером, що зчитує, з іншого; обсяг збереженої інформації на такому диску
сягатиме просто астрономічних величин — кілька терабайт. При таких обсягах
можна буде зберігати кожну дрібну деталь життя.
Процесор ПК майбутнього функціонуватиме за тими ж принципами, що й
сьогодні. Але замість електронних мікропроцесорів, що є і мозком, і мускулами
сучасного комп'ютера, процесор майбутнього матиме оптоелектронні інтегральні
схеми (чіпи будуть використовувати кремній там, де потрібне переключення, і
оптику для комунікацій). Це дасть величезний приріст у швидкодії й ефективності.
Сьогоднішній комп'ютер витрачає занадто багато часу на очікування даних для
обробки. Миттєвий оптичний зв'язок і пам'ять, що працює так само швидко, як і
процесор, забезпечать безперервний потік даних до процесора для обробки. При
передачі даних зі швидкістю, не обмеженою більше електронною передачею, можна
буде досягти частот приблизно 100ГГц, тобто в 100 разів швидше, ніж сьогодні.
Процесор майбутнього може бути шестигранником, оточеним з усіх боків швидким
кешем, так щоб необхідні дані могли бути отримані з найближчої частини кеша.
Саме в такий спосіб і буде досягнута продуктивність сучасних супер-ЕОМ.
При застосуванні оптичного зв'язку в комп'ютерних технологіях буде
отриманий той самий ефект, що спостерігали в 1980 році, коли комп'ютери на базі
80286 мати пам'ять, що працює на частоті' процесора. Швидкість шини пам'яті — та
швидкість, з якою відбувається обмін даними між процесором і пам'яттю, —
дорівнювала частоті процесора (усього 8 МГц). Процесор одержував дані так само
швидко, як міг їх обробити, у результаті процесор менше перебував у режимі
очікування даних.
Середній комп'ютер сьогодні має процесор 1000 МГц і шину 133 МГц.
Незважаючи на різні технологічні вдосконалення, процесор все ще витрачає дві
третини часу на очікування даних.
Оптоелектроніка вирішить цю проблему. При належним чином розробленій
Шині оптичної пам'яті швидкість вибірки даних із пам'яті буде знову прирівняна до
частоти процесора.
Звичайно, це вимагатиме більш швидкої обробки даних у пам'яті і, відповідно,
іншої архітектури пам'яті, яка, на щастя, вже є або незабаром з'явиться. Великий кеш
надшвидкої енергонезалежної магнітної RAM (пам'ять з довільним доступом)
міститиме дані, що терміново потрібні процесору.
Для нового швидкого кеша доведеться позбутися неефективності
сьогоднішньої синхронної динамічної пам'яті, що потребує постійного оновлення.
Неефективність кеша сьогодні така, що дві третини часу йде на процеси оновлення
(таким чином, його реальна продуктивність у три рази менша).
Напівпровідникова технологія майбутнього грунтуватиметься не на
кремнієвій пам'яті, а на магнітній пам'яті в молекулярному масштабі. Через те що
дрібні елементи будуть намагнічені для представлення нулів і розмагнічені для
представлення одиниць, інформація може бути легко і швидко оновлена простим
електричним сигналом. Весь процес буде набагато швидшим, ніж той, що ми маємо
сьогодні, і буде цілком реально задовольняти вимоги процесора, який працює на
частоті 100 ГГц.
Основна пам'ять комп'ютера буде повністю оптичною, фактично
голографічною. Голографічна пам'ять має тривимірну природу, і можна
ешелонувати будь-яку кількість площин пам'яті в прямокутне тверде тіло. Обсяг
чіпа в 256 ГБ б реальною перспективою.
Комп'ютер майбутнього буде практично незалежний від джерел
електроживлення. Одна з найбільших переваг фотонних ланцюгів — украй мале
енергоспоживання. Невелика, але довга, подібна на стержень літієва батарея,
вигнуга в тороїд і встановлена в комп'ютер, функціонуватиме два тижні. А
підзарядити її можна буде так само легко, як сьогодні підзарядити стільникові
телефони.
Розмір екрана не відіграватиме ніякої ролі в комп'ютерах майбутнього. Він
може бути ьеликим, як ваш робочий стіл, або маленьким. Великі варіанти
комп'ютерних екранів ґрунтуватимуться на рідких кристалах, збуджуваних
фотонним способом, що матимуть набагато нижче енергоспоживання, ніж
сьогоднішні LCD-монітори. Кольори будуть яскравими, а зображення точними (це
можуть бути плазмові дисплеї). Фактично сьогоднішня концепція «дозвільної
спроможності» буде значною мірою атрофована.
СРС №23

Тема: Способи адресації даних

Велика частина команд процесора працює з кодами даних (операндами). Одні


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

Методи адресації
Кількість методів адресації в різних процесорах може бути від 4 до 16.
Розглянемо декілька типових методів адресації операндів, що використовуються
зараз в більшості мікропроцесорів.
Безпосередня адресація (див. рис. 1) припускає, що операнд (вхідний)
знаходиться в пам'яті безпосередньо за кодом команди. Операнд звичайно є
константою, яку треба кудись переслати, до чогось додати і т.д. Наприклад, команда
може полягати в тому, щоб додати число 6 до вмісту якогось внутрішнього регістра
процесора. Це число 6 розташовуватиметься в пам'яті, усередині програми в адресі,
наступній за кодом даної команди складання.

Рис. 1 – Безпосередня адресація

Пряма (вона ж абсолютна) адресація (див. рис. 2) припускає, що операнд


(вхідний або вихідний) знаходиться в пам'яті за адресою, код якого знаходиться
усередині програми зразу ж за кодом команди. Наприклад, команда може полягати в
тому, щоб очистити (зробити нульовим) вміст елемента пам'яті з адресою 1000000.
Код цієї адреси 1000000 розташовуватиметься в пам'яті, усередині програми в
наступній адресі за кодом даної команди очищення.
Рис. 2 – Пряма адресація

Регістрова адресація (див. рис. 3) припускає, що операнд (вхідний або


вихідний) знаходиться у внутрішньому регістрі процесора. Наприклад, команда
може полягати в тому, щоб переслати число з нульового регістра в перший. Номери
обох регістрів (0 і 1) визначатимуться кодом команди пересилки.
Непрямо-регістрова (вона ж непряма) адресація припускає, що у
внутрішньому регістрі процесора знаходиться не сам операнд, а його адреса в
пам'яті (див. рис. 4). Наприклад, команда може полягати в тому, щоб очистити
елемент пам'яті з адресою, що знаходиться в нульовому регістрі. Номер цього
регістра (0) визначатиметься кодом команди очищення.

Рис. 3 – Регістрова адресація

Рис. 4 – Непряма адресація

Рідше зустрічаються ще два методи адресації.


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

Сегментація пам'яті
Кажучи про адресацію, не можна обійти питання про сегментацію пам'яті,
вживаної в деяких процесорах, наприклад в процесорах IBM PC-сумісних
персональних комп'ютерів.
В процесорі Intel 8086 сегментація пам'яті організована таким чином.
Вся пам'ять системи представляється не у вигляді безперервного простору, а у
вигляді декількох областей - сегментів заданого розміру (по 64 Кбайта), положення
яких в просторі пам'яті можна змінювати програмним шляхом.
Для зберігання кодів адрес пам'яті використовуються не окремі регістри, а
пари регістрів:
 сегментний регістр визначає адресу початку сегменту (тобто
положення сегменту в пам'яті);
 регістр покажчика (регістр зсуву) визначає положення робочої
адреси усередині сегменту.

При цьому фізична 20-розрядна адреса пам'яті, що виставляється на зовнішню


шину адреси, утворюється так, як показано на рисунку 5, тобто шляхом складання
зсуву і адреси сегменту із зсувом на 4 біти. Положення цієї адреси в пам'яті
показано на рисунку 6.
Сегмент може починатися тільки на 16-байтній межі пам'яті (оскільки адреса
початку сегменту, по суті, має чотири молодші нульові розряди, як видно з рис. 5),
тобто з адреси, кратної 16. Ці допустимі межі сегментів називаються межами
параграфів.
Відзначимо, що введення сегментації, перш за все, зв'язано з тим, що
внутрішні регістри процесора 16-розрядні, а фізична адреса пам'яті 20-розрядна (16-
розрядна адреса дозволяє використовувати пам'ять тільки в 64 Кбайт, що явно
недостатньо). В процесорі MC68000 фірми Motorola , що з'явився в той же час,
внутрішні регістри 32-розрядні, тому там проблеми сегментації пам'яті не виникає.
Рис. 5 – Формування фізичної адреси пам'яті з адреси сегменту і зсуву

Рис. 6 – Фізична адреса в сегменті (всі коди - шістнадцяткові)

Застосовуються і складніші методи сегментації пам'яті. Наприклад, в


процесорі Intel 80286 в так званому захищеному режимі адреса пам'яті обчислюється
відповідно до рисунку 7.
В сегментному регістрі в даному випадку зберігається не базова (початкова)
адреса сегментів, а коди селекторів, що визначають адреси в пам'яті, по яких
зберігаються дескриптори (тобто описувачі) сегментів. Область пам'яті з
дескрипторами називається таблицею дескрипторів. Кожний дескриптор сегменту
містить базову адресу сегменту, розмір сегменту (від 1 до 64 Кбайт) і його атрибути.
Базова адреса сегменту має розрядність 24 біт, що забезпечує адресацію 16 Мбайт
фізичної пам'яті.

Рис. 7 – Адресація пам'яті в захищеному режимі процесора Intel 80286


Таким чином, на суматор, що обчислює фізичну адресу пам'яті, подається не
вміст сегментного регістра, як у попередньому випадку, а базова адреса сегменту з
таблиці дескрипторів.
Ще складніший метод адресації пам'яті з сегментацією використаний в
процесорі Intel 80386 і в більш пізніх моделях процесорів фірми Intel. Цей метод
ілюструється на рисунку 8.

Рис. 8 – Формування фізичної адреси пам'яті процесора 80386 в захищеному режимі

Адреса пам'яті (фізична адреса) обчислюється в три етапи. Спочатку


обчислюється так звана ефективна адреса (32-розрядний) шляхом підсумовування
трьох компонентів: бази, індексу і зсуву (Base, Index, Displacement), причому
можливе множення індексу на масштаб (Scale). Ці компоненти мають наступний
сенс:
 зсув - це 8-, 16- або 32-розрядне число, включене в команду.
 база - цей вміст базового регістра процесора. Звичайно воно
використовується для вказівки на початок деякого масиву.
 індекс - цей вміст індексного регістра процесора. Звичайно воно
використовується для вибору одного з елементів масиву.
 масштаб - це множник (він може бути рівний 1, 2, 4 або 8),
вказаний в коді команди, на який перед підсумовуванням з іншими
компонентами умножається індекс. Він використовується для вказівки розміру
елемента масиву.

Потім спеціальний блок сегментації обчислює 32-розрядну лінійну адресу, яка


є сумою базової адреси сегменту з сегментного регістра з ефективною адресою.
Нарешті, фізична 32-бітова адреса пам'яті утворюється шляхом перетворення
лінійної адреси блоком сторінкової переадресації, який здійснює переклад лінійної
адреси у фізичний сторінками по 4 Кбайта.
У будь-якому випадку сегментація дозволяє виділити в пам'яті один або
декілька сегментів для даних і один або декілька сегментів для програм. Перехід від
одного сегменту до іншого зводиться всього лише до зміни вмісту сегментного
регістра. Іноді це дуже зручно. Але для програміста працювати з сегментованою
пам'яттю звичайно складніше, ніж з безперервною, несегментованою пам'яттю,
оскільки доводиться стежити за межами сегментів, за їх описом, перемиканням і т.д.
Адресація байт і слів
Багато процесорів, що мають розрядність 16 або 32, здатні адресувати не
тільки ціле слово в пам'яті (16-розрядне або 32-розрядне), але і окремі байти.
Кожному байту в кожному слові при цьому відводиться своя адреса.
Так, у разі 16-розрядних процесорів всі слова в пам'яті (16-розрядні) мають парні
адреси. А байти, що входять в ці слова, можуть мати як парні адреси, так і непарні.
Наприклад, нехай 16-розрядний елемент пам'яті має адресу 23420, і в ній
зберігається код 2А5Е (див. рис. 9).

Рис. 9 – Адресація слів і байтів

При зверненні до цілого слова (з вмістом 2А5Е) процесор виставляє адресу


23420. При зверненні до молодшого байта цієї комірки (з вмістом 5Е) процесор
виставляє ту ж саму адресу 23420, але використовує команду, що адресує байт, а не
слово. При зверненні до старшого байта цієї комірки (з вмістом 2А) процесор
виставляє адресу 23421 і використовує команду, що адресує байт. Наступний по
порядку 16-розрядний елемент пам'яті з вмістом 487F матиме адресу 23422, тобто
знову ж таки парний. Її байти матимуть адреси 23422 і 23423.
Для розрізення байтових і словних циклів обміну на магістралі в шині
управління передбачається спеціальний сигнал байтового обміну. Для роботи з
байтами в систему команд процесора вводяться спеціальні команди або
передбачаються методи байтової адресації.
СРС №24

Тема: Проектування мікропроцесорів

Мікропроцесорні системи по своїй складності, вимогам і функціям можуть


значно відрізнятися більш надійними параметрами, обсягом програмних засобів,
бути одно процесорними й багатопроцесорними, побудованими на одному типі
мікропроцесорного набору або декількох, і т.д. У зв'язку з цим процес проектування
може видозмінюватися в залежності від вимог, пропонованих до систем. Наприклад,
процес проектування МШС, що відрізняються одна від іншої змістом ПЗП, буде
складатися з розробки програм і виготовлення ПЗП.
При проектуванні багатопроцесорних мікропроцесорних систем, що містять
кілька типів мікропроцесорних наборів, необхідно вирішувати питання організації
пам'яті, взаємодії з процесорами, організації обміну між пристроями системи і
зовнішнім середовищем, узгодження функціонування пристроїв, що мають різну
швидкість роботи, і т.д. Нижче приведена зразкова послідовність етапів, типових
для створення мікропроцесорної системи:
1. Формалізація вимог до системи.
2. Розробка структури й архітектури системи.
3. Розробка й виготовлення апаратних засобів і програмного забезпечення
системи.
4. Комплексне налагодження і приємоздаточні іспити.

Етап 1. На цьому етапі складаються зовнішні специфікації, перелічуються


функції системи, формалізується технічне завдання (ТЗ) на систему, формально
викладаються задуми розроблювача в офіційній документації.
Етап 2. На даному етапі визначаються функції окремих пристроїв і
програмних засобів, вибираються мікропроцесорні набори, на базі яких буде
реалізована система, визначаються взаємодію між апаратними і програмними
засобами, тимчасові характеристики окремих пристроїв і програм.
Етап 3. Після визначення функцій, реалізованих апаратурою, і функцій,
реалізованих програмами, схемотехніки і програмісти одночасно приступають до
розробки і виготовлення відповідно досвідченого зразка і програмних засобів.
Розробка й виготовлення апаратури складаються з розробки структурних і
принципових схем, виготовлення прототипу, автономного налагодження. Розробка
програм складається з розробки алгоритмів; написання тексту вихідних програм;
трансляції вихідних програм в об'єктні програми; автономного налагодження.
Етап 4. Комплексне налагодження.
На кожнім етапі проектування МШС людьми можуть бути внесені
несправності і прийняті невірні проектні рішення. Крім того, в апаратурі можуть
виникнути дефекти.

Джерела помилок
Розглянемо джерела помилок на перших трьох етапах проектування.
Етап 1. На цьому етапі джерелами помилок можуть бути: логічна
непогодженість вимог, недогляду, неточності алгоритму.
Етап 2. На даному етапі джерелами помилок можуть бути: недогляду функцій,
непогодженість протоколу взаємодії апаратури й програм, невірний вибір
мікропроцесорних наборів, неточності алгоритмів, невірна інтерпретація технічних
вимог, недогляд деяких інформаційних потоків.
Етап 3. На цьому етапі джерелами помилок можуть бути: при розробці
апаратури - недогляду деяких функцій, невірна інтерпретація технічних вимог,
недоробка в схемах синхронізації, порушення правил проектування; при
виготовленні прототипу - несправності комплектуючих виробів, несправності
монтажу і зборки; при розробці програмних засобів - недогляду деяких функцій
технічного завдання, неточності в алгоритмах, неточності кодування.
Кожний з перерахованих джерел помилки може породити велике число
суб'єктивних або фізичних несправностей, які необхідно локалізувати й усунути.
Виявлення помилки і локалізація несправності є складною задачею з кількох
причин: по-перше, через велике число несправностей; по-друге, через те, що різні
несправності можуть виявлятися однаковим образом. Тому що відсутні моделі
суб'єктивних несправностей, зазначена задача не формалізована. Маються визначені
успіхи в області створення методів і засобів виявлення помилок і локалізації
фізичних несправностей. Ці методи і засоби широко використовуються для
перевірки працездатного стану і діагностики несправностей дискретних систем при
проектуванні, виробництві й експлуатації останніх.
Суб'єктивні несправності відрізняються від фізичних тем, що після виявлення,
локалізації і корекції більше не виникають. Однак, як випливає з переліку джерел
помилок, суб'єктивні несправності можуть бути внесені на етапі розробки
специфікації системи, а це означає, що навіть після самих ретельних іспитів системи
на відповідність її зовнішнім специфікаціям у системі можуть знаходитися
суб'єктивні несправності.
Процес проектування - ітераційний процес. Несправності, виявлені на етапі
приємоздаточних іспитів, можуть привести до корекції специфікацій, а отже, до
початку проектування всієї системи. Виявляти несправності необхідно якомога
раніше, для цього треба контролювати коректність проекту на кожнім етапі
розробки.

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


Основні методи контролю правильності проектування наступні: верифікація -
формальні методи доказу коректності проекту; моделювання; тестування.
Існує багато робіт по верифікації програмного забезпечення, мікропрограм,
апаратури. Однак ці роботи носять теоретичний характер. На практиці поки
використовують моделювання поводження об'єкта і тестування.
Для контролю коректності проекту на кожнім етапі проектування необхідно
проводити моделювання на різних рівнях абстрактного представлення системи і
перевірку правильності реалізації заданої моделі шляхом тестування. На етапі
формалізації вимог контроль коректності особливо необхідний, оскільки різні цілі
проектування не формалізуються або не можуть бути формалізовані в принципі.
Функціональна специфікація може аналізуватися колективом експертів або
моделюватися і перевірятися в досвідченому порядку для виявлення, чи досягаються
бажані цілі. Після твердження функціональної специфікації починається розробка
функціональних тестових програм, призначених для встановлення правильності
функціонування системи відповідно до її функціональної специфікації. В
ідеальному випадку розробляються тести, цілком засновані на цій специфікації і
перевірки, що дають можливість, будь-якої реалізації системи, що з'являється
здатною виконувати функції, обговорені в специфікації. Цей спосіб - повна
протилежність іншим, де тести будуються стосовно до конкретних реалізацій.
Незалежна від реалізації функціональна перевірка звичайно приваблива лише в
теоретичному плані, але практичного значення не має через високий ступінь
спільності.
Автоматизація стомлюючої роботи зі складання тестових програм не тільки
скорочує тривалість періоду конструювання/налагодження за рахунок одержання
тестових програм на етапі конструювання (оскільки вони можуть бути згенеровані
відразу після формування вимог до системи), але і дозволяє проектувальникові
змінювати специфікації, не піклуючись про переписування всіх тестових програм
заново. Однак на практиці розробці тестів часто привласнюють більш низький
пріоритет у порівнянні з проектом, тому тестові програми з'являються значно
пізніше його завершення. Але навіть якщо детальні тести виявляються
підготовленими, часто практично недоцільно запускати них на імітаторі, тому що
детальне моделювання вимагає великих витрат засобів на розробку програм і часу
на обчислення, у результаті велика частина роботи з налагодження повинна
відкладатися до моменту створення прототипу системи.
Після виявлення помилки повинний бути локалізований її джерело, щоб
провести корекцію на відповідному рівні абстрактного представлення системи й у
відповідному місці. Помилкове визначення джерела помилки або проведення
корекцій на іншому рівні абстрактного представлення системи приводить до того,
що інформація про систему на верхніх рівнях стає помилкової і не може бути
використана для подальшого налагодження при виробництві й експлуатації системи.
Наприклад, якщо несправність внесена у вихідний текст програми, написаної мовою
асемблера, а корекція проведена в об'єктному коді, те подальше налагодження
програми ведеться в об'єктному коді; при цьому всі переваги написання програми
мовою асемблера зводяться на немає.
СРС №25

Тема: Паралельні матричні та векторні архітектури

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

2. Комп’ютери з розподіленою пам’яттю. Складаються з декількох ЕОМ,


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

Векторно-конвеєрні комп’ютери
Класичним прикладом комп’ютерів даного типу є комп’ютери Cray C90, що
був випущений на початку 90-х років. Даний комп’ютер містить 16 рівноцінних
процесорів, з часом такту 4,1нс, тобто тактова частота складає 250 МГц. Всі
процесори однакові, як по характеристиках, так і по відношенню по розділенню
ресурсів.
Структура ОЗП
Кожне слово в пам’яті складається з 80 біт, 64 з них - біти даних, 16 біт - для
корекції помилок. Для реалізації паралельного доступу вся пам'ять розбита на
банки. При максимальній конфігурації вся пам'ять розбивається на 1024 банки, які в
свою чергу об’єднуються в секції та підсекції. Кожна з восьми секцій включає в себе
8 підсекцій, кожна з яких включає 64 банки. При одночасному зверненні до однієї
підсекції, конфлікт вони вирішують за 6 тактів. Якщо вибірка відбувається з кроком,
то час вирішення конфлікта збільшується із збільшенням значення стеку. Кожен
процесор має доступ до ОЗП через чотири порти, що працюють зі швидкістю два
слова за такт. З цих чотирьох портів обов’язково один виділяється для операції
вводу/виводу. Ще один обов’язково виділяється для проведення запису.
Секція вводу виводу.
Підтримує три типи каналів для роботи із зовнішніми пристроями:
1. Low-speed channels (LOSP) 6 Мбіт/с
2. High-speed channels (HISP) 200Мбіт/с
3. Very high-speed channels (VHISP) 1800 Мбіт/с

Секція міжпроцесорної взаємодії


Основне завдання - це передача даних та керуючої інформації між
процесорами та синхронізація їх взаємної роботи. Містить розділені регістри та
семафори, які об’єднуються в групи, що називаються кластерами. Кожен кластер
містить вісім 32-розрядних регістрів, вісім 64-розрядних регістра і 32 однобітних
семафори. Кількість кластерів визначається конфігурацією комп’ютера.
Регістрова структура процесора.
Так як всі процесори даного комп’ютера є однакові, то розглянемо структуру
одного процесора. Кожен процесор вміє обробляти три типи даних:
1. адреси
2. скаляри
3. вектори

Кожен процесор має набір основних та проміжних регістрів. До основних


відносяться: А-регістри, що призначені для роботи з адресами, S-регістри, що
призначені для роботи із скалярними даними. Проміжні регістри В та Т, призначені
для запису проміжних результатів обміну процесора з пам’яттю. Адресні регістри
містять вісім регістрів у основному наборі та 64 в проміжному. Всі регістри 64-
розрядні і призначені для виконання скалярних операцій. Кожен з векторних
регістрів містить 128 64-розрядних елементів. Призначені для збереження елементів
вектора. Кількість таких регістрів - 8. для виконання векторних операцій є два
додаткових регістра - 8-розрядний VL, в якому зберігається довжина вектора та
регістр 128-бітний VM - регістр маски. Якщо і-тий розряд даного регістра рівний 1,
то процесор буде виконувати операції над і-тим елементом вектора.
Системи з розподіленою пам’яттю
Обчислювальні системи з розподіленою пам’яттю
Ідея побудови таких обчислювальних систем є дуже простою. Береться деяка
кількість обчислювальних вузлів, кожен з яких складається з процесорного елемента
та оперативної пам’яті, доступ до якої має тільки цей процесорний елемент. Доступ
до віддаленої пам’яті відбувається іншим, більш складнішим шляхом. В наш час в
ролі обчислювальних вузлів все частіше використовуються повноцінні комп’ютери.
Комунікаційне середовище може спеціально розроблятися для певної системи, або
бути стандартною мережевою технологією, вільно доступною на ринку. Переваги в
таких системах наступні:
Користувач може довільно конфігурувати систему, в залежності від своїх
бажань та можливостей.
Дана система може практично необмежено розростатись і вартість такої
системи значно менша ніж інші паралельні системи.
Дані системи отримали назву - комп’ютери з масовим розпаралелюванням або
масово паралельні комп’ютери. Найбільшого розповсюдження дані системи набули
з 90-х років. Серед найпопулярніших систем можна виявити Intel Paragon IBM SP1
SP2. Всі вони різняться тільки процесорами, що входять до їхнього складу та
комунікаційним середовищем.
Перевагами цих систем є можливість розв’язку декількох паралельних
незалежних або слабозв’язаних задач. Також перевагою можна вказати відносну
простоту та дешевизну створення. Недоліками є складна організація роботи такої
системи (синхронізація даних, реалізація механізму повідомлень між комп’ютерами)
та великі накладні витрати при передачі даних по мережі. По характеру зв’язків між
ЕОМ даної системи можна виділити наступні типи:
1. Непрямі або слабозв’язані. В слабозв’язаних системах комп’ютери
обмінюються даними через спільний зовнішній запам’ятовуючий пристрій. Цей
пристрій працює по принципу "поштової скриньки", тобто один комп’ютер записує
дані в спільну пам'ять, а інший звідти її зчитує.

Такий підхід використовується, коли треба підвищити надійність системи.


Тобто одна ЕОМ є основною, вона проводить всі операції контролю обрахунків,
введення / виведення інформації, і з певною періодичністю передає їх на резервну
ЕОМ. У випадку відмови основної ЕОМ резервна її заміняє.
2. Прямозв’язані. В прямозв’язаних системах є три види зв’язків:
зв'язок через загальний оперативний пристрій;
пряме управління або зв'язок "процесор-процесор";
зв'язок через адаптери.
Зв'язок через загальний оперативний пристрій значно сильніший ніж зв'язок
через зовнішній запам’ятовуючий пристрій. Обмін інформацією відбувається також
за принципом "поштової скриньки".
Прямий зв'язок може бути не тільки інформаційним, але і командним, тобто
один процесор може управляти іншим.
Зв'язок через адаптери - це зв'язок через комп’ютерну мережу.
3. Сателітний зв'язок. Сателітний зв'язок використовується для зменшення
навантаження на певну ЕОМ. До комп’ютера підключається інший комп’ютер
значно меншої потужності. Цей комп’ютер називається сателітом. Комп’ютер -
сателіт виконує наступні операції:
організацію роботи основної ЕОМ з периферійними пристроями, зовнішньою
пам’яттю, віддаленими абонентами;
попереднє сортування даних, перетворення їх у форму, зручну для основної
ЕОМ;
перетворення вихідної інформації у вигляд, зручний для користувача.
Класичні матричні системи
Методом використання єдиної пам’яті є створення декількох окремих блоків,
кожен з яких може працювати з одним процесором. Одною з таких реалізацій є
система матричних комутаторів.

На вузлах сітки провідників ставиться комутатор, який відкриває або


забороняє процесору доступ до даного блоку пам’яті. В системі, в якій є n
процесорів та n блоків пам’яті потрібно певна кількість комутаторів, що при
значних n є дуже великим числом.
СРС №26

Тема: Приклади кластерних рішень різноманітних фірм-виробників

Концепція кластерних систем

Схема 1. Кластерна система

LAN - Local Area Network, локальна мережа.


SAN - Storage Area Network, мережа збереження даних
У класифікації обчислювальних систем термін "кластер" уперше визначила
компанія Digital Equipment Corporation (DEC). За визначенням DEC, кластер - це
група обчислювальних машин, що пов'язані між собою і функціонують як один
вузол обробки інформації. Кластер функціонує як єдина система; тобто для
користувача або прикладної задачі вся сукупність обчислювальної техніки виглядає
як один комп'ютер. Саме це і є найважливішим при побудові кластерної системи.
Перші кластери компанії Digital були побудовані на машинах VAX. Їх уже майже
ніхто не використовує, але загальні принципи, закладені при проектуванні,
залишаються основою при побудові кластерних систем і сьогодні. Кластерні
системи мають задовольняти таким загальним вимогам:
- Висока готовність.
- Висока швидкодія.
- Масштабування.
- Загальний доступ до ресурсів.
- Зручність обслуговування.

Природно, що при кожній конкретній реалізації одні з вимог стають


першочерговими, тоді як інші відходять на другий план. Скажімо, при реалізації
кластера, для якого найважливішим є швидкодія, задля економії ресурсів менше
уваги приділяється високій готовності.
У загальному випадку кластер функціонує як мультипроцесорна система, тому
важливо розуміти класифікацію таких систем у рамках розподілу програмно
апаратних ресурсів. Зазвичай на платформах РС, з якими мені доводиться
працювати, використовуються реалізації кластерної системи за моделями тісно та
помірно зв'язаних мультипроцесорних архітектур.
Схема 2. Тісно зв'язана мультипроцесорна система

Схема 3. Помірно зв'язана мультипроцесорна система

Схема 4. Слабко зв'язана мультипроцесорна система

Розподіл на High Avalibility та High Performance системи


За функціональною класифікацією кластери можна поділити на швидкісні
(High Performance), системи високої готовності (High Availability)та змішані.
Високошвидкісні кластери використовуються для задач, які потребують значної
обчислювальної потужності. Класичні області їх використання:
- обробка зображень:рендеринг, розпізнавання образів;
- наукові дослідження: фізика, біоінформатика, біохімія, біофізика;
- промисловість: геоінформаційні задачі, математичне моделювання;
- багато інших...

Кластери, які належать до систем високої готовності, використовуються


всюди, де вартість можливого простою перевищує вартість витрат, необхідних для
побудови кластерної системи, наприклад:
- білінгові системи;
- банкові операції;
- електронна комерція;
- управління підприємством тощо.
Змішані системи об'єднують особливості як перших, так і других.
Позиціонуючи їх, слід зазначити, що кластер із параметрами як High Performance,
так і High Availability, обов'язково програє у швидкодії системі, орієнтованій на
високошвидкісні обчислення, і у можливому часі простою системі, орієнтованій на
роботу в режимі високої готовності.

Проблематика High Performance кластерів


Майже у будь-якій орієнтованій на паралельне обчислення задачі неможливо
уникнути необхідності передавати дані з однієї підзадачі іншій. Відтак швидкодія
High Performance кластерної системи визначається швидкодією вузлів та зв'язків між
ними. Причому вплив швидкісних параметрів цих зв'язків на загальну
продуктивність системи залежить від характеру виконуваної задачі. Якщо задача
потребує частого обміну даними з підзадачами, швидкодії комунікаційного
інтерфейсу слід приділяти максимум уваги. Природно, чим менше взаємодіють
частини паралельної задачі між собою, тим менше часу потрібно для її виконання.
Це висуває певні вимоги також і до програмування паралельних задач. Основні
проблеми при необхідності обміну даними між підзадачами виникають у зв'язку з
тим, що швидкодія передачі даних між центральним процесором і оперативною
пам'яттю вузла значно перевищує швидкісні характеристики систем
міжкомп'ютерної взаємодії. Так само суттєво позначається на функціонуванні
системи (порівняно зі звичними SMP системами) різниця у швидкодії кеш-пам'яті
процесорів із міжвузловими комунікаціями. Швидкодія інтерфейсів
характеризується двома параметрами: пропускною здатністю неперервного потоку
даних і максимальною кількістю найменших пакетів, яку можна передати за
одиницю часу. Варіанти реалізацій комунікаційних інтерфейсів розглянемо у розділі
"Засоби реалізації High Performance кластерів ".

Проблематика High Availability кластерних систем


У світі набули розповсюдження кілька типів систем високої готовності. Серед
них кластерна система уособлює технології, що забезпечують високий рівень
відмовостійкості при найнижчій вартості. Відмовостійкість кластера забезпечується
дублюванням усіх життєвоважливих компонент. Максимально відмовостійка
система повинна не мати жодної точки (тобто активного елемента), відмова якої
може призвести до втрати функціонування системи. Таку характеристику, як
правило, називають NSPF (No Single Point of Failure, англ., відсутність єдиної точки
відмови).
Концепція кластерних систем

Схема 5. Високошвидкісний кластер


Схема 6. Кластерна система без точок відмов

Головна мета при побудові систем високої готовності - забезпечити


мінімальний час простою. Аби система мала високі показники готовності, потрібно
щоб:
- її компоненти були максимально надійними;
- вона була відмовостійкою (бажано,щоб не мала точок відмов);
- була зручною в обслуговуванні та давала змогу проводити заміну компонент
без її зупинки.

Ігнорування будь якого з указаних параметрів може призвести до втрати


функціональності системи. Коротко проаналізуємо всі три пункти. Стосовно
максимальної надійності, то вона досягається шляхом використання електронних
компонент високої та надвисокої інтеграції, а також забезпеченням нормальних
режимів роботи в тому числі й теплових. Відмовостійкість забезпечується шляхом
використання спеціалізованих компонент (ECC, модулі пам'яті Chip Kill,
відмовостійкі блоки живлення тощо), а також за допомогою технологій
кластеризації. Завдяки кластеризації створюється така схема функціонування, коли
при відмові одного з комп'ютерів задачі перерозподіляються між іншими вузлами
кластера, що функціонують без помилок. Причому однією з найважливіших задач
виробників кластерного програмного забезпечення є забезпечення мінімального
часу відновлення системи у разі збою, оскільки відмовостійкість системи потрібна
саме для мінімізації так званого планового простою. Не слід забувати, що зручність
в обслуговуванні, що сприяє зменшенню планових простоїв (наприклад, заміни
обладнання, що вийшло з ладу), є одним із найважливіших параметрів систем
високої готовності. Тому якщо система не дозволяє замінювати компоненти, не
вимикаючи всього комплексу, то її коефіцієнт готовності зменшується. Нині часто
використовуються змішані кластерні архітектури, котрі одночасно є як системами
високої готовності, так і високошвидкісними кластерними архітектурами, в яких
прикладні задачі розподіляються по вузлах системи. Відмовостійкий комплекс,
швидкодія якого збільшується шляхом додавання нового вузла, вважається
найоптимальнішим рішенням при побудові обчислювальної системи. Але сама
схема побудови таких змішаних кластерних архітектур спонукає до об'єднання
великої кількості дорогих компонент з метою забезпечення високої швидкодії та
резервування одночасно.
Змішані архітектури

Схема 7. Високошвидкісний відмовостійкий кластер

Позаяк у High Performance кластерній системі найдорожчим компонентом є


система високошвидкісних комунікацій, її дублювання призведе до значних
фінансових витрат. Слід зазначити, що системи високої готовності часто
використовуються для OLTP задач, які оптимально функціонують на симетричних
мультипроцесорних системах. Реалізації таких кластерних систем часто
обмежуються 2 вузловими варіантами, орієнтованими насамперед на забезпечення
високої готовності. Але останнім часом все популярнішими у якості компонент для
побудови змішаних HA/HP кластерних систем стають недорогі системи кількістю
більше двох. Це підтверджує, зокрема, інформація агенції The Register, опублікована
на її веб-сторінці: "Голова корпорації Oracle оголосив, що найближчим часом три
Unіх сервера, на яких працює основна маса бізнес-додатків компанії, буде замінено
на блок серверів на базі процесорів Іntеl під керуванням ОС Lіnuх. Елісон наполягає
на тому, що введення підтримки кластерів при роботі з прикладними задачами та
базами зменшує витрати та підвищує відмовостійкість."

Схема 8. Швидкість передачі неперервного потоку даних


СРС №27

Тема: Розвиток сучасних матричних та векторних архітектур. Обчислювальні


комплекси. Класифікація, призначення, принципи побудови

Векторні обчислювальні системи - системи класу SIMD, в яких одна і та ж


задана операція виконується відразу над всіма компонентами векторів.
В задачах моделювання реальних процесів і об'єктів, для яких характерна
обробка великих масивів чисел у формі з плаваючою комою, масиви
представляються матрицями і векторами, а алгоритми їх обробки описуються в
термінах матричних операцій. Як відомо, основні матричні операції зводяться до
однотипних дій над парами елементів вихідних матриць, які, найчастіше, можна
виробляти паралельно. В універсальних обчислювальних системах, орієнтованих на
скалярні операції, обробка матриць виконується поелементно і послідовно. При
великої розмірності масивів послідовна обробка елементів матриць займає надто
багато часу, що і призводить до неефективності універсальних ВС для розглянутого
класу задач. Для обробки масивів потрібні обчислювальні засоби, що дозволяють за
допомогою єдиної команди виробляти дію відразу над всіма елементами масивів -
кошти векторної обробки.
У засобах векторної обробки під вектором розуміється одновимірний масив
даних (зазвичай у формі з плаваючою комою), розміщених в пам'яті ВС. Кількість
елементів масиву називається довжиною вектора. Багатовимірні масиви вважаються
наборами одновимірних масивів-векторів.
Дії над багатовимірними масивами враховують специфіку їх розміщення.
Спосіб розміщення багатовимірного масиву впливає на крок зміни адреси елемента,
обраного з пам'яті. Так, якщо матриця розташована в пам'яті построчно, адреси
сусідніх елементів рядка розрізняються на одиницю, а для елементів стовпця крок
дорівнює чотирьом. При розміщенні матриці по стовпцях одиниці буде дорівнює
крок за стовпцем, а чотирьом - крок по рядку. У векторній концепції для позначення
кроку, з яким елементи вектора витягуються з пам'яті, застосовують термін крок за
індексом (stride).

Поняття векторного процесора


Векторний процесор - це процесор, в якому операндами деяких команд
можуть виступати масиви даних - вектори. Векторний процесор може бути
реалізований у двох варіантах. У першому він являє собою додатковий блок до
універсальної обчислювальної машини (системі). У другому - векторний процесор є
основою самостійної ВС.
В архітектурі засобів векторної обробки використовується один з двох
підходів - векторно-паралельний або векторно-конвеєрний.
У векторно-паралельному процесорі одночасні операції над елементами векторів
проводяться за допомогою декількох функціональних блоків (ФБ) з плаваючою
комою, кожен з яких відповідає за одну пару елементів.
У векторно-конвеєрному варіанті обробка елементів векторів проводиться
одним конвеєрним ФБ. Операції з числами у формі з ПЗ досить складні, але
піддаються разбиению на окремі кроки. Кожен етап обробки може бути
реалізований за допомогою окремої ступені конвеєрного ФБ. Чергова пара
елементів векторів-операндів подається на вхід конвеєра як тільки звільняється його
перший ступінь.
Одночасні операції над елементами векторів можна проводити і за допомогою
декількох конвеєрних ФБ. Такого роду обробка поєднує векторно-паралельний і
векторно-конвеєрний підходи.

Архітектури векторної обробки «пам'ять-пам'ять» і «регістр-регістр»


Принциповим моментом в архітектурі векторних процесорів є спосіб доступу
до операндів, оскільки вектори-операнди зберігаються в пам'яті ВС і туди ж
поміщається вектор-результат. Для відомих векторних ВС можна виділити два
варіанти архітектури векторної обробки, відомі як «пам'ять-пам'ять» і «регістр-
регістр».
У векторних процесорах з архітектурою «пам'ять-пам'ять» елементи векторів
по черзі беруться з пам'яті і відразу ж спрямовуються в функціональний блок. У
міру обробки елементи вектора результату, що з'являються на виході ФБ, відразу ж
заносяться в пам'ять.
В архітектурі «регістр-регістр» операнди спочатку завантажуються з пам'яті в
векторні регістри. Векторний регістр являє собою сукупність скалярних регістрів,
об'єднаних в чергу типу FIFO, здатну зберігати 50-100 чисел з плаваючою комою
(найчастіше - 64). Операція виконується над векторами, розміщеними в векторних
регістрах операндів, а її результат спочатку заноситься у векторний регістр
результату, а вже з нього переписується в пам'ять.
В обох структурах необхідно забезпечити необхідну послідовність вилучення
елементів векторів-операндів з пам'яті і занесення елементів вектора-результату в
пам'ять. Це завдання у векторному процесорі реалізується за допомогою генератора
адрес, на виході якого формується адреса чергового елемента вектора в пам'яті.
Спочатку на вхід генератора подається базовий адреса - початкова адреса області
пам'яті, що зберігає елементи вектора. Черговий адреса обчислюється шляхом
збільшення попереднього адреси на величину кроку по індексу.
Для доступу до структурованих даних в пам'яті (масивам, векторах), в яких
елементи з послідовно зростаючими індексами розміщуються у комірках з
послідовно зростаючими адресами, пам'ять вигідніше будувати як блочну з
розшаруванням. У цьому випадку адреси осередків чергуються по циклічної схемою
(наступну адресу - у наступному банку пам'яті). Такий прийом дозволяє майже
паралельно читати (записувати) елементи векторів в обох архітектурах.
Перевага векторних процесорів «пам'ять-пам'ять» полягає в можливості
обробки довгих векторів, в той час як в процесорах «регістр-регістр» доводиться
розбивати довгі вектори на сегменти фіксованої довжини. На жаль, за гнучкість
режиму «пам'ять-пам'ять» доводиться розплачуватися відносно великими
витратами, відомими як час запуску, що представляє собою часовий інтервал між
ініціалізацією команди і моментом, коли перший результат з'явиться на виході
конвеєра. Великий час запуску в процесорах «пам'ять-пам'ять» обумовлено
швидкістю доступу до пам'яті, яка набагато менша швидкості доступу до
внутрішнього регістру. Однак коли конвеєр заповнений, результат формується в
кожному циклі. Модель часу роботи векторного процесора (ВП) має вигляд:

T = s + α × N,
де s - час запуску, α - константа, що залежить від команди (зазвичай 1/2, 1 або 2) і N
- довжина вектора.

Архітектура «пам'ять-пам'ять» реалізована в обчислювальних системах


Advanced Scientific Computer фірми Texas Instruments Inc., сімействі
обчислювальних систем фірми Control Data Corporation, насамперед Star 100, серії
Cyber 200 і ВС типу ЕТА-10. Всі ці обчислювальні системи з'явилися в середині 70-х
минулого століття після тривалого циклу розробки, але до середини 80-х років від
них відмовилися. Причиною послужило занадто великий час запуску - близько 100
циклів процесора. Це означає, що операції з короткими векторами виконуються
дуже неефективно, і навіть при довжині векторів в 100 елементів процесор досягав
тільки половини потенційної продуктивності.
В обчислювальних системах «регістр-регістр» вектори мають порівняно
невелику довжину (у ЗС сімейства Cray - 64), але час запуску значно менше, ніж у
випадку «пам'ять-пам'ять». Цей тип векторних систем набагато більш ефективний
при обробці коротких векторів, але при операціях над довгими векторами векторні
регістри повинні завантажуватися сегментами кілька разів. В даний час ВП «регістр-
регістр» домінують на комп'ютерному ринку. Це обчислювальні системи фірми Cray
Research Inc., а також векторні ВС фірм Fujitsu, Hitachi і NEC, наприклад NEC SX-
8R (2006). Час циклу в сучасних ВП становить близько 2-2,5 нс.

Структура векторної обчислювальної системи


В реальних задачах векторна обробка становить лише частина загальної
обчислювального навантаження. Значний вагу мають і скалярні операції. З цієї
причини векторна ВС, крім векторного процесора, містить ще й скалярний
процесор. Як і належить для SIMD-системи, виконується єдина програма, що
містить як скалярні, так і векторні команди. Програма і дані зберігаються в пам'яті
ВС. Команди програми послідовно вибираються з пам'яті процесором обробки
команд, який направляє скалярні і векторні команди в скалярний або векторний
процесор відповідно.
Для підвищення швидкості обробки векторів всі функціональні блоки
векторних процесорів будуються по конвеєрній схемі, причому так, щоб кожен
ступінь будь-якого з конвеєрів справлялася зі своєю операцією за один такт (число
ступенів в різних функціональних блоках може бути різним). У деяких векторних
ВС, наприклад Cray С90, цей підхід дещо вдосконалено - конвеєри у всіх
функціональних блоках продубльовані.
Цікавою особливістю деяких ВП типу «регістр-регістр», наприклад ВС фірми
Cray Research Inc., є так зване зачеплення векторів (vector chaining або vector
linking), коли векторний регістр результату однієї векторної операції
використовується в якості вхідного регістра для подальшої векторної операції. Така
комбінація з послідовності множення і підсумовування характерна для операції
згортки і зустрічається у багатьох векторних і матричних обчисленнях. Сутність
зачеплення векторів в тому, що виконання векторної команди починається відразу,
як тільки утворюються компоненти беруть участь у ній векторних операндів, не
чекаючи завершення обчислення повного вектора операнда і занесення його у
відповідний векторний регістр. Утворюються ланцюжки операцій.
З середини 90-х років минулого століття векторні ВС стали поступатися
своїми позиціями іншим більш техно¬логічним видам систем. Проте одна з останніх
розробок корпорації NEC (2007 рік) - обчислювальна система SX-9 - по суті являє
собою векторно-конвеєрну ВС. Пікова продуктивність системи з 16 ядрами
становить 26,2 TFLOPS (трильйонів операцій з плаваючою комою в секунду).
СРС №28

Тема: Організація багатопрограмної роботи ЕОМ. Основні архітектурні та


технічні рішення. Принципи розмежування функцій між апаратурою і
програмним забезпеченням

Багаторівнева структура еом — репрезентація електронної обчислювальної


машини (взагалі обчислювальної системи) як складної системи з декомпозицією її
структури на певну кількість їєрархічних рівнів з метою спрощення
процесів аналізу та синтезу.
Складність сучасних структур обчислювальної техніки змушує фахівців
використовувати багаторівневе, ієрархічне їх представлення, розбиття складних
структур на простіші складові. На кожному з таких рівнів мають справу з
ідеалізованою, спрощеною моделлю. Наприклад, апаратура персонального
комп'ютера на одному рівні може бути представлена сукупністю таких компонентів,
як «монітор», «системна плата», «накопичувачі на твердих магнітних
дисках», «клавіатура», з'єднаних певним чином, на іншому як набір електричних кіл,
що складаються з діодів, транзисторів, резисторів, інших електронних компонентів.
В першому випадку структура досить нескладна, але з неї насправді досить важко
зрозуміти, як, скажімо, відбувається виконання команди додавання
всередині процесора. В другому випадку ми маємо справу з мільйонами
електричних компонентів, але таке «збільшення» навряд чи додасть простоти в
вирішення питання про те, як з'єднати між собою монітор і відеоплату. Тому
вибір абстракцій під стать розв'язуваному завданню є дуже важливий. Для
розробників така ієрархічна репрезентація особливо важлива. Чітке визначення та
розмежування окремих інформаційних структур та систем дає можливість
багаторазово використовувати добре зарекомендовані рішення. Це стосується,
наприклад, різних втілень однієї й тої ж архітектури, що було б неможливо, якби
машина створювалась без чіткої ієрархізації, виділення та відокремлення самого
поняття «архітектура» від внутрішньої організації та реалізації конкретної ЕОМ.
Багаторівнева структура ЕОМ дає значне прискорення процесу проектування за
рахунок можливості не починати щоразу процес наново, замикаючи проект на собі
без можливості відокремити вдалі рішення від всієї конструкції. І хоча для
монолітної, проектованої на одному подиху «безкомпромісної системи» можна
домогтися кращих характеристик, ніж для обкладеної стандартами, цю можливість
доводиться розмінювати на складність самого проектування й обмежений життєвий
цикл рішення.
Розробка обчислювальної частини ЕОМ ведеться зазвичай на наступних
рівнях:
 архітектурний рівень — розробка загальної концепції обчислювальної
машини, системи команд процесора і його програмної моделі, визначення
інформаційних потоків між процесорами, ієрархією запам’ятовуючих пристроїв,
пристроями вводу-виводу. Визначення стандартів в обчислювальній підсистемі й
підсистемі вводу-виводу
 рівень регістрових пересилань — конкретизація інформаційної й
керуючої частин обчислювальної системи в термінах регістрів, обчислювальних
операцій, потоків даних та управління і операцій пересилання даних між
регістрами.
 логічний рівень — подання структур ЕОМ у вигляді набору логічних
вентилів і зв'язків між ними. Поведінка системи описується в термінах алгебри
логіки (для комбінаційних схем), таблиць переходів (для схем з пам'яттю).
 електричне або схемний рівень — подання ЕОМ у вигляді набору
електричних схем. Поведінка машини описується законами електротехніки.

Втім, часто між архітектурним рівнем і рівнем регістрових пересилань


розташовують додатковий, мікропрограмний, в якому кожній машинній команді
ставиться у відповідність певна програма на простішій мові мікрокоманд,
безпосередньо виконуваних процесором. Практика мікропрограмування була
поширена в 70-і роки у зв'язку зі складністю побудови чисто апаратних структур
управління виконанням складних наборів команд процесорів тих часів. Вона
полягала в розробці спеціального, простішого керуючого пристрою, що сприймав
спеціальні мікропрограми, які описують послідовність дій, необхідних для реалізації
машинних команд. Мікропрограмний пристрій управління виступав ніби
інтерпретатором машинних команд у простішу мову мікрокоманд процесора.
Зрозуміло, що виконання мікропрограм і реалізація машинних команд в такому
випадку займала досить тривалий час. Згодом від складних наборів команд
відмовилися, пристрої управління почали реалізовувати в апаратурі й від практики
мікропрограмування поступово відійшли.
Зрозуміло, що цей розподіл не претендує на повноту, його можна продовжити
до рівня інтегральних компонентів і нижче, можна розвивати його вгору,
розглядаючи обчислювальну систему як комплекс програмних і апаратних засобів,
виділяючи окремо рівні операційної системи, мов високого рівня,
прикладного програмного забезпечення.
Сучасну архітектуру комп'ютера визначають також такі принципи:
1. Принцип програмного керування. Забезпечує автоматизацію процесу обчислень
на ЕОМ. Згідно з цим принципом, запропонованим англійським математиком
Ч.Беббіджем у 1833 р., для розв'язання кожної задачі складається програма, що
визначає послідовність дій комп'ютера. Ефективність програмного керування є
високою тоді, коли задача розв'язується за тією самою програмою багато разів
(хоч і за різних початкових даних).
2. Принцип програми, що зберігається в пам'яті. Згідно з цим принципом,
сформульованим Дж. фон Нейманом, команди програми подаються, як і дані, у
вигляді чисел й обробляються так само, як і числа, а сама програма перед
виконання завантажується в оперативну пам'ять. Це прискорює процес її
виконання.
3. Принцип довільного доступу до пам'яті. Згідно з цим принципом, елементи
програм та даних можуть записуватися у довільне місце оперативної пам'яті.
Довільне місце означає можливість звернутися до будь-якої заданої адреси (до
конкретної ділянки пам'яті) без перегляду попередніх.
На підставі цих приниців можна стверджувати, що сучасний комп'ютер -
технічний пристрій, який після введення в пам'ять початкових даних у вигляді
цифрових кодів і програми їх обробки, вираженої також цифровими кодами,
здатний автоматично здійснити обчислювальний процес, заданий програмою, і
видати готові результати розв'язання задачі у формі придатній для сприйняття
людиною.
Реальна структура комп'ютера значно складніша, ніж розглянута вище (її
можна назвати логічної структурою). У сучасних комп'ютерах, зокрема
персональних, все частіше здійснюється відхід від традиційної архітектури фон
Неймана, зумовлений прагненням розробників та користувачів до підвищення якості
та продуктивності комп'ютерів. Якість ЕОМ характеризується багатьма
показниками. Це і набір команд, які комп'ютер здатний розуміти, і швидкість роботи
(швидкодія) центрального процесора, кількість периферійних пристроїв введення-
виведення, які можна приєднати до комп'ютера одночасно і т.д. Головним
показником є швидкодія - кількість операцій, яку процесор здатний виконати за
одиницю часу. На практиці корситувача більше цікавить продуктивність комп'ютера
- показник його ефективної швидкодії, тобто здатності не просто швидко
функціонувати, а швидко розв'язувати конкретні поставлені задачі.
Як результат, всі ці та інші фактори спричинили принципове і конструктивне
вдосконалення елементної бази комп'ютерів, тобто створення нових, більш
швидких, надійних і зручних у роботі процесорів, запам'ятовуючих пристроїв,
пристроїв введення-виведення і т.д. Проте, слід усвідомлювати, що швидкість
роботи елементів неможливо збільшувати безмежно (існують сучасні технологічні
обмеження та обмеження, зумовлені фізичними законами). Тому розробники
комп'ютерної техніки шукають вирішення цієї проблеми вдосконаленням
архітекутри ЕОМ.
Так, з'явилися комп'ютери з багатопроцесорною архітектурою, в яких кілька
процесорів працюють одночасно, а це означає, що продуктивність такого
комп'ютера дорівнює сумі продуктивностей процесорів. У потужних комп'ютерах,
призначених для складних інженерних розрахунків і систем автоматизованого
проектування (САПР), часто встановлюють два або чотири процесори. У
надпотужних ЕОМ (такі машини можуть, наприклад, моделювати ядерні реакції в
режимі реального часу, передбачати погоду в глобальному масштабі) кількість
процесорів досягає кількох десятків.
Швидкість роботи комп'ютера істотно залежить від швидкодії оперативної
пам'яті. Тому постійно ведуться пошуки елементів для оперативної пам'яті, які
потребували б якомога менше часу на операції читання-запису. Але разом із
швидкодією зростає вартість елементів пам'яті, тому нарощення швидкодійної
оперативної пам'яті потрібної ємності не завжди прийнятна економічно.
Проблема вирішується побудовою багаторівневої пам'яті. Оперативна пам'ять
складається з двох-трьох частин: основна частина великої ємності будується на
відносно повільних (більш дешевих) елементах, а додаткова (так звана кеш-пам'ять)
складається зі швидкодійних елементів. Дані, до яких процесор звертається
найчастіше містяться в кеш-пам'яті, а більший обсяг оперативної інформації
зберігається в основній пам'яті.
Раніше роботою пристроїв введення-виведення керував центральний
процесор, що займало в нього чимало часу. Архітектура сучасних комп'ютерів
передбачає наявність каналів прямого доступу до оперативної пам'яті для обміну
даними з пристроями введення-виведення без участі центрального процесора, а
також передачу більшості функцій керування периферійними пристроями
спеціалізованим процесорам, що розвантажує центральний процесор і підвищує
його продуктивність.
СРС №29

Тема: Опис ієрархічних структур, алгоритмізація процесів ієрархічних


перетворень структур обчислювальних машин і систем

Архітектура ЕОМ відображає наступні аспекти структури ЕОМ, які є


видимими для користувача: система команд, режими адресації, формати та довжина
даних, набір регістрів ЕОМ, які доступні користувачу. Таким чином під
архітектурою видається абстрактне бачення ЕОМ у термінах основних
функціональних модулів, мови ЕОМ та структури даних.
Множина всіх апаратних та програмно виконуємих операцій у ЕОМ
складають її операційні ресурси. ЕОМ, операційні ресурси якої забезпечують
принципову можливість виконання любого алгоритму обробки інформації
називають алгоритмічно універсальною. Для алгоритмічно універсальною ЕОМ
достатньо у її операційних ресурсах чотирьох операцій:
· передача слова з ячейки пам’яті до ячейки пам’яті;
· додавання або віднімання одиниці до слова;
· умовний перехід при рівності слів;
· безумовна зупинка програми.

Ієрархічний принцип побудови апаратних засобів ЕОМ визначається


наявністю сукупності елементів і-того рівня, які при об’єднанні їх у систему
розглядаються в якості елементів в системах більш високого рівня.
Це дозволяє використовувати ієрархічний принцип опису структур та
функціонування апаратних засобів.
У відповідності до цього кожний рівень системи характеризується таким
ступенем деталізації та опису, який забезпечує точність опису до елементів системи
даного рівня.
Перший ієрархічний рівень – це рівень електросхем, для якого елементами є
електронні компоненти (транзистори, діоди, резистори і т.д.). Засобом опису для
цього рівня слугує апарат теорії електричних та магнітних ланцюгів.
Другий ієрархічний рівень – це рівень логічних схем, елементами якого є
логічні та запам’ятовуючі елементи. До логічних схем мають відношення
найпростіші комбінаційні схеми, функціонування яких описується однією
переключательной функцією. Запам’ятовуючий елемент – найпростіший пристрій
пам’яті, що забезпечує записування, зберігання та читання інформації. Засобами
опису на цьому рівні є методи теорії переключательних функцій та структурної
теорії автоматів (автомат із пам’яттю та без пам’яті).
Третій ієрархічний рівень – це рівень операційних вузлів, елементами якого
слугують операційні вузли, що виконують одну або декілька елементарних операцій
та побудовані з логічних та запам’ятовуючих елементів. Цей рівень описується
засобами другого рівня деталізації інформаційних процесів до елементарних
операцій (мікро операцій) над окремими словами.
Четвертий ієрархічний рівень – це рівень структурних схем, елементами якого
є операційні блоки, що інтегрують операційні вузли та виконують визначені
завершені дії, що вказуються командами програми. Апаратні засоби на цьому рівні
описуються із деталізацією до окремих операцій з набору команд ЕОМ, що
виконуються як послідовності окремих операцій. Засобами опису частіше за все
слугують найпростіші формальні мови типу операторних описів.
П’ятий ієрархічний рівень – це програмний рівень, який передбачає
деталізацію процесів оброблення інформації до команд з операційних ресурсів ЕОМ
або до окремих програм. Елементами систем на цьому рівні є АЛП, КЛП, ОЗП,
периферійне та комутаційне обладнання ЕОМ. Засобами опису є машинно-
орієнтовані або процедурно-орієнтовані мови програмування.

Структурна схема ЕОМ


Апаратні засоби будь-якої алгоритмічно універсальної ЕОМ можна умовно
розділити на три основні частини:
· Пам’ять;
· Процесор;
· Периферійні пристрої.

При чому кількість пристроїв пам’яті та процесорів в конкретній ЕОМ може


варіюватися до декількох одиниць, а число периферійних пристроїв – від 10 до 100.

- керуючі зв’язки;
- інформаційні зв’язки.

Пам’ять ЕОМ використовується для збереження вихідних даних програм


оброблення інформації, проміжних та кінцевих результатів обчислення.
Основним запам’ятовуючим пристроєм пам’яті ЕОМ, що призначений для
збереження всієї інформації, що безпосередньо приймає участь в обчислювальному
процесі, є ОЗП.
В сучасних ЕОМ пам’ять представляє собою складну багаторівневу систему.
В цій системі звичайно виділяють рівні найбільш оперативної пам’яті (НОЗП),
оперативної пам’яті ОЗП, буферної пам’яті (БЗП) та зовнішньої пам’яті (ЗЗП).
Кожний наступний рівень відрізняється від попереднього найважливішими
технічними характеристиками пам’яті:
· Ємністю;
· Швидкодією.

Ємністю називається максимальна кількість інформації, яка може бути


записана в пам’яті.
Швидкодія характеризується тривалістю операцій читання та записування –
двох основних операцій, що виконує пам’ять ЕОМ.
Для вказаних рівнів пам’яті ємність зростає в напрямку від НОЗП до ЗЗП, а
швидкодія – в протилежному напрямі.
До складу пам’яті ЕОМ можуть входити також програмні засоби, що
забезпечують переміщення інформації по рівням пам’яті, впорядкування
розміщення інформації та проведення спеціальних процедур для перевірки.
Процесор – сукупність засобів керування, арифметико-логічного пристрою та
пов’язаних із ними тригерів та регістрів. Він організує процес опрацювання
інформації шляхом вибірки та послідовного виконання команд програми, що
знаходиться в пам’яті ЕОМ. Модель ЕОМ, що представлена, отримала назву фон-
нейманівської. Завдяки її простоті й великій гнучкості при керуванні
обчислювальним процесом та найперших зразків ЕОМ домінує при побудові
різноманітних ЕОМ.
Цей принцип побудови ЕОМ із програмою, що зберігається в загальному ОЗП
разом із даними, був запропонований американським математиком Джоном фон
Нейманом в 1945 р.
В останні роки, прагнучи досягнути суттєвого підвищення продуктивності
ЕОМ, конструктори в низці випадків відходять від моделі ЕОМ фон Неймана.
Можливість побудови ЕОМ з окремими пам’ятями та шинами для збереження
та передавання команд та даних, що допускає паралельне в часі вилучення з пам’яті
та передавання по шинах , призвела до побудови нової моделі. Така модель названа
гарвардською, так як була реалізована вперше в 1944 р. в Гарвардському
університеті на реальній обчислювальній машині, яка передувала появі ЕОМ.
Арифметико-логічний пристрій – призначений для виконання арифметичних
та логічних операцій над словами, що поступають з пам’яті ЕОМ, тобто над
операндами.
АЛП має в своєму складі декілька регістрів, що призначені для збереження
операндів в процесі виконання операцій, та функціональних схем, що необхідні для
виконання перетворень операндів при передаванні їх з одного регістра до іншого.
До числа основних операцій, що виконуються в АЛП, мають відношення:
1. Передавання операнда на регістр (приймання та видавання);
2. Зсув операнда на задану кількість розрядів (арифметичний, логічний,
циклічний);
3. Додавання до слова або віднімання від слова одиниці;
4. Порівняння операндів;
5. Порозрядні логічні операції;
6. Додавання двох операндів;
7. Перетворення кодів операндів, включаючи інверсію, доповнення,
дешифрування та інші;
8. Операції над числами із плаваючою комою.

Пристрої керування призначені для формування розподілених у часі та


просторі послідовності зовнішніх та внутрішніх керуючих сигналів, що
забезпечують вибірку та виконання команд.
Відомо три основних типи пристроїв керування:
· Мікропрограмні;
· Апаратні;
· Змішані.

В мікропрограмному пристрої керування кожному керуючому сигналу


відповідає визначене слово, що зберігається в спеціальній пам’яті ПЗП, й має назву
мікрокоманда.
Сукупність мікрокоманд називається мікропрограмою й відповідає сукупності
керуючих сигналів для виконання деяких операцій.
Керування відбувається шляхом читання з мікропрограмної пам’яті
мікрокоманд та їх перетворення в сигнали по керуючим ланцюгам. Зміна набору
команд, що виконує процесор, зводиться до зміни вмісту пам’яті мікропрограм й не
потребує зміни складу апаратних засобів ЕОМ.
В апаратних пристроях керування керуючі сигнали, що формуються
спеціальними апаратними засобами, тобто електронними схемами та зміна
структури послідовностей відповідних сигналів, що була закладена раніше, без
зміни в апаратних засобах неможлива.
В пристроях керування змішаного типу керування відбувається частиною
операцій за мікропрограмним способом, а іншою частиною – за апаратним.
Периферійні пристрої – призначені для перетворення форми представлення
інформації в процесі передавання даних. Вони бувають двох видів:
· Пристрої введення;
· Пристрої введення.

Пристрої введення слугують для перетворення вихідної інформації до форми,


що є зручною для сприйняття ЕОМ та введення її до запам’ятовуючих пристроїв.
До пристроїв введення інформації відносяться:
1. Введення інформації на основі клавіатури;
2. Автоматичні пристрої зчитування інформації;
3. Автоматичні пристрої введення інформації з зовнішнього середовища
(по лініям зв’язку, аналогові перетворювачі);
4. Пристрої мовного введення інформації.

Пристрої виведення призначені для перетворення результатів оброблення


інформації в ЕОМ до форми, що є зручною для її подальшого використання, тобто
виведення з ЕОМ.
Пристрої виведення інформації можна розділити на:
1. Пристрої виведення цифрової інформації на проміжний носії (перфострічка,
перфокарта);
2. Пристрій фіксування результатів оброблення у вигляді тексту, графіків,
зображень (графобудувальники, екрани різних типів, друкувальні пристрої);
3. Пристрої виведення інформації в зовнішнє середовище (цифро-аналогові
перетворювачі, по лініям зв’язку);
4. Пристрої мовного виведення.
СРС №30

Тема: Архітектурні принципи підвищення надійності ЕОМ і достовірності


обчислень. Загальні відомості про методи підвищення достовірності передачі та
обробки інформації

Підвищення надійності базується на принципі відвертання несправностей


шляхом зниження інтенсивності відмов і збоїв за рахунок застосування електронних
схем і компонентів з високим і надвисоким ступенем інтеграції, зниження рівня
завад, полегшених режимів, забезпечення теплових режимів їхньої роботи, а також
за рахунок вдосконалення засобів монтажу апаратури. Підвищення рівня готовності
передбачає зниження в певних межах впливу відмов і збоїв на роботу системи з
допомогою засобів контролю і корекції помилок, а також засобів автоматичного
відновлення обчислювального процесу після прояву несправності, включаючи
апаратну і програмну надлишковість, на основі якої реалізуються різноманітні
варіанти стійкої до відмови архітектури. Підвищення готовності є засобом боротьби
за зниження часу простою системи. Основні експлуатаційні характеристики системи
істотно залежать від зручності її обслуговування, зокрема від ремонтопридатності,
контролепридатності і т. д.
В останні роки в літературі з обчислювальної техніки все частіше вживається
термін "системи високої готовності" (High Availability Systems). Всі типи систем
високої готовності орієнтовані на мінімізацію часу простою. Є два типи часу
простою комп'ютера: плановий і неплановий. Плановий час простою зазвичай
включає час, прийнятий для проведення робіт по модернізації системи і для її
обслуговування. Неплановий час простою є результатом відмови системи або її
компоненти. Хоча системи високої готовності, можливо, більше асоціюються з
мінімізацією непланових простоїв, вони виявляються також корисними для
зменшення планового часу простою.
Існує декілька типів систем високої готовності, що відрізняються своїми
функціональними можливостями і вартістю. Слід відзначити, що висока готовність
не дається безкоштовно. Вартість систем високої готовності набагато перевищує
вартість звичайних систем. Певно тому найбільше розповсюдження отримали
кластерні системи завдяки їх здатності забезпечити достатньо високий рівень
готовності при відносно низьких витратах. Термін "кластеризація" на сьогодні в
комп'ютерній промисловості має багато різноманітних значень. Точне визначення
могло б звучати так: "реалізація об'єднання машин, що представляється єдиним
цілим для операційної системи, системного програмного забезпечення, прикладних
програм і користувачів". Машини, кластеризовані таким способом, можуть
привідмові одного процесора дуже швидко перерозподілити роботу на інші
процесори всередині кластера. Це, можливо, найважливіше завдання багатьох
постачальників систем високої готовності.
Першою концепцію кластерної системи анонсувала компанія DEC,
визначивши її як групу об'єднаних між собою комп'ютерів, що представляють собою
єдиний вузол обробки інформації. По суті кластер цієї компанії був слабко зв'язаною
багатомашинною системою з спільною зовнішньою пам'яттю, що забезпечує єдиний
механізм керування і адміністрування.
Робота будь-якої кластерної системи визначається двома головними
компонентами: високошвидкісним механізмом зв'язку процесорів між собою і
системним програмним забезпеченням, що надає клієнтам прозорий доступ до
системного сервісу.
В даний час широке розповсюдження отримала технологія паралельних баз
даних. Ця технологія дозволяє великій кількості процесорів поділяти доступ до
єдиної бази даних. Розподіл завдань між процесорними ресурсами і паралельне їх
виконання дозволяє досягнути вищого рівня пропускної спроможності транзакцій,
підтримувати більше число одночасно працюючих користувачів і прискорити
виконання складних запитів. Для вирішення цих завдань використовується
архітектура зі спільними (розподіленими) дисками. Це типовий випадок побудови
кластерної системи. Ця архітектура підтримує єдину базу даних при роботі з
декількома комп'ютерами, об'єднаними в кластер (зазвичай такі комп'ютери
називаються вузлами кластера), кожний з яких працює під керуванням своєї копії
операційної системи. В таких системах всі вузли поділяють доступ до загальних
дисків, на яких власне і розміщується єдина база даних. Продуктивність таких
систем може збільшуватися як шляхом нарощування числа процесорів і ємності
основної пам'яті в кожному вузлі кластера, так і шляхом збільшення кількості самих
вузлів. У випадку відмови одного з таких вузлів, вузли, що залишилися, можуть
взяти на себе завдання, що виконувалися на вузлі, який відмовив, не зупиняючи
загальний процес роботи з базою даних. Оскільки логічно в кожному вузлі системи
є образ бази даних, доступ до неї буде забезпечуватися до тих пір, доки в системі є
принаймні один справний вузол.
Суперкомп’ютери
До класу суперкомп'ютерів належать комп'ютери, що мають максимальну в
даний час продуктивність, а також максимальну ємність основної та зовнішньої
пам'яті. Вони асоціюються з великими розмірами, великими завданнями, гранично
високими характеристиками. Швидкий розвиток комп'ютерної індустрії призводить
до відносності даного поняття. Суперкомп'ютер десятирічної давності сьогодні під
це визначення вже не потрапляє. Наприклад, продуктивність персональних
комп'ютерів, що використовують Pentium-II/300MHz, є близькою до продуктивності
суперкомп'ютерів середини 70-х років, проте за сьогоднішніми мірками
суперкомп'ютерами не є ні ті, ні інші.
Нижче подано декілька прикладів, що показують основні характеристики
комп'ютерів цього класу, які використовуються в даний час. CRAY Т932, векторно-
конвеєрний комп'ютер фірми CRAY Research Inc. (на сьогодні це є підрозділ Silicon
Graphics Inc.), уперше випущений у 1996 році. Максимальна продуктивність одного
процесора дорівнює майже 2 млрд операцій за секунду, основна пам'ять
нарощується до 8 ГБ, дисковий простір до 256000 ГБ (тобто 256Т6). Комп'ютер
максимальній конфігурації вміщує 32 процесори, що працюють із загальною
пам'яттю, ТОМУ максимальна продуктивність всієї комп'ютерної системи складає
більше 60 млрд операцій за секунду.
IBM 51 1 матричний паралельний комп'ютер фірми IBM. Побудований на
основі стандартних процесорів PowerPC 604е або POWER2 SC, сполучених між
собою через високошвидкіскпй комутатор, причому кожний має свою локальну
основну пам'ять і дискову підсистему. Характеристики цих процесорів відомі й
особливого подиву не викликають, проте в рамках однієї системи SP2 їх може бути
об'єднано дуже багато. Зокрема, максимальна система, встановлена в Pacific
Northwest National Laboratory (Richland, USA), вміщує 512 процесорів. Виходячи з
числа процесорів можна уявити сумарну потужність всієї системи.
HP Exemplar, комп'ютер із кластерною архітектурою від Hewlett-Packard Inc.
Зокрема, модель V2250 (клас V) побудована на основі мікропроцесора РА-8200, що
працює з тактовою частотою 240 МГц. В рамках одного вузла зі спільною основною
пам'яттю до 16 ГБ можна об'єднати до 16 процесорів. У свою чергу вузли в рамках
однієї комп'ютерної системи з'єднуються між собою через високошвидкісні канали
передачі даних.
Суперкомп'ютер ASCI RED, результат виконання програми Accelerated
Strategic Computing Initiative. Побудований на замовлення Міністерства енергетики
США, він об'єднує 9152 процесори Pentium Pro, має 600 ГБ сумарної основної
пам'яті та загальну продуктивність 1800 мільярдів операцій за секунду.
Найпотужнішим на сьогодні комп'ютером є суперкомп'ютер фірми IBM Blue
Gene/L (рис. 1.19), який має 131 072 процесорних вузлів та продуктивність 280.6
TFLOPS (1012 FLOPS). Кожен вузол містить процесор PowerPC 440 із 512 МБ
локальної пам'яті.
В 2006 році був уведений в експлуатацію суперкомп'ютер MDGRAPE-3, який
досяг продуктивності 1 PFLOPS (1015 FLOPS), однак його не відносять до
універсальних суперкомп'ютерів, оскільки він є орієнтованим на виконання задач
молекулярної динаміки.
СРС №31

Тема: Загальна характеристика 8-розрядних мікропроцесорів. Архітектура 8-


розрядних мікропроцесорів

8-розрядні мікропроцесори і МП комплекти, такі як МПК КР580, МП Z80 та


К1821МВ85 сьогодні досить широко використовуються в периферійних керуючих
пристроях, системах технічного обслуговування та діагностики вузлів зв’язку.
Особливістю мікропроцесорного комплекту КР580 є його універсальність.
Хоч сам процесор КР580ВМ80 у нових розробках не використовується, більшість
інтерфейсних БІС цього комплекту (або їх найближчих аналогів) використовуються
в сучасних пристроях, вже з іншими процесорами. Вивчення комплекту доцільно
починати з центрального процесора.
Структурна схема МП КР580 складається з АЛП, блока регістрів загального
призначення, схеми керування та синхронізації та буферів шин.
Особистістю блока регістрів КР580 є функціональна спеціалізація його
окремих елементів.
PC - регістр лічильника команд використовується для зберiгання адреси
елемента пам’яті, з якого вибиратиметься наступна команда. При виконанні лінійної
програми вміст лічильника команд послідовно збільшується. При виконанні команд
переходів або викликів підпрограм лічильник команд встановлюється відповідно з
вказаною адресою.
SP - регістр стека використовується для указання на текучу вершину стеку, він
використовується для організації повернення з підпрограм і для часового зберігання
в ОЗП вмісту регістрових пар (наприклад параметрів підпрограми).
Регістри загального призначення - В,С,D,E. Програмісту надана можливість
запису і читання інформації з цих регістрів, а також видачі цієї інформації на шину
даних.
HL - регістр указника адреси може використовуватись для тієї ж мети, що і
регістри загального призначення, а може використовуватись для формування адреси
в командах з непрямою адресацією.
Регістр ознак (прапорців) уявляє собою набір тригерів, які показують
результат останньої операції, що виконав АЛП. За допомогою регістра F
реалізується організація умовних переходів у МП КР580. В цьому регістрі є п’ять
умовних ознак, які змінюють своє значення в результаті виконання різних
арифметичних і логічних команд: ознаки нуля Z, знаку S, парності Р, переносу CY і
допоміжного переносу AC. Ознаку встановлено, якщо біт дорівнює 1, ознаку
скинуто, якщо він дорівнює 0. Ознака нуля встановлюється, якщо результат операції
дорівнює 0, скидається, якщо результат не дорівнює 0.

Система команд мікропроцесорів


Найнижчим рівнем, який дозволяє описувати роботу цифрових пристроїв —
це рівні логічних станів їх входів та виходів — таблиці станів.
Наступним рівнем є спосіб описання — це мова значень вхідних та вихідних
сигналів, що складають мову мікрокоманд. Сукупність адрес та керуючих сигналів
називаються мікрокомандою.
Третій рівень формалізації описання роботи мікропроцесора — це мова
команд — тобто строга послідовність мікрокоманд, що записується в пам'яті
мікропроцесорів. Тобто, команда, це слово, або набір слів, які дешифруються в
послідовність мікрокоманд. Звідси витікає, що будь-який процесор має строго
фіксований і обмежений набір команд, який є характерним для данного процесора.
Будь-яка мікрокоманда характеризується своїм форматом. Під форматом
мікрокоманди розуміється її протяжність та призначення кожного біта або їх групи.
Команди, також мають свій фіксований формат. (Протяжність мікрокоманди — це
стандартна для данного процесора кількість біт в слові). В залежності від
протяжності команди, вона може складатися з одного, двох, та трьох слів.
Формат пам'яті мікропоцесорної системи також тісно пов'язаний з довжиною
слова. Тому при зберіганні таких команд відповідно використовується адресний
простір та пам'ять. Якщо, наприклад, команда складається з трьох слів, а
використовується з послідовною адресацією, то для зберігання такої команди
використовуються три послідовні адреси. Для того, щоб таку команду вибрати з
пам'яті, необхідно мати спеціальні засоби, щоб забезпечити її представлення як
єдине ціле.
Структура команд повністю залежить від структури мікропроцесора, але
незалежно від типу процесора прийнято вважати, що однослівні команди повністю
складаютья з коду операції. Двослівні команди складаються з коду операції та
однослівного операнда. Трислівні команди також складаються з двох частин: перша
частина — код операції, а друга — адреса, або двослівний операнд.
Типи команд, що використовуються, тісно пов'язані з внутрішньою
організацією та алгоритмом функціювання мікропрограмного автомата процесора,
та внутрішньою системою синхронізації. Мікропроцесорна система функціонує
синхронно з частотою тактових сигналів зовнішнього генератора. В залежності від
типу мікропроцесорів використовується одно- або двохфазна синхронізація.
Незалежно від цього в мікропроцесорних системах використовуються триваліші
інтервали часу, ніж тактовий інтервал зовнішнього генератора. Одним з таких
інтервалів є машинний цикл — це інтервал, протягом якого мікропроцесор
звертається до пам'яті або пристрою вводу-виводу. Машинний цикл (МЦ) складає
тільки частину циклу команди. На початку кожного МЦ на одному з виходів
мікропроцесора з'вляється сигнал синхронізації, він передається по лінії шини
керування в пам'ять або пристрої вводу-виводу і «сповіщає» про початок нового
МЦ, в результаті чого досягається узгодження в часі зовнішніх пристроїв з роботою
мікропроцесора.
Цикл команди — це інтервал часу, необхідний для виборки з памєяті команди,
та її виконання. Він складається з 1-5 машинних циклів. Їхнє конкретне число
залежить від складності операції, яка виконується в данній команді і дорівнює числу
звернень мікропроцесора до пам'яті. Тривалість виконання команди визначається
кількістю тактів в циклі команди та тривалістю такту.
Протягом циклу команди, що ділиться на дві фази, робота мікропроцесора
виконується в такій послідовності. Пристрій керування задає початок чергового
циклу шляхом формування сигналу, по якому число, що знаходиться в лічильнику
команд, відправляється в буферний регістр адреси і через нього направляється для
дешифрації. Після приходу від мікропроцесору сигналу керування 'готовий' з
елемента пам'яті, що знаходиться по вказаній адресі, зчитується слово команди, яке
подається по шині даних в буферний регістр данних, а потім в пристрій керування,
де дешифрується з допомогою кода операції. Ця послідовність операцій називається
фазою виборки. За нею слідує виконавча фаза, в якій пристрій керування формує
послідовність сигналів, необхідних для виконання команди. За цей час число, що
знаходиться в лічильнику команд, збільшується на 1 (якщо довжина команди є 1) і
формується адреса команди, що стоїть слідом за виконуємою. Вона зберігається в
лічильнику до приходу сигналу, що задає початок чергового циклу команди.
Окрім адреси елемента в якому зберігається необхідний байт від
мікропроцесора до пам'ті поступає сигнал по шині керування, який визначає
характер операції — запис, або зчитування. Виконання вказаних операцій проходить
протягом інтервалу часу, що називається часом доступу. По закінченні цього
інтервалу від пам'яті в мікропроцесор подається сигнал готовності, який є сигналом
початку прийому, або, відповідно, передачі сигналів в пам'ять. До одержання
сигналу готовності мікропроцесор перебуває в стані очікування. Інтервал часу між
імпульсами звернення до зовнішніх пристроїв та одержання від них відповіді
називається циклом очікування.
Якщо, наприклад, цикл команди розглядати відповідно до команди вводу
данних, то перші два машинних цикли будуть відноситись до фази виборки, а
третій — до фази виконання команди. В усіх машинних циклах передається адреса,
але в кожному циклі адреса належить своєму адресату, в першому — це адреса
елемента, де здерігається код операції, в другому — адреса порта, що здерігає байт
данних, в третьому — адреса акумулятора мікропроцесора, куди повинен поступити
байт данних з порта.

Типова структура 8-розрядного однокристального мікропроцесора


Типова структура 8-розрядного однокристального МП Intel 8080 представлена
на рисунку 1.

Рис.1 – Типова структура 8-розрядного МП

Як видно зі схеми МП складається з таких основних чотирьох частин: 1)


арифметико-логічного пристрою (АЛП); 2) множини регістрів; 3) пристрою
керування; 4) 8-розрядної внутрішньої шини даних (ВШД)
АЛП призначений для виконання однієї з головних функцій МП - обробки
даних. АЛП являє собою комбінаційну схему, яка виконує арифметичні чи логічні
операції - додавання, віднімання, І, АБО, зсув і т.д. Він має два входи та один вихід,
через які вводяться і виводяться дані. Перед входами АЛП розташовані буферні
регістри (БР), які можуть зберігати для АЛП по одному слову даних. Буферні
регістри приймають дані з ВШД, крім того один буферний регістр ще має
можливість приймати дані із спеціального регістра, що зветься акумулятором (А).
Після виконання операції дані (результат) пересилаються з АЛП через його вихід в
акумулятор А.
В залежності від виду операції АЛП оперує з одним або двома словами. При
маніпуляціях з одним словом це слово вибирається з акумулятора А.
Регістри МП приймають участь в реалізації основних функцій. Їх можна
розділити на регістри загального (РЗП) та спеціального призначення. РЗП можуть
використовуватися програмістом за його розсудом. До них відносяться 8-розрядні
регістри B, C, D, E, H, L. До регістрів спеціального призначення належать -
A, F, PK, БА, БД, ІР/PC, SP.
Акумулятор (А) - це регістр, призначений для зберігання даних, що надходять
з АЛП або з ВШД. Він є основним регістром МП при різних маніпуляціях з даними,
бо для виконання будь-якої операції над ними їх перш за все необхідно помістити в
акумулятор. Розрядність акумулятора відповідає довжині слова МП. Інколи
розрядність акумулятора може бути подвійної довжини, або МП може мати кілька
акумуляторів. Напр.
важливих регістрів, у якому зберігається адреса команди, що виконується.
Щоб пристрій міг виконувати свої функції, команди в МП повинні поступати з
пам'яті в строго визначеному порядку. Цей порядок задає лічильник команд.
Розрядність лічильника команд РС часто більша ніж розрядність самого МП. Так у
8-розрядних МП, що можуть адресуватися до пам'яті 64 Кбайт, число розрядів РС
дорівнює 16.
Лічильник команд інколи ще називають вказівником команд. Він з'єднаний
через мультиплексор з ВШД МП. Тому в принципі він може одержувати адреси
команд з будь-якого вузла МП,під'єднаного до ВШД.
Коли МП тільки починає працювати, то по сигналу початкової
установки RESET в лічильник команд РС завантажується заздалегідь визначена
адреса (звичайно це адреса 0000Н), і виконання програми починається з цієї адреси.
Після читання першої команди програми за вказаною адресою МП
автоматично дає приріст лічильнику команд РС. Цей приріст РС одержує в той
момент, коли МП приступив до виконання команди. Тобто з цього моменту РС
вказує адресу наступної команди. Лічильник команд може відступати від такої
послідовності, коли зустрічається команда безумовного переходу JMPADDR або
коли є необхідність виконати підпрограму (команда CALL ADDR) або такі ж
команди умовного переходу чи виклику підпрограми та в результаті виконання
деяких інших команд. При цьому адреса переходу вказується в самій команді і з неї
завантажується в лічильник команд.
Буферний регістр адресу (БА). При кожному звертанні до пам'яті або порту
вводу-виводу БА вказує адресу, яка буде використана МП. Вихід регістра адреси
називають шиною адреси. Найчастіше БА завантажується від РС. Але інколи може
завантажуватися і від інших елементів, наприклад, від регістрових пар, які можуть
використовуватися як вказівники адрес комірок пам'яті. Протягом часу виймання
команди з пам'яті БА і РС мають однаковий вміст, тобто БА вказує місце
знаходження команди, що виймається з пам'яті. Після декодування команди РС
одержує приріст, а вміст БА не змінюється.
Деякі команди надають можливість змінювати вміст БА шляхом виконання
обчислень.
Оскільки БА підключений до ВШД МП, то він може завантажуватися від
різних джерел. Більшість МП мають команди, що дозволяють завантажувати БА
вмістом РС, РЗП або якої-небудь області пам'яті.
Звичайно в МП розрядність РС і БА однакова.
Регістр команд (РК) призначений для зберігання коду команди, яка
виконується. РК з'єднаний з ВШД і може лише приймати дані. З виходу РК код
команди подається на дешифратор команд (ДШК), який команду дешифрує і
повідомляє МП, що йому робити для реалізації команди.
Розрядність РК співпадає з розрядністю МП.
Мультиплексом (М) - пристрій, що з'єднує один з РЗП з ВШД.
Регістр стану або прапорців F призначений для зберігання деяких перевірок,
що здійснюються в процесі виконання програми. Тобто при виконанні операції в
АЛП розряди регістра Fможуть приймати те чи інше значення, яке і є результатом
здійснюваних перевірок. Зберігання результатів перевірок в регістрі F дозволяє
реалізувати програми, що містять умовні переходи (тобто порушувати задану
послідовність виконання команд).
СРС №32

Тема: Загальна характеристика 16-розрядних мікропроцесорів. Архітектура 16-


розрядних мікропроцесорів

Загальна характеристика мікропроцесорів фірми Intel


Загальні принципи будови мікропроцесорів фірми Intel відображає процесор з
архітектурою Pentium. Вперше це покоління було представлене корпорацією Intel в
жовтні 1992 р., але комерційне освоєння почалося з березня 1993. Процесори
Pentium перших версій містили 32-розрядний регістровий файл, регістр загального
призначення (РЗП) і 32-розрядну шину адреси. Зовнішня шина даних 64-розрядна і
утворюється внутрішнім мультиплексуванням шин даних процесора. Процесор
підтримує звертання до 4 Гбайт фізичного адресного простору Він містить
вбудований блок співпроцесора з плаваючою точкою (FPU), блок управління і
стабілізації напруження живлення (SMM, system management mode). Блок FPU
доопрацьований для виконання операцій з плаваючою точкою за один такт
синхронізації і має в своєму розпорядженні множник, дільник і суматор. Блок SMM
дозволяє CPU працювати на пониженому напруженні живлення 2,9 і 2,5В.
В кристал процесора вбудована кэш-пам'ять L1, побудована по розділеній
гарвардской архітектурі. По 8 Кбайт відведено окремо для секції команд і даних.
Така організація розділеної кэш-пам'яті дозволяє уникнути конфліктів, пов'язаних з
доступом до команд і даних на різних стадіях конвейєрної обробки. Внутрішня
спеціалізована шина кэш-пам'яті працює на 2/3 внутрішній швидкості процесора.
Організація цієї пам'яті 2-х портова, множинно-асоціативна, із зворотним записом.
Процесор містить логіку синхронізації кэш-пам'яті для роботи в багатопроцессорной
конфігурації.
В процесор вмонтований контроллер переривань (APIC, advanced peripheral
interrupt controller), що програмується, що дозволяє створювати багатопроцесорні
системи з кількістю процесорів до 256.
Процесори четвертого покоління мають в своєму розпорядженні єдиний
конвейєр і називаються скалярними. Одночасно на рівень декодування цього
процесора може поступити тільки одна команда.
В деяких процесорах п'ять рівнів конвейєра діляться на багатоступінчаті
операції, що дозволяє знизити складність кожного рівня. При цьому, на кожному
рівні конвейєра скорочується число логічних операцій, завдяки чому легше перейти
з рівня на рівень і підвищувати внутрішньопроцесорну тактову частоту. Така
організація обчислень називається суперконвейєрною, вона характерна для
мікропроцесорів клона Р5, а саме, AMD K5, NexGen NX586.
У базовій моделі Pentium задіяна інша методика обробки команд Він містить
два конвейєри, так званих u-pipe і v-pipe. В першому з них (первинному)
виконуються цілочисельні операції і команди з плаваючою точкою, а у повторному
прості цілочисельні операції і певний тип команд з плаваючою точкою. Процеси в
цих двох конвейєрах протікають незалежно один від одного одночасно з двома
інструкціями. Такі процесори, що містять декілька незалежно працюючих
конвейєрів, називаються суперскалярними (superscalar).
Процесор Pentium є двопотоковим по числу конвейєрів, але існують і
чотирипотокові, наприклад, AMD K5. На одночасне виконання двох команд
накладені деякі обмеження, пов'язані з комбінаціями команд і взаємозалежністю
результатів. Всі команди, що поступають в конвейєри на обробку, повинні покидати
їх точно в такому ж порядку, в якому вони на них і поступили Такий метод обробки
називається впорядкованим надходженням (in-order issue), обробкою і
впорядкованим завершенням (in-order completion) Якщо команда не може бути
завершена в одному конвейєрі, то зупиняється і інший, що дещо знижує
ефективність роботи процесора з точки зору продуктивності.
Існує і інший підхід неврегульоване завершення (out-of-order completion),
характерний для процесорів AMD K5, Cyrix Ml, NexGen Nx586, що дозволяє одному
з конвейєрів завершувати операцію навіть при «заторі» в іншому. У цьому випадку
процесор може змінювати черговість надходження на виконання команд,
обробляючи їх не в тому порядку в якому вони слідують в програмі, т. е.
обробляючи готові до виконання і відкладаючи на більш пізній термін ті з команд,
які не можуть бути виконані негайно, що називається неврегульованою обробкою
(out-of order issue). Для реалізації подібного процесу в процесорі організуються
додаткові апаратні вузли: буфери, вікна команд, накопичувачі команд.
Для підвищення продуктивності процесора широко застосовуються методи
обходу (data bypassing) і просування даних (data forwarding). При обходах
результати виконання однієї команди відразу пересилаються наступною, так що
виключаються затримки на модифікацію і повторне читання з регістра процесора
або ОЗП. Просування даних дозволяє процесору виконувати деякі команди
паралельно, негайно передаючи результати однієї з них в іншу, якою вони не будуть
потрібні до більш пізнього рівня конвейєрної обробки.
Всередині мікропрограм CISC-команд, що виконуються існує безліч переходів
і розгалужень. Перехід - це зміна послідовності виконання команди, яка може бути
пов'язана з додатковою інформацією (ознакою стану або умовою). Такий перехід
називається умовним. Існують і безумовні переходи, явно обумовлені логікою
мікропрограм. Як ті, так і інші переходи займають при виконанні команд певний
час.
У процесорі Pentium застосовується спеціальний буфер прогнозування
розгалужень (ВТВ, branch target buffer) на 256 позицій, що відстежує і що зберігає
дані про результати 256 останніх розгалужень. Буфер – це місце для зберігання якої-
небудь інформації, частіше за все буфери організовуються для вирівнювання
швидкостей між двома, різними по швидкодії пристроями.
Орієнуючись на цю інформацію процесор намагається передбачити станеться
або не станеться перехід. Зустрівши команду умовного переходу (по коду операції
поля команди) процесор робить припущення про шлях розгалуження, яке може бути
істинним (true) або помилковим (false). Процесор починає виконання команди не
спочатку, а з передбаченої адреси мікрокоманди переходу у відповідності зі своїм
припущенням Може забезпечуватися декілька рівнів прогнозування До остаточної
ствердної відповіді на питання про перехід процесор не здійснює ніяких
модифікацій своїх регістрів і ОЗП. У разі неправильного припущення всі установки
команди відміняються, а буфер очищається, що помітно знижує продуктивність
процесора.
Всі процесори виконані по дуже енергоекономічній технології BiCMOS
(Bipolar CMOS), однак виділення тепла цим приладом дуже велике. Як правило,
процесори Pentium розраховуються для роботи при робочій температурі до 85°С,
при цьому нагрів корпусу без ефективного тепловідводу досягає температури понад
180°С.
При розробці і впровадженні продуктів, призначеній для роботи в середовищі
з процесором Pentium подальший розвиток отримала система OverDrive. Pentium
OverDrive містить додаткові блоки множення частоти, фільтр напруження, блок
пониження напруження живлення з 5,0В до 3,3В, посилена система тепловідводу
радіатором і вентилятором.
Всі виробники системних плат постачають свої вироби, враховуючи
необхідність подальшої модернізації і установки більш швидкісних процесорів.
Частіше за все на системній платі можна зустріти стандартні гніздові панелі (LIF,
low-insertion-force) або настановні панелі з нульовим зусиллям (ZIF, zero-insertion-
force).

Архітектура сучасних мікропроцесорів фірми Intel


Сучасні мікропроцесори фірми Intel основані на архітектурі P6 і мають ряд
особливостей та відмінностей від попереднього покоління.
Конвейєр процесорів сімейства Р6 істотно відрізняється від конвейєра
процесорів сімейства Р5. У Р6 реалізований принципово новий підхід до виконання
команд. Додано ряд нових прийомів для запобігання заторам конвейєра, наприклад
позачергове виконання команд (out-of-order-execution), перейменування регістрів.
Конвейєр Р6 складається з трьох частин:
1. In-Order Issue Front End. На цьому етапі відбувається вибірка команд з
пам'яті і декодування в мікрооперації.
2. Out-of-Order Core. На цьому етапі процесор виконує мікрооперації.
Виконання може відбуватися без черги.
3. In-Order Retirement unit. На цьому етапі відбувається вилучення команд з
конвейєра.

Р6 містить 3 паралельно працюючих декодера. Перший декодер здатний


декодувати макрокоманди, що складаються з чотирьох і більше мікрооперацій.
Складні макрокоманди (більш чотирьох мікрооперацій) вимагають більше ніж один
такт для декодування. Другий і третій декодери можуть декодувати макрокоманди,
що складаються тільки з однієї мікрооперації. Таким чином, при складанні коду
потрібно дотримуватися послідовності 4-1-1 (перша макрокоманда складається з
чотирьох мікрооперацій, а інші дві - з однієї мікрооперації). Таке упорядкування
макрокоманд дозволить досягнути максимальної продуктивності декодерів .
У кожному такті декодери можуть проводити до шести мікрооперацій, які
поступають в спеціальну чергу. З черги до трьох мікрооперацій поступає на стадію
(RAT) Register Allocation Table. Тут відбувається переіменування регістрів і
резервування місць (регістрів) в (ROB)- Re-order buffer. Перейменування регістрів
дозволяє нейтралізувати помилкову взаємозалежність.
Далі мікрооперації записуються в (ROB). ROB організований у вигляді
кільцевого буфера на 40 місць (40 програмно-прозорих регістрів, що служать для
перейменування). Мікрооперації поступають в (ROB) в порядку черги і
віддаляються в порядку черги, а виконуватися мікрооперації можуть без черги по
мірі готовності початкових даних і доступності виконавчих пристроїв процесора. До
трьох мікрооперацій можуть передаватися на виконання в кожному такті. В
залежності від функції, що виконується, мікрооперація прямує в один з п'яти портів
(конвейєрів). До кожного порту прикріплені свої виконавчі пристрої. Після
виконання мікрооперація повертається зворотно в (ROB), де чекає вилучення. Після
того як результат мікрооперації був записаний в (ROB), він (результат) стає
доступним іншим мікроопераціям. Оскільки процесор виконує команди без черги,
то важливим моментом є забезпечення достатнього числа мікрооперацій, готових до
виконання. Це може бути досягнуто шляхом швидкого декодування і оптимізації
прогнозу розгалуження.
У кожному такті можуть віддалятися до трьох мікрооперацій. При видаленні
тимчасові результати, що зберігаються в (ROB), записуються у відповідні програмні
регістри або пам'ять. Видалення відбувається в порядку черги, що забезпечує
правильне ведення контексту.
Прогнозу розгалуження варто виділити особливу увагу, оскільки невірний
прогноз в процесорах Р6 обходиться дуже дорого, набагато дорожче, ніж в Р5.
Затримка при помилковому прогнозі складає мінімум 12 тактів, але може бути і
більше.
Коли команда переходу після виконання повертається в ROB, процесор
дізнається, чи правильно був зроблений прогноз. Якщо «так», то робота конвейєра
продовжується як звичайно. Якщо «ні», то процесор забороняє надходження нових
команд в (ROB), скидає команди, що знаходяться на стадіях від початку конвейєра
до (RAT) включно, оскільки вони відповідають невірній гілці програми. Потім
процесор продовжує виконувати команди, що залишилися в (ROB) до видалення
команди переходу, що спричинила неправильний прогноз. Після чого процесор
скидає команди, що встигли проникнути в (ROB) після команди переходу, і
дозволяє надходження в (ROB) нових команд. Якщо такі ситуації будуть
зустрічатися досить часто, то продуктивність процесора різко знизиться.
Для динамічного прогнозу розгалуження використовується пристрій, званий
Branch Target Buffer - ВТВ. Він являє собою кеш-пам'ять, в якій зберігається
інформація про зроблені раніше переходи. Коли команда вибирається з пам'яті, її
адреса транслюється через ВТВ і ВТВ видає пристрою передвиборку адресу
наступної команди.
ВТВ працює за наступним принципом:
1. якщо адреса команди відсутня в ВТВ, то передвиборка продовжується далі з
наступної адреси;
2. якщо адреса команди знаходиться в ВТВ і перехід передбачається як
зроблений, то це вимагає одного зайвого такту;
ВТВ зберігає 4-бітну історію переходів.
Переходи, які відсутні в ВТВ, передбачаються з використанням статичного
алгоритму прогнозу розгалуження:
- безумовні переходи передбачаються як зроблені;
- умовні переходи назад передбачаються як зроблені;
- умовні переходи уперед передбачаються як не зроблені.
Затримка на статичний прогноз становить 6 тактів.

За допомогою ВТВ можна успішно передбачати один перехід, якщо він має
закономірність виконання, що регулярно повторюється. Наприклад, буде коректно
передбачений умовний перехід, який виконується при кожній парній ітерації і не
виконується при кожній непарній ітерації. Переходи по покажчику, значення якого
не є постійним для переважної більшості випадків, а також умовні переходи, що не
мають закономірності виконання є непередбачуваними або погано
передбачуваними. Якщо такі переходи зустрічаються всередині циклів, що часто
повторюються, то це може істотно позначитися на продуктивності.
Якщо процесор зчитує дані з 32-розрядного регістру (наприклад, ЕАХ) відразу
після того, як був зроблений запис у фрагмент цього регістра (наприклад, AL, АН,
АХ), мікрооперація зчитання не зможе проникнути в (ROB) до того як
мікрооперація запису не виконається і не буде видалена з (ROB). Це займає мінімум
7 тактів.
Затримка пов'язана з тим, що після повернення в (ROB) результату
мікрооперації, яка записує в регістр, (ROB) буде міститися лише фрагмент регістра,
а мікроперації, яка прочитує з регістра, потрібен цілий регістр.
Процесор не може збирати один регістр по частинах з різних місць.
Мікрооперація на стадії (RAT) буде чекати, поки з (ROB) не будуть видалені
мікрооперації.
Мікропроцесор Pentium ІІІ побудований на архітектурі P6 і має ряд
нововведень. Він виготовляється по 0.25-мікронній технології, має 32 Кб кеша L1 та
512 Кб кеша L2. Він розрахований на роботу на частоті 100 MHz, кеш другого рівня
працює на половині тактової частоти. Серед сосбливостей його архітектури -
динамічне виконання команд і технологія потокової пам’яті, яка дозволяє
покращити систему вводу/виводу з комбінованим записом (WC) та використовувати
інструкції попередньої виборки і потокового запам’ятовування. В Pentium ІІІ
з’явилось вісім нових регістрів з прямим доступом, які здатні зберігати чотири
числа ординарної точності (всього 128 розрядів).
Потокові розширення SIMD (Single Instruction Multiply Data, відомі раніше як KNI-
Katmai New Instructions) добавили 50 інструкцій для операції (ординарної точності)
над числами з плаваючою точкою, що дозволяє отримувати до чотирьох результатів
за один цикл процесора. З’явились також 12 нових мультимедійних інструкцій (в
додаток до попередньої технології MMX) і 8 інструкцій кешування.
СРС №33

Тема: Загальна характеристика арифметичних співпроцесорів. Архітектура


арифметичних співпроцесорів

Математичний співпроцесор запускається центральним процесором. Після


запуску він виконує всі обрахунки самостійно і паралельно з роботою центрального
процесора. Якщо центральний процесор направляє наступну команду
співпроцесору в той момент, коли співпроцесор ще не закінчив виконання
попередньої команди, центральний процесор переводиться в стан очікування. Якщо
ж співпроцесор не зайнятий, центральний процесор, направивши команду
співпроцесору, продовжує свою роботу, не очікуючи завершення обрахунку.
Послідовне розташування команд співпроцесора і центрального процесора в коді
програми створюють ілюзію послідовного їх виконання. Простіше кажучи можлива
така ситуація, що коли центральний процесор звернеться до комірки пам’яті, куди
арифметичний співпроцесор повинен був записати результат своїх обчислень і якщо
співпроцесор ще не закінчив обрахунки то результату там не буде. Однак є
спеціальні засоби синхронізації (команда FWAIT).

Префікс команд та адресація операндів


Команди які призначенні для виконання співпроцесором, записуються в
програмі як звичайні машинні команди центрального процесора, але всі вони
починаються з байта, який відповідає команді центрального процесора ESC.
Зустрівши таку команду, процесор передає її співпроцесору, а сам продовжує
виконання програми з наступної команди.
Асемблерна мнемоніка всіх команд співпроцесора починається з букви F,
наприклад: FADD, FDIV, FSUB и так далі. Команди співпроцесора можуть
адресувати операнди, аналогічно звичайним командам центрального процесора.
Операндами можуть бути або дані, які розміщуються в основній пам’яті
комп’ютера, або внутрішні регістри співпроцесора.
Для команд арифметичного співпроцесора можливі всі види адресації даних,
які використовуються центральним процесором.
Формати даних
Математичний співпроцесор здатний працювати з 7-ми різними типами даних:
1. 3 типи з рухомою комою, за допомогою яких представляють дійсні числа
(стандарт IEEE 754);
2. 3 цілі двійкові типи;
3. 1 цілий десятковий (двійково-десятковий упакований) тип.

В програмній моделі співпроцесора (див. рис. 1) можна виділити три групи


регістрів:
Рис.1 – Програмна модель співпроцесора

1. Вісім регістрів r0,.,r7 які складають стек співпроцесора. Розмірність кожного


регістра 80 байтів.
2. Три службових регістра:
1. регістр стану співпроцесора swr (Status Word Register . регістр слова стану)
– відображає інформація про поточний стан співпроцесора. Поля swr
дозволяють визначити, який регістр є вершиною стека, які винятки виникли
після останньої виконаної команди, які особливості виконання останньої
команди (аналог регістра прапорів);
2. керуючий регістр співпроцесора cwr (Control Word Registr, регістр слова
керування) – керує режимами роботи співпроцесора. З допомогою полів у
цьому регістрі можна регулювати точність виконання обчислень, керувати
округленням, маскувати винятки;
3. регістр слова тегів (Tags Word Register, слова тегів) – використовується для
контролю за станом кожного з регістрів r0,.,r7. Команди співпроцесора
використовують цей регістр для визначення можливості запису значень у ці
регістри;
3. два регістри вказівників – даних dpr (Data Point Register) і команд ipr
(Instruction Point Register). Вони призначені для запам.ятовування інформації
про адрес команди, що викликала виняткову ситуацію і адреса її операнд.

Розглянемо загальну логіку роботи співпроцесора і більш детально


охарактеризуємо регістри.
Регістровий стек співпроцесора організований по принципу кільця. Це
значить, що серед всіх його регістрів, нема такого, який є вершиною стека. Всі
регістри є одинакові і рівноправні.
Вершина стека є, але вона плаваюча. Контроль поточної вершини
здійснюється апаратно з допомогою 3-бітного поля top регістра swr (рис. 14.2). В
полі top фіксується номер регістра стека 0...7 (r0.r7), який в даний момент є
вершиною стека.
Команди співпроцесора не оперують фізичними номерами регістрів стека
r0,.r7. Замість цього вони використовують логічні номери цих регістрів st(0).st(7). З
допомогою логічних номерів реалізується відносна адресація регістрів стека
співпроцесора.
СРС №34

Тема: Загальна характеристика 32-розрядних мікропроцесорів CISC.


Архітектура 32-розрядних мікропроцесорів CISC, використання дискрипторів

Cтруктури різних типів МП може істотно різнитися, але з погляду користувача


найважливішими параметрами є архітектура, адресне простір пам'яті, розрядність
шини даних, швидкодія.
Архітектуру МП визначає розрядність слова внутрішньої шини даних МП.
Перші МП грунтувалися на 4-розрядній архітектурі. Перші ПЕОМ використовували
МП з 8-розрядної архітектурою, а сучасні МП засновані на МП із 16-го і 32-
розрядної архітектурою.
Мікропроцесори із чотирьох- і 8-розрядною архітектурою використовували
послідовний принцип виконання команд, у якому чергова операція починається
тільки після виконання попередньої. У деяких МП з 16-розрядною архітектурою
використовуються принципи паралельної роботи, коли він разом з виконанням
поточної команди виробляються попередня вибірка і збереження наступних команд.
У МП з 32-розрядною архітектурою використовується конвейерний метод
виконання команд, у якому кілька внутрішніх пристроїв МП працюють паралельно,
виробляючи одночасно обробку кількох послідовних команд програми.
Адресне простір пам'яті визначається розрядністю адресних регістрів і дресної
шини МП. У 8-розрядних МП адресні регістри зазвичай складаються з цих двох 8-
розрядних регістрів, створюючи 16-розрядну шину, адресующую 68 Кбайт пам'яті.
У 16-розрядних МП, зазвичай, використовуються 20-розрядні адресні
регістри, які адресують 1 Мбайт пам'яті. У 32-разрядных МП використовуються 24-
і 32-розрядні адресні регістри,які адресують від 16 Мбайт до запланованих 4 Гбайт
пам'яті.
Для вибірки команд та обміну даними з пам'яттю МП мають шину даних,
розрядність якої, зазвичай, збігаються з розрядністю внутрішньої шини даних,
обумовленою архітектурою МП. Проте задля спрощення зв'язки з зовнішнім
апаратурою зовнішня шина даних може мати розрядність меншу, ніж внутрішня
шина і регістри даних. Наприклад, деякі МП з 16-розрядною архітектурою мають 8-
розрядну зовнішню шину даних. Вони представляот собою спеціальні модифікації
звичайних 16 розрядних МП й володіють практично тієї ж обчислювальної
потужністю.
Однією з важливих параметрів МП є швидкодія обумовлений тактовою
частотою його роботи, що зазвичай задається внеш ними синхросигналами. Для
різних МП ця частота має межі 0,4...33 МГц. Виконання найпростіших команд
(наприклад, складання двох операндов із регістрів чи пересилання операндів в
регістрах МП) вимагає мінімально двох періодів тактових імпульсів (для вибірки
команди, і його виконання). Більше складні команди вимагають до виконання до 10
- 20 періодів тактових імпульсів. Якщо операнды перебувають над регістрах, а
пам'яті, додаткового часу витрачається вибірки операндов в регістри і запис
результату на згадку про.
Швидкість роботи МП визначається як тактовою частотою, а й набором його
команд, їх гнучкістю, розвинену систему переривань.
Структури, характеристики й архітектури деяких мікропроцесорів.
Микропроцессоры Alpha.
Технологічне рішення що сприяє підвищенню продуктивності процесора АХР
21064 , З'являються дві роздільні кеш - пам'яті для команд та об'єктивності даних по
8 Кбайт кожна. З іншого боку, у тому чіпі застосований метод передбачення
розгалуження ( Branch Prediction ), що дозволяє пророкувати можливі розгалуження
потоків конвеєрної лінії.
Основним примуществом цього процесора є його висока тактова частота,
забезпечувана особливої структурою процесора.
Микропроцессоры ARM.
МП містить АЛУ, сдвигатель, умножитель, двадцять сім 32- розрядних
регістрів.
У МП реалізований триступінчастий конвеєр (одна інструкція виконується,
друга -декодируется третя - зчитується у пам'яті).
Звернення до пам'яті відбувається лише командами зарузки і запам'ятовування
регістрів, забезпечують адресацію байта чи 32-разрядного слова.
МП може працювати у чотирьох режимах (Про - користувача, 1 - переривання.
2 - швидкого переривання. 3 - супервізора), кожен із яких може вживати свої власні
32-разрядные регістри.
Режим Номери регістрів
0 0 - 15
1 10 - 14
2 13 , 14
3 13 , 14
Усі команди МП мають довжину 32 розряду.
Микропроцессор АМ 29000 фірми АМD.
МП містить три пристрої: попередньої вибірки, виконавче, управління
пам'яттю.
Пристрій виконання включає у собі регистровый файл, у якому 64 регистрас
фіксованим адресою (глобальні регістри) і 128 регістрів зі змінним адресою
(локальні регістри).
Глобальні регістри призначаються статично компілятором чи програмістом.
Вони можна використовувати розміщувати даних ОС, як-от базових адрес сторінок.
Локальні регістри виконують функції регістрів стека для зберігання
параметрів процедури звернення до подпрограмме. Усі команди мають фіксований
32-разрядный формат, який забезпечує спрощення організації конвеєра, схеми
вибірки і методи обробки команди, і ін.
СРС №35

Тема: Структура мікроконтролерів. Основні функції та параметри


мікроконтролерів. Загальна характеристика мікроконтролерів

Основною особливістю сучасного етапу розвитку мікропроцесорних систем


(МПС) є завершення переходу від систем, виконаних на основі декількох великих
ІС, до однокристальних мікроконтролерів (МК), які поєднують в одному кристалі
всі основні елементи МПС: центральний процесор (ЦП), постійний
запам’ятовуючий пристрій (ПЗП), оперативний запам’ятовуючий пристрій (ОЗП),
порти вводу/виводи, таймери.
Класифікація і структура мікроконтролерів
В даний час промисловістю випускається цілий ряд типів МК. Усі ці прилади
можна умовно поділити на три основних класи:
1. 8-розрядні МК для вбудовуваних задач;
2. 16- і 32-розрядні МК;
3. цифрові сигнальні процесори (DSP).

Найрозповсюдженішим представником сімейства МК є 8-розрядні прилади,


які широко застосовуються в промисловості, побутовій і комп’ютерній техніці. Вони
пройшли у своєму розвитку шлях від найпростіших приладів з відносно
слаборозвиненою периферією до сучасних багатофункціональних контролерів, що
забезпечують реалізацію складних алгоритмів управління в реальному масштабі
часу. Причиною життєздатності 8-розрядних МК є використання їх для управління
реальними об’єктами, де застосовуються, в основному, алгоритми з перевагою
логічних операцій, швидкість обробки яких практично не залежить від розрядності
процесора.
Зростанню популярності 8-розрядних МК сприяє постійне розширення
номенклатури виробів, що випускаються такими відомими фірмами, як Motorola,
Microchip, Intel, Zilog, Atmel і багатьма іншими. Сучасні 8-розрядні МК володіють,
як правило, кількома відмітними ознаками. Перелічимо основні з них:
1. модульна організація, при якій на базі одного процесорного ядра
(центрального процесора) проектується ряд (лінійка) МК, що відрізняються
об’ємом і типом пам’яті програм, об’ємом пам’яті даних, набором
периферійних модулів, частотою синхронізації;
2. використання закритої архітектури МК, що характеризується відсутністю
ліній магістралей адреси і даних на виводах корпуса МК. Таким чином, МК -
це закінчена система обробки даних, нарощування можливостей якої з
використанням паралельних магістралей адреси і даних не передбачається;
3. використання типових функціональних периферійних модулів (таймери,
процесори подій, контролери послідовних інтерфейсів, аналого-цифрові
перетворювачі й ін.), які мають незначні відмінності в алгоритмах роботи в
МК різних виробників;
4. розширення кількості режимів роботи периферійних модулів, які
задаються в процесі ініціалізації регістрів спеціальних функцій МК.

При модульному принципі побудови всі МК одного сімейства містять


процесорне ядро, однакове для всіх МК даного сімейства, і змінюваний
функціональний блок, що відрізняє МК різних моделей. Структура модульного МК
наведена на рисунку 1.
Процесорне ядро містить в собі:
- центральний процесор;
- внутрішню контролерну магістраль (ВКМ) у складі шин адреси, даних і
управління;
- схему синхронізації МК;
- схему управління режимами роботи МК, включаючи підтримку режимів
зниженого енергоспоживання, початкового запуску (ініціалізації) і т.д.

Змінюваний функціональний блок містить у собі модулі пам’яті різного типу й


об’єму, порти вводу/виводу, модулі тактових генераторів (Г), таймери. У відносно
простих МК модуль обробки переривань входить до складу процесорного ядра. У
більш складних МК він виготовляється як окремий модуль з розвинутими
можливостями. До складу змінюваного функціонального блоку можуть входити і
такі додаткові модулі як компаратори напруги, аналого-цифрові перетворювачі
(АЦП) і інші. Кожен модуль проектується для роботи в складі МК з урахуванням
протоколу ВКМ. Даний підхід дозволяє створювати різноманітні за структурою МК
у межах одного сімейства.

Рис. 1 – Модульна організація МК

Процесорне ядро мікроконтролера


Структура процесорного ядра МК
Основними характеристиками, які визначають продуктивність процесорного
ядра МК, є:
- набір регістрів для збереження проміжних даних;
- система команд процесора;
- способи адресації операндів у просторі пам’яті;
- організація процесів вибірки і виконання команди.

З погляду системи команд і способів адресації операндів процесорне ядро


сучасних 8-розрядних МК реалізує один із двох принципів побудови процесорів:
- процесори з CISC-архітектурою, які реалізують так звану повну систему
команд (Complicated Instruction Set Computer);
- процесори з RISC-архітектурою, що реалізують скорочену систему команд
(Reduced Instruction Set Computer).
CISC-процесори виконують великий набір команд із розвитими
можливостями адресації, даючи виробнику можливість вибрати найбільше придатну
команду для виконання необхідної операції. У застосуванні до 8-розрядних МК
процесор з CISC-архітектурою може мати однобайтний, двохбайтний і
трьохбайтний (рідко чотирьохбайтний) формат команд. При цьому система команд,
як правило, неортогональна, тобто не всі команди можуть використовувати кожен зі
способів адресації стосовно до кожного з регістрів процесора. Вибірка команди на
виконання здійснюється побайтно протягом декількох циклів роботи МК. Час
виконання команди може складати від 1 до 12 циклів. ДО МК із CISC-архітектурою
відносяться МК фірми Intel з ядром MCS-51, які підтримуються в даний час цілим
рядом виробників, МК сімейств НС05, НС08 і НС11 фірми Motorola і ряд інших.
У процесорах з RISC-архітектурою набір команд, які виконуються,
скорочений до мінімуму. Для реалізації більш складних операцій приходиться
комбінувати команди. При цьому всі команди мають формат фіксованої довжини
(наприклад, 12, 14 або 16 біт), вибірка команди з пам’яті і її виконання здійснюється
за один цикл (такт) синхронізації. Система команд RISC-процесора припускає
можливість рівноправного використання всіх регістрів процесора. Це забезпечує
додаткову гнучкість при виконанні ряду операцій. До МК із RISC-процесором
відносяться МК AVR фірми Atmel, МК PIC16 і PIC17 фірми Microchip і інші.
На перший погляд, МК із RISC-процесором повинні мати більш високу
продуктивність у порівнянні з CISC МК при одній і тій же тактовій частоті
внутрішньої магістралі. Однак на практиці питання про продуктивність більш
складне і неоднозначне.
По-перше, оцінка продуктивності МК за часом виконання команд різних
систем (RISC і CISC) не зовсім коректна. Звичайно продуктивність МП і МК
прийнято оцінювати числом операцій пересилання "регістр-регістр", що можуть
бути виконані протягом однієї секунди. У МК із CISC-процесором час виконання
операції "регістр-регістр" складає від 1 до 3 циклів, що, здавалося б, поступається
продуктивності МК із RISC-процесором. Однак прагнення до скорочення формату
команд при збереженні ортогональності системи команд RISC-процесора приводить
до змушеного обмеження кількості доступних в одній команді регістрів. Так,
наприклад, системою команд МК PIC16 передбачена можливість пересилання
результату операції тільки в один із двох регістрів - регістр-джерело операнда f або
робочий регістр W. Таким чином, операція пересилання вмісту одного з доступних
регістрів в іншій (не джерело операнда і не робочий) зажадає використання двох
команд. Така необхідність часто виникає при пересиланні вмісту одного з регістрів
загального призначення (РОН) в один з портів МК. У той же час, у системі команд
більшості CISC-процесорів присутні команди пересилання вмісту РОН в один з
портів вводу/виводу. Тобто більш складна система команд іноді дозволяє
реалізувати більш ефективний спосіб виконання операції.
По-друге, оцінка продуктивності МК за швидкістю пересилання "регістр-
регістр" не враховує особливостей конкретного реалізованого алгоритму
управління. Так, при розробці швидкодіючих пристроїв автоматизованого керування
основну увагу варто приділяти часові виконання операцій множення і ділення при
реалізації рівнянь різних передаточних функцій. А при реалізації пульта
дистанційного керування побутовою технікою варто оцінювати час виконання
логічних функцій, що використовуються при опитуванні клавіатури і генерації
послідовної кодової посилки управління. Тому в критичних ситуаціях, що
вимагають високої швидкодії, варто оцінювати продуктивність на безлічі тих
операцій, що переважно використовуються в алгоритмі управління і мають
обмеження за часом виконання.
По-третє, необхідно ще враховувати, що зазначені в довідникових даних на
МК частоти синхронізації зазвичай відповідають частоті кварцового резонатора,
який підключається, у той час як тривалість циклу центрального процесора
визначається частотою обміну по ВКМ. Співвідношення цих частот індивідуальне
для кожного МК і повинне бути прийняте в розрахунок при порівнянні
продуктивності різних моделей контролерів.
З погляду організації процесів вибірки і виконання команд в сучасних 8-
розрядних МК застосовується одна з двох уже згадуваних архітектур МПС: фон-
нейманівська (прінстонська) або гарвардська.
Основною особливістю фон-нейманівської архітектури є використання
загальної пам’яті для збереження програм і даних, як показано на рис. 4.2.

Рис. 2 – Структура МGС із фон-нейманівською архітектурою.

Основна перевага архітектури Фон-Неймана – спрощення пристрою МПС,


тому що реалізується звертання тільки до однієї загальної пам’яті. Крім того,
використання єдиної області пам’яті дозволяло оперативно перерозподіляти ресурси
між областями програм і даних, що істотно підвищувало гнучкість МШС із погляду
виробника програмного забезпечення. Розміщення стека в загальній пам’яті
полегшувало доступ до його вмісту. Невипадково тому фон-нейманівська
архітектура стала основною архітектурою універсальних комп’ютерів, включаючи
персональні комп’ютери.
Основною особливістю гарвардської архітектури є використання роздільних
адресних просторів для збереження команд і даних, як показано на рисунку 3.
Рис. 3 – Структура МПС із гарвардською архітектурою.

Гарвардська архітектура майже не використовувалася до кінця 70-х років,


поки виробники МК не зрозуміли, що вона дає певні переваги виробникам
автономних систем управління.
Справа в тому, що, судячи з досвіду використання МПС для управління
різними об’єктами, для реалізації більшості алгоритмів управління такі переваги
фон-нейманівської архітектури як гнучкість і універсальність не мають великого
значення. Аналіз реальних програм управління показав, що необхідний об’єм
пам’яті даних МК, використовуваний для збереження проміжних результатів, як
правило, на порядок менший необхідного об’єму пам’яті програм. У цих умовах
використання єдиного адресного простору викликало збільшення формату команд
за рахунок збільшення кількості розрядів для адресації операндів. Застосування
окремої невеликої за об’ємом пам’яті даних сприяло скороченню довжини команд і
прискоренню пошуку інформації в пам’яті даних.
Крім того, гарвардська архітектура забезпечує потенційно більш високу
швидкість виконання програми в порівнянні з фон-нейманівською за рахунок
можливості реалізації паралельних операцій. Вибірка наступної команди може
відбуватися одночасно з виконанням попередньої, і немає необхідності зупиняти
процесор на час вибірки команди. Цей метод реалізації операцій дозволяє
забезпечувати виконання різних команд за однакове число тактів, що дає
можливість більш просто визначити час виконання циклів і критичних ділянок
програми.
Більшість виробників сучасних 8-розрядних МК використовують гарвардську
архітектуру. Однак гарвардська архітектура є недостатньо гнучкою для реалізації
деяких програмних процедур. Тому порівняння МК, виконаних за різними
архітектурами, варто проводити стосовно до конкретної задачі.
СРС №36

Тема: Сторінкова і сегментна організація пам’яті. Динамічна пам’ять. Вибірка


слів змінної довжини. Принципи побудови віртуальної пам’яті

У найпростішому і найбільш поширеному випадку сторінкової організації


пам'яті (або paging) як логічний адресний простір, так і фізичне представляються
такими, що складаються з наборів блоків або сторінок однакового розміру. При
цьому утворюються логічні сторінки (page), а відповідні одиниці у фізичній пам'яті
називають фізичними сторінками або сторінковими кадрами (page frames). Сторінки
(і сторінкові кадри) мають фіксовану довжину, що зазвичай є ступенем числа 2, і не
можуть перекриватися. Кожен кадр містить одну сторінку даних. При такій
організації зовнішня фрагментація відсутня, а втрати із-за внутрішньої фрагментації,
оскільки процес займає ціле число сторінок, обмежені частиною останньої сторінки
процесу.
Логічна адреса в сторінковій системі – впорядкована пара (p,d), де p – номер
сторінки у віртуальній пам'яті, а d – зсув в рамках сторінки p, на якій розміщується
елемент, що адресується. Відмітимо, що розбиття адресного простору на сторінки
здійснюється обчислювальною системою непомітно для програміста. Тому адреса є
двовимірною лише з погляду операційної системи, а з погляду програміста адресний
простір процесу залишається лінійним.
Описувана схема дозволяє завантажити процес, навіть якщо немає
безперервної області кадрів, достатньої для розміщення процесу цілком. Але одного
базового регістра для здійснення трансляції адреси в даній схемі недостатньо.
Система відображення логічних адрес у фізичних зводиться до системи
відображення логічних сторінок у фізичних і є таблицею сторінок, яка зберігається в
оперативній пам'яті. Іноді говорять, що таблиця сторінок – це кусочно-лінійна
функція відображення, задана в табличному вигляді.
Інтерпретація логічної адреси показана на мал. 8.7. Якщо виконуваний процес
звертається до логічної адреси v = (p,d), механізм відображення шукає номер
сторінки p в таблиці сторінок і визначає, що ця сторінка знаходиться в сторінковому
кадрі p', формуючи реальну адресу з p' і d.

Рис. 1 – Зв’язок логічної і фізичної адрес при сторінковій організації пам'яті


Таблиця сторінок (page table) адресується за допомогою спеціального регістра
процесора і дозволяє визначити номер кадру за логічною адресою. Окрім цього
основного завдання, за допомогою атрибутів, записаних в рядку таблиці сторінок,
можна організувати контроль доступу до конкретної сторінки і її захист.
Відзначимо ще раз відмінність точок зору користувача і системи на
використовувану пам'ять. З погляду користувача, його пам'ять – єдиний
безперервний простір, що містить тільки одну програму. Реальне відображення
приховане від користувача і контролюється ОС. Відмітимо, що процесу користувача
чужа пам'ять недоступна. Він не має можливості адресувати пам'ять за межами своєї
таблиці сторінок, яка включає тільки його власні сторінки.
Для управління фізичною пам'яттю ОС підтримує структуру таблиці кадрів.
Вона має один запис на кожен фізичний кадр, що показує його стан.
Відображення адрес має бути здійснене коректно навіть в складних випадках і
зазвичай реалізується апаратний. Для посилання на таблицю процесів
використовується спеціальний регістр. При перемиканні процесів необхідно знайти
таблицю сторінок нового процесу, покажчик на яку входить в контекст процесу.
Існують дві інші схеми організації управління пам'яттю: сегментна і
сегментно-сторінкова. Сегменти, на відміну від сторінок, можуть мати змінний
розмір. Ідея сегментації викладена у введенні. При сегментній організації віртуальна
адреса є двовимірною як для програміста, так і для операційної системи, і
складається з двох полів – номери сегменту і зсуву усередині сегменту.
Підкреслимо, що на відміну від сторінкової організації, де лінійна адреса
перетворена в двовимірний операційною системою для зручності відображення, тут
двовимірна адреси є наслідком представлення користувача про процес не у вигляді
лінійного масиву байтів, а як набір сегментів змінного розміру (дані, код, стік...).
Програмісти, що пишуть на мовах низького рівня, повинні мати уявлення про
сегментну організацію, явним чином міняючи значення сегментних регістрів (це
добре видно по текстах програм, написаних на Асемблері). Логічний адресний
простір – набір сегментів. Кожен сегмент має ім'я, розмір і інші параметри (рівень
привілеїв, дозволені види звернень, прапори присутності). На відміну від
сторінкової схеми, де користувач задає тільки один адресу, яка розбивається на
номер сторінки і зсув прозорим для програміста чином, в сегментній схемі
користувач специфікує кожну адресу двома величинами: ім'ям сегменту і зсувом.
Кожен сегмент – лінійна послідовність адрес, що починається з 0.
Максимальний розмір сегменту визначається розрядністю процесора (при 32-
розрядній адресації це 232 байт або 4 Гбайт). Розмір сегменту може мінятися
динамічно (наприклад, сегмент стека). У елементі таблиці сегментів окрім фізичної
адреси початку сегменту зазвичай міститься і довжина сегменту. Якщо розмір зсуву
у віртуальній адресі виходить за межі розміру сегменту, виникає виняткова ситуація.
Логічна адреса – впорядкована пара v=(s,d), номер сегменту і зсув усередині
сегменту.
У системах, де сегменти підтримуються апаратний, ці параметри зазвичай
зберігаються в таблиці дескрипторів сегментів, а програма звертається до цих
дескрипторів по номерах-селекторах. При цьому в контекст кожного процесу
входить набір сегментних регістрів, селекторы поточних сегментів коди, що містять,
стека, даних і так далі і що визначають, які сегменти використовуватимуться при
різних видах звернень до пам'яті. Це дозволяє процесору вже на апаратному рівні
визначати допустимість звернень до пам'яті, спрощуючи реалізацію захисту
інформації від пошкодження і несанкціонованого доступу.

Рис. 2 – Перетворення логічної адреси при сегментній організації пам'яті

Апаратна підтримка сегментів поширена мало (головним чином на процесорах


Intel). У більшості ОС сегментація реалізується на рівні, не залежному від
апаратури.
Зберігати в пам'яті сегменти великого розміру цілком так само незручно, як і
зберігати процес безперервним блоком. Напрошується ідея розбиття сегментів на
сторінки. При сегментно-сторінковій організації пам'яті відбувається дворівнева
трансляція віртуальної адреси у фізичний. В цьому випадку логічна адреса
складається з трьох полів: номери сегменту логічної пам'яті, номери сторінки
усередині сегменту і зсуву усередині сторінки. Відповідно, використовуються дві
таблиці відображення – таблиця сегментів, що зв'язує номер сегменту з таблицею
сторінок, і окрема таблиця сторінок для кожного сегменту.

Рис. 3 – Спрощена схема формування фізичної адреси при сегментно-сторінковій


організації пам'яті

Сегментно-сторінкова і сторінкова організація пам'яті дозволяє легко


організувати сумісне використання одних і тих же даних і програмної коди різними
завданнями. Для цього різні логічні блоки пам'яті різних процесів відображають в
один і той же блок фізичної пам'яті, де розміщується фрагмент коди або даних, що
розділяється.
СРС №37

Тема: Засоби підтримки мультизадачності і захисту

Процесори починаючи з Intel286 володіють засобами, що дозволяють


організувати позмінне виконання процесором різних завдань. Під завданням
розуміється програма, яка оперує в своєму (відведеному тільки для неї) адресному
просторі, з о своїми даними в пам'яті і внутрішніх регістрах. При необхідності
процесор може перемикатися між різними завданнями, забезпечуючи повне
перемикання контексту і збереження контексту старої задачі (з можливістю
подальшого повернення до неї).
У всіх описуваних процесорах, починаючи з Intel286, мається т.зв. захищений
режим роботи (включається бітом CR0.PE). У цьому режимі крім коштів розширеної
адресації і підтримки мультизадачності процесор забезпечує багаторівневу систему
захисту кодів (програм, даних тощо) від несанкціонованого використання та зміни.
Механізм підтримки мультизадачності функціонує тільки в захищеному
режимі. Його робота забезпечується наступними елементами прикладної та
системної архітектури процесора:

 регістр завдання TR;


 прапор вкладеної завдання NT в регістрі EFLAGS;
 прапор TS в регістрі CR0 ;
 спеціальний блок даних завдання - сегмент стану завдання (Task State
Segment);
 дескриптор TSS;
 дескриптор шлюзу завдання.
Після скидання процесора механізм мультизадачности відключений, для його
ініціалізації необхідно спочатку перевести процесор в захищений режим, потім
створити TSS для нового завдання і завантажити командою LTR регістр завдання
коректним селектором. Коректне виконання програм в захищеному режимі можливо
тільки при ініціалізованої мультизадачности. Навіть якщо доведеться виконувати
одну програму, вона запускається як одна задача в мультизадачності оточенні.
Більш складні системи можуть використовувати розвинені можливості процесора з
диспетчеризації, збереженню стану і переключенню різних задач. Існує кілька типів
завдань, які відрізняються режимами роботи процесора при їх виконанні: 32-
розрядні завдання, 16-розрядні завдання, завдання V86. Всі ці завдання можуть
поперемінно виконуватися абсолютно незалежно один від одного. Процесор
забезпечує повне перемикання контексту і режиму при переході від однієї задачі до
іншої. Перемикання завдань може здійснюватися в таких випадках:

 при явному виклику командою CALL;


 при явному переході по команді JMP;
 при неявному виклику (Автоматично процесором) завдання обробки
переривання;
 при неявному виклику завдання обробника виключення;
 при поверненні з процедури по команді IRET, коли EFLAGS.NT=1.
Контекст кожного завдання зберігається у відповідному TSS і включає:

 завдання поточної робочої області пам'яті завдання (Значення всіх


сегментних регістрів);
 значення всіх регістрів загального призначення;
 значення регістрів EFLAGS і EIP;
 значення регістра LDTR;
 значення регістра CR3;
 карту вводу / виводу і карту переривань;
 покажчики на стеки 0, 1 і 2-го рівнів привілеїв;
 селектор TSS попередньої завдання.

Таким чином, кожна задача може мати: своє лінійне адресний простір, заданий
своєї локальної таблицею дескрипторів (LDT), свій фізичний адресний простір,
розташоване в будь-якій доступній області та задається сторінковим механізмом
(базовий адреса каталогу сторінок в CR3), свій протокол захисту, який
забезпечується покажчиками на стеки різних рівнів привілеїв і картою
введення/виведення. Поле селектора TSS попередньої задачі забезпечує можливість
повернення при послідовному виклику декількох вкладених завдань.
Нормальне переключення задач забезпечується спеціальними дескрипторами в
таблицях дескрипторів LDT, GDT або IDT. Такими дескрипторами є 16- і 32-
розрядні дескриптори TSS і дескриптор шлюзу завдання. Дескриптор шлюзу задачі
призначений для перенаправлення всіх вказують на нього викликів (CALL),
переходів (JMP) і векторів переривань (особливих ситуацій) на обробку в окрему
задачу.
Повністю процес перемикання задачі (всі виконувані процесором дії) виглядає
наступним чином.

1. Отримання селектор TSS нової завдання або як операнда в командах


CALL, JMP, або з дескриптора шлюзу завдання, або з поля LINK сегмента
стану поточної завдання (Якщо перемикання задач ініціалізованих командою
IRET).
2. Перевірка відповідності всіх рівнів привілеїв з метою визначення
допустимості перемикання на нову задачу.
3. Перевірка дескриптора TSS нової завдання (Сегмент присутній і має
коректний межа, НЕ менше 67h для 32- бітного TSS).
4. Перевірка того, що нова задача вільна (CALL, JMP, особлива ситуація
або переривання) або зайнята (IRET).
5. Перевірка того, що TSS поточної (Старої) завдання, TSS нової завдання і
всі дескриптори, використовувані при перемиканні задач,відображені
сторінковим механізмом на фізичну пам'ять (Т. Е. присутні в пам'яті).
6. Очищення біта зайнятості завдання в TSS старої завдання, якщо
перемикання задач ініційовано командами JMP або IRET (Для
CALL,особливої ситуації або переривання біт зайнятості залишається
встановленим).
7. Виробляється збереження контексту старої завдання. Процесор визначає
базовий адреса TSS поточної завдання по значенням в регістрі TR і потім
послідовно зберігає дані зі всіх регістрів загального призначення, селектори з
сегментних регістрів, значення регістра EFLAGS (Причому, якщо
перемикання задач ініційовано командою IRET, процесор очищає прапор NT в
копії регістра EFLAGS, що зберігається), значення покажчика команд EIP і
т.д. В даної точці процесор здійснює перемикання завдання. Це означає, що
якщо будь-яка помилка виникає на кроках з 1 по 7, то перемикання задач НЕ
відбувається і процесор повністю повертається в стан, передувало команді,
ініціювала перемикання задач. Але якщо помилка відбувається на подальших
кроках, то процесор закінчує перемикання задач (Без деяких перевірок) і
генерує відповідну помилку перед початком виконання нової завдання (В цьому
випадку обробник помилки повинен сам повністю завершити перемикання
задач для запуску нової задачі).
8. Якщо перемикання задач було ініційовано командою CALL,
перериванням або особливої ситуацією, то процесор копіює селектор TSS
старої завдання в поле LINK сегмента TSS нової завдання і встановлює прапор
NT в образі регістра EFLAGS, який зберігається в TSS нової завдачі.
9. Якщо перемикання задач було ініційовано командами CALL, JMP,
перериванням або особливої ситуацією, процесор встановлює прапор
зайнятості B в дескрипторі TSS нової завдання.
10. Встановлюється прапор TS в регістрі CR0.
11. Виробляється запис в регістр TR значень селектора і дескриптора (В
приховану частина) TSS нової завдання.
12. Виробляється читання контексту нової завдання з TSS. Зчитуються
значення всіх регістрів загального призначення, сегментних регістрів, регістра
прапорів EFLAGS, покажчика команд EIP і ін. (В т.ч. значення для регістрів
LDTR, CR3).
13. Починається виконання команд нової завдання.
Для відстеження ланцюжків послідовних викликів завдань призначене поле
LINK в сегменті TSS і прапор NT регістра EFLAGS. При виклику (командою CALL,
перериванням або особливої ситуації) нового завдання з коду іншого завдання
(безпосередньо або через дескриптор шлюзу задачі) для індикації того, що нова
задача є вкладеною, встановлюється прапор NT.EFLAGS, а селектор TSS старої
завдання поміщається в поле зворотного зв'язку LINK сегмента TSS нової задачі.
Зазначені дії повторюються, якщо вкладена завдання сама викликає ще одну задачу і
т.д.
При парафії команди IRET процесор здійснює повернення до задачі більш
високого рівня. При цьому полі LINK сегмента TSS закривається завдання
використовується для отримання селектора TSS завдання, до якої проводиться
повернення, прапор NT.EFLAGS після повернення встановлюється в значення, яке
було збережено в TSS перед викликом вкладеної завдання.
У випадку, якщо звернення до нової задачі проводиться командою JMP, нова
задача не рахується вкладеної, прапор NT не встановлюється і поле LINK не
використовується.
У всіх випадках і для всіх типів описуваних процесорів рекурсивний виклик завдань
неможливий. Процесор автоматично запобігає таку можливість спираючись на
значення прапора B (зайнятість) в дескрипторі TSS спричиненої завдання.
СРС №38

Тема: Перемикання задач в програмах 3Dnow, SIMD

При перемиканні завдань процесор не проводить автоматичного перемикання


контексту для FPU/MMX/SIMD. Програма повинна самостійно стежити за цим. У
зв’язку з тим, що в мультизадачних операційних системах перемикання завдань
може відбуватися випадково (наприклад, зважаючи на генерацію зовнішнього
переривання), в процесор введений спеціальний механізм для підтримки
перемикання контексту FPU/MMX/SIMD. Робота цього механізму обумовлена
наявністю спеціального прапорця індикації перемикання завдань CR0.TS, який
встановлюється у всіх без виключення випадках перемикання завдань.
В нормальному режимі прапор CR.TS скинутий і всі команди
FPU/MMX/SIMD виконуються в звичайному режимі. Після перемикання завдань
прапор CR0.TS встановлюється автоматично. Тепер будь-яка команда
FPU/MMX/SIMD (у тому числі і всі команди 3DNow!) перед своїм виконанням
викличе генерацію особливої ситуації #NM (співпроцесор відсутній).
Багатозадачні операційні системи повинні містити спеціальну програму -
обробник переривання #NM, яка забезпечить відповідність контексту
FPU/MMX/SIMD поточному завданню. Цей обробник при отриманні управління
повинен скинути прапор CR0.TS; перевірити, чи відповідає поточний контекст
FPU/MMX/SIMD виконуваному завданню, і якщо відповідає, то управління
повертається до перерваної команди, а якщо немає - обробник зберігає значення всіх
регістрів FPU/MMX/SIMD в спеціальній області пам’яті, потім завантажує з іншої
спеціальної області пам’яті значення всіх регістрів для нового завдання і передає
управління перерваній команді. Природно, що в программу-обработчик має бути
закладений механізм стеження за поточними завданнями для гарантії повної
відповідності всіх контекстів, що зберігаються і завантажуваних, своїм завданням.
Таблиця 1 – Команди, що використовуються для збереження/відновлення
контексту FPU/MMX/SIMD
Контекст FPU/MMX FSAVE/FNSAVE, FRSTОR
(зокрема 3DNow!)
Контекст FPU/MMX/SIMD FXSAVE, FXRSTOR

Для збереження контексту FPU/MMX/SIMD можуть застосовуватися різні


команди і їх послідовності. Це можна пояснити тим, що з розвитком архітектури
процесорів старі команди для збереження сумісності не змінювалися, а нові
вводилися для забезпечення роботи розширень, що з’явилися.
Спеціальний прапор CR4. 0SFXSR показує, чи здійснює операційна система
перемикання контексту FPU командами FXSAVE і FXRSTOR, забезпечуючи, таким
чином, перемикання контексту SIMD.
Механізм захисту
У всіх процесорах, починаючи з Intel286, при установці CR0.РЕ = 1
включається захищений режим роботи. У цьому режимі, окрім засобів розширеної
адресації і підтримки мультизадачності, процесор забезпечує багаторівневу систему
захисту. Захист запобігає несанкціонованому використанню даних, код і портів
введення/виведення, забезпечуючи стійкішу і безпечнішу роботу всіх програм в
багатозадачному середовищі.
У функції механізму захисту входять наступні дії, що виконуються при
зверненні до даних або програм:
1. перевірка можливості виходу за межі сегменту (розмір кожного сегменту коди
або даних задається в його дескрипторі);
2. перевірка відповідності типів використовуваних сегментів тому, по якому
призначенню ці сегменти використовуються (залежно від типу можливі різні
варіанти звернення);
3. перевірка відповідності рівнів привілеїв (дозвіл/заборона дій, що зажадалися,
залежно від поточного рівня привілеїв і встановлених правил доступу до коду
або даних);
4. перевірка області, що адресується (запобігання несанкціонованому доступу до
захищених областей пам’яті);
5. перевірка точок входу (запобігання несанкціонованому виклику захищених
програм);
6. перевірка команд (запобігання виконанню привілейованих команд на низьких
рівнях привілеїв).

Для забезпечення роботи всіх перерахованих функцій механізм захисту


використовує спеціальні поля і прапорці в різних регістрах і структурах даних, що
управляють (прапор S дескриптора сегменту, поле TYPE дескриптора сегменту,
поле LIMIT дескриптора сегменту, прапор G дескриптора сегменту, прапор Е
дескриптора сегменту, поле DPL дескриптора сегменту, поле RPL (CPL) селектора
сегменту, прапори U/S і R/W в таблицях сторінкових перетворень, прапор CR0.WP).
Правильне заповнення і відстежування значень цих полів і прапорів дозволяє
створити багаторівневу, стійку до помилок і зловмисних дій систему захисту
програм і даних.
Існує два механізми роботи системи захисту: на рівні сегментів і на рівні
сторінок. Вони не мають яких-небудь спеціальних засобів для вмикання/вимикання
і починають функціонувати відразу, як тільки процесор опиняється у відповідному
режимі (на рівні сегментів - в захищеному режимі, на рівні сторінок - при включенні
сторінкового механізму).
Захист на рівні сегментів є основним і забезпечує безліч функцій, головна з
яких - розділення рівнів привілеїв і відстежування поточних прав доступу.
Система захисту на рівні сегментів підтримує чотири рівні привілеїв (0, 1, 2,
3). За самий привілейований рівень вважається нульовий. На цьому рівні
передбачається виконання програм ядра мультизадачних операційних систем (у
простих ОС всі програми, у тому числі і призначені для користувача, можуть
здійснюватися на нульовому рівні привілеїв, що рівнозначно відсутності захисту по
рівнях привілеїв). Наступні рівні (від 1 до 3) призначені для допоміжних і
призначених для користувача програм. Спеціальні дескриптори - так звані шлюзи -
забезпечують зв’язок між завданнями, що виконуються на різних рівнях привілеїв.
Зазвичай всі призначені для користувача програми працюють на рівні привілеїв 3,
тобто володіють найменшою кількістю прав доступу до різних компонентів ОС і
областей пам’яті.
Для стеження за поточним рівнем привілеїв і розмежування прав доступу
призначені поля DPL в дескрипторах сегментів і RPL в селекторах сегментів.
Поточний рівень привілеїв CPL відповідає рівню привілеїв поточного сегменту коди
і може бути лічений з його селектора в регістрі CS. Кожного разу при зверненні до
команд і даних процесор, використовуючи значення CPL, що діє, проводить
перевірку допустимості тієї або іншої операції. У разі невідповідності запитаної дії
правам виконуваної програми процесор генерує спеціальне переривання #GP (
помилка загального захисту), і далі виниклу проблему вирішує обробник цього
переривання (який повинен функціонувати на самому привілейованому рівні).
Детально всі перевірки, що проводяться, і дії механізму сегментного захисту
при виконанні тих або інших команд приведені в описах кожної команди.
Функціональне призначення і деякі аспекти використання всіх прапорців і полів,
задіяних механізмом захисту, приведені при описі відповідних регістрів і структур
даних.
Механізм сторінкового захисту введений в процесори, починаючи з Intel386, і
є засобом захисту більш високого рівня, ніж сегментна. Він починає діяти при
ініціалізації сторінкового механізму і забезпечує захист системних областей пам’яті
від доступу туди призначених для користувача програм, а також захист сторінок з
програмним кодом від зміни. Його робота заснована на спеціальних полях U/S і
W/R в елементах таблиць сторінкових перетворень.
Поле U/S визначає права доступу для відповідної сторінки (сторінок): U/S = 0
- супервізор (Supervisor), U/S = 1 - користувач (User). Процесор захищає сторінки
супервізора від доступу до них з програм з привілеями користувача. Тобто
відбувається розширення механізму сегментного захисту на сторінкову схему.
Програми з поточним рівнем привілеїв (CPL) 0, 1, 2 володіють правами супервізора,
а програми з CPL = 3 - правами користувача.
Поле W/R призначене для установки захисту призначених для користувача
сторінок від запису. Причому залежно від поточного значення прапора CR0.WP
призначені для користувача сторінки можуть бути захищені і від запису програмами
супервізора.
Поля U/S і W/R присутні і в елементах каталога сторінок, і в елементах
таблиці сторінок. Тому можливе завдання комбінованих умов захисту. Порушення
сторінкового захисту приводить до генерації сторінкової помилки (#PF).
Подібний механізм не може бути використаний для перевизначення рівнів
сегментного захисту: якщо сегмент заданий як захищений від запису, то
приміщення його в сторінку, дозволену для запису, не дозволить здійснити запис в
цей сегмент. Всі перевірки сегментного захисту проводяться до перевірки
сторінкового захисту, тому якщо помилка буде виявлена ще на сегментному рівні,
відбудеться генерація помилки загального захисту (#GP).
Таблиця 2 – Комбінація захисту в каталозі і в таблиці сторінок
Елемент каталога Елемент таблиці сторінок Підсумковий ефект
сторінок
Привілей Доступ Привілей Доступ Привілей Доступ
U R U R U R
U R U W U R
U W U R U R
U W U W U R/W
U R S R S R/W*
U R S W S R/W*
U W S R S R/W*
U W S W S R/W
S R U R S R/W*
S R U W S R/W*
S W U R S R/W*
S W U W S R/W
S R S R S R/W*
S R S W S R/W*
S W S R S R/W*

Примітка:
*Якщо CR0.WP = 0, то сторінка захищена від запису і можливо тільки її читання.
Значення прапорів: U - користувач (U/S = 1);
S - супервізор (U/S = 0);
R - тільки читання (R/W = 0);
W - читання/запис (R/W = 1).
СРС №39

Тема: Механізм захисту. Формат використовуваних елементів (селектори,


дескриптори)

Мікропроцесори Pentium, так само, як і його попередники (починаючи з


80268), можуть працювати в двох режимах: реальної адреси і віртуальної захищеної
адреси. Зазвичай ці режими називають просто реальним і захищеним. У реальному
режимі 32-розрядні мікропроцесори функціонують фактично так само, як МП 86 з
підвищеною швидкодією і розширеним набором команд. Багато вельми
привабливих можливостей мікропроцесорів принципово не реалізуються в
реальному режимі, який введений лише для забезпечення сумісності з попередніми
моделями процесорів. Характерною особливістю реального режиму є обмеження
об'єму оперативної пам'яті, що адресується, величиною 1 Мбайт.
Тільки переклад мікропроцесора в захищений режим дозволяє повністю
реалізувати всі можливості, загиджені в його архітектуру і недоступні в реальному
режимі. Сюди можна віднести:
1. збільшення простору, що адресується, до 4 Гбайт;
2. можливість працювати у віртуальному адресному просторі, що
перевищує максимально можливий об'єм фізичної пам'яті і що становить
величезну величину 64 Тбайт;
3. організація багатозадачного режиму з паралельним виконанням
декількох програм (процесів). Власне кажучи, багатозадачний режим
організовує багатозадачна операційна система, проте мікропроцесор
надає необхідний для цього режиму могутній і надійний механізм
захисту завдань один від одного за допомогою чотирьохрівневої
системи привілеїв;
4. сторінкова організація пам'яті, що підвищує рівень захисту завдань
один від одного і ефективність їх виконання.

При включенні мікропроцесора в нім автоматично встановлюється режим


реальної адреси. Перехід в захищений режим здійснюється програмно шляхом
виконання відповідної послідовності команд. Оскільки багато деталей
функціонування мікропроцесора в реальному і захищеному режимах істотно
розрізняються, програми, призначені для захищеного режиму, мають бути написані
особливим чином. При цьому відмінності реального і захищеного режимів настільки
великі, що програми реального режиму не можуть виконуватися в захищеному
режимі і навпаки. Іншими словами, реальний і захищений режими не сумісні.
Архітектура сучасного мікропроцесора незвичайно складна. Такими ж
складними виявляються і засоби захищеного режиму, а також програми, що
використовують ці засоби. З іншого боку, при вирішенні багатьох прикладних
завдань (наприклад, при відладці додатків Windows, що працюють, природно, в
захищеному режимі), немає необхідності в розумінні всіх деталей функціонування
захищеного режиму; досить мати знайомство з його основними поняттями. У
справжньому розділі дається короткий опис основ захищеного режиму і його
найбільш важливих структур і алгоритмів функціонування.
Мабуть, найбільш важливою відмінністю захищеного режиму від реального є
інший принцип формування фізичної адреси. Пригадаємо, що в реальному режимі
фізична адреса елементу пам'яті, що адресується, складається з двох компонентів -
сегментної адреси і зсуву. Обидва компоненти мають розмір 16 біт, і процесор,
звертаючись до пам'яті, користується наступним правилом обчислення фізичної
адреси:
Фізична адреса = сегментна адреса * 16 + зсув
І сегментна адреса, і зсув не можуть бути більше Ffffh, звідки слідують два
найважливіші обмеження реального режиму: об'єм адресного простору складає
всього 1 Мбайт, а сегменти не можуть мати розміру, що перевищує 64 Кбайт.
У захищеному режимі програма як і раніше складається з сегментів, що
адресуються за допомогою 16-розрядних сегментних регістрів, проте
місцеположення сегментів у фізичній пам'яті визначається іншим способом.
У сегментні регістри в захищеному режимі записуються не сегментні адреси, а так
звані селектори, биті 3...15 яких розглядаються, як номери (індекси) елементів
спеціальної таблиці, що містить дескриптори сегментів програми. Таблиця
дескрипторів зазвичай створиться операційною системою захищеного режиму
(наприклад, системою Windows) і, як правило, недоступна програмі. Кожен
дескриптор таблиці дескрипторів має розмір 8 байт, і в нім зберігаються всі
характеристики, необхідні процесору для обслуговування цього сегменту. Серед цих
характеристик необхідно виділити насамперед дві: адресу сегменту і його довжину
(див. рис. 1).

Рис. 1 – Дескриптори сегментів і їх селектори

Під адресу сегменту в дескрипторі виділяється 32 біт, і, таким чином, сегмент


може починатися в будь-якій точці адресного простору об'ємом 4 Гбайт. Це
адресний простір носить назву лінійну. У простому випадку, коли вимкнене
сторінкове перетворення, про яке мова йтиме пізніше, лінійні адреси відповідають
фізичним. Таким чином, процесор може працювати з оперативною пам'яттю об'ємом
до 4 Гбайт.
Як і в реальному режимі, адреса осередку, що адресується, обчислюється
процесором, як сума базової адреси сегменту і зсуву:

Лінійна адреса = базова адреса сегменту + зсув


У 32-розрядних процесорах зсув має розмір 32 битий, тому максимальна
довжина сегменту складає 212 = 4 Гбайт.
На рисунку 2 приведений гіпотетичний приклад програми, що складається з
трьох сегментів, перший з яких має довжину 1 Мбайт і розташований на початку
адресного простору, другий, розміром 100 Кбайт, впритул примикає до першого, а
третій, такий, що має розмір всього 256 байт, розташований в середині дев'ятого по
рахунку мегабайта.
Адреси, використовувані програмою для звернення до осередків пам'яті, і що
складаються завжди з двох компонентів - селектори і зсуви - іноді називаються
віртуальними. Система сегментної адресації перетворить віртуальні адреси в лінійні.
Оскільки таблиця дескрипторів, за допомогою якої здійснюється це перетворення,
зазвичай недоступна програмі, програма може не знати, в яких саме ділянках
логічного адресного простору знаходяться це компоненти. Фактично це зводиться
до того, що, завантажуючи програму в пам'ять, ви не знаєте, в яких місцях пам'яті
знаходитимуться її сегменти, і який буде порядок їх розміщення. Програмістові
доступні тільки віртуальні адреси, перетворення ж їх в лінійних і потім у фізичних
бере на себе операційна система.
Який об'єм віртуального адресного простору? Програма указує номер
потрібного нею дескриптора за допомогою селектора, в якому для індексу
дескриптора відведене 13 битий. Проте насправді їх в два рази більше, оскільки
програма може працювати не з однією, а з двома дескрипторними таблицями -
однією глобальною, такою, що розділяється всіма виконуваними завданнями, і
одному локальному, належному конкретному завданню. У селекторі передбачений
спеціальний біт (біт 2), стан якого говорить про тип необхідній програмі
дескрипторної таблиці. Таким чином, всього програмі можуть бути доступні до 16
сегментів.
Реально, проте, оперативна пам'ять комп'ютера з 32-розрядною адресною
шиною не може бути більше 4 Гбайт, тобто при зроблених вище припущеннях (16
До сегментів розміром 4 Гбайт кожен) в пам'яті може поміститися максимум один
сегмент із понад 16 тисяч. Де ж знаходитимуться всі останні?
Повний об'єм віртуального простору може бути реалізований тільки за допомогою
багатозадачної операційної системи, яка зберігає всі невживані зараз сегменти на
диску, завантажуючи їх в пам'ять в міру необхідності. Зрозуміло, якщо ми хочемо
повністю реалізувати можливості, закладені в сучасні процесори, нам буде потрібно
диск досить великого об'єму - 64 Тбайт. Проте і при нинішніх скромніших технічних
засобах (пам'ять до 100 Мбайт, жорсткий диск до 10 Гбайт) принцип віртуальної
пам'яті використовується всіма багатозадачними операційними системами з
великою ефективністю. З іншого боку, для прикладного програміста це питання не
представляє особливого інтересу, оскільки скидання сегментів на диск і підкачка їх з
диска здійснюються операційною системою, а не програмою, і втручання цю
процедуру навряд чи доцільно.
Як вже наголошувалося, адреса, що обчислюється процесором на основі
селектора і зсуву, відноситься до лінійного адресного простору, не обов'язково
співпадаючого з фізичним. Перетворення лінійних адрес у фізичних здійснюється за
допомогою так званої сторінкової трансляції, що частково реалізовується
процесором, а частково - операційною системою. Якщо сторінкова трансляція
вимкнена, всі лінійні адреси в точності збігаються з фізичними; якщо сторінкова
трансляція включена, то лінійні адреси перетворяться у фізичних відповідно до
вмісту сторінкових таблиць (див. рис. 2).

Рис. 2 – Ланцюжок перетворень віртуальної адреси у фізичний.

Сторінкою називається зв'язна ділянка лінійного або фізичного адресного


простору об'ємом 4 Кбайт. Програма працює в лінійному адресному просторі, не
підозрюючи про існування сторінкового перетворення або навіть самих сторінок.
Механізм сторінкової трансляції відображає логічні сторінки на фізичних відповідно
до інформації, що міститься в сторінкових таблицях. В результаті окремі 4х-
килобайтовис ділянки програми можуть реально знаходитися в будь-яких
незв'язкових один з одним 4х-кілобайтових областях фізичної пам'яті (див. рис. 3).
Порядок розміщення фізичних сторінок в пам'яті може не відповідати (і зазвичай не
відповідає) порядку проходження логічних сторінок. Більш того, деякі логічні
сторінки можуть перекриватися, фактично співіснуючи в одній і тій же області
фізичної пам'яті.
Сторінкова трансляція є досить складним механізмом, в якому беруть участь
апаратні засоби процесора і перетворення, що знаходяться в пам'яті таблиці.
Призначення і взаємодія елементів системи сторінкової трансляції схематично
зображене на рисунку 4.
Система сторінкових таблиць складається з двох рівнів. На першому рівні
знаходиться каталог таблиць сторінок (або просто каталог сторінок) - резидентна в
пам'яті таблиця, що містить 1024 4х-байтових поля з адресами таблиць сторінок. На
другому рівні знаходяться таблиці сторінок, кожна з яких містить так само 1024 4х-
байтових поля з адресами фізичних сторінок пам'яті. Максимально можливе число
таблиць сторінок визначається числом полів в каталозі і може доходити до 1024.
Оскільки розмір сторінки складає 4 Кбайт, 1024 таблиці по 1024 сторінки
перекривають весь адресний простір (4 Гбайт).
Рис. 3 – Відображення логічних адрес на фізичних

Рис. 4 – Сторінкова трансляція адрес

Не всі 1024 таблиці сторінок мають обов'язково бути в наявності (до речі, вони
зайняли б в пам'яті задоволено багато місця - 4 Мбайт). Якщо програма реально
використовує лише частину можливого лінійного адресного простору, а так завжди і
буває, то невживані поля в каталозі сторінок позначаються, як відсутні. Для таких
полів система, економлячи пам'ять, не виділяє сторінкові таблиці.
При включеній сторінковій трансляції лінійна адреса розглядається, як
сукупність три полів: 10-бітового індексу в каталозі сторінок, 10-бітовбго індексу у
вибраній таблиці сторінок і 12-бітового зсуву у вибраній сторінці. Нагадаємо, що
лінійна адреса утворюється шляхом складання базової адреси сегменту, узятого з
дескриптора сегменту, і зсуву в цьому сегменті, наданого програмою.
Старші 10 біт лінійної адреси утворюють номер поля в каталозі сторінок.
Базова адреса каталога зберігається в одному з регістрів процесора, що управляють,
конкретно, в регістрі Cr3. Через те, що каталог сам є сторінкою і вирівняний в
пам'яті на межу 4 Кбайт, в регістрі Cr3 для адресації до каталога використовуються
лише старші 20 битий, а молодші 12 біт зарезервовані для майбутніх застосувань.
Поля каталога мають розмір 4 байт, тому індекс, що витягує з лінійної адреси,
зрушується вліво на 2 битий (тобто умножається на 4) і отримана величина
складається з базовою адресою каталога, утворюючи адресу конкретного поля
каталога. Кожне поле каталога містить фізична базова адреса однієї з таблиць
сторінок, причому, оскільки таблиці сторінок самі є сторінками і вирівняні в пам'яті
на межу 4 Кбайт, в цій адресі значущими є тільки старші 20 битий.
Далі з лінійної адреси витягується середня частина (биті 12...21), зрушується
вліво на 2 битий і складається з базовою адресою, що зберігається у вибраному полі
каталога. В результаті утворюється фізична адреса сторінки в пам'яті, в якому знову
ж таки використовуються тільки старші 20 битий. Ця адреса, що розглядається, як
старші 20 біт фізичної адреси осередку, що адресується, носить назву сторінкового
кадру. Сторінковий кадр доповнюється з правого боку молодшими 12 бітами
лінійної адреси, які проходять через сторінковий механізм без зміни і грають роль
зсуву усередині вибраної фізичної сторінки.
Розглянемо абстрактний приклад, що дозволяє прослідкувати ланцюжок
перетворення віртуальної адреси у фізичний. Хай програма виконує команду
mov Еах,ds:[ЕВХ]
при цьому вміст DS (селектор) складає 1167і, а вміст ЕВХ (зсув) 31678u.
Старші 13 біт селектора (число 116u) утворюють індекс дескриптора в системній
дескрипторній таблиці. Кожен дескриптор включає досить великий об'єм інформації
про конкретний сегмент і, зокрема, його лінійну адресу. Хай в елементі
дескрипторної таблиці з номером 116h записана лінійна адреса (базова адреса
сегменту) 0l0sl000h.
Тоді повна лінійна адреса осередку, що адресується, визначиться, як сума
базової адреси і зсуву:
Базова адреса сегменту 0l0sl000h
Зсув 0003167811
Повна лінійна адреса 0108267811

При вимкненій табличній трансляції величина 0108267811 буде абсолютною


фізичною адресою осередку, вміст якого має бути прочитане приведеною вище
командою mov. Легко зміркувати, що цей осередок знаходиться на самому початку
17-го мегабайта оперативної пам'яті.
Подивимося, як утворюватиметься фізична адреса при використанні сторінкової
трансляції адрес. Отриману лінійну адресу треба розділити на три складові для
виділення індексів і зсуву (див. рис. 5).

Рис. 5 – Приклад лінійної адреси

Індекс каталога складає 4h. Множення його на 4 дасть зсув від початку
каталога. Цей зсув рівний 10h.
Індекс таблиці сторінок опинився рівним 82h. Після множення на 4 отримуємо
зсув в таблиці сторінок, рівне в даному випадку 210h.
Припустимо, що регістр Cr3 містить число S000h. Тоді фізична адреса осередку в
каталозі, звідки треба отримати адресу закріпленої за даною ділянкою програми
таблиці сторінок, складе S000h + l0h = 8010h. Хай за цією адресою записано число
4602lh. Його 12 молодших бітів складають службову інформацію (зокрема, битий 1
свідчить про присутність цієї таблиці сторінок в пам'яті, а битий 5 говорить про те,
що до цієї таблиці вже були звернення), а старші біти, тобто число 46000h
утворюють фізична базова адреса таблиці сторінок. Для отримання адреси
необхідного елементу цієї таблиці до базової адреси треба додати зсув 210h.
Результуюча адреса складе 462101h.
Вважатимемо, що за адресою 4621011 записано число 01FF502111.
Відкинувши службові біти, отримаємо адресу фізичної сторінки в пам'яті 01ff5000u.
Ця адреса завжди закінчується трьома нулями, оскільки сторінки вирівняні в пам'яті
на межу 4 Кбайт. Для отримання фізичної адреси осередку, що адресується, слід
заповнити 12 молодших біт отриманої адреси бітами зсуву з лінійної адреси нашого
осередку, в яких в нашому прикладі записано число 678h. У результаті отримуємо
фізичну адресу пам'яті 01FF567811, розташований в кінці 32-го Мбайта.
Як видно з цього прикладу, і із сторінковою трансляцією, і без неї обчислення
фізичних адрес осередків, що адресуються, виконується в захищеному режимі
зовсім не так, як в реальному. Неприємним практичним наслідком правил адресації
захищеного режиму є вже згадувана "відірваність" прикладної програми від
фізичної пам'яті. Програміст, що відладжує програму захищеного режиму
(наприклад, додаток Windows), може легко заглянути в сегментні регістри і
визначити селектори, виділені програмі. Проте селектори абсолютно нічого не
говорять про фізичні адреси, використовувані програмою. Фізичні адреси
знаходяться в таблицях дескрипторів, а ці таблиці недоступні прикладній програмі.
Таким чином, програміст не знає, де в пам'яті знаходиться його програма або
використовувані нею області даних.
З іншого боку, використання в процесі перетворення адрес захищених
системою таблиць має свої переваги. Зазвичай багатозадачна операційна система
створює для кожного виконуваного завдання свій набір таблиць перетворення адрес.
Це дозволяє кожному із завдань використовувати весь діапазон віртуальних адрес,
при цьому, хоча для різних завдань віртуальні адреси можуть збігатися (і, як
правило, принаймні частково збігаються), проте сегментне і сторінкове
перетворення забезпечують виділення для кожного завдання неспівпадаючих
областей фізичної пам'яті, надійно ізолюючи віртуальні, адресні простори завдань
один від одного.
Повернемося тепер до таблиць дескрипторів і розглянемо їх детальніше. Існує
два типи дескрипторних таблиць: таблиця глобальних дескрипторів (GDT від Global
Descriptor Table) і таблиці локальних дескрипторів (LDT від Local Descriptor Table)
.обично для кожної з цих таблиць в пам'яті створюються окремі сегменти, хоча в
принципі це не обов'язково. Таблиця глобальних дескрипторів існує в єдиному
екземплярі і зазвичай належить операційній системі, а локальних таблиць може бути
багато (це типово для багатозадачного режиму, в якому кожному завданню
призначається своя локальна таблиця).
Віртуальний адресний простір ділиться на дві рівні половини. До однієї половини
звернення відбувається через GDT, до іншої половини через LDT. Як вже
наголошувалося, весь віртуальний простір складається з 214 сегментів, з яких 213
сегментів адресуються через GDT, і ще 213 - через LDT.
Коли багатозадачна система перемикає завдання, глобальна таблиця залишається
незмінною, а поточна локальна таблиця замінюється на локальну таблицю нового
завдання. Таким чином, половина віртуального простору в принципі доступна всім
завданням в системі, а половина перемикається від одного завдання до іншої у міру
перемикання самих завдань.
Для програмування захищеного режиму і навіть для відладки прикладних
програм, що працюють в захищеному режимі, корисно уявляти собі структуру
дескриптора і сенс його окремих полів. Слід відмітити, що існує декілька типів
дескрипторів, яким властиві різні формати. Так, дескриптор сегменту пам'яті
(найбільш поширений тип дескриптора) відрізняється від дескриптора шлюзу,
використовуваного, зокрема, для обслуговування переривань. Розглянемо формат
дескриптора пам'яті (див. рис. 6).

Рис. 6 – Формат дескриптора пам'яті

Як видно з малюнка, дескриптор займає 8 байт. У байтах 2...4 і 7 записується


лінійна базова адреса сегменту. Повна довжина базової адреси - 32 битий. У байтах
0-1 записуються молодші 16 біт межі сегменту, а в молодших чотири біта байта
атрибутів 2 - біти, що залишилися, 16...19. Межею сегменту називається номер його
останнього байта. Ми бачимо, що межа описується 20-у бітами, і її чисельне
значення не може перевищувати 1м. Проте, одиниці, в яких задається межа, можна
змінювати, що здійснюється за допомогою біта дробу G (біт 7 байта атрибутів 2).
Якщо G=0, межа указується в байтах; якщо 1 - в блоках по 4 Кбайт. Таким чином,
розмір сегменту можна задавати з точністю до байта, але тоді він не може бути
більше 1 Мбайт; якщо ж встановити G=l, то сегмент може досягати 4 Гбайт, проте
його розмір буде кратний 4 Кбайт. База сегменту і в тому, і в іншому випадку
задасться з точністю до байта.
Розглянемо тепер атрибути сегменту, які займають два байти дескриптора.
Біт A (Accessed, було звернення) встановлюється процесором в той момент, коли в
який-небудь сегментний регістр завантажується селектор даного сегменту. Далі
процесор цей біт не скидає, проте його може скинути програма (зрозуміло, якщо
вона має доступ до вмісту дескриптора, що зазвичай є прерогативою операційної
системи). Аналізуючи біти звернення різних сегментів, програма може судити про
те, чи було звернення до даного сегменту після того, як вона скинула біт А.
Тип сегменту займає 3 битий (іноді біт А включають в полі типу, і тоді тип
займає 4 біт) і може мати 8 значень. Тип визначає правила доступу до сегменту. Так,
якщо сегмент має тип 1, для нього дозволено читання і запис, що характерний для
сегментів даних. Призначивши сегменту тип 0, ми вирішимо тільки читання цього
сегменту, захистивши його тим самим від будь-яких модифікацій. Тип 4 позначає
дозвіл виконання, що характерний для сегментів команд. Використовуються і інші
типи сегментів.
Підкреслимо, що захист сегментів пам'яті від несанкціонованих його типом
дій виконується не програмою, і навіть не операційною системою, а процесором на
апаратному рівні. Так, при спробі запису в сегмент типу 0 виникне так зване
виключення загального захисту. Виключенням називається внутрішнє переривання,
що порушується процесором при виникненні яких-небудь неправильних із його
точки зору ситуацій. Спроба запису в сегмент, для якого запис заборонений, і
відноситься до такого роду ситуаціям. Виключенню загального захисту відповідає
вектор 13, в якому повинна знаходитися адреса обробника цього виключення.
Варто ще звернути увагу на тип 4. Для сегменту команд вирішується тільки
виконання, але не запису і навіть не читання. Це означає, що в захищеному режимі
програма не може випадково залізти в свій сегмент команд і затерти його; не може
вона також і свідомо модифікувати команди в процесі свого виконання - методика,
іноді використовувана в програмах реального режиму для захисту від їх
розшифровки допитливими програмістами 4 біт байта атрибутів 1 є ідентифікатором
сегменту. Якщо він дорівнює 1, як це показано на рисунку 6, дескриптор описує
сегмент пам'яті. Значення цього біта 0 характеризує дескриптор системного
сегменту.
Поле DPL (Descriptor Privilege Level, рівень привілеїв дескриптора) служить
для захисту програм один від одного. Рівень привілеїв може набувати значень від 0
(максимальні привілеї) 3 (мінімальні). Програмам операційної системи зазвичай
призначається рівень 0, прикладним програмам - рівень 3, внаслідок чого
унеможливлюється некоректним програмам зруйнувати операційну систему. З
іншого боку, якщо прикладна програма сама виконує функції операційної системи,
переводячи процесор в захищений режим і працюючи далі в цьому режимі, її
сегментам слід призначити найвищий (нульовий) рівень привілеїв, що відкриє їй
доступ до всіх засобів захищеного режиму.
Біт Р говорить про присутність сегменту в пам'яті. В основному він
використовується для організації віртуальної пам'яті. За допомогою цього біта
система може визначити, чи знаходиться необхідний сегмент в пам'яті, і при
необхідності завантажити його з диска. В процесі вивантаження непотрібного поки
сегменту на диск біт Р в його дескрипторі скидається. Молодша половина байта
атрибутів 2 зайнята старшими бітами межі сегменту.
Біт AVL (від Available, доступний) не використовується і не аналізується
процесором і призначений для використання прикладними програмами.
Біт D (Default, умовчання) визначає розмір, що діє за умовчанням, для
операндів і адрес. Він змінює характеристики сегментів двох типів: виконуваних і
стека. Якщо біт D сегменту команд рівний 0, в сегменті за умовчанням
використовуються 16-бітові адреси і операнди, якщо 1 - 32-бітові.
Атрибут сегменту, що діє за умовчанням, можна змінити на протилежний за
допомогою префіксів заміни розміру операнда (66h) і заміни розміру адреси (67h).
Таким чином, для сегменту з D=0 префікс 66h перед деякою командою примушує її
розглядати свої операнди, як 32-бітові, а для сегменту з D=l той же префікс 66h,
навпаки, зробить операнди 16-бітовими. В деяких випадках транслятор сам включає
в об'єктний модуль необхідні префікси, в інших випадках їх доводиться вводити в
програму "вручну".
Розглянемо тепер для прикладу просту програму, яка, будучи запущена
звичайним способом під управлінням MS-DOS, перемикає процесор в захищений
режим, виводить на екран для контролю символ, переходить назад в реальний
режим (щоб не вивести комп'ютер з рівноваги) і завершується стандартним для DOS
образом.
Для того, щоб наша програма могла б хоч щось зробити в захищеному режимі,
для неї необхідно створити середовище захищеного режиму, насамперед, таблицю
глобальних дескрипторів з описом всіх сегментів, з якими програма працюватиме.
Окрім нас ніхто цю таблицю (при роботі в DOS) не створить. Таким чином, наша
програма в якійсь мірі виконуватиме функції операційної системи захищеного
режиму.
Для практичного дослідження захищеного режиму доведеться виконати деяку
роботу по переконфігурації комп'ютера. У наш час комп'ютери зазвичай
конфігуруються так, що при їх включенні відразу завантажується система Windows.
Роботи, для яких потрібний DOS, виконуються або в режимі емуляції DOS, або в
сеансі DOS, організовуваному системою Windows. Для запуску прикладної
програми захищеного режиму такий спосіб не годиться. Нам знадобиться DOS в
"чистому вигляді", без слідів Windows. Більш того, перед запуском програми
необхідно вивантажити всі драйвери обслуговування розширеної пам'яті
(HIMEM.SYS і Emm386.EXE) і програми, що використовують розширену пам'ять,
наприклад, SMARTDRV.EXE. Краще всього завантажувати DOS з системної
дискети, підготувавши файли CONFIG.SYS і AUTOEXEC.BAT у мінімальному
варіанті.
СРС №40

Тема: Елементи каталогів і таблиць сторінкових перетворень

Технологія віртуальної пам'яті


Поняття віртуальної пам’яті
Віртуальна пам’ять – технологія, в якій вводиться рівень додаткових
перетворень між адресами пам'яті, використовуваних процесом, і адресами фізичної
пам'яті комп'ютера. Перетворення забезпечують захист пам'яті та відсутність
прив'язки процесу до адрес фізичної пам'яті.
Завдяки віртуальній пам'яті фізична пам'ять адресного простору процесу може
бути фрагментованою, оскільки основний обсяг пам'яті, яку займає процес, більшу
частину часу залишається вільним. Адреси можна переміщати так, щоб основній
пам'яті відповідали тільки ті розділи адресного простору процесу, які
використовуються у конкретний момент.
Невикористовувані розділи адресного простору ставляться у відповідність
повільнішій пам'яті (простору на жорсткому диску), а в цей час інші процеси
використовують основну пам'ять. Коли ж розділ знадобиться, його дані
завантажують з диска в основну пам'ять. Дані зчитуються з диска в основну пам'ять
під час звертання до них.
У такий спосіб можна збільшити розмір адресного простору процесу і
забезпечити виконання процесів, що за розміром перевищують основну пам'ять.

Логічна і фізична адресація пам'яті


Логічна або віртуальна адреса — адреса, яку генерує програма, запущена на
деякому процесорі. Адреси, що використовують інструкції конкретного процесора, є
логічними адресами. Сукупність логічних адрес становить логічний адресний
простір.
Фізична адреса - адреса, якою оперує мікросхема пам'яті. Прикладна програма
в сучасних комп'ютерах не має справи з фізичними адресами. Спеціальний
апаратний пристрій MMU (memory management unit - пристрій керування пам'яттю)
відповідає за перетворення логічних адрес у фізичні. Сукупність усіх доступних
фізичних адрес становить фізичний адресний простір.

Сегментація пам'яті
Особливості сегментації пам'яті
Сегментація пам'яті зображає логічний адресний простір як сукупність
незалежних блоків змінної довжини, які називають сегментами. Кожен сегмент
містить дані одного призначення.
Кожен сегмент має ім'я і довжину. Логічна адреса складається з номера
сегмента і зсуву всередині сегмента; з такими адресами працює прикладна програма.
Компілятори створюють окремі сегменти для різних даних програми (сегмент
коду, сегмент даних, сегмент стека). Під час завантаження програми у пам'ять
створюють таблицю дескрипторів сегментів процесу, кожний елемент якої
відповідає одному сегменту і складається із базової адреси, значення межі та прав
доступу.
Під час формування адреси її сегментна частина вказує на відповідний
елемент таблиці дескрипторів сегментів процесу.
Якщо зсув більший, ніж задане значення межі (або якщо права доступу
процесу не відповідають правам, заданим для сегмента), то апаратне забезпечення
генерує помилку. Коли ж усе гаразд, сума бази і зсуву в разі чистої сегментації дасть
у результаті фізичну адресу в основній пам'яті. Якщо сегмент вивантажений на диск,
спроба доступу до нього спричиняє його завантаження з диска в основну пам'ять.
Кожному сегменту відповідає неперервний блок пам'яті такої самої довжини,
що перебуває в довільному місці фізичної пам'яті або на диску.
Переваги сегментації пам'яті:
1. Є можливість організувати кілька незалежних сегментів пам'яті для процесу і
використати їх для зберігання даних різної природи. Права доступу до
кожного такого сегмента можуть бути задані по-різному.
2. Окремі сегменти можуть спільно використовуватися різними процесами, їхні
таблиці дескрипторів сегментів повинні містити однакові елементи, що
описують такий сегмент.
3. Фізична пам'ять процесу не обов'язково має бути неперервною. Сегментація
дає змогу окремим частинам адресного простору процесу відображатися не в
основну пам'ять, а на диск, і довантажуватися з нього за потребою,
забезпечуючи виконання процесів будь-якого розміру.
Недоліки:
1. Необхідність введення додаткового рівня перетворення пам'яті знижує
продуктивності. Для ефективної реалізації сегментації потрібна апаратна
підтримка.
2. Керування блоками пам'яті змінної довжини з урахуванням необхідності
їхнього збереження на диску може бути складним.
3. Вимога, щоб кожному сегменту відповідав неперервний блок фізичної пам'яті
відповідного розміру, спричиняє зовнішню фрагментацію пам'яті.
Внутрішньої фрагментації у цьому разі не виникає, оскільки сегменти мають
змінну довжину і завжди можна виділити сегмент довжини, необхідної для
виконання програми.
Сегментацію застосовують обмежено через фрагментацію і складність
реалізації ефективного звільнення пам'яті та обміну з диском.

Реалізація сегментації в архітектурі ІА-32


В архітектурі ІА-32 логічні адреси в програмі формуються з використанням
сегментації і мають такий вигляд:“селектор-зсув”. Значення селектора завантажують
у спеціальний регістр процесора (сегментний регістр) і використовують як індекс у
таблиці дескрипторів сегментів, що перебуває в пам'яті та є аналогом таблиці
сегментів. В архітектурі ІА-32 підтримуються шість сегментних регістрів.
Селектор містить індекс дескриптора в таблиці, біт індикатора локальної або
глобальної таблиці та необхідний рівень привілеїв.
Для системи задають спільну глобальну таблицю дескрипторів (Global
Descriptor Table, GDT), а для кожної задачі - локальну таблицю дескрипторів (Local
Descriptor Table, LDT).
Дескриптори в ІА-32 мають довжину 64 біти. Вони визначають властивості
програмних об'єктів (наприклад, сегментів пам'яті або таблиць дескрипторів).
Дескриптор містить значення бази, яке відповідає адресі об'єкта (початок
сегмента); значення межі; тип об'єкта (сегмент, таблиця дескрипторів тощо);
характеристики захисту.
Звертання до таблиць дескрипторів підтримується апаратно. Якщо задані в
дескрипторі характеристики захисту не відповідають рівню привілеїв, визначеному
селектором, отримати доступ до пам'яті за його допомогою буде неможливо. Так
забезпечують захист пам'яті.
Для архітектури ІА-32 внаслідок перетворення логічної адреси отримують не
фізичну адресу, а вид адреси, який називають лінійною адресою.
Сторінкова організація пам'яті
До основних технологій реалізації віртуальної пам'яті належить сторінкова
організація пам'яті. Її головна ідея — розподіл пам'яті блоками фіксованої довжини,
що називають сторінками.

Базові принципи сторінкової організації пам'яті


Фізичну пам'ять розбивають на блоки фіксованої довжини — фрейми, або
сторінкові блоки. Логічну пам'ять, у свою чергу, розбивають на блоки такої самої
довжини — сторінки. Коли процес починає виконуватися, його сторінки
завантажуються в доступні фрейми фізичної пам'яті з диска або іншого носія.
Сторінкова організація пам'яті має апаратну підтримку. Кожна адреса, яку
генерує процесор, ділиться на дві частини: номер сторінки і зсув сторінки. Номер
сторінки використовують як індекс у таблиці сторінок.
Таблиця сторінок — це структура даних, що містить набір елементів, кожен із
яких містить інформацію про номер сторінки, номер відповідного їй фрейму
фізичної пам'яті (або його базову адресу) та права доступу. Номер сторінки
використовують для пошуку елемента в таблиці. Після його знаходження до базової
адреси відповідного фрейму додають зсув сторінки, чим і визначають фізичну
адресу.
Розмір сторінки є ступенем числа 2, у сучасних ОС використовують сторінки
розміром від 2 до 8 Кбайт. У спеціальних режимах адресації можна працювати зі
сторінками більшого розміру.
Для кожного процесу створюють його власну таблицю сторінок. Коли процес
починає своє виконання, ОС розраховує його розмір у сторінках і кількість фреймів
у фізичній пам'яті. Кожну сторінку завантажують у відповідний фрейм, після чого
його номер записують у таблицю сторінок процесу.
На логічному рівні для процесу вся пам'ять зображується неперервним блоком
і належить тільки цьому процесові, а фізично вона розосереджена по адресному
простору мікросхеми пам'яті, чергуючись із пам'яттю інших процесів. Процес не
може звернутися до пам'яті, адреса якої не вказана в його таблиці сторінок (так
реалізований захист пам'яті).
ОС повинна мати інформацію про поточний стан фізичної пам’яті (про
зайнятість і незайнятість фреймів, їхню кількість тощо). Цю інформацію звичайно
зберігають у таблиці фреймів. Кожен її елемент відповідає фрейму і містить всі
відомості про нього.

Порівняльний аналіз сторінкової організації пам'яті та сегментації


Основні переваги сторінкової організації пам'яті:
1. Реалізація розподілу і звільнення пам'яті спрощується. Усі сторінки з
погляду процесу рівноправні, тому можна підтримувати список вільних сторінок і
при потребі виділяти першу сторінку із цього списку, а після звільнення повертати
сторінку в список. Із сегментами так чинити не можна, оскільки кожен сегмент
використовується лише за його призначенням.
2. Реалізація обміну даними з диском спрощується. Для організації обміну
ділянка на диску, яку використовують для зберігання інформації про сторінки,
вивантажені з пам'яті може бути теж розбита на блоки фіксованого розміру, рівного
розмірові фрейму.
Сторінкова організація пам'яті має недоліки:
1. Цей підхід спричиняє внутрішню фрагментацію, пов'язану з тим, що розмір
сторінки завжди фіксований, і при потребі виділення блоку пам'яті конкретної
довжини його розмір буде кратним розміру сторінки. У середньому розмір
невикористовуваної пам'яті становить приблизно половину сторінки для
кожного виділеного блоку пам’яті. Така фрагментація може бути знижена
зменшенням кількості та збільшенням розміру блоків, що виділяються.
2. Таблиці сторінок мають бути більші за розміром, ніж таблиці сегментів.

Багаторівневі таблиці сторінок


Щоб адресувати логічний адресний простір значного обсягу за допомогою
однієї таблиці сторінок, її роблять великою.
Щоб уникнути великих таблиць, запропоновано технологію багаторівневих
таблиць сторінок. Таблиці сторінок самі розбиваються на сторінки, інформацію про
які зберігають в таблиці сторінок верхнього рівня. Кількість рівнів рідко перевищує
2, але може доходити й до 4.
Логічну адресу розбивають на індекс у таблиці верхнього рівня, індекс у
таблиці нижнього рівня і зсув.
Дві основні переваги. 1)Таблиці сторінок стають менші за розміром, пошук у
них можна робити швидше. 2)Не всі таблиці сторінок мають перебувати в пам'яті у
конкретний момент часу. Якщо процес не використовує якийсь блок пам'яті, то
вміст усіх сторінок нижнього рівня невикористовуваного блоку може бути
тимчасово збережений на диску.

Реалізація таблиць сторінок в архітектурі ІА-32


Таблицю верхнього рівня називають каталогом сторінок, для кожної задачі
має бути заданий окремий каталог сторінок, фізичну адресу якого зберігають у
спеціальному керуючому регістрі сrЗ і куди він автоматично завантажується
апаратним забезпеченням при перемиканні контексту. Таблицю нижнього рівня
називають просто таблицею сторінок. Лінійна адреса поділяється на три поля:
1. каталогу (Directory) — визначає елемент каталогу сторінок, що вказує на
потрібну таблицю сторінок;
2. таблиці (Table) — визначає елемент таблиці сторінок, що вказує на потрібний
фрейм пам'яті;
3. зсуву (Offset) — визначає зсув у межах фрейму, що у поєднанні з адресою
фрейму формує фізичну адресу.
Розмір полів каталогу і таблиці становить 10 біт, що дає таблиці сторінок, які
містять 1024 елементи, розмір поля зсуву — 12 біт, що дає сторінки і фрейми
розміром 4 Кбайт.
Одна таблиця сторінок нижнього рівня адресує 4 Мбайт пам'яті (1 Мбайт
фреймів), а весь каталог сторінок - 4 Гбайт.
Елементи таблиць сторінок всіх рівнів мають однакову структуру. Поля
елемента:
1. прапорець присутності (Present), дорівнює одиниці, якщо сторінка перебуває у
фізичній пам'яті (їй відповідає фрейм); рівність цього прапорця нулю означає,
що сторінки у фізичній пам'яті немає;
2. 20 найбільш значущих бітів, які задають початкову адресу фрейму, кратну 4
Кбайт;
3. прапорець доступу (Accessed), який рівний одиниці під час кожного звертання
пристрою сторінкової підтримки до відповідного фрейму;
4. прапорець зміни (Dirty), який рівний одиниці під час кожної операції запису у
відповідний фрейм;
5. прапорець читання-запису (Read/Write), що задає права доступу до цієї
сторінки або таблиці сторінок (для читання і для запису або тільки для
читання);
6. прапорець привілейованого режиму (User/Supervisor), який визначає режим
процесора, необхідний для доступу до сторінки. Якщо цей прапорець
дорівнює нулю, сторінка може бути адресована тільки із привілейованого
режиму, якщо одиниці – доступна також і з режиму користувача;
Прапорці присутності, доступу і зміни можна використовувати ОС для
організації віртуальної пам'яті.

Асоціативна пам'ять
Для підвищення продуктивності у разі сторінкової організації пам'яті
запропоновано технологію асоціативної пам'яті або кеша трансляції. У
швидкодіючій пам'яті (швидшій, ніж основна пам'ять) створюють набір із кількох
елементів (різні архітектури відводять під асоціативну пам'ять від 8 до 2048
елементів. Кожен елемент кеша трансляції відповідає одному елементу таблиці
сторінок.
Під час генерування фізичної адреси спочатку відбувається пошук
відповідного елемента таблиці в кеші (за полем каталогу, полем таблиці та зсуву), і
якщо він знайдений, стає доступною адреса відповідного фрейму, що негайно
можна використати для звертання до пам'яті. Якщо ж у кеші відповідного елемента
немає, то доступ до пам'яті здійснюють через таблицю сторінок, а після цього
елемент таблиці сторінок зберігають в кеші замість найстарішого елемента.

Сторінково-сегментна організація пам’яті


Базові принципи
Для того щоб об’єднати переваги обох підходів, у деяких апаратних
архітектурах (зокрема, в ІА-32) використовують комбінацію сегментної та
сторінкової організації пам'яті. За такої організації перетворення логічної адреси у
фізичну відбувається за три етапи:
1. У програмі задають логічну адресу із використанням сегмента і зсуву.
2. Логічну адресу перетворюють у лінійну (віртуальну) адресу за правилами,
заданими для сегментації.
3. Віртуальну адресу перетворюють у фізичну за правилами, заданими для
сторінкової організації.
Таку архітектуру називають сторінково-сегментною організацією пам'яті.

Перетворення адрес в архітектурі ІА-32


Машинна мова архітектури ІА-32 оперує логічними адресами. Логічна адреса
складається із селектора і зсуву.
Лінійна або віртуальна адреса — це ціле число без знака розміром 32 біти. За
його допомогою можна дістати доступ до 4 Гбайт комірок пам'яті. Перетворення
логічної адреси в лінійну відбувається всередині пристрою сегментації за правилами
перетворення адреси на базі сегментації.
Фізичну адресу використовують для адресації комірок пам'яті в мікросхемах
пам'яті. Її теж зображають 32-бітовим цілим числом без знака. Перетворення
лінійної адреси у фізичну відбувається всередині пристрою сторінкової підтримки за
правилами для сторінкової організації пам'яті (лінійну адресу розділяють
апаратурою на адресу сторінки і сторінковий зсув, а потім перетворюють у фізичну
адресу із використанням таблиць сторінок, кеша трансляції тощо).

Керування основною пам'яттю в ОС Windows


Сторінкова адресація у Windows
Під час роботи з лінійними адресами у Windows ХР використовують
дворівневі таблиці сторінок. У кожного процесу є свій каталог сторінок, кожен
елемент якого вказує на таблицю сторінок. Таблиці сторінок усіх рівнів містять по
1024 елементи таблиці сторінок, кожний такий елемент вказує на фрейм фізичної
пам'яті. Фізичну адресу каталогу сторінок зберігають у блоці KPROCESS.
Розмір лінійної адреси, з якою працює система, становить 32 біти. З них 10 біт
відповідають адресі в каталозі сторінок, ще 10 — це індекс елемента в таблиці,
останні 12 біт адресують конкретний байт сторінки (і є зсувом).
Розмір елемента таблиці сторінок теж становить 32 біти. Перші 20 біт
адресують конкретний фрейм, а інші 12 біт описують атрибути сторінки (захист,
стан сторінки в пам'яті, який файл підкачування використовує). Якщо сторінка не
перебуває у пам'яті, то в перших 20 біт зберігають зсув у файлі підкачування.
Для визначення розміру сторінки у Win32 АРІ використовують функцію
отримання інформації про систему GetSystemlnfo():
SYSTEM_INF0 info;
// структура для отримання інформації про систему
GetSystemlnfo(&info);
ргіntf("Розмір сторінки: %d\n", info.dwPageSize);

Особливості адресації процесів і ядра


Лінійний адресний простір процесу поділяється на дві частини: перші 2 Гбайт
адрес доступні для процесу в режимі користувача і є його захищеним адресним
простором; інші 2 Гбайт адрес доступні тільки в режимі ядра і відображають
системний адресний простір. Деякі версії дають можливість задати співвідношення
3 Гбайт/1 Гбайт під час завантаження системи.
Структура адресного простору процесів і ядра
В адресному просторі процесу можна виділити такі ділянки:
1. перші 64 Кбайт — це спеціальна ділянка, доступ до якої завжди спричиняє
помилки;
2. усю пам'ять між першими 64 Кбайт і останніми 136 Кбайт (майже 2 Гбайт)
може використовувати процес під час свого виконання;
3. далі розташовані два блоки по 4 Кбайт: блоки оточення потоку (ТЕВ) і
процесу (РЕВ);
4. наступні 4 Кбайт - ділянка пам'яті, куди відображаються різні системні дані
(системний час, значення лічильника системних годин, номер версії системи),
тому для доступу до них процесу не потрібно перемикатися в режим ядра;
5. останні 64 Кбайт використовують для запобігання спробам доступу за межі
адресного простору процесу (спроба доступу до цієї пам'яті дасть помилку).

Системний адресний простір містить такі ділянки:


1. Перші 512 Мбайт системного адресного простору використовують для
завантаження ядра системи.
2. 4 Мбайт пам'яті виділяють під каталог сторінок і таблиці сторінок процесу.
3. Спеціальну ділянку пам'яті розміром 4 Мбайт, яку називають гіперпростором,
використовують для відображення різних структур даних, специфічних для
процесу, на системний адресний простір.
4. 512 Мбайт виділяють під системний кеш.
5. У системний адресний простір відображаються спеціальні ділянки пам'яті —
вивантажуваний пул і невивантажуваний пул.
6. Приблизно 4 Мбайт у кінці системного адресного простору виділяють під
структури даних, необхідні для створення аварійного образу пам'яті, а також
для структур даних.
СРС №41

Тема: Сегмент стану задачі TSS

Сегмент стану завдання TSS (Task State Segment) - це структура даних, яка
визначає стан (тобто контекст) завдання. У ній зберігається вміст всіх регістрів
загального призначення, сегментних і деяких системних регістрів а також деяка
додаткова інформація.
Для кожного завдання в системі потрібно визначити один сегмент TSS і далі
процесор буде сам використовувати ці сегменти завдань, тобто структура TSS
підтримується апаратно.
TSS бувають двох типів - 16- і 32-розрядні. 16-розрядні з'явилися в процесорі
i286 і вони можуть використовуватися в 32-розрядних процесорах, але ми їх
розглядати не будемо, тому що програмування Intel286 тут не розглядається.
32-розрядні TSS з'явилися в процесорі Intel386, з тих пір вони не зазнали змін і
на них будується механізм мультизадачности будь ОС захищеного режиму. Скрізь
далі, де ми будемо говорити про TSS, саме такі, 32-розрядні, і будуть матися на
увазі.
На рисунку 1 наведена структура 32-розрядного TSS:

Рис. 1 – Структура TSS


Як бачите, велика частина полів призначена для зберігання вмісту регістрів
загального призначення і сегментних регістрів. Інші поля:
Link (зміщення 0) - це поле зворотного зв'язку. Коли процесор перемикається з
одного завдання на інше, він записує в це поле інформацію про попередній задачі,
щоб "знати", куди йому повертати управління після того, як ця задача відпрацює.
SSi: ESPi (i = 0,1,2) - це пари значень покажчика на стек для різних рівнів
привілеїв - 0, 1 і 2. Завдання можна викликати з різних рівнів привілеїв і для
коректної роботи потрібно поділ стека. Робота з цими полями - окрема тема і поки
ми використовувати їх не будемо.
CR3 (зміщення 1Ch) - це вміст регістра CR3 для даної задачі. Як ви пам'ятаєте,
CR3, він же PDBR, визначає параметри каталогу сторінок. Те, що кожна задача має в
своєму TSS поле CR3 означає, що кожна задача може мати свій "особистий" набір
сторінок і працювати за своєю власною схемою сторінкового перетворення. Однак,
на практиці, зручніше використовувати одне значення для всіх CR3 - це підвищує
надійність і захищеність системи.
LDTR (зміщення 60h) - це селектор дескриптора LDT, який використовується
цим завданням. Якщо завданню не потрібна LDT, то в цьому полі зберігається 0 -
ось тут проявляється сенс умови, за яким нульовий дескриптор в GDT не
використовується - нульовий селектор означає відсутність цього селектора. Якщо
LDT використовується, то завдання може мати свій власний набір дескрипторів.
T (0-й біт по зсуву 64h) - прапор трасування, застосовується для налагодження
завдань, процесор його тільки зчитує. Якщо цей прапор встановлений, то при
перемиканні на це завдання процесор генерує виняток налагодження (переривання
1). Цей прапор також може бути корисний у системах, що використовують FPU
(співпроцесор), MMX і XMM. Як ви помітили, в TSS немає полів для значень
регістрів цих модулів, тому для збереження і завантаження контексту цих пристроїв
потрібно додаткові зусилля з боку операційної системи.
I/O Map (зміщення 66h) - це адреса карти введення виведення, точніше -
зміщення її початку від початку TSS. Кожна задача може мати таку карту, в якій
кожен біт визначає можливість доступу до конкретного порту - встановлено - немає
доступу, скинутий - є. Таким чином реалізується захист на рівні доступу до портів
введення / виводу. Детальніше про це - у розділі 5.
Додаткова частина TSS (починаючи зі зміщення 68h) - це та частина TSS, яка
передбачається програмістом при створенні даної задачі. Тут повинна зберігатися
карта вводу / виводу (якщо вона є), тут також може бути контекст FPU, MMX і
XMM та інша інформація, залежно від конкретної реалізації ОС. Процесор
безпосередньо звертається тільки до карти введення / виводу, до решти інформації
він явно не звертається і на розмір цій частині не накладається особливих обмежень
(тобто не більше 1Мб).
TSS визначається спеціальним дескриптором. Такий дескриптор є системним
об'єктом і може знаходитися тільки в GDT (в LDT - не можна), а це означає, що
завдання самостійно не може визначати для себе інші завдання в LDT і для
операційної системи є умови для контролю завдань.
Формат дескриптора TSS наступний:

dw limit_low; Молодша частина межі


dw address_low; Молодша частина адреси
db address_mid; 3-й (з 4-х) байт адреси
db access_rights; Права доступу
db limit_hi; Старша частина межі
db address_hi; Старший байт адреси

Примітка 1:
Байт прав доступу access_rights має наступний формат:

біт: опис
0: = 1
1: Біт B (Busy) - зайнятість завдання (див. Наступну главу)
2: = 1
3: = 0
4: = 0
5,6: = DPL - Рівень привілеїв сегмента TSS (див. Наступну главу)
7: P - біт присутності сегмента, зазвичай встановлений в 1.

Примітка 2:
Старша частина межі limit_hi має такий формат:

біт: опис
0..3: Старші 4 біта межі
4: Біт U (User) - цей біт ОС може використовувати в своїх цілях
5..7: = 0
Для наочності формат дескриптора TSS наведено на рисунку 2.

Рис.2 – Формат дескриптора TSS

Дескриптор TSS визначає сегмент стану задачі. Цей дескриптор описує


системний об'єкт, тому біт S в ньому дорівнює 0 (це 44-й біт дескриптора або 4-й біт
прав доступу). Те, що дескриптор описує системний об'єкт означає, що
безпосередньо користуватися цим об'єктом може тільки процесор, але не програма -
будь-яка спроба завантаження селектора цього дескриптора в сегментний регістр
викличе генерацію виключення загального захисту (#GP - переривання 0Dh).
Як вже говорилося в попередньому розділі, в локальній дескрипторній таблиці
LDT не можна використовувати деякі системні об'єкти. Т.к. дескриптори LDT і TSS
є такими об'єктами, то їх не можна застосовувати в LDT, інакше при зверненні до
них буде генеруватися винятку. Сенс такого обмеження полягає в тому, що задачі
заборонено визначати завдання всередині себе і встановлювати додаткові
дескрипторного таблиці і таким чином, ці дії може виконувати тільки ядро ОС.
Зверніть увагу на те, що в сегменті стану завдання немає полів для регістрів
модулів FPU, MMX і XMM. Справа в тому, що не всяка задача працює з будь-яким з
цих модулів і наявність додаткових полів сповільнило б перемикання завдання.
Сегмент TSS і так досить великий, до того ж поля з нього завантажуються по
одному - процесор виконує перевірку параметрів значень кожного сегментного та
системного регістра.
Якщо в системі декілька завдань використовує FPU, MMX і / або XMM, то при
зміні завдань необхідно міняти контекст відповідного модуля. Процесор
автоматично цього не робить, зате він створює умови для операційної системи,
дозволяючи їй доповнити контекст завдання, наприклад, зберегти стан FPU, що
використовується старої завданням і завантажити в FPU значення, використовувані
новим завданням.
СРС №42

Тема: Формат команд FPU, MMX, 3DNow, SIMD

Для команд FPU існує п’ять різних форматів кодування (див. рис. 1). Всі ці
формати ідентичні в одному – в старших п’яти бітах двобайтного кода команди FPU
завжди містять спеціальне значення 11011b. По цьому значенню процесор розпізнає
команди FPU.

Рис. 1 – Формати команд FPU

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


MF — формат комірки пам’яті:
 00 – 32-бітне речове;
 01 – 32-бітне ціле;
 10 – 64-бітне речове;
 11 – 16-бітне ціле.
P — витягання зі стеку:
 0 – не витягувати із стека;
 1 – витягувати зі стека.
d — призначення:
 0 – ST(0);
 1 – ST(i).
R — напрям операції:
 R XOR d = 0 — "Призначення" операція "Джерело";
 R XOR d = 1 — "Джерело" операція "Призначення".
ST(i) — елемент регістрового стека:
 000 – вершина стека;
 ...
 111 – восьмий елемент стека.
OPA — перша частина кода операції.
OPB — друга частина кода операції.

Поля mod, r / m і SIB кодуються також, як і для базових команд процесора


(див. Вище). Байт SIB і поле зміщення можуть бути присутніми в командах, де
присутні і певним чином закодовані поля mod і r / m.
Формат кодування MMX-команд (окрім команди EMMS) ідентичний базовому
формату команди процесора. Деяка різниця пов’язана з кодуванням полів reg і r / m
байта ModR / M.
Коли MMX-команди використовують в якості операндів MMX-регістри, то
поле reg байта ModR / M інтерпретується наступним чином:
 000 – MM0;
 001 – MM1;
 …
 111 – MM7.
Якщо ж у операндах команди присутній регістр загального призначення, то
він кодується в поле r / m байта ModR / M наступним чином:
 000 – EAX;
 001 – ECX;
 010 – EDX;
 011 – EBX;
 100 – ESP;
 101 – EBP;
 110 – ESI;
 111 – EDI.
Якщо в якості операндів команди виступають упаковані дані, спеціальне поле
"гранулярность" (gg) визначається в бітах 0 і 1 другого байта коду операції.
Значення цього поля інтерпретуються наступним чином:
 00 – упаковані байти;
 01 – упаковані слова;
 10 – упаковані подвійні слова;
 11 – квадро слово.

Формат 3DNow!-комад ґрунтується на базовому форматі команд. Усі ці


команди використовують один двобайтном код операції 0Fh 0Fh (крім FEMMS і
PREFETCH), а конкретна команда розпізнається за спеціальним однобайтним
суфіксом в кінці коду команди. Можуть бути присутні також стандартний ModR / M
байт, SIB байт і зсув. Таким чином, повний формат 3DNow!-комад виглядає так:

0Fh OFh ModR/M [SIB] [disp] 3DNow!-suffics

Кодування MMX-регістрів - операндів команди, проводиться в ModR / M байті


також, як це робиться в MMX-командах.
Формат SIMD-Комада ґрунтується на базовому форматі команд. Ці команди
використовують кілька байт для коду операції з першим байтом рівним 0Fh.
Кодування операндів команди виробляється в ModR / M байті. Якщо в якості
операндів використовуються SIMD-регістри XMM0, ... XMM7, то їх кодування
виробляється в поле regтакже, як відбувається кодування MMX-регістрів MM0, ...
MM7 в MMX-командах. Якщо в якості операнда команди використовується
значення в пам'яті або в регістрі загального призначення, то його кодування
виробляється в поле r / m байта ModR / M звичайним чином.
СРС №43

Тема: Техніка модульного програмування

Модульне програмування – парадигма програмування, основна ідея полягає в:


1. реалізації обчислювальних процесів у вигляді окремих програмних одиниць -
модулів;
2. звертанні до цих модулів в інших програмах з передачею даних, необхідних
для обчислювального процесу.

Модульне програмування дозволяє зменшити обсяг вихідних текстів програм,


зробити їх прозорішими, прискорити написання і тестування програм, зменшити
витрати на супровід (експлуатацію) програм.
1. Класи пам'яті ідентифікатора
З кожним об'єктом пам'яті змінної пов'язані такі поняття: область дії, область
видимості і тривалість життя. Ці три поняття об'єднуються в поняття клас пам'яті
змінної. Клас пам'яті встановлюється синтаксисом і місцем розміщення визначення
цієї змінної.
Специфікатор класу пам'яті в оголошенні змінної може бути auto, register,
static або extern. Якщо клас пам'яті не зазначений, то він визначається за
замовчуванням з контексту оголошення.
Об'єкти класів auto і register мають локальний час життя. Специфікатор static і
extern визначають об'єкти з глобальним часом життя. При оголошенні змінної на
внутрішньому рівні може бути використаний будь-який з чотирьох специфікатором
класу пам'яті, а якщо він не вказаний, то мається на увазі клас пам'яті auto.
Змінна з класом пам'яті auto має локальний час життя і видно лише в блоці, в
якому оголошена. Пам'ять для такої змінної виділяється при вході в блок і
звільняється при виході з блоку. При повторному вході в блок цієї змінної може
бути виділений іншу ділянку пам'яті. Змінна з класом пам'яті auto автоматично не
ініціалізується. Вона повинна бути проініціалізувати явно при оголошенні шляхом
присвоєння їй початкового значення. Значення неініціалізованої змінної з класом
пам'яті auto вважається невизначеним.
Специфікатор класу пам'яті register наказує компілятору розподілити пам'ять
для змінної в регістрі, якщо це є можливим. Використання реєстрової пам'яті
зазвичай призводить до скорочення часу доступу до змінної. Змінна, оголошена з
класом пам'яті register, має ту ж область видимості, що і мінлива auto. Число
регістрів, які можна використовувати для значень змінних, обмежена можливостями
комп'ютера, і в тому випадку, якщо компілятор не має в розпорядженні вільних
регістрів, то перемінної виділяється пам'ять як для класу auto. Клас пам'яті register
може бути вказаний тільки для змінних з типом int або покажчиків з розміром,
рівним розміром int.
Змінні, оголошені на внутрішньому рівні з специфікатором класу пам'яті static,
забезпечую можливість зберегти значення змінної при виході з блоку і
використовувати його при повторному вході до блоку. Така змінна має глобальне
час життя і область видимості всередині блоку, в якому вона оголошена. На відміну
від змінних з класом auto, пам'ять для яких виділяється в стеку, для змінних з класом
static пам'ять виділяється в сегменті даних, і тому їх значення зберігається при
виході з блоку.
Приклад:
/ * Оголошення змінної i на внутрішньому рівні з класом пам'яті static. * /
/ * Вихідний файл file1. c * /
main ()
{...
}
fun1 ()
{Static int i = 0; ...
}
/ * Вихідний файл file2. c * /
fun2 ()
{Static int i = 0; ...
}
fun3 ()
{Static int i = 0; ...
}

У наведеному прикладі оголошені три різні змінні з класом пам'яті static, що


мають однакові імена i. Кожна з цих змінних має глобальне час життя, але видима
тільки в тому блоці (функції), в якій вона оголошена. Ці змінні можна
використовувати для підрахунку кількості звернень до кожної з трьох функцій.
Змінні класу пам'яті static можуть ініціалізувати константним виразом. Якщо
явною ініціалізації немає, то такій зміній присвоюється нульове значення. При
ініціалізації константним адресним виразом можна використовувати адреси будь-
яких зовнішніх об'єктів, крім адрес об'єктів з класом пам'яті auto, оскільки адреса
останніх не є константою і змінюється при кожному вході в блок. Ініціалізація
виконується один раз при першому вході в блок.
Змінна, оголошена локально з класом пам'яті extern, є посиланням на змінну з
тим же самим ім'ям, певну глобально в одному з вихідних файлів програми. Мета
такого оголошення у тому, щоб зробити визначення змінної глобального рівня
дивись всередині блоку.
Приклад:
/ * Оголошення змінної i, що є ім'ям зовнішнього масиву довгих цілих чисел, на
локальному рівні * /
/ * Вихідний файл file1. c * /
main ()
{...
}
fun1 ()
{Extern long i []; ...
}
/ * Вихідний файл file2. c * /
long i [MAX] = {0};
fun2 ()
{...
}
fun3 ()
{...
}
Оголошення змінної i [] як extern у наведеному прикладі робить її видимою
всередині функції fun1. Визначення цієї змінної знаходиться у файлі file2. c на
глобальному рівні і має бути лише одне, в той час як оголошень з класом пам'яті
extern може бути декілька.
Оголошення з класом пам'яті extern потрібно при необхідності
використовувати змінну, описану в поточному вихідному файлі, але нижче по
тексту програми, тобто до виконання її глобального визначення. Наступний приклад
ілюструє таке використання змінної з ім'ям st.
Приклад:
main ()
{Extern int st []; ...
}
static int st [MAX] = {0};
fun1 ()
{...
}
Оголошення змінної з специфікатором extern інформує компілятор про те, що
пам'ять для змінної виділяти не потрібно, так як це виконано десь в іншому місці
програми.
При оголошенні змінних на глобальному рівні може бути використаний
специфікатор класу пам'яті static або extern, а так само можна оголошувати змінні
без вказівки класу пам'яті. Класи пам'яті auto і register для глобального оголошення
неприпустимі.
Оголошення змінних на глобальному рівні - це або визначення змінних, або
посилання на визначення, зроблені в іншому місці програми. Оголошення
глобальної змінної, яке ініціалізує цю змінну (явно чи неявно), є визначенням
змінної. Визначення на глобальному рівні може задаватися в наступних формах:
1. Змінна оголошена з класом пам'яті static. Така змінна може бути
ініціалізований явно константним виразом, або за умовчанням нульовим значенням.
Тобто оголошення static int i = 0 і static int i еквівалентні, і в обох випадках змінної i
буде присвоєно значення 0.
2. Змінна оголошена без вказівки класу пам'яті, але з явною ініціалізацією.
Такій зміній за замовчуванням присвоюється клас пам'яті static. Тобто оголошення
int i = 1 і static int i = 1 будуть еквівалентні. Змінна оголошена глобально видимою у
межах залишку вихідного файлу, в якому вона визначена. Вище свого опису і в
інших вихідних файлах ця змінна невидима (якщо тільки вона не оголошена з
класом extern). Глобальна змінна може бути визначена тільки один раз в межах своєї
області видимості. В іншому вихідному файлі може бути оголошена інша глобальна
змінна з таким же ім'ям і з класом пам'яті static, конфлікту при цьому не виникає,
тому що кожна з цих змінних буде видимою тільки у своєму початковому файлі.
Специфікатор класу пам'яті extern для глобальних змінних використовується, як і
для локального оголошення, в якості посилання на змінну, оголошену в іншому
місці програми, тобто для розширення області видимості змінної. При такому
оголошенні область видимості змінної розширюється до кінця вихідного файлу, в
якому зроблено оголошення.
В оголошеннях з класом пам'яті extern не допускається ініціалізація, так як ці
оголошення посилаються на вже існуючі та визначені раніше змінні.
Змінна, на яку робиться посилання з допомогою специфікатора extern, може бути
визначена тільки один раз в одному з вихідних файлів програми.
1.1 Область дії
Область дії змінної – це частина програми або вихідного модуля, в якій
визначено об’єкт відповідний цієї змінної. Перерахуємо види областей дії.
Блок. Ця область дії починається в точці визначення змінної і закінчується в
кінці блоку, що містить це визначення. Такий блок називається оточуючим. Тіло
функції розглядається як блок.
Функція. Фактично збігається з тілом функції. Такий областю дії мають
формальні аргументи, перераховані в заголовку функції, а також мітки,
використовувані операторами goto.
Файл. Поширяться від точки визначення змінної до кінця файлу. Змінні з
такою областю дії називаються глобальними і повинні визначатися поза всякої
функції. Якщо глобальна змінна визначена наприкінці файлу, то її область дії
фактично порожня і вгору на весь файл не поширюється. Прототип ". Такий
областю дії мають змінні зі списку формальних параметрів прототипу функції.
1.2 Область видимості
Видимість змінних і функцій у програмі визначається наступними правилами.
1. Змінна, оголошена чи певна глобально, видима від точки оголошення або
визначення до кінця вихідного файлу. Можна зробити змінну видимої і в інших
вихідних файлах, для чого в цих файлах слід її оголосити з класом пам'яті extern.
2. Змінна, оголошена чи певна локально, видима від точки оголошення або
визначення до кінця поточного блоку. Така змінна називається локальною.
3. Змінні з осяжний блоків, включаючи змінні оголошені на глобальному рівні,
видимі у внутрішніх блоках. Цю видимість називають вкладеною. Якщо змінна,
оголошена всередині блоку, має те ж ім'я, що й змінна, оголошена в осяжний блоці,
то це різні змінні, і змінна з осяжний блоку у внутрішньому блоці буде невидимою.
4. Функції з класом пам'яті static видимі тільки у вихідному файлі, в якому вони
визначені.
Мітки у функціях видимі протягом всієї функції. Імена формальних
параметрів, оголошені в списку параметрів прототипу функції, видимі тільки від
точки оголошення параметра до кінця оголошення функції.
1.3 Тривалість життя
Час життя змінної (глобальної або локальної) визначається за такими
правилами.
1. Змінна, оголошена глобально (тобто поза всіх блоків), існує протягом усього часу
виконання програми.
2. Локальні змінні (тобто оголошені усередині блоку) з класом пам'яті register або
auto, мають час життя тільки на період виконання того блоку, в якому вони
оголошені. Якщо локальна змінна оголошена з класом пам'яті static або extern, то
вона має час життя на період виконання всієї програми.
СРС №44

Тема: Набір команд MMX

MMX (Multimedia Extensions — мультимедійні розширення) — комерційна


назва додаткового набору інструкцій, що виконують характерні для процесів
кодування / декодування потокових аудіо / відео даних дії за одну машинну
інструкцію. Вперше з'явився в процесорах Pentium MMX. Розроблений у першій
половині 1990-х.
Технологія MMX
MMX розширення реалізоване фірмою Intel у своїй новій серії процесорів
MMX з тактовою частотою 166 і більше МГц.
Процесор Pentium MMX відрізняється від «звичайного» Pentium за шістьма
основними пунктами:
1. додано 57 нових команд обробки даних;
2. збільшено в два рази обсяг внутрішнього кешу (16 кб для команд і стільки ж
— для даних);
3. збільшено обсяг буфера адрес переходу (Branch Target Buffer — BTB),
використовуваного в системі передбачення переходів (Branch Prediction);
4. оптимізована робота конвеєра (Pipeline);
5. збільшено кількість буферів запису (Write Buffers);
6. введено так зване подвійне електроживлення процесора.

Набір з 57 нових команд і є основною відмінністю; інші два — не більше, ніж


супутні зміни. Хоча збільшений об'єм кеш і внутрішніх буферів і оптимізований
конвеєр дещо прискорюють роботу будь-яких застосунків, однак основне
збільшення продуктивності — до 60% — можливо тільки при використанні
програм, що правильно застосовують технологію MMX в обробці даних.
Набір MMX-команд складається з команд пересилки даних, упаковки /
розпаковування, додавання / віднімання, множення, зсуву, порівняння та
порозрядних логічних. Команди упаковки і додавання / віднімання можуть
працювати в двох режимах: звичайному, коли переповнення розрядної сітки
викликає «загортання» (wraparound) значення результату, і спеціальному, коли воно
призводить до обмеження (clipping) результату до мінімально або максимально
допустимого значення. Режим обмеження, в термінології Intel, називається
Saturation (змішування) — в ньому особливо зручно виконувати змішування
кольорів зображення або амплітуд звукових сигналів, оскільки при звичайному
переповненні результат не має ніякого сенсу.
Команда множення представлена трьома видами: перші два виконують
попарне множення чотирьох слів з вибором або старшої, або молодшої частини
результату, а третій виконує операцію виду ab + cd для кожної пари з чотирьох слів
операндів, що дуже зручно при обчисленні математичних рядів.
Команди зсуву реалізують логічний та арифметичний зсув своїх операндів
(арифметичний зсув відрізняється від логічного тим, що при зсуві вправо
звільнилися розряди заповнюються копією знакового розряду, а не нулями, від чого
він придатний для множення / ділення знакових операндів на ступені двійки).
Логічні порозрядні команди виконують операції І (AND), АБО (OR), виключаюче
АБО (XOR), а також комбіновану команду І з інверсією одного з операндів (AND
NOT), зручну для реалізації «зворотного вибору» по бітовій масці.
Команди порівняння працюють дещо незвично в порівнянні із
загальноприйнятою логікою: замість установки ознак для наступних команд
переходу вони генерують одиничні бітові маски для тих операндів, які
задовольняють умові, і нульові — для решти операндів. Наступні логічні порозрядні
операції можуть виділити, погасити або якось інакше обробити відзначені таким
чином операнди, які в цьому випадку можуть являти собою точки зображення або
відліки звукового сигналу.
Список літератури

1. Соломенчук В.Г. Соломенчук П.В. Железо ПК 2007 – СПб.: БХВ-Петербург,


2007. – 496 с.
2. Степаненко О. Сборка, модернизация и ремонт ПК. – М.: Издательский дом
«Вильямс», 2003 – 672 с.
3. Стивен Бигелоу Устройство и ремонт ПК. Пер. с англ. – М.: ООО «Бином-
Пресс», 2007. – 912 с.
4. Злобин В. К., Григорьев В. Л. Программирование арифметических операций в
микропроцессорах: Учеб. пособие для технических вузов. — М.: Высш. шк.,
1991. – 303с.: ил.
5. Мікропроцесорна техніка: Підручник / Ю. І. Якименко, Т. О. Терещенко, Є. І.
Сокол, В. Я. Жуйкою, Ю. С. Петергеря; За ред. Т. О. Терещенко. – 2-ге вид.,
переробл. та доповн. – К.: ІВЦ “Видавництво “Політехніка””; “Кондор”, 2004. –
440 с.
6. Пустоваров В. И. Язык Ассемблер в программировании информационных и
управляющих систем – М.: “ЭНТРОП”, К, “ВЕК”, 1997. – 304 с.
7. Ровдо А. А. Микропроцессоры от 8086 до Pentium III Xeon и AMD-K6-3. – М.:
ДМК, 2000. – 592 с.
8. Корнеев В.В., Киселев А.В. Современные микропроцессоры. – 3-е изд., перераб.
и доп. – СПб.: БВХ-Петербург, 2003 – 448с.: ил.
9. Чистяков В. Д. Анатомия ПК. Все о компьютерном железе/ Чистяков В. Д. – М.:
НТ Пресса, 2007. – 160 с.: ил. – (Спрашивали - отвечали)
10.Тоненбаум Э. С. Архитектура компьютера. 5-е изд. (+CD). – СПб.: Питер, 2007. –
844с.: ил.
11.Бройдо В. Л., Ильина О.П. Архитектура ЭВМ и систем: Учебник для вузов. –
СПб, 2006. – 718 с.: ил.
12.Бабич Н. П., Жуков И. А.Компьютерная схемотехника. Методы построения и
проек-тирования: Учебное пособие. — К.: "МК-Пресс", 2004. — 576 е., ил.
13.Крупник А.Ассемблер. Самоучитель. — СПб.: Питер, 2005. — 235 е.: ил.
14.Магда Ю. С. М12 Ассемблер для процессоров Intel Pentium. — СПб.: Питер,
2006. — 410 с: ил.

You might also like