Це широке запитання, на яке немає простої відповіді; це довгий шлях від замикання електронів вздовж мідних дротів до візуалізації веб-сайту у Firefox. Я спробую дати вам огляд знизу вгору і вкажу на правильні речі, які слід шукати.
Кодування чисел
Основна мотивація - обчислювати речі, як при виконанні арифметики¹. Перше, на що слід звернути увагу, - як представити числа. Підходів було багато, використовуючи десяткову чи потрійну, і я думаю, навіть вісімкові системи, але, врешті-решт, двійкові виграли. Тепер ми знаємо, що ми повинні створити пристрої, які мають два значення - назвемо їх і .101
Зауважте, що існує також кілька способів кодування чисел у двійковій формі. Після створення першого процесора ви усвідомлюєте переваги певного способу. Популярними прикладами є поплавки з двома доповненнями та IEEE . Для початку обмежтеся простими натуральними числами.
Ворота
Припустимо, ми використовуємо двійкове кодування. Подумайте, як ви навчились додавати в початковій школі і запишіть те саме для двійкових чисел. Як виявляється, будівельні блоки булевої алгебри вже є для вас; легко побудувати базовий суматор (та інші арифметичні функції), використовуючи логічні ворота .
Як побудувати такі ворота, виходить за рамки інформатики; електрична інженерія запропонувала багаторазове рішення, використовуючи, наприклад, трубки або транзистори . Перейдіть до біржі стека електротехніки для запитань з цього приводу.
Годинник та штат
Не всі ворота однаково швидкі, і не всі частини обчислення мають однакову кількість воріт. Тому ми повинні подбати про те, щоб окремі операції не обганяли один одного. Корисно використовувати глобальний годинник ; результатом заданої мережі воріт є стан вихідних проводів в кінці циклу (який може дико змінюватися, коли каскади каскадують у напрямку до їх окремих кінцевих станів).
Це означає, що результати одного циклу, можливо, доведеться зберігати до наступного циклу, наприклад, якщо ви з'єднаєте петлі. Існує ряд основних елементів, які ви можете використовувати з різним ефектом, і все це створюється з воріт; деякі називаються шльопанці . Вони також використовуються для створення регістрів , елементів, що зберігають номери на стільки годинних циклів, скільки потрібно.
Архітектура та команди
Тепер у вас є безліч варіантів дизайну. Які арифметичні операції забезпечує ваш процесор? Як виглядають ваші команди? Подивитися на архітектуру MIPS , ранні форми якої легко порівняно з іншими проектами, може бути навчальним . Погляньте на плани :
Оригінал від http://ube.ege.edu.tr/~erciyes/CENG311
По суті, це збирання та демонтаж команд, набір регістрів, ALU та управління. Команди кодують, яку операцію ALU виконувати, які операнди (за номером реєстру, в якому вони містяться), як маніпулювати лічильником програми² або який реєстр завантажувати / зберігати з / в пам'ять³.
Подальші міркування
На сьогоднішній день у вас працює робочий процесор у сучасному розумінні, припускаючи, що ви зрозуміли, як створити пам'ять та спосіб її живлення командами. На шляху до сучасної машини потрібно зробити багато варіантів. Ось декілька:
Альтернативи
На вищесказане сильно впливає те, як виявилася історія. В іншому світі з іншим розумом комп'ютери можуть працювати по-різному. Насправді існує маса моделей обчислень , деякі з яких мають переваги, які роблять їх корисними як абстрагування для реальних машин у багатьох випадках. Існують також спроби наслідувати спосіб роботи нашого мозку, тобто давати можливість нейронних обчислень або, загалом, використовувати стратегії вирішення проблем та зберігання інформації, що спостерігаються в природі , найбільш чітко ДНК та квантові обчислення.
Тож можливо (сподіваємось?) Вищенаведена інформація - це вся давня історія ще через 50 чи 100 років.
- Всі модні речі, які ми робимо сьогодні з комп’ютерами, розбиваються на багато невеликих арифметичних завдань, які процесор виконує по черзі.
- Якщо ваша модель дозволяє програмі управляти потоком управління, це буде адреса пам'яті, від якої отримує наступну інструкцію процесор. Ви також можете створити машини, які читають лише фіксований набір інструкцій із, скажімо, стрічки. Насправді це зробили ранні впровадження. Жодні стрибки не означали жодних циклів; програма - це повністю розгорнута / розгорнута серія інструкцій залежно від даних. Очевидно, що можливість використання однієї програми для кількох вхідних даних є більш потужною.
- Якщо припустити, що у вас є пам'ять; ваш процесор працює нормально без, але потім може працювати лише з такою кількістю значень одночасно. Ранні комп’ютери читали всі свої дані з стрічок і зберігали їх у реєстрах. Не було ні пам’яті, не кажучи вже про захищене, стійке сховище, як ми це знаємо сьогодні.