Kotlin guide ready #5
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 120 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 81 KiB |
@@ -8,10 +8,15 @@
|
||||
- Устранить элементы "магического мышления" и "карго культа".
|
||||
## Системная инженерия
|
||||
- [Понятие системы](Системная%20инженерия/Понятие%20системы.md)
|
||||
- [Компьютерные системы](Вычислительные%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
|
||||
|
||||
@@ -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](Платформа%20Wrench.md)
|
||||
## Архитектуры
|
||||
- [x86_64](x86_64.md) (реальная архитектура)
|
||||
- [acc32](acc32.md)
|
||||
- [f32a](f32a.md)
|
||||
- [f32a](f32a.md)
|
||||
- [m68k](m68k.md) (будет)
|
||||
- [risc-iv](risc-iv.md) (будет)
|
||||
- [vliw-iv](vliw-iv.md) (в работе, есть интересные факты про Эльбрус)
|
||||
@@ -77,7 +77,7 @@
|
||||
|
||||
Цвета - 3 партии входных данных. Цифры - на каком такте будут на данном этапе вычисления
|
||||
### Практика
|
||||
На практике все перечисленные механизмы встречаются в современных [компьютерных системах](Компьютерные%20системы.md), в том числе:
|
||||
На практике все перечисленные механизмы встречаются в современных [компьютерных системах](../Системная%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. Снижение сложности разработки масштабных систем
|
||||
@@ -7,7 +7,7 @@
|
||||
### ПЛК
|
||||
- Специальная разновидность электронной вычислительной машины
|
||||
- Особенности
|
||||
1. [Управляющие системы](Управляющие%20системы.md)
|
||||
1. [Управляющие системы](../Системная%20инженерия/Управляющие%20системы.md)
|
||||
2. Законченные устройства для встроенного использования
|
||||
3. Специализация ввода-вывода, модульность
|
||||
4. Выделение инструментальной составляющей
|
||||
|
||||
@@ -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. От прикладной задачи
|
||||
- От области (библиотеки)
|
||||
- От модели вычислений (принципов организации вычислительного процесса: параллелизм, конвейризация, оптимизации и тд)
|
||||
@@ -12,4 +12,4 @@
|
||||
3. Desktops - компьютеры на рабочем месте, почти у всех
|
||||
4. Сервисы - решения прикладных задач, чтобы не делать их локально
|
||||
5. Мобильные вычисления - повсеместно
|
||||
6. Вычисления окружают нас уже повсеместно
|
||||
6. Вычисления окружают нас уже повсеместно
|
||||
@@ -23,7 +23,7 @@
|
||||
Различают:
|
||||
- одно- и двухслойные платы
|
||||
- многослойные платы
|
||||
## Виды монтажа компонентоы
|
||||
## Виды монтажа компонентов
|
||||
- Выводной (в отверстие)
|
||||
- Поверхностный
|
||||
- Встроенный
|
||||
@@ -94,6 +94,7 @@
|
||||
1. Разные частоты процессоров -> разные SKU из одного wafer
|
||||
2. Core Single / Core Duo / Core Quad -> одинаковый кристалл, разное число активных ядер
|
||||
3. Intel Pentium / Celeron -> урезанные Core с отключенными кэшем и функциями
|
||||
## Реальный мир
|
||||
### Производство
|
||||
1. Логистика
|
||||
2. Склады
|
||||
@@ -107,4 +108,13 @@
|
||||
1. Амортизация. Выход оборудования из строя
|
||||
2. Необходимость физического доступа
|
||||
3. Особенности среды эксплуатации
|
||||
4. Долгосрочные эффекты
|
||||
4. Долгосрочные эффекты
|
||||
### Сложность изменений
|
||||
1. Чем совершеннее технология, тем сложнее внести изменения
|
||||
2. Физический контакт
|
||||
### Варианты замены устаревшей аппаратуры
|
||||
1. Перепроектирование на новой элементной базе
|
||||
2. Модульная организация. Стандартные интерфейсы. Имитация старых систем
|
||||
3. Виртуализация
|
||||
|
||||
Как решаем проблемы аппаратуры - [Hardware and Software](Hardware%20and%20Software.md)
|
||||
@@ -57,4 +57,4 @@
|
||||
Множественность точек зрения на систему. Систему может разрушить проблема коммуникации при разработке
|
||||
Формальный способ зафиксировать эти точки зрения и передать их другим - [архитектура](Понятие%20архитектуры.md)
|
||||
## Применение в Computer Science
|
||||
- [Компьютерные системы](../Вычислительные%20системы/Компьютерные%20системы.md)
|
||||
- [Компьютерные системы](Компьютерные%20системы.md)
|
||||
@@ -2,4 +2,28 @@
|
||||
```bash
|
||||
xprop WM_CLASS
|
||||
```
|
||||
Дальше кликаем в открытом окне. Нужно чтобы изменить иконку на панели задач, путь: `~/.local/share/applications`
|
||||
Дальше кликаем в открытом окне. Нужно чтобы изменить иконку на панели задач, путь: `~/.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)`
|
||||
@@ -3,4 +3,11 @@
|
||||
Установка через `pipx`: `pipx install gitingest`, дальше в любой папке команда `gitingest`, либо команда с указанием папки
|
||||
Есть веб-версия, переходим в любой репозиторий или папку в репозитории и меняем в ссылке `https://github.com/...` на `https://gitingest.com/...`
|
||||
## roadmap.sh
|
||||
[Сайт](https://roadmap.sh/) с полезными роадмапами
|
||||
[Сайт](https://roadmap.sh/) с полезными роадмапами
|
||||
## thefuck
|
||||
Быстро исправляет опечатку в команде и так далее
|
||||
```bash
|
||||
sudo apt install thefuck
|
||||
echo 'eval $(thefuck --alias oops)' >> ~/.zshrc # oops - алиас на thefuck, можно любое слово
|
||||
source ~/.zshrc
|
||||
```
|
||||
@@ -1,10 +1,11 @@
|
||||
Очень "полезные" материалы
|
||||
[Java](Программирование%20на%20Java/Java.md) - полный, ультимативный гайд по жабе (WIP)
|
||||
[АиСД](АиСД/АиСД.md)- разбор задач на алгоритмы и структуры данных (пока что только с литкода), позже будут добавлены шаблоны для методов, описание каждой из структур данных и много чего еще
|
||||
[ИТМО](Итмо/3%20сем.md) - список предметов на текущий семестр + базовые требования + материалы
|
||||
[ИТМО](Итмо/ИТМО.md) - список предметов на текущий семестр + базовые требования + материалы
|
||||
[Веб](Веб/Веб.md) - лекции и заметки по Веб-программированию
|
||||
[Computer Science](Computer%20Science/Computer%20Science.md) - лекции и материалы по АК+ОПД+PL и в целом база по CS
|
||||
[Экзамен](ОПД/Экзамен.md) - разбор экзамена по ОПД за 2 семестр
|
||||
[ЯПы](ЯПы/ЯПы.md) - семинары по ЯПам (осторожно, AI-SLOP)
|
||||
[Other](Other/Other.md) - всякая всячина
|
||||
Spring Boot - будет...
|
||||
|
||||
|
||||
@@ -14,3 +14,5 @@
|
||||
- [HTML](Фронтенд/HTML.md)
|
||||
- [CSS](Фронтенд/CSS.md)
|
||||
- [JavaScript](Фронтенд/JavaScript.md)
|
||||
## Клиент-серверное взаимодействие
|
||||
- [Клиент-серверное взаимодействие](Клиент-сервер/Клиент-серверное%20взаимодействие.md)
|
||||
@@ -0,0 +1,20 @@
|
||||
- Asynchronious JavaScript and XML
|
||||
- Подход к построению интерактивных пользовательских интерфейсов веб-приложений
|
||||
- Основан на фоновом обмене данными браузера с веб-сервером
|
||||
- При обмене данными между клиентом и сервером веб-страница не перезагружается полностью
|
||||
## Основные принципы
|
||||
- Использование технологии динамического обращения к серверу "на лету", без перезагрузки всей страницы
|
||||
- Использование [DHTML](../Фронтенд/DHTML.md) для динамического изменения содержания страницы
|
||||
## Преимущества
|
||||
- Экономия трафика
|
||||
- Уменьшение нагрузки на сервер
|
||||
- Ускорение реакции интерфейса
|
||||
## Недостатки
|
||||
- Динамически загружаемое содержимое недоступно поисковикам
|
||||
- Сложнее собирать метрики по использованию сайта
|
||||
- Усложнение проекта
|
||||
- Требуется включенный JS в браузере
|
||||
## Реализация в коде
|
||||
- [XMLHTTPRequest](XMLHTTPRequest.md)
|
||||
- [JQuery](JQuery.md)
|
||||
- [Fetch API](Fetch%20API.md)
|
||||
@@ -0,0 +1,25 @@
|
||||
- Common Gateway Interface
|
||||
- Простейший механизм вызова пользователем программ на стороне сервера
|
||||
- Данные отправляются программе посредством HTTP-запроса, формируемого веб-браузером
|
||||
- То, какая именно программа будет вызвана, обычно определяется [URL](../Основы/URI.md) запроса
|
||||
- Каждый запрос обрабатывается отдельным процессом CGI-программы
|
||||
- Взаимодействие программы с веб-сервером осуществляется через `stdin` и `stdout`
|
||||
## Жизненный цикл CGI-запроса
|
||||
1. Браузер присылает HTTP-запрос `POST /api/check?id=5` с телом `x=1&y=2`
|
||||
2. Веб-сервер (например Apache Httpd) создает новый процесс в ОС и запускает скомпилированную программу
|
||||
3. Метаданные (заголовки и тп) кладутся в переменные окружения, тело запроса отправляется в `stdin`
|
||||
4. Программа выполняется как будто с ней взаимодействует пользователь в консоли
|
||||
5. Веб-сервер забирает ответ из `stdout`
|
||||
6. ОС убивает процесс запущенной программы
|
||||
## Достоинства
|
||||
- Программы могут быть написаны на множестве ЯПов
|
||||
- Падение CGI-сценария не приводит к падению всего сервера
|
||||
- Исключены конфликты при параллельной обработке нескольких запросов
|
||||
- Хорошая поддержка веб-серверами
|
||||
## Недостатки
|
||||
- Высокие накладные расходы на создание нового процесса в ОС
|
||||
- Плохая масштабируемость
|
||||
- Слабое разделение уровня представления и бизнес-логики
|
||||
- Могут быть платформо-зависимы
|
||||
|
||||
Как развитие - [FastCGI](FastCGI.md)
|
||||
@@ -0,0 +1,3 @@
|
||||
- Все запросы могут обрабатываться одним процессом CGI-программы
|
||||
- Веб-сервер взаимодействует с процессом через UNIX Domain Sockets или TCP/IP (а не через stdin и stdout)
|
||||
- Для общения используется бинарный протокол, обеспечивающий передачу любых текстовых данных
|
||||
@@ -0,0 +1,40 @@
|
||||
- Современный стандарт на замену [XMLHTTPRequest](XMLHTTPRequest.md)
|
||||
- Поддерживается всеми современными браузерами
|
||||
- Работает на промисах
|
||||
## Пример кода
|
||||
Чуть чуть было написано в [ECMAScript](../Фронтенд/ECMAScript.md)
|
||||
```JavaScript
|
||||
async function getData() {
|
||||
const url = "https://example.org/products.json";
|
||||
try {
|
||||
const response = await fetch(url);
|
||||
if (!response.ok) {
|
||||
throw new Error(`{response.status}`);
|
||||
}
|
||||
|
||||
const json = await response.json();
|
||||
console.log(json);
|
||||
} catch (error) {
|
||||
console.error(error.message);
|
||||
}
|
||||
}
|
||||
```
|
||||
Отправление данных через POST
|
||||
```JavaScript
|
||||
async function checkPoint(x, y, r) {
|
||||
const pointData = {x: x, y: y, r: r};
|
||||
|
||||
const response = await fetch("/api/check", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: JSON.stringify(pointData)
|
||||
});
|
||||
|
||||
const res = await response.json();
|
||||
console.log(res.hit);
|
||||
}
|
||||
```
|
||||
## Как работает
|
||||
- Получение данных работает в два этапа: асинхронное получение ответа, затем асинхронное получение тела (данные могут быть большими и передаться потоком - Stream)
|
||||
@@ -0,0 +1,49 @@
|
||||
- JS-библиотека, предназначенная для разработки [DHTML](../Фронтенд/DHTML.md) и [AJAX](AJAX.md)-приложений
|
||||
- Упрощает доступ к элементам [DOM](../Фронтенд/DOM.md) с помощью кучи разных способов
|
||||
- Упрощает и унифицирует реализацию AJAX
|
||||
- Упрощает добавление визуальных эффектов
|
||||
- Ключевым элементов API является функция(объект) `$`
|
||||
## Пример AJAX-запроса
|
||||
```JavaScript
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "some.php",
|
||||
data: {name: "JOHN", location: "London"},
|
||||
success: function(msg) {
|
||||
// логика
|
||||
}
|
||||
});
|
||||
```
|
||||
## Взаимодействие с DOM
|
||||
```JavaScript
|
||||
$("div.test")
|
||||
.add("p.quote")
|
||||
.addClass("blue")
|
||||
.slideDown("slow");
|
||||
|
||||
$("a"),click(function() {
|
||||
alert("Hello");
|
||||
});
|
||||
|
||||
$("div.demo-container").html("<p>New content</p>");
|
||||
```
|
||||
## Работа с событиями
|
||||
```JavaScript
|
||||
$("#foo").bind("mouseenter mouseleave", function() {
|
||||
$(this).toggleClass("entered");
|
||||
});
|
||||
```
|
||||
## Подключение
|
||||
### Через CDN
|
||||
```HTML
|
||||
<!-- Подключение актуальной версии jQuery через CDN Google -->
|
||||
<script src="https://googleapis.com"></script>
|
||||
```
|
||||
### Локально
|
||||
```HTML
|
||||
<!-- Подключение локального файла jQuery -->
|
||||
<script src="js/jquery-3.7.1.min.js"></script>
|
||||
```
|
||||
## Почему устарел
|
||||
- JS эволюционировал: добавили `document.querySelector` (написано в [заметке про DOM](../Фронтенд/DOM.md)), добавили [Fetch API](Fetch%20API.md)
|
||||
- Смена парадигмы: императивный стиль -> декларативный (в современных React, Vue, Angular)
|
||||
@@ -0,0 +1,11 @@
|
||||
## Short Polling
|
||||
- Браузер через JS (`setInterval` + `fetch`) отправляет AJAX-запросы на сервер каждые 2 секунды
|
||||
- Сервер отвечает сразу: либо отдает новые данные, либо говорит, что данных нет
|
||||
- Элементарная реализация, но 99% запросов не нужны
|
||||
## Long Polling
|
||||
Костыль до появления [WebSocket](WebSocket.md)
|
||||
- Браузер делает AJAX-запрос на сервер
|
||||
- Сервер отвечает не сразу, но удерживает соединение открытым
|
||||
- Как только появляется сообщение, сервер отдает ответ
|
||||
- Соединение для этих данных закрывается, клиент повторяет Long Polling запрос
|
||||
- Нет пустых запросов, но серверу приходится держать в ОЗУ тысячи открытых соединений
|
||||
@@ -0,0 +1,6 @@
|
||||
- Sever-Sent Events
|
||||
- Середина между [Polling](Polling.md) и [WebSocket](WebSocket.md)
|
||||
- Однонаправленный канал (от сервера к браузеру)
|
||||
- Браузер подписывается, а сервер шлет ему события
|
||||
- Подходит для ленты новостей
|
||||
- Работает поверх обычного [HTTP](../Сеть%20и%20API/HTTP.md)
|
||||
@@ -0,0 +1,28 @@
|
||||
- Протокол полнодуплескной(двунаправленной) связи поверх TCP-cоединения, предназначенный для обмена сообщениями между браузером и веб-сервером в режиме реального времени
|
||||
- Позволяет серверу отправлять данные браузеру без дополнительного запроса со стороны клиента
|
||||
- Обмен данными ведется через отдельное TCP-соединение
|
||||
- Поддерживается всеми современными браузерами
|
||||
- Альтернатива - [[AJAX]] + [Long Polling](Polling.md)
|
||||
## Пример кода
|
||||
```JavaScript
|
||||
var webSocket = new WebSocket("ws://localhost/echo");
|
||||
|
||||
webSocket.onopen = function(event) {
|
||||
webSocket.send("Hello");
|
||||
}
|
||||
|
||||
webSocket.onmessage = function(event) {
|
||||
webSocket.close();
|
||||
}
|
||||
|
||||
webSocket.onclose = function(event) {}
|
||||
```
|
||||
## Как устанавливается
|
||||
1. Браузер отправляет обычный [HTTP](../Сеть%20и%20API/HTTP.md)-запрос с заголовком `Connection: Upgrade` и `Upgrade: websocket`
|
||||
2. Сервер отвечает `101` (Switching Protocols)
|
||||
3. HTTP обрывается, появляется чистый TCP-коннект
|
||||
## Плюсы
|
||||
- Идеально для реалтайма
|
||||
- Нулевые расходы на трафик
|
||||
## Минусы
|
||||
- Сложнее администрировать
|
||||
@@ -0,0 +1,42 @@
|
||||
- XMLHTTP - набор API, позволяющий осуществлять HTTP-запросы к серверу без необходимости перезагружать страницу
|
||||
- Данные можно пересылать в виде [XML](../Форматы%20данных/XML.md), [JSON](../Форматы%20данных/JSON.md), [HTML](../Фронтенд/HTML.md) или просто неструктурированным текстом
|
||||
- При пересылке используется [HTTP](../Сеть%20и%20API/HTTP.md)
|
||||
```JavaScript
|
||||
var req;
|
||||
function loadXMLDoc(url) {
|
||||
req = null;
|
||||
if (window.XMLHttpRequest) {
|
||||
try {
|
||||
req = new XMLHttpRequest();
|
||||
} catch (e) {}
|
||||
} else if (window.ActiveXObject) { // более старая версия
|
||||
try {
|
||||
req = new ActiveXObject("Msxml2.XMLHTTP");
|
||||
} catch (e) {
|
||||
try {
|
||||
req = new ActiveXObject("Microsoft.XMLHTTP"); // вообще древняя версия
|
||||
} catch (e) {}
|
||||
}
|
||||
}
|
||||
|
||||
if (req) {
|
||||
req.open("GET", url, true); // true - асинхронно
|
||||
req.onreadystatechange = processReqChange; // callback
|
||||
req.send(null);
|
||||
}
|
||||
}
|
||||
|
||||
function processReqChange() {
|
||||
try {
|
||||
if (req.readyState === 4) {
|
||||
if (req.status === 200) {
|
||||
// обработка ответа
|
||||
} else {
|
||||
// обработка ошибка, доступен req.statusText
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
// баги самого XMLHttpRequest
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,10 @@
|
||||
## Клиентские запросы
|
||||
- [AJAX](AJAX.md)
|
||||
## Модели взаимодействия
|
||||
- [WebSocket](WebSocket.md)
|
||||
- [Polling](Polling.md)
|
||||
- [SSE](SSE.md)
|
||||
## Серверная обработка
|
||||
- [Серверные сценарии](Серверные%20сценарии.md)
|
||||
- [CGI](CGI.md)
|
||||
- [FastCGI](FastCGI.md)
|
||||
@@ -0,0 +1,3 @@
|
||||
- Программы, вызываемые на сервере для формирования динамического контента
|
||||
- Веб-сервер "делегирует" им на обработку запрос и "транслирует" сформированный ими ответ клиенту
|
||||
- Могут использоваться вместе со "статикой", могут - сами по себе
|
||||
@@ -0,0 +1,7 @@
|
||||
Dynamic HTML - способ создания интерактивного веб-сайта, использующий сочетание
|
||||
- Статичного языка разметки [HTML](HTML.md)
|
||||
- Выполняемого на стороне клиента скриптового языка [JavaScript](JavaScript.md)
|
||||
- [CSS](CSS.md) (каскадных таблиц стилей)
|
||||
- [DOM](DOM.md) (объектной модели документа)
|
||||
## Концепция
|
||||
Использовать JavaScipt для изменения HTML-элементов и их стилей на стороне клиента в real-time
|
||||
@@ -1,3 +1,34 @@
|
||||
- [[#Особенности языка|Особенности языка]]
|
||||
- [[#ES6|ES6]]
|
||||
- [[#let и const|let и const]]
|
||||
- [[#Форматирование вывода|Форматирование вывода]]
|
||||
- [[#Деструктуризация|Деструктуризация]]
|
||||
- [[#Классы и объекты|Классы и объекты]]
|
||||
- [[#Наследование|Наследование]]
|
||||
- [[#Типы данных|Типы данных]]
|
||||
- [[#`Number`|`Number`]]
|
||||
- [[#`String`|`String`]]
|
||||
- [[#`Boolean`|`Boolean`]]
|
||||
- [[#`Undefined`|`Undefined`]]
|
||||
- [[#`Null`|`Null`]]
|
||||
- [[#`Symbol`|`Symbol`]]
|
||||
- [[#`Object`|`Object`]]
|
||||
- [[#Приведение типов|Приведение типов]]
|
||||
- [[#Строгое равенство `===`|Строгое равенство `===`]]
|
||||
- [[#Нестрогое равенство `==`|Нестрогое равенство `==`]]
|
||||
- [[#Нестрогое равенство `==`#Правила кастов|Правила кастов]]
|
||||
- [[#Стрелочные функции|Стрелочные функции]]
|
||||
- [[#Цикл с итератором|Цикл с итератором]]
|
||||
- [[#Параметры по умолчанию|Параметры по умолчанию]]
|
||||
- [[#Rest-параметры|Rest-параметры]]
|
||||
- [[#Rest-параметры#Операция spread|Операция spread]]
|
||||
- [[#Promise|Promise]]
|
||||
- [[#Операция spread#Состояния промиса|Состояния промиса]]
|
||||
- [[#Операция spread#Работа с промисом|Работа с промисом]]
|
||||
- [[#Операция spread#Async и Await|Async и Await]]
|
||||
- [[#Event Loop и Асинхронность|Event Loop и Асинхронность]]
|
||||
- [[#Операция spread#Приоритет выполнения задач|Приоритет выполнения задач]]
|
||||
|
||||
- Встраиваемый расширяемый не имеющий средств ввода-вывода ЯП
|
||||
- 5 примитивных типов данных - Number, String, Boolean, Null, Undefined
|
||||
- Объектный тип данных - Object
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
Предметы третьего сема:
|
||||
1. [АК](Предметы/АК.md)
|
||||
2. [Веб-программирование](Предметы/Веб-программирование.md)
|
||||
3. [ЯПы](Предметы/ЯПы.md)
|
||||
4. [Физика](Предметы/Физика.md)
|
||||
5. [Теорвер](Предметы/Теорвер.md)
|
||||
6. [Матан](Предметы/Матан.md)
|
||||
7. [ВТП](Предметы/ВТП.md)
|
||||
@@ -0,0 +1,17 @@
|
||||
## Смена оболочки (на zsh)
|
||||
Скачивать свои пакеты нельзя, но благо zsh уже скачан (в `/usr/local/bin/zsh`)
|
||||
Менять оболочку нормальным способом через `chsh` тоже нельзя, поэтому используем такой костыль: создаем в домашней папке `.bash_profile` и добавляем туда:
|
||||
```bash
|
||||
# Переключаемся на zsh только в интерактивном режиме (чтобы не сломать scp и sftp)
|
||||
if [ -t 1 ] && [ -x /usr/local/bin/zsh ]; then
|
||||
exec /usr/local/bin/zsh -l
|
||||
fi
|
||||
```
|
||||
Теперь у нас zsh
|
||||
### oh-my-zsh
|
||||
Чтобы настроить zsh как [тут](../Other/Linux.md), также клонируем репу с oh-my-zsh, вылетит ошибка прав, поэтому конфиг копируем сами
|
||||
```bash
|
||||
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
|
||||
```
|
||||
Скачиваем плагины и тему p10k через гит, пишем их в `.zshrc` как в [гайде](../Other/Linux.md)
|
||||
Готово!
|
||||
@@ -0,0 +1,12 @@
|
||||
## Текущие предметы
|
||||
1. [АК](Предметы/АК.md)
|
||||
2. [Веб-программирование](Предметы/Веб-программирование.md)
|
||||
3. [ЯПы](Предметы/ЯПы.md)
|
||||
4. [Физика](Предметы/Физика.md)
|
||||
5. [Теорвер](Предметы/Теорвер.md)
|
||||
6. [Матан](Предметы/Матан.md)
|
||||
7. [ВТП](Предметы/ВТП.md)
|
||||
## Полезные материалы
|
||||
- [Гайд](https://github.com/Imtjl/1st-year-guide) на первый курс на гитхабе
|
||||
- [Гайд](https://github.com/Imtjl/2nd-year-guide) на второй курс на гитхабе
|
||||
- [Настройка](Helios.md) Гелиоса
|
||||
@@ -0,0 +1,24 @@
|
||||
---
|
||||
|
||||
kanban-plugin: board
|
||||
|
||||
---
|
||||
|
||||
## В работе
|
||||
|
||||
- [ ] Собрать материалы
|
||||
- [ ] Изучить примеры лабб
|
||||
- [ ] ...
|
||||
|
||||
|
||||
## Выполнено
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
%% kanban:settings
|
||||
```
|
||||
{"kanban-plugin":"board","list-collapse":[false,false]}
|
||||
```
|
||||
%%
|
||||
@@ -0,0 +1,10 @@
|
||||
[АК лаб 4 доска](АК%20лаб%204%20доска.md) с задачами
|
||||
## Сбор информации
|
||||
- [Пример](https://github.com/ryukzak/brainfuck/tree/master) Пенского
|
||||
- [Таблица](https://github.com/petrovviacheslav/myitmo/tree/main/Computer-System-Architecture) с примерами
|
||||
- [Пример](https://github.com/2BuRy1/itmo/tree/main/%D0%92%D1%82%D0%BE%D1%80%D0%BE%D0%B9%D0%9A%D1%83%D1%80%D1%81/%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0%20%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%B0/%D0%9B%D0%B0%D0%B1%D0%B03/scheme) risc-схемы
|
||||
- [Пример](https://github.com/awesoma31/csa-lab4/tree/19e11019630092c809329798c278da500e169110) alg варианта
|
||||
- [Пример](https://github.com/sultanowskii/drum) варианта на risc схеме
|
||||
- [Пример](https://github.com/Azat2202/itmo-labs/tree/master/2%20year/%D0%90%D0%9A/%D0%9B%D0%B0%D0%B1%D0%BE%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BD%D0%B0%D1%8F%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%203) варанта на stack схеме
|
||||
## Мой вариант
|
||||
- `alg | risc | harv | hw | trap | port | cstr | vector | alg3`
|
||||
@@ -0,0 +1,13 @@
|
||||
# 1 лаба
|
||||
## Быстрый вариант
|
||||
Тут все максимально легко, в лабе три (скорее всего) файла: index.html, style.css и script.js
|
||||
Кидаем эти файлы в `~/public_html` на гелиосе, теперь лаба доступна по ссылке `https://se.ifmo.ru/~sXXXXXX/index.html` (XXXXXX - ваш ИСУшник)
|
||||
## Другие варианты
|
||||
На гелиосе запущен веб-сервер из папки `public_html`, все что вы туда кладете, доступно из интернета (как вот [эти](https://pdmi.zhabka.fun/) презентации)
|
||||
Так что можно сделать папку `lab1` и веб-сервер подтянет `index.html` с оттуда, лаба будет доступна по ссылке `.../~sXXXXXX/lab1`
|
||||
> [!hint] Самый крутой вариант
|
||||
> Если лаба залита на гитхаб/gitea/gitlab/..., то делаем гит клон в удобную папку на гелиосе, а в `public_html` создаем символическую ссылку на нужную папку/файл `index.html`, теперь для обновления лабы на гелиосе можно тупо сделать `git pull`
|
||||
# 2 лаба
|
||||
Тут все сложнее, по требованию задания лабы нужно поднимать `apache httpd` + свой бекенд на FastCGI-либе
|
||||
Пока не мой [гайд](https://www.youtube.com/watch?v=URdECcC25vY) на деплой
|
||||
Также здесь будет гайд на легкий локальный тест в докере + nginx
|
||||
@@ -11,8 +11,7 @@
|
||||
2 - декабрь
|
||||
## Лабы
|
||||
На сайте великого тюнита, их 4
|
||||
На том же сайте гайд на деплой фронта на гелиос
|
||||
Напомню классику - [Гайд на 2 курс гитхаб](https://github.com/Imtjl/2nd-year-guide) - там гайд на деплой лаб
|
||||
[Деплой лаб](../Лабы/Веб/Деплой%20лаб.md) - гайд на деплой лаб
|
||||
## Лекции
|
||||
[Веб](../../Веб/Веб.md)
|
||||
## Материалы
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
В Java: статическая типизация, сильная, явная
|
||||
Типы делятся на: [примитивные](Типы%20данных.md#Примитивные%20типы%20данных) и [ссылочные](Типы%20данных.md#Ссылочные%20типы%20данных)
|
||||
Типы делятся на: [](.md#Примитивные%20типы%20данных|примитивные) и [](.md#Ссылочные%20типы%20данных|ссылочные)
|
||||
|
||||
Типы делятся на: примитивные и ссылочные
|
||||
# Примитивные типы данных
|
||||
1. Целые - `byte`, `short`, `int`, `long`
|
||||
2. Символьный - `char`
|
||||
|
||||
@@ -2,5 +2,5 @@
|
||||
## Что это?
|
||||
Методички по семенарам (разжёванная теория для самых маленьких + доп материалы)
|
||||
|
||||
[[Семинар-1]] - Окружение, инструменты, первая программа
|
||||
[[Семинар-2]] - Функции, стек, конечные автоматы
|
||||
[Семинар-1](Семинары/Семинар-1.md) - Окружение, инструменты, первая программа
|
||||
[Семинар-2](Семинары/Семинар-2.md) - Функции, стек, конечные автоматы
|
||||