2009-03-30 3 views
14

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

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

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

+5

Поверьте мне, курс CS, вероятно, не помог бы с такими вещами. :( –

+2

Большинство степеней CS имеют архитектурную бумагу, которая покрывает основы этого материала. – ConcernedOfTunbridgeWells

+0

http://en.wikipedia.org/wiki/Integrated_circuit – vartec

ответ

11

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

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

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

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

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

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

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

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

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

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

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

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

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

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

+2

Но как машинный код интерпретируется процессором? В основном все еще символы, нарисованные вместе, чтобы сформировать ключевое слово, да? –

+0

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

0

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

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

+0

Нет. См. Ответ mxyfc: микрокод идет ниже этого. Хотя история становится еще более сложный в современных архитектурах ... –

3

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

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

0

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

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

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

0

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

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

1

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

От абстрактных к оборудованию:

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

«Программное обеспечение wp сначала хранит буквы в памяти», как второй шаг? Я ​​думаю, вы ошибаетесь Многое происходит между «символами пользовательских типов» и «программным обеспечением wp хранит буквы в памяти», например «клавиатура» передает сигналы прерывания в CPU. –

+0

Первым шагом должен быть «пользователь нажимает клавишу на клавиатуре» - нажатие клавиши происходит с аппаратного обеспечения (kb) на аппаратное обеспечение (экран/память/диск). –

+0

Кроме того, почему пользователь женский? для меня очень похоже на сексизм. –

-1

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

5

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

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

1

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

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

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

Современный цифровой процессор представляет собой реализацию машины Тьюринга, которая использует логическую алгебру Була в качестве символа и базы оператора (взгляните на How Stuff Works detailed explanation of Boole's logic at work). Причиной этого является то, что истинные/ложные логические состояния могут быть легко отображены на электрические сигналы (+, -), и их ассоциированные операторы могут быть реализованы в транзисторных схемах, которые с учетом двоичного входа (электрический сигнал) могут выводить результат в соответствии с булевых операторов.Таким образом, любой современный компьютер - это машина, которая имеет память , чтобы сохранить ее состояние (закодированное в двоичной электрической/магнитной форме) и массив схем, которые принимают электрические импульсы и операторы (инструкции процессора) и выводят результаты соответственно с очень высокой скоростью.

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

3

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

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

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

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

2

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

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

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

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

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

+0

Я не уверен, что был «неправильным». В принципе, хотя я ответил на свой вопрос, прочитав книгу Чарльза Петцольда «КОД». :) –

-1

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

0

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

Смежные вопросы