Если разрядность процессора равна 64 то его регистр имеет размер
На рисунке 5.1 приведены основные компоненты, без которых не возможна работа компьютера. Далее назначение и характеристики каждого устройства будут рассмотрены подробно.
Процессор — центральное устройство компьютера. Микропроцессор (МП) — это сверхбольшая интегральная схема, которая реализует функции процессора ПК. Микропроцессор создается на полупроводниковом кристалле (или нескольких кристаллах) путем применения сложной микроэлектронной технологии.
Возможности компьютера как универсального исполнителя по работе с информацией определяются системой команд процессора. Эта система команд представляет собой язык машинных команд (ЯМК). Из команд ЯМК составляются программы управления работой компьютера. Отдельная команда определяет отдельную операцию (действие) компьютера. В ЯМК существуют команды, по которым выполняются арифметические и логические операции, операции управления последовательностью выполнения команд, операции передачи данных из одних устройств памяти в другие и пр.
В состав процессора входят следующие устройства: устройство управления (УУ), арифметико-логическое устройство (АЛУ), регистры процессорной памяти.
УУ управляет работой всех устройств компьютера по заданной программе. (Функцию устройства управления можно сравнить с работой дирижера, управляющего оркестром. Своеобразной «партитурой» для УУ является программа.)
АЛУ — вычислительный инструмент процессора; это устройство выполняет арифметические и логические операции по командам программы.
Регистры — это внутренняя память процессора. Каждый из регистров служит своего рода черновиком, используя который процессор выполняет расчеты и сохраняет промежуточные результаты. У каждого регистра есть определенное назначение. В регистр — счетчик команд (СчК) помещается адрес той ячейки памяти ЭВМ, в которой хранится очередная исполняемая команда программы. В регистр команд (РК) помещается эта команда на время ее исполнения. Есть регистры, в которые помещаются исходные данные и результаты выполнения команды. Полученный результат может быть переписан из регистра в ячейку ОЗУ.
1. Тактовая частота.
Процессор работает в тесном контакте с микросхемой, которая называется генератором тактовой частоты (ГТЧ). ГТЧ вырабатывает периодические импульсы, синхронизирующие работу всех узлов компьютера. Это своеобразный метроном внутри компьютера. В ритме этого метронома работает процессор. Тактовая частота равна количеству тактов в секунду. Такт — это промежуток времени между началом подачи текущего импульса и началом подачи следующего. На выполнение процессором каждой операции отводится определенное количество тактов. Ясно, что если «метроном стучит» быстрее, то и процессор работает быстрее. Тактовая частота измеряется в мегагерцах — МГц. Частота в 1 МГц соответствует миллиону тактов в 1 секунду. Вот некоторые характерные тактовые частоты микропроцессоров: 40 МГц, 66 МГц, 100 МГц, 450 МГц и др.
2. Разрядность процессора.
Разрядностью называют максимальное количество разрядов двоичного кода, которые могут обрабатываться или передаваться процессором одновременно. Разрядность процессора определяется разрядностью регистров, в которые помещаются обрабатываемые данные. Например, если регистр имеет размер 2 байта, то разрядность процессора равна 16 (8х2); если 4 байта, то 32, если 8 байтов, то 64.
Ячейка — это группа последовательных байтов ОЗУ, вмещающая в себя информацию, доступную для обработки отдельной командой процессора. Содержимое ячейки памяти называется машинным словом. Очевидно, размер ячейки памяти и машинного слова равен разрядности процессора. Обмен информацией между процессором и внутренней памятью производится машинными словами.
Адрес ячейки памяти равен адресу младшего байта (байта с наименьшим номером), входящего в ячейку. Адресация как байтов, так и ячеек памяти начинается с нуля. Адреса ячеек кратны количеству байтов в машинном слове (изменяются через 2, или через 4, или через 8). Еще раз подчеркнем: ячейка — это вместилище информации, машинное слово — это информация в ячейке.
3. Адресное пространство.
По адресной шине процессор передает адресный код — двоичное число, обозначающее адрес ячейки памяти или внешнего устройства, куда направляется информация по шине данных. Адресное пространство — это диапазон адресов (множество адресов), к которым может обратиться процессор, используя адресный код. Если адресный код содержит n бит, то размер адресного пространства равен 2n байтов. Обычно размер адресного кода равен количеству линий в адресной шине (разрядности адресной шины). Например, если компьютер имеет 16-разрядную адресную шину, то адресное пространство его процессора равно 216 = 64 Кб, а при 32-разрядной адресной шине адресное пространство равно 2 = 4 Гб.
Примеры характеристик микропроцессоров:
1) МП Intel-80386: адресное пространство — 232 байта = 4 Гб, разрядность — 32, тактовая частота — от 25 до 40 МГц;
2) МП Pentium: адресное пространство — 232 байта = 4 Гб, разрядность — 64 Гб, тактовая частота — от 60 до 100 МГц.
Столько раз слышала это, читала, но как-то никогда не понимала, что это значит.
Какие особенности у такого процессора (физические характеристики).
И какое отличие от 32-разрядных?
Основное отличие открывать ехе-файлы в два раза большего объема.
Раз знаете что такое байты- так вот эту самую разрядность и означает.
это значит у него 64 регистра памяти и он может выполнять как 32х разрядные так и 64х разрядные программы
64-битная аппаратная платформа: архитектура микропроцессора и соответствующий набор инструкций и чипсет, разработанные компанией AMD. Это расширение архитектуры x86 с полной обратной совместимостью. Набор инструкций x86-64 в настоящее время поддерживается процессорами AMD Athlon 64, Athlon 64 FX, Athlon 64 X2,Phenom, Phenom II, Turion 64, Opteron, последними моделями Sempron. Этот набор инструкций поддержан компанией Intel (с незначительными дополнениями) под названием Intel 64 (ранее известные как EM64T и IA-32e) в поздних моделях процессоров Pentium 4, а также в Pentium D, Pentium Extreme Edition, Celeron D, Core 2 Duo, Core 2 Quad, Core i3, Core i5, Core i7 и Xeon. Корпорации Microsoft и Sun Microsystems используют для обозначения этого набора инструкций термин "x64", однако каталог с файлами для архитектуры в дистрибутивах Microsoft называется "amd64" (ср. "i386" для архитектуры x86).
64 разрядный ЦП - способен выполнять операции с 64 разрядными цифрами, и соответсвенно с 64 разрядными инструкциями.
Т. е. в теории он должен работать в два раза быстрее 32-х рязрядных ЦП но на деле процентов на 10-20.
Если человеческим языком, то тут получается довольно простая арифметика.
Вы наверное знаете о таком понятии, как тактовая частота.
К примеру, процессор, с частотой 1 гГц способен произвести 1000000000 тактов в секунду
1 такт (его еще называют машинным словом) - это максимальное колличесво информации, которое процессор способен обработать за один подход.
В x32 процессорах 1 такт (длина машинного слова) составляет 32 бита или 4 байта
А в x64 - 64 бита или 8 байт
Изучаю архитектуру компьютера по книгам Танненбаума и Харрис.
И все равно не понимаю многих вроде бы простых вещей. Вопросов много, но почти все они так или иначе связаны с машинным словом. Это самая непонятная для меня тема.
Хочу оговориться, что я понимаю, что между разрядностью процессора, разрядностью регистров, размером адресуемой памяти и быстродействием компьютера существует прямая связь. Я не понимаю почему так.
-
Как рязрядность процессора влияет на его быстродействие. Вроде как 64-разрядные быстрее чем 32-разрядные. Но почему? Не понимаю. Приведу пример: Система команд для процессоров MIPS-32. Там ведь сама архитектура команд такая, что все команды убираются в 32 бита. То есть, если сделать 64 бита, старшие 32 бита придется просто заполнить нулями. И что, процессор станет от этого быстрее?
разрядность процессора (разрядность его машинного слова). Машинное слово — машинно-зависимая и платформозависимая величина, измеряемая в битах или байтах (тритах или трайтах), равная разрядности регистров.
Почему машинное слово обязательно должно быть равно разрядности регистров? Почему мы не можем читать данные по 64 бита за раз имея 16-разрядные регистры, например?
Теперь про память. Снова из Википедии:
64-битный регистр способен хранить в себе одно из 264 = 18 446 744 073 709 551 616 значений. Процессор с 64-битной адресацией памяти может напрямую обращаться к 16 ЭБ памяти.
Я понимаю что количество памяти зависит от адреса количества бит в адресе. Но опять же, как это связано с регистрами? Я вижу только одну связь: если мы собираемся хранить адреса в регистрах, то регистры должны иметь ту же разрядность что и адреса. Но разве обязательно хранить адреса в регистрах?
И вот тут вопрос скорее исторический, но так же очень важный для меня. Я всегда считал что 64-разрядный процессор появился недавно и это преподносилось как большой прорыв. А на Википедии вот что написано:
Требования к точности научных вычислений возросли, и в 1974 году появилась первая машина с 64-битным словом — суперкомпьютер Cray-1
Честно говоря, так глубоко не залезал, но по пятому - архитектура предполагает не только саму разрядность процессора, но и кучу сопутствующей инфраструктуры (например, те же SSE или произвольный порядок выполнения инструкций), которые играют немаловажную роль в быстродействии процессора.
3 ответа 3
Основная работа процессора заключается не в передаче информации, а в ее преобразовании. Регистр - это та же оперативная память, но от которой идет прямая разводка к куче исполняющих устройств, которые производят арифметические и другие действия с данными. Этих линий делается очень много. На каждый разряд регистра будет свой и большой набор транзисторов для выполнения конкретных операций. Отсюда и сложность увеличения количества разрядов. При росте размерности регистра в 2 раза как минимум удваивается и объем всех исполняющих устройств. растет кристалл, растет тепловыделение.
Посмотрите на систему команд, любые преобразования данных требуют участия как минимум одного регистра. А часть операций происходит исключительно в регистрах. В x86 архитектуре можно добавить к регистру память. Но например нельзя произвести сдвиг или умножение ячейки памяти. нельзя сложить значения двух ячеек памяти не забрав предварительно одну из них в регистр. потому что исполнительный механизм данной операции имеет прямую разводку только с регистром.
В: Почему мы не можем читать данные по 64 бита за раз имея 16-разрядные регистры
Можем, но куда читать и зачем ? Вообще современные процессоры так и делают, заполняют внутренний кеш и оперируют при этом разрядностью шины, регистры тут не участвуют. Прочитали мы 64 бита в кеш, а теперь нам надо их умножить на 3, например. А регистр у нас 16 битный, как умножать ? Правильно, частями, применяя кучу дополнительных преобразований и тратя на это драгоценные такты. Поэтому размерность шины передачи вторична. Главное - это разрядность регистра. И это назвали машинным словом.
В: Но разве обязательно хранить адреса в регистрах?
Да, обязательно. Процессору как то надо сказать - возьми вот там данные. А там это где ? В памяти ? А как тогда будет выглядеть инструкция - возьми адрес, находящийся по адресу, вон по тому адресу лежащему в инструкции . А если нам надо работать подряд с блоком данных (мы в цикле обрабатываем массив) и этот адрес надо увеличивать (т.е. выполнять сложение, которое мы можем произвести только в регистре)
Кстати, разрядность команды и разрядность процессора разные вещи. В MIPS упаковали все команды в 32 бита. А x86 платформа с незапамятных времен была с переменной разрядностью операций. от коротких однобайтных, до длиннющих монстров с кучей префиксов. Разрядность процессора = разрядность регистра = максимальный размер обрабатываемой одной инструкцией информации (в обычных командах, из которых состоит основной код, всякие SSE не берем).
Быстродействие - кто сказал, что разрядность играет ключевую роль. Да, разрядность влияет. Бум на 64 битные процессоры и ОС отличный пример маркетинга. 64 битный код часто оказывается медленнее 32 битного. Если программе не надо адресовать более 4 Гб памяти, а ее код хранит 64 битные адреса - то размер программы в 2 раза больше. Больше размер - дольше читать в кеш. Требуется больше памяти. Начинается гонка за гигабайтами оперативки . Сейчас даже пошел обратный процесс. во всю развивается x32 ABI - работа 32 битного кода в 64 битном режиме.
Но давайте возьмем RSA-шифрование, которое используется в том же повсеместном SSL. Для него необходимы сложные расчеты с очень большими числами. Предположим, что у нас нет специализированных инструкций процессора для него. Разумеется если процессор оперирует 64 битными регистрами он выполнит расчет в 2 раза быстрее, просто потому, что за один такт он способен обработать в 2 раза больше информации. Да, на расчетных задачах с большими числами выигрыш от увеличения разрядности сложно переоценить.
В: 64-разрядная ОС работает на 64-разрядном процессоре, 32-разрядная - на 32-разрядном.
Нет, 64 битная ОС состоит из 64 битного кода, способного адресовать память 64 битными адресами. Конечно она может это делать только на 64 битном процессоре. Появление ОС конечно было неизбежно. Хотя и тут маркетинг сыграл значительную роль. 90% разбирающего в компах народа считают, что для адресации свыше 4 Гб оперативной памяти на платформе intel нужна 64 Бит ОС. Да, в Windows было насильно введено такое ограничение. Процессоры Intel в 32 битном режиме PAE адресуют до 64 Гб оперативки, при этом правда один процесс ограничен 4 Гб. 32 Бит linux отлично себя чувствует с такими объемами.
По поводу истории и сложности построения 128 битных регистров . вопрос только в цене. Да, на каких то системах не массового рынка это сделано давно, на массовом рынке было не нужно, вот и не появлялось. И тогда оно стоило баснословно, ибо как мы говорили в начале - каждый бит регистра - это куча исполняющих устройств, а при тех технологиях производства разместить на кристалле столько транзисторов было, скажем так, затруднительно. Полноценные 128 битные процессоры попросту не нужны, особенно для массового рынка, адресовать больше 64 ЭБ памяти, где бы ее еще найти. Вообще сейчас во всех процессорах intel есть 16 регистров SSE размером 128 бит, это не регистры общего назначения, они для расчетов. А на современных Xeon, предназначенных для серьезных вычислений, 32 регистра ZMM по 512 бит (см. AVX).
Есть понятие "машинного слово", я читала об этом, но везде пишут по разному, на сколько я понимаю одно машинное слово равно 2 байта, а двойное машинное слово 4 байта, но откуда оно берётся, почему 2 байта а не один? То есть как я понимаю если процессор 32-битный он может за один такт принять и обработать с оперативной памяти 32 бита информации, а это 4 байта значит у него должно быть одно слово 4 байта ну а 64-х битный в 2 раза больше и его слово будет больше?
2 ответа 2
Думаю, вся путаница возникла из-за того, что когда то разработчики Интела (я так думаю) назвали два байта - словом (word) - тогда 16 битные процессоры были прорывом. Соответственно, 4 байта - двойным словом. (DWORD, double word). Это сохранилось и в многих языках программирования (в том числе в с/с++). Почему два байта - слово? да видимо от того, что байт это как буква. А две буквы - это уже слово. (Хотя сейчас прибегут филологи и скажут, что это скорее всего слог, чем слово). В википедии есть хорошая фраза "* Для 32-битных процессоров x86: исторически машинным словом считается 16 бит, реально — 32 бита."
А вот словосочетание "двойное машинное слово" я никогда не слышал. Даже гугл мало находит статей с таким сочетанием. А вот "двойное слово" или "машинное слово" - это нормально.
То есть как я понимаю если процессор 32-битный он может за один такт принять и обработать с оперативной памяти 32 бита информации
не все так просто. Далеко не факт, что он может даже принять 32 бита. Современные процессоры сложные, имеют кеш. Имеют сложные комманды, которые за один раз (не так, а именно раз) могут обработать до 16 байт памяти (всякие mmx и sse).
Обычно, машинным словом называют "разрядность процессора", так как разрядность обычно показывает оптимальный размер данных внутри процессора (регистры 32битного процессора 32 битные и с 32битными данными в основном все команды и работают). В некоторых процессорах слово было 60 бит:)
В любом случае рекомендую всегда всматриваться в контекст. Если о "слове" говорит программист на С/С++ - это 16 бит, если программист на ассемблере под 32 битные ARM процессоры - то скорее всего слово - это 32 бита.
Таблица 3-2. Адресные регистры общего назначения
В 64-битном режиме существуют ограничения на доступ к байтовым регистрам. Инструкция не может ссылаться на устаревшие высокие байты (например: AH, BH, CH, DH) и один из новых байтовых регистров одновременно (например: младший байт регистра RAX). Однако инструкции могут ссылаться на старые байты с низким байтом (например: AL, BL, CL или DL) и новые байтовые регистры одновременно (например: младший байт регистра R8 или RBP). Архитектура применяет это ограничение, изменяя высокобайтовые ссылки (AH, BH, CH, DH) на ссылки с низким байтом (BPL, SPL, DIL, SIL: низкие 8 бит для RBP, RSP, RDI и RSI) для инструкций с использованием Префикс REX.
Когда в 64-битном режиме размер операнда определяет количество действительных битов в целевом регистре общего назначения:
• 64-разрядные операнды генерируют 64-битный результат в целевом регистре общего назначения.
• 32-разрядные операнды генерируют 32-битный результат с нулевым расширением до 64-битного результата в целевом регистре общего назначения.
Поскольку верхние 32 бита 64-разрядных регистров общего назначения не определены в 32-битных режимах, верхние 32 бита любого универсального регистра не сохраняются при переходе из 64-разрядного режима в 32-разрядный (для защищенного режим или режим совместимости). Программное обеспечение не должно зависеть от этих битов для поддержания значения после переключения с 64-битного до 32-битного режима
3.4.2 Регистры сегментов
Регистры сегментов (CS, DS, SS, ES, FS и GS) содержат 16-битные сегментные селектора. Селектор сегмента - это специальный указатель, который идентифицирует сегмент в памяти. Для доступа к определенному сегменту в памяти селектор сегмента для этого сегмента должен присутствовать в соответствующем регистре сегментов.
При написании кода приложения программисты обычно создают селектор сегментов с ассемблерными директивами и символами. Затем ассемблер и другие инструменты создают фактические значения селектора сегментов, связанные с этими директивами и символами. При написании системного кода программистам может потребоваться создать селектор сегментов напрямую. См. Главу 3 «Управление памятью с защищенным режимом» в Руководстве разработчика программного обеспечения Intel® 64 и IA-32, том 3A.
Использование сегментных регистров зависит от типа модели управления памятью, которую использует операционная система или исполнительная власть. При использовании плоской (несегментированной) модели памяти регистры сегментов загружаются селекторами сегментов, которые указывают на перекрывающиеся сегменты, каждый из которых начинается с адреса 0 линейного адресного пространства (см. Рис. 3-6). Эти перекрывающиеся сегменты затем содержат линейное адресное пространство для программы. Как правило, определяются два перекрывающихся сегмента: один для кода и другой для данных и стеков. Регистр сегмента CS указывает на сегмент кода, а все остальные регистры сегментов указывают на сегмент данных и стека.
При использовании сегментированной модели памяти каждый сегментный регистр обычно загружается с помощью другого селектора сегментов, так что каждый сегментный регистр указывает на другой сегмент в линейном адресном пространстве (см. Рис. 3-7). В любой момент программа может, таким образом, получить доступ к шести сегментам в линейном адресном пространстве. Для доступа к сегменту, на который не указывает один из сегментных регистров, программа должна сначала загрузить селектор сегмента для сегмента, к которому нужно получить доступ в регистре сегментов.
Каждый из регистров сегментов связан с одним из трех типов хранилища: кодом, данными или стеком. Например, регистр CS содержит селектор сегмента для сегмента кода, где хранятся выполняемые инструкции. Процессор извлекает команды из сегмента кода, используя логический адрес, который состоит из селектора сегментов в регистре CS и содержимого регистра EIP. Регистр EIP содержит смещение внутри сегмента кода следующей команды, которая должна быть выполнена. Регистр CS не может быть загружен явно прикладной программой. Вместо этого он неявно загружается инструкциями или операциями внутреннего процессора, которые изменяют управление программой (например, вызовы процедур, обработку прерываний или переключение задач).
Регистры DS, ES, FS и GS указывают на четыре сегмента данных. Доступность четырех сегментов данных обеспечивает эффективный и безопасный доступ к различным типам структур данных. Например, могут быть созданы четыре отдельных сегмента данных: один для структур данных текущего модуля, другой для данных, экспортированных из модуля более высокого уровня, третий для динамически созданной структуры данных и четвертый для данных, совместно используемых с другим программа. Для доступа к дополнительным сегментам данных прикладная программа должна загружать сегментные селектора для этих сегментов в регистры DS, ES, FS и GS, если это необходимо.
Регистр SS содержит селектор сегментов для сегмента стека, где стек процедуры хранится для выполняемой в настоящее время программы, задачи или обработчика. Все операции стека используют регистр SS для поиска сегмента стека. В отличие от регистра CS, регистр SS может быть загружен явно, что позволяет прикладным программам устанавливать несколько стеков и переключаться между ними.
См. Раздел 3.3 «Организация памяти» для обзора того, как регистры сегментов используются в режиме реального адреса.
Четыре сегмента регистров CS, DS, SS и ES такие же, как регистры сегментов, найденные в процессорах Intel 8086 и Intel 286, а регистры FS и GS были введены в архитектуру IA-32 с семейством процессоров Intel386 ™.
Читайте также: