Инструмент проще, чем машина. Зачастую инструментом работают руками, а машину приводит в действие паровая сила или животное.
Компьютер тоже можно назвать машиной, только вместо паровой силы здесь электричество. Но программирование сделало компьютер таким же простым, как любой инструмент.
Процессор — это сердце/мозг любого компьютера. Его основное назначение — арифметические и логические операции, и прежде чем погрузиться в дебри процессора, нужно разобраться в его основных компонентах и принципах их работы.
Два основных компонента процессора
Устройство управления
Устройство управления (УУ) помогает процессору контролировать и выполнять инструкции. УУ сообщает компонентам, что именно нужно делать. В соответствии с инструкциями он координирует работу с другими частями компьютера, включая второй основной компонент — арифметико-логическое устройство (АЛУ). Все инструкции вначале поступают именно на устройство управления.
Существует два типа реализации УУ:
- УУ на жёсткой логике (англ. hardwired control units). Характер работы определяется внутренним электрическим строением — устройством печатной платы или кристалла. Соответственно, модификация такого УУ без физического вмешательства невозможна.
- УУ с микропрограммным управлением (англ. microprogrammable control units). Может быть запрограммирован для тех или иных целей. Программная часть сохраняется в памяти УУ.
УУ на жёсткой логике быстрее, но УУ с микропрограммным управлением обладает более гибкой функциональностью.
Арифметико-логическое устройство
Это устройство, как ни странно, выполняет все арифметические и логические операции, например сложение, вычитание, логическое ИЛИ и т. п. АЛУ состоит из логических элементов, которые и выполняют эти операции.
Большинство логических элементов имеют два входа и один выход.
Ниже приведена схема полусумматора, у которой два входа и два выхода. A и B здесь являются входами, S — выходом, C — переносом (в старший разряд).
Схема арифметического полусумматора
Хранение информации — регистры и память
Как говорилось ранее, процессор выполняет поступающие на него команды. Команды в большинстве случаев работают с данными, которые могут быть промежуточными, входными или выходными. Все эти данные вместе с инструкциями сохраняются в регистрах и памяти.
Регистры
Регистр — минимальная ячейка памяти данных. Регистры состоят из триггеров (англ. latches/flip-flops). Триггеры, в свою очередь, состоят из логических элементов и могут хранить в себе 1 бит информации.
Прим. перев. Триггеры могут быть синхронные и асинхронные. Асинхронные могут менять своё состояние в любой момент, а синхронные только во время положительного/отрицательного перепада на входе синхронизации.
По функциональному назначению триггеры делятся на несколько групп:
- RS-триггер: сохраняет своё состояние при нулевых уровнях на обоих входах и изменяет его при установке единице на одном из входов (Reset/Set — Сброс/Установка).
- JK-триггер: идентичен RS-триггеру за исключением того, что при подаче единиц сразу на два входа триггер меняет своё состояние на противоположное (счётный режим).
- T-триггер: меняет своё состояние на противоположное при каждом такте на его единственном входе.
- D-триггер: запоминает состояние на входе в момент синхронизации. Асинхронные D-триггеры смысла не имеют.
Для хранения промежуточных данных ОЗУ не подходит, т. к. это замедлит работу процессора. Промежуточные данные отсылаются в регистры по шине. В них могут храниться команды, выходные данные и даже адреса ячеек памяти.
Принцип действия RS-триггера
Память (ОЗУ)
ОЗУ (оперативное запоминающее устройство, англ. RAM) — это большая группа этих самых регистров, соединённых вместе. Память у такого хранилища непостоянная и данные оттуда пропадают при отключении питания. ОЗУ принимает адрес ячейки памяти, в которую нужно поместить данные, сами данные и флаг записи/чтения, который приводит в действие триггеры.
Прим. перев. Оперативная память бывает статической и динамической — SRAM и DRAM соответственно. В статической памяти ячейками являются триггеры, а в динамической — конденсаторы. SRAM быстрее, а DRAM дешевле.
Команды (инструкции)
Команды — это фактические действия, которые компьютер должен выполнять. Они бывают нескольких типов:
- Арифметические: сложение, вычитание, умножение и т. д.
- Логические: И (логическое умножение/конъюнкция), ИЛИ (логическое суммирование/дизъюнкция), отрицание и т. д.
- Информационные:
move,input,outptut,loadиstore. - Команды перехода:
goto,if ... goto,callиreturn. - Команда останова:
halt.
Прим. перев. На самом деле все арифметические операции в АЛУ могут быть созданы на основе всего двух: сложение и сдвиг. Однако чем больше базовых операций поддерживает АЛУ, тем оно быстрее.
Инструкции предоставляются компьютеру на языке ассемблера или генерируются компилятором высокоуровневых языков.
В процессоре инструкции реализуются на аппаратном уровне. За один такт одноядерный процессор может выполнить одну элементарную (базовую) инструкцию.
Группу инструкций принято называть набором команд (англ. instruction set).
Тактирование процессора
Быстродействие компьютера определяется тактовой частотой его процессора. Тактовая частота — количество тактов (соответственно и исполняемых команд) за секунду.
Частота нынешних процессоров измеряется в ГГц (Гигагерцы). 1 ГГц = 10⁹ Гц — миллиард операций в секунду.
Чтобы уменьшить время выполнения программы, нужно либо оптимизировать (уменьшить) её, либо увеличить тактовую частоту. У части процессоров есть возможность увеличить частоту (разогнать процессор), однако такие действия физически влияют на процессор и нередко вызывают перегрев и выход из строя.
Выполнение инструкций
Инструкции хранятся в ОЗУ в последовательном порядке. Для гипотетического процессора инструкция состоит из кода операции и адреса памяти/регистра. Внутри управляющего устройства есть два регистра инструкций, в которые загружается код команды и адрес текущей исполняемой команды. Ещё в процессоре есть дополнительные регистры, которые хранят в себе последние 4 бита выполненных инструкций.
Ниже рассмотрен пример набора команд, который суммирует два числа:
LOAD_A 8. Это команда сохраняет в ОЗУ данные, скажем,<1100 1000>. Первые 4 бита — код операции. Именно он определяет инструкцию. Эти данные помещаются в регистры инструкций УУ. Команда декодируется в инструкциюload_A— поместить данные1000(последние 4 бита команды) в регистрA.LOAD_B 2. Ситуация, аналогичная прошлой. Здесь помещается число 2 (0010) в регистрB.ADD B A. Команда суммирует два числа (точнее прибавляет значение регистраBв регистрA). УУ сообщает АЛУ, что нужно выполнить операцию суммирования и поместить результат обратно в регистрA.STORE_A 23. Сохраняем значение регистраAв ячейку памяти с адресом23.
Вот такие операции нужны, чтобы сложить два числа.
Шина
Все данные между процессором, регистрами, памятью и I/O-устройствами (устройствами ввода-вывода) передаются по шинам. Чтобы загрузить в память только что обработанные данные, процессор помещает адрес в шину адреса и данные в шину данных. Потом нужно дать разрешение на запись на шине управления.
Кэш
У процессора есть механизм сохранения инструкций в кэш. Как мы выяснили ранее, за секунду процессор может выполнить миллиарды инструкций. Поэтому если бы каждая инструкция хранилась в ОЗУ, то её изъятие оттуда занимало бы больше времени, чем её обработка. Поэтому для ускорения работы процессор хранит часть инструкций и данных в кэше.
Если данные в кэше и памяти не совпадают, то они помечаются грязными битами (англ. dirty bit).
Поток инструкций
Современные процессоры могут параллельно обрабатывать несколько команд. Пока одна инструкция находится в стадии декодирования, процессор может успеть получить другую инструкцию.
Однако такое решение подходит только для тех инструкций, которые не зависят друг от друга.
Если процессор многоядерный, это означает, что фактически в нём находятся несколько отдельных процессоров с некоторыми общими ресурсами, например кэшем.
Если хотите узнать о процессорах больше, посмотрите, какие бывают популярные архитектуры: CISC, RISC, MISC и другие и виды.
180К открытий197К показов
Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров12K
Вступление
Здесь я постараюсь рассказать про строение и работу процессора на примере x86–64 архитектуры.
Когда-то это всё я конспектировал для себя в дружелюбном для новичка виде, чтобы мне самому было проще вовзвращаться к этой информации время от времени.
Я решил поделиться своими заметками, так как возможно кому-то это может показаться полезным. На детальность информации не претендую, но не против конструктивной критики.
Вот довольно неплохие видео, которые noob friendly:
1) https://www.youtube.com/watch?v=ubsZ9MO9qkU
2) https://www.youtube.com/watch?v=aNVMpiyeY_U&t=280s
Устройство процессора (схематически)
Очень упрощённая схема, современные процессоры имеют более сложное строение, которое сейчас для понимания работы процессора не так важно.
Процесс обработки данных процессором (при прочтении поглядывай на картинки)
Центральный процессор (CPU, Central Processing Unit) — это основной компонент устройств, который выполняет все вычисления и логические операции, необходимые для работы программ.
Когда процессору требуются данные, он сначала проверяет их в регистрах, и кэшах L1-L3.
Если он не находит данные там, то он генерирует сигнал на шине адреса, указывающий физический адрес памяти ОЗУ, по которому нужно прочитать данные. Этот сигнал на шине адреса генерируется процессором и передается контроллеру памяти.
Когда контроллер памяти получает сигнал на шине адреса от процессора, он инициирует процесс чтения данныхиз соответствующей ячейки памяти по указанному физическому адресу.
То есть отправляем в ОЗУ адрес по шине адреса, а получаем данные по шине данных.
По шине данных информация помещается в кэш L3.
В отдельное ядро данные попадают с общего кэша L3, затем передаются в L2 кэш внутри каждого физического ядра процессора, и окончательно попадают в L1 кэш.
Кэш L1 часто разделяется на две части: кэш данных и кэш инструкций. Инструкции, которые передаются вместе с данными, попадают в кэш инструкций, а данные оказываются в кэше данных.
После того как данные и инструкции попадают в соответствующие кэши L1, инструкции отправляются в декодер.
Декодер ответственен за преобразование машинных инструкций в управляющие сигналы, которые определяют следующие операции процессора.
Данные из кэша данных могут попадать в буферы загрузки (load buffers) для последующей обработки.
А декодированные инструкции направляются в буфер переупорядочевания (reorder buffer), который решает проблемы конфликтов данных и зависимостей инструкций, и может временно изменять порядок выполнения инструкций, чтобы обеспечить корректность выполнения программы.
Затем планировщик направляет инструкции в исполнительные или вычислительные блоки (ALU, FPU, VPU и так далее)
Планировщик определяет порядок выполнения операций, обеспечивая оптимальное использование ресурсов процессора, а также может распараллеливать операции для повышения производительности. Устройство управления координирует выполнение инструкций и управляет передачей данных между различными частями процессора.
Каждое ядро может обрабатывать несколько потоков инструкций (обычно 2) за счёт технологий Hyper-Threading и Simultaneous Multi-Threading.
Данные из буферов поступления обычно загружаются в регистры общего назначения (если требуется).
В этих регистрах данные доступны для последующей обработки с использованием арифметико-логического устройства (ALU) или других вычислительных блоков процессора, таких как блоки с плавающей точкой (FPU) или векторные блоки (VPU).
После выполнения операций, предписанных инструкциями, преобразованные данные могут быть временно сохранены в регистрах, а затем перемещены обратно в кэш L1.
Далее данные перемещаются в иерархии выше: в кэш L2, а затем в кэш L3.
В конечном счете, данные могут быть сохранены обратно в оперативную память (RAM), если это необходимо.
Описание компонентов
Устройство управления (Control Unit)
Управляет выполнением инструкций, координируя работу других компонентов.
Устройство управления включает в себя несколько ключевых компонентов, которые координируют функционирование процессора. Вот некоторые из них:
-
Декодер инструкций: Отвечает за декодирование машинных инструкций, переводя их из машинного кода в управляющие сигналы, которые указывают, какие операции должны быть выполнены.
-
Генератор сигналов управления: Создает сигналы, которые управляют различными функциями процессора, такими как чтение/запись в регистры, выбор источников данных для выполнения операций, управление памятью и так далее.
-
Счётчик инструкций: Отслеживает текущую выполняемую инструкцию и управляет последовательностью исполнения инструкций внутри процессора.
-
Управляющие регистры: Хранят состояние процессора, включая информацию о текущей инструкции, режиме работы процессора и т. д.
-
Предсказатель переходов: В некоторых процессорах устройство управления включает предсказатель переходов, который анализирует последовательность инструкций для предсказания условных переходов, что улучшает предсказуемость ветвлений и оптимизирует выполнение программ.
Планировщик (Scheduler):
-
Планировщик отвечает за распределение микроопераций (micro-ops) между различными исполнительными блоками процессора, такими как ALU и FPU.
-
Он определяет порядок исполнения микроопераций, стараясь максимально эффективно использовать ресурсы процессора и минимизировать время простоя.
ALU (Arithmetic Logic Unit):
-
Выполняет арифметические операции (сложение, вычитание и т.д.).
-
Выполняет логические операции (AND, OR, XOR и т.д.).
FPU (Floating Point Unit):
Выполняет операции с плавающей запятой.
VPU (Vector Processing Unit):
Выполняет операций с векторными данными.
MMU (Memory Management Unit):
Устройство управления памятью, которое обеспечивает виртуальную память, кэширование, защиту памяти и другие функции, связанные с адресацией и доступом к оперативной памяти.
NPU (Neural Processing Unit):
Устройство, специализированное на выполнении операций, связанных с нейронными сетями и искусственным интеллектом. (добавил из-за хайпа)
Регистры:
Материал (англ): https://wiki.osdev.org/CPU_Registers_x86
Регистры процессора являются небольшими, очень быстрыми областями памяти из набора триггеров, которые используются для выполнения инструкций и хранения промежуточных данных во время выполнения программ.
Триггер (flip-flop) — это элементарная цифровая ячейка, способная хранить один бит информации (0 или 1).
Регистры являются самой быстрой памятью в компьютере, поскольку они находятся непосредственно в процессоре и имеют непосредственный доступ к ALU.
Регистры делятся на регистры общего назначения и регистры специального назначения.
Регистры общего назначения обычно используются для хранения промежуточных результатов вычислений и других временных данных, которые понадобятся в процессе выполнения программы. Эти регистры могут быть доступны для программиста для вышеперечисленных целей.
Регистры специального назначения обычно участвуют в управлении процессором, кэш-памятью, управлении памятью или других системных функциях. Хотя программисты обычно не работают напрямую с этими регистрами при написании прикладного программного обеспечения, они могут управлять ими через соответствующие инструкции или API для выполнения определенных задач.
В регистре может быть любое количество триггеров, в зависимости от его дизайна и предназначения.
Регистры общего назначения имеют размер, соответствующий разрядности процессора. А регистры специального назначения уже зависят от реализации того или иного процессора. Например, в некоторых архитектурах регистр управления кэш-памятью может быть 64-битным даже в 32-битных процессорах.
Регистры общего назначения:
-
RAX (Accumulator Register):
Используется для арифметических, логических операций и операций ввода-вывода.
-
RBX (Base Register):
Используется для хранения данных и может использоваться как базовый регистр при адресации памяти.
-
RCX (Counter Register):
Используется в операциях цикла и как счетчик в командах REP и LOOP.
-
RDX (Data Register):
Используется в арифметических операциях, особенно в умножении и делении.
-
RSI (Source Index):
Используется для указания на исходный адрес при операциях с памятью (например, при копировании данных).
-
RDI (Destination Index):
Используется для указания на адрес назначения при операциях с памятью.
-
R8-R15 (Дополнительные регистры):
Введены в 64-разрядной архитектуре, используются для хранения данных и промежуточных значений.
Специальные регистры:
-
RSP (Stack Pointer):
Указывает на вершину стека.
-
RBP (Base Pointer):
Используется для доступа к параметрам и локальным переменным в стеке.
-
CS (Code Segment):
Хранит базовый адрес сегмента кода в ОЗУ, откуда процессор считывает команды для выполнения. Если проводить аналогию между кодом и книгой, то CS указывает на номер страницы в книге (программе)
-
RIP (Instruction Pointer):
Указывает на следующую инструкцию, которую должен выполнить процессор. Если проводить аналогию между кодом и книгой, то RIP указывает на номер строки на странице, которая указана в CS.
-
FLAGS (или RFLAGS в 64-разрядной системе):
Хранит флаги состояния процессора, отражают состояние различных аспектов выполнения инструкций процессора, таких как результаты арифметических операций, наличие переноса, знак числа, флаги нуля, переполнения и др. Они предназначены для управления логикой выполнения программы, исходя из текущего состояния выполнения инструкций процессора.
«Регистры в регистрах» ©Xzibit
Ранее существовали 16-битные регистры, такие как AX, BX, CX и DX, каждый из которых мог быть разделён на два 8-битных регистра: старший и младший. Например, регистр AX разделён на AH (старший байт) и AL (младший байт).
При расширении до 32 бит, 16-битные регистры стали частью новых 32-битных регистров. Например, регистр AX был включён в регистр EAX, где младшие 16 бит EAX соответствуют регистру AX.
При переходе к 64-битным регистрациям, 32-битные регистры (например, EAX) включены в более широкий регистр — RAX. В случае регистра RAX, младшие 32 бита этого регистра являются регистром EAX.
Таким образом, 8-битные регистры AH и AL всё также сохраняют свою функциональность и доступны в составе более широких регистров новых архитектур.
Сделано это в основном для обеспечения обратной совместимости.
; Использование регистра RAX для арифметических операций
mov rax, 5 ; Кладем 5 в регистр RAX
add rax, 10 ; Добавляем 10 к регистру RAX (итог: 15)
; Использование регистра RBX для хранения данных и арифметических операций
mov rbx, rax ; Копируем значение RAX в RBX (RBX теперь 15)
sub rbx, 3 ; Вычитаем 3 из RBX (итог: 12)
; Использование регистра RCX в качестве счетчика
mov rcx, 3 ; Кладем 3 в регистр RCX
loop_start:
dec rcx ; Уменьшаем RCX на 1
jz loop_end ; Если RCX = 0, переходим на метку loop_end
add rax, rcx ; Добавляем RCX к RAX (2 + 15, затем 1 + 17, в итоге RAX хранит 18)
jmp loop_start ; Переходим на метку loop_start
loop_end:
; Использование регистра RDX для умножения и деления
mov rdx, 2 ; Кладем 2 в регистр RDX
imul rax, rdx ; Умножаем RAX на RDX (итог: 36)
Кэш-память:
-
L1: Первый уровень кэша, самый быстрый и маленький по объему.
-
L2: Второй уровень кэша, более медленный, но большего объема.
-
L3: Третий уровень кэша, ещё более медленный, но ещё большего объема, чем L2 и быстрее оперативной памяти. L3 кэш обычно является общим для всех ядер в многоядерном процессоре. Это означает, что все ядра процессора могут иметь доступ к данным, хранящимся в L3 кэше, что полезно для снижения задержек в доступе к данным между ядрами.
-
L4 — Тоже самое что и L3, но ещё медленнее (но все равно быстрее оперативной памяти) и объёмнее, используется только в высокопроизводительных системах, например, серверах.
Системная шина
Шина представляетсобой физический канал передачи данных и управляющих сигналов между различными компонентами компьютера. Все данные между процессором, регистрами, памятью и I/O‑устройствами (устройствами input‑output) передаются по шинам. Чтобы загрузить в память только что обработанные данные, процессор помещает адрес в шину адреса и данные в шину данных. Потом нужно дать разрешение на запись на шине управления.
Шина данных (Data Bus):
-
Шина данных используется для передачи фактических данных (байтов, слов и т. д.) между процессором и памятью, периферийными устройствами или другими компонентами внутри процессора.
-
Ширина шины данных (data bus width) измеряется в битах и часто соответствует разрядности процессора. Это количество бит, которые могут передаваться по шине данных одновременно. Например, 64-битная шина данных может передавать 64 бита данных за один раз.
-
Важно отметить, что ширина шины данных и разрядность процессора часто совпадают, но не всегда. Например, процессор может быть 32-битным, но иметь 64-битную шину данных для повышения производительности при работе с памятью.
Шина адреса (Address Bus):
-
Шина адреса используется для передачи адреса, по которому нужно прочитать или записать данные в памяти или других устройствах.
-
Ширина шины адреса определяет диапазон адресов, который процессор может обращаться. Например, 32-битная шина адреса позволяет обращаться к 2^32 (4 ГБ) адресам.
Шина управления (Control Bus):
-
Шина управления используется для передачи управляющих сигналов и команд между различными компонентами процессора и другими устройствами.
-
Она включает сигналы для чтения/записи данных, инициализации операций, сигналы прерывания и другие управляющие сигналы, необходимые для координации работы системы.
Тактирование процессора
Один такт процессора (или тактовый цикл) — это единица времени, определяемая одним импульсом тактового сигнала процессора.
Выполнение одной машинной инструкции чаще всего требует выполнения нескольких тактов, при этом за один такт могут выполняться части нескольких инструкций одновременно, что позволяет добиться более высокой общей производительности.
Тактовая частота — количество тактов за секунду.
Частота нынешних процессоров измеряется в ГГц (Гигагерцы). 1 ГГц = 10⁹ Гц — миллиард тактов.
Продолжительность одного такта определяется тактовой частотой процессора. Например, если процессор работает на частоте 3 ГГц, это означает, что один такт длится примерно 0.33 наносекунды (1 / 3,000,000,000 секунды).
За один такт может выполняться одна или несколько элементарных операций. Одна сложная инструкция, такая как умножение или обращение к памяти, может потребовать несколько тактов для завершения
Чтобы уменьшить время выполнения программы, нужно либо оптимизировать (уменьшить) её, либо увеличить тактовую частоту. У части процессоров есть возможность увеличить частоту (разогнать процессор), однако такие действия физически влияют на процессор и нередко вызывают перегрев и выход из строя.
Выполнение инструкций
Инструкции хранятся в ОЗУ в последовательном порядке. Для гипотетического процессора инструкция состоит из кода операции и адреса памяти/регистра. Внутри управляющего устройства есть два регистра инструкций, в которые загружается код команды и адрес текущей исполняемой команды. Ещё в процессоре есть дополнительные регистры, которые хранят в себе последние 4 бита выполненных инструкций.
Ниже рассмотрен пример набора команд (на псевдокоде), который суммирует два числа:
-
LOAD_A 8. Это команда сохраняет в ОЗУ данные, скажем,<1100 1000>. Первые 4 бита — код операции, следую. Именно он определяет инструкцию. Эти данные помещаются в регистры инструкций УУ. Команда декодируется в инструкциюload_A— поместить данные1000(последние 4 бита команды) в регистрA. -
LOAD_B 2. Ситуация, аналогичная прошлой. Здесь помещается число 2 (0010) в регистрB. -
ADD B A. Команда суммирует два числа (точнее прибавляет значение регистраBв регистрA). УУ сообщает АЛУ, что нужно выполнить операцию суммирования и поместить результат обратно в регистрA. -
STORE_A 23. Сохраняем значение регистраAв ячейку памяти с адресом23.
Вот такие операции нужны, чтобы сложить два числа.
Кэш
Для начала примем один факт — с ростом объёма кэша возрастает и задержка доступа.
Причина в увеличении времени на определение пути к нужной ячейке памяти внутри большого кэша. Поэтому по скорости L1 > L2 > L3 > ОЗУ, но с объёмом ровно наоборот. Такая иерархия позволяет процессоре работать в балансе между скоростью и доступным объемом памяти.
У процессора есть механизм сохранения инструкций в кэш. Как мы выяснили ранее, за секунду процессор может выполнить миллиарды инструкций. Поэтому если бы каждая инструкция хранилась в ОЗУ, то её изъятие оттуда занимало бы больше времени, чем её обработка. Поэтому для ускорения работы процессор хранит часть инструкций и данных в кэше для ускорения доступа к наиболее часто используемым инструкциям и данным.
Строка или кэш-линия в контексте кэш-памяти (cache line) — это последовательная группа байтов. Она представляет собой минимальную единицу данных, которую кэш может загружать из основной памяти и сохранять. Длина строки обычно составляет 32, 64 или 128 байт, в зависимости от архитектуры процессора и кэш-памяти.
Когда процессору нужно считать из памяти один байт, он извлекает не только его, но и столько смежных байтов, сколько требуется для заполнения кэш-линии, это называется выравниванием кэш-линии.
Программы часто обращаются к данным, которые находятся рядом друг с другом в памяти (например, элементы массивов). Загружая целую кэш-линию, процессор использует этот принцип для повышения эффективности
Подробнее
Грязные биты (dirty bits) — это флаги в кэш-памяти, которые указывают на то, что данные в кэше были изменены (модифицированы) по сравнению с их копией в основной памяти (ОЗУ). Когда данные в кэше и основной памяти не совпадают, они считаются «грязными».
При вытеснении кэш-линии из кэша (например, когда кэш заполнен и необходимо освободить место для новых данных) система проверяет грязный бит. Если он установлен, данные из кэша записываются обратно в основную память, чтобы сохранить согласованность данных.
Грязные биты играют важную роль в системах кэширования, помогая управлять синхронизацией данных между кэшем и основной памятью.
Поток инструкций
Современные процессоры могут параллельно обрабатывать несколько команд. Пока одна инструкция находится в стадии декодирования, процессор может успеть получить другую инструкцию.
Однако такое решение подходит только для тех инструкций, которые не зависят друг от друга.
Если процессор многоядерный, это означает, что фактически в нём находятся несколько отдельных процессоров с некоторыми общими ресурсами, например кэшем.
Разрядность процессора — это показатель, указывающий, сколько бит данных процессор может обрабатывать одновременно и какой объем адресуемой памяти он может поддерживать. Это одна из ключевых характеристик, определяющая мощность и возможности процессора.
Разрядность процессора
Основные аспекты разрядности процессора
Ширина данных:
-
Разрядность процессора указывает на количество бит, которые процессор может обработать за один цикл. Например, 32-битный процессор может работать с 32-битными числами или адресами памяти. То есть длина слова будет 32 бита.
-
Машинное слово — это единица данных, с которой процессор работает за один такт. Длина слова соответствует разрядности процессора. Термин «слово» пришел из ранней компьютерной науки и электроники.
Адресное пространство:
Разрядность также определяет максимальный объем памяти, который процессор может адресовать. 32-битный процессор может адресовать до 4 ГБ оперативной памяти (2^32 байт), тогда как 64-битный процессор может адресовать гораздо больше — до 16 эксабайт (2^64 байт), хотя современные операционные системы и аппаратное обеспечение обычно ограничивают этот объем до нескольких терабайт.
Регистр процессора:
Разрядность процессора определяет размер регистров. В 32-битном процессоре регистры имеют размер 32 бита, в 64-битном — 64 бита (касается не всех регистров, а по большей части регистров общего назначения).
Почему x86?
-
Intel 8086 (1978 год): Этот процессор был первым 16-битным процессором в семействе x86, который заложил фундамент архитектуры x86.
-
Intel 80386 (1985 год): Этот процессор продолжил развитие архитектуры x86 и добавил поддержку 32-битной адресации и данных. Он был очень важным для современных операционных систем и приложений, так как открыл путь к полноценной поддержке многозадачности и сложных вычислений.
-
AMD Opteron (2003): В 2003 году AMD представила процессоры с архитектурой x86-64 (также известной как AMD64), которые поддерживают 64-битные вычисления, но также и имеют обратную совместимость с x86, поэтому такое название: x86-64. Хотя до сих пор принято называть такие процессоры x86-ыми. Intel просто лицензировали технологию AMD, чуть-чуть доработали, обозвали EM64T, но по сути это та же AMD64, поэтому под архитектуру x86-64 программы обычно обозначаются обычно как AMD64.
ARM
История и развитие ARM процессоров
-
Основание и начало: ARM была разработана в 1980-х годах компанией Acorn Computers Ltd (Великобритания) в ответ на необходимость компактных, энергоэффективных и высокопроизводительных процессоров для использования в персональных компьютерах.
-
Переход в мобильные устройства: В конце 1980-х и начале 1990-х годов ARM начала активно использоваться в мобильных устройствах, таких как КПК и мобильные телефоны. Эта архитектура была особенно привлекательной из-за своей энергоэффективности, что способствовало продолжительности работы от аккумулятора.
-
Эволюция и расширение применения: С течением времени ARM стала доминирующей архитектурой в мобильной индустрии. Процессоры ARM были адаптированы для использования в различных устройствах, от смартфонов и планшетов до IoT устройств и встраиваемых систем.
-
Развитие в вычислительных системах: В последние годы ARM также начала проникать в область серверных решений с целью предложить более энергоэффективные альтернативы для центров обработки данных (ЦОД). Это направление включает в себя процессоры, такие как ARMv8-A, которые поддерживают 64-битные вычисления и являются конкурентами для x86-64 в сфере серверных вычислений.
ARM vs x86
Исходя из сухих данных, развитие ARM архитектуры может обеспечить ей доминирование на рынке по производительности/энергоэффективности, тем более, что даже Apple Silicon M4 вполне себе способнен конкурировать с некоторыми современными десктопными процессорами.
Но наследие ПО под x86 заставляет нас оставаться на довольно древней и далеко не идеальной x86-64 архитектуре.
#статьи
-
0
Что такое процессор и как он работает
Кремний, такты, два ядра — погружаемся в недра компьютерного мозга.
Иллюстратор: Оля Ежак для Skillbox Media
Филолог и технарь, пишет об IT так, что поймут даже новички. Коммерческий редактор, автор технических статей для vc.ru и «Хабра».
Центральный процессор (ЦП, или CPU — от англ. central processing unit) — главный компонент компьютера, который выполняет все вычисления и управляет другими системами. Часто процессор сравнивают с мозгом — он тоже умеет обрабатывать информацию и принимать решения, а разобраться в его работе очень сложно. Однако в этой статье мы предпримем попытку.
Содержание
- Для чего нужен процессор
- Из чего он состоит
- Основные характеристики
- Как он работает
- Виды процессоров
Основное назначение процессора — это обработка машинного кода, из которого состоят программы. Сами программы — это последовательные команды, которые пользователь даёт компьютеру. Запустить браузер, найти результат выражения во встроенном калькуляторе и скопировать его в текстовый документ — всё это делает процессор компьютера.
Фото: freepik / Freepik
Основные функции центрального процессора:
- Выполнение инструкций. Программы отправляют процессору машинные инструкции в виде двоичного кода, которые он интерпретирует и выполняет на аппаратном уровне.
- Управление памятью. ЦП обращается к оперативной памяти, записывает информацию в постоянную память или берёт данные из собственной кэш-памяти.
- Обработка данных. Вместе с программными инструкциями поступают данные, которые надо обработать и вернуть результат.
- Управление системой. CPU связывает между собой работу жёстких дисков, видеокарты, оперативной памяти и других компонентов.
Рассмотрим, как производят процессоры и какие компоненты в них используются.
CPU — это тонкая кремниевая пластинка с миллиардами напаянных на неё транзисторов. Именно транзисторы выполняют все вычисления. Изготовление процессора — сложный процесс. Если упростить, то этапы работы над ним будут выглядеть так:
- Песок (диоксида кремния, SiO₂) превращают в поликристаллический кремний высокой чистоты.
- Его плавят, чтобы получить кремниевый стержень.
- Стержень нарезают на идеально гладкие пластины толщиной до 1 миллиметра.
- Методом литографии в несколько этапов на пластины наносят миллиарды транзисторов.
- Пластины нарезают на кристаллы, каждый из которых представляет собой самостоятельный чип.
- Кристаллы упаковывают в корпуса с термоинтерфейсом для отвода тепла.
- Полученные процессоры тестируют, маркируют и выпускают в продажу.
Звучит вроде бы несложно, однако за каждым из этих этапов стоит высокотехнологичное производство. Например, чтобы получить чистый кремний, нужно провести не менее трёх этапов химической очистки, в процессе которой материал нагревают до 1900 градусов по Цельсию.
Кадр: Electronic Goldmine / YouTube
Литография — отдельный сложный этап. Сейчас размеры транзисторов измеряются в нанометрах, а это миллиардная доля метра. Если в процессе нанесения транзисторов на пластину попадёт пылинка — могут забраковать всю «кремниевую вафлю». В цехах постоянно фильтруют воздух, рабочим запрещено использовать духи и косметику, ходить можно только в специальных костюмах, а сами заводы стоят на сейсмических подушках, чтобы колебания грунта не влияли на точность литографии.
Теперь мы знаем, из чего и как делают процессоры, а значит, пришло время заглянуть внутрь самого устройства. Если скальпировать ЦП, то есть снять верхнюю крышку термоинтерфейса, то можно увидеть кристалл в ещё одном защитном корпусе.
Фото: Fritzchens Fritz / Flickr
Счищаем защиту и графит с подложки и видим постепенно проступающую топологию блоков процессора.
Фото: Fritzchens Fritz / Flickr
Если же удалить все защитные слои полностью, то можно увидеть вот такую красоту. Это и есть кристалл CPU с нанесёнными на него полупроводниками.
Фото: Fritzchens Fritz / Flickr
А вот как выглядит вытравленный кристалл процессора Intel Core i5-12400F, выпущенный в том же году, что и Baikal-S 2022.
Фотография: Fritzchens Fritz / Flickr
В кристалле процессора можно выделить три основные части: ядро, запоминающее устройство и шины.
Ядро ЦП выполняет основную работу, включая чтение, расшифровку, выполнение и отправку инструкций. Оно состоит из арифметико-логического устройства (АЛУ), устройства управления (УУ) и ещё множества блоков, которые выполняют «внутреннюю магию» вычислений. АЛУ выполняет основные математические и логические операции. УУ управляет работой процессора с помощью электрических сигналов. Все эти устройства представляют собой многочисленные блоки, которые связаны в циклы.
Кадр: TechTechPotato / YouTube
Запоминающее устройство представляет собой небольшую внутреннюю память процессора, состоящую из регистров и кэш-памяти. Регистры хранят текущие команды, данные и промежуточные результаты операций, а кэш-память загружает часто используемые команды и данные из оперативной памяти.
Шины — это каналы, по которым передаётся информация между CPU, оперативной памятью и другими устройствами. Они работают как рельсы для перевозки данных и обеспечивают передачу информации между компонентами компьютера.
Изображение: Поисов Дмитрий / «Всё о Hi-Tech»
Производительность процессора определяется двумя основными параметрами: тактовой частотой и разрядностью.
Тактовая частота — показатель того, сколько операций процессор может выполнить за одну секунду. Измеряется в гигагерцах (ГГц). Например, если тактовая частота составляет 3 ГГц, то он сможет выполнять до 3 миллиардов операций в секунду. Чем выше частота, тем быстрее процессор выполняет задачи. Если перегрузить CPU, то это может вызвать троттлинг — принудительное снижение тактовой частоты, которое нужно, чтобы не перегреть оборудование.
Разрядность — показатель рабочего объёма данных. Например, если у процессора 32-битная разрядность, то он может обработать 32 бита данных за один такт. В современных компьютерах чаще используются 64-битные CPU. Они более быстрые и лучше обрабатывают большие объёмы данных.
Также характеристики процессора определяются такими параметрами:
Кэш-память — это быстрая память, в которой процессор хранит часто используемые данные и инструкции. Она бывает разных уровней: L1, L2 и L3. Чем больше кэш-память, тем быстрее ЦП получает доступ к данным.
Архитектура процессора определяет его внутреннюю структуру и набор команд. Современные CPU используют архитектуру:
- CISC (complex instruction set computer — «компьютер с полным набором команд») — архитектура, которая использует сложные и многофункциональные команды. Процессоры с CISC-архитектурой могут выполнять сложные команды за несколько тактов, поэтому их можно не разделять на более компактные команды.
- RISC (reduced instruction set computer — «компьютер с сокращённым набором команд») — архитектура с минимальным набором простых команд. Размер команд подбирается так, чтобы их можно было выполнять за один такт. Обычно RISC-архитектуру используют в устройствах с низким энергопотреблением.
- VLIW (very long instruction word — «очень длинная машинная команда») — архитектура, в которой за один такт выполняется несколько операций, объединённых в длинную команду.
- MISC (minimal instruction set computer — «компьютер с минимальным набором команд») — архитектура с минимально возможным набором простых команд. Такие CPU часто используют в IoT-устройствах.
Все эти архитектуры относятся к неймановскому типу — программа и данные хранятся в оперативной памяти, и ЦП загружает их поочерёдно. Существует также гарвардская архитектура, у которой программный код и данные хранятся в разных типах памяти. Её чаще всего используют во встраиваемых системах: бытовой технике, системах сигнализации и медицинских приборах.
Энергопотребление — количество электроэнергии, которое процессор использует для своей работы. Оно измеряется в ваттах (Вт). Энергопотребление может увеличиваться под нагрузками.
Тепловыделение — это количество тепла, которое выделяется при работе процессора. Оно зависит от энергопотребления и других характеристик ЦП. Важно учитывать тепловыделение при выборе системы охлаждения и корпуса компьютера.
Если не закапываться в инженерные глубины процессов, то цикл работы CPU выглядит так:
Шаг 1. Блок выборки инструкций проверяет наличие прерываний. Это нужно для того, чтобы понять, требуется ли остановка выполнения текущей задачи, например, если поступили данные от клавиатуры или сетевой карты. Если прерывание есть, то данные регистров и счётчика команд заносятся в стек, а в счётчик команд заносится адрес команды обработчика прерываний. По окончании работы функции обработки прерываний, данные из стека будут восстановлены.
Шаг 2. Далее процессору надо определиться, какую команду выполнять следующей. Для этого блок выборки инструкций из счётчика команд считывает адрес команды, предназначенной для выполнения. По этому адресу из кэша или ОЗУ считывается команда. Полученные данные передаются в блок декодирования.
Шаг 3. Теперь ЦП знает, какую команду надо выполнять следующей, но её сперва надо декодировать. Для этого блок декодирования команд расшифровывает команду. Если это команда перехода, то в счётчик команд записывается адрес перехода и управление передаётся в блок выборки инструкций (пункт 1), иначе показание счётчика команд увеличивается на размер команды (для процессора с длиной команды 32 бита — на 4) и передаёт управление в блок выборки данных.
Шаг 4. Для выполнения команды нужны данные, поэтому блок выборки данных считывает их из кэша или ОЗУ и передаёт управление планировщику.
Шаг 5. Управляющий блок определяет, какому блоку выполнения инструкций обработать текущую задачу, и передаёт управление этому блоку.
Шаг 6. Блоки выполнения инструкций выполняют команду и передают управление блоку сохранения результатов.
Шаг 7. Блок сохранения результатов заносит их в оперативную память и передаёт управление блоку выборки инструкций (пункт 1).
Описанный выше цикл называется процессом. Он повторяется по кругу, а скорость перехода от одного цикла к другому определяется тактовой частотой.
Инфографика: Майя Мальгина для Skillbox Media
Рассмотрим распространённые виды процессоров, которые чаще всего используют в гаджетах.
Универсальные процессоры — это наиболее распространённый вид, предназначенный для выполнения различных вычислительных задач и управления операциями памяти и периферийных устройств. Они используются в большинстве компьютеров и рабочих станций.
Серверные процессоры — ЦП с большим количеством ядер и потоков, что обеспечивает высокую производительность при обработке ресурсоёмких задач и больших баз данных. Используются в серверном оборудовании.
Мобильные процессоры — энергоэффективные процессоры для смартфонов, планшетов и других мобильных устройств. Они отличаются компактными размерами и низким энергопотреблением.
Встраиваемые процессоры — ЦП встроены непосредственно в приборы, такие как телевизоры, бытовая техника и автомобили. Они предназначены для выполнения узкопрофильных задач.
По типу выполняемых задач процессоры делятся на:
- Графические процессоры (GPU) — ориентированы на работу со сложной графикой, 3D-визуализацией и поддержкой значительного количества потоков, что делает их идеальным решением для игр и графических приложений.
- Центральные процессоры (CPU) — предназначены для выполнения всех основных вычислительных операций, контроля и координации работы других устройств и систем компьютера, а также обработки данных из памяти и отправки их обратно или на устройство вывода.
По типу крепления на материнской плате процессоры бывают:
- Распаянные — их невозможно снять с платы без паяльника. Если надо будет заменить такой процессор, то придётся повозиться.
- Разъёмные — устанавливаются в специальный разъём — сокет. Такие процессоры можно быстро заменять без специального оборудования.
Кадр: Максим Горшенин / YouTube
- Процессор — главный компонент компьютера и других гаджетов, который отвечает за все основные вычисления и связывает другие системы между собой.
- Тактовая частота ЦП показывает, сколько операций он может выполнить за одну секунду.
- В современных компьютерах обычно используются 64-битные процессоры. Это значит, что за один такт они могут обработать 64 бита данных.
- CPU изготавливают из кремниевых пластин, на которые с помощью литографии крепят транзисторы. Это очень сложное и дорогое производство.
- По типу выполнения задач процессоры делятся на графические и центральные. Первые отвечают за обработку графики, а вторые — выполняют все основные вычислительные операции.
Как быстро заработать в IT в 2025 году
Попробуйте себя в разных направлениях IT и сделайте первый шаг к новой профессии на удалёнке!
Учиться бесплатно →
Центральный процессор часто называют «мозгом» компьютера, ведь он, как и человеческий мозг, состоит из нескольких частей, собранных воедино для работы над информацией. Среди них есть те, что отвечают за прием информации, ее хранение, обработку и вывод. В этой статье портал TechSpot разбирает все ключевые элементы процессора, за счет которых и работают ваши компьютеры.
Этот текст входит в серию статей, в которых тщательно разбирается работа ключевых компонентов компьютера. Кроме того, если вы заинтересовались темой, рекомендуем ознакомиться с переводами статей серии «Как разрабатываются и создаются процессоры?».
В этой статье будут затронуты как основы работы процессоров, так и более сложные понятия. К сожалению, без некоторой абстрактности не обойтись, но на это есть свои причины. К примеру, если взглянуть на блок питания, можно легко рассмотреть все его части — от конденсаторов до транзисторов, однако в случае с процессорами все не так просто, ведь мы физически не можем разглядеть все микросхемы, а Intel и AMD не спешат делиться подробностями работы своей продукции с широкой публикой. Тем не менее, информация, представленная в статье, применима к подавляющему большинству современных процессоров.
Итак, приступим. Любому вычислительному устройству нужно нечто наподобие центрального процессора. По сути, программист пишет код для выполнения собственных целей, а затем процессор выполняет его для получения необходимого результата. Процессор также подключен к другим частям системы, вроде памяти и устройств ввода/вывода, чтобы обеспечить загрузку необходимых данных, но в этой статье мы не будем акцентировать на них внимание.
Фундамент любого процессора: архитектура набора команд
Первое, на что натыкаешься при разборе любого процессора — это на архитектуру набора команд (ISA). Архитектура является чем-то вроде фундамента работы процессора и именно от нее зависит то, как он работает и как все внутренние системы взаимодействуют друг с другом. Существует огромное количество архитектур, но самыми распространенными являются x86 (преимущественно в стационарных компьютерах и ноутбуках) и ARM (в мобильных устройствах и встроенных системах).
Чуть менее распространенными и более нишевыми являются MIPS, RISC-V и PowerPC. Архитектура набора отвечает за ряд основных вещей: какие инструкции процессор может обрабатывать, как он взаимодействует с памятью и кэшем, как задача распределяется по нескольким этапам обработки и др.
Чтобы лучше понять устройство процессора, разберем его элементы в том порядке, по которому выполняются команды. Различные типы инструкций могут следовать разными путями и использовать разные компоненты ЦП, поэтому здесь они будут обобщены, чтобы охватить максимум. Начнем с базового дизайна одноядерных процессоров и постепенно будем переходить к более продвинутым и сложным экземплярам.
Блок управления и исполнительный тракт
Элементы процессора можно разделить на два основных: блок управления (он же — управляющий автомат) и исполнительный тракт (он же — операционный автомат). Говоря простым языком, процессор — это поезд, в котором машинист (управляющий автомат) управляет различными элементами двигателя (операционного автомата).
Исполнительный тракт подобен двигателю и, как следует из названия, это путь, по которому данные передаются при их обработке. Он получает входные данные, обрабатывает их и отправляет в нужное место после завершения операции. Блок управления, в свою очередь, направляет этот поток данных. В зависимости от инструкции, исполнительный тракт будет направлять сигналы к различным компонентам процессора, включать и выключать различные части пути, а также отслеживать состояние всего процессора.
Блок-схема работы базового процессора. Черными линиями отображен поток данных, а красными — поток команд.
Цикл выполнения команд — Выборка
Первое, что должен сделать процессор — определить, какие команды необходимо выполнить следующими, а затем переместить их из памяти в блок управления. Команды создаются компилятором и зависят от архитектуры набора (ISA). Наиболее распространенные типы базовых инструкций (например, «загрузка», «хранение», «сложение», «вычитание» и др.) общие для всех ISA, но существует множество дополнительных, специальных типов команд, уникальных для конкретной архитектуры набора. Блок управления знает, какие сигналы и куда нужно направить для выполнения определенного типа команды.
К примеру, при запуске .exe файла в Windows, код этой программы отправляется в память и процессор получает адрес, с которого начинается первая команда. Процессор всегда поддерживает внутренний реестр, отслеживающий откуда должна будет выполняться следующая команда. Этот реестр называется счетчиком команд.
После того, как процессор определил точку, с которой нужно начинать цикл, происходит перемещение команды из памяти в вышеупомянутый реестр — этот процесс называется выборкой команды. По-хорошему, команда, скорее всего, уже находится в кэше процессора, но этот вопрос будет рассмотрен чуть позже.
Цикл выполнения команд — Декодирование
Когда процессор получает команду, ему нужно точно определить тип этой команды. Данный процесс называется декодированием. Каждая команда обладает особым набором битов, опкодом, который дает возможность процессору распознать ее тип. Примерно по тому же принципу работает распознавание компьютером различных расширений файлов. К примеру, .jpg и .png — форматы изображений, но каждый из них обрабатывает данные по-разному, поэтому компьютеру и нужно точно распознавать их тип.
Стоит отметить, что сложность декодирования может зависеть от того, насколько продвинутой является архитектура набора команд процессора. У архитектуры RISC-V, к примеру, несколько десятков команд, а у x86 — несколько тысяч. У типичного процессора Intel x86 процесс декодирования является одним из сложнейших и занимает огромное количество памяти. Чаще всего процессоры декодируют команды, связанные с памятью, арифметическими вычислениями и переходом.
3 основных типа команд
Команда памяти может представлять собой нечто вроде «прочтите значение из адреса памяти 1234 вместо значения А» или «запишите значение Б в адрес памяти 5678». Арифметические команды имеют вид в духе «добавьте значение А к значению Б и сохраните результат в значении В». Инструкции перехода, в свою очередь, похожи на «выполните этот код, если значение В положительное, или выполните другой код, если значение В отрицательное». Зачастую в программах используется цепочка сразу из нескольких вышеупомянутых примеров, из-за чего конечный результат выглядит примерно так: «добавьте значение адреса памяти 1234 к значению адреса памяти 5678 и сохраните его в адресе памяти 4321, если результат положительный, либо в адрес 8765, если результат отрицательный».
Перед тем, как перейти к выполнению декодированной команды, давайте уделим немного внимания регистрам.
Регистрами называются немногочисленные, но крайне быстрые фрагменты памяти процессора. У 64-битных процессоров каждый из них вмещает 64 бита, а всего их может быть несколько десятков на одно ядро. Регистры используются для хранения используемых в данный момент значений и их можно считать чем-то вроде кэша нулевого уровня. В приведенных выше примерах команд значения А, Б и В будут сохранены именно в регистре.
Арифметико-логическое устройство
Вернемся к этапу выполнения команд. Сразу отметим, что он отличается для всех трех вышеупомянутых типов команд, поэтому давайте рассмотрим каждый их них.
Самыми простыми для понимания являются арифметические команды. Эти команды отправляются в арифметическо-логическое устройство (ALU) для последующей обработки. Устройство представляет собой цепь, которая чаще всего работает с двумя значениями, отмеченными сигналом, и выдает результат.
Представьте себе обычный калькулятор. Для любого вычисления вы вводите значения, выбираете необходимую арифметическую операцию и получаете результат. Арифметическо-логическое устройство (ALU) работает по похожему принципу. Тип операции зависит от опкода команды, который управляющий автомат отправляет в ALU и которое в дополнение к базовой арифметике может производить со значениями такие битовые операции, как AND, OR, NOT и XOR. Кроме того, арифметическо-логическое устройство выводит информацию о проведенном вычислении для управляющего автомата (например, оказалось ли оно положительным, отрицательным, равным нулю или вызвало переполнение).
Несмотря на то, что арифметическо-логическое устройство чаще всего связано именно с арифметическими операциями, оно находит свое применение и в инструкциях памяти или перехода. Например, если процессору нужно вычислить адрес памяти, заданный в результате прошлого вычисления, либо в случае необходимости вычислить переход для добавления в счетчик программ, если инструкция того требует (пример: «если предыдущий результат отрицателен, перейти на 20 команд вперед»).
Команды и иерархия памяти
Чтобы лучше понять принцип работы команд, связанных с памятью, стоит обратить внимание на концепцию иерархии памяти — связь между кэшем, оперативной памятью и главным запоминающим устройством. Когда процессор работает с командой памяти, данных о которой у него еще нет в регистре, он будет продвигаться по иерархии памяти, пока не найдет нужную информацию. Большинство современных процессоров имеют три уровня кэша: первый, второй и третий. Сначала процессор проверит наличие необходимых команд в кэше первого уровня — самом маленьком и быстром из всех. Зачастую этот кэш разделен на две части: первая отведена под данные, а вторая — под команды. Помните, команды извлекаются процессором из памяти так же, как и любые другие данные.
Типичный кэш первого уровня может состоять из нескольких сотен килобайт. Если процессор не найдет в нем то, что нужно, то перейдет к проверке кэша второго уровня (размером в несколько мегабайт), а затем — третьего (уже занимающего десятки мегабайт). В случае, если необходимых данных не будет и в кэше третьего уровня, то поиск будет производиться в оперативной памяти, а затем в накопителях. С каждым подобным «шагом», увеличивается не только объем доступных данных, но и задержка.
После того, как процессор нашел необходимые данные, он отправляет их вверх по иерархии памяти для сокращения время поиска, на случай, если они понадобятся в дальнейшем. Для справки: процессор может считывать данные во внутреннем регистре всего за один-два цикла, в кэше первого уровня понадобится немногим больше, в кэше второго уровня уже около десяти, а третьего — несколько десятков циклов. Если приходится задействовать память или накопители, то процессору может понадобятся десятки тысяч, а то и миллионы циклов. В зависимости от системы, у каждого ядра процессора может быть собственный кэш первого уровня, общий с другим ядром кэш второго уровня и кэш третьего уровня у группы из четырех или более ядер. Более подробно речь о многоядерных процессорах пойдет позже.
Команды перехода и ветвления
Последняя из трех основных типов команд — это команда ветвления. Команды современных программ постоянно переходят с одного потока процессов на другой, а это значит, что процессор крайне редко выполняет более дюжины смежных команд без перехода. Команды ветвления происходят от элементов программирования, таких как код IF, FOR и RETURN. Все они используются для прерывания выполнения программы или переключения на другую часть кода. Кроме команд ветвления существуют и команды перехода, которые отличаются от первых тем, что они всегда участвуют в процессе выполнения программы.
Кроме обычных команд перехода, существуют и условные переходы, с которыми процессору работать особенно сложно, поскольку он может выполнять несколько инструкций одновременно и конечный результат всей ветки может быть нельзя определить пока не начата работа над выполнением связанных команд.
Чтобы понять, почему процессору трудно работать с условными переходами, стоит обратить внимание на такое понятие, как вычислительный конвейер. Каждый шаг в выполнении какой-либо команды может занимать несколько циклов, а это значит, что арифметико-логическое устройство могло бы простаивать без дела пока происходит выборка команды. Чтобы максимизировать эффективность вычислительной мощности процессора, каждая стадия разделяется на несколько частей — в процессе, который называется вычислительным конвейером (конвейерной обработкой).
Самой простой аналогией будет процесс стирки. Предположим, что у вас достаточно вещей на две полные загрузки стиральной машины, а стирка и сушка каждой партии занимает по часу. Вы вполне можете загрузить в стиральную машину первую партию вещей, а потом переместить на сушилку, а когда они высохнут — заняться второй партией. Это займет четыре часа. Однако, если вы разделите процесс на этапы и начнете стирку второй партии вещей, пока сушится первая, вы сможете выполнить всю работу за три часа. Сокращение времени зависит от количества загружаемых вещей и количества стиральных/сушильных машин. Для выполнения отдельной загрузки в любом случае понадобится два часа, но в приведенном примере накладывание процессов увеличивает общую пропускную способность с 0,5 загрузки/час до 0,75 загрузки в час.
Графическое представление конвейера, используемого в ядрах процессоров AMD Bobcat (2011). Обратите внимание, как много в нем различных элементов и стадий.
Процессоры используют тот же принцип для повышения пропускной способности команд. Конвейеры современных процессоров на архитектуре ARM или x86 могут использовать свыше 20 стадий вычислительного конвейера, а это значит, что ядро процессора одновременно обрабатывает свыше 20 различных команд. Процессоры могут отличаться по разделению этих стадий под различные нужды, но в одном из примеров, принцип работы которого находится в открытом доступе, имеется 4 цикла для выборки, 6 циклов для декодирования, 3 цикла для выполнения команд и 7 циклов для отправки результатов в память.
Возвращаясь к теме, теперь вы можете понять в чем проблема. Если процессор не определил тип команды до десятого цикла, то он начнет работу уже над 9 новыми командами, которые могут оказаться ненужными, если ветка команд уже не работает. Чтобы этого не происходило, процессоры оборудованы сложным механизмом, который называется модулем предсказателем переходов. По принципу работы этот механизм схож с машинным обучением. Детальное описание работы модуля предсказателя переходов — это тема для отдельной статьи, поэтому придется обойтись довольно простым объяснением: данный механизм отслеживает статус предыдущих переходов, чтобы определить, будет ли задействован следующий переход или нет. Современные предсказатели переходов могут обеспечить точность в 95% и выше.
После того, как точно станет известен результат перехода (т.е. завершился конкретный этап на конвейере), счетчик команд обновится и процессор приступит к выполнению следующей операции. Если же результат не совпал с тем, который предугадал предсказатель команд, процессор сбросит все команды, которые начал выполнять по ошибке, и запустит работу с правильной точки.
Внеочередное исполнение
Теперь, когда вы знаете принцип работы трех наиболее распространенных типов команд, давайте уделим внимание более продвинутыми функциям процессоров. Практически все современные модели ЦП фактически исполняют команды не в порядке их получения. Существует такая функция, как внеочередное исполнение, призванная сократить время простоя процессора во время ожидания завершения остальных команд.
Если процессор понимает, что следующей команде необходимы данные, для поиска которых понадобится больше времени, он может изменить порядок команд, начав работу над не связанной командой, пока происходит поиск. Внеочередное исполнение команд — необычайно полезная, но далеко не единственная вспомогательная функция процессора.
Еще одной крайне полезной особенностью процессора является предвыборка. Если засечь время, необходимое для выполнения случайной инструкции от начала и до конца, то можно обнаружить, что большую часть времени занимает доступ к памяти. Блок предварительной выборки — элемент в ЦП, который рассматривает команды, находящиеся в очереди, и определяет, какие данные им потребуются. Если он замечает, что для операции нужны данные, которые еще не находятся в кэше процессора, то он извлечет их из оперативной памяти и в кэш. Отсюда и его название.
Ускорители и будущее процессоров
Еще одна важная функция, которая все чаще появляется в процессорах — ускорители для конкретных задач. Эти ускорители представляют собой небольшие схемы, главная цель которых — как можно быстрее выполнить определенную задачу. Этой задачей может быть шифрование, кодирование данных или машинное обучение.
Конечно, процессор может делать все это самостоятельно, но созданный конкретно для этой цели блок будет намного более эффективен. Наглядным показателем мощностей ускорителей будет сравнение встроенного графического процессора с дискретной видеокартой. Разумеется, процессор может выполнять вычисления, необходимые для обработки графики, но наличие отдельного блока обеспечивает намного более высокую производительность. С ростом числа ускорителей фактическое ядро центрального процессора может занимать всего лишь небольшую часть чипа.
На первом рисунке снизу изображено устройство процессора Intel, выпущенного более десяти лет назад, где большая часть занята ядрами и кешем, а на втором показан гораздо более современный чип от AMD. Как мы видим, во втором случае большая часть кристалла отведена не под ядра, а под другие компоненты.
Кристалл процессора Intel первого поколения архитектуры Nehalem. Обратите внимание: ядра и кэш занимают подавляющее часть площади.
Кристалл системы на чипе от AMD. Много места отведено под ускорители и внешние интерфейсы.
Многоядерность
Последняя особенность процессоров, которая будет рассмотрена в этой статье — то, как можно объединить несколько отдельных процессоров для получения многоядерного. Это не просто объединение нескольких копий одного ядра, ведь как нельзя просто превратить однопоточную программу в многопоточную, так нельзя и провернуть подобное с процессором. Проблема возникает из-за зависимости ядер.
В случае с четырьмя ядрами процессору необходимо отправлять команды в 4 раза быстрее. Также нужно четыре раздельных интерфейса для памяти. Именно из-за наличия нескольких ядер на одном чипе, потенциально работающих с одними и теми же частями данных, возникает проблема слаженности и согласованности их работы. Предположим, если два ядра обрабатывали команду, использующую одни и те же данные, то как процессор определяет, у которого из них правильное значение? А что, если одно ядро модифицировало данные, но они не успели вовремя дойти до второго ядра? Поскольку у них есть отдельные кэши, в которых могут храниться пересекающиеся данные, для устранения возможных конфликтов необходимо использовать сложные алгоритмы и контроллеры.
Чрезвычайно важную роль в многоядерных процессорах играет и точность прогнозирования переходов. Чем больше в процессоре ядер, тем выше вероятность того, что одной из исполняемых команд будет именно команда перехода, способная в любое время изменить общий поток задач.
Как правило, отдельные ядра обрабатывают команды из разных потоков, тем самым снижая зависимость между ядрами. Поэтому, открыв диспетчер задач, вы чаще всего видите, что загружено лишь одно ядро процессора, а другие едва работают — многие программы попросту изначально не предназначены для многопоточности. Кроме того, могут быть определенные случаи, в которых эффективнее использовать только одно ядро процессора, а не тратить ресурсы на попытки разделить команды.
Физическая оболочка процессора
Несмотря на то, что большая часть этой статьи была посвящена сложным механизмам работы архитектуры процессора, не стоит забывать и о том, что все это должно быть создано и работать в виде реального, физического объекта.
Для того, чтобы синхронизировать работу всех компонентов процессора, используется тактовый сигнал. Современные процессоры обычно работают на частотах от 3.0 ГГц до 5.0 ГГц, и за последнее десятилетие ситуация особо не изменилась. При каждом цикле внутри чипа включаются и выключаются миллиарды транзисторов.
Такты важны для того, чтобы обеспечить идеальную работу каждой стадии вычислительного конвейера. Количество команд, обрабатываемых процессором за каждую секунду, зависит именно от них. Частоту можно увеличить путем разгона, сделав чип быстрее, но это в свою очередь повысит энергопотребление и тепловыделение.
Фото: Michael Dziedzic
Тепловыделение — главный враг процессоров. Когда цифровая электроника нагревается, может начаться разрушение микроскопических транзисторов. Это в свою очередь может привести к повреждению чипа, если тепло не отвести. Чтобы этого не произошло, каждый процессор оборудован термораспределителями. Сам кристалл может занимать всего 20% площади процессора, ведь увеличение площади позволяет более равномерно распределять тепло по радиатору. Кроме того, дополнительно увеличивается количество имеющихся ножек процессора (контактов), предназначенных для взаимодействия с другими компонентами компьютера.
На современных процессорах может располагаться свыше тысячи входных и выходных контактов на задней панели. Мобильный чип может быть оснащен всего несколькими сотнями, поскольку большинство вычислительных элементов расположены уже внутри чипа. Независимо от дизайна, около половины из них предназначены для распределения питания, а остальные — для передачи данных с оперативной памяти, чипсета, накопителей, устройств PCIe и др. Высокопроизводительным процессорам, потребляющим сто и более ампер при полной нагрузке, нужны сотни ножек для равномерного распределения тока. Обычно они покрываются золотом для улучшения проводимости. Стоит отметить, что разные производители располагают ножки по-разному во всей своей многочисленной продукции.
Подытожим на примере
Чтобы подвести итоги, кратко рассмотрим архитектуру процессора Intel Core 2. Это было еще в 2006 году, поэтому некоторые детали могут быть устаревшими, но информации о новых разработках отсутствуют в публичном доступе.
На самом верху располагается кэш команд и буфер ассоциативной трансляции. Буфер помогает процессору определить, где в памяти располагаются необходимые команды. Эти инструкции хранятся в кэше команд первого уровня, а после этого отправляются в предекодер, так как из-за сложностей архитектуры x86 декодирование происходит во множество этапов. Сразу же за ними идет предсказатель переходов и предвыборщик кода, которые снижают вероятность возникновения потенциальных проблем со следующими командами.
Далее команды отправляются в очередь команд. Вспомните, как внеочередное исполнение позволяет процессору выбрать именно ту команду, которую практичнее всего выполнить в конкретный момент из очереди текущих инструкций. После того, как процессор определил нужную команду, та декодируется во множество микроопераций. В то время как команда может содержать сложную для ЦП задачу, микрооперации представляют собой детализированные задачи, которые процессору легче интерпретировать.
Затем эти инструкции попадают в таблицу псевдонимов регистров, переупорядочивающий буфер и станцию резервации. Подробно расписать их принцип работы в одном абзаце, увы, не получится, так как это — информация, которую обычно подают на последних курсах технических вузов. Если в двух словах, то все они используются в процессе внеочередного исполнения для управления зависимостями между командами.
На самом деле, у каждого ядра процессора множество арифметическо-логических устройств и портов памяти. Команды отправляются в станцию резервации, пока не освободится устройство или порт. Затем команда обрабатывается с помощью кэша данных первого уровня, а полученный результат сохраняется для дальнейшего использования, после чего процессор может приступать к следующей задаче. На этом все!
Пусть эта статья и не предназначалась для того, чтобы служить исчерпывающим руководством по тому, как работает каждый из процессоров, она должна дать вам базовое представление об их внутренней работе и сложности. К сожалению, о том, как действительно работают современные процессоры, знают лишь работники Intel и AMD, поэтому информация, описанная в этой статье — лишь вершина айсберга, ведь каждый пункт, описанный в тексте — это результат огромного количества исследований и разработок.
Другие материалы по теме
Если вам хочется узнать больше о том, как создаются различные компоненты, описанные в этом тексте, то настоятельно советуем обратить внимание на вторую часть серии статей «Как разрабатываются и создаются процессоры?». Если же вы больше заинтересованы в том, как производятся физические оболочки процессоров, то вам стоит ознакомиться с третьей статьей той же серии.
По материал: techspot.com
Центральное устройство, или ЦП, является основой большинства вычислительных систем, от персональных компьютеров до мощных серверов. Это сердце любой системы, от которого зависит производительность и возможности работы различных приложений. С его помощью осуществляется обработка и управление данными, что открывает безграничные возможности для выполнения сложнейших задач.
Сложная архитектура центрального устройства включает в себя ряд ключевых компонентов, каждый из которых играет жизненно важную роль в общем процессе обработки информации. Современные технологии, заложенные в фундамент этой архитектуры, позволяют повысить вычислительную мощность и эффективность, делая ЦП неотъемлемой частью цифровой эпохи.
Важнейшая задача центральных устройств заключается в том, чтобы быстро и точно выполнять команды, поступающие от программного обеспечения. Они оптимизируют работу всех системных процессов, координируя их действия и распределяя ресурсы для достижения наилучших результатов. Виртуальный мир, которому мы привыкли доверять и полагаться, функционирует благодаря удивительной мощности центральных процессоров, воплощая инновации и поддерживая постоянное развитие технологий.
Процессор: сердце компьютера
Центральное место ЦП в структуре устройства позволяет ему принимать и обрабатывать команды, управляя вычислениями от простых до самых сложных. Он работает неустанно, задействуя все свои ресурсы, чтобы поддерживать оптимальную производительность пользователя на каждом этапе. Способность обрабатывать огромные объемы информации на высоких скоростях делает его не просто частью компьютера, а его настоящим сердцем.
Центральный модуль играет критическую роль в поддержании жизнедеятельности устройства, руководя его внутренними процессами. Каждый компонент системы взаимодействует с ним, создавая слаженную работу всей техники. Именно благодаря своему стратегически важному положению, малейшая модернизация ЦП способна значительно усилить мощь и производительность всей системы, придавая новое дыхание вашему ПК.
Непрерывное развитие технологий приводит к тому, что новые поколения центральных процессоров становятся еще более мощными и интеллектуальными. Подобно человеческому сердцу, ЦП всегда стремится к достижению высокой надежности и долговечности, гарантируя бесперебойную работу всего устройства даже в условиях растущих требований современного мира. Точность, скорость и стабильность – основные характеристики современного центрального процессора, которые делают его незаменимым элементом любой цифровой техники.
Внутреннее устройство микропроцессора
- Арифметико-логическое устройство (АЛУ): Это ядро CPU, где выполняются математические и логические операции. АЛУ отвечает за такие действия, как сложение, вычитание, умножение, деление и сравнение данных.
- Устройство управления: Этот компонент координирует выполнение инструкций в процессоре. Оно интерпретирует команды и распределяет ресурсы для их выполнения, обеспечивая синхронизацию работы различных частей микропроцессора.
- Регистровый блок: Набор высокоскоростных запоминающих устройств, которые используются для временного хранения данных и инструкций. Регистры обеспечивают быструю передачу информации внутри центрального устройства.
- Кэш-память: Быстрая память, которая служит буфером между основной памятью и ЦП. Она хранит часто запрашиваемые данные и инструкции, уменьшает задержки при доступе к основной памяти и увеличивает общую производительность.
- Шина данных: Линии связи, которые обеспечивают передачу данных между различными компонентами в микропроцессоре, а также между CPU и другими частями компьютера. Включает адресную, управляющую и собственно шину данных.
Эти ключевые части взаимосвязаны и работают в унисон, чтобы обеспечить точное выполнение программ и оптимальное функционирование всей вычислительной системы. Различные архитектуры микропроцессоров могут иметь особенности, но основные компоненты и задачи остаются схожими.
Регистры и их роль в процессоре
Одной из главных задач регистров является хранение операндов и промежуточных результатов вычислений. Они резко сокращают время доступа к данным по сравнению с обращением к оперативной памяти. Быстродействие регистров максимально, так как они расположены непосредственно в микропроцессоре, что уменьшает задержки при выполнении операций.
Существует несколько типов регистров, каждый из которых выполняет свои специфические функции. Рассмотрим основные из них:
| Тип регистра | Описание |
|---|---|
| Акумуляторные регистры | Используются для выполнения арифметических и логических операций. Они часто взаимодействуют с арифметико-логическим устройством. |
| Регистры общего назначения | Хранят данные и адреса, используются программами для временного сохранения чисел и других значений во время вычислений. |
| Регистры адреса | Содержат адреса ячеек памяти, что требуется для считывания данных или инструкций из памяти ЦП. |
| Регистры команд | Постоянно содержат адрес текущей команды, которую выполняет центральный процессор, и увеличивают скорости выполнения инструкций. |
Кроме того, в центральных устройствах, таких как ЦП, имеются специальные регистры для контроля статуса команд, таких как флаговые регистры. Эти регистры обеспечивают контроль над состоянием системы, сообщая о результатах операций, например, если произошло переполнение или деление на ноль.
Таким образом, регистры играют решающую роль в организации и оптимизации работы ЦП, увеличивая общую производительность и быстродействие устройства, что делает их незаменимыми для согласованного функционирования всех компонентов компьютера.
Архитектура: отличие RISC от CISC
В наши дни технологий архитектура центральных вычислительных устройств играет важную роль в производительности и эффективности работы компьютеров. Два главных подхода в проектировании CPU, которые сформировали путь развития микропроцессоров, это архитектуры RISC (Reduced Instruction Set Computer) и CISC (Complex Instruction Set Computer). Каждая из них обладает уникальными особенностями и предлагает свои методы обработки данных, что напрямую влияет на производительность и энергопотребление устройства.
Архитектура RISC фокусируется на простоте и эффективности выполнения инструкций. Процессоры, использующие этот подход, стремятся уменьшить количество команд, исполняемых за один такт, что позволяет увеличить скорость их выполнения. Компактные инструкции RISC требуют меньшего количества трансформаторных операций, что в свою очередь упрощает выполнение параллельных вычислений. Благодаря этому RISC-процессоры обычно легче проектировать и производить, они обеспечивают высокую производительность при выполнении повторяющихся и равномерно загруженных задач.
С другой стороны, CISC-архитектура ориентирована на сложные и разнообразные операции. Она стремится оптимизировать обработку многофункциональных команд и упрощает разработку программного обеспечения за счет большего набора инструкций. Это позволяет CPU более эффективно работать с разнообразными задачами, уменьшая количество обращений к памяти и сводя к минимуму объем кода. Однако такая сложность может увеличить время и ресурсы, необходимые для выпуска одной команды, что делает CISC-устройства более энергозатратными.
Оба подхода находят применение в различных сферах использования. В то время как RISC-архитектура активно используется в встраиваемых системах и мобильных устройствах благодаря своей энергоэффективности, CISC-принципы широко применяются в настольных компьютерах и серверах благодаря своей гибкости и богатому функционалу. Выбор между RISC и CISC зависит от конкретных требований к производительности, энергопотреблению и сложности поддерживаемого программного обеспечения. Понимание этих различий помогает IT-инженерам и дизайнерам устройств более точно определять подходящие решения для своих проектов.
Процессор и технологии многопоточности
В мире современных вычислений центральное устройство, иначе говоря, ЦП, столкнулось с вызовом повышения производительности и эффективности. Многопоточность стала технологией, которая позволяет устройствам обрабатывать сразу несколько задач, обеспечивая тысячекратное ускорение вычислительных процессов.
Технология многопоточности позволяет компьютеру работать с несколькими потоками данных одновременно. Это подразумевает, что центральный компонент сможет выполнять большое число операций за меньшее время. Основным достижением такой технологии является параллельная обработка данных, которая улучшает отзывчивость систем и снижает время ожидания в задачах, требующих значительных вычислительных ресурсов.
Один из ключевых подходов в многопоточности — симметричная многопоточность (SMT). Здесь аппаратное обеспечение ЦП позволяет одновременному выполнению множества потоков в пределах одного вычислительного ядра. Это оптимизирует использование ресурсной структуры, улучшая throughput — пропускную способность вычислительного процесса без увеличения числа ядер.
Внедрение многопоточности сильно повлияло на разработку программного обеспечения. Разработчики адаптируют приложения для более эффективного использования параллельных вычислений, что делает программы более быстрыми и эффективными. На фоне появления многопоточности возникает вопрос об эффективности использования физических и логических ядер, что ставит задачи перед дизайнерами как аппаратной, так и программной составляющей.
Современные цп продолжают эволюционировать вместе с технологиями параллельных вычислений, предоставляя пользователям значительное увеличение производительности. Оптимизация архитектуры с учётом многопоточности позволяет раскрыть мощь вычислительных систем, обеспечивая быстрое выполнение разнообразных программ и приложений.
Энергопотребление и тепловыделение CPU
Энергопотребление central processing unit связано с его архитектурой, тактовой частотой и технологическим процессом производства. Более производительные CPU потребляют больше энергии, поскольку они выполняют больше операций за единицу времени. Производители стремятся уменьшить это потребление путем внедрения передовых архитектурных решений и оптимизации напряжения питания. Важную роль играет и выбор подходящих материалов и процессорных технологий.
Тепловыделение является неизбежным следствием работы CPU, поскольку выполнение вычислительных операций связано с высвобождением энергии в форме тепла. Чрезмерное тепловыделение может привести к перегреву и снижению эксплуатационной надежности центрального процессора. Для борьбы с этим применяются разнообразные системы охлаждения, такие как воздушные и жидкостные кулеры, а также тепловые трубки и радиаторы. Эти решения помогают поддерживать оптимальные температурные условия для функционирования, увеличивая срок службы и надёжность CPU.
Перспективные направления развития технологий энергосбережения и уменьшения тепловыделения включают улучшение эффективности литографических процессов и разработку гибридных архитектур, использующих преимущества как централизованных, так и децентрализованных систем. Инновационные технологии управления энергопотреблением, такие как динамическая настройка частоты и напряжения (DVFS), позволяют снижать энергозатраты в периоды малой вычислительной нагрузки.
Таким образом, эффективное управление энергопотреблением и тепловыделением центрального процессора является важной задачей, требующей постоянного внимания и инноваций со стороны разработчиков. Это не только обеспечивает стабильность и производительность современных вычислительных систем, но и способствует повышению их экологической и экономической эффективности.
Комментарии
