Компоненты процессора

Предисловие

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

  1. Оперативная память (RAM) - процессор использует оперативную память для хранения и доступа к данным, которые он обрабатывает.
  1. Жесткий диск (Hard drive) - процессор использует жесткий диск для хранения и доступа к файлам и программам.
  1. Клавиатура и мышь - процессор обрабатывает ввод с клавиатуры и мыши и использует эту информацию для управления компьютером.
  1. Видеокарта (Graphics card) - процессор использует видеокарту для вывода графики на экран.
  1. Звуковая карта (Sound card) - процессор использует звуковую карту для вывода звука.
  1. Сетевая карта (Network card) - процессор использует сетевую карту для обмена данными с другими компьютерами по сети.
  1. USB-устройства - процессор обрабатывает ввод и вывод с USB-устройств, таких как флешки, внешние жесткие диски или принтеры.
  1. BIOS - процессор взаимодействует с BIOS для загрузки операционной системы и управления аппаратными компонентами компьютера.
  1. Чипсет материнской платы - процессор взаимодействует с чипсетом материнской платы, который управляет работой других компонентов, таких как контроллеры USB, SATA или PCI.
  1. Другие периферийные устройства - процессор может взаимодействовать с другими периферийными устройствами, такими как сканеры, камеры или принтеры.

Список можно продолжить, но я предлагаю погрузиться в его основную работу, которая начинается с его определения.

Процессор

Процессор - это устройство, которое выполняет инструкции, хранит данные и управляет другими компонентами компьютера. Для выполнения задач процессор использует несколько компонентов, таких как:

  1. Ядро процессора: это самая основная часть процессора, которая выполняет арифметические и логические операции, управляет потоками данных и инструкций, а также обрабатывает прерывания и исключения.
  2. Стек - это область памяти, используемая для хранения временных данных, таких как адреса возврата из функций и локальные переменные. Стек работает по принципу "последним пришел - первым ушел" (Last In First Out), что означает, что последний элемент, добавленный в стек, будет первым, который будет удален.
  3. Регистры - это маленькие области памяти в процессоре, которые используются для хранения временных данных и адресов памяти. Регистры намного быстрее, чем ОЗУ, поэтому они используются для хранения наиболее часто используемых данных и адресов.
  4. Кэш - это область памяти, используемая для хранения данных из оперативной памяти, которые процессор часто использует. Кэш быстрее, чем оперативная память, поэтому он уменьшает задержки при чтении данных.
  5. Арифметико-логическое устройство (ALU) - это компонент процессора, который выполняет арифметические и логические операции, такие как сложение, вычитание, умножение, деление, сравнение и логические операции (AND, OR, NOT).
  6. Шина данных - это канал, который передает данные между компонентами процессора и другими устройствами в компьютере. Шина данных может передавать данные в одном направлении или в обоих направлениях.
  7. Шина адреса - это канал, который передает адреса памяти между процессором и другими устройствами в компьютере. Шина адреса используется для указания адреса памяти, из которой нужно прочитать данные или в которую нужно записать данные.

Это только некоторые из компонентов, используемых процессором. Каждый процессор имеет свою архитектуру и может использовать различные компоненты в зависимости от своей конкретной реализации.

Архитектура

Архитектура процессора - это набор основных принципов и структур, определяющих внутреннее устройство процессора и набор инструкций, которые он может выполнять.

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

Некоторые известные архитектуры процессоров включают в себя x86, ARM, MIPS, PowerPC и RISC-V.

Ядро процессора

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

Ядро процессора состоит из нескольких компонентов, включая устройство управления потоками (Thread Control Unit, TCU), которое управляет потоками данных и инструкций, а также устройство управления кэш-памятью (Cache Control Unit, CCU), которое управляет кэш-памятью процессора и ускоряет доступ к данным.

Ядро процессора также включает в себя устройства управления памятью (Memory Management Unit, MMU), которые управляют доступом к памяти и переводят виртуальные адреса в физические адреса памяти, а также арифметическо-логическое устройство (Arithmetic Logic Unit, ALU), которое выполняет арифметические и логические операции.

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

Кэш-память

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

Когда процессор запрашивает данные из оперативной памяти, он копирует их в кэш-память. Если процессор снова запрашивает эти данные, то он может получить их из кэш-памяти, что является гораздо быстрее, чем получение данных из оперативной памяти. Таким образом, кэш-память позволяет сократить время выполнения программ и повысить производительность системы в целом.

Арифметико-логическое устройство

Арифметико-логическое устройство (АЛУ) - это часть процессора, которая выполняет арифметические и логические операции над данными. АЛУ обычно включает в себя элементы, такие как сумматор, умножитель, делитель, логические вентили и т.д. Оно используется для выполнения простых операций над данными, таких как сложение, вычитание, умножение, деление, а также операций сравнения, логических операций и т.д.

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

Устройство управления памятью

Устройство управления памятью (англ. Memory Management Unit, MMU) - это часть процессора, которая отвечает за управление памятью в компьютере. MMU выполняет трансляцию виртуальных адресов в физические адреса и контролирует доступ к памяти.

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

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

Шина данных

Шина данных (англ. data bus) - это часть компьютерной архитектуры, которая передает данные между процессором и другими устройствами в компьютере. Шина данных представляет собой набор проводов, которые соединяют различные компоненты компьютера, такие как процессор, оперативная память, жесткий диск, видеокарта и т.д.

Данные передаются по шине данных в виде электрических сигналов, которые представляют биты информации. Ширина шины данных определяет, сколько бит информации может передаваться одновременно. Например, шина данных шириной 32 бита может передавать одновременно 32 бита информации, а шина данных шириной 64 бита может передавать 64 бита информации.

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

Шина адреса

Шина адреса (англ. address bus) - это часть компьютерной архитектуры, которая передает адреса памяти между процессором и другими устройствами в компьютере. Шина адреса представляет собой набор проводов, которые соединяют различные компоненты компьютера, такие как процессор, оперативная память, жесткий диск и т.д.

Шина адреса используется процессором для передачи адреса памяти, к которой он хочет получить доступ. Каждый модуль памяти в компьютере имеет свой уникальный адрес, который используется для доступа к этому модулю. Ширина шины адреса определяет, сколько бит адреса может передаваться одновременно. Например, шина адреса шириной 32 бита может передавать адреса памяти в диапазоне от 0 до 4 ГБ (гигабайт), а шина адреса шириной 64 бита может передавать адреса памяти в диапазоне от 0 до 18 эксабайт (ЭБ) - это очень большое число, которое составляет примерно 18 миллионов терабайт.

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

Стек

Добавление в стек значений регистров и как при этом изменяется указатель на стек.
Добавление в стек значений регистров и как при этом изменяется указатель на стек.

Стек - это структура данных, которая работает по принципу "последним пришел - первым ушел" (LIFO - Last In First Out). Это означает, что элементы добавляются в стек только сверху и удаляются только сверху, так что последний добавленный элемент является первым, который будет удален.

Он используется для хранения локальных переменных, аргументов функций, адресов возврата и других временных данных, которые должны быть сохранены между вызовами функций или выполнением инструкций.

Изъятие элементов со стека
Изъятие элементов со стека

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

Регистры

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

Регистры общего назначения

Регистры общего назначения
Регистры общего назначения

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

  • RAX (Accumulator Register) - используется для хранения результатов арифметических и логических операций, а также для передачи аргументов в функции и получения возвращаемых значений.
  • RBX (Base Register) - используется как базовый указатель в адресных вычислениях, а также для хранения данных.
  • RCX (Counter Register) - используется как счетчик в циклах, а также для передачи аргументов в функции.
  • RDX (Data Register) - используется для хранения данных, а также для хранения частей результатов умножения и деления.
Дополнительные регистры общего назначения
Дополнительные регистры общего назначения

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

Регистры R8-R15 могут быть использованы для передачи аргументов функций, что может уменьшить нагрузку на стек и улучшить производительность программы. Кроме того, они могут использоваться для хранения данных, которые должны быть сохранены между вызовами функций, так как они не используются для передачи аргументов в вызовах функций.

Регистры указатели или индексные регистры также являются регистрами общего назначения (кроме указателя на следующую инструкцию)
Регистры указатели или индексные регистры также являются регистрами общего назначения (кроме указателя на следующую инструкцию)

Регистры указателей — это регистры, в которых хранятся адреса в памяти, к которым процессор должен обращаться для выполнения определенных операций.

  • EBP (Base Pointer Register) - используется для указания на начало стекового фрейма текущей функции.
  • ESP (Stack Pointer Register) - используется для указания на вершину стека, где хранятся локальные переменные и временные данные.
  • ESI (Source Index Register) - используется как указатель на исходный массив в операциях копирования данных.
  • EDI (Destination Index Register) - используется как указатель на целевой массив в операциях копирования данных.
  • PR/ IP (Program Counter или Instruction Pointer) - используется как указатель на следующую инструкцию которую необходимо выполнить процессору.

Я не раз натыкался на описание регистров в Интернете и каждый раз видел, что PR/IP выделены в отдельную категорию. Да, его обычно не меняют, так как это может привести к непредсказуемым последствиям, но это точно такой же регистр указатель.

Кроме того, при включении или сбросе процессор получает первую инструкцию от программного счетчика, адрес которого заранее задан производителем и указывает он на так называемый вектор сброса.

Вектор сброса

Вектор сброса (Reset Vector) - это адрес в памяти, на который процессор переходит после сброса или включения питания. В некоторых процессорах, таких как ARM, Reset Vector может содержать несколько адресов, которые указывают на различные области памяти, в которых могут находиться программы. Это может быть полезно, если процессор должен загружать программу из разных источников, например, из встроенной памяти или из внешнего устройства хранения.

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

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

Грубая схема загрузки микроконтроллеров после подачи питания на него.
Грубая схема загрузки микроконтроллеров после подачи питания на него.

С флеш-памятью все понятно, а зачем в оперативной? Первый 1 килобайт оперативной памяти (ОЗУ) называется «Таблица векторов прерываний». В этой таблице хранятся адреса обработчиков прерываний и исключений, которые процессор использует для выполнения соответствующих действий. Таким образов в нем же для архитектуры x86 выставлен адрес загрузки BIOS (Basic Input/Output System).

BIOS

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

При старте компьютера процессор начинает выполнение инструкций, которые находятся по адресу 0xFFFF0 в ROM-чипе BIOS на материнской плате компьютера. Эти инструкции загружают BIOS в оперативную память по адресу 0xF0000, где он может быть выполнен.

Схема загрузки процессора на архитектуре x86.
Схема загрузки процессора на архитектуре x86.

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

Набор инструкций

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

Набор инструкций зависит от архитектуры процессора и может варьироваться в зависимости от производителя. Например, набор инструкций для процессоров Intel может отличаться от набора инструкций для процессоров AMD.

Набор инструкций также может быть определен для конкретного языка программирования, например, для ассемблера или высокоуровневых языков, таких как С++ или Java. Компиляторы переводят код на высокоуровневых языках в соответствующий набор инструкций, который может быть выполнен процессором.

Набросок распознавания операции по коду и передачи операндов
Набросок распознавания операции по коду и передачи операндов

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

Грубая схема переходов при передаче инструкции процессору
Грубая схема переходов при передаче инструкции процессору

Рассмотрим пример, первая инструкция считывается с программного счетчика и далее процессор ее декодирует, чтобы определить, какую операцию нужно выполнить и какие данные нужны для выполнения этой операции. Если инструкция требует операндов, процессор получает их из памяти или регистров.

После чего, процессор выполняет операцию, используя полученные операнды и обновляет значение регистра Program Counter, чтобы указать на следующую инструкцию, которую нужно выполнить. И это повторяется, пока не будет выполнена вся программа.

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

19 views·3 shares