Как двоичный файл переводит в аппаратные средства?

Я полагаю, что это происходит когда временные лимиты транзакции. Действительно необходимо использовать "реальную" базу данных. Что-то как Моросящий дождь или MySQL. Какая-либо причина, почему Вы предпочитаете SQLite по двум предшествующим опциям?

22
задан Dhaval Asodariya 7 February 2018 в 14:03
поделиться

11 ответов

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

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

0
ответ дан 29 November 2019 в 04:36
поделиться

В очень упрощенном виде компьютер может быть представлен как бесконечный цикл (реализованный аппаратно) и возможности выполнять простые арифметические операции (также реализованные аппаратно). В цикле он выполняет следующее:

  • считывает память на ПК (ПК - это счетчик цикла, который получает инкремент)
  • декодирует команду, а операнды
  • выполняют команду
  • записывают результаты обратно в память

И все. Также существуют управляющие команды, которые могут изменять ПК и которые используются для оператора «if ... then ... else».

0
ответ дан 29 November 2019 в 04:36
поделиться

(Сильно упрощено)

Двоичный файл (скажем, строка двоичного кода из строки машинного кода / asm) загружается в память, скажем, с диска. Затем логика процессора отправляет команду контроллеру памяти для загрузки содержимого памяти в локальный резистор процессора. Затем это интерпретируется как инструкция процессора.

Я изучил этот уровень вещей, занимаясь микрокодированием в колледже.

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

0
ответ дан 29 November 2019 в 04:36
поделиться

По сути, и в очень широком смысле, инструкции заканчиваются память, а регистр программного счетчика (ПК) содержит адрес первой инструкции.

Процессор поддерживает инструкции, которые могут перемещать данные в / из памяти в регистры. Процессор перемещает данные в регистр команд,

0
ответ дан 29 November 2019 в 04:36
поделиться

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

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

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

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

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

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

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

это огромное упрощение. Часто для обработки бита требуется более одного транзистора, но это зависит от сообразительности разработчика оборудования.

это огромное упрощение. Часто для обработки битов требуется более одного транзистора, но это зависит от сообразительности разработчика оборудования.

1
ответ дан 29 November 2019 в 04:36
поделиться

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

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

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

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

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

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

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

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

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

3
ответ дан 29 November 2019 в 04:36
поделиться

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

4
ответ дан 29 November 2019 в 04:36
поделиться

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

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

4
ответ дан 29 November 2019 в 04:36
поделиться

Вы можете найти интересную ссылку: http://www.eskimo.com/~ddf/Theory/Micro_Fund/Commands/AssyLnge.html

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

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

Итак, для оператора if существует команда, определяющая, равны ли два значения и куда идти, если они не равны (переход, если не равны). Будут некоторые другие, такие как ветвь равного или ветвь большего чем.

Они будут в сборке.

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

Это очень упрощено,

0
ответ дан 29 November 2019 в 04:36
поделиться

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

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

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

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

10
ответ дан 29 November 2019 в 04:36
поделиться

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

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

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

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

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

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

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

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

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

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

20
ответ дан 29 November 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: