BufWriter<Master<'_>> – Telegram
BufWriter<Master<'_>>
105 subscribers
451 photos
28 videos
34 files
1.7K links
https://www.patreon.com/alxe_master

Видео/статьи. Конспект и мои вольные комментарии по инженерии. тут только то, что считаю полезным для себя или других =)

#os, #cloud, #rust, #golang, #python, #javaScript, #cpp, etc
Download Telegram
== КАК РАБОТАЕТ ПРОЦЕССОР
https://youtu.be/k9wK2FThEsk

разрядность = размер машинного слова = количество памяти которым опирируется процессор за раз

регистры - маленькие быстрые ячейки памяти прямо в процессоре

максимальный размер регистра = разрядность

регистры
- специального назначение
- общего назначения (переменные, параметры, временное хранилище)

AH=8 AL=8
AX=16
EAX=32
RAX=64

сегментные регистры SS CS DS ...

регистры для работы со стеком BP, CP, ...

флаговые регистры FLAGS...

указатель команд (instruction pointer) IP

регистры могут ПЕРЕПОЛНЯТЬСЯ !!!

БИОС
- найти первое ПЗУ
- найти нулевой сектор
- загрузить команду в ЦПУ
- передать управление команде

работа с трансляцией адресов
1) режим реальных адресов = 16бит
2) защищенный = 32бит
3) 64 разрядный

ИЛИ
1) режим реальных адресов + защищенный = legacy mode = 32бит
2) 64 разрядный + режим совместимости = long mode = 64бит

уровни привелегий
0 - привелегированный - ОС
1
2
3 - юзерспейс - прикладные программы

вся ОЗУ поделена на сегменты!

логический адрес = адрес начала сегмента + смещение в сегменте

в режиме реальных адресов = 2^20 = 1мб
физический адрес = адрес начала << 4 + смещение

в защищенном режиме
происходит виртуализация адреса !

логический адрес = селектор дескриптора + смещение в сегменте

селектор дескриптора (16бит) = уровень привелегий + таблица + индекс строки в таблице

таблица это структура = индекс + начальний адрес сегмента + уровень привелегий + размер сегмента

виртуальная память = страничная организация памяти.
- Каталог таблиц страниц,
- таблица страниц
- страница

64ьитный режим
- ОТКЛЮЧЕНА СИГМЕНТАЦИЯ
- есть ограничение на адресацию физической 2^52 и виртуальной памяти 2^48. изза ограничений ОС и процессоров

программа получает логический адрес
и в зависимости от режима памяти транслируется сразу в физический адрес или в виртуальный а затем в физический

получив сигнал процессор генерирует прерывание и обрабатывается обработчиком прерывания

типы прерывания
- исключение
- программный
- аппаратный

не все ОС разрешают вызывать программам прерывания напрямую
== КАК РАБОТАЕТ СТЕК
https://youtu.be/MXoMuymbfo8
SP (stack pointer) указатель вершины
BP (base pointer) адрес начала фрейма

push - поместить на вершину
pop - извлечь из вершины

push 3
pop AX - кладет на AX значение из вершины. смещает вершину ниже

jmp - просто прыгает внужную строку кода
call - перед прыжком заносит в регистр адресс возврата
ret - возвращается обратно по адресу который положил call

фрейм - место в стеке

вызов функции
- пролог (сохранение данных ДО старта функции, создание нового стэка)
- call proc
- push bp
- mov bp, sp
- код
- push 4
- push 5.5
- ....
- эпилог (возврат обратно в родительский стэк)
- mov sp, bp
- pop bp
- ret

Передача параметров функции (stdcall)
- передаются в стэк параметры в обратном порядке
- push 3 # arg[2]
- push 2 # arg[1]
- push 1 # arg[0]
- call fn
- push bp
- mov bp, sp
- mov ax, [bp + 4]
- mov bx, [bp + 6]
- mov cx, [bp + 8]
- передать можно через
- стэк
- регистры
- глобальные переменные (нельзя вызывать себя рекурсивно)

область локальных переменных - стэковый кадр (фрейм)
== КАК РАБОТАЮТ КОДИРОВКИ
https://youtu.be/4MFcmreAUhs

строки это основной вид информации

символ представляется в машине как код символа

ASCII = 7 бит

появились кодовые страницы

ANSI (American national standards institute)

- windows-125х (где х это код страны)

UNICODE
- каждый символ представляется МИНИМУМ 2 байта
- первые 128 символов полностью совпадает с ASCII
проблемы:
- расточительно по памяти т.к. минимум 2байта
- be/le - хз как расшифровывать

кодировки (правила хранения)

>> UCS-2
BOM-байты (byte order mark) - вначале каждой строки были символы указывающие как хранится BE или LE

СТРОКА = БОМ байты + символы по 2 байта
——> еще больше стало!

>> UTF-8
коды символов не фиксированные от 1 до 4х байт
- первые 128 символов = ASCII
- в начале символа стоит маска говорящая сколько байт надо прочитать
—> нефиксированное количество времени на обработку. медленней
== так как один из самых коротких - используется при передаче по сети

>> UTF-16
- вернули BOM
- сурогатная пара для обозначения 4байтных символов
+ быстрей работает

>> UTF-32
- каждый символ это 4 байта
- BOM
== еще быстрей
== еще понятней длина строки

СИ
конец строки = 00 (нуль терминатор)

в других языках используются Неизменяемые строки и при изменении используется COW
== КАК РАБОТАЮТ ЧИСЛА С ПЛАВАЮЩЕЙ ТОЧКОЙ
https://youtu.be/U0U8Ddx4TgE

IEEE-754 описывает стандарт FP

FPU - floating point unit

7.25 = 111.01

(-1)^S * 1.M * 10 ^ E
s - знак числа
M - мантисса (дробная часть числа)
E - экспонента (степень основания, смещение)

7.25
0) целую часть представляем 2 системе
= 111
1) дробную часть умножаем на два пока не получим 0. полученное значение записываем как значение дробной в 2 системе
= 01
2) целую часть смещаем до тех пор пока не останется
смещается до того места пока не останется одна единица
= 111.01 -> 1.1101
3) количество смещений и есть экспонента
= 1.1101 * 10^10
4а) знак записывается первым битом 0 или 1 (отрицательное)
4б) дробное записывается в свой сегмент, заполняя нулями справа все что отсутсвует
4в) степень записывается в свой сегмент ХИТРО! добавляется 127 (максимальное число размерности минус 1 для степени)
== 0 10000001 11010000000000000000000

спец значения в степени
- +бесконечность = если знак 0 и степень все 1 а в дробной части 0
- -бесконечность = если знак 1 и степень все 1 а в дробной части 0
- NaN = знак не имеет значения. дробная часть не 0. степень все 1

стандарты
- одинарная точность (32бит)
- двойная точность (64бит)
- четырехкратной точности (128бит)
- расширенная двойная точность (80бит)
Ускорение установки HTTPS-соединений

Саймон Харн рассказал о том, как HTTPS-сертификаты влияют на производительность сайта — "The Performance Cost of EV Certificates".

Есть три основных типа HTPS-сертификатов: Domain Validation (DV), Organisation Validation (OV), Extended Validation (EV). DV-сертификаты выдаются на основе факта принадлежности домена, как в Let's Encrypt. OV- и EV-сертификаты выдаются организациям за оплату.

EV-сертификат предоставляет большее количество информации для пользователя, но по-большому счёту он не сильно отличается от OV. Вы могли видеть, что сайт использует EV-сертификат, когда в адресной строке рядом с иконкой замка зелёным текстом отображался владелец сертификата. С версии Chrome 77 такие сертификаты отображаются обычным значком замка без зелёного текста.

OV-сертификаты валидируются на стороне веб-сервера отправкой запроса на сервер организации, выдавшей сертификат. EV-сертификаты не могут валидироваться на стороне веб-сервера, поэтому их валидация происходит на клиенте, замедляя установку HTTPS-соединения. Задержка наиболее заметна в странах бывшего СССР, в Восточной Австралии, Канаде и большинстве стран Африки. Некоторые организации сталкивались с минутной задержкой для пользователей в Китае. Эта проблема решается переходом на OV-сертификат.

#http #performance #security

https://simonhearne.com/2020/drop-ev-certs/
Algorithmic Trading with Interactive Brokers (Python and C++) (2019)
Автор: Matthew Scarpino
Количество страниц: 418

В этой книге описывается процесс разработки приложений на основе API IB Trader Workstation (TWS). Начальные главы знакомят с фундаментальными классами и функциями, а последующие главы показывают, как их можно использовать для реализации полномасштабных торговых систем. При наличии алгоритмической системы трейдерам не нужно часами смотреть на графики; просто запустите торговое приложение и позвольте TWS API выполнять свою работу.

Скачать книгу
== Why the "volatile" type class should not be used
https://www.kernel.org/doc/Documentation/process/volatile-considered-harmful.rst

короч не юзать там где стоит лок на данные. всегда ставить лок на данные

а volatile нужен суперредко. в memory mapped IO, потому что там состояние ножек может меняться непредсказуемым для компилятора образом.

плюс volatile это всегда data-race и UB
== Pointers in C / C++ [Full Course]
https://youtu.be/zuegQmMdy8M

4 часа занятного забавного индусского говора про поинторы в Си. в 2х норм

Разжовывает до состояния питьегого пюре

- Introduction to pointers in C/C++
- Working with pointers
- Pointer types, pointer arithmetic, void pointers
- Pointers to Pointers in C/C++
- Pointers as function arguments - call by reference
- Pointers and arrays
- Arrays as function arguments
- Character arrays and pointers - part 1
- Character arrays and pointers - part 2
- Pointers and 2-D arrays
- Pointers and multidimensional arrays
- Pointers and dynamic memory - stack vs heap
- Dynamic memory allocation in C - malloc calloc realloc free
- Pointers as function returns in C/C++
- Function Pointers in C / C++
- Function pointers and callbacks
- Memory leak in C/C++
This media is not supported in your browser
VIEW IN TELEGRAM
#программирование

Наткнулся на весьма интересный инструмент ускорения разработки. Это fig - autocomplete для терминала.

Можно ввести “docker r” и он продолжит “docker run”. Казалось бы всего две буквы, но если часто зависаете в терминале с докерами и файлами, то очень повышает эффективность.

Fig опенсорсный и поддерживает много инструментов разработки, а также работает с локальными папками и скриптами.

Короче говоря, советую установить. Вообще вся эта история с автодополнениями на ноутбуке крутая, хочу чтоб они были везде как в смартфоне и были точнее с нейронками, потому что я ленивый много печатать.
Forwarded from Блог*
#prog #rust #моё

Меня тут один Олег попросил коротко рассказать о афинных типах в Rust. Что ж, рассказываю.

Аффинные системы типов — это системы типов, в которых объявленные значения можно использовать не более одного раза. Как и прочие ти́повые навороты, это позволяет писать более корректные программы путём перекладывания бо́льшего числа проверок на компилятор.

Для демонстрации практической пользы приведу пару примеров из стандартной библиотеки Rust:

1. std::sync::Mutex. Для корректной работы многопоточной программы требуется, чтобы доступ к совместно разделяемым изменяемым данным был должным образом синхронизирован. Один из способов достичь его — это защитить изменяемое значение мьютексом. Простой способ, обладающий, однако, существенным недостатком: очень просто забыть захватить блокировку перед тем, как получить доступ к значению (особенно если мьютекс защищает несколько переменных). Какое решение предлагает Rust?

Посмотрим на то, как создать мьютекс. Единственный способ создать мьютекс — это передать ему защищаемое значение. После этого получить доступ к разделяемому значению можно, только попытавшись захватить блокировку или же разрушив мьютекс, причём последнее можно сделать только в том случае, если поток (в смысле thread) единолично владеет мьютексом. Таким образом, несинхронизированный доступ исключён.

Другая возможная проблема с мьютексом связана с тем, что в большинстве языков программирования значения неявно копируются: нужно прилагать специальные усилия для того, чтобы удостовериться, что каждый из thread-ов получает один и тот же мьютекс, а не свою собственную копию (тут была шутка про Go, но она была настолько толстой, что Telegram не давал загрузить пост). В Rust это получается автоматически: нет методов, позволяющих получить копию мьютекса, поэтому расшарить можно только тот или иной вид указателя на мьютекс.

2. std::fs::File. Сборщик мусора помогает освобождать занятую память, но он не очень помогает с внешними ресурсами, в частности, файлами: закрыть файл обычно нужно сразу после того, как работа с ним окончена, а сборщик мусора никаких гарантий по времени закрытий файла не даёт. В стандартной библиотеке большинства языков программирования (даже с GC) есть отдельная функция, которая закрывает файл. Тем не менее, присутствие этой функции обнажает серьёзный изъян в системе типов: файл невозможно использовать после закрытия (также, как и до открытия, но обычно это не является большой проблемой), но это состояние никак не отслеживается в системе типов. Более того, дважды закрывать файл может быть попросту опасно: например, на Linux файл описывается файловым дескриптором — фактически, просто числом. После закрытия файла это же числовое значение может быть переиспользованно для другого файла, поэтому второе закрытия того же файлового дескриптора может привести к закрытию файла в другой программе!

Как эти проблемы обходятся в Rust? Если вы проверите API File, то... Вы не найдёте там метода close! Когда File выходит из области видимости, для него вызывается деструктор, который и закрывает файл. Т. к. явного метода закрытия файла в публичном API нет, единственный способ форсировать закрытие файла — это дропнуть файл (например, вызовом std::mem::drop). В силу того, что после этого получить доступ к файлу нельзя, возможность двойного закрытия статически запрещается.

Очевидно, аффинные типы не являются серебряной пулей. Каковы же недостатки? Конкретно в случае с File недостаток очевиден: закрытие файла может завершиться ошибкой, но закрытие посредством вызова деструктора не позволяет об этом узнать. Более сильные линейные типы (в которых каждое значение используется ровно один раз) позволили бы решить эту проблему, требуя явно вызывать close и таким образом давать доступ к возможным ошибкам, но это уже тема для другого поста.
Forwarded from Блог*
Системное_программное_обеспечение_файловые_системы_ОС_Unix_zmAwX5u.pdf
795.3 KB
за сегодня обнаружил небольшой пробел того как именно выделяется файловый дескриптор и как ОСь себя ведет и что в этот момент творится в ФС. поэтому колупаю эту сторону. пока вот метода и микростатья. для начала уже закрыло прилично так вопросов

== СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ - 1997год

Unix:
- Структура ФС на диске
- Индексный дескриптор файла
- Монтируемость ФС
- Рабочие файлы
- Каталоги
- Специальные файлы (файлы устройств)
- права доступа
- Логическая структура ФС
- Внутрисистемная организация ввода/вывода
- Данные, ассоциированные с ОС и с процессом
- Взаимодействие с устройствами

Windows NT:
- Объектная модель и контроль доступа
- Организация ввода-вывода
- NTFS, принципы, восстанавливаемость


ААААА ВИнда, за что ты такая сложная а ????? переусложнили капец... и слои и клиент-серверы и микроядра и басы...

== Что такое файловый дескриптор простыми словами
https://timeweb.com/ru/community/articles/chto-takoe-faylovyy-deskriptor-prostymi-slovami
Forwarded from Заработок онлайн 💰NOSCAM
Please open Telegram to view this post
VIEW IN TELEGRAM
наконец добрался дослушать

== REST vs gRPC
https://youtu.be/jlzomoLBl6U

== REST vs GRPC (JSON index attachment)
ttps://youtu.be/jILVrU1w_yc
хехех... короч пошел ка я читать кернель как писать... надоели эти ваши сайтики и вебчики

== Rust takes a major step forward as Linux's second official language
https://www.zdnet.com/article/rust-takes-a-major-step-forward-as-linuxs-second-official-language/

== Rust support
https://lkml.org/lkml/2021/12/6/461