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

Distutils и Numpy / Distutils в настоящее время не поддерживают Visual Studio 2015, Visual C ++ 14. Следуя советам, полученным из отчета Python , я смог исправить необходимые файлы и успешно построить расширение используя новую установку Python 3.5 из Anaconda и Mingw64 с GCC 5.2.0, работающую в MSYS2 в Windows 7. У меня нет установленной Visual Studio. Решение заключалось в том, чтобы исправить один файл distutils и два файла numpy / distutils (если это применимо).

Вы можете применить исправления самостоятельно для быстрого исправления:

UPDATE

Обратите внимание, что хотя надписи выше работали для меня, это не было принято для включение в восходящий поток. Изменения, связанные с VS 2015, более сложны, чем я оценил.

17
задан 2 revs, 2 users 100% 30 March 2009 в 08:21
поделиться

12 ответов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

12
ответ дан 30 November 2019 в 12:27
поделиться

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

-1
ответ дан 30 November 2019 в 12:27
поделиться
0
ответ дан 30 November 2019 в 12:27
поделиться

Вы понимаете его превратно.

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

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

0
ответ дан 30 November 2019 в 12:27
поделиться

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

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

0
ответ дан 30 November 2019 в 12:27
поделиться

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

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

0
ответ дан 30 November 2019 в 12:27
поделиться

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

С краткого обзора на аппаратные средства:

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

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

3
ответ дан 30 November 2019 в 12:27
поделиться

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

Со вторым проводом и вторым переключателем, Вы получаете два двоичных значения. Самое интересное, чтобы сделать с ними должно объединить их двоичные значения с операциями такой И, ИЛИ и НЕТ. Два понятия включены здесь: транзистор для реального и логика для абстракции. С этим можно выполнить дополнение, вычитание и много других операций на двух двоичных входах. Можно добавить больше проводов для представления значений кроме '0' и '1'. Идя этим путем, Вы получаете ALU.

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

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

4
ответ дан 30 November 2019 в 12:27
поделиться

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

См. эту статью Wikipedia для деталей: http://en.wikipedia.org/wiki/Microcode

4
ответ дан 30 November 2019 в 12:27
поделиться

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

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

6
ответ дан 30 November 2019 в 12:27
поделиться

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

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

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

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

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

.
1
ответ дан 30 November 2019 в 12:27
поделиться
Другие вопросы по тегам:

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