Это почти неловко спрашивать ... У меня есть степень в области компьютерных наук (и вторая в процессе). Я работаю постоянным разработчиком .NET почти пять лет. Я вообще, кажется, компетентен в том, что я делаю.
Но я не знаю, как работают компьютеры!
Пожалуйста, держись со мной на секунду. Быстрый Google «Как работает компьютер» даст много и много результатов, но я изо всех сил пытался найти тот, который действительно ответил бы на то, что я ищу. Я понимаю, что это огромный вопрос, так что если вы можете просто дать мне несколько ключевых слов или направление.
Я знаю, что есть компоненты ... источник питания, материнская плата, оперативная память, процессор и т. Д. ... и я получил общее представление о том, что они делают. Но я действительно не понимаю, как вы переходите от такой строки кода, как Console.Readline()
в .NET (или Java или C ++), и действительно ли она что- то делает .
Конечно, я смутно осведомлен о MSIL (в случае .NET), и что с JIT-компилятором происходит какое-то волшебство, и оно превращается в нативный код (я думаю). Мне сказали, что Java похожа, а C ++ исключает средний шаг.
Я сделал несколько сборок мэйнфреймов, это было несколько лет назад. Я помню, что были некоторые инструкции и некоторые регистры процессора, и я написал код .... и затем произошло какое-то волшебство .... и моя программа работала (или вылетала). Из того, что я понимаю, «эмулятор» имитирует то, что происходит, когда вы вызываете инструкцию, и обновляет регистры процессора; но что заставляет эти инструкции работать так, как они?
Превращается ли это в вопрос об электронике, а не в вопрос «компьютера»? Я предполагаю, что у меня нет никаких практических причин, чтобы понять это, но я чувствую, что должен это сделать.
(Да, это то, что происходит, когда вы проводите день с маленьким ребенком. У вас уходит около 10 минут и пять итераций с вопросом «Почему?», Чтобы вы поняли, сколько вы не знаете)
Emulator
. Это набор реальных полупроводниковых схем с сотнями (тысячами) входных и выходных проводов и миллиардами логических элементов.Emulator
Использовался только для учебных целей.Ответы:
Я начну с самого низкого уровня, который может быть релевантным (я могу начать с еще более низкого уровня, но они, вероятно, слишком несущественны), начиная с атома, электричества, транзисторов, логических вентилей, интегральных схем (чип / процессор). ) и заканчивает сборку (я предполагаю, что вы знакомы с более высокими уровнями).
В начале
Атом
Атом - это структура, состоящая из электронов, протонов и нейтронов (которые сами состоят из элементарных частиц ). Самая интересная часть атома для компьютеров и электроники - это электроны, потому что электрон подвижен (то есть он может перемещаться относительно легко, в отличие от протонов и нейтронов, которые труднее перемещать), и они могут свободно плавать, не задерживаясь внутри атом.
Обычно каждый атом имеет одинаковое количество протонов и электронов, мы называем это «нейтральным» состоянием. Как это бывает, атом может потерять или получить дополнительные электроны. Говорят, что атомы в этом неуравновешенном состоянии являются «положительно заряженным» атомом (больше протона, чем электронов) и «отрицательно заряженным» атомом (больше электрона, чем протона) соответственно.
Электроны неуничтожимы и неуничтожимы (не так в квантовой механике, но это не имеет значения для нашей цели); поэтому, если атом теряет электрон, некоторый другой атом поблизости должен был получить дополнительные электроны, или электрон должен был высвободиться в свободно плавающий электрон, и наоборот, поскольку электрон не разрушаем, чтобы получить дополнительный электрон, атом должен был вытолкнуть его из соседних атомов. или от свободно плавающего электрона. Механика электронов такова, что если рядом с положительно заряженным атомом находится отрицательно заряженный атом, то некоторые электроны будут мигрировать, пока оба атома не получат одинаковый заряд.
Электричество
Электричество - это просто поток электронов из области с очень большим количеством отрицательно заряженных атомов в область с очень большим количеством положительно заряженных атомов. Определенные химические реакции могут создать ситуацию, когда у нас есть один узел с большим количеством отрицательно заряженных атомов (называемый «анод»), и другой узел с большим количеством положительно заряженных атомов (называемый «катод»). Если мы соединяем два противоположно заряженных узла проводом, массы электронов будут течь от анода к катоду, и этот поток мы называем «электрическим током».
Не все провода могут передавать электроны одинаково легко, электроны протекают гораздо легче в «проводящих» материалах, чем в «стойких» материалах. «Проводящий» материал имеет низкое электрическое сопротивление (например, медные провода в кабелях), а «устойчивый» материал имеет высокое электрическое сопротивление (например, резиновая изоляция кабеля). Некоторые интересные материалы называются полупроводниками (например, силиконы), поскольку они могут легко изменять свое сопротивление, при определенных условиях полупроводник может выступать в качестве проводника, а при других условиях он может превращаться в резистор.
Электричество всегда предпочитает протекать через материал с наименьшим сопротивлением, поэтому, если катод и анод соединены двумя проводами, один из которых имеет очень высокое сопротивление, а другой - с очень низким сопротивлением, большинство электронов будет протекать через кабель с низким сопротивлением и почти ни один не течет через материал с высоким сопротивлением.
Средний возраст
Переключатели и Транзисторы
Выключатели / триггеры, как ваши обычные выключатели света, переключатель может быть помещен между двумя кусками провода, чтобы отключить и / или восстановить поток электроэнергии. Транзисторы работают точно так же, как выключатель света, за исключением того, что вместо физического подключения и отключения проводов транзистор подключает / отключает поток электроэнергии, изменяя его сопротивление в зависимости от того, есть ли электричество в базовом узле, и, как вы уже могли догадаться / Знаете, транзисторы сделаны из полупроводников, потому что мы можем изменить полупроводник, чтобы стать резистором или проводником для подключения или отключения электрических токов.
Один общий тип транзистора, NPN Bipolar Junction Transistor (BJT), имеет три узла: «основание», «коллектор» и «эмиттер». В NPN BJT электричество может течь от узла-эмиттера к узлу-коллектору, только когда «базовый» узел заряжен. Когда базовый узел не заряжен, электроны практически не могут проходить через него, а когда базовый узел заряжается, электроны могут течь между эмиттером и коллектором.
Поведение транзистора
(Я настоятельно рекомендую вам прочитать это, прежде чем продолжить, поскольку это может объяснить лучше, чем я с интерактивной графикой)
Допустим, у нас есть транзистор, подключенный к электрическому источнику на его базе и коллекторе, а затем мы подключаем выходной кабель рядом с его коллектором (см. Рисунок 3 в http://www.spsu.edu/cs/faculty/bbrown/web_lectures / транзисторы / ).
Когда мы не подаем электричество ни на базу, ни на коллектор, тогда электричество вообще не может течь, поскольку нет электричества, о котором можно говорить:
Когда мы подаем электричество на коллектор, но не на базу, электричество не может течь к эмиттеру, поскольку основание становится материалом с высоким сопротивлением, поэтому электричество уходит на выходной провод:
Когда мы подаем электричество на базу, но не на коллектор, электричество также не может течь, поскольку между коллектором и эмиттером нет разницы в заряде:
Когда мы подаем электричество как на базу, так и на коллектор, мы получаем электричество, протекающее через транзистор, но поскольку транзистор теперь имеет более низкое сопротивление, чем выходной провод, электричество почти не протекает через выходной провод:
Логические ворота
Когда мы подключаем эмиттер одного транзистора (E1) к коллектору другого транзистора (C2), а затем подключаем выход около базы первого транзистора (O) (см. Рисунок 4 в http://www.spsu.edu). / cs / faculty / bbrown / web_lectures / transistors / ), тогда происходит нечто интересное. Скажем также, что мы всегда подаем электричество на коллектор первого транзистора (C1), и поэтому мы работаем только с базовыми узлами транзисторов (B1, B2):
Подведем итоги таблицы, чтобы мы увидели только B1, B2 и O:
И вот , если вы знакомы с Boolean Logic и / или Logic Gates, вы должны заметить, что это именно ворота NAND. И если вы знакомы с Boolean Logic и / или Logic Gates, вы также можете знать, что NAND (а также NOR) функционально завершен , то есть, используя только NAND, вы можете построить все другие логические элементы и всю правду. столы. Другими словами, вы можете сконструировать целый компьютерный чип, используя только ворота NAND.
На самом деле, большинство процессоров (или они раньше были?) Спроектированы с использованием только NAND, поскольку их производство дешевле, чем использование комбинации NAND, NOR, AND, OR и т. Д.
Вывод других логических операторов из NAND
Я бы не стал описывать, как сделать все логические операторы, только НЕ и логический элемент И, остальные можно найти где-то еще.
Учитывая оператор NAND, мы можем построить НЕ ворота:
Учитывая операторы NAND и NOT, мы можем построить вентиль AND:
Мы можем построить другие логические элементы аналогичным образом. Поскольку NAND-шлюз функционально завершен , также возможно создание логических вентилей с более чем 2 входами и более чем 1 выходом, я не буду обсуждать, как построить такие логические вентили здесь.
Эпоха Просвещения
Построение машины Тьюринга из Булевых ворот
Процессор - это просто более сложная версия машины Тьюринга. Регистры ЦП - это внутреннее состояние машины Тьюринга, а ОЗУ - лента ленты Тьюринга.
Машина Тьюринга (ЦП) может делать три вещи:
Для нашей цели мы строим машину Тьюринга из 2-х состояний из 2-х состояний Вольфрама с использованием комбинаторной логики (современные процессоры используют микрокод, но они более сложны, чем это необходимо для нашей цели).
Таблица состояний машины Тьюринга Вольфрама (2,3) выглядит следующим образом:
Мы хотим перекодировать приведенную выше таблицу состояний в таблицу истинности:
На самом деле я не собираюсь создавать такие логические ворота (я не уверен, как нарисовать их в 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 или исправить ее самостоятельно, если у вас есть представитель или создать дополнительный ответ.
источник
От нанда до тетриса за 12 шагов
Я думаю, что это будет идеально для вас
От нандов до тетриса за 12 шагов
источник
Если вы выполнили сборку, то для понимания осталось всего два или три слоя:
Последний (Микрокод) сделал меня «щелчком», потому что он заполнил пропасть между электроникой и кодом.
источник
Пример учебной программы бакалавриата CS, которая точно объясняет, о чем вы спрашивали, можно найти здесь (курс IDC.AC.IL CS101) . Он основан на этой книге MIT Press: « Элементы вычислительных систем: создание современного компьютера из первых принципов ».
источник
Чтобы полностью ответить на этот вопрос, понадобилась бы целая книга. К счастью, кто-то уже написал эту книгу. Он называется « Код: скрытый язык компьютерного оборудования и программного обеспечения » Чарльза Петцольда. Это очень информативное и очень интересное чтение.
источник
Я настоятельно рекомендую Кодекс Чарльза Петцольда. Книга является одновременно уроком истории и техническим обзором того, как построить компьютер. Начиная с объяснения простых телеграфных переключателей, книга демонстрирует, как работают транзисторы, затем к логическим элементам, программируемому компьютеру, к более сложным вещам. Это также очень хорошо написано и, вероятно, может быть понято любым с достаточным любопытством.
источник
Будет слишком сложно (и долго!) Перечислить все, что вам может понадобиться знать, чтобы получить достаточное понимание того, что вам нужно знать. Знаменитая книга, которая на самом деле отвечает на все эти вопросы, написана Эндрю Таненбаумом: Структурированная компьютерная организация .
Эта книга на самом деле переносит вас с физического компьютера на вашем столе вплоть до логических элементов и логической алгебры, а затем показывает пример архитектуры, которая поможет вам понять, как на самом деле все происходит в такой системе.
(Одно замечание: это очень дорого, так как ~ 800 страниц. Вероятно, хорошо просто получить версию из вторых рук или более старую версию. Концепции не изменились.)
источник
Ну, чтобы сказать это и спросить, мне нужно много шаров.
В значительной степени код сокращается все дальше и дальше вплоть до более сложного кода более низкого уровня. Код до уровня сборки с регистрами сдвига и перемещения ... и т.д ...
Затем аппаратное обеспечение берет этот код и действует на него. В большинстве случаев у оборудования фактически есть свои собственные инструкции о том, как что-то делать. Так что может быть простая инструкция, такая как PUSH, где регистр (ячейка памяти) получает значение, такое как 1 или 2 или что-то еще ..
Это определенно компьютерный вопрос. А также программирование. Некоторые программисты программируют оборудование, которое будет принимать ваш код и заставлять его делать что-то, хотя и на очень низком уровне. Это также вопрос электроники.
источник
Есть устройства.
Затем есть драйверы устройств, которые взаимодействуют с этими устройствами. Часть написана на C, часть в сборке, как правило.
ОС взаимодействует с прикладным программным обеспечением на одном конце и драйверами устройств на другом для связи с реальным оборудованием.
Если вы действительно заинтересованы, почему бы не взломать ядро Linux, чтобы узнать больше?
источник
По сути, это вопрос электроники, хотя основы этого должны были быть рассмотрены в курсе по исследованию для любой степени CS. Все аппаратное обеспечение действует на основе вентилей, которые запрограммированы в нем на уровне компонентов. Это самые основные из логических операций: НЕ, И, ИЛИ, XOR, NAND, NOR. Каждые ворота имеют определенную функцию:
Элемент NOT принимает одно входное значение и выдает одно выходное значение, он получает 0 или 1 и выдает противоположное.
И затвор принимает два входных значений и производит один выходное значение, он получает любую комбинацию из 0 и 1 , и выводит 0 для любой комбинации , за исключением два из них, для которых она выводит 1.
ИЛИ ворот работает так же, как И - ворот, но будет производить 1 для каждой комбинации 0 и 1 он получает , кроме двух нулей, для которых он выводит 0.
XOR ворота вновь аналогичны как И и ИЛИ ворота, но он будет производить 0 , когда оба входа являются одинаковыми, и 1 , когда оба входа различны.
NAND затвор является логической противоположностью логического элемента И и ИЛИ - НЕ ворот является логической противоположностью логического элемента ИЛИ.
Другими словами, на аппаратном уровне все сводится к самым основным из двоичных логических выражений. Все остальное - просто переход от более высокого уровня программирования к более низкому, пока он не достигнет этого последнего уровня.
источник
Для части о преобразовании программы на языке высокого уровня в машинных инструкциях любая книга компилятора должна заполнить счет. Например, книга драконов .
Для части "как инструкции выполняются?" Организация и дизайн компьютера: аппаратный / программный интерфейс должен полностью оплачивать расходы.
источник
Хотя я нахожу поразительным, что кто-то может пройти курс по CS без понимания аппаратного обеспечения, я полагаю, что вполне возможно, что курс мог бы сосредоточиться только на теории как области математики, а не на деталях разработки и реализации. Почтенные лекции SICP (как прочитано в 1980-х), казалось, были такими.
На моем курсе по CS, два десятилетия назад, на первом курсе требовалось прочитать более раннюю версию « Компьютеры: от логики до архитектуры» .
Нечто подобное должно заполнить пробелы.
В качестве альтернативы, MIT Open Courseware должно иметь что-то, что поможет.
источник