Как двоичный переводится на аппаратное обеспечение? - PullRequest
22 голосов
/ 05 октября 2009

Я понимаю, как код компилируется в сборку, и эта сборка является заменой 1:1 двоичными кодами. Может кто-нибудь помочь мне понять, как бинарный подключен к оборудованию? Как двоичный файл физически читается и запускается? Как оператор if работает в аппаратном обеспечении?

Из поисков Google Я думаю, что, возможно, мой вопрос должен быть озаглавлен " как двоичные данные помещаются в линию шины ", но я не был уверен.

Спасибо.

Ответы [ 14 ]

20 голосов
/ 15 января 2010

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

  • Начните с некоторых простых логических схем, таких как И, ИЛИ, НЕ и триггер. Триггер - это пара транзисторов, расположенных таким образом, что если один из них включен, другой выключен или наоборот. Таким образом, он может «запомнить» один бит информации, поэтому вы можете думать о нем как о сохранении одной двоичной цифры. Некоторые входные строки могут перевести его в одно или другое состояние и, таким образом, «записать» в него.

  • Вы можете хранить большее число, имея несколько триггеров, и называть его «регистром». Например, если у вас есть четыре триггера в регистре, есть 16 возможных комбинаций, поэтому вы можете думать о нем как о числе от 0 до 15.

  • Пропустив немного вперед, вы можете купить «чип памяти». То, что это - большое количество регистров, скажем, 16 из них. У него 4 входных провода (провода «адреса») и 4 выходных провода (провода «данных»). Таким образом, число от 0 до 15 может входить как адрес, и это выбирает один из 16 регистров, значение которых представлено на проводах выходных данных (таким образом, «читая» его). Еще несколько проводов могут привести к тому, что данные поступят на провода данных, что приведет к тому, что числа будут записаны («записаны») в регистр.

  • Теперь предположим, что у вас есть внешний 4-битный регистр (назовите его R) и немного схемы, так что он

    1. представляет значение в R по адресу памяти
    2. читает 4-битное значение в этом регистре и перемещает его в R
    3. и повторяет это снова и снова

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

Теперь вы можете украсить эту вещь разными способами. Вы можете расширить память, чтобы иметь 5-битный адрес (32 регистра). Тогда, если одна из адресных линий связана с внешним миром, она будет делать разные вещи в зависимости от внешнего мира. Это «конечный автомат».

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

Конечно, это очень простой компьютер, но примерно так они и начали.

9 голосов
/ 05 октября 2009

Полный ответ на ваш вопрос будет включать в себя книгу, причем довольно толстую.

Когда вы говорите «код», я предполагаю, что вы имеете в виду высокоуровневый скомпилированный язык, такой как C ++. Обычно компилятор переводит этот код на машинный язык или двоичный файл, как вы заявляете в своем вопросе. Мы будем аккуратно избегать всякого обсуждения управляемого и неуправляемого кода, p-кода и т. Д. То есть мы просто говорим о компиляторах, предназначенных для конкретных процессоров / операционных систем. Java, например, компилируется в псевдокод, называемый байт-кодом. Мы также собираемся избегать всего вопроса редактирования ссылок или ссылок, так как несколько исходных модулей компилируются в машинный язык, а затем объединяются в одну исполняемую программу.

Хорошо, теперь, когда мы рассмотрели большую часть того, что мы не собираемся освещать, вот что обычно происходит. Под «обычно» я подразумеваю большинство скомпилированных языков в среде DOS, Linux или Windows. Исходный код переводится на машинный язык, который записывается в исполняемый файл. Этот исполняемый файл содержит более или менее образ того, как программа должна выглядеть в памяти. Когда вы сообщаете операционной системе, что ваша программа запускается, выполняется эквивалент «Load and Go» операционной системы. Это означает, что образ памяти в исполняемом файле загружается в память, а затем операционная система выполняет прыжок на машинном языке для первой инструкции в программе. Затем процессор слепо следует инструкциям, пока не встретится EXIT.

Вся эта неприятность в JUMP ... EXIT - это резкое упрощение для современных ОС. Как вы можете себе представить, если бы процессор со слепым послушанием следовал инструкциям программы, сбившейся с пути, компьютер зависал бы ... или еще хуже. Такова была судьба многих заблудших программ в первые дни, и основной вклад во многих BSOD.

4 голосов
/ 05 октября 2009

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

4 голосов
/ 05 октября 2009

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

Кроме того, что я предлагаю вам прочитать его, я бы не рискнул втиснуть семестровый класс в поле для ответов из 500 символов.

3 голосов
/ 05 октября 2009

Я не считаю это огромным и сложным, чем ближе к оборудованию, тем проще.

Напишите дизассемблер, вот как это делает аппаратное обеспечение. Большинство процессоров содержат коды операций или набор команд в том же руководстве, что и язык ассемблера.

Посмотрите на код операции, скажем, инструкцию добавления, используя регистры, несколько битов определяют регистр источника, несколько битов для регистра назначения, несколько бит говорят, что это инструкция добавления. Допустим, этот набор инструкций, который вы просматриваете, использует только два регистра для добавления на основе регистров. Существует некоторая логика, сумматор, который может добавлять два элемента размером регистров и выводить результат и бит переноса. Регистры хранятся на чипе в битах памяти, которые иногда называют триггерами. Поэтому, когда добавление декодируется, входные регистры привязываются к логике добавления с помощью электронных переключателей. В эти дни это происходит в начале тактового цикла, к концу тактового цикла результат суммируется, и выходной сигнал направляется в биты для регистра назначения, и ответ захватывается. Обычно добавление изменяет флаги в регистре флагов. Когда результат слишком велик, чтобы его можно было сохранить в регистре (подумайте о том, что произойдет, если вы добавите десятичные числа 9 и 1, и вы получите 0, а справа - 1)? Существует некоторая логика, которая просматривает выходные данные сумматора и сравнивает биты со значением ноль, которое устанавливает или очищает флаг z в регистре флагов. Другой бит флага - это бит знака или n бит для отрицательного значения, то есть наиболее значимый бит ответа. Все это делается параллельно.

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

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

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

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

Друг указал мне на эту книгу http://www1.idc.ac.il/tecs/, которую я хотел бы прочитать, но пока не читал. Возможно, это просто книга, которую вы ищете.

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

1 голос
/ 18 января 2018

Когда мы смотрим на двоичный язык или язык программирования, мы смотрим на символы и слова, которые может понять человек, которые по существу описывают электрическую активность электронной системы. В конечном счете, скорость энергии, количество энергии, потеря энергии, создание тепла и света, и ИЗМЕНЕНИЕ, которое претерпевает вещество, через которое проходит энергия, в результате подвода энергии, а также то, как это влияет на активность энергии. как он течет, понимается человеком и управляется или используется электроникой. Одним из факторов понимания сложной системы, которая представляет собой компьютер или другое устройство, является знание того, что делает электричество, которое течет внутри нее. Чтобы узнать это, мы описали одно из поведений электричества, используя цифры 1 и 0. Вы должны знать, что делает физический элемент, и уметь дать стандартное описание этого, чтобы отслеживать, что происходит при изменении факторов. что вы думаете, что способствуют контролю элемента / Вещества / Субатомной Частицы, числа помогают вам рационализировать то, что происходит с частицами, которые вы иначе не можете видеть.

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

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

1 голос
/ 05 октября 2009

Это похоже на вопрос «как работают компьютеры», но вы вряд ли будете удовлетворены ответами, которые вы получите от Google.

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

Ответы пока «значительно упрощены», потому что, ну, они должны быть.

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

РЕДАКТИРОВАТЬ: , пожалуй, лучшее, что мы можем сказать, это то, что биты в двоичных числах (нули и единицы) непосредственно соответствуют цепям в аппаратном обеспечении, поскольку схемы могут быть сконфигурированы для «хранения» значения бит и эти биты могут быть обработаны схемой.

То есть они могут быть сохранены, подсчитаны, добавлены (и все другие основные арифметические функции), выведены и введены в группы, образующие целые числа.

Вкратце, биты в двоичных числах соответствуют аппаратным транзисторам . Это, как сказали другие, является огромным упрощением. Часто для обработки требуется более одного транзистора, но это зависит от умения проектировщика оборудования.

0 голосов
/ 05 июля 2016

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

0 голосов
/ 14 января 2011

SW - это не просто язык программирования, на котором он написан, как написано, например, на листе бумаги. SW также принимает физическую форму. В какой-то момент программное обеспечение на концептуальном уровне переходит в программное обеспечение на физическом уровне, и это происходит, когда программист начинает вводить код на клавиатуре на любом языке SW, на котором он / она работает. С того момента, как нажата клавиша, ее электроны полностью опущены ... это момент, когда возникает интерфейс, в котором с момента нажатия клавиатуры весь бизнес становится манипулированием электронами - как сложным, сложные и гениальные усилия, как это может быть. Мышление в терминах двоичных 0 и 1 - это просто метафора для высокого и низкого напряжения, уже физическое проявление после нажатия клавиши. Когда вы вводите букву I в качестве первой буквы IF ... THEN на клавиатуре, напряжения, соответствующие 01001001, помещаются в первые 8 слотов реестра с помощью электрических импульсов, вызванных физическим нажатием клавиши I. С этого момента это электроника.

0 голосов
/ 07 октября 2009

Этот вопрос очень сложный, у меня точно 2 градуса, и я все еще только поцарапал поверхность.

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

...