Как работают компьютеры? [закрыто]

59

Это почти неловко спрашивать ... У меня есть степень в области компьютерных наук (и вторая в процессе). Я работаю постоянным разработчиком .NET почти пять лет. Я вообще, кажется, компетентен в том, что я делаю.

Но я не знаю, как работают компьютеры!

Пожалуйста, держись со мной на секунду. Быстрый Google «Как работает компьютер» даст много и много результатов, но я изо всех сил пытался найти тот, который действительно ответил бы на то, что я ищу. Я понимаю, что это огромный вопрос, так что если вы можете просто дать мне несколько ключевых слов или направление.

Я знаю, что есть компоненты ... источник питания, материнская плата, оперативная память, процессор и т. Д. ... и я получил общее представление о том, что они делают. Но я действительно не понимаю, как вы переходите от такой строки кода, как Console.Readline()в .NET (или Java или C ++), и действительно ли она что- то делает .

Конечно, я смутно осведомлен о MSIL (в случае .NET), и что с JIT-компилятором происходит какое-то волшебство, и оно превращается в нативный код (я думаю). Мне сказали, что Java похожа, а C ++ исключает средний шаг.

Я сделал несколько сборок мэйнфреймов, это было несколько лет назад. Я помню, что были некоторые инструкции и некоторые регистры процессора, и я написал код .... и затем произошло какое-то волшебство .... и моя программа работала (или вылетала). Из того, что я понимаю, «эмулятор» имитирует то, что происходит, когда вы вызываете инструкцию, и обновляет регистры процессора; но что заставляет эти инструкции работать так, как они?

Превращается ли это в вопрос об электронике, а не в вопрос «компьютера»? Я предполагаю, что у меня нет никаких практических причин, чтобы понять это, но я чувствую, что должен это сделать.

(Да, это то, что происходит, когда вы проводите день с маленьким ребенком. У вас уходит около 10 минут и пять итераций с вопросом «Почему?», Чтобы вы поняли, сколько вы не знаете)

Роб П.
источник
20
Я бы порекомендовал Code от Charles Petzold
Это не Emulator. Это набор реальных полупроводниковых схем с сотнями (тысячами) входных и выходных проводов и миллиардами логических элементов. EmulatorИспользовался только для учебных целей.
Руон
1
Я думаю, что название должно быть изменено, чтобы быть более конкретным / информативным. На самом деле это довольно полезный вопрос, но на первый взгляд он выглядит совершенно нелепо, как то, что изначально спрашивал маленький ребенок. Измените его на что-то вроде «как программные команды высокого уровня соединяются с аппаратными ответами низкого уровня?»
Джоккинг
2
Привет, Роб, как было сказано прямо сейчас, это безнадежно широкий вопрос, и он быстро превратился в вопрос с рекомендацией к книге и расширенное обсуждение: оба из которых мы здесь не хотим. Если вы можете сосредоточиться и спросить что-то конкретное о проблеме, с которой вы сейчас сталкиваетесь, не стесняйтесь спрашивать об этом.

Ответы:

139

Я начну с самого низкого уровня, который может быть релевантным (я могу начать с еще более низкого уровня, но они, вероятно, слишком несущественны), начиная с атома, электричества, транзисторов, логических вентилей, интегральных схем (чип / процессор). ) и заканчивает сборку (я предполагаю, что вы знакомы с более высокими уровнями).

В начале

Атом

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

Обычно каждый атом имеет одинаковое количество протонов и электронов, мы называем это «нейтральным» состоянием. Как это бывает, атом может потерять или получить дополнительные электроны. Говорят, что атомы в этом неуравновешенном состоянии являются «положительно заряженным» атомом (больше протона, чем электронов) и «отрицательно заряженным» атомом (больше электрона, чем протона) соответственно.

Электроны неуничтожимы и неуничтожимы (не так в квантовой механике, но это не имеет значения для нашей цели); поэтому, если атом теряет электрон, некоторый другой атом поблизости должен был получить дополнительные электроны, или электрон должен был высвободиться в свободно плавающий электрон, и наоборот, поскольку электрон не разрушаем, чтобы получить дополнительный электрон, атом должен был вытолкнуть его из соседних атомов. или от свободно плавающего электрона. Механика электронов такова, что если рядом с положительно заряженным атомом находится отрицательно заряженный атом, то некоторые электроны будут мигрировать, пока оба атома не получат одинаковый заряд.

Электричество

Электричество - это просто поток электронов из области с очень большим количеством отрицательно заряженных атомов в область с очень большим количеством положительно заряженных атомов. Определенные химические реакции могут создать ситуацию, когда у нас есть один узел с большим количеством отрицательно заряженных атомов (называемый «анод»), и другой узел с большим количеством положительно заряженных атомов (называемый «катод»). Если мы соединяем два противоположно заряженных узла проводом, массы электронов будут течь от анода к катоду, и этот поток мы называем «электрическим током».

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

Электричество всегда предпочитает протекать через материал с наименьшим сопротивлением, поэтому, если катод и анод соединены двумя проводами, один из которых имеет очень высокое сопротивление, а другой - с очень низким сопротивлением, большинство электронов будет протекать через кабель с низким сопротивлением и почти ни один не течет через материал с высоким сопротивлением.

Средний возраст

Переключатели и Транзисторы

Выключатели / триггеры, как ваши обычные выключатели света, переключатель может быть помещен между двумя кусками провода, чтобы отключить и / или восстановить поток электроэнергии. Транзисторы работают точно так же, как выключатель света, за исключением того, что вместо физического подключения и отключения проводов транзистор подключает / отключает поток электроэнергии, изменяя его сопротивление в зависимости от того, есть ли электричество в базовом узле, и, как вы уже могли догадаться / Знаете, транзисторы сделаны из полупроводников, потому что мы можем изменить полупроводник, чтобы стать резистором или проводником для подключения или отключения электрических токов.

Один общий тип транзистора, 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 или исправить ее самостоятельно, если у вас есть представитель или создать дополнительный ответ.

Ли Райан
источник
37
« круто » не делает это справедливо. Этот ответ положительно героический .
Njd
1
Разве части атомов неверны? Как правило , они будут ионизируют с образованием заряженных атомов , а не пребывание нейтральных, чтобы иметь полную внешнюю подоболочку.
альтернатива
3
+1, +1000, если бы я мог. Что меня действительно удивляет, и почему я люблю эту область, так это то, что большой объем информации в этом ответе едва начинает царапать поверхность удивительной глубины технологии, которая заставляет работать современный ПК.
Квентин Старин
Святое дерьмо. Это потрясающе. Я хотел бы сделать больше, чем upvote один раз.
Роб П.
3
+1, хотя я чувствую, что должен отметить, что современное оборудование не совсем сделано через ворота NAND. Да, есть врата, но они действительно довольно сложные и только (обычно) приближенная логика NAND; ограничения в значительной степени физические. Физические элементы сначала объединяются в логические модули, которые могут быть классическими NAND, но обычно их больше (например, триггер или полусуммер). Точный набор разрешенных ворот зависит от используемого логического стиля и ограничений завода-изготовителя; не каждый потрясающий может построить все. (Ааааа! Я начинаю запоминать детали! Помогите!)
Донал Феллоуз
12

От нанда до тетриса за 12 шагов

Я думаю, что это будет идеально для вас

От нандов до тетриса за 12 шагов

Темная ночь
источник
спасибо за ссылку, смотрю сейчас. Есть ли центральный указатель этих выступлений, или вы случайно видели это в каком-то блоге?
Джоккинг
Я не уверен, что этот конкретный всплыл, когда я занимался серфингом однажды
Darknight
Он пропустил 13-ю ступень - кремниевые пластины.
Работа
спасибо за публикацию! По сути, это краткое изложение учебного плана, который автор пишет на видео-лекциях в IDC в ​​Израиле, и основано на его книге - я опубликовал ссылку на книгу в своем ответе.
littleadv
Является ли этот сайт тем же материалом? Потому что, похоже, это гораздо лучше организовано, чем одно большое видео nand2tetris.org
jhocking
10

Если вы выполнили сборку, то для понимания осталось всего два или три слоя:

  • Логические ворота , как логика реализуется с помощью движущихся электронов - здесь это становится вопросом электроники
  • Конструкция процессора и системы, которая состоит из логических элементов, образующих процессор и связанных с ОЗУ и периферийными устройствами. Современные процессоры чрезвычайно сложны, но для вашего желания понять, как все работает, достаточно взглянуть на классический простой процессор, такой как Z80 .
  • Микрокод - это то, как инструкции по сборке интерпретируются и превращаются в аппаратные действия регистров и логических схем.

Последний (Микрокод) сделал меня «щелчком», потому что он заполнил пропасть между электроникой и кодом.

Майкл Боргвардт
источник
Может быть, я пропускаю микрокод. Я взял уроки по логическим элементам и проектированию процессора / системы, запрограммировал их на ассемблере и узнал все о бинарных командах (и хорошо справился со всеми этими классами), но я все еще не мог сказать вам, как, черт возьми, все это сочетается. Я должен исследовать микрокод.
Кейси Паттон
@Casey: вполне возможно, что это действительно то, что вам не хватает. Для меня изучение микрокода (и написание некоторого) было именно тем местом, где я думал: хорошо, теперь я понимаю, как работают компьютеры. Конечно, они стали настолько сложными, что вы все еще можете легко столкнуться с ситуациями, которые кажутся невозможными для понимания, но я совершенно уверен, что любую такую ​​ситуацию можно понять, если вы компетентны, настойчивы и потратите достаточно времени.
Майкл Боргвардт
7

Пример учебной программы бакалавриата CS, которая точно объясняет, о чем вы спрашивали, можно найти здесь (курс IDC.AC.IL CS101) . Он основан на этой книге MIT Press: « Элементы вычислительных систем: создание современного компьютера из первых принципов ».

littleadv
источник
1
+1 за упоминание «Элементы вычислительных систем». Это отличная книга, и она должна точно ответить на вопрос «Как работают компьютеры?».
Седрик
Вы не могли бы объяснить больше о том, что делают эти ресурсы и почему вы рекомендуете их как ответы на заданный вопрос? «Ответы только на ссылки» не очень приветствуются на Stack Exchange
комнат
7

Чтобы полностью ответить на этот вопрос, понадобилась бы целая книга. К счастью, кто-то уже написал эту книгу. Он называется « Код: скрытый язык компьютерного оборудования и программного обеспечения » Чарльза Петцольда. Это очень информативное и очень интересное чтение.

Билл Ящерица
источник
1
+1, только Ctrl-F для «Petzold» приносит ответ, я был почти уверен, что был там;)
mlvljr
4

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

Дуг Т.
источник
3

Будет слишком сложно (и долго!) Перечислить все, что вам может понадобиться знать, чтобы получить достаточное понимание того, что вам нужно знать. Знаменитая книга, которая на самом деле отвечает на все эти вопросы, написана Эндрю Таненбаумом: Структурированная компьютерная организация .

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

(Одно замечание: это очень дорого, так как ~ 800 страниц. Вероятно, хорошо просто получить версию из вторых рук или более старую версию. Концепции не изменились.)

Декард
источник
2

Ну, чтобы сказать это и спросить, мне нужно много шаров.

В значительной степени код сокращается все дальше и дальше вплоть до более сложного кода более низкого уровня. Код до уровня сборки с регистрами сдвига и перемещения ... и т.д ...

Затем аппаратное обеспечение берет этот код и действует на него. В большинстве случаев у оборудования фактически есть свои собственные инструкции о том, как что-то делать. Так что может быть простая инструкция, такая как PUSH, где регистр (ячейка памяти) получает значение, такое как 1 или 2 или что-то еще ..

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

Росс
источник
1

Есть устройства.

Затем есть драйверы устройств, которые взаимодействуют с этими устройствами. Часть написана на C, часть в сборке, как правило.

ОС взаимодействует с прикладным программным обеспечением на одном конце и драйверами устройств на другом для связи с реальным оборудованием.

Если вы действительно заинтересованы, почему бы не взломать ядро ​​Linux, чтобы узнать больше?

Fanatic23
источник
Спасибо за ваш ответ и предложение. Это звучит как отличная идея!
Роб П.
1

По сути, это вопрос электроники, хотя основы этого должны были быть рассмотрены в курсе по исследованию для любой степени CS. Все аппаратное обеспечение действует на основе вентилей, которые запрограммированы в нем на уровне компонентов. Это самые основные из логических операций: НЕ, И, ИЛИ, XOR, NAND, NOR. Каждые ворота имеют определенную функцию:

Элемент NOT принимает одно входное значение и выдает одно выходное значение, он получает 0 или 1 и выдает противоположное.

И затвор принимает два входных значений и производит один выходное значение, он получает любую комбинацию из 0 и 1 , и выводит 0 для любой комбинации , за исключением два из них, для которых она выводит 1.

ИЛИ ворот работает так же, как И - ворот, но будет производить 1 для каждой комбинации 0 и 1 он получает , кроме двух нулей, для которых он выводит 0.

XOR ворота вновь аналогичны как И и ИЛИ ворота, но он будет производить 0 , когда оба входа являются одинаковыми, и 1 , когда оба входа различны.

NAND затвор является логической противоположностью логического элемента И и ИЛИ - НЕ ворот является логической противоположностью логического элемента ИЛИ.

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

MaQleod
источник
+1 Следующий уровень - как сделать последовательное поведение с этими логическими воротами. Ключевым компонентом является триггер . Соберите логические вентили, чтобы сформировать АЛУ, несколько триггеров для регистров, часы, и вы получите процессор.
Mouviciel
@mouviciel Вы забыли мультиплексоры.
звездно-голубой
1

Для части о преобразовании программы на языке высокого уровня в машинных инструкциях любая книга компилятора должна заполнить счет. Например, книга драконов .

Для части "как инструкции выполняются?" Организация и дизайн компьютера: аппаратный / программный интерфейс должен полностью оплачивать расходы.

AProgrammer
источник
1

Хотя я нахожу поразительным, что кто-то может пройти курс по CS без понимания аппаратного обеспечения, я полагаю, что вполне возможно, что курс мог бы сосредоточиться только на теории как области математики, а не на деталях разработки и реализации. Почтенные лекции SICP (как прочитано в 1980-х), казалось, были такими.

На моем курсе по CS, два десятилетия назад, на первом курсе требовалось прочитать более раннюю версию « Компьютеры: от логики до архитектуры» .
Нечто подобное должно заполнить пробелы.

В качестве альтернативы, MIT Open Courseware должно иметь что-то, что поможет.

NJD
источник