diff --git a/Attachments/CoDesign HW-SW.png b/Attachments/CoDesign HW-SW.png new file mode 100644 index 0000000..ad17b57 Binary files /dev/null and b/Attachments/CoDesign HW-SW.png differ diff --git a/Attachments/Control Unit and DataPath.png b/Attachments/Control Unit and DataPath.png new file mode 100644 index 0000000..6a7bf30 Binary files /dev/null and b/Attachments/Control Unit and DataPath.png differ diff --git a/Attachments/FSM.png b/Attachments/FSM.png new file mode 100644 index 0000000..b34318b Binary files /dev/null and b/Attachments/FSM.png differ diff --git a/Attachments/RAM.png b/Attachments/RAM.png new file mode 100644 index 0000000..31f8026 Binary files /dev/null and b/Attachments/RAM.png differ diff --git a/Attachments/Автомат с магазинной памятью.png b/Attachments/Автомат с магазинной памятью.png new file mode 100644 index 0000000..3987ac8 Binary files /dev/null and b/Attachments/Автомат с магазинной памятью.png differ diff --git a/Attachments/Машина фон Неймана.png b/Attachments/Машина фон Неймана.png new file mode 100644 index 0000000..77de86a Binary files /dev/null and b/Attachments/Машина фон Неймана.png differ diff --git a/Attachments/Процессоры и системы команд.png b/Attachments/Процессоры и системы команд.png new file mode 100644 index 0000000..53c975f Binary files /dev/null and b/Attachments/Процессоры и системы команд.png differ diff --git a/Computer Science/Computer Science.md b/Computer Science/Computer Science.md index bb7d37b..a6f4e54 100644 --- a/Computer Science/Computer Science.md +++ b/Computer Science/Computer Science.md @@ -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 diff --git a/Computer Science/Архитектуры/m68k.md b/Computer Science/Архитектуры/m68k.md new file mode 100644 index 0000000..e69de29 diff --git a/Computer Science/Архитектуры/risc-iv.md b/Computer Science/Архитектуры/risc-iv.md new file mode 100644 index 0000000..e69de29 diff --git a/Computer Science/Архитектуры/vliw-iv.md b/Computer Science/Архитектуры/vliw-iv.md new file mode 100644 index 0000000..02ab719 --- /dev/null +++ b/Computer Science/Архитектуры/vliw-iv.md @@ -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 и подмены адреса возврата +- Процессор различает в памяти указатели и сами данные. В Эльбрусе нельзя создать указатель не из указателя. При этом первичный указатель безопасно получается специальными командами и механизмами в процессоре \ No newline at end of file diff --git a/Computer Science/Архитектуры/x86_64.md b/Computer Science/Архитектуры/x86_64.md new file mode 100644 index 0000000..f5f18e8 --- /dev/null +++ b/Computer Science/Архитектуры/x86_64.md @@ -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` - освободить буфер \ No newline at end of file diff --git a/Computer Science/Архитектуры/Вычислительные архитектуры.md b/Computer Science/Архитектуры/Вычислительные архитектуры.md index 594c5f9..a21d137 100644 --- a/Computer Science/Архитектуры/Вычислительные архитектуры.md +++ b/Computer Science/Архитектуры/Вычислительные архитектуры.md @@ -1,5 +1,9 @@ ## Инструментарий - [Платформа Wrench](Платформа%20Wrench.md) ## Архитектуры +- [x86_64](x86_64.md) (реальная архитектура) - [acc32](acc32.md) -- [f32a](f32a.md) \ No newline at end of file +- [f32a](f32a.md) +- [m68k](m68k.md) (будет) +- [risc-iv](risc-iv.md) (будет) +- [vliw-iv](vliw-iv.md) (в работе, есть интересные факты про Эльбрус) \ No newline at end of file diff --git a/Computer Science/Вычислительные системы/Докомпьютерные вычисления.md b/Computer Science/Вычислительные системы/Докомпьютерные вычисления.md index 7e6a6b2..d4620ed 100644 --- a/Computer Science/Вычислительные системы/Докомпьютерные вычисления.md +++ b/Computer Science/Вычислительные системы/Докомпьютерные вычисления.md @@ -77,7 +77,7 @@ Цвета - 3 партии входных данных. Цифры - на каком такте будут на данном этапе вычисления ### Практика -На практике все перечисленные механизмы встречаются в современных [компьютерных системах](Компьютерные%20системы.md), в том числе: +На практике все перечисленные механизмы встречаются в современных [компьютерных системах](../Системная%20инженерия/Компьютерные%20системы.md), в том числе: - В процессорах общего назначения - В специализированных процессорах - В распределенных системах diff --git a/Computer Science/Вычислительные системы/Машина фон Неймана.md b/Computer Science/Вычислительные системы/Машина фон Неймана.md new file mode 100644 index 0000000..30b83ec --- /dev/null +++ b/Computer Science/Вычислительные системы/Машина фон Неймана.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. Адресация операндов +Кроме того: ввод-вывод, параллелизм, иерархия памяти и тп \ No newline at end of file diff --git a/Computer Science/Вычислительные системы/Модель вычислений.md b/Computer Science/Вычислительные системы/Модель вычислений.md new file mode 100644 index 0000000..8df8943 --- /dev/null +++ b/Computer Science/Вычислительные системы/Модель вычислений.md @@ -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. Снижение сложности разработки масштабных систем \ No newline at end of file diff --git a/Computer Science/Вычислительные системы/ПЛК.md b/Computer Science/Вычислительные системы/ПЛК.md index 519e0d7..3770056 100644 --- a/Computer Science/Вычислительные системы/ПЛК.md +++ b/Computer Science/Вычислительные системы/ПЛК.md @@ -7,7 +7,7 @@ ### ПЛК - Специальная разновидность электронной вычислительной машины - Особенности - 1. [Управляющие системы](Управляющие%20системы.md) + 1. [Управляющие системы](../Системная%20инженерия/Управляющие%20системы.md) 2. Законченные устройства для встроенного использования 3. Специализация ввода-вывода, модульность 4. Выделение инструментальной составляющей diff --git a/Computer Science/Вычислительные системы/Процессоры и системы команд.md b/Computer Science/Вычислительные системы/Процессоры и системы команд.md new file mode 100644 index 0000000..b925d6e --- /dev/null +++ b/Computer Science/Вычислительные системы/Процессоры и системы команд.md @@ -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) \ No newline at end of file diff --git a/Computer Science/Системная инженерия/Hardware and Software.md b/Computer Science/Системная инженерия/Hardware and Software.md new file mode 100644 index 0000000..121b86e --- /dev/null +++ b/Computer Science/Системная инженерия/Hardware and Software.md @@ -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. От прикладной задачи + - От области (библиотеки) + - От модели вычислений (принципов организации вычислительного процесса: параллелизм, конвейризация, оптимизации и тд) diff --git a/Computer Science/Вычислительные системы/Информационные системы.md b/Computer Science/Системная инженерия/Информационные системы.md similarity index 94% rename from Computer Science/Вычислительные системы/Информационные системы.md rename to Computer Science/Системная инженерия/Информационные системы.md index bce5d4d..5ac394c 100644 --- a/Computer Science/Вычислительные системы/Информационные системы.md +++ b/Computer Science/Системная инженерия/Информационные системы.md @@ -12,4 +12,4 @@ 3. Desktops - компьютеры на рабочем месте, почти у всех 4. Сервисы - решения прикладных задач, чтобы не делать их локально 5. Мобильные вычисления - повсеместно -6. Вычисления окружают нас уже повсеместно +6. Вычисления окружают нас уже повсеместно diff --git a/Computer Science/Вычислительные системы/Компьютерные системы.md b/Computer Science/Системная инженерия/Компьютерные системы.md similarity index 100% rename from Computer Science/Вычислительные системы/Компьютерные системы.md rename to Computer Science/Системная инженерия/Компьютерные системы.md diff --git a/Computer Science/Системная инженерия/Особенности производства аппаратуры.md b/Computer Science/Системная инженерия/Особенности производства аппаратуры.md index 929f245..ddbc08e 100644 --- a/Computer Science/Системная инженерия/Особенности производства аппаратуры.md +++ b/Computer Science/Системная инженерия/Особенности производства аппаратуры.md @@ -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. Долгосрочные эффекты \ No newline at end of file +4. Долгосрочные эффекты +### Сложность изменений +1. Чем совершеннее технология, тем сложнее внести изменения +2. Физический контакт +### Варианты замены устаревшей аппаратуры +1. Перепроектирование на новой элементной базе +2. Модульная организация. Стандартные интерфейсы. Имитация старых систем +3. Виртуализация + +Как решаем проблемы аппаратуры - [Hardware and Software](Hardware%20and%20Software.md) \ No newline at end of file diff --git a/Computer Science/Системная инженерия/Понятие системы.md b/Computer Science/Системная инженерия/Понятие системы.md index 1884f42..c1b536f 100644 --- a/Computer Science/Системная инженерия/Понятие системы.md +++ b/Computer Science/Системная инженерия/Понятие системы.md @@ -57,4 +57,4 @@ Множественность точек зрения на систему. Систему может разрушить проблема коммуникации при разработке Формальный способ зафиксировать эти точки зрения и передать их другим - [архитектура](Понятие%20архитектуры.md) ## Применение в Computer Science -- [Компьютерные системы](../Вычислительные%20системы/Компьютерные%20системы.md) \ No newline at end of file +- [Компьютерные системы](Компьютерные%20системы.md) \ No newline at end of file diff --git a/Computer Science/Вычислительные системы/Управляющие системы.md b/Computer Science/Системная инженерия/Управляющие системы.md similarity index 100% rename from Computer Science/Вычислительные системы/Управляющие системы.md rename to Computer Science/Системная инженерия/Управляющие системы.md diff --git a/Other/Linux.md b/Other/Linux.md index 7621dbc..d85b45b 100644 --- a/Other/Linux.md +++ b/Other/Linux.md @@ -2,4 +2,28 @@ ```bash xprop WM_CLASS ``` -Дальше кликаем в открытом окне. Нужно чтобы изменить иконку на панели задач, путь: `~/.local/share/applications` \ No newline at end of file +Дальше кликаем в открытом окне. Нужно чтобы изменить иконку на панели задач, путь: `~/.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)` \ No newline at end of file diff --git a/Other/Полезные утилиты и сайты.md b/Other/Полезные утилиты и сайты.md index a9bb717..83594fd 100644 --- a/Other/Полезные утилиты и сайты.md +++ b/Other/Полезные утилиты и сайты.md @@ -3,4 +3,11 @@ Установка через `pipx`: `pipx install gitingest`, дальше в любой папке команда `gitingest`, либо команда с указанием папки Есть веб-версия, переходим в любой репозиторий или папку в репозитории и меняем в ссылке `https://github.com/...` на `https://gitingest.com/...` ## roadmap.sh -[Сайт](https://roadmap.sh/) с полезными роадмапами \ No newline at end of file +[Сайт](https://roadmap.sh/) с полезными роадмапами +## thefuck +Быстро исправляет опечатку в команде и так далее +```bash +sudo apt install thefuck +echo 'eval $(thefuck --alias oops)' >> ~/.zshrc # oops - алиас на thefuck, можно любое слово +source ~/.zshrc +``` \ No newline at end of file diff --git a/index.md b/index.md index 17c4885..12ae103 100644 --- a/index.md +++ b/index.md @@ -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 - будет... diff --git a/Веб/Веб.md b/Веб/Веб.md index ecdd529..7aaabc3 100644 --- a/Веб/Веб.md +++ b/Веб/Веб.md @@ -14,3 +14,5 @@ - [HTML](Фронтенд/HTML.md) - [CSS](Фронтенд/CSS.md) - [JavaScript](Фронтенд/JavaScript.md) +## Клиент-серверное взаимодействие +- [Клиент-серверное взаимодействие](Клиент-сервер/Клиент-серверное%20взаимодействие.md) \ No newline at end of file diff --git a/Веб/Клиент-сервер/AJAX.md b/Веб/Клиент-сервер/AJAX.md new file mode 100644 index 0000000..98fe7db --- /dev/null +++ b/Веб/Клиент-сервер/AJAX.md @@ -0,0 +1,20 @@ +- Asynchronious JavaScript and XML +- Подход к построению интерактивных пользовательских интерфейсов веб-приложений +- Основан на фоновом обмене данными браузера с веб-сервером +- При обмене данными между клиентом и сервером веб-страница не перезагружается полностью +## Основные принципы +- Использование технологии динамического обращения к серверу "на лету", без перезагрузки всей страницы +- Использование [DHTML](../Фронтенд/DHTML.md) для динамического изменения содержания страницы +## Преимущества +- Экономия трафика +- Уменьшение нагрузки на сервер +- Ускорение реакции интерфейса +## Недостатки +- Динамически загружаемое содержимое недоступно поисковикам +- Сложнее собирать метрики по использованию сайта +- Усложнение проекта +- Требуется включенный JS в браузере +## Реализация в коде +- [XMLHTTPRequest](XMLHTTPRequest.md) +- [JQuery](JQuery.md) +- [Fetch API](Fetch%20API.md) \ No newline at end of file diff --git a/Веб/Клиент-сервер/CGI.md b/Веб/Клиент-сервер/CGI.md new file mode 100644 index 0000000..e2f4b48 --- /dev/null +++ b/Веб/Клиент-сервер/CGI.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) \ No newline at end of file diff --git a/Веб/Клиент-сервер/FastCGI.md b/Веб/Клиент-сервер/FastCGI.md new file mode 100644 index 0000000..5b9e064 --- /dev/null +++ b/Веб/Клиент-сервер/FastCGI.md @@ -0,0 +1,3 @@ +- Все запросы могут обрабатываться одним процессом CGI-программы +- Веб-сервер взаимодействует с процессом через UNIX Domain Sockets или TCP/IP (а не через stdin и stdout) +- Для общения используется бинарный протокол, обеспечивающий передачу любых текстовых данных diff --git a/Веб/Клиент-сервер/Fetch API.md b/Веб/Клиент-сервер/Fetch API.md new file mode 100644 index 0000000..71457c6 --- /dev/null +++ b/Веб/Клиент-сервер/Fetch API.md @@ -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) \ No newline at end of file diff --git a/Веб/Клиент-сервер/JQuery.md b/Веб/Клиент-сервер/JQuery.md new file mode 100644 index 0000000..4571c0a --- /dev/null +++ b/Веб/Клиент-сервер/JQuery.md @@ -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("
New content
"); +``` +## Работа с событиями +```JavaScript +$("#foo").bind("mouseenter mouseleave", function() { + $(this).toggleClass("entered"); +}); +``` +## Подключение +### Через CDN +```HTML + + +``` +### Локально +```HTML + + +``` +## Почему устарел +- JS эволюционировал: добавили `document.querySelector` (написано в [заметке про DOM](../Фронтенд/DOM.md)), добавили [Fetch API](Fetch%20API.md) +- Смена парадигмы: императивный стиль -> декларативный (в современных React, Vue, Angular) \ No newline at end of file diff --git a/Веб/Клиент-сервер/Polling.md b/Веб/Клиент-сервер/Polling.md new file mode 100644 index 0000000..70ca588 --- /dev/null +++ b/Веб/Клиент-сервер/Polling.md @@ -0,0 +1,11 @@ +## Short Polling +- Браузер через JS (`setInterval` + `fetch`) отправляет AJAX-запросы на сервер каждые 2 секунды +- Сервер отвечает сразу: либо отдает новые данные, либо говорит, что данных нет +- Элементарная реализация, но 99% запросов не нужны +## Long Polling +Костыль до появления [WebSocket](WebSocket.md) +- Браузер делает AJAX-запрос на сервер +- Сервер отвечает не сразу, но удерживает соединение открытым +- Как только появляется сообщение, сервер отдает ответ +- Соединение для этих данных закрывается, клиент повторяет Long Polling запрос +- Нет пустых запросов, но серверу приходится держать в ОЗУ тысячи открытых соединений \ No newline at end of file diff --git a/Веб/Клиент-сервер/SSE.md b/Веб/Клиент-сервер/SSE.md new file mode 100644 index 0000000..7c9a05e --- /dev/null +++ b/Веб/Клиент-сервер/SSE.md @@ -0,0 +1,6 @@ +- Sever-Sent Events +- Середина между [Polling](Polling.md) и [WebSocket](WebSocket.md) +- Однонаправленный канал (от сервера к браузеру) +- Браузер подписывается, а сервер шлет ему события +- Подходит для ленты новостей +- Работает поверх обычного [HTTP](../Сеть%20и%20API/HTTP.md) \ No newline at end of file diff --git a/Веб/Клиент-сервер/WebSocket.md b/Веб/Клиент-сервер/WebSocket.md new file mode 100644 index 0000000..84e770e --- /dev/null +++ b/Веб/Клиент-сервер/WebSocket.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-коннект +## Плюсы +- Идеально для реалтайма +- Нулевые расходы на трафик +## Минусы +- Сложнее администрировать \ No newline at end of file diff --git a/Веб/Клиент-сервер/XMLHTTPRequest.md b/Веб/Клиент-сервер/XMLHTTPRequest.md new file mode 100644 index 0000000..f7d9926 --- /dev/null +++ b/Веб/Клиент-сервер/XMLHTTPRequest.md @@ -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 + } +} +``` \ No newline at end of file diff --git a/Веб/Клиент-сервер/Клиент-серверное взаимодействие.md b/Веб/Клиент-сервер/Клиент-серверное взаимодействие.md new file mode 100644 index 0000000..7d1d62a --- /dev/null +++ b/Веб/Клиент-сервер/Клиент-серверное взаимодействие.md @@ -0,0 +1,10 @@ +## Клиентские запросы +- [AJAX](AJAX.md) +## Модели взаимодействия +- [WebSocket](WebSocket.md) +- [Polling](Polling.md) +- [SSE](SSE.md) +## Серверная обработка +- [Серверные сценарии](Серверные%20сценарии.md) +- [CGI](CGI.md) +- [FastCGI](FastCGI.md) \ No newline at end of file diff --git a/Веб/Клиент-сервер/Серверные сценарии.md b/Веб/Клиент-сервер/Серверные сценарии.md new file mode 100644 index 0000000..071ad91 --- /dev/null +++ b/Веб/Клиент-сервер/Серверные сценарии.md @@ -0,0 +1,3 @@ +- Программы, вызываемые на сервере для формирования динамического контента +- Веб-сервер "делегирует" им на обработку запрос и "транслирует" сформированный ими ответ клиенту +- Могут использоваться вместе со "статикой", могут - сами по себе \ No newline at end of file diff --git a/Веб/Фронтенд/DHTML.md b/Веб/Фронтенд/DHTML.md new file mode 100644 index 0000000..66f3e03 --- /dev/null +++ b/Веб/Фронтенд/DHTML.md @@ -0,0 +1,7 @@ +Dynamic HTML - способ создания интерактивного веб-сайта, использующий сочетание +- Статичного языка разметки [HTML](HTML.md) +- Выполняемого на стороне клиента скриптового языка [JavaScript](JavaScript.md) +- [CSS](CSS.md) (каскадных таблиц стилей) +- [DOM](DOM.md) (объектной модели документа) +## Концепция +Использовать JavaScipt для изменения HTML-элементов и их стилей на стороне клиента в real-time \ No newline at end of file diff --git a/Веб/Фронтенд/ECMAScript.md b/Веб/Фронтенд/ECMAScript.md index 83e2ba1..d468ab4 100644 --- a/Веб/Фронтенд/ECMAScript.md +++ b/Веб/Фронтенд/ECMAScript.md @@ -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 diff --git a/Итмо/3 сем.md b/Итмо/3 сем.md deleted file mode 100644 index f2d0d47..0000000 --- a/Итмо/3 сем.md +++ /dev/null @@ -1,8 +0,0 @@ -Предметы третьего сема: -1. [АК](Предметы/АК.md) -2. [Веб-программирование](Предметы/Веб-программирование.md) -3. [ЯПы](Предметы/ЯПы.md) -4. [Физика](Предметы/Физика.md) -5. [Теорвер](Предметы/Теорвер.md) -6. [Матан](Предметы/Матан.md) -7. [ВТП](Предметы/ВТП.md) \ No newline at end of file diff --git a/Итмо/Helios.md b/Итмо/Helios.md new file mode 100644 index 0000000..ea50125 --- /dev/null +++ b/Итмо/Helios.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) +Готово! \ No newline at end of file diff --git a/Итмо/ИТМО.md b/Итмо/ИТМО.md new file mode 100644 index 0000000..f067d02 --- /dev/null +++ b/Итмо/ИТМО.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) Гелиоса \ No newline at end of file diff --git a/Итмо/Лабы/АК/АК лаб 4 доска.md b/Итмо/Лабы/АК/АК лаб 4 доска.md new file mode 100644 index 0000000..0a6ca2b --- /dev/null +++ b/Итмо/Лабы/АК/АК лаб 4 доска.md @@ -0,0 +1,24 @@ +--- + +kanban-plugin: board + +--- + +## В работе + +- [ ] Собрать материалы +- [ ] Изучить примеры лабб +- [ ] ... + + +## Выполнено + + + + + +%% kanban:settings +``` +{"kanban-plugin":"board","list-collapse":[false,false]} +``` +%% \ No newline at end of file diff --git a/Итмо/Лабы/АК/АК лаб 4.md b/Итмо/Лабы/АК/АК лаб 4.md new file mode 100644 index 0000000..15edb38 --- /dev/null +++ b/Итмо/Лабы/АК/АК лаб 4.md @@ -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` \ No newline at end of file diff --git a/Итмо/Лабы/Веб/Деплой лаб.md b/Итмо/Лабы/Веб/Деплой лаб.md new file mode 100644 index 0000000..a4e5311 --- /dev/null +++ b/Итмо/Лабы/Веб/Деплой лаб.md @@ -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 diff --git a/Итмо/Предметы/Веб-программирование.md b/Итмо/Предметы/Веб-программирование.md index e98735c..fb6d72e 100644 --- a/Итмо/Предметы/Веб-программирование.md +++ b/Итмо/Предметы/Веб-программирование.md @@ -11,8 +11,7 @@ 2 - декабрь ## Лабы На сайте великого тюнита, их 4 -На том же сайте гайд на деплой фронта на гелиос -Напомню классику - [Гайд на 2 курс гитхаб](https://github.com/Imtjl/2nd-year-guide) - там гайд на деплой лаб +[Деплой лаб](../Лабы/Веб/Деплой%20лаб.md) - гайд на деплой лаб ## Лекции [Веб](../../Веб/Веб.md) ## Материалы diff --git a/Программирование на Java/Синтаксис и типы/Базовый синтаксис/Типы данных.md b/Программирование на Java/Синтаксис и типы/Базовый синтаксис/Типы данных.md index 73cea8f..413a0bc 100644 --- a/Программирование на Java/Синтаксис и типы/Базовый синтаксис/Типы данных.md +++ b/Программирование на Java/Синтаксис и типы/Базовый синтаксис/Типы данных.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` diff --git a/ЯПы/ЯПы.md b/ЯПы/ЯПы.md index 1df9e10..87990c1 100644 --- a/ЯПы/ЯПы.md +++ b/ЯПы/ЯПы.md @@ -2,5 +2,5 @@ ## Что это? Методички по семенарам (разжёванная теория для самых маленьких + доп материалы) -[[Семинар-1]] - Окружение, инструменты, первая программа -[[Семинар-2]] - Функции, стек, конечные автоматы \ No newline at end of file +[Семинар-1](Семинары/Семинар-1.md) - Окружение, инструменты, первая программа +[Семинар-2](Семинары/Семинар-2.md) - Функции, стек, конечные автоматы \ No newline at end of file