Перейти к содержанию

/* Этот текст является конспектом книги по мере её чтения. Могут быть обнаружены неточности или ошибочные суждения, т.к. это является материалом для моего личного осмысления материала. Конспект содежрит информацию полезную непосредственно мне, именно в текущий промежуток времени для запоминания контекста. rm.tj (June 2024)

Огромная разница между тем, что удобно людям и что могут компьютеры. Решение проблемы подразумевает разработку новых команд, более удобных для человека, чем встроенные машинные команды. Эти новые команды в совокупности формируют язык - Я1. Встроенные машинные команды тоже формируют язык - Я0. Компьютер может исполнять только Я0. Способы решения проблемы отличаются тем, каким образом компьютер будет исполнять программы, написанные на Я1.

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

Второй способ - создание на Я0 программы, получающей программы на Я1. При этом каждая команда Я1 обрабатывается поочередно, после чего сразу исполняется эквивалентный ей набор команд языка Я0. Это - интерпретацией, а программа - интерпретатор.

+--------------------------------------------------------------------------------+ |0. Аппаратный уровень | | Процессор | | Память | | Устройсто ввода/вывода | | Хранилище устройства | +--------------------------------------------------------------------------------+ |1. Уровень прошивки | | Базовая система ввода-вывода (BIOS) | | Унифицированный расширяемый интерфейс встроенного ПО (UEFI) | | Прошивка устройства (встроенного ПО для видеокарты). | +--------------------------------------------------------------------------------+ |3. Уровень операционной системы | | Ядро операционной системы (ОС) | | Драйверы устройств | | Системные утилиты (интерфейс командной строки, файловый менеджер) | +--------------------------------------------------------------------------------+ |4. Уровень системного программного обеспечения | | Компиляторы | | Ассемблеры | | Интерпретаторы | | Системные библиоти | +--------------------------------------------------------------------------------+ |5. Уровень прикладного программного обеспечения | | Находятся приложения пользовательского уровня, в том числе: | | Программное обеспечение для повышения производительности | | Игры, Веб-браузеры | +--------------------------------------------------------------------------------+ |6. Уровень пользователя | | Это самый высокий уровень, на котором пользователи взаимодействуют с | | компьютерной системой, используя: | | Интерфейсы командной строки (CLI) | | Графические пользовательские интерфейсы (GUI) | +--------------------------------------------------------------------------------+

                                            ОРГАНИЗАЦИЯ КОМПЬЮТЕРНЫХ СИСТЕМ

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

    Процессор состоит из нескольких частей:
    Блок управления - отвечает за вызов команд из памяти и определение их типа.
    АЛУ - выполняет арифметические операции и логические операции.
    Регистры - быстрая память небольшого объема.

    Процессор выполняет каждую команду за несколько шагов. Он
    делает следующее:
    1. Вызывает следующую команду из памяти и переносит ее в регистр команд.
    2. Меняет положение счетчика команд, который после этого указывает на следующую
    команду.
    3. Определяет тип вызванной команды.
    4. Если команда использует слово из памяти, определяет, где находится это слово.
    5. Переносит слово, если это необходимо, в регистр данных.
    6. Выполняет команду.
    7. Переходит к шагу 1, чтобы начать выполнение следующей команды.
    Такая последовательность шагов (выборка — декодирование — исполнение)
    является основой работы всех компьютеров.

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

    Гарвардская архитектура:
            Разделяет хранилище данных и инструкции
            -Отдельные шины: для инструкций и данных существуют отдельные шины,
                что обеспечивает одновременный доступ к обоим.
            -Отдельная память: инструкции и данные хранятся в отдельной памяти.
            -Более быстрое выполнение: Гарвардская архитектура может выполнять
                инструкции быстрее, поскольку она может одновременно получать доступ
                к инструкциям и данным.
    Фон Нейман Архитектура:
            Инструкции и данные хранятся в одной памяти
            -Общая шина: существует одна шина, по которой передаются как инструкции,
                так и данные.
            -Единая память: инструкции и данные хранятся в одной памяти.
            -Более простая конструкция: Архитектуру фон Неймана проще реализовать,
                поскольку для нее требуется только одна память и шина.

    +-------------+--------------------------------------------+--------------------------------------------+
    |Особенность    |                                   Гарвардская                                                                 Фон Нейман                                  |
    +-------------+--------------------------------------------+--------------------------------------------+
    |Автобус            |   Отдельные шины для инструкций и данных              Одна шина для инструкций и данных                   |
    +-------------+--------------------------------------------+--------------------------------------------+
    |Память             |   Отдельная память для инструкций и данных            Единая память для инструкций и данных           |
    +-------------+--------------------------------------------+--------------------------------------------+
    |Исполнение     |   Более быстрое выполнение благодаря                      Медленное выполнение тк последовательный    |
    |                           |   одновременному доступу                                              доступ                                                                      |
    +-------------+--------------------------------------------+--------------------------------------------+
    |Сложность      |   Более сложная конструкция                                           Более простой дизайн                                            |
    +-------------+--------------------------------------------+--------------------------------------------+

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

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

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

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

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

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

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

    +---------------------+--------------------------------------------+---------------------------------------------+
    |Особенность                    |                       CISC-архитектура                                 |                          RISC Архитектура                             |
    +---------------------+--------------------------------------------+---------------------------------------------+
    |Набор инструкций           |   Сложный, много инструкций.                               |  Просто, мало инструкций                                      |
    +---------------------+--------------------------------------------+---------------------------------------------+
    |Длина инструкции           |   Переменная                                                               |  Зафиксированная                                                      |
    +---------------------+--------------------------------------------+---------------------------------------------+
    |Производительность     |   Медленнее из-за сложности                                    |  Быстрее благодаря простоте и конвейеризации|
    +---------------------+--------------------------------------------+---------------------------------------------+
    |Плотность кода             |   Лучшая плотность кода                                            |  Меньшая плотность кода                                       |
    +---------------------+--------------------------------------------+---------------------------------------------+
    |Сложность                      |   Более сложный, трудный для проектирования    |  Проще и легче проектировать                              |
    +---------------------+--------------------------------------------+---------------------------------------------+
    |Потребляемая мощность| Более высокое энергопотребление                      |  Низкое энергопотребление                                     |
    +---------------------+--------------------------------------------+---------------------------------------------+
    |Масштабируемость           |   Менее масштабируемый                                             |  Более масштабируемый                                             |
    +---------------------+--------------------------------------------+---------------------------------------------+


    Этапы работы процессора:
        -Выборка (Fetch):
            Процессор извлекает инструкцию из памяти, используя программный счетчик (PC),
            который указывает на адрес следующей инструкции.
            Эта инструкция загружается в регистр команд (Instruction Register, IR).
        -Декодирование (Decode):
            Декодер инструкций интерпретирует команду из регистра команд.
            В этой стадии определяются тип операции (например, арифметическая, логическая,
            управление) и операнды (адреса данных, регистры).
        -Выполнение (Execute):
            АЛУ (арифметико-логическое устройство) выполняет операцию, указанную в инструкции
            Операнды могут быть извлечены из регистров или памяти, операция выполняется,
            и результат может быть сохранен в регистре.
        -Доступ к памяти (Memory):
            Если инструкция требует доступа к памяти (например, загрузка или сохранение
            данных), процессор взаимодействует с памятью.
            Адреса данных могут быть вычислены, и данные могут быть прочитаны или записаны.
        -Запись результатов (Write-Back):
            Результат операции записывается обратно в регистр или память.
            Программный счетчик обновляется для следующей инструкции.

    Микрокод — это низкоуровневый набор инструкций, управляющий внутренними
    компонентами процессора. Он нужен для реализации сложных инструкций и
    упрощения дизайна процессора.
    Микрокод хранится в памяти микрокода , которая является частью блока управления процессора.
    Упрощает создание сложных инструкций.
    Позволяет реализовать сложные инструкции через простые последовательности
    микрокоманд.
    Обеспечивает гибкость и возможность обновления или исправления ошибок без
    изменения аппаратуры.
    Как работает микрокод:
    Микропрограмма: Набор микрокоманд, соответствующий конкретной машинной инструкции.
    Микрокомандный интерпретатор: Интерпретирует микрокоманды и управляет аппаратными
    компонентами (регистрами, шинами, АЛУ).
    Микропрограммный управляющий блок: Хранит и выполняет микрокод, управляя
    последовательностью микрокоманд для каждой машинной инструкции.
    Сложность инструкций : инструкции могут быть сложными, требующими выполнения
    нескольких шагов. Микрокод разбивает инструкцию на более мелкие, выполнимые шаги.
    Гибкость процессора . Микрокод позволяет процессору быть более гибким, поскольку
    его можно легко модифицировать или обновлять для поддержки новых инструкций или архитектур.
    Оптимизация производительности : микрокод можно оптимизировать для повышения
    производительности, что позволяет процессору более эффективно выполнять инструкции.

    Интерпретатор - это компонент, который переводит команды высокого уровня
    в последовательности микрокоманд или машинных инструкций.
    Он служит промежуточным слоем между программными командами и аппаратными
    ресурсами процессора.
    компонент, который преобразует микрокод в электрические сигналы, которые
    управляют исполнительными блоками процессора.
    Интерпретатор — часть блока управления, считывающая микрокод и формирующая управляющие сигналы.
    Зачем нужен интерпретатор:
    Позволяет процессору понимать и выполнять сложные инструкции.
    Обеспечивает возможность выполнения программ, написанных на разных языках
    высокого уровня.
    Как работает интерпретатор:
    Интерпретатор читает команду из регистра команд.
    Определяет тип команды и операнды.
    Переводит команду в микрокод или машинные инструкции.
    Управляет последовательностью выполнения микрокоманд.
    Декодирование инструкции : блок управления декодирует инструкцию и извлекает соответствующий микрокод из памяти микрокода.
    Выборка микрокода : интерпретатор извлекает последовательность микрокода из памяти микрокода.
    Выполнение микроинструкций : Интерпретатор выполняет микроинструкции, генерируя управляющие сигналы, которые управляют исполнительными устройствами.
    Исполняющие блоки : Исполнительные блоки (АЛУ, регистры и т. д.) выполняют необходимые операции на основе управляющих сигналов.
    Завершение микроинструкции : интерпретатор определяет момент завершения микроинструкции и извлекает следующую микроинструкцию.

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


    Параллельность процессора:

 Все команды должны выполняться аппаратным обеспечением (для скорости). То есть обычные команды выполняются напрямую, без интерпретации микрокомандами. Устранение уровня интерпретации повышает скорость выполнения большинства команд.

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

 Компьютер должен запускать как можно больше команд в секунду => параллельное выполнение команд.

    Параллелизм на уровне команд (ILP - Instruction Level Parallelism)
        это способность процессора выполнять несколько команд одновременно,
        что увеличивает производительность, не увеличивая тактовую частоту.

        Реализация ILP:
        Суперскалярные архитектуры:
        Процессор имеет несколько исполнительных блоков (например, ALU, FPU)
        и может одновременно выполнять несколько инструкций за один такт.
        Инструкции могут быть извлечены, декодированы и выполнены параллельно.

        Конвейеризация (Pipelining):
        Инструкции делятся на этапы (fetch, decode, execute, etc.),
        которые могут выполняться параллельно в разных частях процессора.
        Пример: пока одна инструкция декодируется, другая может выполняться,
        а третья загружается.

        Out-of-Order Execution:
        Инструкции выполняются не в порядке их поступления, а в порядке
        готовности операндов и наличия исполнительных блоков.
        Это позволяет избежать простоев, когда одна инструкция ждёт завершения другой.

        Branch Prediction:
        Технология предсказания ветвлений позволяет уменьшить задержки,
        связанные с переходами в программах.
        Использует алгоритмы для предсказания направления переходов и
        загрузки инструкций до подтверждения перехода.


    Параллелизм на уровне процессоров (Thread Level Parallelism - TLP)
        позволяет нескольким процессам или потокам выполняться одновременно
        на различных ядрах или процессорах.

        Реализация TLP
        Многоядерные процессоры (Multicore Processors):
        Один физический процессор содержит несколько ядер, каждое из которых
        может выполнять отдельный поток инструкций.
        Ядра могут обмениваться данными через общую кэш-память и системную шину.

        Многопроцессорные системы (Multiprocessor Systems):
        Система содержит несколько физических процессоров, каждый из которых
        может иметь одно или несколько ядер.
        Процессоры могут работать на общей памяти (Symmetric Multiprocessing, SMP)
        или иметь распределённую память (Distributed Memory Systems).

        Hyper-Threading (Simultaneous Multithreading - SMT):
        Технология, позволяющая одному физическому ядру выполнять несколько потоков
        инструкций одновременно.
        Используется для улучшения использования ресурсов процессора, таких как
        исполнительные блоки и кэш-память.

    Мультипроцессоры:
        Системы с несколькими процессорами, разделяющими общую память.
        Примеры: системы SMP, где все процессоры имеют равный доступ к общей памяти.

    Мультикомпьютеры:
        Системы с несколькими процессорами, у каждого из которых своя локальная память.
        Процессоры общаются через сеть.
        Примеры: кластеры, распределённые вычислительные системы.

    Конвейеры (Pipelines):
        это механизм, позволяющий разделить выполнение инструкции на несколько
        этапов, которые могут обрабатываться параллельно.

        Реализация конвейеров
        Этапы конвейера:
        Fetch: извлечение инструкции из памяти.
        Decode: декодирование инструкции.
        Execute: выполнение инструкции.
        Memory: доступ к памяти.
        Write-Back: запись результата.

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

Основная память

*/


1. Архитектура компьютерных систем. Архитектура Фон-Неймана и Гарвардская архитектура. Принципы архитектуры Фон-Неймана. Архитектуры NUMA и UMA.

Гарвардская архитектура VS Фон-Нейманская архитектура

(про разделение памяти по смыслу)

Фон-Неймановская архитектура

  • Одна общая память (адресное пространство) для команд и данных.
  • Процессор читает инструкции и данные через общую шину доступа к памяти -> возможное узкое место фон Неймана.

Гарвардская архитектура

  • Раздельная память для команд и для данных (часто и раздельные каналы/шины).
  • Можно параллельно читать инструкцию и работать с данными -> меньше конфликтов доступа, часто в микроконтроллерах/DSP.

UMA VS NUMA

(про многопроцессорность и расстояние до RAM)

UMA (Uniform Memory Access)

  • Архитектура многопроцессорной системы, где есть общая оперативная память, и для всех CPU время доступа к ней примерно одинаковое.
  • Простая модель для ОС, но общий интерконнект/шина/контроллер памяти может стать узким местом при росте числа процессоров.

NUMA (Non-Uniform Memory Access)

  • Архитектура многопроцессорной системы, где память распределена по узлам: у каждого CPU/сокета есть локальная RAM, а доступ к удалённой памяти других узлов медленнее.
  • Лучше масштабируется по CPU и памяти, но ОС должна быть NUMA-aware (учёт локальности: размещение памяти, affinity/планирование).