Что такое 16, 32 и 64-разрядные архитектуры?

что означают 16-разрядные, 32-разрядные и 64-разрядные архитектуры в случае микропроцессоров и/или операционных систем?

в случае микропроцессоров это означает максимальный размер General Purpose Registers или размер Integer или количество Address-lines или количество Data Bus lineS или что?

что мы имеем в виду, говоря:"DOS is a 16-bit OS","Windows in a 32-bit OS" и т. д...?

7 ответов


мой первоначальный ответ ниже, если вы хотите понять комментарии.

Ответ

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

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

когда процессор очень разнообразен по размеру для разных регистров, он часто будет описываться более подробно, например Motorola 68k описывается как Чип 16 / 32bit.

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


оригинальный ответ

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

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

я оправдываю это следующей логикой. The на Z80 имеет 8-битный аккумулятор и 8-битный databus, имея 16-битные регистры адресации памяти (IX, IY, SP, PC) и 16-битную шину адреса памяти. И Z80 называется 8-битным микропроцессором. Это означает, что люди обычно должны иметь в виду основной целочисленный арифметический размер или размер базы данных, а не размер адресации памяти.

Это не размер инструкций, поскольку Z80 (снова) имел инструкции 1,2 и 3 байта, хотя, конечно, многобайтовые считывались в нескольких чтениях. В другом направлении,8086 микропроцессор 16бит и может прочитать инструкции 8 или 16бит. Так что я бы не согласиться с ответами, которые говорят, что это размер инструкции.

для операционных систем я бы определил его как "код компилируется для работы на процессоре такого размера", поэтому 32-битная ОС имеет код, скомпилированный для работы на 32 бит CPU (согласно определению выше).


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

взять PDP-8 компьютер в качестве примера. Это было 12 бит компьютер. Каждая инструкция была длиной 12 бит. Для обработки данных той же ширины, аккумулятор также был 12 бит. Но что делает 12-битный компьютер 12-битной машиной, была его длина слова инструкции. На передней панели было двенадцать переключателей, с помощью которых его можно было запрограммировать, инструкция за инструкцией.

Это хороший пример, чтобы вырваться из 8/16/32 бит фокус.

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

есть хорошее объяснение этому в Википедия:

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

теперь давайте поговорим об ОС.

с OS-es это менее связано с фактической "Битти-Несс" процессора, он обычно отражает, как собираются опкоды (для какой длины слова процессора) и как регистры адресуются (вы не можете загрузить 32-битное значение в 16-битном регистре) и как адресуется память. Думайте об этом как о завершенной, скомпилированной программе. Он хранится в виде двоичных инструкций и поэтому должен вписываться в длину слова процессора. Задача-мудрый, он должен уметь обращаться ко всей памяти, иначе она не могла бы правильно управлять памятью.

но дело в том, является ли программа 32 или 64 бит (ОС по существу является программой здесь), как хранятся ее двоичные инструкции и как адресуются регистры и память. В общем, это относится ко всем видам программ, а не только к OS-es. Поэтому у вас есть программы, скомпилированные для 32 бит или 64 бит.


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

в нечетком техническом термине они больше связаны с архитектурно видимой шириной, чем любой реальный регистр реализации или ширина шины. Например, 68008 был классифицирован как 32-разрядный процессор, но имел 16-разрядные регистры в кремнии и только 8-разрядную шину данных и 20-нечетные адресные биты.


http://en.wikipedia.org/wiki/64-bit#64-bit_data_models модели данных означают битность для языка.

фраза "OS is x-bit" обычно означает, что ОС была написана для X-bit cpu mode, то есть 64-разрядная Windows использует long mode на x86-64, где регистры составляют 64 бита, а адресное пространство-64 бита, и есть другие отличия от 32-битного режима, где обычно регистры имеют 32 бита в ширину, а адресное пространство-32 бита. На x86 крупный разница между режимами 32 и 64 бит-это наличие сегментации в 32 битах для исторической совместимости.

обычно ОС пишется с битностью процессора в виду, x86-64 является заметным примером десятилетий обратной совместимости - вы можете иметь все от 16-битных программ реального режима через 32-битные программы защищенного режима до 64-битных программ длительного режима.

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


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


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


насколько я знаю, технически это ширина целочисленных путей. Я слышал о 16-битных чипах с 32-битной адресацией. Однако на самом деле это ширина адреса. оператор sizeof(недействительными*) - 16 бит на 16 бит чип, 32 бита на 32-битных и 64-битных на 64-битном.

Это приводит к проблемам, потому что C и c++ допускают преобразования между типами void* и integral, и безопасно, если интегральный тип достаточно большой (тот же размер, что и указатель). Это приводит к всевозможным небезопасным вещам в условия

void* p = something;
int i = (int)p;

который будет ужасно разбиваться и гореть на 64-битном коде (работает на 32-битном), потому что void* теперь вдвое больше, чем int.

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