Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Властивості рівня команд

У принципі рівень команд — це те, яким представляється комп'ютер програмістові машинної мови. Оскільки зараз жодна нормальна людина не пише програм машинною мовою, ми переробили це визначення. Програма рівня архітектури команд — це те, що видає компілятор (у цей момент ми ігноруємо виклики операційної системи й символічна мова асемблера). Щоб зробити програму рівня команд, укладач компілятора повинен знати, яка модель пам'яті використовується в машині, які регістри, типи даних і команди є в наявності і т.д. Уся ця інформація в сукупності й визначає рівень архітектури команд. Відповідно до цього визначення такі питання, як чи програмується мікроархітектура чи ні, конвеєризований комп'ютер чи ні, є він суперскалярним чи ні і т.д., не ставляться до рівня архітектури команд, оскільки укладач компілятора не бачить усього цього. Однак це зауваження не зовсім слушне, оскільки деякі із цих властивостей впливають на продуктивність, а продуктивність є видимою для програміста. Розглянемо, наприклад, суперскалярну машину, яка може видавати back-to-back команди в одному циклі, за умови що одна команда целочисленная, а одна — із плаваючою крапкою. Якщо компілятор чергує целочисленные команди й команди із плаваючою крапкою, то продуктивність помітно покращиться. Таким чином, деталі суперскалярної операції видні на рівні команд, і границі між різними рівнями розмиті.

Для одних архитектур рівень команд визначається формальним документом, який звичайно випускається промисловим консорціумом, для інших — немає. Наприклад, V9 SPARC (Version 9 SPARC) і JVM мають офіційні визначення. Ціль такого офіційного документа — дати можливість різним виробникам випускати машини даного конкретного виду, щоб ці машини могли виконувати ті самі програми й одержувати при цьому ті самі результати. У випадку із системою SPARC подібні документи потрібні для того, щоб різні підприємства могли випускати ідентичні мікросхеми SPARC, що відрізняються друг від друга тільки продуктивністю й ціною. Щоб ця ідея працювала, постачальники мікросхем повинні знати, що робить мікросхема SPARC (на рівні команд). Отже, у документі говориться про те, яка модель пам'яті, які регістри присутні, які дії виконують команди і т.д., а не про те, що являє собою мікроархітектура.

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

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

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

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

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

Інша важлива якість рівня команд полягає в тому, що в більшості машин є, принаймні, два режими. **Привілейований режим** призначений для запуску операційної системи. Він дозволяє виконувати всі команди. **Користувацький режим** призначений для запуску програмних додатків. Цей режим не дозволяє виконувати деякі чутливі команди (наприклад, ті, які безпосередньо маніпулюють кеш-пам'яттю). У цій главі ми в першу чергу зосередимося на командах і властивостях користувацького режиму. == Моделі пам'яті == У всіх комп'ютерах пам'яті розділена на гнізда, які мають послідовні адреси. У цей час найпоширеніший розмір гнізда — 8 битов, але раніше використовувалися гнізда від 1 до 60 битов. Гніздо з 8 битов називається байтом. Причина застосування саме 8-бітних байтів така: символи ASCII коду займають 7 битов, тому один символ ASCII плюс біт парності саме підходить під розмір байта. Якщо в майбутньому буде домінувати UNICODE, то комірки пам'яті, можливо, будуть 16-бітними. Загалом кажучи, число 24 краще, чим 23, оскільки 4 — ступінь двійки, а 3 — немає. Байти звичайно групуються в 4-байтные (32-бітні) або 8-байтные (64-бітні) слова з командами для маніпулювання цілими словами. Багато архітектури вимагають, щоб слова були вирівняні у своїх природніх границях. Так, наприклад, 4-байтное слово може починатися з адреси 0,4,8 і т.д., але не з адреси 1 або 2. Точно так само слово з 8 байтів може починатися з адреси 0,8 або 16, але не з адреси 4 або 6. Розташування 8-байтных слів показане на мал. 5.2. Вирівнювання адрес потрібно досить часто, оскільки при цьому пам'ять працює більш ефективно. Наприклад, Pentium II, який викликає з пам'яті по 8 байтів за раз, використовує 36-бітні фізичні адреси, але містить тільки 33 адресних біта, як показано на мал. 3.41. Отже, Pentium II навіть не зможе звернутися до невирівняної пам'яті, оскільки молодші три біти не визначені явно. Ці біти завжди рівні 0, і всі адреси пам'яті кратні 8 байтам. Проте вимога вирівнювання адрес іноді викликає деякі проблеми. У процесорі Pentium II програми можуть звертатися до слів, починаючи з будь-якої адреси, — це якість сходить до моделі 8088 із шиною даних шириною в 1 байт, у якій не було такої вимоги, щоб гнізда розташовувалися в 8-байтных границях. Якщо програма в процесорі Pentium II зчитує 4-байтное слово з адреси 7, апаратне забезпечення повинне зробити одне звертання до пам'яті, щоб викликати байти з 0-го по 7-й, і друге звертання до пам'яті, щоб викликати байти з 8-го по 15-й. Потім центральний процесор повинен витягти необхідні 4 байта з 16 байтів, лічених з пам'яті, і скомпонувати їх у потрібному порядку, щоб сформувати 4-байтное слово. Можливість зчитувати слова з довільними адресами вимагає ускладнення мікросхеми, яка після цього стає більше по розміру й дорожче. Розроблювачі були б раді позбутися такої мікросхеми й просто зажадати, щоб усі програми зверталися до слів пам'ятей, а не до байтів. Однак на запитання інженерів: «Кому потрібно виконання старих програм для машини 8088, які неправильно звертаються до пам'ятей?» піде відповідь продавців: «Нашим покупцям». Більшість машин мають єдиний лінійний адресний простір, який простягнеться від адреси 0 до якогось максимуму, звичайно 232 байтів або 2мбайтів. У деяких машинах утримуються окремі адресні простори для команд і для даних, так що при виклику команди з адресою 8 і виклику даних з адресою 8 відбувається звертання до різних адресних просторів. Така система набагато складніше, чим єдиний адресний простір, але зате вона має дві переваги. По-перше, з'являється можливість мати 232 байтів для програми й додаткові 232 байтів для даних, використовуючи тільки 32-бітні адреси. По-друге, оскільки запис завжди автоматично відбувається тільки в простір даних, випадковий перезапис програми стає неможливою, і отже, усувається один із джерел програмних збоїв. Відзначимо, що окремі адресні простори для команд і для даних — це не те ж саме, що розділена кеш-пам'ять першого рівня. У першому випадку весь адресний простір цілком дублюється, і зчитування з будь-якої адреси викликає різні результати залежно від того, що саме зчитується: слово або команда. При розділеній кеш-пам'яті існує тільки один адресний простір, просто в різних блоках кеш-пам'яті зберігаються різні частини цього простору. Ще один аспект моделі пам'яті — семантика пам'яті. Природно очікувати, що команда LOAD, яка зустрічається після команди STORE і яка звертається до того ж адреси, поверне тільки що збережене значення. Проте, як ми бачили в главі 4, у багатьох машинах мікрокоманди переупорядковуються. Таким чином, існує реальна небезпека, що пам'ять не буде діяти так, як очікується. Ситуація ускладнюється у випадку з мультипроцесором, коли кожний процесор посилає розділеної пам'яті потік запитів на читання й запис, які теж можуть бути переупорядковані. Системні розроблювачі можуть застосовувати один з декількох підходів до цієї проблеми. З одного боку, усі запити пам'яті можуть бути впорядковані в послідовність таким чином, щоб кожний з них завершувався до того, як почнеться наступний. Така стратегія сильно шкодить продуктивності, але зате дає найпростішу семантику пам'яті (усі операції виконуються в строгому програмному порядку). З іншого боку, не дається взагалі ніяких гарантій. Щоб зробити звертання до пам'яті впорядкованими, програма повинна виконати команду SYNC, яка блокує запуск усіх нових операцій пам'яті доти, поки попередні операції не будуть завершені. Ця ідея сильно утрудняє роботу тих, хто пише компілятори, оскільки для цього їм потрібно дуже добре знати, як працює відповідна мікроархітектура, але зате розроблювачам апаратного забезпечення надана повна воля в оптимізації використання пам'яті. Можливі також проміжні моделі пам'яті, у яких апаратне забезпечення автоматично блокує запуск певних операцій з пам'яттю (наприклад, тих, які пов'язані з RAW- або War-Взаємозалежністю), при цьому запуск усіх інших операцій не блокується. Хоча розробка цих особливостей на рівні команд досить стомлююча (принаймні, для укладачів компіляторів і програмістів мовою асемблера), зараз існує тенденція використовувати такий підхід. Ця тенденція викликана такими реалізаціями, як переупорядкування мікрокоманд, конвеєри, багаторівнева кеш-пам'ять і т.д.

<== предыдущая лекция | следующая лекция ==>
Загальні відомості про рівень архітектури команд | Критерії розробки форматів команд
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 341; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.