ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 24.12.2021
Просмотров: 6817
Скачиваний: 22
145
темні програми) є, безперечно, нереальним завданням. Об'єму основної пам'яті завжди не вистачає і, можливо, не вистачатиме.
Аби подолати зазначену невідповідність, вибудовують багаторівневу ієрархічну систему пам'яті комп'ютера, де на верхньому рівні ієрархії знаходяться програмно-доступні регістри регістрового файла процесора, на другому - кеш, потім комірки основної пам'яті, потім система зовнішньої пам'яті (диск, магнітні стрічки, архівна пам'ять з лазерною технологією і т. д.). За рівнями ієрархії, згори донизу, об'єм пристроїв пам'яті зростає, а швидкодія зменшується. Керує інформаційними обмінами між рівнями операційна система. Коли багаторівневість та ієрархію пам'яті приховано від прикладного програміста, тоді кажуть про реалізацію віртуальної пам'яті, де, ніби, скасовано зазначений вище парадокс пам'яті. В цьому випадку прикладному програмісту здається, що він використовує єдину відносно велику і швидку пам'ять.
Важливим є той факт, що звернення процесора до пам'яті завжди локалізовано в невеликому діапазоні змін її адрес. Саме він і дозволяє застосовувати ієрархічну систему пам'яті, аби розв'язати невідповідність швидкодій процесора і системи пам'яті з одним рівнем ієрархії. Між процесором і основною пам'яттю розташована кеш пам'ять (рис. 4.7) - це швидка буферна пам'ять невеликого об'єму. Кеш пам'ять працює на близькій тактовій частоті до процесора і не пригальмовує його роботу. Кеш (cache у перекладі з англійської - тайник) лишається прозорою для програміста, тому що система команд процесора, як правило, не містить команд роботи з кеш пам'яттю.
При поясненні роботи кеш пам'яті можна допустити, що процесор також не «бачить» кеш і генерує адреси пам'яті так, ніби кеш пам'яті не має. Проте кеш пам'ять, як правило, існує, і на апаратному рівні перехоплює сигнали процесора читання/запису, а коли треба, то надає процесору швидкі копії інформаційних кодів, які тимчасово зберігає у власній робочій пам'яті. Якщо кеш пам'ять спроможна підмінити собою основну пам'ять (у понад 96-98 відсотків випадків), тоді вона за рахунок власних ресурсів задовольняє запит процесора. Процесор не пригальмовується і продовжує працювати на повній швидкості. Коли «підміна» основної пам'яті неможлива (менше від двох-чотирьох відсотків випадків), тоді кеш пам'ять залучає до роботи основну пам'ять, обмін з якою суттєво пригальмовує процесор.
Усі завдання, пов'язані із перехопленням запитів від процесора до основної пам'яті, вирішує контролер кеш пам'яті, який є її складовою частиною. Другою частиною кеш пам'яті є невелика робоча пам'ять, де зберігають вміст копій комірок основної пам'яті, що брали участь в обслуговуванні останніх, тобто найбільш «свіжих» запитів процесора. Важливо, що вміст комірок основної пам'яті копіюється до кеш пам'яті разом із своїми адресами. Саме ці копійовані адреси і дозволяють контролеру кеш пам'яті приймати
146
рішення про спроможність задовольнити конкретний процесорний запит без залучення до обміну повільної основної пам'яті.
Спрощений варіант структури комп'ютера, в якому використовується кеш пам'ять, подано на рис. 4.8. Пристрій керування надсилає керуючі сигнали до процесора та основної пам'яті. З процесора сигнали станів, якими можуть бути біти регістра команди і інше, надходять до пристрою керування, аби реалізувати розгалуження мікропрограми.
Для зберігання даних і команд використано розділені кеш пам'яті даних і команд Гарвардської архітектури. В свою чергу, кеш пам'яті зв'язані з єдиною пам'яттю Принстонської архітектури. Ясно, що обмін в підсистемі "основна пам'ять - кеш пам'ять даних» є двостороннім, а в підсистемі «основна пам'ять - кеш пам'ять команд" - одностороннім.
Можна побачити, що наведена структура ефективно поєднала риси Принстонської та Гарвардської архітектур.
Надалі при розгляді принципів виконання команд в процесорі будемо розглядати і його взаємодію з основною пам'яттю через кеш пам'ять команд та даних.
4.2.4. Виконання команд в процесорі комп'ютера з простою системою команд
4.2.4.1. Фаза вибирання команди
Виконання команд в процесорі комп'ютера з простою системою команд розглянемо на прикладі процесора комп'ютера DLX, структура якого була розглянута в п. 4.2.2. В рамках фази вибирання команди IF виконуються наступні мікродії (мікрооперації):
IR = IM[PC];
NPC = РС+4.
147
Виконання першої мікродії спричинює завантаження до 32-бітового регістра поточної команди IR вмісту чотирьох послідовно розташованих комірок пам'яті команд, починаючи від адреси (PC) + 0 і завершуючи адресою (PC) + 3. Як і завжди, за допомогою (PC) позначено вміст програмного лічильника PC.
Друга мікродія (NPC = PC + 4) вираховує "планову" адресу наступної за чергою команди з послідовного потоку. Тобто тут визначається і тимчасово зберігається у регістрі NPC вміст програмного лічильника. "Логічне" вибирання вмісту чотирьох послідовно розташованих однобайтових комірок замість однієї чотирибайтової підкреслює те, що навіть на рівні мікродій адресування комірок пам'яті вказують логічно. За умови коли адреса байта кратна чотирьом, тобто дотримано вирівнювання границь адрес команд, із пам яті, одразу (за одне звернення) вибирають чотири байти і навіть цілі пакети по чотири байти. Отриманий з пам'яті даних код тлумачать як 32-розрядне слово, а з пам'яті команд - як одну команду
Зауважимо, що обидві наведені мікродії теоретично є сумісними в часі. Саме тому вони можуть і мають виконуватися паралельно. Ці мікродії утворюють єдину мікроко-манду
Важливою властивістю фази IF є те, що вона не приймає до уваги існування відомого «парадокса пам'яті». Дійсно, у фазі IP за часовими витратами мікродія вибирання з повільних комірок пам'яті команд є тотожною мікродії, що працює з внутрішніми, а саме тому надшвидкими регістрами процесора
4.2.4.2. Фаза декодування команди
В рамках фази декодування команди ID виконуються наступні мікродії (мікрооперації):
A = Regs[IR6.....10J; В = Regs [IR 11......15 ]; Imm = ((IR16)16##IR16....31). У наведеному мікрокоді, що складений з трьох сумісних у часі, тобто придатних до одночасного (паралельного) виконання мікродій, вжито наступні позначення:
-
А, В, Imm - внутрішні службові 32-розрядні регістри для проміжного збереження кодів; всі три регістри є "прозорими" для програміста в тому сенсі, що вони аж ніяк не відбиті в машинних командах.
-
Regs [address] - номер регістра регістрового файла процесора;
-
R - поле регістра команд, яке містить групу послідовно розташованих бітів - від біта з номером X до біта з номером Y включно; звернемо увагу на нумерацію бітів у слові процесора - лівий біт має 0-й номер, а правий - 31-й номер.
-
IR6- поле регістра команд, що містить бінарний номер регістра - джерела даного (див. формат команд); довжина поля рівна 5 бітам, що дозволяє позначати та адресувати 32 регістри - від R0до R31
■ IR -
також п'ятибітове поле номера ще одного
регістра - джерела даного з
множини
R0.....R31,
Вже зауважувалося, що поле безпосереднього операнда (Immediate або Imm) у форматі команди має довжину лише 16 бітів. В той же час, розрядність інформаційного тракту в усіх трьох службових регістрів рівна 32 біти. До того, як записати 16-бітовий код IR16....31безпосереднього операнда з регістра команд до службового регістра Imm, цей
148
код треба розширити з врахуванням знака (тобто розряду IRI6) до 32-бітового значення а наступним стандартним алгоритмом знакового розширення:
IR16##IR16##....##IR16#IR16...31
Тут символом ## позначено операцію зчеплення (конкатенацію).
Важливо, що в рамках фази ID виконується декодування (розпізнавання) команди та вибирання усіх можливих варіантів операндів поточної команди, незалежно від її типу, з метою збільшення швидкодії. З іншого боку, можливість одночасного вибирання усіх варіантів операндів потенційно обумовлено відповідною структурою форматів команд, де фіксовано розташування полів-покажчиків на джерела даних та приймачі операндів і результатів. Іншими словами, формати команд процесора втілюють техніку кодування форматів команд, що відома під назвою "fixed-field coding".
4.2.4.3. Фаза виконання та формування ефективної адреси
Мікродії, що виконують в рамках фази виконання та визначення ефективної адреси ЕХ, вже залежать від типу поточної команди. Враховуючи це, вигідно поділити усі команди процесора на наступні три групи:
•. команди виконання операцій завантаження операндів з основної пам'яті та збереження результатів у основній пам'яті;
-
команди виконання операцій арифметико-логічного пристрою;
-
команди виконання операцій умовних та безумовних переходів. Далі розглядаємо притаманні кожній групі команд мікродії Команди виконання операції звернення до пам'яті даних
В рамках фази ЕХ операції звернення до пам'яті даних (load/store instructions) готують значення ефективної адреси, тобто вираховують значення бінарного коду, що є адресою комірки пам'яті даних. Виконується наступна мікродія:
ALUoutput = А + Imm.
Позначене в мікродії додавання безпосереднього операнда (однієї з компонент адреси) з вмістом робочого регістра А (другої компоненти) реалізується в ALU. Отримана сума (вона завжди ціла і додатна, переносом нехтують) записується до ще одного, прозорого для програміста, регістра ALUoutput. Цей регістр має розрядність 32 біти. Він зберігає коди результатів, що з'являються на виході комбінаційної схеми з назвою ALU. Якщо пригадати дію команди LW, тоді призначення та форма запису наведеної мікродії стає зрозумілою.
Команди виконання операції арифметико логічного пристрою типу регістр регістр.
Прикладом команди типурегістр-регістр є команда ADD R1,R2,R3. Виконується вказана командою наступна мікродія
ALUoutput = A op В.
Тут узагальнене позначення (ор) можна конкретизувати як (add), (sub) тощо, залежно від конкретного виду поточної команди, яка опрацьовується в інформаційному тракті комп'ютера Підкреслимо, що на попередній щодо ЕХ фазі, а саме на фазі ID, до службових регістрів уже завантажено вміст вибраних регістрів регістрового файла з адресами R2 і R3. Результат дії поки що не збережено в регістрі R1, але його тимчасово записано до службового регістра ALUoutput.
149
Команда виконання операції арифметико-логічного пристрою типу регістр-без-посередній операнд.
Прикладом команди типу регістр-безпосередній операнд є команда ADD R1,R2,#23. Виконується наступна мікродія:
ALUoutput = A op Imm.
Ясно, що замість вмісту регістра R3 в операції бере участь безпосередній операнд, який з урахуванням «знакового» розширення до 32-х бітів зчитується із службового регістра Imm.
Команда умовного переходу.
Прикладом команди умовного переходу є команда BNEZ R5, data. Виконуються наступні мікродії:
ALUoutput = NPC + Imm; Cond (ition) = (A op 0).
Обидві мікродії є сумісними в часі. За допомогою першої мікродії вираховується цільова адреса умовного переходу При цьому до вже визначеної адреси наступної команди (NPC), тобто такої, яка розташована безпосередньо за командою умовного переходу, додається константа зі службового регістра Imm, (саме він містить значення data). Друга мікродія визначає (істинним чи хибним) є значення умови Condition умовного переходу. Заради цього вміст службового регістра А, що є збіжним із вмістом регістра R5 (у коман-ді-прикладі), порівнюється на основі операції (ор) з нулем. Згідно з семантикою команди BNEZ отримується, що Cond = true, коли вміст регістра R5 ненульовий, або Cond = false, якщо регістр R5 містить нуль. Фізично Cond є однобітним регістром у складі вузла Zero?
Звернемо увагу на те, що зараз сформовано лише значення двох необхідних елементів виконання умовного переходу, а саме: однобітний код умови Cond та цільова адреса переходу, яка тимчасово зберігається у службовому вихідному регістрі ALU, тобто в ALUoutput. Безпосереднє виконання умовного переходу, що полягає в природній (за чергою) чи неприродній (коли виконують стрибок до цільової адреси) зміні вмісту програмного лічильника PC, виконується на наступній фазі.
4.2.4.4. Фаза звернення до пам'яті та завершення умовного переходу
Звернення до пам'яті.
В рамках фази звернення до пам'яті MEM виконуються наступні мікродії:
LMD = DM [ALUoutput]; DM [ALUoutput] = В.
Звернення до пам'яті застосовується в командах завантаження (наприклад, LW R6, 112(R3)) та в командах збереження (наприклад, SW 112(R3),R6).
Перша мікродія виконується тільки у випадку команди Load (завантаження). Тут за допомогою попередньо розрахованої адреси пам'яті даних, яка тимчасово зберігається у службовому регістрі ALUoutput, здійснюється доступ до пам'яті, що і позначено записом DM [ALUoutput].
Фізично з пам'яті завжди зчитується 32 біти (або навіть цілі пакети з 32-х бітових структурних одиниць). Отриманий з пам'яті даних бінарний код тимчасово завантажу-