Compare commits
42 Commits
8c815df1bc
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| c513ce326f | |||
| 9361978648 | |||
| 8f42d4a320 | |||
| c654fcd9c2 | |||
| 2ec4a7e7db | |||
| 283660b9ef | |||
| f0817da47e | |||
| c9bc96dafc | |||
| 6538742678 | |||
| a7f8e74f3f | |||
| 9b0c9f4b4a | |||
| b62e54bbb0 | |||
| 6853ada348 | |||
| 4d0e404259 | |||
| da3ad9dd1a | |||
| 005017595b | |||
| 23a9e06d53 | |||
| 8c95d15f6c | |||
| 61e293f81b | |||
| 75e45eb930 | |||
| 12a473f46e | |||
| 11432e782f | |||
| fec7f50b3e | |||
| 4886625dac | |||
| 977e016822 | |||
| 3764f7dafa | |||
| ecd928d72d | |||
| c0b8ac0043 | |||
| 88b307c311 | |||
| dc82207723 | |||
| 8ebd7b0b4f | |||
| dd3ac17361 | |||
| fc45caa657 | |||
| 7637cab7a9 | |||
| 0e6e583e6d | |||
| 6421fd3a48 | |||
| 08e557da92 | |||
| c90a404c40 | |||
| d5adddc4f1 | |||
| 05a67d2998 | |||
| 98eeb949fc | |||
| 3e4e10da10 |
@@ -4,6 +4,8 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
schedule:
|
||||||
|
- cron: '0 2 * * *'
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@@ -22,6 +24,7 @@ jobs:
|
|||||||
cd /opt/docs/obsidian
|
cd /opt/docs/obsidian
|
||||||
echo "${{ secrets.SERVER_SUDO_PASSWORD }}" | sudo -S git reset --hard origin/master
|
echo "${{ secrets.SERVER_SUDO_PASSWORD }}" | sudo -S git reset --hard origin/master
|
||||||
echo "${{ secrets.SERVER_SUDO_PASSWORD }}" | sudo -S git pull origin master
|
echo "${{ secrets.SERVER_SUDO_PASSWORD }}" | sudo -S git pull origin master
|
||||||
|
echo "${{ secrets.SERVER_SUDO_PASSWORD }}" | sudo -S git submodule sync
|
||||||
echo "${{ secrets.SERVER_SUDO_PASSWORD }}" | sudo -S git submodule update --init --recursive --remote
|
echo "${{ secrets.SERVER_SUDO_PASSWORD }}" | sudo -S git submodule update --init --recursive --remote
|
||||||
cd ..
|
cd ..
|
||||||
echo "${{ secrets.SERVER_SUDO_PASSWORD }}" | sudo -S docker compose down
|
echo "${{ secrets.SERVER_SUDO_PASSWORD }}" | sudo -S docker compose down
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
[submodule "LeterZP"]
|
[submodule "LeterZP"]
|
||||||
path = LeterZP
|
path = LeterZP
|
||||||
url = https://gitea.aklivtsov.tech/LeterZP/Info.git
|
url = ../../LeterZP/Info.git
|
||||||
|
|||||||
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 120 KiB |
|
After Width: | Height: | Size: 111 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 205 KiB |
|
After Width: | Height: | Size: 223 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 298 KiB |
|
After Width: | Height: | Size: 137 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 184 KiB |
|
After Width: | Height: | Size: 180 KiB |
|
After Width: | Height: | Size: 117 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 380 KiB |
|
After Width: | Height: | Size: 146 KiB |
|
After Width: | Height: | Size: 192 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
After Width: | Height: | Size: 147 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 59 KiB |
@@ -7,14 +7,20 @@
|
|||||||
- Сформировать насмотренность и знание вычислительных механизмов (которые воспроизводятся в разных технологиях).
|
- Сформировать насмотренность и знание вычислительных механизмов (которые воспроизводятся в разных технологиях).
|
||||||
- Устранить элементы "магического мышления" и "карго культа".
|
- Устранить элементы "магического мышления" и "карго культа".
|
||||||
## Системная инженерия
|
## Системная инженерия
|
||||||
- [[Понятие системы]]
|
- [Понятие системы](Системная%20инженерия/Понятие%20системы.md)
|
||||||
- [[Компьютерные системы]]
|
- [Компьютерные системы](Системная%20инженерия/Компьютерные%20системы.md)
|
||||||
|
- [Особенности производства аппаратуры](Системная%20инженерия/Особенности%20производства%20аппаратуры.md)
|
||||||
|
- [Hardware and Software](Системная%20инженерия/Hardware%20and%20Software.md)
|
||||||
## Схемотехника
|
## Схемотехника
|
||||||
- [[Цифровая схемотехника]]
|
- [Цифровая схемотехника](Цифровая%20схемотехника/Цифровая%20схемотехника.md)
|
||||||
|
## Теория вычислений
|
||||||
|
- [Модель вычислений](Вычислительные%20системы/Модель%20вычислений.md)
|
||||||
|
- [Процессоры и системы команд](Вычислительные%20системы/Процессоры%20и%20системы%20команд.md)
|
||||||
|
- [Машина фон Неймана](Вычислительные%20системы/Машина%20фон%20Неймана.md)
|
||||||
## Вычислительные архитектуры
|
## Вычислительные архитектуры
|
||||||
- [[Вычислительные архитектуры]]
|
- [Вычислительные архитектуры](Архитектуры/Вычислительные%20архитектуры.md)
|
||||||
## Инструменты low-level
|
## Инструменты low-level
|
||||||
- C Language
|
- C Language
|
||||||
- [[Системные паттерны]]
|
- [Системные паттерны](Системные%20паттерны/Системные%20паттерны.md)
|
||||||
## Сети
|
## Сети
|
||||||
- Компьютерные сети
|
- Компьютерные сети
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
- 32-битная стековая архитектура
|
- 32-битная стековая архитектура
|
||||||
- Главный принцип - команды не имеют операндов в коде. Все данные неявно берутся с веришны стека, результат кладется обратно в стек.
|
- Главный принцип - команды не имеют операндов в коде. Все данные неявно берутся с веришны стека, результат кладется обратно в стек.
|
||||||
- Небольшая пасхалка на [[Evaluate Reverse Polish Notation|вот эту задачу с литкода]]
|
- Небольшая пасхалка на [вот эту задачу с литкода](../../АиСД/Задачи/LeetCode/Evaluate%20Reverse%20Polish%20Notation.md)
|
||||||
## Регистры, флаги и стеки
|
## Регистры, флаги и стеки
|
||||||
- Имеет два независимых аппаратных стека и два регистра-указателя
|
- Имеет два независимых аппаратных стека и два регистра-указателя
|
||||||
### Стеки
|
### Стеки
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
- `>r` - снять элемент с `Data Stack` и положить на `Return Stack`
|
- `>r` - снять элемент с `Data Stack` и положить на `Return Stack`
|
||||||
## Подробнее про умножение и деление
|
## Подробнее про умножение и деление
|
||||||
### `+*`
|
### `+*`
|
||||||
- Как работает умноежение чисел в двоичной системе (`A*S`): смотрим на каждый бит числа A, если бит 1, то прибавляем S к результату, если бит 0, то пропускаем, в конце сдвигаем результат
|
- Как работает умножение чисел в двоичной системе (`A*S`): смотрим на каждый бит числа A, если бит 1, то прибавляем S к результату, если бит 0, то пропускаем, в конце сдвигаем результат
|
||||||
- Как использует эта команда данные
|
- Как использует эта команда данные
|
||||||
1. Регистр `A` - множитель
|
1. Регистр `A` - множитель
|
||||||
2. `S` (второй элемент стека данных) - множимое
|
2. `S` (второй элемент стека данных) - множимое
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
## Учебная архитектура
|
||||||
|
## Реальные VLIW и Эльбрус
|
||||||
|
### Виды параллелизма
|
||||||
|
> [!warning] Эта часть должна переехать в часть лекций
|
||||||
|
1. На уровне инструкций
|
||||||
|
- Конвейризация
|
||||||
|
- Суперскалярность
|
||||||
|
- Длинные машинные слова (very long instruction word)
|
||||||
|
2. На уровне данных
|
||||||
|
- Векторы
|
||||||
|
3. На уровне потоков - многопоточность
|
||||||
|
4. На уровне процессов - много ядер в процессоре
|
||||||
|
### Оптимизация обращений к памяти
|
||||||
|
- Есть спекулятивные команды, по типу спекулятивного чтения. В самом начале процессор читает, а если нигде по итогу не использовалось, то прочитанное значение отваливается.
|
||||||
|
- Оптимизация обращений к памяти в цикле: вместо `load -> alu -> store` компилятор расслаивает итерации и делает `store i -> alu i+1 -> load i+2` (i - номер итерации)
|
||||||
|
### Оптимизация переходов
|
||||||
|
Переход довольно затратная операция для конвейрных процессоров. Виды оптимизаций:
|
||||||
|
1. Штраф за переход и просто все этапы конвейера сбрасываются (самый простой вариант, на практике встречается редко)
|
||||||
|
2. В Эльбрусе - предикаты, выполняются обе ветки (if-else) а потом записывает только то, что в предикате. Превращает Control Flow в Data Flow. Используется только для коротких веток (3-5 команд). Логика: команды сравнения записывают в регистровый файл предикатов 0 или 1. Компилятор ставит абсолютно все команды в поток исполнения (и из if, и из else), но ставит специальные биты в команду: номер предиката, который контроллирует выполнение. Дальше команды исполняются, на этапе декода процессор видит предикат, а на этапе записи в память делает операцию, только если управляющий предикат - 1. (P.S. такое же было и в Intel Itanium)
|
||||||
|
3. Предикт переходов, в cisc - это делает процессор (у него маленькая область видимости, поэтому может быть неэффективно), в vliw - это делает компилятор (компилятор видит всю программу целиком и может отлично с этим справится). Процессор готовится к переходу и загружает команды в конвейер. Эльбрус позволяет подготовавливать до трех переходов одновременно.
|
||||||
|
### Регистровое окно и стек регистров
|
||||||
|
- Процессор содержит несколько сотен регистров, каждая фукнция "заказывает" себе у процессора нужное количество, при этом видимые для функции регистров делятся на три группы: регистры с параметрами, регистры для временных вычислений, регистры с параметрами для вызываемой функции. В момент вызова функции регистровый файл виртуально сдвигается вниз - первая и вторая группы не будут видны вызванной функции. Третья группа становится первой, а новые вторые и третью группы функция снова заказывает.
|
||||||
|
- Если процессору не хватает физических регистров для функции, то процессор сам в фоновом режиме сбрасывает неиспользуемую часть регистрового файла в стек в ОЗУ. При возврате из функции процессор незаметно восстанавливает регистры из стека.
|
||||||
|
- Есть глобальная группа регистров (типичные регистры из cisc, risc)
|
||||||
|
### Безопасность
|
||||||
|
- Несколько стеков: регистры пользователя на одном, адрес возврата и состояние процессора - на другом - защита от buffer overflow и подмены адреса возврата
|
||||||
|
- Процессор различает в памяти указатели и сами данные. В Эльбрусе нельзя создать указатель не из указателя. При этом первичный указатель безопасно получается специальными командами и механизмами в процессоре
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
## Архитектура
|
||||||
|
- 64-битная (процессоры Intel / AMD)
|
||||||
|
- Ассемблер: `NASM`
|
||||||
|
- OC: Linux
|
||||||
|
- Размеры данных:
|
||||||
|
- `byte`
|
||||||
|
- `word` (два байта)
|
||||||
|
- `dword` (4 байта)
|
||||||
|
- `qword` (8 байт)
|
||||||
|
## Регистры общего назначения
|
||||||
|
Все 64-битные регистры начинаются с `R`. Их младшие части можно прочитать отдельно
|
||||||
|
#### База
|
||||||
|
- `RAX` (Accumulator) - аккумулятор, возвращаются результаты функций и номера сисколлов
|
||||||
|
- `RBX` (Base) - обычная переменная
|
||||||
|
- `RCX` (Counter) - счетчик циклов, 4-й аргумент функции, уничтожается сисколлом
|
||||||
|
- `RDX` (Data) - данные, 3-й аргумент функции, второе возвращаемое значение, хранит остаток при делении
|
||||||
|
#### Индексы и указатели
|
||||||
|
- `RDI` (Destination Index) - 1-й аргумент функции
|
||||||
|
- `RSI` (Source Index) - 2-й аргумент фукнции
|
||||||
|
- `RSP` (Stack Pointer) - указатель вершины стека
|
||||||
|
- `RBP` (Base Pointer) - указатель базы стекового кадра
|
||||||
|
#### Новые регистры
|
||||||
|
- `R8, R9` - 5-й и 6-й аргументы функций
|
||||||
|
- `R10, R11` - временные
|
||||||
|
- `R12-R15` - свободные переменные
|
||||||
|
#### Имена частей регистров
|
||||||
|
|
||||||
|
| *64 бита (qword)* | *32 бита (dword)* | *16 бит (word)* | *8 бит (byte)* |
|
||||||
|
| :---------------: | :---------------: | :-------------: | :------------: |
|
||||||
|
| `rax` | `eax` | `ax` | `al` |
|
||||||
|
| `rbx` | `ebx` | `bx` | `bl` |
|
||||||
|
| `rcx` | `ecx` | `cx` | `cl` |
|
||||||
|
| `rdx` | `edx` | `dx` | `dl` |
|
||||||
|
| `rdi` | `edi` | `di` | `dil` |
|
||||||
|
| `rsi` | `esi` | `si` | `sil` |
|
||||||
|
| `rsp` | `esp` | `sp` | `spl` |
|
||||||
|
| `rbp` | `ebp` | `bp` | `bpl` |
|
||||||
|
| `r8..15` | `r8..15d` | `r8..15w` | `r8..15b` |
|
||||||
|
## Соглашение о вызовах
|
||||||
|
1. Аргументы: `RDI`, `RSI`, `RDX`, `RCX`, `R8`, `R9`
|
||||||
|
2. Возврат значения: `RAX` и `RDX`
|
||||||
|
3. Сохранность регистров
|
||||||
|
- *Caller-saved* (портятся при вызове `call`): `RAX`, `RCX`, `RDX`, `RSI`, `RDI`, `R8-R11`. Обязанность запоминать их - на вызывающем
|
||||||
|
- *Callee-saved* (обязаны остаться неизменными): `RBX`, `RBP`, `RSP`, `R12-R15`. Обязанность вернуть их в исходное состояние - на функции
|
||||||
|
4. Выравнивание стека
|
||||||
|
- В момент `call` значение регистра `RSP` должно быть кратно 16
|
||||||
|
- При входе в функцию стек сдвинут адресом возврата, поэтому RSP % 16 == 8. Перед внутренним call нужно выровнять стек (сделать push или sub rsp, 8)
|
||||||
|
## Самые нужные сисколлы
|
||||||
|
Все сисколлы [тут](https://gitlab.se.ifmo.ru/programming-languages/cse-programming-languages-fall-2026/main/-/blob/master/docs/system-calls.md)
|
||||||
|
|
||||||
|
| Назначение | RAX | RDI (fd) | RSI (buffer) | RDX (size) | Возврат в RAX |
|
||||||
|
| :----------------------- | :--- | :----------- | :------------- | :---------- | :--------------------------------------------- |
|
||||||
|
| **Чтение (`sys_read`)** | `0` | `0` (stdin) | Адрес в памяти | Кол-во байт | Кол-во прочитанных байт (0 = EOF, <0 = ошибка) |
|
||||||
|
| **Запись (`sys_write`)** | `1` | `1` (stdout) | Адрес в памяти | Кол-во байт | Кол-во записанных байт |
|
||||||
|
| **Выход (`sys_exit`)** | `60` | Код возврата | - | - | Процесс завершается |
|
||||||
|
## Самые нужные инструкции
|
||||||
|
#### Перемещение данных
|
||||||
|
- `mov A, B` - скопировать B в A
|
||||||
|
- `movzx` - скопировать байт B в регистр A и заполнить старшие биты нулями
|
||||||
|
#### Математика
|
||||||
|
- `add A, B` / `sub A, B` - сложение / вычитание `A = A +/- B`
|
||||||
|
- `inc A` / `dec A` - инкремент / декремент
|
||||||
|
- `neg A` - `A = -A`
|
||||||
|
- `imul A, B` - знаковое умножение `A = A * B`
|
||||||
|
- `mul B` - беззнаковое умножение, умножает `RAX` на B. Старшая часть результата в `RDX`, младшая - в `RAX` (результат - `RDX:RAX`)
|
||||||
|
- `div B` - беззнаковое деление. Делит `RDX:RAX` на B. Частное в `RAX`, остаток в `RDX`
|
||||||
|
#### Логика
|
||||||
|
- `and`, `or`, `not` - побитовое И, ИЛИ, НЕ
|
||||||
|
- `xor A, B` - исключающее ИЛИ (`xor rax, rax` - быстрый способ обнулить регистр)
|
||||||
|
- `test A, B` - побитовое И без сохранения результата (только ставит флаги) - лучший способ проверить регистр на ноль
|
||||||
|
#### Ветвление и переходы
|
||||||
|
- `cmp A, B` - сравнивает A и B, ставит флаги
|
||||||
|
- `jmp метка` - безусловный переход
|
||||||
|
- `je` / `jne` (или `jz` / `jnz`) - прыжок, если `Z = 1` / `Z = 0`
|
||||||
|
- Дли знаковых чисел
|
||||||
|
- `jl` / `jle` (Less / Less or Equal) - меньше / меньше или равно
|
||||||
|
- `jg` / `jge` (Greater / Greater or Equal) - больше / больше или равно
|
||||||
|
- `js` / `jns` (Sign) - отрицательное / положительное (флаг `S`)
|
||||||
|
- Для беззнаковых чисел:
|
||||||
|
- `jb` / `jbe` (Below / Below or Equal) - меньше / меньше или равно
|
||||||
|
- `ja / jae` (Above / Above or Equal) - больше / больше или равно
|
||||||
|
- Для переполнений
|
||||||
|
- `jc` / `jnc` (Carry)
|
||||||
|
- `jo` / `joc` (Overflow)
|
||||||
|
#### Работа со стеком
|
||||||
|
Растет как в БЭВМ (в сторону уменьшения адресов)
|
||||||
|
- `push A` - кладет 8 байт на стек (`rsp -= 8, [rsp] = A`)
|
||||||
|
- `pop A` - достает 8 байт со стека (`A = [rsp], rsp += 8`)
|
||||||
|
- `sub rsp, 24` - выделить буфер на 24 байта
|
||||||
|
- `add rsp, 24` - освободить буфер
|
||||||
@@ -1,5 +1,9 @@
|
|||||||
## Инструментарий
|
## Инструментарий
|
||||||
- [[Платформа Wrench]]
|
- [Платформа Wrench](Платформа%20Wrench.md)
|
||||||
## Архитектуры
|
## Архитектуры
|
||||||
- [[acc32]]
|
- [x86_64](x86_64.md) (реальная архитектура)
|
||||||
- [[f32a]]
|
- [acc32](acc32.md)
|
||||||
|
- [f32a](f32a.md)
|
||||||
|
- [m68k](m68k.md) (будет)
|
||||||
|
- [risc-iv](risc-iv.md) (будет)
|
||||||
|
- [vliw-iv](vliw-iv.md) (в работе, есть интересные факты про Эльбрус)
|
||||||
@@ -63,6 +63,6 @@
|
|||||||
### Сдвиги
|
### Сдвиги
|
||||||
- Если сдвинуть числа больше чем на 32, то просто зануление - для сдвига влево
|
- Если сдвинуть числа больше чем на 32, то просто зануление - для сдвига влево
|
||||||
- Для сдвигов вправо, если исходное число было положительным - зануление
|
- Для сдвигов вправо, если исходное число было положительным - зануление
|
||||||
- Для сдвигов вправо, если иходное число было отрицательным - `-1`
|
- Для сдвигов вправо, если исходное число было отрицательным - `-1`
|
||||||
### Переходы
|
### Переходы
|
||||||
- В отличие от БЭВМ переходы тут работают иначе. Переходы, которые сравнивают с нулем, учитывают только знак (в бэвм учитывали еще `n+v(mod2)`). Поэтому надо самому реализовывать переходы, которые учитывают специфику доп. кода через `bvz+bltz` например
|
- В отличие от БЭВМ переходы тут работают иначе. Переходы, которые сравнивают с нулем, учитывают только знак (в бэвм учитывали еще `n+v(mod2)`). Поэтому надо самому реализовывать переходы, которые учитывают специфику доп. кода через `bvz+bltz` например
|
||||||
@@ -4,15 +4,15 @@
|
|||||||
- Принцип расчета - воплощение таблицы значений в виде, позволяющем быстро находить нужные зависимости
|
- Принцип расчета - воплощение таблицы значений в виде, позволяющем быстро находить нужные зависимости
|
||||||
- Расчет производится путем выставления линейки в требуемое положение и считывания результата
|
- Расчет производится путем выставления линейки в требуемое положение и считывания результата
|
||||||
|
|
||||||
![[Лог линейка.png]]
|

|
||||||
### Линейка и операция деления
|
### Линейка и операция деления
|
||||||
|
|
||||||
![[Деление на линейке.png]]
|

|
||||||
|
|
||||||
Двигаем делимое напротив делителя, в начале получаем частное
|
Двигаем делимое напротив делителя, в начале получаем частное
|
||||||
### Номограмма и операция умножения
|
### Номограмма и операция умножения
|
||||||
|
|
||||||
![[Номограмма.png]]
|

|
||||||
|
|
||||||
Соединяем две точки, которые хотим перемножить. Пересечение этого отрезка с осью Y - наш результат
|
Соединяем две точки, которые хотим перемножить. Пересечение этого отрезка с осью Y - наш результат
|
||||||
# Табличное исполнение
|
# Табличное исполнение
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
- Принципы расчета воплощены в мехнизмах устройства
|
- Принципы расчета воплощены в мехнизмах устройства
|
||||||
- Расчет производится по шагам (алгоритмически), с учетом переноса между разрядами
|
- Расчет производится по шагам (алгоритмически), с учетом переноса между разрядами
|
||||||
|
|
||||||
![[Арифмометр.png]]
|

|
||||||
# Отличие арифмометра от логарифмической линейки
|
# Отличие арифмометра от логарифмической линейки
|
||||||
1. Рост области определения функций:
|
1. Рост области определения функций:
|
||||||
- для арифмометра: медленный рост сложности устройства, средний рост длительности расчета (зависит от функции)
|
- для арифмометра: медленный рост сложности устройства, средний рост длительности расчета (зависит от функции)
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
### Архитектура эффективного решения
|
### Архитектура эффективного решения
|
||||||
Реконфигурируемый потоковой вычислитель
|
Реконфигурируемый потоковой вычислитель
|
||||||
|
|
||||||
![[Потоковый вычислитель.png]]
|

|
||||||
|
|
||||||
1. Расчетная формула представляется в виде графа
|
1. Расчетная формула представляется в виде графа
|
||||||
2. Каждой вершине графа сопоставляется человек, способный выполнить соответствующую операцию (только одну)
|
2. Каждой вершине графа сопоставляется человек, способный выполнить соответствующую операцию (только одну)
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
6. Для повышения надежности расчетов используются двоирование (две роты, сравниваем результаты, не совпадение - повтор)
|
6. Для повышения надежности расчетов используются двоирование (две роты, сравниваем результаты, не совпадение - повтор)
|
||||||
### Структура белкового вычислителя
|
### Структура белкового вычислителя
|
||||||
|
|
||||||
![[Белковый вычислитель.png]]
|

|
||||||
### Достоинства
|
### Достоинства
|
||||||
1. Радикальный рост производительности (параллелизм инструкций)
|
1. Радикальный рост производительности (параллелизм инструкций)
|
||||||
- Параллельное исполнение независимых операций
|
- Параллельное исполнение независимых операций
|
||||||
@@ -73,11 +73,11 @@
|
|||||||
- Минимальная вариативность процесса
|
- Минимальная вариативность процесса
|
||||||
3. Возможность реконфигурации вычислителя под новую задачу
|
3. Возможность реконфигурации вычислителя под новую задачу
|
||||||
|
|
||||||
![[Конвейризация расчетов.png]]
|

|
||||||
|
|
||||||
Цвета - 3 партии входных данных. Цифры - на каком такте будут на данном этапе вычисления
|
Цвета - 3 партии входных данных. Цифры - на каком такте будут на данном этапе вычисления
|
||||||
### Практика
|
### Практика
|
||||||
На практике все перечисленные механизмы встречаются в современных [[Компьютерные системы|компьютерных системах]], в том числе:
|
На практике все перечисленные механизмы встречаются в современных [компьютерных системах](../Системная%20инженерия/Компьютерные%20системы.md), в том числе:
|
||||||
- В процессорах общего назначения
|
- В процессорах общего назначения
|
||||||
- В специализированных процессорах
|
- В специализированных процессорах
|
||||||
- В распределенных системах
|
- В распределенных системах
|
||||||
@@ -87,7 +87,7 @@
|
|||||||
- вертикальные нити - натянуты равномерно
|
- вертикальные нити - натянуты равномерно
|
||||||
- горизонтальные нити разных цветов, дисбаланс петель с одной из сторон формирует узор
|
- горизонтальные нити разных цветов, дисбаланс петель с одной из сторон формирует узор
|
||||||
|
|
||||||
![[Жаккард.png]]
|

|
||||||
### Проблема создания станка
|
### Проблема создания станка
|
||||||
Плетение полотна:
|
Плетение полотна:
|
||||||
1. Нити разделяются на верхние и нижние по схеме узора
|
1. Нити разделяются на верхние и нижние по схеме узора
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
- Разделение на верхнюю и нижнюю нить нерегулярно
|
- Разделение на верхнюю и нижнюю нить нерегулярно
|
||||||
- "Гребенка" не работает
|
- "Гребенка" не работает
|
||||||
|
|
||||||
![[Обычный ткацкий станок.png]]
|

|
||||||
### Жаккардовый ткацкий станок
|
### Жаккардовый ткацкий станок
|
||||||
Считается первой программно-управляемой машиной
|
Считается первой программно-управляемой машиной
|
||||||
Элементы решения:
|
Элементы решения:
|
||||||
@@ -107,17 +107,17 @@
|
|||||||
- Сильное нажатие и поворот - освободить нить
|
- Сильное нажатие и поворот - освободить нить
|
||||||
- Как автоматизировать регулярное нажатие на кнопочки?
|
- Как автоматизировать регулярное нажатие на кнопочки?
|
||||||
|
|
||||||
![[Идея крючка 1.png]]
|

|
||||||
|
|
||||||
Идея крючка
|
Идея крючка
|
||||||
|
|
||||||
![[Идея крючка 2.png]]
|

|
||||||
### Программное обеспечение
|
### Программное обеспечение
|
||||||
Элементы решения:
|
Элементы решения:
|
||||||
- Пластина с отверстиями позволяет разом "нажать" нужные крючки (перфокарта)
|
- Пластина с отверстиями позволяет разом "нажать" нужные крючки (перфокарта)
|
||||||
- Лента из пластин - программа узора
|
- Лента из пластин - программа узора
|
||||||
|
|
||||||
![[Жаккард программное решение.png]]
|

|
||||||
|
|
||||||
Структура шага работы станка:
|
Структура шага работы станка:
|
||||||
1. Нажатие пластиной на крючки (разделение верхней и нижней)
|
1. Нажатие пластиной на крючки (разделение верхней и нижней)
|
||||||
@@ -151,4 +151,4 @@
|
|||||||
- Линейный рост скорости поиска от количества городов (до 8 штук)
|
- Линейный рост скорости поиска от количества городов (до 8 штук)
|
||||||
- При росте вычислительной сложности по экспоненте
|
- При росте вычислительной сложности по экспоненте
|
||||||
|
|
||||||
Как развитие и скачок произошел переход к использованию электричества в сигналах и состояниях. ([[Цифровая схемотехника]])
|
Как развитие и скачок произошел переход к использованию электричества в сигналах и состояниях. ([Цифровая схемотехника](../Цифровая%20схемотехника/Цифровая%20схемотехника.md))
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
1. Развитие [Машины Тьюринга](Модель%20вычислений.md#Машина%20Тьюринга). Отличия:
|
||||||
|
- Лента заменена на Random-Access Memory (RAM)
|
||||||
|
- Инструкции и данные объединены
|
||||||
|
2. Призвана быть максимально простой в реализации и производстве
|
||||||
|
3. Процедурное программирование и ООП - тот же принцип
|
||||||
|
|
||||||
|

|
||||||
|
## Особенности
|
||||||
|
1. Использование двоичного кодирования
|
||||||
|
- Встречается и троичное, и двоично-десятичное кодирование
|
||||||
|
2. Программное управление. Команды выполняются последовательно
|
||||||
|
- Последовательность и порядок сегодня условны
|
||||||
|
3. Память компьютера однородно хранит данные и программы
|
||||||
|
- Однородность спорна
|
||||||
|
4. Ячейки памяти компьютера имеют адреса. Random-Access Memory
|
||||||
|
- Адрес не сводится к целому числу сегодня
|
||||||
|
- Память не является пассивным элементом компьютера
|
||||||
|
5. Возможность условного перехода
|
||||||
|
- И перехода по иным причинам
|
||||||
|
## Окружение
|
||||||
|
### (Микро)процессор
|
||||||
|
Цифровая схема, которая выполняет операции с внешним источником данных (обычно с памятью или потоком данных)
|
||||||
|
### (Микро)контроллер
|
||||||
|
Микросхема, предназначенная для управления электронными устройствами. Типичный микроконтроллер сочетает функции процессора и периферийных устройств, содержит ОЗУ и/или ПЗУ
|
||||||
|
### Оперативная память (память)
|
||||||
|
Обычно часть компьютерной памяти, в которой хранится выполняемый машинный код, а также входные, выходные и промежуточные данные
|
||||||
|
## Control Unit и DataPath
|
||||||
|
### Control Unit
|
||||||
|
Компонент центрального процессора (CPU), управляющей работой процессора. CU часто использует двоичный декодер для преобразования закодированных инструкций в управляющие сигналы, координирующие работу остальных блоков
|
||||||
|
### DataPath
|
||||||
|
АЛУ, набор регистров и внутренние шины CPU, по которым данные перемещаются между ними
|
||||||
|
|
||||||
|

|
||||||
|
## Виды инструкций
|
||||||
|
1. Работа с памятью: запись констант, копирование данных (память, регистры, порты I/O)
|
||||||
|
2. Арифметческие, логические и битовые операции
|
||||||
|
3. Управляющие операции: переходы, вызов и возврат из подпрограмм
|
||||||
|
4. Инструкции сопроцессоров: загрузка и выгрузка данных, управление сопроцессором
|
||||||
|
## Роль машинного слова
|
||||||
|
Единица данных, которая выбрана естественной для данной архитектуры процессора
|
||||||
|
1. Может быть адресована в памяти
|
||||||
|
2. Передается по шине между памятью и процессором за один раз
|
||||||
|
3. Является стандартной единицей обрабатываемой информации
|
||||||
|
4. Связанные вопросы: формат инструкции, форматы данных, форматы адресов
|
||||||
|
## На практике
|
||||||
|
1. В чистом виде практически не встречаются
|
||||||
|
2. Влияние на индустрию - трудно переоценить
|
||||||
|
3. Элементы архитектуры присутствуют в подавляющем большинстве процессоров и средств разработки
|
||||||
|
4. Структурное программирование, ООП - наследие фон Неймана
|
||||||
|
5. Ловушка обратной совместимости
|
||||||
|
## Вариации
|
||||||
|
1. Память команд и данных: Принстонская и Гарвардская архитектуры
|
||||||
|
- Типы данных, адресные пространства, машинные слова, теги
|
||||||
|
2. Принцип работы с данными в DataPath
|
||||||
|
- Accumulator, Register-to-Register, Register-to-Memory, Memory-to-Memory, Stack Architectures
|
||||||
|
3. "Мощность" системы команд: CISC, RISC
|
||||||
|
- Количество операндов (0, 1, 2, ...)
|
||||||
|
- Кодирование инструкций
|
||||||
|
- Принципы построения Control Unit
|
||||||
|
4. Адресация операндов
|
||||||
|
Кроме того: ввод-вывод, параллелизм, иерархия памяти и тп
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
MoC - Model of Computation
|
||||||
|
1. MoC предоставляет язык для описания моделей процессов/программ/структур
|
||||||
|
2. MoC определяет возможности вычислительной машины
|
||||||
|
3. MoC характеризует, как исполняется модель (программа): возможные состояния вычислителя, их последовательность, правила переходов (детерменированные или нет)
|
||||||
|
4. MoC, обычно, минималистичны относительно реальных вычислителей
|
||||||
|
## Последовательные модели
|
||||||
|
Sequential models
|
||||||
|
Относительно просто реализуются в виде аппаратных схем
|
||||||
|
### Конечные автоматы
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Несколько наборов состояний системы и условия переходов между ними
|
||||||
|
#### Автомат с магазинной памятью
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Например, парсеры
|
||||||
|
#### Достоинства
|
||||||
|
- Таблица состояний
|
||||||
|
- Верифицируемость переходов
|
||||||
|
- Простая реализация в схемотехнике и ПО
|
||||||
|
### Машина Тьюринга
|
||||||
|
Включает:
|
||||||
|
- Неограниченную двустороннюю ленту, разделенную на ячейки
|
||||||
|
- Устройство управления (головка записи-чтения), которое может находиться в конечном числе состояний
|
||||||
|
Управляющее устройство может:
|
||||||
|
- Перемещаться по ленте влево и вправо
|
||||||
|
- Читать и записывать в ячейки символы конечного алфавита
|
||||||
|
Машина Тьюринга
|
||||||
|
1. Не может быть реализована на практике (нет бесконечной ленты)
|
||||||
|
2. Обладает полнотой по Тьюрингу (можно реализовать любой известный алгоритм)
|
||||||
|
3. Проблема остановки
|
||||||
|
4. Данные и управление отделены
|
||||||
|
5. Ориентирована на реализацию
|
||||||
|
### Random Access Machine
|
||||||
|
|
||||||
|

|
||||||
|
## Функциональные модели
|
||||||
|
Functional models
|
||||||
|
Представление вычислительного процесса как совокупности символов и правил их преобразований
|
||||||
|
1. Арифметика
|
||||||
|
2. Лямбда исчисление (полнота по Тьюрингу)
|
||||||
|
3. Combinatory logic
|
||||||
|
4. General recursive functions
|
||||||
|
5. Abstract rewriting systems
|
||||||
|
Программа/данные - математический объект
|
||||||
|
Возможна Тьюринг неполнота
|
||||||
|
### Лямбда исчисление
|
||||||
|
#### 4 вида выражений
|
||||||
|
1. Переменная: $x, y\ \text{и} \ z$
|
||||||
|
2. Константа: $a,b,c$
|
||||||
|
3. Коминация (вызов): $s\ t$
|
||||||
|
4. Абстракция: $\lambda x.s$
|
||||||
|
#### 3 вида редукций/подстановки
|
||||||
|
1. Переименование переменных: $\lambda u.u\ v \xrightarrow{\alpha} \lambda w.w\ v$
|
||||||
|
2. Применение функции (подстановка аргумента): $(\lambda x.s)\ t \xrightarrow{\beta} s[t/x]$
|
||||||
|
3. Сокращение аргумента: $\lambda u.v\ u \xrightarrow{\eta} v$
|
||||||
|
## Параллельные модели
|
||||||
|
Системы, включающие несколько взаимодействующих процессов
|
||||||
|
- Kahn process networks - однонаправленные каналы с неограниченными буферами (+- как в гошке)
|
||||||
|
- Actor model - отправка сообщений в "почтовые ящики" (как в Erlang)
|
||||||
|
- Discrete Event - события в заданные моменты времени (цифровые схемы)
|
||||||
|
- Multi-Thread Model - общая память (как в джаве)
|
||||||
|
- Synchronous Data Flow - синхронизированные потоки данных
|
||||||
|
## Близкие понятия
|
||||||
|
### Парадигмы программирования
|
||||||
|
Способ классификации языков программирования на основе их функций. Языки могут относиться к нескольким парадигмам
|
||||||
|
### Стиль программирования
|
||||||
|
Это набор правил или рекомендации, используемых при написании исходного кода компьютерной программы
|
||||||
|
## Применение на практике
|
||||||
|
1. Computer Science. Формальные модели
|
||||||
|
2. Дизайн ЯПов
|
||||||
|
3. Ограничение творческого порыва, контроль сложности
|
||||||
|
4. Модель-ориентированная инженерия
|
||||||
|
## Model-Driven Engineering
|
||||||
|
1. Разработка через моделирование предметной области
|
||||||
|
2. Автоматическая генерация кода из моделей
|
||||||
|
3. Повышение уровня абстракции при разработке
|
||||||
|
4. Сокращение разрыва между требованиями и реализацией
|
||||||
|
5. Улучшение коммуникации между заинтересованными сторонами
|
||||||
|
6. Снижение сложности разработки масштабных систем
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
## Реле -> Программируемые логические контроллеры
|
||||||
|
### Проблемы автоматизации релейными схемами
|
||||||
|
- Плохо масштабируется
|
||||||
|
- Сложная настройка и поддержка
|
||||||
|
- Ненадежность сложных схем
|
||||||
|
- Проблема ведения документации
|
||||||
|
### ПЛК
|
||||||
|
- Специальная разновидность электронной вычислительной машины
|
||||||
|
- Особенности
|
||||||
|
1. [Управляющие системы](../Системная%20инженерия/Управляющие%20системы.md)
|
||||||
|
2. Законченные устройства для встроенного использования
|
||||||
|
3. Специализация ввода-вывода, модульность
|
||||||
|
4. Выделение инструментальной составляющей
|
||||||
|
5. Эксплуатация в тяжелых условиях
|
||||||
|
### Типовое устройство ПЛК
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- Существуют и полностью программные реализации
|
||||||
|
- Отделение инструментальной составляющей
|
||||||
|
P.S. оптическая изоляция нужна, чтобы не сгорел сам ПЛК, а лишь модули ввода/вывода (на входе - защита от большого напряжения, на выходе - если модуль вывода выйдет из строя, то начнет накапливаться ток - от этого и защита)
|
||||||
|
### Программирование ПЛК (1 штука)
|
||||||
|
- **IEC 61121** - standard for programmable controllers
|
||||||
|
- Языки для АСУТП (автоматизированная система управления технологическим процессом)
|
||||||
|
1. Ladder Diagram (релейно-контактные схемы)
|
||||||
|
2. Function Block Diagram (функциональные блоковые диаграммы)
|
||||||
|
3. Sequential Function Chart (последовательные функциональные диаграммы)
|
||||||
|
4. Structured Text (структурированный текст)
|
||||||
|
- Почему именно они
|
||||||
|
1. Использование не программистами
|
||||||
|
2. Визуальность
|
||||||
|
3. Формальные свойства, реальное время
|
||||||
|
|
||||||
|

|
||||||
|
### Программирование ПЛК (N штук)
|
||||||
|
- **IEC 61499** - Standard for distributed Automation
|
||||||
|
- System of Systems
|
||||||
|
- Разделение управления и данных
|
||||||
|
- Интероперабельность по данным (возможность обмена данными между разными системами, даже разных фирм)
|
||||||
|
|
||||||
|

|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
## Инорфмационный процессор
|
||||||
|
- Система (электрическая, механическая или биологическая), которая принимает информацию (последовательность символов или состояний) в одной форме и обрабатывает (преобразует) ее в другую форму
|
||||||
|
- Например: исходный сигнал в статистику, посредством алгоритмического процесса
|
||||||
|
- Включает:
|
||||||
|
1. Ввод
|
||||||
|
2. Процессор
|
||||||
|
3. Хранилище
|
||||||
|
4. Вывод
|
||||||
|
## Универсальный процессор
|
||||||
|
Позволяет решать широкий круг задач, настройка которых производится после производства "по месту" или в run-time
|
||||||
|
### Примечания
|
||||||
|
1. Универсальность != полнота по Тьюрингу
|
||||||
|
2. Теоретическая универсальность != практическая универсальность
|
||||||
|
3. Универсальность противоречит эффективности
|
||||||
|
4. Современный процессор - совокупность программного и аппаратного обеспечения
|
||||||
|
### Свойства
|
||||||
|
1. [Hardware and Software](../Системная%20инженерия/Hardware%20and%20Software.md) (двухэтапное производство)
|
||||||
|
2. Полнота по Тьюрингу
|
||||||
|
3. Отсутствие "серьезных" ограничений на "объем" программы
|
||||||
|
4. Изменяемость ПО
|
||||||
|
## Виды процессоров
|
||||||
|
1. Application-Specific Integrated Circuit
|
||||||
|
2. Coarse-Grained Reconfigurable Arrays
|
||||||
|
3. Field-Programmable Gate Array
|
||||||
|
4. Digital Signal Processor
|
||||||
|
5. Graphics Processing Unit
|
||||||
|
6. Central Processing Unit
|
||||||
|
|
||||||
|

|
||||||
|
## Архитектура процессора
|
||||||
|
То, как видит компьютер программист. Определена набором команд (язык), местом нахождения операндов (регистры и память) и вычислительными механизмами (кеш, прерывания и тд)
|
||||||
|
1. Множество разных [архитектур](../Архитектуры/Вычислительные%20архитектуры.md)
|
||||||
|
2. Чтобы понять архитектуру, нужно знать ее язык
|
||||||
|
3. Слова в языке компьютера - "инструкции" или "команды"
|
||||||
|
4. Словарный запас - "система команд"
|
||||||
|
## Микроархитектура процессора
|
||||||
|
Соединение простейших цифровых элементов в логические блоки, предназначенные для выполнения команд определенной архитектуры
|
||||||
|
### Примечания
|
||||||
|
1. Описывает, как в процессоре расположены и соединены друг с другом регистры, АЛУ, конечные автоматы, блоки памяти, интерфейсы ввода-вывода и тп
|
||||||
|
2. У каждой архитектуры может быть много микроархитектур, обеспечивающих разное соотношение производительности, цены, сложности, технической эстетики. Они смогут выполнять одни и те же программы
|
||||||
|
3. Если ISA и микроархитектура отличаются на уровне MoC - обычно требуется уровень виртуализации (ПО, аппаратура, транслятор и тд)
|
||||||
|
## Система команд (ISA)
|
||||||
|
- Instruction Set Architecture
|
||||||
|
- Абстрактная модель процессора, формирующая интерфейс взаимодействия между программным обеспечением и процессором
|
||||||
|
- Производительность, энергопотребление и задержки часто не рассматриваются
|
||||||
|
### Что входит
|
||||||
|
1. Типы данных
|
||||||
|
2. Модель памяти, система и методы адресации
|
||||||
|
3. Набор инструкций
|
||||||
|
4. Механизмы обработки прерываний и исключений
|
||||||
|
5. Методы ввода и вывода
|
||||||
|
### Машинное слово
|
||||||
|
Фрагмент данных фиксированного размера, обрабатываемый как единое целое процессором
|
||||||
|
### Разнообразие систем команд
|
||||||
|
1. Действие над памятью/регистрами
|
||||||
|
- Произвольной сложности и длины (CISC)
|
||||||
|
- Фиксированного формата (RISC)
|
||||||
|
2. Действие без указания обрабатываемых данных (стековый)
|
||||||
|
3. Управляющие сигналы процессора под видом команды (NISC)
|
||||||
|
4. Группа команд под видом одной команды (VLIW)
|
||||||
|
5. Действие над шиной данных (TTA)
|
||||||
|
6. Команды без последовательного исполнения (редукционные)
|
||||||
|
7. Система команд из одной команды (URISC)
|
||||||
|
8. Управляющие сигналы процессоров под видом команды (NITTA)
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
- **Hardware** производится один раз и дальше не меняется, не корректируется
|
||||||
|
- **Software** адаптируется под задачу, легко изменяется
|
||||||
|
- Разделены по времени/специальности: разные дисциплины и разные индустрии
|
||||||
|
## Как разделить HW/SW
|
||||||
|
1. Определяем возможности "конфигурирования":
|
||||||
|
- Заложенные при проектировании - интерфейс задокументирован и стабилен (ISA, API)
|
||||||
|
- Незадокументированные (нецелевое использование, дыра в безопасности) - используется то, что интерфейсом не гарантировано но работает
|
||||||
|
2. Фиксируем интерфейс "конфигурирования"
|
||||||
|
- Набор механизмов
|
||||||
|
- Модель вычислений
|
||||||
|
- Интструментальные средства
|
||||||
|
## Конфигурирование [РЭА](Особенности%20производства%20аппаратуры.md#Монтаж%20радиоэлектронной%20аппаратуры%20(РЭА))
|
||||||
|
1. Макетные платы
|
||||||
|
2. Печатные платы: перерезать, навесить дорожку
|
||||||
|
3. Джамперы
|
||||||
|
4. Платы расширения
|
||||||
|
- Вычислительные платы
|
||||||
|
- Порты ввода/вывода
|
||||||
|
- Dendy (память программ и графическая память)
|
||||||
|
## Реконфигурация. Коммутация
|
||||||
|
### Реконфигурируемые архитектуры
|
||||||
|
Архитектуры, где задача отображается в структуру вычислителя (пространственно, spatial), а не выполняется потоком инструкций. В отличие от ASIC, это структура может быть перенастроена после изготовления
|
||||||
|
1. Программируемые логические интеграционные схемы
|
||||||
|
2. Крупногранулярные реконфигурируемые массивы (CGRA)
|
||||||
|
3. Выстраивание людей для расчета таблиц
|
||||||
|
## Программное управление
|
||||||
|
1. Данные (программы) определяют то, какой прикладной процесс будет разворачиваться
|
||||||
|
2. Количество уровней исполнения/интерпретации данных ограничено только целесообразностью
|
||||||
|
**Временные вычисления** - одна и та же схема последовательно проходит через разные состояния во времени
|
||||||
|
## Аппаратное обеспечение
|
||||||
|
Электронные и механические части вычислительного устройства, входящие в состав системы. Включает: компьютеры и логические устройства, внешние устройства и диагностическую аппаратуру, энергетическое оборудование
|
||||||
|
## Программное обеспечение (ПО)
|
||||||
|
Совокупность программ и программных документов необходимых для эксплуатации. Позволяет аппаратному обеспечению выполнять функции
|
||||||
|
## Аппаратура и ПО != Hardware и Software
|
||||||
|
1. Программная/аппаратная составляющая слабо связаны с SW/HW:
|
||||||
|
- Minix - ОС встроена в Intel ME/CSME
|
||||||
|
- Микропрограммное обеспечение
|
||||||
|
2. Часто аппаратурой называют то, что работает как аппаратное обеспечение
|
||||||
|
- Virutal-Computer, Virtual-Network, Virtual-Volume, etc
|
||||||
|
- Реконфигурируемые архитектуры (ПЛИС, CGRA)
|
||||||
|
3. Разделение на SW/HW зависит в большей степени от способа использования
|
||||||
|
- Hardware - тяжело/долго/дорого поменять
|
||||||
|
- Software - легко/быстро/дешево поменять
|
||||||
|
## Плюсы и минусы ПО/SW
|
||||||
|
### Часть плюсов
|
||||||
|
1. Быстрый цикл разработки, CI/CD и тд
|
||||||
|
2. Меняем у пользователя
|
||||||
|
3. Пользователь - Beta-тестер
|
||||||
|
### Часть минусов
|
||||||
|
1. Высокая сложность программ
|
||||||
|
2. Безопасность
|
||||||
|
3. Культура разработки. Верификация
|
||||||
|
## Типовое HW/SW проектирование
|
||||||
|
### Проектируем аппаратуру
|
||||||
|
- Система команд и вычислительные механизмы
|
||||||
|
- Интерфейсы управления аппаратурой
|
||||||
|
- Цифровая схематехника, система команд
|
||||||
|
### Пишем программу
|
||||||
|
- Прикладная задача
|
||||||
|
- Язык и библиотеки
|
||||||
|
- Система команд и вычислительные механизмы (виртуальная память, прерывания)
|
||||||
|
- Интерфейсы управления аппаратурой
|
||||||
|
### Проблемы
|
||||||
|
1. Излишне шаблонное проектирование
|
||||||
|
2. Высокие интеграционные риски
|
||||||
|
3. Последовательная разработка (сроки)
|
||||||
|
## Hardware/Software CoDesign
|
||||||
|
Мы проектируем систему
|
||||||
|
1. Разработка интерфейса HW/SW (системы команд)
|
||||||
|
2. Разработка моделей HW/SW, для получения обратной связи
|
||||||
|
3. Разработка HW/SW, верификация моделей
|
||||||
|
4. Заменая моделей на HW/SW
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
В итоге: сокращение цикла разработки
|
||||||
|
## Как выбирать инструменты для разработки Software
|
||||||
|
1. От доступного Hardware и инструментальных средств
|
||||||
|
2. От доступной команды разработки
|
||||||
|
3. От прикладной задачи
|
||||||
|
- От области (библиотеки)
|
||||||
|
- От модели вычислений (принципов организации вычислительного процесса: параллелизм, конвейризация, оптимизации и тд)
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
3. Кластерные и облачные вычисления
|
3. Кластерные и облачные вычисления
|
||||||
## История
|
## История
|
||||||
|
|
||||||
![[История инф систем.png]]
|

|
||||||
|
|
||||||
1. Mainframes - большие компьютерные системы, колоды перфокарт. Пакетный режим, долго считает
|
1. Mainframes - большие компьютерные системы, колоды перфокарт. Пакетный режим, долго считает
|
||||||
2. Minis - миниЭВМ, компьютеры значительно меньше, эксклюзивный доступ к компьютеру, человек логиниться уже под своим юзером, а не кучу людей на одно вычисление
|
2. Minis - миниЭВМ, компьютеры значительно меньше, эксклюзивный доступ к компьютеру, человек логиниться уже под своим юзером, а не кучу людей на одно вычисление
|
||||||
@@ -10,8 +10,8 @@
|
|||||||
- станок
|
- станок
|
||||||
- и т.п.
|
- и т.п.
|
||||||
## Классификация компьютерных систем
|
## Классификация компьютерных систем
|
||||||
1. [[Информационные системы]]
|
1. [Информационные системы](Информационные%20системы.md)
|
||||||
2. [[Управляющие системы]]
|
2. [Управляющие системы](Управляющие%20системы.md)
|
||||||
|
|
||||||
Про [[Уровни компьютерных систем]]
|
Про [Уровни компьютерных систем](../Системная%20инженерия/Уровни%20компьютерных%20систем.md)
|
||||||
История: [[Докомпьютерные вычисления]]
|
История: [Докомпьютерные вычисления](Докомпьютерные%20вычисления.md)
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
Задача производства: превратить документацию в изделие
|
||||||
|
## Монтаж радиоэлектронной аппаратуры (РЭА)
|
||||||
|
### Ключевые тенденции
|
||||||
|
1. Рост уровня интеграции
|
||||||
|
2. Снижение затрат на производство изделия
|
||||||
|
3. Усложнение производственной цепочки
|
||||||
|
### Навесной монтаж
|
||||||
|
Способ монтажа электронных схем, при котором расположенные на изолирующем шасси радиоэлементы соединяются друг с другом проводами или непосредственно выводами
|
||||||
|
#### Достоинства
|
||||||
|
1. Простота производства
|
||||||
|
2. Простота подготовки производства
|
||||||
|
3. Гибкость
|
||||||
|
#### Недостатки
|
||||||
|
1. Сложность автоматизации, дорого в серии
|
||||||
|
2. Надежность
|
||||||
|
3. Плотность ограничена прямотой рук монтажника
|
||||||
|
|
||||||
|
На макетной плате
|
||||||
|
|
||||||
|

|
||||||
|
### Монтаж на печатную плату
|
||||||
|
Печатная плата - пластина из диэлектрика, на поверхности и/или в объеме которой сформированы электропроводящие цепи электронной схемы. Электрическое и механическое соединение компонентов
|
||||||
|
Различают:
|
||||||
|
- одно- и двухслойные платы
|
||||||
|
- многослойные платы
|
||||||
|
## Виды монтажа компонентов
|
||||||
|
- Выводной (в отверстие)
|
||||||
|
- Поверхностный
|
||||||
|
- Встроенный
|
||||||
|
## Поверхностный монтаж (SMD) и Surface-mount technology (SMT)
|
||||||
|
|
||||||
|

|
||||||
|
### Виды SMD компонентов
|
||||||
|
|
||||||
|

|
||||||
|
### Встроенные компоненты
|
||||||
|
|
||||||
|

|
||||||
|
### Достоинства
|
||||||
|
1. Автоматизация
|
||||||
|
2. Плотность размещения компонентов
|
||||||
|
3. Размеры
|
||||||
|
4. Стоимость в серии
|
||||||
|
### Недостатки
|
||||||
|
1. Необходимость подготовки производства
|
||||||
|
2. Удлинение производственной цепочки
|
||||||
|
3. Сложность внесения изменений
|
||||||
|
### Гибкость
|
||||||
|
1. Джампер (by design)
|
||||||
|
2. "Перерезать дорожку"
|
||||||
|
3. "Навесная дорожка"
|
||||||
|
### Производственная цепочка
|
||||||
|
|
||||||
|

|
||||||
|
## Интегральные схемы. Кремниевое произодство
|
||||||
|
|
||||||
|

|
||||||
|
### Кремниевый песок
|
||||||
|
Начало производственной цепочки
|
||||||
|
|
||||||
|

|
||||||
|
### Выращиваем монокристалл кремния (буля
|
||||||
|
|
||||||
|

|
||||||
|
### Производим подложку будущих чипов (Wafer)
|
||||||
|
|
||||||
|

|
||||||
|
### Фотолитография и "море" транзисторов
|
||||||
|
"свет-шаблон-фоторезист"
|
||||||
|
1. На кремниевую подложку наносят материал для рисунка
|
||||||
|
2. Наносится фоторезист
|
||||||
|
3. Экспонирование через фотошаблон
|
||||||
|
4. Удаление отработанного фоторезиста
|
||||||
|
|
||||||
|

|
||||||
|
### Interconnect
|
||||||
|
|
||||||
|

|
||||||
|
### Структура чипа в разрезе
|
||||||
|
|
||||||
|

|
||||||
|
### Извлечение будущих чипов
|
||||||
|
|
||||||
|

|
||||||
|
### Корпус и контакты
|
||||||
|
|
||||||
|

|
||||||
|
### Современный степпер (засветка фотошаблона)
|
||||||
|
|
||||||
|

|
||||||
|
### Надежность
|
||||||
|
Производственный брак неизбежен: не все транзисторы на пластине работают корректно
|
||||||
|
**Чип биннинг** - один и тот же кристалл продается под разными марками: дефектные или нестабильные блоки блокируются программно или лазером
|
||||||
|
1. Разные частоты процессоров -> разные SKU из одного wafer
|
||||||
|
2. Core Single / Core Duo / Core Quad -> одинаковый кристалл, разное число активных ядер
|
||||||
|
3. Intel Pentium / Celeron -> урезанные Core с отключенными кэшем и функциями
|
||||||
|
## Реальный мир
|
||||||
|
### Производство
|
||||||
|
1. Логистика
|
||||||
|
2. Склады
|
||||||
|
3. Специалисты
|
||||||
|
4. Производственная цепочка
|
||||||
|
5. Тестирование
|
||||||
|
6. Упаковка
|
||||||
|
7. Дистрибуция
|
||||||
|
8. Гарантийный ремонт
|
||||||
|
### Эксплуатация
|
||||||
|
1. Амортизация. Выход оборудования из строя
|
||||||
|
2. Необходимость физического доступа
|
||||||
|
3. Особенности среды эксплуатации
|
||||||
|
4. Долгосрочные эффекты
|
||||||
|
### Сложность изменений
|
||||||
|
1. Чем совершеннее технология, тем сложнее внести изменения
|
||||||
|
2. Физический контакт
|
||||||
|
### Варианты замены устаревшей аппаратуры
|
||||||
|
1. Перепроектирование на новой элементной базе
|
||||||
|
2. Модульная организация. Стандартные интерфейсы. Имитация старых систем
|
||||||
|
3. Виртуализация
|
||||||
|
|
||||||
|
Как решаем проблемы аппаратуры - [Hardware and Software](Hardware%20and%20Software.md)
|
||||||
@@ -11,10 +11,10 @@
|
|||||||
## 1. Система как совокупность частей
|
## 1. Система как совокупность частей
|
||||||
Система состоит из подсистем, которые в свою очередь тоже являются системами, и так далее - иерархия систем
|
Система состоит из подсистем, которые в свою очередь тоже являются системами, и так далее - иерархия систем
|
||||||
|
|
||||||
![[Иерархия систем.png]]
|

|
||||||
### Структура системы
|
### Структура системы
|
||||||
|
|
||||||
![[Структура системы.png]]
|

|
||||||
|
|
||||||
Одна система при разных взглядах. При разных взглядах на систему что-то может и совпадать. В зависимости от нужд от системы - она меняется.
|
Одна система при разных взглядах. При разных взглядах на систему что-то может и совпадать. В зависимости от нужд от системы - она меняется.
|
||||||
Например: дом с точки зрения сантехника, электрика и строителя
|
Например: дом с точки зрения сантехника, электрика и строителя
|
||||||
@@ -55,6 +55,6 @@
|
|||||||
5. Рассмотрения ее обеспечивающих систем
|
5. Рассмотрения ее обеспечивающих систем
|
||||||
## Фундаментальная проблема систем
|
## Фундаментальная проблема систем
|
||||||
Множественность точек зрения на систему. Систему может разрушить проблема коммуникации при разработке
|
Множественность точек зрения на систему. Систему может разрушить проблема коммуникации при разработке
|
||||||
Формальный способ зафиксировать эти точки зрения и передать их другим - [[Понятие архитектуры|архитектура]]
|
Формальный способ зафиксировать эти точки зрения и передать их другим - [архитектура](Понятие%20архитектуры.md)
|
||||||
## Применение в Computer Science
|
## Применение в Computer Science
|
||||||
- [[Компьютерные системы]]
|
- [Компьютерные системы](Компьютерные%20системы.md)
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
Пример, где один код может быть как ИС, так и УС - видеокодек ffmpeg ( 1 сценарий - конвертация видео на сервере - классика ИС, 2 сценарий - воспроизведение на устройстве пользователя - УС)
|
Пример, где один код может быть как ИС, так и УС - видеокодек ffmpeg ( 1 сценарий - конвертация видео на сервере - классика ИС, 2 сценарий - воспроизведение на устройстве пользователя - УС)
|
||||||
## Эволюция
|
## Эволюция
|
||||||
|
|
||||||
![[Эволюция УС.png]]
|

|
||||||
|
|
||||||
1. Информационная УС - объект управления + кабели (тот же мейнфрейм, только без входного пакета данных, данные были всегда одни и те же)
|
1. Информационная УС - объект управления + кабели (тот же мейнфрейм, только без входного пакета данных, данные были всегда одни и те же)
|
||||||
2. Встроенные системы - большая интеграция, ну и размеры стали меньше
|
2. Встроенные системы - большая интеграция, ну и размеры стали меньше
|
||||||
@@ -22,4 +22,7 @@
|
|||||||
- *Языки* (Languages) - на чем описываем/пишем
|
- *Языки* (Languages) - на чем описываем/пишем
|
||||||
- *Типы* (Types) - предопределенные платформой абстракции и структуры данных
|
- *Типы* (Types) - предопределенные платформой абстракции и структуры данных
|
||||||
- *Экземпляры* (Instances) - готовые, предопределенные платформой объекты и компоненты
|
- *Экземпляры* (Instances) - готовые, предопределенные платформой объекты и компоненты
|
||||||
- *Шаблоны* (Patterns) - связывают языки, типы и экземпляры, задают повторяемые решения (про [[Системные паттерны]])
|
- *Шаблоны* (Patterns) - связывают языки, типы и экземпляры, задают повторяемые решения (про [Системные паттерны](../Системные%20паттерны/Системные%20паттерны.md))
|
||||||
|
## Принципы формирования уровней (платформ)
|
||||||
|
- **Принцип развития иерархически систем Седова** - закономерности и механизмы, по которым развиваются сложные иерархические системы. Ключевой принцип: ограничение разнообразия на нижележащем уровне для получения разнообразия на вышележащем уровне
|
||||||
|
- **Метасистемный подход** - концепция, предложенная Валентином Турчиным, описывающая процесс перехода системы на новый уровень организации, становясь метасистемой. В этом процессе несколько систем интегрируются в одну более сложную, обладающую новыми свойствами
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
## Кодирование
|
||||||
|
### Двоичное кодирование
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### Достоинства
|
||||||
|
1. Надежно и помехоустойчиво
|
||||||
|
2. Простая арифметика
|
||||||
|
3. Диапазоны и точность наращиваются разрядностью (слева и справа соотвественно)
|
||||||
|
4. Погрешности "by design", а не "by implementation"
|
||||||
|
#### Недостатки
|
||||||
|
1. Нечитаемое представление
|
||||||
|
2. Простые десятичные дроби записываются в виде бесконечных двоичных дробей
|
||||||
|
3. Дискретное кодирование сигналов (точность)
|
||||||
|
## Машинное слово. Представления данных
|
||||||
|
- Машинное слово - единица данных, естественная для обработки вычислителем
|
||||||
|
- Примеры: сложение, пересылка и т.п.
|
||||||
|
- Целые числа
|
||||||
|
- Позиционные системы счисления
|
||||||
|
- Дополнительный код
|
||||||
|
- Big & Little endian
|
||||||
|
- Дроби
|
||||||
|
- С фиксированной точкой
|
||||||
|
- С плавающей точкой
|
||||||
|
- Перечисления
|
||||||
|
- Двоично-десятичное кодирование
|
||||||
|
- Символы (старые кодировки)
|
||||||
|
- Тегированные данные
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Классификация типов по версии IBM
|
||||||
|
|
||||||
|

|
||||||
|
## Код Грея и BCD
|
||||||
|
### Код Грея
|
||||||
|
Две "соседние" кодовые комбинации различаются только в одном двоичном разряде
|
||||||
|
### BCD
|
||||||
|
Форма записи рациональных чисел, когда каждый десятичный разряд числа записывается в виде его четырехбитного двоичного кода
|
||||||
|
|
||||||
|

|
||||||
|
### Base64 и Base58
|
||||||
|
### Base64
|
||||||
|
Стандарт кодирования двоичных данных при помощи только 64 символов ASCII. Алфавит кодирования содержит латинские символы A-Z, a-z, цифры 0-9 (всего 62 знака) и 2 дополнительных символа
|
||||||
|
|
||||||
|

|
||||||
|
### Base58
|
||||||
|
Модификация Base64 для избежания неоднозначных символов (0, I, O, |). В конце сообщения - хешсумма (checksum)
|
||||||
@@ -2,4 +2,5 @@
|
|||||||
- Сторожевые таймеры - микроконтроллеры, OC/гипервизоры, оркестраторы
|
- Сторожевые таймеры - микроконтроллеры, OC/гипервизоры, оркестраторы
|
||||||
- Кеши и когерентность - CPU, OC (page cache), диски, CDN, браузер
|
- Кеши и когерентность - CPU, OC (page cache), диски, CDN, браузер
|
||||||
- Прерывания и события - аппартные IRQ, сигналы OC, event loop, message queue
|
- Прерывания и события - аппартные IRQ, сигналы OC, event loop, message queue
|
||||||
- Системы команд - ISA процессора, байткод виртуальных машин ([[JVM]], CLR), API/протоколы (свой Language на каждом уровне), DSL
|
- Системы команд - ISA процессора, байткод виртуальных машин ([JVM](../../Программирование%20на%20Java/JVM/JVM.md), CLR), API/протоколы (свой Language на каждом уровне), DSL
|
||||||
|
- [Представление данных](Представление%20данных.md)
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
## Цифровая схемотехника. Булев базис
|
||||||
|
### Элементы цифровой схемотехники
|
||||||
|
1. Двоичная логика
|
||||||
|
2. Полный набор булевых функций
|
||||||
|
- И, ИЛИ, НЕ
|
||||||
|
- Штрих Шеффера ($x|y=\overline{xy}$)
|
||||||
|
- Стрелка Пирса ($x \downarrow y = \overline{x \lor y}$)
|
||||||
|
3. [Комбинационные схемы](../Комбинационные%20схемы/Комбинационные%20схемы.md)
|
||||||
|
4. Триггер - хранение состояния
|
||||||
@@ -13,13 +13,13 @@
|
|||||||
- `( )` - нормально неактивный актуатор
|
- `( )` - нормально неактивный актуатор
|
||||||
- `(\)` - нормально активный актуатор
|
- `(\)` - нормально активный актуатор
|
||||||
|
|
||||||
![[Реле 1.png]]
|

|
||||||
## Управление двигателем
|
## Управление двигателем
|
||||||
Классическая схема включения электродвигателя с аварийной остановкой
|
Классическая схема включения электродвигателя с аварийной остановкой
|
||||||
|
|
||||||
![[Реле двигатель.png]]
|

|
||||||
|
|
||||||
![[Реле двигатель 2.png]]
|

|
||||||
## Практика применения реле
|
## Практика применения реле
|
||||||
1. Когда-то использовали, чтобы делать компьютеры
|
1. Когда-то использовали, чтобы делать компьютеры
|
||||||
2. Непосредственное применение, силовые шкафы управления. Высокий ток, неблагоприятная среда эксплуатации
|
2. Непосредственное применение, силовые шкафы управления. Высокий ток, неблагоприятная среда эксплуатации
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
### Комбинационная схема
|
||||||
|
Схема, составленная из набора логических элементов, в совокупности реализующая заданную таблицу истинности
|
||||||
|
### Простейшие элементы комбинационных схем
|
||||||
|
|
||||||
|

|
||||||
|
### КС: Возможности
|
||||||
|
Реализация функций - отображение множества A на множество B
|
||||||
|
A и B конечны (представимы конечной последовательностью бит) -> возможно построить комбинационную схему
|
||||||
|
### КС: Подход к построению
|
||||||
|
1. Через таблицу истинности (черный ящик)
|
||||||
|
2. Через алгоритмизацию (белый ящик, этапность/структура расчета) - логарифмическая линейка и арифмометр
|
||||||
|
#### Через таблицу истинности
|
||||||
|
1. Формирование таблицы истинности
|
||||||
|
2. Запись таблицы истинности в каноническую форму (ДНФ и КНФ), отображаемую в комбинационную схему
|
||||||
|
3. Минимизация булевой функции (сокращаем размер схемы)
|
||||||
|
Пример: шифратор (encoder, 4-to-2)
|
||||||
|
|
||||||
|

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

|
||||||
|
### Свойства комбинационных схем
|
||||||
|
1. Возможность **установления стабильного состояния** при корректном входе (нет циклов)
|
||||||
|
2. **Задержка** установления состояния после изменения входных значений
|
||||||
|
3. **Накопление ошибки** в физическом процессе, что может привести к ошибке на логическом уровне (буферы)
|
||||||
|
4. **Параллелизм уровня бит** (узлы с параллельным включением работают параллельно)
|
||||||
|
5. **Уровень линии**, не сигнал (как и в реле)
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
## Условный оператор. Мультиплексор
|
||||||
|
Схемотехника не может не работать. Уровень не может не быть
|
||||||
|
На уровне комбинационных схем без состояния: спекулятивные вычисления и выбор нужного результата (мультиплексор является классом [комбинационных схем](Комбинационные%20схемы.md))
|
||||||
|
|
||||||
|

|
||||||
@@ -1,7 +1,7 @@
|
|||||||
Асинхронный триггер, который сохраняет свое предыдущее состояние при неактивном состоянии обоих входов и изменяет свой состояние при подаче на один из его входов активного уровня
|
Асинхронный триггер, который сохраняет свое предыдущее состояние при неактивном состоянии обоих входов и изменяет свой состояние при подаче на один из его входов активного уровня
|
||||||
|
|
||||||
![[RS-триггер.png]]
|

|
||||||
|
|
||||||
Реализация на [[Электрическое реле|реле]]:
|
Реализация на [реле](../Базовые%20элементы/Электрическое%20реле.md):
|
||||||
|
|
||||||
![[RS-триггер на реле.png]]
|

|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
### 1. Конвейрное исполнение
|
||||||
|
- Количество стадий - количество паралельных задач
|
||||||
|
- Больше "разбиений" - ниже задержка схемы, выше частота
|
||||||
|
Пример: сравнение 4 чисел:
|
||||||
|
|
||||||
|

|
||||||
|
### 2. Spatial and Temporal Computation
|
||||||
|
- Сложение 16-битных чисел:
|
||||||
|
- Сумматор на 16 бит и 1 такт
|
||||||
|
- Сумматор на 8 бит и 2 такта + система управления
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Сумматор на 8 бит и 2 така + система управления
|
||||||
|
|
||||||
|

|
||||||
|
### 3. Синхронная схемотехника
|
||||||
|
- Меньше гонок, проще синхронизация
|
||||||
|
- Частота по самой медленной комбинационной схеме
|
||||||
|
- Дискредитация входных сигналов по времени
|
||||||
|
- Синхронность - в заданном диапазоне
|
||||||
|
|
||||||
|

|
||||||
|
### 4. Программное управление
|
||||||
|
## Пример схемы с состоянием
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Реализация схемы на Verilog
|
||||||
|
|
||||||
|

|
||||||
|
### Схема детальная с состоянием
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- Так как память используется только для чтения, она выродилась в комбинационную схему
|
||||||
|
- Смысл цветов линий неизвестен...
|
||||||
|
### Временная диаграмма схемы с состоянием
|
||||||
|
|
||||||
|

|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
## Состояние в комбинационной схеме
|
||||||
|
Триггер - класс электронных устройств, обладающих способностью длительно находиться в одном из двух устойчивых состояний и чередовать их под воздействием внешних сигналов
|
||||||
|
Триггер позволяет:
|
||||||
|
1. Зафиксировать состояние линии на длительное время
|
||||||
|
2. Ограничить распространение сигнала по схеме
|
||||||
|
- Разорвать цикл
|
||||||
|
- Сократить задержку в комбинационной схеме
|
||||||
|
### Виды триггеров
|
||||||
|
1. Условие изменения состояния
|
||||||
|
- По фронту
|
||||||
|
- По уровню
|
||||||
|
2. Интерфейс
|
||||||
|
- D-триггер - запоминает состояние входа и выдает его на выход
|
||||||
|
- [RS-триггер](RS-триггер.md)
|
||||||
|
- И другие
|
||||||
@@ -1,8 +1,15 @@
|
|||||||
## Коммутация и базовые элементы
|
## Коммутация и базовые элементы
|
||||||
- [[Базовая логика]]
|
- [Базовая логика](Базовые%20элементы/Базовая%20логика.md)
|
||||||
- [[Логические вентили]]
|
- [Логические вентили](Базовые%20элементы/Логические%20вентили.md)
|
||||||
- [[Электрическое реле]]
|
- [Электрическое реле](Базовые%20элементы/Электрическое%20реле.md)
|
||||||
## Память и состояние
|
|
||||||
- [[RS-триггер]]
|
|
||||||
|
|
||||||
## Комбинационные схемы
|
## Комбинационные схемы
|
||||||
|
- [Комбинационные схемы](Комбинационные%20схемы/Комбинационные%20схемы.md)
|
||||||
|
- [Мультиплексор](Комбинационные%20схемы/Мультиплексор.md)
|
||||||
|
## Схемы с памятью
|
||||||
|
- [Многотактовые схемы](Схемы%20с%20памятью/Многотактовые%20схемы.md)
|
||||||
|
- [Триггеры](Схемы%20с%20памятью/Триггеры.md)
|
||||||
|
## Ключевые отличия схемотехники от программирования
|
||||||
|
1. Все процессы между регистрами всегда происходят параллельно. Не читайте код как алгоритм, рисуйте схему
|
||||||
|
2. Передача сигнала - физический аналоговый процесс. Есть питание и контакт - есть передача. Сигнал не может не идти
|
||||||
|
3. Нет понятия "система остановилась". Она всегда работает, если есть питание
|
||||||
|
4. Таблица истинности неполна - результат будет слуйчайным, но будет (и возможно воспроизводимым)
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
#### Имя процесса в debian
|
||||||
|
```bash
|
||||||
|
xprop WM_CLASS
|
||||||
|
```
|
||||||
|
Дальше кликаем в открытом окне. Нужно чтобы изменить иконку на панели задач, путь: `~/.local/share/applications`
|
||||||
|
#### Установка zsh + oh-my-zsh + powerlevel10k
|
||||||
|
1. Скачиваем zsh: `sudo apt install zsh`
|
||||||
|
2. Меняем оболочку: `chsh -s $(which zsh)`
|
||||||
|
3. Скачиваем `oh-my-zsh`: `sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"`
|
||||||
|
4. Скачиваем два нужных дополнения: `sudo apt install zsh-autosuggestions zsh-syntax-highlighting`
|
||||||
|
5. Скачиваем тему `powerlevel10k`: `git clone --depth=1 https://github.com/romkatv/powerlevel10k.git "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k"`
|
||||||
|
6. Меняем `.zshrc`:
|
||||||
|
```
|
||||||
|
|
||||||
|
...
|
||||||
|
ZSH_THEME="powerlevel10k/powerlevel10k"
|
||||||
|
...
|
||||||
|
plugins=(git zsh-autosuggestions)
|
||||||
|
...
|
||||||
|
|
||||||
|
source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh # в конце
|
||||||
|
```
|
||||||
|
7. Применяем через `source .zshrc` и настраиваем тему
|
||||||
|
Дополнения можно скачать и так:
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
|
||||||
|
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
|
||||||
|
```
|
||||||
|
Затем в `zshrc`: `plugins=(git zsh-autosuggestions zsh-syntax-highlighting)`
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
Повседневные или почти вещи
|
||||||
|
- [Linux](Linux.md)
|
||||||
|
- [Полезные утилиты и сайты](Полезные%20утилиты%20и%20сайты.md)
|
||||||
|
- [VPN](VPN.md)
|
||||||
|
- [Миграция с npm на npmplus](Миграция%20с%20npm%20на%20npmplus.md)
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
Тут будет настройка xray по красоте и возможно баш-скрипт
|
||||||
|
Репа с моей апи для работы с ядром: [ссылка](https://github.com/dxunvrs/xray-subscription)
|
||||||
|
|
||||||
|
> [!hint] РКН
|
||||||
|
> После бана основного ip закрывайте его сразу iptables и делайте nat через alias. Отморозится основной ip через пару недель
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
Может меняться, актуальная информация в [ридми](https://github.com/ZoeyVid/NPMPlus#migration-from-upstreamvanilla-nginx-proxy-manager)
|
||||||
|
1.
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
## gitingest
|
||||||
|
Собирает информацию с репозитория/папки репозитория в один `.txt` файл, удобно использовать в качестве контекста в ИИ
|
||||||
|
Установка через `pipx`: `pipx install gitingest`, дальше в любой папке команда `gitingest`, либо команда с указанием папки
|
||||||
|
Есть веб-версия, переходим в любой репозиторий или папку в репозитории и меняем в ссылке `https://github.com/...` на `https://gitingest.com/...`
|
||||||
|
## roadmap.sh
|
||||||
|
[Сайт](https://roadmap.sh/) с полезными роадмапами
|
||||||
|
## thefuck
|
||||||
|
Быстро исправляет опечатку в команде и так далее
|
||||||
|
```bash
|
||||||
|
sudo apt install thefuck
|
||||||
|
echo 'eval $(thefuck --alias oops)' >> ~/.zshrc # oops - алиас на thefuck, можно любое слово
|
||||||
|
source ~/.zshrc
|
||||||
|
```
|
||||||
@@ -1,10 +1,12 @@
|
|||||||
Очень "полезные" материалы
|
Очень "полезные" материалы
|
||||||
[[Java]] - полный, ультимативный гайд по жабе (WIP)
|
[Java](Программирование%20на%20Java/Java.md) - полный, ультимативный гайд по жабе (WIP)
|
||||||
[[Список задач]] - разбор задач на алгоритмы и структуры данных (пока что только с литкода), позже будут добавлены шаблоны для методов, описание каждой из структур данных и много чего еще
|
[АиСД](АиСД/АиСД.md)- разбор задач на алгоритмы и структуры данных (пока что только с литкода), позже будут добавлены шаблоны для методов, описание каждой из структур данных и много чего еще
|
||||||
[[3 сем|ИТМО]] - список предметов на текущий семестр + базовые требования + материалы
|
[ИТМО](Итмо/ИТМО.md) - список предметов на текущий семестр + базовые требования + материалы
|
||||||
[[Веб]] - лекции и заметки по Веб-программированию
|
[Веб](Веб/Веб.md) - лекции и заметки по Веб-программированию
|
||||||
[[Computer Science]] - лекции и материалы по АК+ОПД+PL и в целом база по CS
|
[Computer Science](Computer%20Science/Computer%20Science.md) - лекции и материалы по АК+ОПД+PL и в целом база по CS
|
||||||
[[Экзамен]] - разбор экзамена по ОПД за 2 семестр
|
[Экзамен](ОПД/Экзамен.md) - разбор экзамена по ОПД за 2 семестр
|
||||||
|
[ЯПы](ЯПы/ЯПы.md) - семинары по ЯПам (осторожно, AI-SLOP)
|
||||||
|
[Other](Other/Other.md) - всякая всячина
|
||||||
Spring Boot - будет...
|
Spring Boot - будет...
|
||||||
|
|
||||||
[[README]] - заметки [LeterZP](https://gitea.aklivtsov.tech/LeterZP) (aka Boris Bosenkob)
|
[LeterZP](LeterZP) - заметки [LeterZP](https://gitea.aklivtsov.tech/LeterZP) (aka Boris Bosenkob)
|
||||||
|
|||||||
@@ -1 +1,11 @@
|
|||||||
Объединение нескольких классических структур данных в кастомную или другую классическую
|
Объединение нескольких классических структур данных в кастомную или другую классическую
|
||||||
|
## Примеры задач
|
||||||
|
- [Design Hit Counter](../Задачи/LeetCode/Design%20Hit%20Counter.md)
|
||||||
|
- [Flatten Nested List Iterator](../Задачи/LeetCode/Flatten%20Nested%20List%20Iterator.md)
|
||||||
|
- [Implement Queue using Stacks](../Задачи/LeetCode/Implement%20Queue%20using%20Stacks.md)
|
||||||
|
- [Implement Rand10() Using Rand7()](../Задачи/LeetCode/Implement%20Rand10()%20Using%20Rand7().md)
|
||||||
|
- [Implement Trie (Prefix Tree)](../Задачи/LeetCode/Implement%20Trie%20(Prefix%20Tree).md)
|
||||||
|
- [Insert Delete GetRandom O(1)](../Задачи/LeetCode/Insert%20Delete%20GetRandom%20O(1).md)
|
||||||
|
- [LRU Cache](../Задачи/LeetCode/LRU%20Cache.md)
|
||||||
|
- [Max Stack](../Задачи/LeetCode/Max%20Stack.md)
|
||||||
|
- [Number of Recent Calls](../Задачи/LeetCode/Number%20of%20Recent%20Calls.md)
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
Решение алгоритмических задач, теория по алгоритмам и структурам данных
|
||||||
|
Внутри структур данных и методов ссылки на задачи на эти темы
|
||||||
|
Сейчас решены почти все задачи с 150-roadmap на neetcode, хватает для абсолютного большинства алгособесов
|
||||||
|
Упор надо делать на запоминание типовых паттернов решения, затем просто в каждой новой задаче научиться замечать эти паттерны и комбинировать их (для #Easy задач 1 паттерн, для #Medium задач 2-3 паттерна, для #Hard задач нужно комбинировать 3+ паттернов). Под паттерном подразумевается метод и/или структура данных в определенной ситуации
|
||||||
|
## Теория
|
||||||
|
- [Big-O](Теория/Big-O.md)
|
||||||
|
## Структуры данных
|
||||||
|
### Base
|
||||||
|
- [Хэш-таблицы](Структуры/Хэш-таблицы.md)
|
||||||
|
- [Связный список](Структуры/Связный%20список.md)
|
||||||
|
- [Стек](Структуры/Стек.md)
|
||||||
|
- [Очередь](Структуры/Очередь.md)
|
||||||
|
### Advanced
|
||||||
|
- [Куча](Структуры/Куча.md)
|
||||||
|
- [Графы](Структуры/Графы.md)
|
||||||
|
- [Деревья](Структуры/Деревья.md)
|
||||||
|
- [Префиксные деревья](Структуры/Префиксные%20деревья.md)
|
||||||
|
### Pro
|
||||||
|
- Красно-черные деревья
|
||||||
|
## Методы решения
|
||||||
|
### Base
|
||||||
|
- [Бинарный поиск](Методы/Бинарный%20поиск.md)
|
||||||
|
- [Два указателя](Методы/Два%20указателя.md)
|
||||||
|
- [Интервалы](Методы/Интервалы.md)
|
||||||
|
- [Математика](Методы/Математика.md)
|
||||||
|
- [Префикс](Методы/Префикс.md)
|
||||||
|
- [Рекурсия](Методы/Рекурсия.md)
|
||||||
|
- [Скользящее окно](Методы/Скользящее%20окно.md)
|
||||||
|
- [Указатель на запись](Методы/Указатель%20на%20запись.md)
|
||||||
|
### Advanced
|
||||||
|
- [1-D Динамика](Методы/1-D%20Динамика.md)
|
||||||
|
- [Быстрый и медленный указатели](Методы/Быстрый%20и%20медленный%20указатели.md)
|
||||||
|
- [Жадный алгоритм](Методы/Жадный%20алгоритм.md)
|
||||||
|
- [Матрица](Методы/Матрица.md)
|
||||||
|
- [Расширение из центра](Методы/Расширение%20из%20центра.md)
|
||||||
|
- [Backtracking](Методы/Backtracking.md)
|
||||||
|
- [BFS](Методы/BFS.md)
|
||||||
|
- [BST](Методы/BST.md)
|
||||||
|
- [DFS](Методы/DFS.md)
|
||||||
|
- [O(26)](Методы/O(26).md)
|
||||||
|
### Pro
|
||||||
|
- [Монотонная очередь](Методы/Монотонная%20очередь.md)
|
||||||
|
- [Монотонный стек](Методы/Монотонный%20стек.md)
|
||||||
|
- [Топологическая сортировка](Методы/Топологическая%20сортировка.md)
|
||||||
|
- 2-D динамика
|
||||||
|
## Задачи на архитектуру
|
||||||
|
- [Design](Design/Design.md)
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
Leetcode #415 | #Easy | [[Два указателя]] | [[Математика]]
|
Leetcode #415 | #Easy | [Два указателя](../../Методы/Два%20указателя.md) | [Математика](../../Методы/Математика.md)
|
||||||
## Идея
|
## Идея
|
||||||
Сложение столбиком как в [[Add Two Numbers]]
|
Сложение столбиком как в [Add Two Numbers](Add%20Two%20Numbers.md)
|
||||||
## [[Big-O]]
|
## Big-O
|
||||||
- Время ```O(max(M,N))```
|
- Время ```O(max(M,N))```
|
||||||
- Память ```O(max(M,N))```
|
- Память ```O(max(M,N))```
|
||||||
## Код
|
## Код
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Leetcode #2 | #Medium | [[Связный список]] | [[Математика]] | [[Два указателя]]
|
Leetcode #2 | #Medium | [Связный список](../../Структуры/Связный%20список.md) | [Математика](../../Методы/Математика.md) | [Два указателя](../../Методы/Два%20указателя.md)
|
||||||
## Идея
|
## Идея
|
||||||
Указатель на первый лист и указатель на второй лист, идея сложения столбиком, на каждом шаге инитим слагаемое, если указатель не null (еще и двигаем заодно), считаем сумму с учетом переноса и перенос. В конце когда все закончилось, а перенос остался создаем новую ноду с переносом. В начале создаем заглушку dummy и возвращаем dummy.next
|
Указатель на первый лист и указатель на второй лист, идея сложения столбиком, на каждом шаге инитим слагаемое, если указатель не null (еще и двигаем заодно), считаем сумму с учетом переноса и перенос. В конце когда все закончилось, а перенос остался создаем новую ноду с переносом. В начале создаем заглушку dummy и возвращаем dummy.next
|
||||||
## [[Big-O]]
|
## Big-O
|
||||||
- Время ```O(max(N,M))```
|
- Время ```O(max(N,M))```
|
||||||
- Память ```O(max(N,M))```
|
- Память ```O(max(N,M))```
|
||||||
## Код
|
## Код
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Leetcode #122 | Medium | [[1-D Динамика]]
|
Leetcode #122 | Medium | [1-D Динамика](../../Методы/1-D%20Динамика.md)
|
||||||
## Идея
|
## Идея
|
||||||
Продолжение задачи [[Best Time to Buy and Sell Stock]], только теперь можно покупать и выкупать сколько угодно раз, главное, чтобы не было пересечений. Идея: для монотонного массива прибыль будет такая же, как прибыль при покупке/продаже каждый день. То есть `[1, 2, 5] - 5-1=4` то же, что и `2-1 + 5-2 = 4`. Тогда просто идем по массиву парами и если есть прибыль - берем к себе
|
Продолжение задачи [Best Time to Buy and Sell Stock](Best%20Time%20to%20Buy%20and%20Sell%20Stock.md), только теперь можно покупать и выкупать сколько угодно раз, главное, чтобы не было пересечений. Идея: для монотонного массива прибыль будет такая же, как прибыль при покупке/продаже каждый день. То есть `[1, 2, 5] - 5-1=4` то же, что и `2-1 + 5-2 = 4`. Тогда просто идем по массиву парами и если есть прибыль - берем к себе
|
||||||
## [[Big-O]]
|
## Big-O
|
||||||
- Время ```O(N)```
|
- Время ```O(N)```
|
||||||
- Память ```O(1)```
|
- Память ```O(1)```
|
||||||
## Код
|
## Код
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Leetcode #121 | Easy | [[1-D Динамика]]
|
Leetcode #121 | Easy | [1-D Динамика](../../Методы/1-D%20Динамика.md)
|
||||||
## Идея
|
## Идея
|
||||||
Ставим левый указатель на 0 и идем по массиву правым. Если цена на левом меньше цены на правом, то можно зафиксировать прибыль - обновляем результат. Если же цена стала меньше либа равна, то двигаем левый указатель на место правого. Мы не может потерять никаких промежуточных сумм на этом действии, потому что в силу монотонности, никаие значения на (l,r) не удовлетворяли `p[l]<p[r]`
|
Ставим левый указатель на 0 и идем по массиву правым. Если цена на левом меньше цены на правом, то можно зафиксировать прибыль - обновляем результат. Если же цена стала меньше либа равна, то двигаем левый указатель на место правого. Мы не может потерять никаких промежуточных сумм на этом действии, потому что в силу монотонности, никаие значения на (l,r) не удовлетворяли `p[l]<p[r]`
|
||||||
## [[Big-O]]
|
## Big-O
|
||||||
- Время ```O(N)```
|
- Время ```O(N)```
|
||||||
- Память ```O(1)```
|
- Память ```O(1)```
|
||||||
## Код
|
## Код
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Leetcode #124 | #Hard | [[Деревья]] | [[DFS]]
|
Leetcode #124 | #Hard | [Деревья](../../Структуры/Деревья.md) | [DFS](../../Методы/DFS.md)
|
||||||
## Идея
|
## Идея
|
||||||
dfs + отбрасываем отрицательные пути
|
dfs + отбрасываем отрицательные пути
|
||||||
## [[Big-O]]
|
## Big-O
|
||||||
- Время ```O(N)```
|
- Время ```O(N)```
|
||||||
- Память ```O(H)```
|
- Память ```O(H)```
|
||||||
N - кол-во узлов, H -высота дерева
|
N - кол-во узлов, H -высота дерева
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Leetcode #180 | #Medium | [[Жадный алгоритм]]
|
Leetcode #180 | #Medium | [Жадный алгоритм](../../Методы/Жадный%20алгоритм.md)
|
||||||
## Идея
|
## Идея
|
||||||
Обычный проход по строке с сохранением последнего символа prev. Важно сделать после цикла еще одну проверку результата, чтобы последние накопления тоже смогли засчитаться, если они максимальной длины
|
Обычный проход по строке с сохранением последнего символа prev. Важно сделать после цикла еще одну проверку результата, чтобы последние накопления тоже смогли засчитаться, если они максимальной длины
|
||||||
## [[Big-O]]
|
## Big-O
|
||||||
- Время ```O(N)```
|
- Время ```O(N)```
|
||||||
- Память ```O(1)```
|
- Память ```O(1)```
|
||||||
## Код
|
## Код
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Leetcode #532 | #Medium | [[Префикс]] | [[Хэш-таблицы]] | [[Математика]]
|
Leetcode #532 | #Medium | [Префикс](../../Методы/Префикс.md) | [Хэш-таблицы](../../Структуры/Хэш-таблицы.md) | [Математика](../../Методы/Математика.md)
|
||||||
## Идея
|
## Идея
|
||||||
Любимая идея префиксных сумм. Сумам любого подмассива это разность префиксных сумм - значит они должны давать одинаковый остаток при делении на k. Считаем очередную преф сумму, если ее нет в мапе кладем ее и индекс (получится что запишется минимальный индекс, это нужно чтобы максимизировать длину чтобы условие точно выполнилось), а если такой остаток уже есть, то смотрим на длину подмассива и если >=2 под условие, то возвращаем true.
|
Любимая идея префиксных сумм. Сумам любого подмассива это разность префиксных сумм - значит они должны давать одинаковый остаток при делении на k. Считаем очередную преф сумму, если ее нет в мапе кладем ее и индекс (получится что запишется минимальный индекс, это нужно чтобы максимизировать длину чтобы условие точно выполнилось), а если такой остаток уже есть, то смотрим на длину подмассива и если >=2 под условие, то возвращаем true.
|
||||||
## [[Big-O]]
|
## Big-O
|
||||||
- Время ```O(N)```
|
- Время ```O(N)```
|
||||||
- Память ```O(K)```
|
- Память ```O(K)```
|
||||||
## Код
|
## Код
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Leetcode #210 | #Medium | [[Топологическая сортировка]] | [[BFS]] | [[Очередь]] | [[Указатель на запись]]
|
Leetcode #210 | #Medium | [Топологическая сортировка](../../Методы/Топологическая%20сортировка.md) | [BFS](../../Методы/BFS.md) | [Очередь](../../Структуры/Очередь.md) | [Указатель на запись](../../Методы/Указатель%20на%20запись.md)
|
||||||
## Идея
|
## Идея
|
||||||
Та же [[Course Schedule]], только нужно еще и выдать результат. Трюк: чтобы не выделять память на лист, заводим указатель на запись и обходимся одним массивом.
|
Та же [Course Schedule](Course%20Schedule.md), только нужно еще и выдать результат. Трюк: чтобы не выделять память на лист, заводим указатель на запись и обходимся одним массивом.
|
||||||
## [[Big-O]]
|
## Big-O
|
||||||
- Время ```O(V+E)```
|
- Время ```O(V+E)```
|
||||||
- Память ```O(V+E)```
|
- Память ```O(V+E)```
|
||||||
## Код
|
## Код
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Leetcode #207 | #Medium | [[Топологическая сортировка]] | [[BFS]] | [[Очередь]]
|
Leetcode #207 | #Medium | [Топологическая сортировка](../../Методы/Топологическая%20сортировка.md) | [BFS](../../Методы/BFS.md) | [Очередь](../../Структуры/Очередь.md)
|
||||||
## Идея
|
## Идея
|
||||||
Заводим массив счетчиков зависимостей (сколько нужно пройти курсов для прохождения i-го), заводим мапу курс->лист курсов, которые открываются после прохождения. Дальше заводим счетчик пройденных курсов и очередь. Наполняем очередь курсами с нулями зависимостей - их можно пройти прям сейчас. Дальше итерируемся по очереди. Достали курс, прибавили пройденные, если от этого курса что-то зависит то идем по этим зависящим курсам, уменьшаем их зависимость и если они стали доступными дял прохождения - добавляем в очередь
|
Заводим массив счетчиков зависимостей (сколько нужно пройти курсов для прохождения i-го), заводим мапу курс->лист курсов, которые открываются после прохождения. Дальше заводим счетчик пройденных курсов и очередь. Наполняем очередь курсами с нулями зависимостей - их можно пройти прям сейчас. Дальше итерируемся по очереди. Достали курс, прибавили пройденные, если от этого курса что-то зависит то идем по этим зависящим курсам, уменьшаем их зависимость и если они стали доступными дял прохождения - добавляем в очередь
|
||||||
## [[Big-O]]
|
## Big-O
|
||||||
- Время ```O(V+E)```
|
- Время ```O(V+E)```
|
||||||
- Память ```O(V+E)```
|
- Память ```O(V+E)```
|
||||||
## Код
|
## Код
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Leetcode #739 | #Medium | [[Монотонный стек]] | [[Стек]]
|
Leetcode #739 | #Medium | [Монотонный стек](../../Методы/Монотонный%20стек.md) | [Стек](../../Структуры/Стек.md)
|
||||||
## Идея
|
## Идея
|
||||||
Идея монотонного стека. Кладем дни в стек, как бы садим на скамейку. При проходе по очередному дню смотрим на вершину стека, если день теплее, то он "забирает" день со стека в результат. И так далее собирает пока не станет слишком "холодным" для ждущего, либо пока стек не закончится. Монотонный - потому что в стеке температуры будут только возрастать, если на понижение - то день уходит в результат.
|
Идея монотонного стека. Кладем дни в стек, как бы садим на скамейку. При проходе по очередному дню смотрим на вершину стека, если день теплее, то он "забирает" день со стека в результат. И так далее собирает пока не станет слишком "холодным" для ждущего, либо пока стек не закончится. Монотонный - потому что в стеке температуры будут только возрастать, если на понижение - то день уходит в результат.
|
||||||
## [[Big-O]]
|
## Big-O
|
||||||
- Время ```O(N)```
|
- Время ```O(N)```
|
||||||
- Память ```O(N)```
|
- Память ```O(N)```
|
||||||
## Код
|
## Код
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Leetcode #362 | #Medium | [[Очередь]] | [[Интервалы]] | [[Design]]
|
Leetcode #362 | #Medium | [Очередь](../../Структуры/Очередь.md) | [Интервалы](../../Методы/Интервалы.md) | [Design](../../Design/Design.md)
|
||||||
## Идея
|
## Идея
|
||||||
Аналог [[Number of Recent Calls]], также очередь
|
Аналог [Number of Recent Calls](Number%20of%20Recent%20Calls.md), также очередь
|
||||||
## [[Big-O]]
|
## Big-O
|
||||||
- Время ```O(1)```
|
- Время ```O(1)```
|
||||||
- Память ```O(W)```
|
- Память ```O(W)```
|
||||||
## Код
|
## Код
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Leetcode #150 | #Medium | [[Стек]] | [[Математика]]
|
Leetcode #150 | #Medium | [Стек](../../Структуры/Стек.md) | [Математика](../../Методы/Математика.md)
|
||||||
## Идея
|
## Идея
|
||||||
Просто стек
|
Просто стек
|
||||||
## [[Big-O]]
|
## Big-O
|
||||||
- Время ```O(N)```
|
- Время ```O(N)```
|
||||||
- Память ```O(N)```
|
- Память ```O(N)```
|
||||||
## Код
|
## Код
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Leetcode #438 | #Medium | [[Скользящее окно]] | [[O(26)]]
|
Leetcode #438 | #Medium | [Скользящее окно](../../Методы/Скользящее%20окно.md) | [O(26)](../../Методы/O(26).md)
|
||||||
## Идея
|
## Идея
|
||||||
Скользящее окно с идеей `O(26`) (`int[26]` для частот символов)
|
Скользящее окно с идеей `O(26`) (`int[26]` для частот символов)
|
||||||
## [[Big-O]]
|
## Big-O
|
||||||
- Время ```O(N)```
|
- Время ```O(N)```
|
||||||
- Память ```O(1)```
|
- Память ```O(1)```
|
||||||
## Код
|
## Код
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Leetcode #34 | #Medium | [[Бин. поиск]]
|
Leetcode #34 | #Medium | [Бинарный поиск](../../Методы/Бинарный%20поиск.md)
|
||||||
## Идея
|
## Идея
|
||||||
Просто два фирменных бин. поиска. Для первого прохода инваринт, что правый указатель >= элемента (тогда он попадет на его первое вхождение). Для второго прохода инвариант, что правый указатель > элемента (тогда левый укажет на последнее вхождение)
|
Просто два фирменных бин. поиска. Для первого прохода инваринт, что правый указатель >= элемента (тогда он попадет на его первое вхождение). Для второго прохода инвариант, что правый указатель > элемента (тогда левый укажет на последнее вхождение)
|
||||||
## [[Big-O]]
|
## Big-O
|
||||||
- Время ```O(logN)```
|
- Время ```O(logN)```
|
||||||
- Память ```O(1)```
|
- Память ```O(1)```
|
||||||
## Код
|
## Код
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Leetcode #153 | #Medium | [[Бин. поиск]]
|
Leetcode #153 | #Medium | [Бинарный поиск](../../Методы/Бинарный%20поиск.md)
|
||||||
## Идея
|
## Идея
|
||||||
Это первый этап задачи [[Search in Rotated Sorted Array]].
|
Это первый этап задачи [Search in Rotated Sorted Array](Search%20in%20Rotated%20Sorted%20Array.md).
|
||||||
## [[Big-O]]
|
## Big-O
|
||||||
- Время ```O(log(N))```
|
- Время ```O(log(N))```
|
||||||
- Память ```O(1)```
|
- Память ```O(1)```
|
||||||
## Код
|
## Код
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Leetcode #387 | #Easy | [[O(26)]] | [[Хэш-таблицы]]
|
Leetcode #387 | #Easy | [O(26)](../../Методы/O(26).md) | [Хэш-таблицы](../../Структуры/Хэш-таблицы.md)
|
||||||
## Идея
|
## Идея
|
||||||
Идея с O(26)
|
Идея с O(26)
|
||||||
## [[Big-O]]
|
## Big-O
|
||||||
- Время ```O(N)```
|
- Время ```O(N)```
|
||||||
- Память ```O(N)```
|
- Память ```O(N)```
|
||||||
## Код
|
## Код
|
||||||
|
|||||||