
- •Мови, рівні і віртуальні машини
- •Сучасні багаторівневі машини
- •Поняття архітектури пк
- •1.4. Розвиток комп’ютерної архітектури
- •Розвиток багаторівневих машин
- •Типи сучасних еом
- •Питання до лекції
- •2.1. Принципи розробки сучасних комп'ютерів
- •2.2. Паралелізм на рівні команд
- •2.3. Конвеєри
- •2.4. Суперскалярні архітектури
- •2.5. Паралелізм на рівні процесорів
- •2.6. Векторні комп'ютери
- •Блок управління
- •2.7. Мультипроцессори
- •2.8. Мультикомпьютери
- •Питання до лекції
- •3. Основи комп’ютерної організації : пам’ять
- •3.1. Ієрархічна структура пам'яті
- •3.2. Загальні відомості про пам'ять
- •3.4. Методи звертання до пам'яті
- •3.5. Модулі пам'яті
- •3.6. Ряди і банки пам'яті
- •3.8. Код з виправленням помилок
- •3. 9. Скільки потрібно пам'яті
- •Питання до лекції
- •4. Цифровий рівень побудови ом
- •4.1. Вентилі і булева алгебра
- •4.2. Булева алгебра
- •4.3. Реалізація булевих функцій
- •4.4. Еквівалентність схем
- •Основні цифрові логічні схеми Інтегральні схеми
- •4.5. Комбінаційні схеми
- •3 Входи і 8 виходів
- •4.6. Арифметичні схеми.
- •4.7. Тактові генератори
- •Питання до лекції
- •Цифровий рівень побудови ом.
- •5. Цифровий логічний рівень архітектури: пам’ять, мікропроцесори
- •5.2. Синхронні sr-защіпки
- •5.3. Синхронні d-защіпки
- •5.4. Тригери (flip-flops)
- •5.5. Регістри
- •5.6. Організація пам'яті
- •Тригер (б)
- •Кожний ряд представляє одне з 3-бітних слів. При операції зчитування і запису завжди зчитується або записується ціле слово
- •5.7. Мікросхеми пам'яті
- •5.9. Мікросхеми процесорів
- •Стрілочки указують вхідні і вихідні сигнали. Короткі діагональні лінії вказують на наявність декількох висновків.
- •Питання до лекції
- •6. Шини
- •6.1. Ширина шини
- •6.2. Синхронізація шини
- •6.3. Синхронні шини
- •6.5. Асинхронні шини
- •6.6. Арбітраж шини
- •6.7. Принципи роботи шини
- •Питання до лекції
- •7. Мікроархітектурний рівень
- •7.1. Приклад мікроархітектури
- •7.2. Тракт даних
- •В цьому розділі
- •Табліця 7.1. Деякі комбінації сигналів аллу і відповідні їм функції
- •7.3. Синхронізація тракту даних
- •7.4. Робота пам'яті.
- •7.5. Мікрокоманди
- •7.6. Управління мікрокомандами: Mic-1
- •7.7. Приклад архітектури команд: ijvm
- •7.8. Модель пам'яті ijvm
- •Питання до лекції
- •8. Рівень архітектури команд
- •8.1. Моделі пам'яті
- •8.2. Загальний огляд рівня архітектури команд
- •8.3. Властивості рівня команд
- •8.4. Регістри
- •8.5. Команди
- •8.6. Загальний огляд рівня команд машини Pentium II
- •8.8. Загальний огляд рівня команд системи ultrasparc II
- •8.9. Загальний огляд віртуальної машини Java
- •8.10. Типи даних
- •8.11. Числові типи даних
- •8.12. Нечислові типи даних
- •8.13. Типи даних процесора Pentium II
- •Підтримувані типи відмічені хрестом (х)
- •8.14. Типи даних машини UltraSparc II
- •8.16. Типи даних віртуальної машини Java
- •8.17. Формати команд
- •Питання до лекції
- •9. Адресація
- •9.1. Способи адресації
- •9.2. Безпосередня адресація
- •9.3. Пряма адресація
- •9.4. Регістрова адресація
- •9.5. Непряма регістрова адресація
- •Лістинг 9.1 - Програма на асемблері для обрахунку суми елементів масиву.
- •9.6. Індексна адресація
- •Листинг 9.2. Програма на мові асемблера для обчислення операції або від (Аі і Ві ) для масиву з 1024 елементів.
- •9.7. Відносна індексна адресація
- •9.8. Стекова адресація
- •9.9. Зворотній польський запис
- •9.10. Обчислення формул в зворотнім польськім записі
- •Питання до лекції
3.2. Загальні відомості про пам'ять
Пам'ять є конвеєром, що поставляє дані процесору і приймає їх від нього. “Звичайна пам'ять”, яка називається оперативною, або пам'яттю з вільним доступом (Random Access Memory – RAM), повинна підтримувати операції читання і запису. У сучасних комп'ютерах використовується оперативна пам'ять двох типів.
- Динамічна оперативна пам'ять (Dynamic RAM – DRAM). У ній дані можуть зберігатися лише незначну частку секунди, після чого вони будуть втрачені. Щоб дані не пропадали, система повинна постійно оновлювати вміст динамічної пам'яті, через що знижується продуктивність і максимально можлива швидкість системи. Звертання до даних у типовій мікросхемі динамічної пам'яті займає звичайно 60 нс.
- Статична оперативна пам'ять (Static RAM – SRAM). Дані в цій пам’яті можуть зберігатися скільки завгодно, поки на мікросхему подається живлення. Це є найшвидший з існуючих видів пам'яті.
У персональних комп'ютерах застосовується багаторівнева архітектура пам'яті, завдяки якій використовуються переваги обох видів пам'яті.
Оперативна пам'ять.
Велику частину пам'яті комп'ютера складає оперативна пам'ять, реалізована на мікросхемах DRAM. Її обсяг звичайно складає від 32 до 256 Мбайт і більше, але вона занадто повільна і не може відповідати вимогам сучасних процесорів. В оперативній пам'яті зберігаються програми і дані, що потрібні процесору. Оперативна пам'ять функціонує як буфер між процесором і диском.
Кеш-пам'ять.
Невеликий об’єм швидкої пам'яті SRAM, що є буфером між процесором і оперативною пам'яттю, називається кеш-пам'яттю.
У сучасних комп'ютерах обов'язково мається хоча б один рівень кеш-пам'яті, найчастіше їх два, а іноді буває і три.
Основна кеш-пам'ять.
Основний кеш, так званий кеш першого рівня (Level 1 або L1 cache) звичайно має об’єм від 16 до 128 Кбайт. Це дуже швидка пам'ять, розташована в мікросхемі процесора. Об’єм і ефективність кеша L1 є найважливішими факторами, що визначають продуктивність процесора. Кількість і тип кеш-пам'яті L1 залежать від процесора, що встановлений у системі, і її параметри не мона змінити , не помінявши процесор.
Вторинна кеш-пам'ять.
Об’єм кеша L1 недостатньо великий, щоб усунути різницю у швидкості між процесором і основною пам'яттю. Вторинний кэш, так званий кеш другого рівня (Level 2 або L2 cache), усуває цей розрив завдяки його середній вартості і середній швидкодії. У системах класу Pentium він розташовується окремо (на материнській платі), а в більш сучасних комп'ютерах – інтегрується в процесор. Обсяг кеша, встановленого на материнській платі, можна збільшити, додавши нові мікросхеми, тоді як інтегрований кеш (у системах Celeron, Pentium ІІ/ІII/4, AMD K6-III/Athlon/Duron) модернізації не підлягає.
В залежності від типу зовнішнього кеша другого рівня, встановленого на материнських платах для процесорів Pentium, модернізація його може здійснюватися в такий спосіб.
А) Окремі мікросхеми SRAM. На старих материнських платах часто можна знайти окремі мікросхеми SRAM, що можуть або вставлятися в роз’єми, або просто припаюватися до плати. Якщо на платі ще маються вільні роз’єми, то можна збільшити об’єм кеша, встановивши мікросхеми SRAM і TAG необхідної кількості, типу і швидкості. Мікросхеми TAG RAM – це спеціальні чіпи в підсистемі кеша другого рівня, що кеширують адреси (а не дані, що зберігаються в мікросхемах SRAM). Обсяг пам'яті TAG RAM визначає кількість кешируємих адрес, тобто максимальний обсяг кешируємої пам'яті. Об’єм зберігання даних (мікросхем SRAM) визначає максимальна кількість даних, що можуть бути розміщені в кеш-пам'яті одночасно. Великий об’єм сховища означає, що в процесора є більше шансів знайти потрібну йому інформацію в кеші (це називається влученням у кеш — cache hit). Теоретично об’єми TAG-пам'яті і сховища даних (SRAM) не залежать одне від одного. На практиці більшість чипсетів вимагають виконання визначених співвідношень між їх об’ємами.
Б) Cache on a Stick (COASt). Пізні системи п'ятого покоління використовують модулі COASt або CELP (Card-Edge Low Profile). Ці модулі встановлюють ся в роз’єм, що нагадує слот PCI. Модулі COASt бувають різних типів і швидкостей.
С) Пакетна пам'ять SRAM високої щільності. Використовується самими останніми моделями материнських плат Super Socket 7 і не підлягає модернізації. На деяких материнських платах можуть матися вільні роз’єми для цієї пам'яті. У такому випадку можна збільшити об’єм кеша, встановивши в ці роз’єми мікросхеми пам'яті, що відповідають вимогам, приведеним у документації на материнську плату.
На більшості материнських плат класу Pentium мається 256 або 512 Кбайт кеш-пам'яті L2, однак у дешевих системах її може не бути зовсім. Підвищити продуктивність таких систем можна шляхом встановлення на них 256 Кбайт кеш-пам'яті другого рівня, хоча приріст продуктивності буде не надто істотним. Модернізація таких старих систем звичайно буває нераціональним заходом, тому що краще замінити плати процесора і пам'яті сучасними моделями.
3.3. Кеш-память
Процесори завжди працювали швидше, ніж пам'ять. Процесори і пам'ять удосконалювалися паралельно, тому ця невідповідність зберігалася. Оскільки на мікросхему можна поміщати все більше і більше транзисторів, розробники процесорів використовували ці переваги для створення конвеєрів і суперскалярної архітектури, що ще більше підвищувало швидкість роботи процесорів. Розробники пам'яті звичайно використовували нові технології для збільшення ємності, а не швидкості, що ще більше збільшувало проблему. На практиці така невідповідність у швидкості роботи приводить до наступного: після того як процесор дає запит пам'яті, повинно пройти багато циклів, перш ніж він одержить слово, що йому потрібно. Чим повільніше працює пам'ять, тим довше процесору приходиться чекати, і тим більше циклів повинне пройти.
Є два шляхи рішення цієї проблеми. Найпростіший з
них – почати зчитувати інформацію з пам'яті, коли це необхідно, і при цьому продовжувати виконання команд, але якщо яка-небудь команда спробує використовувати слово до того, як воно завантажилося з пам'яті, процесор повинний припиняти роботу. Чим повільніше працює пам'ять, тим частіше буде виникати така проблема і тим більше буде проблем у роботі. Наприклад, якщо відстрочка складає 10 циклів, досить імовірно, що одна з 10 наступних команд спробує використовувати слово, що ще не взяте з пам'яті.
Інше рішення проблеми – сконструювати машину, що не припиняє роботу, але стежить, щоб програми-компілятори не використовували слова до того, як вони завантажаться з пам'яті. Однак це не так просто здійснити на практиці. Часто при виконанні команди завантаження машина не може виконувати інші дії, тому компілятор змушений вставляти порожні команди, що не роблять ніяких операцій, але при цьому займають місце в пам'яті. У дійсності при такому підході простоює не апаратне, а програмне забезпечення, але зниження продуктивності при цьому таке ж.
Насправді ця проблема не технологічна, а економічна. Інженери знають, як побудувати пам'ять, що буде працювати дуже швидко, але при цьому її приходиться поміщати прямо на мікросхему процесора (оскільки інформація через шину надходить дуже повільно). Установка великої пам'яті на мікросхему процесора робить його більшим і, отже, дорожчим, і навіть якби вартість не мала значення, існують обмеження в розмірах процесора, який можна сконструювати. Таким чином, необхідно вибирати між швидкою пам'яттю невеликого розміру і повільною пам’яттю великого розміру.
Цікаво відзначити, що існують технології сполучення маленької і швидкої пам'яті з великою і повільною, що дозволяє одержати і високу швидкість роботи, і велику ємність за розумною ціною. Маленька пам'ять з високою швидкістю роботи називається кеш-пам'яттю.
Основна ідея кеш-пам'яті проста: у ній знаходяться слова, що найчастіше використовуються. Якщо процесору потрібно яке-небудь слово, спочатку він звертається до кеш-пам'яті. Тільки в тому випадку, якщо слова там немає, він звертається до основної пам'яті. Якщо значна частина слів знаходиться в кеш-пам'яті, середній час доступу значно скорочується.
Таким чином, успіх або невдача залежить від того, яка частина слів знаходиться в кеш-пам'яті. Давно відомо, що програми не звертаються до пам'яті навмання. Якщо програмі потрібний доступ до адреси А, то швидше за все після цього їй знадобиться доступ до адреси, розташованій поблизу від А. Практично всі команди звичайної програми (за винятком команд переходу і виклику процедур) викликаються з послідовних ділянок пам'яті. Крім того, велику частину часу програма витрачає на цикли, коли обмежений набір команд виконується знову і знову. Точно так само при маніпулюванні матрицями програма швидше за все буде звертатися багато разів до однієї і тієї ж матриці, перш ніж перейде до чого-небудь іншому.
То, що при послідовних відсиланнях до пам'яті протягом деякого проміжку часу використовується тільки невелика її ділянка, називається принципом локальності. Цей принцип складає основу всіх систем кеш-пам'яті. Ідея полягає в наступному: коли визначене слово викликається з пам'яті, воно разом із сусідніми словами переноситься в кеш-пам'ять, що дозволяє при черговому запиті швидко звертатися до наступних слів. Загальний пристрій процесора, кеш-пам'яті й основній пам'яті показане на рис. 3.2. Кеш-пам'ять по логіці речей повинна знаходитися між процесором і ocнoвною пам'яттю. У дійсності існує три можливих варіанти розташування
кеш-пам'яті.
Центральний процесор
Основна
пам’ять
Кеш-пам’ять
Шина
Рис.3.2. Загальна схема взаємозв’язку між процесором, пам’яттю і кешем
Якщо слово зчитується або записується k раз, комп'ютеру знадобиться зробити 1 звертання до повільної основної пам'яті і k-1 звертань до швидкої кеш-пам'яті. Чим більше k, тим вище загальна продуктивність.
Нехай с – час доступу до пам'яті, m – час доступу до основної пам'яті і h – коефіцієнт спів падань, який показує співвідношення числа посилань до кеш-пам'яті і загального числа посилань. У нашому прикладі h=(k-l)/k. Таким чином, можна обчислити середній час доступу:
середній час доступу =c+(l-h)m.
Якщо h→ 1 всі звертання здійснюються тільки до кеш-пам'яті, то час доступу наближається до с. З іншого боку, якщо h → 0, то щораз потрібно звертатися до основної пам'яті, тоді час доступу наближається до с+т: спочатку потрібен час с для перевірки кеш-пам'яті (у даному випадку безуспішної), а потім час m для звертання до основної пам'яті. У деяких системах звертання до основної пам’яті може починатися паралельно з дослідженням кеш-пам'яті, щоб у випадку невдалого пошуку цикл звертання до основної пам'яті вже почався. Однак ця стратегія вимагає здатності зупиняти процес звертання до основної пам’яті у випадку результативного звертання до кеш-пам'яті, що робить розробку такого комп'ютера більш складною.
Основна пам'ять і кеш-пам'ять поділяються на блоки фіксованого розміру з врахуванням принципу локальності. Блоки всередині кеш-пам'яті звичайно називають рядками кеш-пам'яті (cache lines). Якщо звертання до кеш-пам'яті не результативне, то з основної пам'яті в кеш-пам'ять завантажується весь рядок, а не тільки необхідне слово. Наприклад, якщо рядок складається з 64 байтів, звертання до адреси 260 спричинить завантаження в кеш-пам'ять усього рядка, тобто з 256-го по 319-й. Можливо, через якийсь час знадобляться інші слова з цього рядка. Taкий шлях звертання до пам'яті більш ефективний, чим виклик кожного слова окремо, тому що викликати k слів 1 раз можна набагато швидше, ніж 1 слово k раз. Якщо вхідні повідомлення кеш-пам'яті містять більше одного слова, це значить що буде менше таких вхідних повідомлень і, отже, менше невиробничих витрат.
Розробка кеш-пам'яті дуже важлива для процесорів з високої продуктивністю. Перше питання – розмір кеш-пам'яті. Чим більше розмір, тим краще працює пам'ять, але тем дорожче вона коштує. Друге питання – розмір рядка пам'яті. Кеш-пам'ять об’ємом 16 Кбайт можна розділити на 1К рядків по 16 байт, 2К рядків по 8 байтів і т.д. Третє питання – як побудована кеш-пам'ять, тобто вона визначає, які саме слова утримуються в ній у даний момент.
Четверте питання – чи належні команди і дані знаходяться разом у загальній кеш-пам'яті. Простіше розробити суміжну кеш-пам'ять, у якій зберігаються і дані, і команди. При цьому виклик команд і даних автоматично врівноважується. Проте в даний час існує тенденція до використання розділеної кеш-пам'яті, коли команди зберігаються в одній кеш-пам'яті, а дані – в іншій. Така структура також називається Гарвардською (Harvard Architecture), оскільки ідея використання окремої пам'яті для команд і окремої пам'яті для даних уперше втілилася в комп'ютері Магу III, що був створений Говардом Айкеном у Гарварді. Сучасні розробники пішли цим шляхом, оскільки зараз широко використовуються процесори з конвеєрами, а при такій організації повинна бути можливість одночасного доступу і до команд, і до даних (операндів). Розділена кеш-пам'ять дозволяє здійснювати паралельний доступ, а загальна – ні. До того ж, оскільки команди звичайно не міняються під час виконання, зміст командної кеш-пам'яті ніколи не приходиться записувати назад в основну пам'ять.