Где и как программное обеспечение встречается с аппаратным обеспечением?[закрыто]

StackOverflow https://stackoverflow.com/questions/696378

  •  22-08-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие советы

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

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

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

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

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

Используя второй провод и второй переключатель, вы получаете два двоичных значения.Самое интересное с ними — объединить их двоичные значения с такими операциями, как И, ИЛИ и НЕ.Здесь задействованы две концепции: транзистор по-настоящему и логика для абстракции.Благодаря этому вы можете выполнять сложение, вычитание и многие другие операции с двумя двоичными входами.Вы можете добавить больше проводов для представления значений, отличных от «0» и «1».Идя этим путем, вы получаете АЛУ.

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

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

Вы можете найти «Кодекс Чарльза Петцольда» интересным чтением:
http://www.amazon.co.uk/Code-Language-DV-Undefined-Charles-Petzold/dp/0735611319

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

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

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

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

Я надеюсь в этом есть смысл.

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

От абстрактного к аппаратному:

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

Возможно, это объяснение не слишком академическое, но я его понимаю именно так (тоже в университет не ходил).

Первый шаг включает в себя БульАлгебра, доказавшая в 19 веке, что любую математическую операцию можно выразить с помощью ряда символов и некоторых связанных с ними операторов.Таким образом, арифметика по основанию 10 с общими операторами +, -, *, / может быть выражена с помощью всего двух символов (0, 1/истина, ложь) и логических операторов (И, ИЛИ и т. д.), приводящих к логической логике, которая является математические основы цифровых вычислений.

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

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

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

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

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

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

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

Вы понимаете это неправильно.

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

Тем не менее, построить схему для простого микропроцессора не так уж и сложно: АЛУ, несколько регистров и некоторая управляющая логика.У Altera есть расширенное руководство для стартовой платы Cyclone II, но я не могу найти его в Интернете.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top