Я начну с самого низкого уровня, который может быть релевантным (я могу начать с еще более низкого уровня, но они, вероятно, слишком несущественны), начиная с атома, электричества, транзисторов, логических вентилей, интегральных схем (чип / процессор). ) и заканчивает сборку (я предполагаю, что вы знакомы с более высокими уровнями).
В начале
Атом
Атом - это структура, состоящая из электронов, протонов и нейтронов (которые сами состоят из элементарных частиц ). Самая интересная часть атома для компьютеров и электроники - это электроны, потому что электрон подвижен (то есть он может перемещаться относительно легко, в отличие от протонов и нейтронов, которые труднее перемещать), и они могут свободно плавать, не задерживаясь внутри атом.
Обычно каждый атом имеет одинаковое количество протонов и электронов, мы называем это «нейтральным» состоянием. Как это бывает, атом может потерять или получить дополнительные электроны. Говорят, что атомы в этом неуравновешенном состоянии являются «положительно заряженным» атомом (больше протона, чем электронов) и «отрицательно заряженным» атомом (больше электрона, чем протона) соответственно.
Электроны неуничтожимы и неуничтожимы (не так в квантовой механике, но это не имеет значения для нашей цели); поэтому, если атом теряет электрон, некоторый другой атом поблизости должен был получить дополнительные электроны, или электрон должен был высвободиться в свободно плавающий электрон, и наоборот, поскольку электрон не разрушаем, чтобы получить дополнительный электрон, атом должен был вытолкнуть его из соседних атомов. или от свободно плавающего электрона. Механика электронов такова, что если рядом с положительно заряженным атомом находится отрицательно заряженный атом, то некоторые электроны будут мигрировать, пока оба атома не получат одинаковый заряд.
Электричество
Электричество - это просто поток электронов из области с очень большим количеством отрицательно заряженных атомов в область с очень большим количеством положительно заряженных атомов. Определенные химические реакции могут создать ситуацию, когда у нас есть один узел с большим количеством отрицательно заряженных атомов (называемый «анод»), и другой узел с большим количеством положительно заряженных атомов (называемый «катод»). Если мы соединяем два противоположно заряженных узла проводом, массы электронов будут течь от анода к катоду, и этот поток мы называем «электрическим током».
Не все провода могут передавать электроны одинаково легко, электроны протекают гораздо легче в «проводящих» материалах, чем в «стойких» материалах. «Проводящий» материал имеет низкое электрическое сопротивление (например, медные провода в кабелях), а «устойчивый» материал имеет высокое электрическое сопротивление (например, резиновая изоляция кабеля). Некоторые интересные материалы называются полупроводниками (например, силиконы), поскольку они могут легко изменять свое сопротивление, при определенных условиях полупроводник может выступать в качестве проводника, а при других условиях он может превращаться в резистор.
Электричество всегда предпочитает протекать через материал с наименьшим сопротивлением, поэтому, если катод и анод соединены двумя проводами, один из которых имеет очень высокое сопротивление, а другой - с очень низким сопротивлением, большинство электронов будет протекать через кабель с низким сопротивлением и почти ни один не течет через материал с высоким сопротивлением.
Средний возраст
Переключатели и Транзисторы
Выключатели / триггеры, как ваши обычные выключатели света, переключатель может быть помещен между двумя кусками провода, чтобы отключить и / или восстановить поток электроэнергии. Транзисторы работают точно так же, как выключатель света, за исключением того, что вместо физического подключения и отключения проводов транзистор подключает / отключает поток электроэнергии, изменяя его сопротивление в зависимости от того, есть ли электричество в базовом узле, и, как вы уже могли догадаться / Знаете, транзисторы сделаны из полупроводников, потому что мы можем изменить полупроводник, чтобы стать резистором или проводником для подключения или отключения электрических токов.
Один общий тип транзистора, NPN Bipolar Junction Transistor (BJT), имеет три узла: «основание», «коллектор» и «эмиттер». В NPN BJT электричество может течь от узла-эмиттера к узлу-коллектору, только когда «базовый» узел заряжен. Когда базовый узел не заряжен, электроны практически не могут проходить через него, а когда базовый узел заряжается, электроны могут течь между эмиттером и коллектором.
Поведение транзистора
(Я настоятельно рекомендую вам прочитать это, прежде чем продолжить, поскольку это может объяснить лучше, чем я с интерактивной графикой)
Допустим, у нас есть транзистор, подключенный к электрическому источнику на его базе и коллекторе, а затем мы подключаем выходной кабель рядом с его коллектором (см. Рисунок 3 в http://www.spsu.edu/cs/faculty/bbrown/web_lectures / транзисторы / ).
Когда мы не подаем электричество ни на базу, ни на коллектор, тогда электричество вообще не может течь, поскольку нет электричества, о котором можно говорить:
B C | E O
0 0 | 0 0
Когда мы подаем электричество на коллектор, но не на базу, электричество не может течь к эмиттеру, поскольку основание становится материалом с высоким сопротивлением, поэтому электричество уходит на выходной провод:
B C | E O
0 1 | 0 1
Когда мы подаем электричество на базу, но не на коллектор, электричество также не может течь, поскольку между коллектором и эмиттером нет разницы в заряде:
B C | E O
1 0 | 0 0
Когда мы подаем электричество как на базу, так и на коллектор, мы получаем электричество, протекающее через транзистор, но поскольку транзистор теперь имеет более низкое сопротивление, чем выходной провод, электричество почти не протекает через выходной провод:
B C | E O
1 1 | 1 O
Логические ворота
Когда мы подключаем эмиттер одного транзистора (E1) к коллектору другого транзистора (C2), а затем подключаем выход около базы первого транзистора (O) (см. Рисунок 4 в http://www.spsu.edu). / cs / faculty / bbrown / web_lectures / transistors / ), тогда происходит нечто интересное. Скажем также, что мы всегда подаем электричество на коллектор первого транзистора (C1), и поэтому мы работаем только с базовыми узлами транзисторов (B1, B2):
B1 B2 C1 E1/C2 | E2 O
----------------------+----------
0 0 1 0 | 0 1
0 1 1 0 | 0 1
1 0 1 0 | 0 1
1 1 1 1 | 1 0
Подведем итоги таблицы, чтобы мы увидели только B1, B2 и O:
B1 B2 | O
---------+-----
0 0 | 1
0 1 | 1
1 0 | 1
1 1 | 0
И вот , если вы знакомы с Boolean Logic и / или Logic Gates, вы должны заметить, что это именно ворота NAND. И если вы знакомы с Boolean Logic и / или Logic Gates, вы также можете знать, что NAND (а также NOR) функционально завершен , то есть, используя только NAND, вы можете построить все другие логические элементы и всю правду. столы. Другими словами, вы можете сконструировать целый компьютерный чип, используя только ворота NAND.
На самом деле, большинство процессоров (или они раньше были?) Спроектированы с использованием только NAND, поскольку их производство дешевле, чем использование комбинации NAND, NOR, AND, OR и т. Д.
Вывод других логических операторов из NAND
Я бы не стал описывать, как сделать все логические операторы, только НЕ и логический элемент И, остальные можно найти где-то еще.
Учитывая оператор NAND, мы можем построить НЕ ворота:
Given one input B
O = NAND(B, B)
Output O
Учитывая операторы NAND и NOT, мы можем построить вентиль AND:
Given two inputs B1, B2
C = NAND(B1, B2)
O = NOT(C) // or NAND(C,C)
Output O
Мы можем построить другие логические элементы аналогичным образом. Поскольку NAND-шлюз функционально завершен , также возможно создание логических вентилей с более чем 2 входами и более чем 1 выходом, я не буду обсуждать, как построить такие логические вентили здесь.
Эпоха Просвещения
Построение машины Тьюринга из Булевых ворот
Процессор - это просто более сложная версия машины Тьюринга. Регистры ЦП - это внутреннее состояние машины Тьюринга, а ОЗУ - лента ленты Тьюринга.
Машина Тьюринга (ЦП) может делать три вещи:
- чтение 0 или 1 с ленты (чтение ячейки памяти из ОЗУ)
- изменить его внутреннее состояние (изменить его регистры)
- двигаться влево или вправо (чтение нескольких позиций из ОЗУ)
- записать 0 или 1 на ленту (запись в ячейку памяти в RAM)
Для нашей цели мы строим машину Тьюринга из 2-х состояний из 2-х состояний Вольфрама с использованием комбинаторной логики (современные процессоры используют микрокод, но они более сложны, чем это необходимо для нашей цели).
Таблица состояний машины Тьюринга Вольфрама (2,3) выглядит следующим образом:
A B
0 P1,R,B P2,L,A
1 P2,L,A P2,R,B
2 P1,L,A P0,R,A
Мы хотим перекодировать приведенную выше таблицу состояний в таблицу истинности:
Let I1,I2 be the input from the tape reader (0 = (0,0), 1 = (0,1), 2 = (1,0))
Let O1,O2 be the tape writer (symbol encoding same as I1,I2)
Let M be connected to the machine's motor (0 = move left, 1 = move right)
Let R be the machine's internal state (A = 0, B = 1)
(R(t) is the machine's internal state at timestep t, R(t+1) at timestep t+1)
(Note that we used two input and two outputs since this is a 3-symbol Turing machine.)
R 0 1
I1,I2
(0,0) (0,1),1,1 (1,0),0,0
(0,1) (1,0),0,0 (1,0),1,1
(1,0) (0,1),0,0 (0,0),1,0
The truth table for the state table above:
I1 I2 R(t) | O1 O2 M R(t+1)
-------------+--------------------
0 0 0 | 0 1 1 1
0 0 1 | 1 0 0 0
0 1 0 | 1 0 0 0
0 1 1 | 1 0 1 1
1 0 0 | 0 1 0 0
1 0 1 | 0 0 1 0
На самом деле я не собираюсь создавать такие логические ворота (я не уверен, как нарисовать их в SE, и, вероятно, они будут довольно большими), но, поскольку мы знаем, что ворота NAND функционально завершены , у нас есть способ найти ряд ворот NAND, которые будут реализовывать эту таблицу истинности.
Важным свойством машины Тьюринга является то, что можно эмулировать компьютер с хранимой программой, используя машину Тьюринга, которая имеет только таблицу фиксированных состояний. Поэтому любая универсальная машина Тьюринга может считывать свою программу с ленты (ОЗУ), вместо того чтобы жестко кодировать ее инструкцию во внутренней таблице состояний. Другими словами, наша (2,3) машина Тьюринга может считывать свои инструкции с выводов I1, I2 (как программное обеспечение) вместо жесткого кодирования в реализации логического элемента (как аппаратное обеспечение).
микрокодов
Из-за растущей сложности современных процессоров становится непростительно использовать только комбинаторную логику для проектирования всего процессора. Современный процессор обычно предназначен для интерпретации инструкций микрокодов; Микрокод - это небольшая программа, встроенная в ЦП, которая используется ЦП для интерпретации фактического машинного кода. Сам этот интерпретатор микрокода обычно разрабатывается с использованием комбинаторной логики.
Регистр, Кэш и ОЗУ
Мы забыли что-то выше. Как мы помним что-то? Как мы реализуем ленту и оперативную память? Ответ находится в электронном компоненте под названием Конденсатор. Конденсатор подобен перезаряжаемой батарее, если конденсатор заряжен, он будет удерживать дополнительные электроны и также может возвращать электроны в схему.
Чтобы записать в конденсатор, мы заполняем конденсатор электроном (запись 1) или сливаем все электроны в конденсаторе, пока он не опустеет (запись 0). Чтобы прочитать значение конденсатора, мы пытаемся разрядить его. Если, когда мы пытаемся разрядиться, электричество не течет, то конденсатор пуст (читается 0), но если мы обнаруживаем электричество, тогда конденсатор должен быть заряжен (читайте 1). Вы можете заметить, что чтение конденсатора истощает запасы электронов, современные ОЗУ имеют схему, позволяющую периодически перезаряжать конденсатор, чтобы они могли сохранять свою память, пока есть электричество.
В ЦП используется несколько типов конденсаторов, регистры ЦП и кэши ЦП более высокого уровня создаются с использованием очень высокоскоростных «конденсаторов», которые фактически построены из транзисторов (поэтому практически нет «задержки» для чтения / записи с их), они называются статическим ОЗУ (SRAM); в то время как основная оперативная память сделана с использованием более низкой мощности, но более медленных и гораздо более дешевых конденсаторов, они называются динамической оперативной памятью (DRAM).
Часы
Очень важным компонентом процессора являются часы. Часы - это компонент, который регулярно «тикает» для синхронизации обработки. Часы обычно содержат кварц или другие материалы с хорошо известным и относительно постоянным периодом колебаний, и схема часов поддерживает и измеряет эти колебания, чтобы поддерживать ощущение времени.
Операции процессора выполняются между тактами, а чтение / запись выполняются в тактах, чтобы гарантировать, что все компоненты движутся синхронно и не вталкиваются друг в друга в промежуточных состояниях. В нашей (2,3) машине Тьюринга между тактами отсчета электричество проходит через логические элементы, чтобы вычислить выходной сигнал от входа (I1, I2, R (t)); и в тактах, записывающее устройство записывает O1, O2 на ленту, двигатель будет двигаться в зависимости от значения M, а внутренний регистр записывается из значения R (t + 1), затем считыватель ленты прочтет текущую ленту и зарядит I1, I2, а внутренний регистр перечитает обратно в R (t).
Разговор с периферией
Обратите внимание, как (2,3) машина Тьюринга взаимодействует со своим двигателем. Это очень упрощенное представление о том, как процессор может взаимодействовать с произвольным оборудованием. Произвольное оборудование может прослушивать или записывать данные на конкретный провод для входов / выходов. В случае (2,3) машины Тьюринга ее интерфейс с двигателем представляет собой просто один провод, который дает команду двигателю вращаться по часовой стрелке или против часовой стрелки.
На этой машине не сказано, что у двигателя должны были быть другие «часы», которые работают синхронно с внутренними «часами» машины, чтобы знать, когда начинать и останавливать работу, так что это пример синхронной передачи данных . Другая широко используемая альтернатива, асинхронная передача, использует другой провод, называемый линией прерывания, для связи точек синхронизации между ЦП и асинхронным устройством.
Цифровой век
Машинный код и сборка
Ассемблер является понятным для человека мнемоникой машинных кодов. В простейшем случае существует взаимно-однозначное соответствие между сборкой и машинным кодом; хотя в современных языках ассемблера некоторые инструкции могут отображаться на несколько кодов операций.
Язык программирования
Мы все знакомы с этим, не так ли?
Фу, наконец закончил, я набрал все это всего за 4 часа, так что я уверен, что где-то есть ошибка (я в основном программист, а не инженер-электрик или физики, так что может быть несколько вещей, которые явно ошибочны). Пожалуйста, если вы нашли ошибку, не стесняйтесь дать @yell или исправить ее самостоятельно, если у вас есть представитель или создать дополнительный ответ.