Compare commits

..

3 Commits

Author SHA1 Message Date
086244536e feat: 3 билет написан 2025-01-02 00:57:15 +03:00
9302adef05 chore: добавлены теги "устарело"
После обновления списка вопросов, оказалось, что препод решил расширить темы, по которым он опрашивает, поэтому уже написанные билеты пришлось пометить как устаревшие. Метка будет убрана после их приведения к актуальному состоянию
2025-01-02 00:16:54 +03:00
ba300b1911 chore: убрал тег "в процессе" 2025-01-01 22:03:18 +03:00
15 changed files with 208 additions and 2 deletions

View File

@ -1,5 +1,6 @@
---
tags: []
tags:
- служебное/устарело
pun: Штирлиц был у окна, а из окна дуло. Штирлиц встал, дуло убрали
---
<!--Поскольку в целом напрямую на этот вопрос отвечено в конспекте, позволю себе в лоб вставить кусок из него-->

View File

@ -1,6 +1,6 @@
---
tags:
- служебное/в_процессе
- служебное/устарело
pun: Дай человеку рыбу и он будет сыт один день. Назови человека Сыт и он будет Сыт всегда
---
*Подробно про все алгоритмы сжатия написано у меня в [[Глава 2. Виды данных, их кодирование, команды#Всякие там алгоритмы сжатия|конспекте]], здесь же я просто пробегусь по методичке*

View File

@ -0,0 +1,39 @@
---
tags:
- служебное/в_процессе
pun: "Как называют человека, который пожертвовал кусочек печени? \rОбеспеченный!"
---
# Схема процессора
![[Pasted image 20241112190401.png]]
*Схема процессора. Ее вероятно придется заучить*
*Далее мы будем ее подробно жевать, вся эта картинка станет вам понятна*
# Выполнение команд процессором
*Вот честно, вообще не понял, что тут препод спрашивает, потому что этому уделен либо один абзац, либо весь билет, либо вся методичка до начала работы с памятью. Думаю для ответа на билет хватит этого абзаца из методички* #служебное/пересмотреть
"Выполнение команды может быть сведено к нескольким (одновременно, либо последовательно в времени) операциям пересылки из регистра в регистр возможно с промежуточным преобразованием пересылаемых двоичных слов на комбинационных логических схемах"
> [!info]- Если все же хотите послушать отсебятину билетёра
> Процессор читает команду из памяти и передает ее на дешифратор, который уже разбирается, как следует ее доставить в устройство управления. Устройство управления понимает, что команда вроде `mov rax, [rbp - 4 * rcx + 12222]` - чет слишком сложно, чтобы сделать за раз и формирует последовательность микрокоманд, которые в итоге приводят к тому, что написанная пользователем команда будет исполнена, подавая управляющие сигналы на стробы пересылки между регистрами, АЛУ и прочая
# Операционные устройства
Современный процессор далеко не монолитен и, как правило, состоит из нескольких операционных устройств. [[Глава 3. Процессор#^68eab4|Можно обойтись и без них]], но тогда процессор превратится в черепашку.
Само по себе операционное устройство - аля сопроцессор, выполняющий строго определенный круг задач. Например сопроцессор с плавающей точкой встречался нам в 7 методичке. Преподаватель приводит следующие операционные устройства:
![[Глава 3. Процессор#^operating-units-list]] ^54a14c
Могут быть и другие, в зависимости от назначения процессора. Например сейчас часто алгоритмы декодирования изображений реализованы аппаратно.
![[Глава 3. Процессор#Структура операционного устройства]]
# Операционные устройства с магистральной структурой
![[Глава 3. Процессор#Операционные устройства с магистральной структурой]]
# Устройство управления
![[Глава 3. Процессор#Устройство управления]]

View File

@ -0,0 +1,166 @@
# 3.1 Процессор - аппаратный уровень. Операционные устройства
### Какие бывают операционные устройства
Современный процессор уже не является монолитным устройством, он уже давно разбит на несколько частей и сопроцессоров. В методичке все это именуется операционными устройствами. Там же приводятся следующие операционные устройства:
- целочисленной арифметики
- логических операций
- десятичной арифметики
- чисел с плавающей запятой
- векторных операций
^operating-units-list
*В зависимости от назначения процессора могут так же быть операционные устройства: правления потреблением,
графических операций, упаковки/распаковки изображений и др.*
> [!note]- Примечание билетёра
> Есть подозрение, что операционными устройствами преподаватель называет любые аппаратные ускорители, которые производитель зашивает **на кристалл**
Весь этот зоопарк сопроцессоров вообще говоря не обязателен. В минимальном процессоре может быть только модуль целочисленной арифметики, арифметико-логическое устройство которого должно уметь выполнять только: ^68eab4
- логические операции (побитовые И, ИЛИ, НЕ ИЛИ и т.д.)
- сдвиги
- инвертирования
- сложение чисел в формате с фиксированной запятой. Все остальное вообще говоря можно собрать на базе этого
*Однако такой вариант работает **невероятно медленно***. Сейчас обычно пытаются все ускорить аппаратно (то, что мы делаем на "схемаче")
### Структура операционного устройства
^2ec856
Каждое операционное устройство должно иметь:
- Собственные регистры для хранения данных
- Сами схемы, которые выполняют какие-то действия над данными
- Входы и выходы, чтобы общаться с процессором и прочим. *Умные дяди называют это шинами*
^op-struct
**Регистры** - ячейки для хранения данных, которыми операционное устройство пользуется при преобразованиях. Хранят данные. *(На схемаче мы такие собирали на основе триггеров, если помните)*
Регистры бывают:
- **Программно-видимые явно** (rax, rbx, rcx, ST(0), ST(1) и т.д.)
- **Видимые косвенно** ("теневые регистры дескрипторов сегментов". В 64 битном процессоре мы их особо не видим, а в MS-DOS насмотрелись)
- **Внутренние для специальных целей** ("для них по крайней мере известно, для чего они" - цитата из методички)
- **Внутренние для хранения промежуточных результатов**
- **Псевдо-регистры** - нужны для хранения констант вроде 0, 1, -1. В Intel например при микропрограммировании (о нем дальше по билету) вроде хранит константный 0
**Шины** - группы проводов c соединением *"рот в рот"*. Позволяют передать параллельно какие-то данные. Визуально выглядит как-то так:
![[Pasted image 20250101220837.png]]
%%Довольно прямолинейно)%%
**Вентили** - единичные логические элементы вроде НЕ И, ИЛИ, НЕ, И и прочие. В методичке изображаются так:
![[Pasted image 20250101221014.png]]
**АЛУ** - сердце процессора. Внутри себя не содержит памяти. Обычно принимает на вход содержимое одного или нескольких регистров и код операции, которую надо провести над полученными данными. Выполняет операцию и выплевывает результат на свои выходы %%Когда я собирал АЛУ, я там же еще и решал, на какие именно регистры я отдам результат, а также буду ли я обращаться к памяти при передаче данных в АЛУ%%
#### Конструкция АЛУ
Обычно в процессоре приветствуется "модульность" - полноценное АЛУ **собирается из АЛУ для одно разрядных операций** (например +, -, &, |, ~), а также имеет дополнительные входы и выходы, чтобы получать информацию от других таких же АЛУ (например о наличии переноса в предыдущих разрядах при сложении) и отдавать эту самую дополнительную информацию. В методичке приводится пример такого одноразрядного АЛУ
![[Pasted image 20250101221638.png]]
> [!tip]- Пояснение порядка работы схемы из методички
> "В левом нижнем углу схемы находится двухразрядный декодер, который порождает сигналы включения для четырех операций. Выбор операции определяется сигналами управления F0 и F1. В зависимости от значений Fo и F1 выбирается одна из четырех линий разрешения, и тогда выходной сигнал выбранной функции проходит через последний вентиль ИЛИ.
>
> В нижнем правом углу находится полный сумматор для подсчета суммы А и В и для осуществления переносов. Переносы необходимы, поскольку несколько таких схем могут быть соединены для выполнения операций над целыми словами. Одноразрядные схемы, подобные той, которая изображена на рис. 3.4, называются разрядными микропроцессорными секциями. Они позволяют разработчику сконструировать АЛУ любой желаемой ширины."
### Примеры выполнения элементарных действий
**Пересылка** - выходы одного регистра соединили с входами другого через вентиль побитового И
![[Pasted image 20250101222536.png]]
Для выполнения операции хватит и одного строба T1
Сдвиг (`rol`): 0-ой выход регистра R1 загоняется в 1-ый вход регистра R1, 1-й выход R1 в 2-й выход R1 ну и так далее. В 0-й вход R1 загоняется 0
![[Pasted image 20250101222755.png]]
регистр, как можно видеть по схеме, в итоге передает значение сам в себя, поэтому для исключения гонок (race condition)[^race_condition], операция происходит в 2 такта - сначала пишем во внутренний регистр, а потом из него выполняем сдвиг
[^race_condition]: В данном случае проблема в том, что содержимое 0-го бита регистра должно быть передано в 1-й бит регистра, а значение первого во 2-й и т.д. Но если по какой-то причине значение 0-го бита придет в 1-й раньше, чем тот успеет переслаться, то во 2-м бите окажется неправильное значение. Поэтому это и называется гонками - операция отрабатывает правильно, только если в "гонке" все участники "приходят" в нужном порядке. Это нехорошо и такое стараются устранять
**Сложение** - На схемаче мы уже одноразрядный сумматор собирали, надеюсь пояснений тут касаемо его идеи не требуется
![[Pasted image 20250101223535.png]]
Теперь касаемо особенностей схемы. стробы T4 и T5 регулируют, какие именно регистры придут на вход. Надо понимать, что тут просто не нарисованы регистры помимо R1 и R0, но они есть и у каждого из них тоже есть строб, похожий на T4 и T5, если подать сигнал на них, то процессор использует другие регистры при сложении.
Далее T6 - разрешает АЛУ начать свою работу, а через время, "не меньшее чем задержка АЛУ" подается T7 разрешающий запись результата в RC, откуда при помощи стробов T7-T9 мы решаем, куда результат надо записать.
Временная диаграмма следующая:
![[Pasted image 20250101224222.png]]
Еще раз касаясь задержки, она очень сильно зависит от многих факторов, методичка говорит следующее: "Система формирования стробов в процессоре основана на дискретной периодической сетке, формируемой тактовым генератором" (те самые Гигагерцы, которые указывает производитель)
### Операционные устройства с магистральной структурой
То, что мы сверху нарисовали - довольно неудобная конструкция, потому что тянуть 100500 стробов для выбора устройства и дорого и не кайф. Поэтому на практике применяются *операционные устройства (ОПУ)* с магистральной структурой: регистры объединены в *узел регистров общего назначения (узел РОН)*, а все схемы для того, чтобы процессоре делал с данными свои грязные дела в операционный блок (иногда "ассоциируемый" АЛУ).
![[Pasted image 20250101224802.png]]
*Объяснение препода тут чет на сложной терминологии построено, я обойдусь по простяге*
Во-первых единичные проводки в данном случае по всей видимости представляют из себя скорее шины, во-вторых по проводам a, b и с приходят номер регистров, из которых надо почитать или в которые надо записать (нужное подчеркнуть). Все регистры параллельно соединены с обоими мультиплексорами, а те, в свою очередь, по адресу на a и b, решают, в какие из них должны стать аргументами для ОПБ. Когда ОПБ отработал, он весь свой выход подает на демультиплексор, который по адресу в "c" решает, в какой регистр положить результат (все еще держим в голове, что это не один провод, а магистраль и демультиплексор там скорее всего не один)
> [!info]- Примечание о мультиплексорах или демультиплексорах, если забыли
> **Мультиплексор** получает много входов и по входному адресу решает, с какого входа сигнал пропустить дальше, а все остальные сигналы отбрасывает
>
> **Демультиплексор** получает 1 сигнал и при помощи адреса решает, а на какой из множества своих выходов его отправить
### Сопроцессор с плавающей точкой
*Как-нибудь потом при необходимости*
# 3.2 Устройство управления. Микропрограммный автомат
### Устройство управления
%%Пока что нас больше всего интересует именно этот засранец%%
Устройство управления (УУ) - главный дирижёр всего того счастья, которое происходит в процессоре. Именно этот засранец генерирует все те сигналы на стробах, которые вы могли видеть до этого, именно он ответственен за все пересылки между регистрами, инициации записи в оперативу, команды АЛУ выполнять действия над регистрами и за прочие радости жизни. ^0f96bd
> [!warning]+ Я не уверен
> Препод очень криво описал работу УУ, поэтому я, если честно, разбирался по [Википедии](https://ru.wikipedia.org/wiki/%D0%A3%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%BE_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F), поэтому пока что не могу поручиться за качество всего написанного, но вроде описание верное
^cdf8be
На вход УУ принимает следующие параметры:
- Тактовые импульсы (наш любимый clock)
- Коды операций (те самые, которые читаются из оперативы)
- Флаги (нужны для условных переходов например)
- Сигналы системной шины (прерывания, прямой доступ в память, о котором будет сказано, когда мы будем себя мучить переферией, и прочие команды извне)
Выплевывает он следующее:
- Внутренние сигналы управления - перемещение операндов, инициация работы АЛУ %%(похоже везде, где внутри процессора есть стробы управления, за них ответственен именно этот говнюк)%%
- Сигналы на системную шину: тут, как понимаете, ответы на прерывания и запросы, а также возможные переходы между состояниями компа (переход в режим энергосбережения? Не уверен)
Выглядит это все примерно так
![[Pasted image 20250102001212.png]]
Дальше в методичке посыл примерно такой: В каждый отдельно взятый такт процессор выполняет всего одну *микрокоманду* - набор одновременно протекающих *микроопераций*. Последовательность микрокоманд - *микропрограмма*
Микропрограммный автомат - практически процессор в процессоре - сейчас у него буквально есть своя память для микропрограмм, регистры адреса микрокоманды, их дешифрация и прочая радость. Подробнее про микропрограммные автоматы будет оговорено чуть позже
Устройство управления разделяется на 2 части: управляющую и адресную:
- Управляющая занимается координированием работы операционного блока, адресной части, основной памяти и др. При приходе кода операции формирует последовательность микрокоманд и начинает ее исполнять (даже mov rax, rbx переводится в последовательность микрокоманд). Состоит из :
- регистра команд
- микропрограммного автомата (**может быть с жесткой или программируемой логикой**)
- узла прерываний и приоритетов
- Адресная часть обеспечивает формирование адресов операндов в основной памяти. Состоит из:
- операционного узла устройства управления (ОПУУ), который формирует исполнительные адреса операндов команды
- регистра адреса (похоже используется именно для обращения в память, если надо)
- счетчика команд (похоже это rip)

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB