- •Пояснити синхронізацію тракту даних із використанням часової діаграми віртуальної машини Java
- •Намалювати схему мікроархітектури Міс-1 і коротко пояснити управління її мікрокомандами.
- •Пояснити, що таке стек і його призначення. Привести приклад графічного зображення стеку і пояснити його роботу
- •Описати принцип організації пам’яті іjvm. Пояснити призначення і адресацію різних областей пам’яті: констант, фреймів локальних змінних і області процедур
- •Приведіть простий приклад компіляції з мови Java на мову ассемблера Java
- •Опишіть інтерпретацію в Міс-1 команди iload.
- •Опишіть інтерпретацію в Міс-1 команди istore
- •Що таке просторова і часова локалізація адрес в кеш-пам’яті
- •Опишіть, як здійснюється програмне введення-виведення.
Приведіть простий приклад компіляції з мови Java на мову ассемблера Java
Листинг 4.2. Программа на языке ассемблер Java 1 ILOAD j //i=J+k 2 ILOAD k 3 IADD 4 ISTORE l 5 I LOAD l //if (1—3) 6 BIPUSH 3 7 IFJCMPEQ LI 8 ILOAD j //J-J-l 9 BIPUSH 1 10 ISUB 11 ISTORE j 12 GOTO L2 13 LI BIPUSH 0 //k-0 14 ISTORE k 15 L2
|
Листинг 4.3. Программа IJVM в шестнадцатеричном коде 0x15 0x02 0x15 0x03 0x60 0x36 0x01 0x15 0x01 0x10 0x03 0x9F 0x00 OxOD 0x15 0x02 0x10 0x01 0x64 ОхЗб 0x02 0xA7 0x00 0x07 0x10 0x00 0x36 0x03
|
Скомпільована програма проста. Спочатку j і до поміщаються в стек, додаються, а результат зберігається в i Потім i і константа 3 поміщаються в стек і порівнюються Якщо вони рівні, то відбувається умовний перехід до L1, де до отримує значення 0 Якщо вони не рівні, то виконується частина програми після IF_ICMPEQ Після цього здійснюється перехід до L2, де зливаються частини else і then
Опишіть інтерпретацію в Міс-1 команди iload.
ILOAD У цій команді за кодом операції також
с
лід
байтале цей байт представляє собою
індекс (без знаку), використовуваний
для того, щоб знайти в просторі локальних
змінних слово, яке потрібно помістити
в стек. Оскільки тут є всього 1 байт,
можна розрізняти тільки 28 = 256 слів, а
саме перші 256 слів простору локальних
змінних. Для виконання команди ILOAD
потрібно і процес читання (щоб викликати
слово), і процес запису (щоб помістити
його в стек). Щоб визначити адресу для
зчитування, потрібно додати зсув, який
зберігається в регістрі BR (буферному
регістрі пам'яті), до вмісту регістра
LV. Доступ до регістрів MBR і LV можна
отримати тільки через шину В, тому
спочатку значення LV копіюється в регістр
Н (в циклі iloadl), а потім додається значення
MBR. Результат підсумовування копіюється
в регістр MAR, і починається процес читання
(в циклі iload2).
Опишіть інтерпретацію в Міс-1 команди istore
Команда ISTORE протилежна команді ILOAD (з стека виштовхується верхнє слово і зберігається в комірці пам'яті, адреса якої дорівнює сумі значення регістра LV і індексу даної команди). У даному випадку використовується такий же формат, як і в команді ILOAD (рис. 4.14, й), тільки тут код операції не 0x15, а 0x36. Оскільки верхнє слово стека вже відомо (воно знаходиться в регістрі TOS), його можна відразу зберегти в пам'яті. Однак нове верхнє слово стека все ж необхідно викликати з пам'яті, тому потрібно і операція читання, і операція запису, хоча їх можна виконувати в будь-якому порядку
Що таке просторова і часова локалізація адрес в кеш-пам’яті
Просторова локація:побудована на ймовірності того, що в найближчий час буде необхідно звернутися до комірок пам’яті, як знаходяться пере недавно викликаними комірками. Виходячи з цього в кеш память переноситься більше пам’яті ніж потрібно на даний момент
Часова локація : недавно викликана комірок знову запрошується. Це переважно відбувається з комірками пам’яті, які находяться поряд з вершиною стеку або комірками всередині циклу. Використовується при виборі того, які елементи викинути з кеш пам'яті у випадку її промаху. зазвичай викидаються ті елементи, якими давно не користувалися
Поясніть що таке архітектура команд і її місце в архітектурі комп’ютера. Які властивості рівня архітектура команд і чим відрізняється рівень архітектури команд від рівня мікроархітектури ком’ютера
У принципі рівень команд - це те, яким уявляється комп'ютер програмісту машинної мови. Оскільки зараз жодна нормальна людина не пише програм на машинній мові, ми переробили це визначення. Програма рівня архітектури команд - це те, що видає компілятор (в даний момент ми ігноруємо виклики операційної системи і символічна мова асемблера). Щоб зробити програму рівня команд, упорядник компілятора повинен знати, яка модель пам'яті використовується в машині, які регістри, типи даних і команди є в наявності і т. д. Вся ця інформація в сукупності і визначає рівень архітектури команд. Відповідно з цим визначенням такі питання, як програмується чи мікроархітектура чи ні, конвейерізірован комп'ютер чи ні, є він суперскалярні чи ні і т. д., не відносяться до рівня архітектури команд, оскільки упорядник компілятора не бачить усього цього. Однак це зауваження не Загальний огляд рівня архітектури команд 337 зовсім справедливо, оскільки деякі з цих властивостей впливають на продуктивність, а продуктивність є видимою для програміста. Розглянемо, наприклад, суіерскалярную машину, яка може видавати back-to-back команди в одному циклі, за умови що одна команда цілочисельна, а одна - з плаваючою точкою. Якщо компілятор чергує цілочисельні команди і команди з плаваючою точкою, то продуктивність помітно покращиться. Таким чином, деталі суперскалярной операції видно на рівні команд, і межі між різними рівнями розмиті
Для одних архітектур рівень команд визначається формальним документом, який зазвичай випускається промисловим консорціумом, для інших - ні. Наприклад, V9 SPARC (Version 9 SPARC) і JVM мають офіційні визначенніня [156, 85]. Мета такого офіційного документа - дати можливість різноманітним виробникам випускати машини даного конкретного виду, щоб ці машини могли виконувати одні й ті ж програми й одержувати при цьому одні й ті ж результати,
