== Транзисторы и смерть закона Мура https://youtu.be/lHptVT-tS-Y
YouTube
Транзисторы и смерть закона Мура [2veritasium]
Помощь проекту: https://www.patreon.com/VertDider
Согласно закону Мура, вычислительная техника становится в 2 раза лучше каждые 18 месяцев. Главным образом — за счёт того, что размер транзисторов уменьшается, а их количество на чипе растёт. Но может ли такое…
Согласно закону Мура, вычислительная техника становится в 2 раза лучше каждые 18 месяцев. Главным образом — за счёт того, что размер транзисторов уменьшается, а их количество на чипе растёт. Но может ли такое…
== курс "Параллельное программирование"
https://youtube.com/playlist?list=PLlb7e2G7aSpQCPeKTcVBHJns_JOxrc_fT
про многопоточность, многопроцессорность, способы ускорить не толлько разбивая на много потоков, алгоритмы распределенных вычислений, opencl и пр
ШИКАРНЫЙ лектор. хороший курс
говорит быстро. поэтому больше чем в 1.5 не получилось ускорить
https://youtube.com/playlist?list=PLlb7e2G7aSpQCPeKTcVBHJns_JOxrc_fT
про многопоточность, многопроцессорность, способы ускорить не толлько разбивая на много потоков, алгоритмы распределенных вычислений, opencl и пр
ШИКАРНЫЙ лектор. хороший курс
говорит быстро. поэтому больше чем в 1.5 не получилось ускорить
BufWriter<Master<'_>>
== курс "Параллельное программирование" https://youtube.com/playlist?list=PLlb7e2G7aSpQCPeKTcVBHJns_JOxrc_fT про многопоточность, многопроцессорность, способы ускорить не толлько разбивая на много потоков, алгоритмы распределенных вычислений, opencl и пр …
== Лекция 1. Введение (курс «Параллельное программирование»)
https://youtu.be/kbERSWTGtKw
___Одно ядро
SIMD - Single Instruction Multi Data
SSE - Streaming SIMD Extensions
- это доп набор регистров 8 128битных регистров для 4 чисел по 32 бит (фп)
___Много ядер
- потоки
- процессы
- вычислительный кластер (MPI, Hadoop, spark)
- *fibers
последовательный код - тот который НЕВОЗМОЖНО распараллелить = работают с ним ГАРАНТИРОВАННО в одном потоке
единица планирования в ОС это один поток
IPC - interprocess communication
- file
- mmap
- pipe
- socket
socket - дексриптор в ОС (число) и работают в ОС как с файлом, как будто через сеть
критерий (много процессов или много потоков)
- быстродействие
- защищенность памяти процесса
- надежность
- поддерживаемость
TLB - translation localside buffer - кэш соответствия виртуализации mem
boost - абстракция над Win/Posix Threads
demon поток аппа ждать не будет
https://youtu.be/kbERSWTGtKw
___Одно ядро
SIMD - Single Instruction Multi Data
SSE - Streaming SIMD Extensions
- это доп набор регистров 8 128битных регистров для 4 чисел по 32 бит (фп)
___Много ядер
- потоки
- процессы
- вычислительный кластер (MPI, Hadoop, spark)
- *fibers
последовательный код - тот который НЕВОЗМОЖНО распараллелить = работают с ним ГАРАНТИРОВАННО в одном потоке
единица планирования в ОС это один поток
IPC - interprocess communication
- file
- mmap
- pipe
- socket
socket - дексриптор в ОС (число) и работают в ОС как с файлом, как будто через сеть
критерий (много процессов или много потоков)
- быстродействие
- защищенность памяти процесса
- надежность
- поддерживаемость
TLB - translation localside buffer - кэш соответствия виртуализации mem
boost - абстракция над Win/Posix Threads
demon поток аппа ждать не будет
== Лекция 2. Корректная работа с потоками
https://youtu.be/qA5XLTxmsP0
join ждет когда завершится тот поток который передали
что бы остановить поток раньше - послать сигнал ему
NPTL - Native Posix Threads Library
user-space переходит kernel-space для того что бы спланировать/управлять новый поток (потоками заведует ОС, ОС имеет защищенную модель памяти, владеет единолично этими данными) - стараться избегать переходов
поток проверяет у себя
любой syscall может завершить поток
каждый вызов test_cacnel совершает переход в кернел = медленно!
НО можно сказать что он не хочет быть завершен ! есть флаг
https://youtu.be/qA5XLTxmsP0
join ждет когда завершится тот поток который передали
что бы остановить поток раньше - послать сигнал ему
NPTL - Native Posix Threads Library
ps покажет процессыps -m еще покажет и потокиuser-space переходит kernel-space для того что бы спланировать/управлять новый поток (потоками заведует ОС, ОС имеет защищенную модель памяти, владеет единолично этими данными) - стараться избегать переходов
pthread_cancel просто устанавливает флаг IS_CANCELED этот флаг доступен внутри потока. сам код может решить что делать дальше. точное время завершения мы указать не можем.поток проверяет у себя
pthread_test_cancel() и если флаг выставлен то поток завершится. pthread_cleanup_push(*f)
pthread_test_cancel()
pthread_cleanup_pop(*f)
- формирование стэка функций для корректного завершения потока (освободить ресурсы например). если был вызван pthread_test_cancel
cancelation_point - может завершить текущий поток, договоренностьлюбой syscall может завершить поток
каждый вызов test_cacnel совершает переход в кернел = медленно!
НО можно сказать что он не хочет быть завершен ! есть флаг
YouTube
Лекция 2. Корректная работа с потоками
https://compscicenter.ru/
– Механизм запуска потока
– Корректное завершение потоков:
cancellation points (примеры кода в glibc)
interrupted exception
– Сравнение различных потоков (POSIX, boost/С++11, java)
– Проброс исключений между потоками
Лекция…
– Механизм запуска потока
– Корректное завершение потоков:
cancellation points (примеры кода в glibc)
interrupted exception
– Сравнение различных потоков (POSIX, boost/С++11, java)
– Проброс исключений между потоками
Лекция…
== Лекция 3. Примитивы синхронизации
https://youtu.be/kNWSciQtHEc
MUTEX - mutual exclusion - взаимное исключение
recursive_mutex
+ можно захватить в рамках одного потока НЕСКОЛЬКО раз (в обычном только один раз)
timed_mutex
+ захватить с ограничением по временем (типа если не удалось захватить на 10мс то не очень то и хотелось)
shared_mutex
+ захват на чтение
+ захват на чтение с возмоностью дозахвата на запись
spin_mutex
+ активное ожидание в захвате => НЕ ПРОВАЛИВАЕТСЯ В КЕРНЕЛ = бесконечный цикл в одном потоке
+ меньше вероятность блокировки при мелких операциях
CAS - Compare-and-set - compare-and-swap
и сравнивает и пытается записать если успешно. АТОМАРНА НА УРОВНЕ ПРОЦЕССОРА и возвращает успех (x86
два потока войдут в одно место НО ТОЛЬКО ОДИН сможет выполнить CAS операцию и получит там успех. поэтому второй пойдет на повторный цикл
Futex - fast userspace muTexes
Те операции которые могут быть в юзерспейсе - идут в юзерспейсе, а если не могут быть - проваливаются в кернел.
(тоже реализованы на CAS)
https://youtu.be/kNWSciQtHEc
MUTEX - mutual exclusion - взаимное исключение
pthread_mutex_* ВСЕГДА переводит в кернел = МЕДЛЕННО !recursive_mutex
+ можно захватить в рамках одного потока НЕСКОЛЬКО раз (в обычном только один раз)
timed_mutex
+ захватить с ограничением по временем (типа если не удалось захватить на 10мс то не очень то и хотелось)
shared_mutex
+ захват на чтение
+ захват на чтение с возмоностью дозахвата на запись
spin_mutex
+ активное ожидание в захвате => НЕ ПРОВАЛИВАЕТСЯ В КЕРНЕЛ = бесконечный цикл в одном потоке
atomic_cas
оч полезно когда работаешь с примитивами+ меньше вероятность блокировки при мелких операциях
CAS - Compare-and-set - compare-and-swap
и сравнивает и пытается записать если успешно. АТОМАРНА НА УРОВНЕ ПРОЦЕССОРА и возвращает успех (x86
cmpxchg)два потока войдут в одно место НО ТОЛЬКО ОДИН сможет выполнить CAS операцию и получит там успех. поэтому второй пойдет на повторный цикл
Futex - fast userspace muTexes
Те операции которые могут быть в юзерспейсе - идут в юзерспейсе, а если не могут быть - проваливаются в кернел.
(тоже реализованы на CAS)
YouTube
Лекция 3. Примитивы синхронизации
https://compscicenter.ru/
Необходимость синхронизации: простые гонки данных
Реализация примитивов синхронизации: алгоритм булочника
Виды мьютексов:
рекурсивные/нерекурсивные
read/write
spin
futex
CAS-операции и атомики
Лекция №3…
Необходимость синхронизации: простые гонки данных
Реализация примитивов синхронизации: алгоритм булочника
Виды мьютексов:
рекурсивные/нерекурсивные
read/write
spin
futex
CAS-операции и атомики
Лекция №3…
== Лекция 4. Condition variables. Алгоритмы синхронизации
https://youtu.be/79d5WI5RTp8
лениризуемость программы - это код который может дать одни и те же результаты при последовательном так и при паралелльном исполнении
https://youtu.be/79d5WI5RTp8
лениризуемость программы - это код который может дать одни и те же результаты при последовательном так и при паралелльном исполнении
YouTube
Лекция 4. Condition variables. Алгоритмы синхронизации
https://compscicenter.ru/
Condition variables:
Пример на POSIX
Пример на Java
Алгоритмы синхронизации:
Грубая
Тонкая
Лекция №4 в курсе "Параллельное программирование", весна 2016
Преподаватель курса: Евгений Леонидович Калишенко
Страница…
Condition variables:
Пример на POSIX
Пример на Java
Алгоритмы синхронизации:
Грубая
Тонкая
Лекция №4 в курсе "Параллельное программирование", весна 2016
Преподаватель курса: Евгений Леонидович Калишенко
Страница…
Forwarded from Записки админа
🔧 А вы знали, что в authorized_keys файле можно указывать не только сам ключ, но и дополнительные команды, или ограничения? Чуть подробнее об этом вот здесь: https://twitter.com/cyb3rops/status/1395009709787258882
А вообще, увидел я это в очередном, казалось бы, очевидном мануале по усилению безопасности SSH: https://blog.zsec.uk/locking-down-ssh-the-right-way/
#ssh #security #напочитать
А вообще, увидел я это в очередном, казалось бы, очевидном мануале по усилению безопасности SSH: https://blog.zsec.uk/locking-down-ssh-the-right-way/
#ssh #security #напочитать
Forwarded from oleg_log (Oleg Kovalov)
Ого какую вещь я не замечал.
Easy and simple Prometheus SLO (service level objectives) generator
https://github.com/slok/sloth
Easy and simple Prometheus SLO (service level objectives) generator
https://github.com/slok/sloth
== Лекция 5. Алгоритмы синхронизации
https://youtu.be/7aabRlVERPc
lock-free - гарантируется что ни один поток не будет заблокирован
wait-free - это lock-free + гарантируется за сколько шагов завершится
мы должны гарантировать иммутабельность структуры для CAS, что бы работать с числами большими чем одно машинное слово, передавая указатель на замену в CAS
https://youtu.be/7aabRlVERPc
lock-free - гарантируется что ни один поток не будет заблокирован
wait-free - это lock-free + гарантируется за сколько шагов завершится
мы должны гарантировать иммутабельность структуры для CAS, что бы работать с числами большими чем одно машинное слово, передавая указатель на замену в CAS
YouTube
Лекция 5. Алгоритмы синхронизации
https://compscicenter.ru/
Алгоритмы синхронизации:
– Оптимистичная
– Ленивая
– Неблокирующая
Классы алгоритмов:
– lock-free
– wait-free
– lock-free алгоритм снятия снэпшота атомарных регистров
Лекция №5 в курсе "Параллельное программирование"…
Алгоритмы синхронизации:
– Оптимистичная
– Ленивая
– Неблокирующая
Классы алгоритмов:
– lock-free
– wait-free
– lock-free алгоритм снятия снэпшота атомарных регистров
Лекция №5 в курсе "Параллельное программирование"…
== Лекция 6. Ошибки || программирования
https://youtu.be/2A3Q0dA6Tlc
1) dead lock
- перекрестный лок ресурсов = захватывать ресурсы глобально на уровне приложения
- использование не рекурсивного примитива синхронизации в одном потоке
- форк может скопировать и примитив синхронизации и форк будет ждать вечно ->
2) data race
в ФП они 99.999% невозможны
3) ABA' - подмена незаметная для других (буферизация, кэширование, аллокаторы)
4) потерянный сигнал (послали SIG но обработчик еще не поставили). надо выставлять SIG_MASK показывая явно что этот поток не реагирует на сигнал.
5) инверсия приорететов - когда низкоприорететный поток захватил лок и не успел с ним поработать. заблокировав этим более приорететные потоки. в результате работает тот кто посредине... а до малоприорететного может и не дойти очередь и самый приорететный может никогда не отблокироваться этим самым.
https://youtu.be/2A3Q0dA6Tlc
1) dead lock
- перекрестный лок ресурсов = захватывать ресурсы глобально на уровне приложения
- использование не рекурсивного примитива синхронизации в одном потоке
- форк может скопировать и примитив синхронизации и форк будет ждать вечно ->
pthread_at_fork()
fork делает COW относительно родительского, ну мол нафига копировать все ? давай скопируем только то что меняет родитель или собирается менять2) data race
в ФП они 99.999% невозможны
3) ABA' - подмена незаметная для других (буферизация, кэширование, аллокаторы)
4) потерянный сигнал (послали SIG но обработчик еще не поставили). надо выставлять SIG_MASK показывая явно что этот поток не реагирует на сигнал.
5) инверсия приорететов - когда низкоприорететный поток захватил лок и не успел с ним поработать. заблокировав этим более приорететные потоки. в результате работает тот кто посредине... а до малоприорететного может и не дойти очередь и самый приорететный может никогда не отблокироваться этим самым.
YouTube
Лекция 6. Ошибки || программирования
https://compscicenter.ru/
Основные ошибки многопоточного программирования:
– Гонки данных (Data Race)
– Взаимная блокировка (Deadlock)
– Потерянный сигнал
Специфические ошибки:
– Реакция потока на сигнал
– Блокировки при fork многопоточных…
Основные ошибки многопоточного программирования:
– Гонки данных (Data Race)
– Взаимная блокировка (Deadlock)
– Потерянный сигнал
Специфические ошибки:
– Реакция потока на сигнал
– Блокировки при fork многопоточных…
== Лекция 7. Атомарные снимки регистров
https://youtu.be/oq6krtEvCLA
обьяснение лайтовой версии алгоритма "MVCC" (который используется в любой нормальной БД)
https://youtu.be/oq6krtEvCLA
обьяснение лайтовой версии алгоритма "MVCC" (который используется в любой нормальной БД)
YouTube
Лекция 7. Атомарные снимки регистров
https://compscicenter.ru/
Wait-free атомарный снимок регистров
Решение проблемы ABA на tagged pointers
Лекция №7 в курсе "Параллельное программирование", весна 2016
Преподаватель курса: Евгений Леонидович Калишенко
Страница лекции на сайте CS центра: …
Wait-free атомарный снимок регистров
Решение проблемы ABA на tagged pointers
Лекция №7 в курсе "Параллельное программирование", весна 2016
Преподаватель курса: Евгений Леонидович Калишенко
Страница лекции на сайте CS центра: …
== Лекция 8. Java.util.concurrent
https://youtu.be/zMj1Qi_N9Qc
джаве видней какой мутекс заюзать... либо быть супер оптимистичной и вставить тут Spin-Lock либо быть более прагматичной - и вставить обычный мутекс
если так поулчается что всего один поток и много мутексов то жвм отрубает все мутексы совсем... и работает так до тех пор пока нет новых потоков
ну и да... ей видней когда наесться памяти и заснуть )))))
https://youtu.be/zMj1Qi_N9Qc
джаве видней какой мутекс заюзать... либо быть супер оптимистичной и вставить тут Spin-Lock либо быть более прагматичной - и вставить обычный мутекс
если так поулчается что всего один поток и много мутексов то жвм отрубает все мутексы совсем... и работает так до тех пор пока нет новых потоков
ну и да... ей видней когда наесться памяти и заснуть )))))
YouTube
Лекция 8. Java.util.concurrent
https://compscicenter.ru/
Пример CAS и ORM
Пулы потоков
Контроль задач через Future
Потокобезопасные контейнеры
Лекция №8 в курсе "Параллельное программирование", весна 2016
Преподаватель курса: Евгений Леонидович Калишенко
Страница лекции на сайте CS…
Пример CAS и ORM
Пулы потоков
Контроль задач через Future
Потокобезопасные контейнеры
Лекция №8 в курсе "Параллельное программирование", весна 2016
Преподаватель курса: Евгений Леонидович Калишенко
Страница лекции на сайте CS…
== Лекция 9. OpenMP и Intel TBB
https://youtu.be/_MKbLk6K_Tk
обзор технологий
openMP
- удобные для вычислений прагмы, превращающие все в паралельный код
tbb:
- parallel algorythms
- tls
- mem allocators
- flow graphs
- ranges and partitioners
- tasks & task groups
- task schedulers
- concurrent containers
- sync primitives
BPEL
- XSD
- XML
- WSDL
- SOAP
https://youtu.be/_MKbLk6K_Tk
обзор технологий
openMP
- удобные для вычислений прагмы, превращающие все в паралельный код
tbb:
- parallel algorythms
- tls
- mem allocators
- flow graphs
- ranges and partitioners
- tasks & task groups
- task schedulers
- concurrent containers
- sync primitives
BPEL
- XSD
- XML
- WSDL
- SOAP
YouTube
Лекция 9. OpenMP и Intel TBB
https://compscicenter.ru/
Обзор OpenMP:
параллельные секции
области видимости переменных
ограничения
Обзор Intel TBB:
алгоритмы
аллокаторы
деревья задач
особенности планирования (work stealing…)
flow graphs (параллель…
Обзор OpenMP:
параллельные секции
области видимости переменных
ограничения
Обзор Intel TBB:
алгоритмы
аллокаторы
деревья задач
особенности планирования (work stealing…)
flow graphs (параллель…
https://vvsevolodovich.dev/profession-solution-architect-roadmap/
Profession: Solution Architect. Chapter 3: Architect Roadmap
Profession: Solution Architect. Chapter 3: Architect Roadmap
оч хорошая лекция по профилированию многопоточного кода
== Лекция 10. Профилирование многопоточных приложений
https://youtu.be/d_3kCXSONWQ
утилита time
___
если
если
если
valgrind по сути это виртуальная машина
- не может посчитать реальное время - только инструкции
- любое приложение превращается в однопоточное
intel v-tune
может показать и дерево и время
в ОС есть механизм подгрузки библиотек раньше чем другие LD-PRELOAD
при многоядерной системе ОС применяет потоки на свободные ядра автоматом.
PMU
- inbstructions
- elapsed code clock ticks
- coder frequency
- l2 cache hints, misscaches
- data traffic
- read/write from memory controller
Java:
JMC
== Лекция 10. Профилирование многопоточных приложений
https://youtu.be/d_3kCXSONWQ
утилита time
real - время наблюдаемое user - процессорное время (в сумме по всем ядрам)sys - кернел время (сумма по всем системным вызовам)___
если
real < user - используется || если
real == user однопотокесли
real >> user просадка, задержки, IO ожидания и тпvalgrind по сути это виртуальная машина
- не может посчитать реальное время - только инструкции
- любое приложение превращается в однопоточное
intel v-tune
может показать и дерево и время
в ОС есть механизм подгрузки библиотек раньше чем другие LD-PRELOAD
при многоядерной системе ОС применяет потоки на свободные ядра автоматом.
PMU
- inbstructions
- elapsed code clock ticks
- coder frequency
- l2 cache hints, misscaches
- data traffic
- read/write from memory controller
Java:
JMC
YouTube
Лекция 10. Профилирование многопоточных приложений
https://compscicenter.ru/
Средства анализа производительности
Утилита time
Intel Parallel Studio
Valgrind (модули callgrind, cachegrind)
Пример поиска узких мест
Лекция №10 в курсе "Параллельное программирование", весна 2016 (обновлённая…
Средства анализа производительности
Утилита time
Intel Parallel Studio
Valgrind (модули callgrind, cachegrind)
Пример поиска узких мест
Лекция №10 в курсе "Параллельное программирование", весна 2016 (обновлённая…
BufWriter<Master<'_>>
оч хорошая лекция по профилированию многопоточного кода == Лекция 10. Профилирование многопоточных приложений https://youtu.be/d_3kCXSONWQ утилита time real - время наблюдаемое user - процессорное время (в сумме по всем ядрам) sys - кернел время (сумма…
== Лекция 11. Проблема видимости переменных. Устройство процессора
https://youtu.be/VcesAbhnGKU
протокол когерентности процессора
каждое ядро имеет 2бита на каждую ячейку памяти для MESI в L кэше
- Exclusive (есть только тут)
- Invalidated
- Modified (полюбому должны быть синхронизированны с RAM, когда этот кэш будет вытесняться)
- Shared - когда несколько ядер могут иметь одно и тоже значение (ссылку)
когда останется только одно ядро которое владеет Shared ячейкой, то оно автоматом станет Exclusive
== Лекция 12. Барьеры памяти. Модели памяти
https://youtu.be/kg0ZVbBdsMM
MOESI - протокол со знанием владения (3бит)
барьеры памяти
smp-rmb
smp-wmb
smp-mb
бывают Store/Load
барьер load_load - гарантирует что все чтения до барьера будут выполнены до всех чтений после этого барьера
аналогично для store_load/store_store/load_store
компиляторы не оптимизируют места где есть барьеры. никаких переупорядочиваний инструкций не будет
volatile это спец слово для JAVA коорая подбирает специальные барьеры
а на C++ volatile это просто запрет на оптимизацию
чем меньше барьеров тем больше производительность
Модели памяти
- sequential consistency - любая операция чтения/записи применяет автоматом барьеры
- strong-ordered - (acquare/release семантика из коробки)
- weak-ordered - нужно руками всегда ставить - напрмиер в АРМ
- super-weak - (старая архитектура альфа) - могут быть изменен порядок иснтрукций координально и опасно
никаких помошников и тулов для отлова касяков барьеров памяти нет.
https://youtu.be/VcesAbhnGKU
протокол когерентности процессора
каждое ядро имеет 2бита на каждую ячейку памяти для MESI в L кэше
- Exclusive (есть только тут)
- Invalidated
- Modified (полюбому должны быть синхронизированны с RAM, когда этот кэш будет вытесняться)
- Shared - когда несколько ядер могут иметь одно и тоже значение (ссылку)
когда останется только одно ядро которое владеет Shared ячейкой, то оно автоматом станет Exclusive
== Лекция 12. Барьеры памяти. Модели памяти
https://youtu.be/kg0ZVbBdsMM
MOESI - протокол со знанием владения (3бит)
барьеры памяти
smp-rmb
smp-wmb
smp-mb
бывают Store/Load
барьер load_load - гарантирует что все чтения до барьера будут выполнены до всех чтений после этого барьера
аналогично для store_load/store_store/load_store
компиляторы не оптимизируют места где есть барьеры. никаких переупорядочиваний инструкций не будет
volatile это спец слово для JAVA коорая подбирает специальные барьеры
а на C++ volatile это просто запрет на оптимизацию
store_load не тривиален чем меньше барьеров тем больше производительность
Модели памяти
- sequential consistency - любая операция чтения/записи применяет автоматом барьеры
- strong-ordered - (acquare/release семантика из коробки)
- weak-ordered - нужно руками всегда ставить - напрмиер в АРМ
- super-weak - (старая архитектура альфа) - могут быть изменен порядок иснтрукций координально и опасно
никаких помошников и тулов для отлова касяков барьеров памяти нет.
YouTube
Лекция 11. Проблема видимости переменных. Устройство процессора
https://compscicenter.ru/
Устройство процессора ** Store buffer ** Invalidate queue
Пример на протоколе MESI проблемы поздней видимости операций
Лекция в курсе "Параллельное программирование", весна 2019
Преподаватель курса: Евгений Леонидович Калишенко…
Устройство процессора ** Store buffer ** Invalidate queue
Пример на протоколе MESI проблемы поздней видимости операций
Лекция в курсе "Параллельное программирование", весна 2019
Преподаватель курса: Евгений Леонидович Калишенко…
whymb.2010.06.07c.pdf
297.9 KB
Memory Barriers: a Hardware View for Software Hackers
Paul E. McKenney
Linux Technology Center
IBM Beaverton
2010
Paul E. McKenney
Linux Technology Center
IBM Beaverton
2010
== Лекция 13. Шаблоны || программирования. Консенсус
https://youtu.be/C_v800s4Axs
чем меньше шаред мемори - тем лучше
лучше иммутабельность, дублирование
1) pipeline
2( double check
https://youtu.be/C_v800s4Axs
чем меньше шаред мемори - тем лучше
лучше иммутабельность, дублирование
1) pipeline
2( double check
YouTube
Лекция 13. Шаблоны || программирования. Консенсус
https://compscicenter.ru/
Структурные шаблоны:
Декомпозиция по задачам
Геометрическая декомпозиция
Recursive Data
Pipeline
Разное:
Double check
Local Serializer
Консенсус:
Консенсусное число RMW-регистров
Универсальность CAS-операций…
Структурные шаблоны:
Декомпозиция по задачам
Геометрическая декомпозиция
Recursive Data
Pipeline
Разное:
Double check
Local Serializer
Консенсус:
Консенсусное число RMW-регистров
Универсальность CAS-операций…
== Лекция 14. Транзакционная память
https://youtu.be/HgRGGKqeod8
i/o
- блокирующий = ждет заполнения буфера
- не блокирующий = если в буфере ничего нет на момент опроса - просто вернет что ничего нет
i/o
- синхронный - детерменированно ждет завершения опирации
- асинхронный - работа через событие
если можно сделать аналогию с сигналами - то асинхронно, если нет - это синхронный случай
>
callback -> eventQueue -> demultiplexor -> proactor -> callback
select это функция POSIX в которую передется набор дескрипторов (сокетов), а обратно получашь набор тех которые сработали
epoll использует eventQueue ОС
https://youtu.be/HgRGGKqeod8
i/o
- блокирующий = ждет заполнения буфера
- не блокирующий = если в буфере ничего нет на момент опроса - просто вернет что ничего нет
i/o
- синхронный - детерменированно ждет завершения опирации
- асинхронный - работа через событие
если можно сделать аналогию с сигналами - то асинхронно, если нет - это синхронный случай
>
callback -> eventQueue -> demultiplexor -> proactor -> callback
select это функция POSIX в которую передется набор дескрипторов (сокетов), а обратно получашь набор тех которые сработали
epoll использует eventQueue ОС
YouTube
Лекция 14. Транзакционная память
https://compscicenter.ru/
Идея transactional memory:
Software transactional memory
Hardware transactional memory:
Преимущества и круг задач
Верификация || программ:
Model Checking
Лекция №13 в курсе "Параллельное программирование", весна 2016…
Идея transactional memory:
Software transactional memory
Hardware transactional memory:
Преимущества и круг задач
Верификация || программ:
Model Checking
Лекция №13 в курсе "Параллельное программирование", весна 2016…
== Обзор архитектуры x86
https://youtu.be/POiuH3sue3M
модель памяти
- сегментация, ретрансляция адресов
виртуальная память это и есть страничная организация памяти
ассемблер
- все что начинается с точки - это не к процессору а к ассемблеру
- часть команд зависит от состояния регистров флагов
- command, soruce, dest
- операнды
https://youtu.be/POiuH3sue3M
модель памяти
- сегментация, ретрансляция адресов
виртуальная память это и есть страничная организация памяти
ассемблер
- все что начинается с точки - это не к процессору а к ассемблеру
- часть команд зависит от состояния регистров флагов
- command, soruce, dest
- операнды
YouTube
Лекция 2. Обзор архитектуры x86. Основы программирования
Лекция №2 в курсе "Архитектура операционной системы (на примере Linux)", осень 2017
Преподаватель курса: Кирилл Владимирович Кринкин
Страница лекции на сайте CS центра: https://goo.gl/uPwr9s
Все лекции курса по порядку: https://bit.ly/2kBPnnZ
Преподаватель курса: Кирилл Владимирович Кринкин
Страница лекции на сайте CS центра: https://goo.gl/uPwr9s
Все лекции курса по порядку: https://bit.ly/2kBPnnZ
== x86 Protected mode overview
https://youtu.be/BW6C6dFByKQ
- логический адрес (селектор, смещение)
- линейный адрес (таблица, страница, смещение)
- физический адрес (на шине памяти)
GDTR
IDTR
чтобы получить данные 2 шага:
каталог страниц -> поулчить страницу
страница -> получить данные по оффсету
регистры
cr0 - системные контрольные флаги
cr2 -
cr3 - физический адрес базы каталога страниц и 2 флага ( PageLevelCaceheDisable, PageLevelWritesTransparentL1L2)
cr4 - флаги SIMD
ядро ничегго не делает
просто обрабатывает прерывания (системные вызовы, исключения, хардварьные прерывания)
процессору нужен контроллер прерываний (в составе чипсета)
- немаскируемые прерывания
- маскируемые прерывания (каскадируемые многоуровневые)
процессор всегда знает по какому номеру прерывания лежит адрес в памяти обработчика
при обработке прерывания проверяется уровень привелегий
https://youtu.be/BW6C6dFByKQ
- логический адрес (селектор, смещение)
- линейный адрес (таблица, страница, смещение)
- физический адрес (на шине памяти)
GDTR
IDTR
чтобы получить данные 2 шага:
каталог страниц -> поулчить страницу
страница -> получить данные по оффсету
регистры
cr0 - системные контрольные флаги
cr2 -
cr3 - физический адрес базы каталога страниц и 2 флага ( PageLevelCaceheDisable, PageLevelWritesTransparentL1L2)
cr4 - флаги SIMD
ядро ничегго не делает
просто обрабатывает прерывания (системные вызовы, исключения, хардварьные прерывания)
процессору нужен контроллер прерываний (в составе чипсета)
- немаскируемые прерывания
- маскируемые прерывания (каскадируемые многоуровневые)
процессор всегда знает по какому номеру прерывания лежит адрес в памяти обработчика
при обработке прерывания проверяется уровень привелегий
YouTube
Лекция 3. x86 Protected mode overview
Лекция №3 в курсе "Архитектура операционной системы (на примере Linux)", осень 2017
Преподаватель курса: Кирилл Владимирович Кринкин
Страница лекции на сайте CS центра: https://goo.gl/UBBLGE
Все лекции курса по порядку: https://bit.ly/2kBPnnZ
Преподаватель курса: Кирилл Владимирович Кринкин
Страница лекции на сайте CS центра: https://goo.gl/UBBLGE
Все лекции курса по порядку: https://bit.ly/2kBPnnZ