Как работает компьютер?

40

Я был компьютерным ботаником много-много лет. Я могу программировать на нескольких языках и даже могу их создавать. Я сел с приятелем на днях и спросил, как компьютер на самом деле берет электричество и что-то с ним делает, и мы просто не могли понять это, и Google тоже не сильно помог.

Я имею в виду, как компьютер берет постоянный поток электричества и превращает его в 1 и 0, а затем фактически делает что-то с этими 1 и 0, как включить свет на 15 секунд?

Я понимаю ворота (И, ИЛИ, НОР, НАН, НЕ) и немного о диодах , резисторах и транзисторах , но я подумал, что это было бы идеальным местом, чтобы объяснить это с точки зрения истинных мирян!

Кто-нибудь может указать мне правильное направление или дать мне краткое объяснение?

Кристиан
источник
8
Вы могли бы также спросить «как работают бактерии?». Это невероятно широкий вопрос. Я предлагаю вам взглянуть на простую архитектуру процессора (например, MIPS ; нас этому учили в классе) и оттуда работать вниз и вверх. Вопросы, с которыми вы сталкиваетесь, вероятно, гораздо лучше подходят для Stack Exchange, чем этот.
Рафаэль
3
Я знаю, как работают бактерии, это компьютер, который я не понимаю
Кристиан
14
Эльфы. Крошечные магические эльфы.
Джефф
3
смотрите также, как работают компьютеры
vzn
1
Лучший способ узнать, как на самом деле работает компьютер на самом низком уровне, - это создать упрощенный микроконтроллер на FPGA или вручную от Nand Gates. Я сделал это в классе "Компьютерная архитектура", и это было действительно откровением. Это даже не сложно сделать, если вы сохраняете все на минимуме и разрабатываете 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 (например, для детей), которая включает в себя транзисторы. Переключение света или создание небольшого сумматора, как правило, включены, афаик. (Опять же, электротехники, вероятно, знают больше.)
Рафаэль
25

Полная картина довольно сложная. Существует много слоев, построенных друг на друге, которые совместно реализуют абстракции высокого уровня поверх электрических напряжений. Нет простого объяснения того, как все соединено, особенно если учесть, что компьютерное оборудование и программное обеспечение значительно изменились за последние пятьдесят лет.

Если вы заинтересованы в том, чтобы увидеть, как все соединено воедино, вы можете обратиться к книге «Элементы вычислительных систем» - книге, которая начинается с шлюзов NAND и постепенно создает работающую реализацию Tetris поверх компилятора и операционной системы, которая Вы также строите. Каждая часть компьютера построена на предыдущей, что может помочь вам увидеть, как все работает.

templatetypedef
источник
Это звучит как идеальная отправная точка. Начну там. Большое спасибо :)
Кристиан
2
Я также рекомендую прочитать CODE Чарльза Петцольда.
Ибакос
7

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

  • 233 - Давайте создадим компьютер (часть 1)
  • 235 - Машинный язык
  • 237 - косвенное указание: сила указателей (технически не является частью серии)
  • 239 - Стеки, регистры и рекурсия
  • 241 - Аппаратные прерывания
  • 247 - «Мульти» обратный
  • 250 - Операционные системы
  • 252 - RISCy Business
  • 254 - Что мы сделаем для скорости

Пробелы в числах объясняются тем, что каждый другой эпизод является эпизодом обратной связи с слушателем, поэтому вы можете захотеть его посмотреть. Также между 241 и 247 они сделали несколько эпизодов о SSL из-за последних новостей о странах, которые вынуждают CA выдавать им корневые сертификаты.

Также EP. 248 - это «Portable Dog Killer», который убивает не собак, а звуковое оружие, которое Стив сделал в детстве, чтобы научить соседскую собаку не бегать к линии ограды и пытаться атаковать людей на тротуаре. ,

Скотт Чемберлен
источник
интересный! Спасибо, что поделились. Я взгляну.
Кристиан
4

Компьютер работает, манипулируя градиентами энергии (которые мы затем интерпретируем как 1 и 0) последовательным , определенным образом. Это согласованность, которая определяет компьютер, в то время как это определение, которое разделяет различные процессоры.

Кроме того, узнайте, как всего два логических элемента (ИЛИ и И) являются достаточными строительными блоками для создания любого компьютера общего назначения. Смотрите также Дэнни Хиллис и компьютер Тинкертой.


источник
Это был интересный материал о TinkerToy, особенно тот факт, что он всегда побеждает! ( Science20.com/brain_candyfeed_your_mind/… )
Кристиан,
Тем не менее, хотя он дает мне хорошее представление о том, как «думает» компьютер, т. Е. Дает ему каждую комбинацию и механизм, чтобы найти следующий ответ, учитывая предыдущий, он не отвечает на мой первоначальный вопрос о том, как на самом деле построить компьютер. Предположим, я иду в свой местный магазин электротоваров (в котором есть все), чтобы купить основные биты (транзисторы, резисторы, конденсаторы, вентили и т. Д.) И настроить их так, чтобы у меня был очень простой компьютер, что мне нужно? В конце концов, первый компьютер был размером с склад с битами и проводами, так что это должно быть возможно!
Кристиан
@Christian: ха-ха, ладно, постройте некоторые базовые логические элементы (И / ИЛИ / НЕ), несколько триггеров для хранения основной памяти, и вы можете добавить два 4-битных числа.
У меня есть шлепанцы! На самом деле две пары.
Кристиан
3

Компьютер - это большая синхронная логическая система , а это значит, что

  • 0/1
  • он работает с (очень быстрым) тактовым сигналом, поэтому все сигналы дискретизируются в отдельные моменты для обеспечения согласованности.

0/1

Он имеет специализированные схемы для хранения информации, пока компьютер включен (ОЗУ, в огромных количествах). Он имеет специализированные схемы для выполнения двоичной арифметики (на самом деле биты обрабатываются группами - как правило, кратными 8 - которые вместе представляют целое число). И у него есть специальные возможности маршрутизации, основанные на адресах памяти, которые являются не чем иным, как целыми числами.

Наконец, что не менее важно, современный компьютер имеет программу, также хранящуюся в ОЗУ, которая представляет собой список инструкций, закодированных как целые числа, которые выполняются последовательно, обычно выбирая данные из памяти, выполняя некоторую арифметику и отправляя результаты обратно в память.

В вашем сценарии можно подумать о реализации, в которой истекшее время хранится где-то в ОЗУ, и программа дает команду

  • получить значение прошедшего времени,
  • увеличить его с помощью сумматора,
  • сравнить его с заранее заданной задержкой с помощью компаратора,
  • возврат к начальному адресу программы в случае неравенства (т. е. «петли»),
  • в противном случае устанавливается специализированный сигнал, который поступает на внешний коммутатор, а не в ОЗУ.

Обратите внимание, что все эти элементы в настоящее время достигают высокой степени сложности, и каждое предложение в этом очень кратком обзоре заслуживает нескольких книг объяснений.

Ив Дауст
источник
-1

Есть несколько способов сделать функцию задержки или преобразовать двоичные данные в десятичные данные или уровень сигнала. Когда вы вводите значение «15», компьютер отображает растровое изображение числа 15 на экране. На самом деле это двоичное значение, в данный момент двоичный код вашей клавиатуры также отправляется в процессор. Он будет анализировать данные, а затем преобразовывать код в блок обработки ALU (арифметическая логика), чтобы преобразовать его в импульсную микросхему ЦАП. Аналоговый сигнал теперь контролирует частоту (частоту от кГц до Гц) триггера. Теперь выходная частота будет направлена ​​в ОЗУ, а процессор считывает ОЗУ, чтобы соответствовать, если данные равны «1111». Это 4 секунды.

Lan ...
источник
Я не уверен, как это отвечает на вопрос.
Юваль
Вы можете видеть, что он спросил, как мигает компьютер в течение 15 секунд, и я объясняю, как компьютер создает второе значение для использования в цикле.
Lan ...