Где и как программное обеспечение соответствует оборудованию?

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

Я думаю глубже, чем ассемблер, я думаю. Может быть, уровень глубже процессорных инструкций? В какой-то момент команды фактически интерпретируются аппаратными средствами, но я не понимаю, где/как это происходит.

Я не поступил в университет, поэтому не прошел курс CS или что-то еще. Как и многие, я любитель превратился в профессионала. В результате есть много кусочков головоломки, которые, я думаю, мне не хватает. Я знаю немного С++ и понимаю концепцию указателей и т.д. (Хотя я не использовал их в гневе много), однако я только когда-либо работал на высоком уровне. Я не уверен, что знаю, что этот материал поможет мне или нет, но это действительно интересно.

Ответы

Ответ 1

Процессор управляет так называемым циклом цикла выборки-декодирования. Инструкции машинного кода довольно низкоуровневые (т.е. Они не делают столько всего в одной команде). Например, добавление двух чисел будет иметь последовательность инструкций с семантикой типа:

  • Загрузите указатель на адрес операнда 1 в регистр 1
  • Загрузите значение, сохраненное по адресу, хранящемуся в регистре 1, в регистр 2
  • Загрузите указатель на адрес операнда 2 в регистр 1
  • Загрузите значение, сохраненное по адресу в регистре 1, в регистр 3
  • Добавьте содержимое регистра 2 и зарегистрируйте 3 и сохраните его в регистре 4
  • Загрузите указатель на пункт назначения в регистр 1
  • Сохраните содержимое регистра 4 по адресу, указанному в регистре 1

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

Обычно процессор должен загружать или хранить данные в регистре, чтобы что-либо с ним делать. Операции, такие как арифметическая работа над регистрами, взятие операндов из двух регистров и помещение результата в третью (в пользу галереи арахиса, я использовал 6502 - позволяет не путать проблему;-). Процессор имеет специальные инструкции по загрузке или хранению данных из регистров в основную память аппарата.

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

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

Выполнение команды изменит значения в разных регистрах. Например, команда "load" копирует значение в регистр. Арифметические или логические (И, Или, Xor) будут принимать два значения и вычислять третью. Команда перехода или перехода изменит адрес на счетчике программы, чтобы процессор начал извлекать инструкции из другого места.

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

В этом случае вы можете уменьшить счетчик в регистре, и если он равен нулю, устанавливается флаг условия. Условный (ветвь на ноль) может использоваться для цикла, где вы уменьшаете счетчик и выходите из цикла, если результат инструкции декремента равен нулю. На некоторых процессорах (например, в семействе ARM) все инструкции являются условными, со специальным условием "всегда" для не условных инструкций.

Некоторые примеры типичных инструкций процессора:

  • Увеличение или уменьшение регистра
  • Загрузите или сохраните содержимое регистра в памяти. У вас также может быть адрес для загрузки или хранения смещения по содержимому другого регистра. Это позволяет легко перебирать массив данных, увеличивая другой регистр.
  • Добавление, вычитание, умножение, логические операции для вычисления значений. Они берут операнды из двух регистров и помещают результат в третью.
  • Перейти в другое место - это перемещает содержимое местоположения в счетчик программ и начинает извлекать инструкции из нового местоположения.
  • Нажмите или поп-значения в стек.

fooobar.com/questions/361064/... есть пример небольшого фрагмента скомпилированного кода C и языка ассемблера, выводимого из этого фрагмента. Он должен дать вам пример такого отношения между языком высокого уровня и выходом машинного кода, с которым он компилируется.

Лучший способ узнать это - получить ассемблер и попробовать его. Это было намного проще на более старых, более простых компьютерах, таких как 8-разрядные микрофоны 1980-х годов. В наши дни самое близкое к этому типу архитектуры - встроенные системы. Вы можете получить плату разработки для встроенного процессора, такого как Microchip PIC, довольно дешево. Поскольку у этого типа архитектуры меньше багажа, чем у современной операционной системы, для использования системных вызовов меньше i-dotting и t-cross. Это упростит загрузку языковой программы ассемблера в этом типе архитектуры; более простая архитектура также легче понять.

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

Ответ 2

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

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

Ответ 3

На самом деле есть еще один слой ниже машинного языка, который я недавно узнал от друга. Он называется Microcode.

Подробнее см. статью в Википедии: http://en.wikipedia.org/wiki/Microcode

Ответ 4

Предположим, что наиболее реальным является ток и напряжение (если вы пойдете глубже, вы можете обнаружить, что даже электрон является абстракцией). Первым шагом абстракции является рассмотрение того, что напряжение + 5 В представляет бит, установленный на "1", а напряжение 0 В представляет бит, установленный на "0". С помощью переключателя вы можете определить стоимость вашего провода.

При использовании второго провода и второго коммутатора вы получаете два двоичных значения. Самое интересное в том, чтобы объединить их двоичные значения с операциями, такими как AND, OR и NOT. Здесь задействованы две концепции: transistor для реального и logic для абстракции. При этом вы можете выполнять добавление, вычитание и многие другие операции на двух ваших двоичных входах. Вы можете добавить больше проводов для представления значений, отличных от '0' и '1'. В этом случае вы получите ALU.

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

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

Ответ 6

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

Так, например, когда вы вводите "Измените мой рабочий стол на" Зеленый ", с клавиатуры, он будет работать непосредственно на металле в электронном виде (читайте, как работает клавиатура/мышь/сенсорный экран). Просто вы видите его как текст на английском языке. Сделайте еще один шаг, текст, который вы вводите, находится на языке высокого уровня, он преобразуется в машинный код, чтобы процессор мог выполнять на нем логику. Машинный код также находится в электронной форме. Например, текст преобразуется в коды операций и т.д., Но коды операций находятся в электронной форме, а процессор может обрабатывать их.

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

Опять же, нет разрыва. Программное обеспечение, сохраненное в памяти (транзисторы и т.д.) Или жесткий диск, уже существует в электронном виде. Аппаратное обеспечение (жесткая логика - ворота) требуется для запуска программного обеспечения (что вы хотите, чтобы аппаратное обеспечение работало с вашим программным обеспечением). Вы НЕ МОЖЕТЕ вводить что-либо в компьютер в не электронной форме.

Надеюсь, это имеет смысл.

Ответ 7

Ну, реальная точка, где вы встречаете оборудование, зависит от того, что вы делаете, конечно. Но взять ваш (отличный) пример "отображения текста":

От абстрактного до аппаратного обеспечения:

  • пользователь вводит буквы в свой текстовый процессор (wp)
  • Программное обеспечение wp сначала сохраняет буквы в памяти как часть редактируемого документа
  • Программное обеспечение wp затем сообщает библиотеке пользовательского интерфейса, которую он использует, чтобы он хотел отображать редактируемый текст в окне (это происходит постоянно, конечно). Библиотека UI будет зависящей от системы (Windows API на MS Windows, X Windows или QT и т.д. На Linux, AWT/Swing на Java и т.д.).
  • Библиотека UI будет передавать данные через несколько слоев абстракции. В частности, он будет выполнять растеризацию (преобразовать информацию "показать A" в сетку пикселей, которая представляет A)
  • В конце концов, информация будет передана драйверу устройства графической карты. Здесь мы встречаем "реальное" оборудование:-). Обычно графическая карта предоставляет "видеопамять", то есть память на карте, на которую может записывать процессор. Драйвер графической карты (который работает на CPU) будет записывать пиксели для A-видеопамяти.
  • Цепи графических карт будут считывать видеопамять и преобразовывать данные в видеосигнал, который выводит видеоразъем на карту и на монитор.
  • На мониторе отобразится то, что выглядит, как A: -)

Ответ 8

Это объяснение может быть не слишком академичным, но я так понимаю (не пошел в университет).

Первый шаг включает в себя Boole алгебру, которая доказала в 19-м веке, что любая математическая операция может быть выражена с использованием ряда символы и некоторые ассоциированные операторы. Таким образом, арифметика базы 10 с обычными операторами +, -, *,/может быть выражена в использовании только двух символов (0, 1/true, false) и логических операторов (AND, OR и т.д.), Что приводит к логической логике, математическая основа цифровых вычислений.

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

Современный цифровой процессор представляет собой реализацию машины Тьюринга, которая использует логическую алгебру Boole в качестве символа и базы оператора (посмотрите, как работает материал подробное объяснение логики Boole на работе). Причиной этого является то, что истинные/ложные логические состояния могут быть легко отображены на электрические сигналы (+, -), и их ассоциированные операторы могут быть реализованы в транзисторных схемах, которые с учетом двоичного входа (электрический сигнал) могут выводить результат в соответствии с булевых операторов. Таким образом, любой современный компьютер - это машина с памятью для сохранения его состояния (закодированного в двоичной электрической/магнитной форме) и массива схем, которые принимают электрические импульсы и операторы (инструкции процессора) и выводят результаты соответственно с очень высокой скоростью.

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

Ответ 9

Машинный код, я считаю, такой же низкоуровневый, как можно. Он непосредственно понимается процессором и выполняется без интерпретатора. Процессор построен с определенным набором инструкций, которые определяют машинный код для данной архитектуры (x86, PPC, ARM и т.д.).

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

Ответ 10

Вы ошибаетесь.

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

Тем не менее, создание схемы для простого микропроцессора - это не так сложно, ALU, некоторые регистры и некоторая логика управления. Altera имеет это как расширенные учебные пособия для платы стартера Cyclone II, но я не могу найти ее в Интернете.

Ответ 11

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

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

Ответ 13

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

Ответ 14

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

Ответ 15

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