HTG пояснює, як працює процесор?
Більшість речей у комп'ютері є досить простими для розуміння: оперативна пам'ять, пам'ять, периферійні пристрої та програмне забезпечення працюють разом, щоб зробити функцію комп'ютера. Але серце вашої системи, процесор, здається чарівним навіть для багатьох технологічних людей. Тут ми зробимо все можливе, щоб розбити його.
Більшість досліджень для цієї статті походить від “Але як це знати?” Дж. Кларка Скотта. Це фантастичне читання, переходить у набагато більшу глибину, ніж ця стаття буде, і добре стоїть пара доларів на Amazon.
Одна примітка перед тим, як ми почнемо: сучасні процесори на порядок складніші, ніж те, що ми викладаємо тут. Однією людиною майже неможливо зрозуміти кожен нюанс чіпа з більш ніж мільярдом транзисторів. Проте, основні принципи того, як все це збігається, залишаються незмінними, і розуміння основ дасть вам краще розуміння сучасних систем.
Початок Малий
Комп'ютери працюють у двійковому режимі. Вони розуміють лише два стани: включення і виключення. Для виконання розрахунків у двійковому режимі вони використовують так званий транзистор. Транзистор дозволяє тільки струм джерела протікати через нього в сток, якщо є струм через ворота. По суті, це утворює двійковий перемикач, який відсікає дріт в залежності від другого вхідного сигналу.
Сучасні комп'ютери використовують мільярди транзисторів для виконання розрахунків, але на найнижчих рівнях потрібно лише кілька, щоб сформувати самі основні компоненти, відомі як ворота.
Логічні ворота
Складіть кілька транзисторів належним чином, і у вас є те, що відомо як логічні ворота. Логічні ворота беруть два двійкові входи, виконують на них операцію і повертають вихід. Наприклад, ворота OR повертає true, якщо будь-який з входів є істинним. І ворота перевіряють, якщо обидва входи істинні, XOR перевіряє, якщо тільки один з входів є істинним, і N-варіанти (NOR, NAND і XNOR) є інвертованими версіями їх базових воріт..
Роблячи математику з воротами
За допомогою всього лише двох воріт ви можете зробити базове бінарне додавання. На цій схемі наведена половина суматора, створена за допомогою Logicly, безкоштовного онлайн-майданчика для логічних воріт. Хор XOR вмикається, якщо ввімкнено лише один з входів, але не обидва. І ворота включатимуться, якщо обидва входи увімкнено, але вимкніть, якщо немає входу. Отже, якщо обидва включені, XOR залишається вимкненим, і ворота AND включаються, підходячи до правильної відповіді двох:
Це дає нам просту установку з трьома різними виходами: нуль, один і два. Але один біт не може зберігати нічого вище 1, і ця машина не дуже корисна, оскільки вона вирішує лише одну з найпростіших математичних проблем. Але це лише половина суматора, і якщо ви з'єднаєте два з них з іншим входом, ви отримаєте повний суматор:
Повний суматор має три входи - дві цифри, що додаються, і “переносити”. Перенос використовується, коли кінцеве число перевищує те, що може бути збережено в одному біті. Повні суматори будуть пов'язані в ланцюжку, а перенесення передається від одного суматора до наступного. Перенесення додано до результату XOR-воріт у першій половині суматора, і є додатковий затвор OR для обробки обох випадків, коли так, що потрібно було б.
Коли обидва входи увімкнені, перенесення включається і надсилає його до наступного повного суматора у ланцюжку:
І це приблизно настільки ж складне, як додавання. Перехід до більшої кількості бітів, по суті, означає лише більш повну сукупність у більш довгому ланцюжку.
Більшість інших математичних операцій можна робити з додаванням; Множення просто повторюється додавання, віднімання можна зробити з деякою хитромудрою інверсією, і поділ просто повторюється віднімання. І хоча всі сучасні комп'ютери мають апаратні рішення для прискорення більш складних операцій, ви можете технічно зробити все з повним суматором.
Автобус і пам'ять
Зараз наш комп'ютер - це не більш ніж поганий калькулятор. Це тому, що воно нічого не пам'ятає і нічого не робить зі своїми виходами. Наведена вище клітина пам'яті, яка може робити все це. Під капотом він використовує багато NAND-воріт, і в реальному житті може бути зовсім іншим залежно від техніки зберігання, але його функція однакова. Ви даєте їй деякі входи, увімкніть біт запису, і він буде зберігати входи всередині комірки. Це не просто комірка пам'яті, оскільки нам також потрібен спосіб зчитування інформації з неї. Це робиться за допомогою засобу, який є колекцією AND gates для кожного біта в пам'яті, прив'язаний до іншого входу, біт "read". Біти запису і читання також часто називаються "set" і "enable".
Весь цей пакет загорнутий у те, що називається регістром. Ці регістри з'єднані з шиною, яка є пучком проводів, що працюють по всій системі, підключеної до кожного компонента. Навіть сучасні комп'ютери мають автобус, хоча вони можуть мати кілька автобусів для поліпшення продуктивності багатозадачності.
Кожен регістр все ще має біт запису і читання, але в цій установці вхід і вихід є одним і тим же. Це насправді добре. Наприклад. Якщо ви хочете скопіювати вміст R1 в R2, ви б включили біт читання для R1, який підштовхне вміст R1 до шини. Хоча біт читання увімкнено, потрібно ввімкнути біт запису для R2, який буде копіювати вміст шини в R2.
Регістри також використовуються для створення оперативної пам'яті. Часто оперативна пам'ять викладена в сітці, причому дроти йдуть у двох напрямках:
Декодери беруть двійковий вхід і включають відповідний пронумерований провід. Наприклад, "11" є двома двійковими, найвищим 2-бітним числом, тому декодер буде включати найвищий дріт. На кожному перехресті є регістр. Всі вони підключені до центральної шини, а також до центрального входу запису і читання. Як вхід для читання, так і для запису буде включатися, лише якщо два дроти, що перетинають регістр, також увімкнено, що дозволяє вибирати регістр, з якого потрібно писати і читати. Знову ж таки, сучасна оперативна пам'ять набагато складніша, але ця установка все ще працює.
Годинник, степпер і декодер
Регістри використовуються скрізь і є основним інструментом для переміщення даних і зберігання інформації в процесорі. Так що говорить їм, щоб рухатися навколо?
Годинник є першим компонентом в ядрі центрального процесора і вимикається і вмикається з заданим інтервалом, виміряним в герцах, або циклами в секунду. Це швидкість, яку ви бачите рекламованих поряд з процесорами; чіп 5 ГГц може виконувати 5 мільярдів циклів в секунду. Швидкість годинника часто є дуже хорошим показником для швидкості процесора.
Годинник має три різних стани: базовий годинник, годинник включення і встановлений годинник. Базовий годинник буде увімкнено протягом половини циклу, а для іншої половини - вимкнено. Включити годинник використовується для включення регістрів і потрібно буде увімкнено протягом тривалого часу, щоб переконатися, що дані включені. Встановлений годинник завжди повинен бути включений одночасно з включенням годинника, або можуть бути записані неправильні дані.
Годинник підключається до степпера, який розраховується від одного до максимального кроку, і повертається назад до одного, коли це зроблено. Годинник також підключений до гейтів AND для кожного регістру, до якого може записувати процесор:
Ці І-ворота також з'єднані з виходом іншого компонента, декодера інструкцій. Декодер інструкцій приймає інструкцію типу "SET R2 TO R1" і декодує її в те, що процесор може зрозуміти. Він має свій власний внутрішній реєстр, який називається «Реєстр інструкцій», де зберігається поточна операція. Як саме це відбувається в системі, на якій ви працюєте, але як тільки вона розшифровується, вона вмикає правильний набір і вмикає біти для правильних регістрів, які будуть вимикати відповідно до годинника.
Інструкції програми зберігаються в ОЗУ (або кеш L1 на сучасних системах, ближче до ЦП). Оскільки дані програми зберігаються в регістрах, так само, як і будь-яка інша змінна, її можна маніпулювати на льоту, щоб стрибати навколо програми. Таким чином програми отримують свою структуру, з циклами і операторами if. Інструкція переходу встановлює поточне місце розташування в пам'яті, яке декодер інструкцій читає з іншого місця.
Як все це відбувається разом
Тепер наше грубе спрощення того, як працює ЦП, завершено. Основна шина охоплює всю систему і підключається до всіх регістрів. Повні суматори, разом з купою інших операцій, упаковані в арифметичну логічну одиницю або ALU. Цей ALU буде мати підключення до шини, а також матиме власні регістри для зберігання другого номера, на якому він працює.
Для виконання розрахунку дані програми завантажуються з системної пам'яті в секцію керування. Секція управління зчитує два числа з оперативної пам'яті, завантажує перший в регістр команд ALU, а потім завантажує другий на шину. Між тим, він посилає ALU код інструкції, вказуючи йому, що робити. Потім ALU виконує всі розрахунки і зберігає результат в іншому регістрі, з якого CPU може читати, а потім продовжувати процес.
Зображення: Rost9 / Shutterstock