2010-08-07 6 views
5

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

И как преодолевают это верхние уровни langauges?

ответ

5

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

Языки более высокого уровня «преодолевают» это, потому что компьютеры все делают практически то же самое, по-разному. У ARM есть способы добавить два числа вместе так же, как и x86, у него есть способы загрузить данные из ОЗУ в регистры (и наоборот), как и x86, и т. Д.

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

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

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

И даже драйверы часто могут быть разделены, полностью или частично, через типы машин! Платформы x86 - это не единственные, которые имели, например, шину PCI. И даже там, где автобус отличается, устройства, подключенные к ним, часто оказываются одинаковыми. Linux разделяет несколько драйверов устройств на нескольких машинных типах с небольшим или никаким изменением. Компилятор обрабатывает детали перевода в машинный код, а более внутренние слои ядра пытаются абстрагироваться от других поведенческих различий, которые они могут использовать, сценаристу-драйверу просто нужно придерживаться установленных интерфейсов.

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

0

Машино зависимые средства, в основном, зависят от аппаратного обеспечения, которое содержит компьютер, - ОЗУ можно получить через CPU + RAM-шину, а не обязательно часть этого - однако видеокарты, внешнее хранилище, мышь/клавиатура и т. д.

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

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