Compare commits

...

16 Commits

Author SHA1 Message Date
Aklivtsov b62e54bbb0 Merge branch 'master' into AK_Additions 2026-10-20 12:55:54 +03:00
roma-dxunvrs 4d0e404259 add vliw, empty risc and m68k
deploy / Pull and Restart (push) Successful in 16s
2026-10-15 16:39:49 +03:00
roma-dxunvrs 005017595b 10.10
deploy / Pull and Restart (push) Successful in 16s
2026-10-10 19:41:44 +03:00
roma-dxunvrs 23a9e06d53 update index
deploy / Pull and Restart (push) Successful in 16s
2026-10-08 21:27:47 +03:00
roma-dxunvrs 8c95d15f6c add deploy guide 2026-10-08 21:00:18 +03:00
roma-dxunvrs 61e293f81b update zsh guide
deploy / Pull and Restart (push) Successful in 17s
2026-10-05 23:57:00 +03:00
roma-dxunvrs 75e45eb930 web add deploy guide
deploy / Pull and Restart (push) Successful in 17s
2026-10-05 22:49:35 +03:00
roma-dxunvrs 12a473f46e web update
deploy / Pull and Restart (push) Successful in 17s
2026-10-04 19:57:51 +03:00
roma-dxunvrs 11432e782f csa update
deploy / Pull and Restart (push) Successful in 16s
2026-10-03 13:42:57 +03:00
roma-dxunvrs fec7f50b3e 02.10.26
deploy / Pull and Restart (push) Successful in 16s
2026-10-02 22:58:53 +03:00
roma-dxunvrs 4886625dac fix
deploy / Pull and Restart (push) Successful in 18s
2026-10-01 20:57:53 +03:00
roma-dxunvrs 977e016822 other: important
deploy / Pull and Restart (push) Successful in 17s
2026-10-01 20:55:51 +03:00
roma-dxunvrs 3764f7dafa js: add table of contents
deploy / Pull and Restart (push) Successful in 17s
2026-10-01 11:32:48 +03:00
roma-dxunvrs ecd928d72d other: add zsh guide
deploy / Pull and Restart (push) Successful in 16s
2026-09-30 20:41:07 +03:00
roma-dxunvrs c0b8ac0043 fix PL, add x86 in CS
deploy / Pull and Restart (push) Successful in 16s
2026-09-29 21:49:51 +03:00
roma 88b307c311 Merge pull request 'ProgLangs added. 29.09.26' (#4) from AK_Additions into master
deploy / Pull and Restart (push) Successful in 17s
Reviewed-on: #4
2026-09-29 21:29:11 +03:00
50 changed files with 825 additions and 26 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

+6 -1
View File
@@ -8,10 +8,15 @@
- Устранить элементы "магического мышления" и "карго культа". - Устранить элементы "магического мышления" и "карго культа".
## Системная инженерия ## Системная инженерия
- [Понятие системы](Системная%20инженерия/Понятие%20системы.md) - [Понятие системы](Системная%20инженерия/Понятие%20системы.md)
- [Компьютерные системы](Вычислительные%20системы/Компьютерные%20системы.md) - [Компьютерные системы](Системная%20инженерия/Компьютерные%20системы.md)
- [Особенности производства аппаратуры](Системная%20инженерия/Особенности%20производства%20аппаратуры.md) - [Особенности производства аппаратуры](Системная%20инженерия/Особенности%20производства%20аппаратуры.md)
- [Hardware and Software](Системная%20инженерия/Hardware%20and%20Software.md)
## Схемотехника ## Схемотехника
- [Цифровая схемотехника](Цифровая%20схемотехника/Цифровая%20схемотехника.md) - [Цифровая схемотехника](Цифровая%20схемотехника/Цифровая%20схемотехника.md)
## Теория вычислений
- [Модель вычислений](Вычислительные%20системы/Модель%20вычислений.md)
- [Процессоры и системы команд](Вычислительные%20системы/Процессоры%20и%20системы%20команд.md)
- [Машина фон Неймана](Вычислительные%20системы/Машина%20фон%20Неймана.md)
## Вычислительные архитектуры ## Вычислительные архитектуры
- [Вычислительные архитектуры](Архитектуры/Вычислительные%20архитектуры.md) - [Вычислительные архитектуры](Архитектуры/Вычислительные%20архитектуры.md)
## Инструменты low-level ## Инструменты 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) - [Платформа Wrench](Платформа%20Wrench.md)
## Архитектуры ## Архитектуры
- [x86_64](x86_64.md) (реальная архитектура)
- [acc32](acc32.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 партии входных данных. Цифры - на каком такте будут на данном этапе вычисления Цвета - 3 партии входных данных. Цифры - на каком такте будут на данном этапе вычисления
### Практика ### Практика
На практике все перечисленные механизмы встречаются в современных [компьютерных системах](Компьютерные%20системы.md), в том числе: На практике все перечисленные механизмы встречаются в современных [компьютерных системах](../Системная%20инженерия/Компьютерные%20системы.md), в том числе:
- В процессорах общего назначения - В процессорах общего назначения
- В специализированных процессорах - В специализированных процессорах
- В распределенных системах - В распределенных системах
@@ -0,0 +1,61 @@
1. Развитие [Машины Тьюринга](Модель%20вычислений.md#Машина%20Тьюринга). Отличия:
- Лента заменена на Random-Access Memory (RAM)
- Инструкции и данные объединены
2. Призвана быть максимально простой в реализации и производстве
3. Процедурное программирование и ООП - тот же принцип
![](../../Attachments/Машина%20фон%20Неймана.png)
## Особенности
1. Использование двоичного кодирования
- Встречается и троичное, и двоично-десятичное кодирование
2. Программное управление. Команды выполняются последовательно
- Последовательность и порядок сегодня условны
3. Память компьютера однородно хранит данные и программы
- Однородность спорна
4. Ячейки памяти компьютера имеют адреса. Random-Access Memory
- Адрес не сводится к целому числу сегодня
- Память не является пассивным элементом компьютера
5. Возможность условного перехода
- И перехода по иным причинам
## Окружение
### (Микро)процессор
Цифровая схема, которая выполняет операции с внешним источником данных (обычно с памятью или потоком данных)
### (Микро)контроллер
Микросхема, предназначенная для управления электронными устройствами. Типичный микроконтроллер сочетает функции процессора и периферийных устройств, содержит ОЗУ и/или ПЗУ
### Оперативная память (память)
Обычно часть компьютерной памяти, в которой хранится выполняемый машинный код, а также входные, выходные и промежуточные данные
## Control Unit и DataPath
### Control Unit
Компонент центрального процессора (CPU), управляющей работой процессора. CU часто использует двоичный декодер для преобразования закодированных инструкций в управляющие сигналы, координирующие работу остальных блоков
### DataPath
АЛУ, набор регистров и внутренние шины CPU, по которым данные перемещаются между ними
![](../../Attachments/Control%20Unit%20and%20DataPath.png)
## Виды инструкций
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
Относительно просто реализуются в виде аппаратных схем
### Конечные автоматы
![](../../Attachments/FSM.png)
Несколько наборов состояний системы и условия переходов между ними
#### Автомат с магазинной памятью
![](../../Attachments/Автомат%20с%20магазинной%20памятью.png)
Например, парсеры
#### Достоинства
- Таблица состояний
- Верифицируемость переходов
- Простая реализация в схемотехнике и ПО
### Машина Тьюринга
Включает:
- Неограниченную двустороннюю ленту, разделенную на ячейки
- Устройство управления (головка записи-чтения), которое может находиться в конечном числе состояний
Управляющее устройство может:
- Перемещаться по ленте влево и вправо
- Читать и записывать в ячейки символы конечного алфавита
Машина Тьюринга
1. Не может быть реализована на практике (нет бесконечной ленты)
2. Обладает полнотой по Тьюрингу (можно реализовать любой известный алгоритм)
3. Проблема остановки
4. Данные и управление отделены
5. Ориентирована на реализацию
### Random Access Machine
![](../../Attachments/RAM.png)
## Функциональные модели
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. Законченные устройства для встроенного использования 2. Законченные устройства для встроенного использования
3. Специализация ввода-вывода, модульность 3. Специализация ввода-вывода, модульность
4. Выделение инструментальной составляющей 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
![](../../Attachments/Процессоры%20и%20системы%20команд.png)
## Архитектура процессора
То, как видит компьютер программист. Определена набором команд (язык), местом нахождения операндов (регистры и память) и вычислительными механизмами (кеш, прерывания и тд)
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
![](../../Attachments/CoDesign%20HW-SW.png)
В итоге: сокращение цикла разработки
## Как выбирать инструменты для разработки Software
1. От доступного Hardware и инструментальных средств
2. От доступной команды разработки
3. От прикладной задачи
- От области (библиотеки)
- От модели вычислений (принципов организации вычислительного процесса: параллелизм, конвейризация, оптимизации и тд)
@@ -12,4 +12,4 @@
3. Desktops - компьютеры на рабочем месте, почти у всех 3. Desktops - компьютеры на рабочем месте, почти у всех
4. Сервисы - решения прикладных задач, чтобы не делать их локально 4. Сервисы - решения прикладных задач, чтобы не делать их локально
5. Мобильные вычисления - повсеместно 5. Мобильные вычисления - повсеместно
6. Вычисления окружают нас уже повсеместно 6. Вычисления окружают нас уже повсеместно
@@ -23,7 +23,7 @@
Различают: Различают:
- одно- и двухслойные платы - одно- и двухслойные платы
- многослойные платы - многослойные платы
## Виды монтажа компонентоы ## Виды монтажа компонентов
- Выводной (в отверстие) - Выводной (в отверстие)
- Поверхностный - Поверхностный
- Встроенный - Встроенный
@@ -94,6 +94,7 @@
1. Разные частоты процессоров -> разные SKU из одного wafer 1. Разные частоты процессоров -> разные SKU из одного wafer
2. Core Single / Core Duo / Core Quad -> одинаковый кристалл, разное число активных ядер 2. Core Single / Core Duo / Core Quad -> одинаковый кристалл, разное число активных ядер
3. Intel Pentium / Celeron -> урезанные Core с отключенными кэшем и функциями 3. Intel Pentium / Celeron -> урезанные Core с отключенными кэшем и функциями
## Реальный мир
### Производство ### Производство
1. Логистика 1. Логистика
2. Склады 2. Склады
@@ -107,4 +108,13 @@
1. Амортизация. Выход оборудования из строя 1. Амортизация. Выход оборудования из строя
2. Необходимость физического доступа 2. Необходимость физического доступа
3. Особенности среды эксплуатации 3. Особенности среды эксплуатации
4. Долгосрочные эффекты 4. Долгосрочные эффекты
### Сложность изменений
1. Чем совершеннее технология, тем сложнее внести изменения
2. Физический контакт
### Варианты замены устаревшей аппаратуры
1. Перепроектирование на новой элементной базе
2. Модульная организация. Стандартные интерфейсы. Имитация старых систем
3. Виртуализация
Как решаем проблемы аппаратуры - [Hardware and Software](Hardware%20and%20Software.md)
@@ -57,4 +57,4 @@
Множественность точек зрения на систему. Систему может разрушить проблема коммуникации при разработке Множественность точек зрения на систему. Систему может разрушить проблема коммуникации при разработке
Формальный способ зафиксировать эти точки зрения и передать их другим - [архитектура](Понятие%20архитектуры.md) Формальный способ зафиксировать эти точки зрения и передать их другим - [архитектура](Понятие%20архитектуры.md)
## Применение в Computer Science ## Применение в Computer Science
- [Компьютерные системы](../Вычислительные%20системы/Компьютерные%20системы.md) - [Компьютерные системы](Компьютерные%20системы.md)
+25 -1
View File
@@ -2,4 +2,28 @@
```bash ```bash
xprop WM_CLASS 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`, либо команда с указанием папки Установка через `pipx`: `pipx install gitingest`, дальше в любой папке команда `gitingest`, либо команда с указанием папки
Есть веб-версия, переходим в любой репозиторий или папку в репозитории и меняем в ссылке `https://github.com/...` на `https://gitingest.com/...` Есть веб-версия, переходим в любой репозиторий или папку в репозитории и меняем в ссылке `https://github.com/...` на `https://gitingest.com/...`
## roadmap.sh ## roadmap.sh
[Сайт](https://roadmap.sh/) с полезными роадмапами [Сайт](https://roadmap.sh/) с полезными роадмапами
## thefuck
Быстро исправляет опечатку в команде и так далее
```bash
sudo apt install thefuck
echo 'eval $(thefuck --alias oops)' >> ~/.zshrc # oops - алиас на thefuck, можно любое слово
source ~/.zshrc
```
+2 -1
View File
@@ -1,10 +1,11 @@
Очень "полезные" материалы Очень "полезные" материалы
[Java](Программирование%20на%20Java/Java.md) - полный, ультимативный гайд по жабе (WIP) [Java](Программирование%20на%20Java/Java.md) - полный, ультимативный гайд по жабе (WIP)
[АиСД](АиСД/АиСД.md)- разбор задач на алгоритмы и структуры данных (пока что только с литкода), позже будут добавлены шаблоны для методов, описание каждой из структур данных и много чего еще [АиСД](АиСД/АиСД.md)- разбор задач на алгоритмы и структуры данных (пока что только с литкода), позже будут добавлены шаблоны для методов, описание каждой из структур данных и много чего еще
[ИТМО](Итмо/3%20сем.md) - список предметов на текущий семестр + базовые требования + материалы [ИТМО](Итмо/ИТМО.md) - список предметов на текущий семестр + базовые требования + материалы
[Веб](Веб/Веб.md) - лекции и заметки по Веб-программированию [Веб](Веб/Веб.md) - лекции и заметки по Веб-программированию
[Computer Science](Computer%20Science/Computer%20Science.md) - лекции и материалы по АК+ОПД+PL и в целом база по CS [Computer Science](Computer%20Science/Computer%20Science.md) - лекции и материалы по АК+ОПД+PL и в целом база по CS
[Экзамен](ОПД/Экзамен.md) - разбор экзамена по ОПД за 2 семестр [Экзамен](ОПД/Экзамен.md) - разбор экзамена по ОПД за 2 семестр
[ЯПы](ЯПы/ЯПы.md) - семинары по ЯПам (осторожно, AI-SLOP)
[Other](Other/Other.md) - всякая всячина [Other](Other/Other.md) - всякая всячина
Spring Boot - будет... Spring Boot - будет...
+2
View File
@@ -14,3 +14,5 @@
- [HTML](Фронтенд/HTML.md) - [HTML](Фронтенд/HTML.md)
- [CSS](Фронтенд/CSS.md) - [CSS](Фронтенд/CSS.md)
- [JavaScript](Фронтенд/JavaScript.md) - [JavaScript](Фронтенд/JavaScript.md)
## Клиент-серверное взаимодействие
- [Клиент-серверное взаимодействие](Клиент-сервер/Клиент-серверное%20взаимодействие.md)
+20
View File
@@ -0,0 +1,20 @@
- Asynchronious JavaScript and XML
- Подход к построению интерактивных пользовательских интерфейсов веб-приложений
- Основан на фоновом обмене данными браузера с веб-сервером
- При обмене данными между клиентом и сервером веб-страница не перезагружается полностью
## Основные принципы
- Использование технологии динамического обращения к серверу "на лету", без перезагрузки всей страницы
- Использование [DHTML](../Фронтенд/DHTML.md) для динамического изменения содержания страницы
## Преимущества
- Экономия трафика
- Уменьшение нагрузки на сервер
- Ускорение реакции интерфейса
## Недостатки
- Динамически загружаемое содержимое недоступно поисковикам
- Сложнее собирать метрики по использованию сайта
- Усложнение проекта
- Требуется включенный JS в браузере
## Реализация в коде
- [XMLHTTPRequest](XMLHTTPRequest.md)
- [JQuery](JQuery.md)
- [Fetch API](Fetch%20API.md)
+25
View File
@@ -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 запрос
- Нет пустых запросов, но серверу приходится держать в ОЗУ тысячи открытых соединений
+6
View File
@@ -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 @@
- Программы, вызываемые на сервере для формирования динамического контента
- Веб-сервер "делегирует" им на обработку запрос и "транслирует" сформированный ими ответ клиенту
- Могут использоваться вместе со "статикой", могут - сами по себе
+7
View File
@@ -0,0 +1,7 @@
Dynamic HTML - способ создания интерактивного веб-сайта, использующий сочетание
- Статичного языка разметки [HTML](HTML.md)
- Выполняемого на стороне клиента скриптового языка [JavaScript](JavaScript.md)
- [CSS](CSS.md) (каскадных таблиц стилей)
- [DOM](DOM.md) (объектной модели документа)
## Концепция
Использовать JavaScipt для изменения HTML-элементов и их стилей на стороне клиента в real-time
+31
View File
@@ -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 - 5 примитивных типов данных - Number, String, Boolean, Null, Undefined
- Объектный тип данных - Object - Объектный тип данных - Object
-8
View File
@@ -1,8 +0,0 @@
Предметы третьего сема:
1. [АК](Предметы/АК.md)
2. [Веб-программирование](Предметы/Веб-программирование.md)
3. [ЯПы](Предметы/ЯПы.md)
4. [Физика](Предметы/Физика.md)
5. [Теорвер](Предметы/Теорвер.md)
6. [Матан](Предметы/Матан.md)
7. [ВТП](Предметы/ВТП.md)
+17
View File
@@ -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)
Готово!
+12
View File
@@ -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]}
```
%%
+10
View File
@@ -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 - декабрь 2 - декабрь
## Лабы ## Лабы
На сайте великого тюнита, их 4 На сайте великого тюнита, их 4
На том же сайте гайд на деплой фронта на гелиос [Деплой лаб](../Лабы/Веб/Деплой%20лаб.md) - гайд на деплой лаб
Напомню классику - [Гайд на 2 курс гитхаб](https://github.com/Imtjl/2nd-year-guide) - там гайд на деплой лаб
## Лекции ## Лекции
[Веб](../../Веб/Веб.md) [Веб](../../Веб/Веб.md)
## Материалы ## Материалы
@@ -1,7 +1,5 @@
В Java: статическая типизация, сильная, явная В Java: статическая типизация, сильная, явная
Типы делятся на: [примитивные](Типы%20данных.md#Примитивные%20типы%20данных) и [ссылочные](Типы%20данных.md#Ссылочные%20типы%20данных) Типы делятся на: примитивные и ссылочные
Типы делятся на: [](.md#Примитивные%20типы%20данных|примитивные) и [](.md#Ссылочные%20типы%20данных|ссылочные)
# Примитивные типы данных # Примитивные типы данных
1. Целые - `byte`, `short`, `int`, `long` 1. Целые - `byte`, `short`, `int`, `long`
2. Символьный - `char` 2. Символьный - `char`
+2 -2
View File
@@ -2,5 +2,5 @@
## Что это? ## Что это?
Методички по семенарам (разжёванная теория для самых маленьких + доп материалы) Методички по семенарам (разжёванная теория для самых маленьких + доп материалы)
[[Семинар-1]] - Окружение, инструменты, первая программа [Семинар-1](Семинары/Семинар-1.md) - Окружение, инструменты, первая программа
[[Семинар-2]] - Функции, стек, конечные автоматы [Семинар-2](Семинары/Семинар-2.md) - Функции, стек, конечные автоматы