BufWriter<Master<'_>> – Telegram
BufWriter<Master<'_>>
105 subscribers
451 photos
28 videos
34 files
1.7K links
https://www.patreon.com/alxe_master

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

#os, #cloud, #rust, #golang, #python, #javaScript, #cpp, etc
Download Telegram
Forwarded from Кавычка (Bo0oM)
Управляющий символ 7F (или в url браузера - %7f) предназначен для забивания ошибочно пробитых символов на семидорожечных перфолентах (поскольку обозначается пробитием дырочек во всех дорожках).

А стандартная ширина терминала составляет 80 символов, потому что именно столько влезало на перфокарту.

А CR LF (\r \n) сейчас бы сделали одним символом, но при печати листингов на терминале необходимо подать бумагу на 1 строку вперед и передвинуть каретку в левый край.

Символ \a - пикнуть спикером (BELL).
И это не шутка!
== Comparing gRPC performance across different technologies
https://www.nexthink.com/blog/comparing-grpc-performance/
== Миллион одновременных соединений
https://habr.com/ru/post/661169/


- Фреймворку Phoenix удалось достичь 2 000 000 подключений.
- WhatsApp удалось достичь 2 000 000 подключений.
- Теоретический предел примерно равен 1 квадриллиону (1 000 000 000 000 000).
- У вас закончатся исходные порты (всего 216).
- Это можно исправить, добавив клиентские IP-адреса замыкания на себя.
- У вас закончатся дескрипторы файлов.
- Это можно исправить, изменив ограничения на дескрипторы файлов операционной системы.
- Java тоже ограничит количество дескрипторов файлов.
- Это можно исправить, добавив аргумент JVM -XX:MaxFDLimit.
- На моём Mac с 16 ГБ практический предел составил 80 000 подключений.
- На моём Linux-десктопе с 8 ГБ практический предел составил 840 000 подключений.
Эйчары добавляются в инсту... это что-то новенькое
мелочь а приятно
👍6
digital-design-and-computer-architecture-russian-translation.pdf
36.5 MB
оч много накопилось на просмотреть/почитать
решил освежить немного.
на фоне как подкаст звучит.

== Архитектура ЭВМ. Лекция 1: Типы архитектур. Комбинационная и последовательная логика.
https://youtu.be/R-twnbnaueE
- типы архитектур, фоннеймона, гарвардская, RISC, CISC
- мультиплексор
- дешифратор
- простейшая ячейка памяти
- RS защелка (RS-latch)
- D-зашелка (D-latch)
- D-trigger (D-flip-flop)
- сдвиговый регистр
- параллельный регистр

правила дизайна последовательных схем
- каждый элемент - либо регистр либо комбинационная схема
- хотя бы один элемент - регистр
- все регистры получает один и тот же CLK сигнал
- Каждый обратный путь содержит хотя бы один регистр
== Архитектура ЭВМ. Лекция 2: АЛУ. Устройство памяти
https://youtu.be/HPGw4qFARTg
- сумматор
- полусумматор (перенос в старший)
- полный сумматор (перенос и в старший и из младшего)
- сумматор с быстрым переносом (отдельно обрабатывается перенос от сигналов)
- дополнительный код
8-3 = 5
08 - (-3) - 5
00000011
11111100 + 1
11111101

00001000
+
11111101
_________
1 00000101
операция по модулю

что бы отрицание сделать нужно сделать инверсию одного сигнала и добавить один

- компоратор равенства
- блок компораторов
Eq = xor
not eq = xor | not

- ALU умеет делать все. мультиплексор выбирает линию по которой будет идти вычисления (выбор операции). и мультиплексор выбирает линии которые будут выбраны как выходные сигналы

- Счетчик
- память (mem array). емкость памяти = разрядность шины адреса.
- Адресация памяти
- Многоканальная память
- DRAM / SRAM
flip-flop = 20 transistors/cell = SUPER FAST = for CACHE
SRAM = 6 transistors/cell = medium speed =
DRAM = 1 transistors/cell = slow speed

== Архитектура ЭВМ. Лекция 3: Кодирование и тип инструкций процессора.
https://youtu.be/RJFGyfT3-YY

создание RISC компьютера

порядок проектирование процессора
- Проектирование тракта данных (data-path)
- - - определение архитектурного состояния
- - - определение системы команд
- проектирование устройства управления (control-path/control-unit)
- - - разработка автомата управления

Архитектура это набор регистров и их типов

Состав регистров
- просто пронумеруем регисты последовательно = 32 регистра.
именно 32 регистра потому что память регистра это микросхема, а количство проводов целое = степень двойки.

разрядность регистров не связана с адресацией

бывает
- регистры не равноправные
- регистры равноправные
- регистры бьются на группы
- ...

Имена регистров ax, bx, ... определяет разработчик архитектуры, согласно стандарту типов процессоров. В компиляторе мнемоника ассемблера превращается в определенные байты

Ассемблер
С: a = b + c
ASM: add a, b, c

Типы инструкций
- (R)egister - используются 3 регистровых операнда
- (I)mmediate - 2 регистровых операнда и 16битная константа
- (J)ump - передача управления по непосредственному смещению (26бит)

Команды R-типа
- 6bit = op
- 5bit = rs
- 5bit = rt
- 5bit = rd
- 5bit = shamt
- 6bit = funct

add $a0, $a1, $a2
= 0 - 17 - 18 - 16 - 0 - 32
= 000000 - 10001 - 10010 - 10000 - 00000 - 100000

Команды I-типа (Immediate)
= значение можем получить сразу из команды, не ходя в данные
- 6bit = op
- 5bit = rs
- 5bit = rt
- 16bit = imm

- addi $s0, $s1, 5
- addi $t0, $s3, -12
- lw $t2, 32($0)
- sw $s1, 4($t)

Команды типа J (jump)
- 6bit = op
- 26bit = addr

уловные переходы

Little-endian = MSB-LSB
Big-endian = LSB-MSB

Компиляция-загрузка-запуск
- компиляция
- ассемблер
- машинный код
- упаковка в один файл
- загрузка=размещение в памяти
- запуск первой команды
BufWriter<Master<'_>>
== Архитектура ЭВМ. Лекция 2: АЛУ. Устройство памяти https://youtu.be/HPGw4qFARTg - сумматор - полусумматор (перенос в старший) - полный сумматор (перенос и в старший и из младшего) - сумматор с быстрым переносом (отдельно обрабатывается перенос от сигналов)…
== Архитектура ЭВМ. Лекция 4: Однотактный процессор: тракт данных, ветвление
https://youtu.be/O9eAp45LzQ8

Однотактный тракт данных (Data-path)
- регистр адреса текущей инструкции
- текущая инструкция
- файл регистра
- данные памяти

проектирование команды
lw = load word - загружает слово в регистр
op - rs - rt - imm
rs - адрес откуда (из какого регистра) взять данные
rt - адрес куда (в какой регистр) положить данные
imm - значение смещения к базовому адресу в памяти (гдето оно лежит точно)

последовательность действий LW
- чтение инструкции LW
- чтение операнда источника
- знаковое расширение I-аргумента
- загрузка значений в регистр
- вычисление адреса значения в памяти
- копирование значения из памяти в регистр
- переход на следующую инстркукцию
BufWriter<Master<'_>>
== Архитектура ЭВМ. Лекция 4: Однотактный процессор: тракт данных, ветвление https://youtu.be/O9eAp45LzQ8 Однотактный тракт данных (Data-path) - регистр адреса текущей инструкции - текущая инструкция - файл регистра - данные памяти проектирование команды…
== Архитектура ЭВМ. Лекция 5: Устройство управления процессора, многотактный процессор
https://youtu.be/30RCgo5Q7zo

lw и sw команды затрагивают весь тракт !

проблемы однотактного процессора
- две памяти
- много АЛУ
- длинный тактовый цикл
- разделенная память команд и данных

решение - многотактовый процессор
- мы считали команду и зафиксировали её в регистре
- а на выходе зарегестрировали результат
- на вход ставим мультиплексор с флажком

появились состояния управляющего устройства. FSM!!!

Это больше не комбинационная схема !!!
== Архитектура ЭВМ Лекция 6: Устройство управления многотактного процессора. Конвейерный тракт данных.
https://youtu.be/PQPLRwyW2h8

мультиплексор это свитч, который переключает стримы в зависимости от флажков

lw/sw
- фетч инстукции и флагов
- декодироввание инструкций = комбинационная схема ! всего лишь
- вычисление адреса в памяти
- в зависимости от того надо ли нам читать или писать (lw или sw) читаем инструкции или данные
- записываем адрес в нужный Рег

Конвеер = команда разбилась на несколько этапов и можно уплотнить во времени их исполнение если они друг другу не мешают

Конвейерный тракт данных
- после каждого этапа появляется массив регистров для каждой новой операции
- но нужно убрать одновременные передачи на обратном пути. поставить регистры на выходе что бы потом забирать !
- все результаты надо протягивать через конвеер !!!
- сброс конвеера дорогой
- задача предсказать ветки, что бы меньше перезагружать конвеер (бранч предикшн нужен)
BufWriter<Master<'_>>
== Архитектура ЭВМ Лекция 6: Устройство управления многотактного процессора. Конвейерный тракт данных. https://youtu.be/PQPLRwyW2h8 мультиплексор это свитч, который переключает стримы в зависимости от флажков lw/sw - фетч инстукции и флагов - декодироввание…
Конфликты (hazard) в конвеере - ситуация в которой выполнение одной из команд зависит от другой (еще не завершенной команды)

Стадии команд
IM - instruction memory
RF - Regsitrer File
DM - Data memory

Типы конфликтов
- конфликт данных (зависимость или противоречие данных)
- конфликт управления (одно устройство, несколько команд)

Варианты конфликтов
- RAW - read after write (прочитали до записи)
- WAR - write after read (перезаписали до того как прочитали)
- WAW - write after write (перезаписали до того как записали в предыдущей)
BufWriter<Master<'_>>
Конфликты (hazard) в конвеере - ситуация в которой выполнение одной из команд зависит от другой (еще не завершенной команды) Стадии команд IM - instruction memory RF - Regsitrer File DM - Data memory Типы конфликтов - конфликт данных (зависимость или противоречие…
== Архитектура ЭВМ Лекция 7: Конфликты конвейера. Улучшения микроархитектуры
https://youtu.be/ZJhG0Q8Hgjg

решение
- bypass (forwarding)
- bubbling (fragmentation) = всьавка NOP
- re-ordering


добавляется к ControlUnit и к DataPath новый HazardUnit - устройство передачи данных между командами, разрешение конфликтов. способен определить как переключить данные

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

проблема - мы не можем смотреть в будущее. поэтому ставим пробелы в исполнение. "слипы на уровне команды"

Конфликт управления для бранчей (beq)

branch-prediction
предсказание условных переходов
- статическое предсказание (переходы назад имеют высокую вероятность) = likely/unlikely
- динамическое предсказание (вперед)
- - буфер целевых адресов (адрес, состояние)
- - автомат = для каждого перехода я могу построить предсказание, наивный сегодня=вчера работает хорошо

Типы параллелизма
- временной (конвееризация)
- - разбиение задачи на стадии
- - задача последовательно происходит все стадии
- пространственный
- - дублирование исполнительных узлов для параллельного исполнения разных задач

процессоры
- Скаларный 0 одна в стадии EXE
- векторный - одна инструкция в стадии EXE но несколько независимых трактов данных
- Суперскалярный - в стадии EXE несколько независимых инструкций одновременно

Параллельные архитектуры
- MISD (multiple instruction single data)
- SIMD (single instruction multiple data)
- SISD (single instruction single data)
- MIMD (multiple instruction multiple data)

Гетерогаенная архитектура
- комбинирование разных архитектур в одной вычислительной системе
- FPGA
- DSP
- RT Core

== Архитектура ЭВМ Лекция 8: Assembly Language "Hello World". Основы отладки в GDB
https://youtu.be/aHYaseRUHLM
== Архитектура ЭВМ Лекция 9: Иерархия хранения данных. Организация кэш памяти.
https://youtu.be/WLj1R2YlueY

UMA - uniform memory access (нет разницы где эта память, доступ детерминирован)
NUMA - non-uniform memory access (интерфейс или время к памяти по разным адресам не одинаково!)

Локальность данных
- временная (скорее всего скоро обратится еще раз к этим же данным)
- пространственная (скорее всего обратится к соседней памяти)

Иерархия хранения данных (иерархия памяти)

Организация процессорного КЭШа
Кэш линия - наборы смежных слов данных котопые помещаются в кэш (вытесняются из кэш) совместно. Рядом они должны быть для того что бы линейно брать соседей

ТИпы отображения памяти в кэш
- прямое отображение
- наборно-ассоциативный
- полностью ассоциативный

Состояние данных в кэш
- cache miss - данные остутствуют в кэш
- cache hit - данные в кэш

Запись в КЭШ
- write-through (пишем сразу через кэш в память)
- write-back (вначале в кэш, а потом он сам синхронизируется когда нибудь с памятью) - быстро, но неконсистентность возможна

== Архитектура ЭВМ Лекция 10: Устройство жесткого диска. Виртуальная память.
https://youtu.be/yxXQeHOIYCE

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

LBA - Logical Block Addressing
- getN()
- write(N_block, data)
- read(N_block)

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