What do 16-bit, 32-bit and 64-bit architectures mean in case of Microprocessors and/or Operating Systems?
In case of Microprocessors, does it mean maximum size of General Purpose Register
s or size of Integer
or number of Address-line
s or number of Data Bus line
s or what?
What do we mean by saying "DOS is a 16-bit OS
", "Windows in a 32-bit OS
", etc...?
Насколько мне известно, технически это ширина целочисленных путей. Я слышал о 16-битных чипах с 32-битной адресацией. Однако на самом деле это ширина адреса. sizeof(void*) составляет 16 бит на 16-битном чипе, 32 бита на 32-битном и 64 бита на 64-битном.
Это приводит к проблемам, поскольку C и C++ допускают преобразования между типами void* и целочисленными, и это безопасно, если целочисленный тип достаточно велик (того же размера, что и указатель). Это приводит к всевозможным небезопасным вещам с точки зрения
void* p = something;
int i = (int)p;
, которые будут ужасно падать и гореть на 64-битном коде (работает на 32-битном), потому что void * теперь вдвое больше, чем int.
В большинстве языков вам придется потрудиться, чтобы учесть ширину системы, над которой вы работаете.
Определения являются маркетинговыми терминами, а не точными техническими терминами.
В нечетком техническом термине они больше связаны с архитектурно видимой шириной, чем с любым реальным регистром реализации или шириной шины. Например, 68008 классифицировался как 32-битный ЦП, но имел 16-битные регистры в кремнии и только 8-битную шину данных и 20 нечетных адресных битов.
Мой оригинальный ответ ниже, если вы хотите понять комментарии.
Как вы сказали, есть множество мер. К счастью для многих процессоров, многие меры одинаковы, так что путаницы нет. Давайте посмотрим на некоторые данные (извините за загрузку изображения, я не нашел хорошего способа сделать таблицу в уценке).
Как видите, многие столбцы являются хорошими кандидатами. Однако я бы сказал, что размер регистров общего назначения (зеленый) является наиболее понятным ответом.
Когда процессор сильно различается по размеру для разных регистров, его часто описывают более подробно, например, Motorola 68k описывается как 16/32-битный чип.
Другие утверждали, что ширина шины команд (желтая) также соответствует таблице. Однако я бы сказал, что в современном мире конвейерной обработки для большинства приложений это гораздо менее актуальная мера, чем размер регистров общего назначения.
Разные люди могут иметь в виду разные вещи, потому что, как вы говорите, есть несколько мер.Так, например, кто-то, говорящий об адресации памяти, может иметь в виду нечто иное, чем кто-то, говорящий о целочисленной арифметике. Тем не менее, я попытаюсь определить то, что, по моему мнению, является общим пониманием.
Я полагаю, что для ЦП это означает «размер типичного регистра, используемого для стандартных операций» или «размер шины данных» (обычно они эквивалентны).
Я обосновываю это следующей логикой. Z80 имеет 8-битный аккумулятор и 8-битную шину данных, а также 16-битные регистры адресации памяти (IX, IY, SP, PC) и 16-битную адресную шину памяти. А Z80 называется 8-битным микропроцессором. Это означает, что люди обычно должны иметь в виду основной целочисленный арифметический размер или размер шины данных, а не размер адресации памяти.
Дело не в размере инструкций, так как в Z80 (опять же) были 1,2 и 3-байтовые инструкции, хотя, конечно, многобайтовые считывались при многократном чтении. С другой стороны, 8086 представляет собой 16-битный микропроцессор и может считывать 8- или 16-битные инструкции. Поэтому я должен был бы не согласиться с ответами, в которых говорится, что это размер инструкции.
Для операционных систем я бы определил это как «код скомпилирован для работы на ЦП такого размера», поэтому 32-битная ОС имеет код, скомпилированный для работы на 32-битном ЦП (согласно приведенному выше определению).
Сколько бит "содержит" ЦП, означает, какова длина слова инструкции. На 32-битном ЦП длина слова такой инструкции составляет 32 бита, что означает, что это ширина, которую ЦП может обрабатывать как инструкции или данные, что часто приводит к шине с такой шириной. По той же причине размер регистров равен длине слова процессора, но часто для разных целей используются регистры большего размера.
В качестве примера возьмем компьютер PDP-8. Это был 12-битный компьютер. Каждая инструкция имела длину 12 бит. Для обработки данных одинаковой ширины аккумулятор также был 12-битным. Но что делает 12-битный компьютер 12-битной машиной, так это длина слова инструкции. У него было двенадцать переключателей на передней панели, с помощью которых его можно было программировать, инструкция за инструкцией.
Это хороший пример, чтобы вырваться из фокуса 8/16/32 бит.
Количество бит также обычно соответствует размеру адресной шины. Поэтому обычно указывается максимальная адресуемая память.
В Википедии этому есть хорошее объяснение:
В компьютерной архитектуре 32-битные целые числа, адреса памяти или другие единицы данных имеют ширину не более 32 бит (4 октета). . Кроме того, 32-разрядные архитектуры ЦП и АЛУ основаны на регистрах, адресных шинах или шинах данных такого размера. 32-битный — это также термин, обозначающий поколение компьютеров, в которых 32-битные процессоры были нормой.
Теперь поговорим об ОС.
В ОС это гораздо меньше связано с фактической «разрядностью» ЦП, обычно это отражает то, как собираются коды операций (для какой разрядности ЦП) и как адресуются регистры (вы можете t загрузить 32-битное значение в 16-битный регистр) и как адресована память. Думайте об этом как о завершенной, скомпилированной программе. Он хранится в виде двоичных инструкций и поэтому должен соответствовать размеру слова процессора. С точки зрения задач он должен иметь возможность обращаться ко всей памяти, иначе он не сможет правильно управлять памятью.
Но дело в том, является ли программа 32-битной или 64-битной (ОС здесь, по сути, является программой), как хранятся ее двоичные инструкции и как адресуются регистры и память. В общем, это касается всех видов программ, а не только ОС. Вот почему у вас есть программы, скомпилированные для 32-битной или 64-битной версии.
Когда мы говорим о 2^n-битных архитектурах в информатике, мы в основном говорим о регистрах памяти, размере адресных шин или шинах данных. Основная концепция термина 2^n-битной архитектуры состоит в том, чтобы обозначить, что здесь 2^n бит данных можно использовать для адресации/передачи данных размером 2^n процессами.
http://en.wikipedia.org/wiki/64-bit#64-bit_data_models модели данных означают разрядность для языка.
Фраза «OS is x-bit» обычно означает, что ОС была написана для режима x-bit cpu, то есть 64-битная Windows использует длинный режим на x86-64, где регистры 64-битные, а адресное пространство 64-битный, и есть другие явные отличия от 32-битного режима, где обычно регистры имеют ширину 32 бита, а адресное пространство имеет размер 32 бита. На x86 основное различие между 32-битным и 64-битным режимами заключается в наличии сегментации в 32-битном для исторической совместимости.
Обычно ОС пишется с учетом разрядности ЦП, и x86-64 является ярким примером многолетней обратной совместимости — вы можете иметь все, от 16-разрядных программ реального режима до 32-разрядных программ защищенного режима и 64-разрядных программ. биты долговременных программ.
Плюс есть разные способы виртуализации, так что ваша программа может работать как бы в 32-битном режиме, но на самом деле она выполняется вовсе не на x86 ядре.