Як працює комп’ютер?


40

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

Я маю на увазі, як комп’ютер приймає постійний потік електроенергії і перетворює його на 1 і 0, а потім насправді щось робить з тими, що знаходяться в 0 і 0, як увімкнути світло на 15 секунд?

Я розумію ворота (І, АБО, НОР, НАНД, НЕ) та трохи про діоди , резистори та транзистори , але я подумав, що це ідеальне місце, щоб це було пояснено справжніми мирянами!

Чи може хтось вказати мене в правильному напрямку чи дати мені коротке пояснення?


8
Ви також можете запитати "як працюють бактерії?". Це неймовірно широке питання. Я пропоную вам переглянути просту архітектуру процесора (наприклад, MIPS ; нас це вчили в класі) і працювати там вниз і вгору. Питання, з якими ви стикаєтесь на цьому шляху, ймовірно, набагато краще підходять для обміну стеками, ніж цей.
Рафаель

3
Я знаю, як працюють бактерії, її комп'ютер я не люблю
Крістіан

14
Ельфи. Крихітні магічні ельфи.
JeffE

3
дивіться також, як працюють комп’ютери
vzn

1
Найкращий спосіб дізнатися, як комп’ютер насправді працює на найнижчому рівні, - це спроектувати спрощений мікроконтролер на fpga або вручну з воріт Nand. Я робив це в класі "Комп'ютерна архітектура", і це було справді відкриття очей. Це навіть не важко зробити, якщо ви будете тримати все на мінімальному рівні і спроектувати 4-розрядний контролер з додаванням, маніпуляцією бітом і умовним стрибком. Або навіть простіше, апаратне забезпечення, що реалізує спрощену машину Тьюрінга. Гм, цей джут дав мені ідею: дізнайтеся, як працює машина Тьюрінга. Це дасть вам гарне уявлення.
vsz

Відповіді:


47

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

Кодування чисел

Основна мотивація - обчислювати речі, як при виконанні арифметики¹. Перше, на що слід звернути увагу, - як представити числа. Підходів було багато, використовуючи десяткову чи потрійну, і я думаю, навіть вісімкові системи, але, врешті-решт, двійкові виграли. Тепер ми знаємо, що ми повинні створити пристрої, які мають два значення - назвемо їх і .101

Зауважте, що існує також кілька способів кодування чисел у двійковій формі. Після створення першого процесора ви усвідомлюєте переваги певного способу. Популярними прикладами є поплавки з двома доповненнями та IEEE . Для початку обмежтеся простими натуральними числами.

Ворота

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

Як побудувати такі ворота, виходить за рамки інформатики; електрична інженерія запропонувала багаторазове рішення, використовуючи, наприклад, трубки або транзистори . Перейдіть до біржі стека електротехніки для запитань з цього приводу.

Годинник та штат

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

Це означає, що результати одного циклу, можливо, доведеться зберігати до наступного циклу, наприклад, якщо ви з'єднаєте петлі. Існує ряд основних елементів, які ви можете використовувати з різним ефектом, і все це створюється з воріт; деякі називаються шльопанці . Вони також використовуються для створення регістрів , елементів, що зберігають номери на стільки годинних циклів, скільки потрібно.

Архітектура та команди

Тепер у вас є безліч варіантів дизайну. Які арифметичні операції забезпечує ваш процесор? Як виглядають ваші команди? Подивитися на архітектуру MIPS , ранні форми якої легко порівняно з іншими проектами, може бути навчальним . Погляньте на плани :

MIPS одноетапний
Оригінал від http://ube.ege.edu.tr/~erciyes/CENG311

По суті, це збирання та демонтаж команд, набір регістрів, ALU та управління. Команди кодують, яку операцію ALU виконувати, які операнди (за номером реєстру, в якому вони містяться), як маніпулювати лічильником програми² або який реєстр завантажувати / зберігати з / в пам'ять³.

Подальші міркування

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

Альтернативи

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

Тож можливо (сподіваємось?) Вищенаведена інформація - це вся давня історія ще через 50 чи 100 років.


  1. Всі модні речі, які ми робимо сьогодні з комп’ютерами, розбиваються на багато невеликих арифметичних завдань, які процесор виконує по черзі.
  2. Якщо ваша модель дозволяє програмі управляти потоком управління, це буде адреса пам'яті, від якої отримує наступну інструкцію процесор. Ви також можете створити машини, які читають лише фіксований набір інструкцій із, скажімо, стрічки. Насправді це зробили ранні впровадження. Жодні стрибки не означали жодних циклів; програма - це повністю розгорнута / розгорнута серія інструкцій залежно від даних. Очевидно, що можливість використання однієї програми для кількох вхідних даних є більш потужною.
  3. Якщо припустити, що у вас є пам'ять; ваш процесор працює нормально без, але потім може працювати лише з такою кількістю значень одночасно. Ранні комп’ютери читали всі свої дані з стрічок і зберігали їх у реєстрах. Не було ні пам’яті, не кажучи вже про захищене, стійке сховище, як ми це знаємо сьогодні.

Оце Так! Це заслуговує на плескання. Це було чудове прочитання. Дякую, що поділився. Я, безумовно, чогось навчився. Хоча, прочитавши це, я думаю, що те, що я хочу знати, це більше основи електротехніки з точки зору того, як вона фізично контролює електроенергію. Я поставлю це ж питання до цієї групи трохи пізніше сьогодні. Дякую!
Крістіан

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

Я думаю, що це не швидка відповідь. Одного разу я заплачу інженеру-комп’ютеру, який будує подібні материнські плати чи мобільні телефони, як саме працюють основи. Тобто, як комп’ютер насправді обчислює або вмикає світло протягом 5 секунд, а потім вимикається. Я думаю, що це багато стосується вимикачів і конденсаторів.
Крістіан

@Christian Якщо ви хочете заощадити гроші, подумайте про придбання експериментальної коробки EE (наприклад, для дітей), яка включає транзистори. Як правило, включається перемикання вогнів або побудова невеликого додавача, afaik. (Знову ж, люди з електротехніки, напевно, знають більше.)
Рафаель

25

Повна картина досить складна. Існує безліч шарів, побудованих один над одним, які спільно реалізують високі абстракції поверх електричних напруг. Немає простого пояснення того, як все складається разом, особливо зважаючи на те, що апаратне та програмне забезпечення комп'ютерів різко еволюціонувало за останні п’ятдесят років.

Якщо вам цікаво побачити, як все складено разом, ви можете перевірити «Елементи обчислювальних систем» - книгу, яка починається з воріт NAND і поступово створює робочу реалізацію Tetris поверх компілятора та операційної системи, які ви також будуєте. Кожен фрагмент комп'ютера побудований на попередньому, що може допомогти вам побачити, як все працює.


Це звучить як ідеальне стартове місце. Почнемо там. Дуже дякую :)
Крістіан

2
Я також рекомендую прочитати КОД «Чарльз Петзольд».
ybakos

7

Підкаст Безпека зараз! зробив серію про те, як працюють комп'ютери, починаючи з базових принципів.

  • 233 - Давайте спроектуємо комп’ютер (частина 1)
  • 235 - Мова машини
  • 237 - Непрямий: Сила покажчиків (технічно не є частиною серії)
  • 239 - Стеки, регістри та рекурсії
  • 241 - апаратні переривання
  • 247 - Навпаки "Мульти"
  • 250 - Операційні системи
  • 252 - RISCy Business
  • 254 - Що ми зробимо для швидкості

Прогалини в числах є тому, що кожен інший епізод - це зворотній зв'язок слухача, тож ви можете також переглянути їх. Також між 241 та 247 роками вони зробили декілька епізодів про SSL через найсвіжіші новини про те, що країни, які змушують ЦА надати їм кореневі сертифікати, також були декілька.

Також EP. 248 - "Портативний вбивця собак", який не вбиває собак, а звукову зброю променями, яку Стів зробив самостійно в дитинстві, щоб допомогти навчити сусідського собаку не підбігати до лінії паркану і намагатися нападати на людей по тротуару .


цікаво! Дякую, що поділився. Я буду дивитись.
Крістіан

4

Комп'ютер працює, маніпулюючи градієнтами енергії (які ми потім інтерпретуємо як "1" і "0" послідовно , визначено . Саме послідовність визначає комп'ютер, в той час як саме визначення розділяє різні процесори.

Крім того, дізнайтеся про те, як лише два логічні ворота (АБО та І) є достатніми будівельними блоками для створення будь-якого комп'ютера загального призначення. Дивіться також Danny Hillis та комп'ютер Tinkertoy.


Це було цікавим прочитанням про TinkerToy, особливо про те, що він завжди перемагає! ( Science20.com/brain_candyfeed_your_mind/… )
Крістіан,

Однак, хоча я добре розумію, як комп'ютер «думає», тобто, даючи йому кожну комбінацію та механіку, щоб знайти наступну відповідь, задану попередньою, він не відповідає на моє первісне питання, як насправді побудувати комп’ютер. Припустимо, я пряму вниз до свого місцевого магазину електротехнічного обладнання (у якого є все), щоб придбати фундаментальні біти (транзистори, резистори, конденсатори, ворота тощо) і налаштувати їх, щоб у мене був надзвичайно базовий комп'ютер, що мені потрібно? Адже перший комп’ютер був розміром зі складом із бітами та проводами, тому це має бути можливо!
Крістіан

@Christian: ха-ха, гаразд, побудуйте основні логічні ворота (І / АБО / НЕ) декілька тригерів для основного зберігання пам’яті, і ви, можливо, зможете додати два 4-розрядних числа.

У мене є шльопанці! Дві пари насправді.
Крістіан

3

Комп’ютер - це велика синхронна логічна система , що означає, що

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

0/1

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

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

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

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

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


-1

Існує кілька способів зробити функцію затримки або перетворити двійкові дані в десяткові дані або потужність сигналу. Коли ви вводите значення "15", комп'ютер відображає на екрані растрове зображення числа 15. Це фактично двійкове значення, на даний момент двійковий код вашої клавіатури також відправляється на процесор. Він буде аналізувати дані, а потім перетворювати код на блок обробки процесорів АЛУ (арифметична логічна одиниця), щоб перетворити його на імпульсний чип ЦАП. Тепер аналоговий сигнал управляє частотою (частотою від кГц до Гц) ланцюга відкидання. Тепер частотний вихід буде спрямований на оперативну пам'ять, а процесор зчитує оперативну пам'ять, щоб відповідати, якщо дані "1111". Так що це 4 секунди.


Я не впевнений, як це відповідає на питання.
Yuval Filmus

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