# Заметки - Общая память (например, у CPU и GPU) - Интерфейсы периферийных устройств и их классификация. --- ## Платформа и язык программирования  (время и пространство) ---
Встраиваемая/встроенная система (embedded system)
специализированная микропроцессорная система управления, контроля и мониторинга, концепция разработки которой заключается в том, что такая система будет работать, будучи встроенной непосредственно в устройство, которым она управляет.

Система на Кристалле (СнК, System-on-a-Chip, SoC)
электронная схема, выполняющая функции целого устройства (например, компьютера) и размещённая на одной интегральной схеме.
----  --- ## Минутка саморекламы. Проекты. Курсы Особенности проектов для участия: - Размещены на GitHub - Лицензия — BSD - Задачи проектов могут стать вашими дипломами и практиками Подробнее: [Aleksandr Penskoi](https://ryukzak.github.io)  ---- ### NITTA Инструментарий для генерации и программирования специализированных не фон – Неймановских процессоров, предназначенных для циклического исполнения алгоритмов управления и обработки сигналов/данных. - обеспечить высокую скорость и уровень параллелизма для нерегулярных алгоритмов (где не используют GPU) и жесткое реальное время (с точностью до такта); - сделать процессор реконфигурируемым под разные прикладные области; - предоставить язык высокого уровня для прикладных разработчиков и быструю компиляцию. Технологии: Haskell, Verilog, TypeScript, React, GitHub. ---- ### Course-bot (Telegram) Features: - Quiz in test form - Essay submissions by the students with cross-review - Scheduling in-class presentations, including topic reviews by the teacher, agenda generation, and evaluation by the teacher and students. Technical details: - eDSL for describing bot in dialogue form - Implementing on Clojure - Possible topics for bachelor’s or master’s thesis: - eDSL for dialogue system descriptions - Automated testing for dialogue systems based on a property-based approach ---- ### Курс
Системная инженерия: Архитектурное моделирование компьютерных систем > Всё, что может пойти не так, пойдёт не так. --- закон Мерфи > Любое дело всегда длится дольше, чем ожидается, даже если учесть закон Хофштадтера. --- закон Хофштадтера ---- Причины: - Современные системы имеют высокую сложность и тесно вплетены в непростые бизнес-процессы. - Их разрабатывает толпа обычных людей, от которых требуется ничего не забыть, ничего не упустить, нигде не ошибиться и договориться между собой. Данный курс учит: - базовым приёмам системной инженерии (Как создавать успешные системы?); - архитектурному документированию (Как записать "всё важное" в виде документа?). --- [John L. Hennessy, David A. Patterson Новый золотой век для компьютерной архитектуры](https://habr.com/en/post/440760/) --- #### Параллельный доступ. Offtopic. Consistency - **Сильная согласованность (Strong consistency)**. После завершения обновления любой последующий доступ к данным вернет обновленное значение. - **Слабая согласованность (Weak consistency)** / **согласованность в конечном счете (Eventual consistency)**. Система гарантирует, что при отсутствии изменений данных в конечном счёте все запросы будут возвращать последнее обновленное значение. Пример: DNS. Notes:
--- ### Диалектика Гегеля  ---- ### Принцип развития иерархических систем Седова В сложной иерархически организованной системе рост разнообразия на верхнем уровне обеспечивается ограничением разнообразия на предыдущих уровнях, и наоборот, рост разнообразия на нижнем уровне разрушает верхний уровень организации.  ---- ## Формирование уровней **Уровень компьютерной системы** — совокупность процессора, вычислительных процессов и моделей. Уровни определяются вне зависимости от конкретной стадии жизненного цикла вычислительной системы и могут включать в себя как архитектурные представления, так и модели, сформированные в процессе отладки.  ---- ### Layered Style  ----
 
 
---- ### Уровневый архитектурный стиль
 - Изоляция, модифицируемость и переносимость - Управление сложностью и структура кода разработчикам - Разделение интересов
(**Layered Style**)   
---- ### Документирование. Граф актуализации
1. Цепочка преобразований моделей выч. процесса через: - стадии жизненного цикла
(Design $\rightarrow$ Dev $\rightarrow$ Use), - вычислительные платформы (High- $\rightarrow$ Low-level Langs $\rightarrow$ ISA $\rightarrow$ HW $\rightarrow$ Physic). 1. Ориентированный ациклический граф, вершины — модели, рёбра — трансляции/интерпретации. 1. Назначение: анализ инструментальных цепочек.

Подробности: [Разработка и исследование архитектурных стилей проектирования уровневой организации встроенных систем](http://fppo.ifmo.ru/?page1=16&page2=52&page_d=1&page_d2=142415) ---- ### Модель-процесс-вычислитель
- Модель (конфигурация) вычислительного процесса, описывающая вычислительный процесс в рамках ВПл. - Вычислитель — целостный зафиксированный механизм, обеспечивающий вычислительный процесс. - Вычислительный процесс (ВП) и частичный процесс, которые разворачиваются вычислителем и соответствуют модели по построению или формальному критерию. - Компонент ВП — атомарный или составной шаг вычислителя.

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

--- ### Ultimate Reduced Instruction Set Computer (URISC) - Доступна лишь одна инструкция, но есть полнота по Тьюрингу. - Архитектуру можно рассматривать как предельный случай RISC. - Такой подход интересен скорее с теоретической точки зрения. Варианты единственной инструкции: - **RSSB** — вычесть и пропустить следующую инструкцию, если вычитаемое было больше уменьшаемого. - **MOV** — переслать из первой ячейки во вторую (TTA). - **BBJ** — копировать один бит из первого по второму адресу памяти и передать управление на третий адрес. Последовательность инструкций может изменить значение в ячейке, на которую перейдёт управление, значит, можно выполнять вычисления, доступные обычному компьютеру. - есть и другие. ---- ### URISC. Пример ```rssb ; 0 - pc ; 1 - acc ; 2 - zero ; 3 - in ; 4 - out ; at start pc = 5 rssb acc ; 5: acc = acc - acc = 0 rssb C ; 6: C = acc = C - acc = 67 - 0 = 67 rssb out ; 7: out = acc rssb acc ; 8: acc = acc - acc = 0 rssb S ; 9: S = acc = S - acc = 83 - 0 = 83 rssb out ; 10: out = acc rssb acc ; 11: acc = acc - acc = 0 rssb A ; 12: A = acc = A - acc = 65 - 0 = 65 rssb out ; 13: out = acc rssb acc ; 14: acc = acc - acc = 0 rssb one ; 15: one = acc = one - acc = 1 rssb ip ; 16: ip = acc = ip - 1 = 17 - 1 = 16, infinite loop C rssb 67 S rssb 83 A rssb 65 one rssb 1 ``` Программа Hello World: [src/helloworld.rssb](https://gitlab.se.ifmo.ru/computer-systems/csa-rolling/-/blob/master/src/helloworld.rssb) CGRA — MIMD с распределённой памятью --- ## TODO - High-level Language Computer Architecture or language-directed computer design (когда попытались поднять уровень ассемблера); -
— высокоуровневый процессор от Intel -
— процессор с поддержкой java -
— picoJava - tagged architecture (когда попытались учесть на низком уровне типы данных); - детерминированные по времени процессоры (для гарантий реального времени); - Coarse-Grained Reconfigurable Arrays (очень странное семейство процессоров) - NITTA - их классификация из обзора - специализированные процессоры (эффективный параллелизм под задачу, эффективная работа с кешем, управление точностью вычислений, более эффективное программирование за счет ручной оптимизации под процессор). Связка DSL+ спец процессор --- ## Digital Signal Processor (DSP)  ---
```python if addr == 0: q = f1(...) else: q = f2(...) ```
```python a = f1(...) b = f2(...) if addr == 0: q = a; else: q = b ``` Спекулятивно в ПО
```verilog assign A = f1(...); assign B = f2(...); always @(posedge clock) begin if (addr == 0) Q <= A; else Q <= B; end ``` Схема
 --- *Offtopic*: Base64 и Base58 
Base64
кодирование двоичных данных 64 ASCII-символами — чтобы безопасно провезти их через текстовый канал (email/MIME, JSON, URL).
Base58
модификация Base64 без неоднозначных символов (`0`, `I`, `O`, `l`) — нужна, когда строку переписывает вручную человек (например, адрес криптокошелька).
---- *Offtopic*: Классификация типов по версии IBM 