Що таке регістри процесора?


27

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

Чи є різниця між ними або я правий, коли думаю, що вони однакові? Чи потрібен реєстр, щоб він знаходився в центральному процесорі, щоб він працював?

Згідно з Вікіпедією, реєстр - це місце в центральному процесорі, де можна швидко отримати доступ до пам'яті та змінити її, перш ніж повернути її в оперативну пам'ять. Я зрозумів це неправильно чи кеш і реєстр насправді однакові?


13
Реєстр процесора - це організація, яка відстежує ваш CPU для вас. NSA є прикладом регістра CPU.
Джиммі Хоффа

3
Кеш-пам'ять рівня 1 процесора часто виготовляють із кремнієвого типу того ж типу, що і регістри. Це не так швидко, тому що йому потрібні додаткові пошуки, щоб асоціювати кешовані адреси з місцями кешу. Але регістри та кеш - це, безумовно, різні місця на чіпах.
Zan Lynx

3
@JimmyHoffa: Я боюся, що ваш коментар буде дуже заплутаним для ОП, на шкоду знанням інформатики.
rwong

3
@rwong Nah Я це зрозумів, я вважав, що це досить смішно. : P
Jeroen

1
І ще одна відмінність полягає в розмірі: регістровий файл рідко перевищує пару сотень слів, тоді як кеш L1 легко може бути чимось великим, як 64k.
SK-логіка

Відповіді:


61

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

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

EDIT: Ось просте пояснення того, як працює логіка реєстрації.

Уявімо, у нас є чотири регістри з назвою R1..R4. Якщо ви складаєте заяву, яка виглядає приблизно так:

x = y + z * 3;

компілятор виводить машинний код, який (коли він розбирається) виглядає приблизно так:

LOAD  R1, ADDRESS_Z //move the value of Z into register 1
MUL   R1, 3         //multiply the value of register 1 by 3
LOAD  R2, ADDRESS_Y //move the value of Y into register 2
ADD   R1, R2        //adds the value in R2 to the value in R1
STORE R1, ADDRESS_X //move the value of register 1 into X

Оскільки більшість сучасних процесорів мають регістри, що мають ширину або 32, або 64 біти, вони можуть робити математику на будь-якому значенні до розміру, який вони можуть містити. Їм не потрібні спеціальні регістри для менших значень; вони просто використовують спеціальні інструкції ASM, які дозволяють використовувати лише частину реєстру. І, як тесляр лише двома руками, регістри можуть зберігати лише невеликий обсяг даних одночасно, але вони можуть бути використані повторно, передаючи активні дані в них і поза ними, а це означає, що "багато регістрів" не мають врешті-решт потрібні. (Наявність великої кількості доступних дій дозволяє компіляторам генерувати швидший код, звичайно, але це не обов'язково.)


26
І більше матеріалів на складі по всьому місту (диск) та інших речей, які він може мати у Fedex'd (мережа) :-)
Dan Pichelman

2
Дуже сильно залежить від системної архітектури.
Світовий інженер

5
@Binero у 16-бітовому процесорі x86 у вас є регістри з назвою Axe, Bx тощо. Коли вони перейшли до 32-бітових процесорів, вони розширили регістри до 32-бітових EAx, EBx, якщо ви отримаєте доступ до Ax, ви отримаєте низькі 16 біт EAx. У 64-бітному режимі вони назвали регістри RAx, причому нижні 32 біти є EAx, а нижні 16 біт все ще є Ax. перегляньте ці діаграми, щоб побачити, як ви потрапляєте до інших частин байтів, таких як AH, щоб отримати високий байт 16-розрядного регістра Axe: en.wikipedia.org/wiki/X86#Structure
stonemetal

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

2
@MasonWheeler Хороший вибір з вашого боку.
Ватін

3

Насправді Реєстр в термінології процесора невеликий Названий шматок пам'яті Доступний всередині мікропроцесора (ЦП), регістри мають конкретні назви, розміри та функції залежать від процесора до процесора, наприклад, якщо взяти 8085 мікропроцесор - це 8-бітний процесор, який має 8 -бітові регістри (A: Акумулятор, B, C, D, E, H та L регістри та один регістр прапорів - всі 8-бітні). Два 16-бітні регістри PC і SP мають особливі функції і функції виходять на малюнок під час складання програмування. Мало контролює регістри - поза програмістом.

Якщо ви візьмете інший процесор, регістри будуть відрізнятися, скажімо, 8086 - це 16-розрядний процесор, і він має AX, BX, CX і DX, це всі 16-бітні регістри, ПК, SP та Flag.

як ви цитували в запитанні, вони прискорюють виконання програми і виконують функцію кешу процесора, але зараз змінилася архітектура процесора, і вони (Intel) додають багато пам'яті, що викликає кеш процесора

але є незначна різниця між процесором кешу процесора (CPU) і процесорами (процесором) процесорів, реєстрами, які фактично потрібні для деяких спеціальних дій, таких як вказівник пам'яті, стан програми тощо. SP: покажчик стека, який діє вказівник пам'яті в пам'яті стека. Акумулятор - це буфер і основний регістр для доступу до АЛУ для Арифметичних Операцій ...

Ви можете побачити пояснення Мейсона Уілера щодо основ


1

Я думаю, що це допомагає думати, що регістри - це не пам'ять, і їх не слід вважати такими.

Думайте більше, як OO - Register - це клас, не походить від Memory and Memory - це клас, не похідний від регістру, але клас Register має методи (Machine Op Codes) для перетворення своїх даних у пам'ять і з них. Пам'ять з іншого боку нічого не знає про регістри і не може викликати дії над ними. В результаті всі операції з процесором виконуються регістрами, які часто отримують доступ до пам'яті.

Не рідкість бачити лише записи регістрів - навряд чи атрибут пам’яті. Можливо також змінити значення регістру, не записуючи на нього - знову ж таки, не поведінку, яку ви очікуєте від пам'яті.


У картах пам'яті, вбудованих в пам'ять, області, що містять пам'ять, лише для запису не є такою рідкістю.
SK-логіка

@ SK-логіка - Правильна - проте контекст поставленого запитання чітко ОП вважає пам'ять як щось, з чого ви читаєте і в яке пишете. Не потрібно його більше плутати :)
mattnz

0

Відповідь, надана @Mason Wheeler, була точною, але я думаю, що можна поставити своє питання під іншу перспективу. Судячи з вашого запитання, мені звучить концепція, яка вам потрібна, щоб ідеально зрозуміти різницю між кешем і регістром - це шлях даних . Як правильно зазначав Мейсон, логіка ЦП (тобто його трафік даних) розроблена таким чином, що інформація про пам'ять не може бути оброблена безпосередньо процесором, і тому регістри існують. Насправді процесор навіть не здатний розшифрувати поточну інструкцію програми, яку він запускає, якщо ця інструкція спочатку не була завантажена у відповідний реєстр (як правило, ІМР, "Реєстр інструкцій").

Це пов'язано з тим, як CPU проводиться. Немає фізичного шляху між пам’яттю та АЛУ; всі дані, що надходять до АЛУ, повинні якось буферизуватися в якомусь реєстрі. Це може бути інакше, але схема, необхідна для підключення пам'яті безпосередньо до АЛУ, була б надто складною: легше та ефективніше опосередкувати всю комунікацію між пам'яттю та АЛУ через файл реєстру , як це визначено вищезгаданим шляхом даних . Насправді, навіть коли дана інструкція визначає позицію пам'яті як операнда (режим адресації, відомий як пряма адресація ), відповідний блок даних завантажується в регістр, відомий як MBR (Реєстр буфера пам'яті, іноді називається MDR, буфер даних пам'яті). ).

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.