home.social

#assembler — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #assembler, aggregated by home.social.

  1. Забытый мультиколор (часть 1)

    Полное руководство по аппаратному мультиколору для тех, кто не знает, что это такое и зачем он нужен.

    habr.com/ru/articles/1038696/

    #zx_spectrum #zx_evolution #timex #multicolor #железо #история_it #демосцена #видеоигры #z80 #assembler

  2. Convert Amiga assembler code to C

    The programmer Reinier van Vliet and the graphic designer @metin together with another partner, formed the Dutch game development group Team Hoi, writing its games in assembler.
    Reinier van Vliet has developed a small toolchain that converts 68000 assembler code into portable C. The aim is to achieve CPU semantics that are sufficiently faithful to the originalto port genuine game logic.

    amiga-news.de/en/news/AN-2026-

  3. Деконструкция GO: Низкоуровневые концепции. Atomics. Часть 2.1

    Я самую малость обленился и как-то давно не делал новых разборов, поэтому следующим нашим этапом деконструкции будут низкоуровневые операции . Иногда здесь будет в отрыве от аллокаторов/планировщиков и прочего, но опять же, статьи для тех, кто знает и хочет разобраться поглубже, как тут всё устроено. Поэтому, в этой части начнем с самого простого – пакета atomic. Концепции вокруг атомарных операций на уровне CPU я рассматривал здесь , поэтому советую почитать. Там мы даже пишем свой атомарный AND. !Важно! Мы будем разбирать на примере src/internal/runtime/atomics , то есть внутреннего пакета, а не того, который представлен нам как пользователям(потому что в исходниках я не нашел реализации). Но по большей части операции одни и те же.

    habr.com/ru/articles/1033780/

    #go #atomic #go_assembler #assembler #lowlevel #internals

  4. Деконструкция GO: Низкоуровневые концепции. Atomics. Часть 2.1

    Я самую малость обленился и как-то давно не делал новых разборов, поэтому следующим нашим этапом деконструкции будут низкоуровневые операции . Иногда здесь будет в отрыве от аллокаторов/планировщиков и прочего, но опять же, статьи для тех, кто знает и хочет разобраться поглубже, как тут всё устроено. Поэтому, в этой части начнем с самого простого – пакета atomic. Концепции вокруг атомарных операций на уровне CPU я рассматривал здесь , поэтому советую почитать. Там мы даже пишем свой атомарный AND. !Важно! Мы будем разбирать на примере src/internal/runtime/atomics , то есть внутреннего пакета, а не того, который представлен нам как пользователям(потому что в исходниках я не нашел реализации). Но по большей части операции одни и те же.

    habr.com/ru/articles/1033780/

    #go #atomic #go_assembler #assembler #lowlevel #internals

  5. Деконструкция GO: Низкоуровневые концепции. Atomics. Часть 2.1

    Я самую малость обленился и как-то давно не делал новых разборов, поэтому следующим нашим этапом деконструкции будут низкоуровневые операции . Иногда здесь будет в отрыве от аллокаторов/планировщиков и прочего, но опять же, статьи для тех, кто знает и хочет разобраться поглубже, как тут всё устроено. Поэтому, в этой части начнем с самого простого – пакета atomic. Концепции вокруг атомарных операций на уровне CPU я рассматривал здесь , поэтому советую почитать. Там мы даже пишем свой атомарный AND. !Важно! Мы будем разбирать на примере src/internal/runtime/atomics , то есть внутреннего пакета, а не того, который представлен нам как пользователям(потому что в исходниках я не нашел реализации). Но по большей части операции одни и те же.

    habr.com/ru/articles/1033780/

    #go #atomic #go_assembler #assembler #lowlevel #internals

  6. Деконструкция GO: Низкоуровневые концепции. Atomics. Часть 2.1

    Я самую малость обленился и как-то давно не делал новых разборов, поэтому следующим нашим этапом деконструкции будут низкоуровневые операции . Иногда здесь будет в отрыве от аллокаторов/планировщиков и прочего, но опять же, статьи для тех, кто знает и хочет разобраться поглубже, как тут всё устроено. Поэтому, в этой части начнем с самого простого – пакета atomic. Концепции вокруг атомарных операций на уровне CPU я рассматривал здесь , поэтому советую почитать. Там мы даже пишем свой атомарный AND. !Важно! Мы будем разбирать на примере src/internal/runtime/atomics , то есть внутреннего пакета, а не того, который представлен нам как пользователям(потому что в исходниках я не нашел реализации). Но по большей части операции одни и те же.

    habr.com/ru/articles/1033780/

    #go #atomic #go_assembler #assembler #lowlevel #internals

  7. Remoded: разбираем демо-эффекты (часть 1)

    Приветствую всех ценителей больших пикселей и выпуклых мониторов. Мы продолжаем разбираться с технологиями демосцены 90-х. В этой статье: недокументированные режимы VGA, аппаратный скролл, fake mode, удивительный алгоритм закраски, и многое другое, о чем бесполезно спрашивать у ChatGPT. BEGIN

    habr.com/ru/articles/1028782/

    #демосцена #олдскул #oldschool #assembler #ассемблер #кодинг #компьютерная_графика

  8. Remoded: разбираем демо-эффекты (часть 1)

    Приветствую всех ценителей больших пикселей и выпуклых мониторов. Мы продолжаем разбираться с технологиями демосцены 90-х. В этой статье: недокументированные режимы VGA, аппаратный скролл, fake mode, удивительный алгоритм закраски, и многое другое, о чем бесполезно спрашивать у ChatGPT. BEGIN

    habr.com/ru/articles/1028782/

    #демосцена #олдскул #oldschool #assembler #ассемблер #кодинг #компьютерная_графика

  9. Remoded: разбираем демо-эффекты (часть 1)

    Приветствую всех ценителей больших пикселей и выпуклых мониторов. Мы продолжаем разбираться с технологиями демосцены 90-х. В этой статье: недокументированные режимы VGA, аппаратный скролл, fake mode, удивительный алгоритм закраски, и многое другое, о чем бесполезно спрашивать у ChatGPT. BEGIN

    habr.com/ru/articles/1028782/

    #демосцена #олдскул #oldschool #assembler #ассемблер #кодинг #компьютерная_графика

  10. Remoded: разбираем демо-эффекты (часть 1)

    Приветствую всех ценителей больших пикселей и выпуклых мониторов. Мы продолжаем разбираться с технологиями демосцены 90-х. В этой статье: недокументированные режимы VGA, аппаратный скролл, fake mode, удивительный алгоритм закраски, и многое другое, о чем бесполезно спрашивать у ChatGPT. BEGIN

    habr.com/ru/articles/1028782/

    #демосцена #олдскул #oldschool #assembler #ассемблер #кодинг #компьютерная_графика

  11. Деконструкция GO: CPU, RAM и что там происходит. Syscalls. Часть 1.5

    Итак, финал части 1! По крайней мере основного разбора без дополнений. Собственно, сегодня мы разберем то, чем в основном с точки зрения ядра ОС и CPU являются все вот эти ваши бэкенды – системные вызовы и всё, что вокруг них. На самом деле механизм немного замудренный и “в лоб” сразу все эти системные вызовы мы разбирать не будем, потому что вокруг них существует ещё несколько концепций. Итак, начнем! User mode, Kernel mode Процессор исполняет код в разных уровнях привилегий. Это механизм защиты, который не позволяет пользовательским программам напрямую управлять системой. Зачем? Для безопасности. Чтобы чей-нибудь опасный ассемблерный вайбкод случайно всё не поломал! Да и вообще, если бы любая программа могла выполнять любые инструкции CPU, она могла бы: • Читать память других процессов • Управлять устройствами • Изменять таблицы страниц • Выключать систему Чтобы этого не происходило, CPU разделяет код по уровням доступа. Хотя в архитектуре x86 существует 4 уровня привилегий: Ring 0 – kernel mode Ring 1 – драйверы Ring 2 – системные службы и файлы Ring 3 – user mode По факту, Ring 1 и Ring 2 – это легаси, которое американские деды проектировали с научной красотой, но без реальной производственной необходимости. В реальной жизни используются только 2 уровня – Ring 0 и Ring 3 для бОльшей совместимости софта с другими ОС, упрощения поддержки, да и вообще переключение уровней доступа дорогое(100-150 тактов CPU), соответственно, чем больше колец, тем хуже производительность. Получается, что В user mode выполняется обычный код программ.

    habr.com/ru/articles/1027988/

    #go #cpu #system #syscalls #assembler #net

  12. Деконструкция GO: CPU, RAM и что там происходит. Syscalls. Часть 1.5

    Итак, финал части 1! По крайней мере основного разбора без дополнений. Собственно, сегодня мы разберем то, чем в основном с точки зрения ядра ОС и CPU являются все вот эти ваши бэкенды – системные вызовы и всё, что вокруг них. На самом деле механизм немного замудренный и “в лоб” сразу все эти системные вызовы мы разбирать не будем, потому что вокруг них существует ещё несколько концепций. Итак, начнем! User mode, Kernel mode Процессор исполняет код в разных уровнях привилегий. Это механизм защиты, который не позволяет пользовательским программам напрямую управлять системой. Зачем? Для безопасности. Чтобы чей-нибудь опасный ассемблерный вайбкод случайно всё не поломал! Да и вообще, если бы любая программа могла выполнять любые инструкции CPU, она могла бы: • Читать память других процессов • Управлять устройствами • Изменять таблицы страниц • Выключать систему Чтобы этого не происходило, CPU разделяет код по уровням доступа. Хотя в архитектуре x86 существует 4 уровня привилегий: Ring 0 – kernel mode Ring 1 – драйверы Ring 2 – системные службы и файлы Ring 3 – user mode По факту, Ring 1 и Ring 2 – это легаси, которое американские деды проектировали с научной красотой, но без реальной производственной необходимости. В реальной жизни используются только 2 уровня – Ring 0 и Ring 3 для бОльшей совместимости софта с другими ОС, упрощения поддержки, да и вообще переключение уровней доступа дорогое(100-150 тактов CPU), соответственно, чем больше колец, тем хуже производительность. Получается, что В user mode выполняется обычный код программ.

    habr.com/ru/articles/1027988/

    #go #cpu #system #syscalls #assembler #net

  13. Деконструкция GO: CPU, RAM и что там происходит. Syscalls. Часть 1.5

    Итак, финал части 1! По крайней мере основного разбора без дополнений. Собственно, сегодня мы разберем то, чем в основном с точки зрения ядра ОС и CPU являются все вот эти ваши бэкенды – системные вызовы и всё, что вокруг них. На самом деле механизм немного замудренный и “в лоб” сразу все эти системные вызовы мы разбирать не будем, потому что вокруг них существует ещё несколько концепций. Итак, начнем! User mode, Kernel mode Процессор исполняет код в разных уровнях привилегий. Это механизм защиты, который не позволяет пользовательским программам напрямую управлять системой. Зачем? Для безопасности. Чтобы чей-нибудь опасный ассемблерный вайбкод случайно всё не поломал! Да и вообще, если бы любая программа могла выполнять любые инструкции CPU, она могла бы: • Читать память других процессов • Управлять устройствами • Изменять таблицы страниц • Выключать систему Чтобы этого не происходило, CPU разделяет код по уровням доступа. Хотя в архитектуре x86 существует 4 уровня привилегий: Ring 0 – kernel mode Ring 1 – драйверы Ring 2 – системные службы и файлы Ring 3 – user mode По факту, Ring 1 и Ring 2 – это легаси, которое американские деды проектировали с научной красотой, но без реальной производственной необходимости. В реальной жизни используются только 2 уровня – Ring 0 и Ring 3 для бОльшей совместимости софта с другими ОС, упрощения поддержки, да и вообще переключение уровней доступа дорогое(100-150 тактов CPU), соответственно, чем больше колец, тем хуже производительность. Получается, что В user mode выполняется обычный код программ.

    habr.com/ru/articles/1027988/

    #go #cpu #system #syscalls #assembler #net

  14. Деконструкция GO: CPU, RAM и что там происходит. Syscalls. Часть 1.5

    Итак, финал части 1! По крайней мере основного разбора без дополнений. Собственно, сегодня мы разберем то, чем в основном с точки зрения ядра ОС и CPU являются все вот эти ваши бэкенды – системные вызовы и всё, что вокруг них. На самом деле механизм немного замудренный и “в лоб” сразу все эти системные вызовы мы разбирать не будем, потому что вокруг них существует ещё несколько концепций. Итак, начнем! User mode, Kernel mode Процессор исполняет код в разных уровнях привилегий. Это механизм защиты, который не позволяет пользовательским программам напрямую управлять системой. Зачем? Для безопасности. Чтобы чей-нибудь опасный ассемблерный вайбкод случайно всё не поломал! Да и вообще, если бы любая программа могла выполнять любые инструкции CPU, она могла бы: • Читать память других процессов • Управлять устройствами • Изменять таблицы страниц • Выключать систему Чтобы этого не происходило, CPU разделяет код по уровням доступа. Хотя в архитектуре x86 существует 4 уровня привилегий: Ring 0 – kernel mode Ring 1 – драйверы Ring 2 – системные службы и файлы Ring 3 – user mode По факту, Ring 1 и Ring 2 – это легаси, которое американские деды проектировали с научной красотой, но без реальной производственной необходимости. В реальной жизни используются только 2 уровня – Ring 0 и Ring 3 для бОльшей совместимости софта с другими ОС, упрощения поддержки, да и вообще переключение уровней доступа дорогое(100-150 тактов CPU), соответственно, чем больше колец, тем хуже производительность. Получается, что В user mode выполняется обычный код программ.

    habr.com/ru/articles/1027988/

    #go #cpu #system #syscalls #assembler #net

  15. Деконструкция GO: CPU, RAM и что там происходит. Оптимизации на CPU. Часть 1.4

    Первые великие оптимизаторы появились уже на таком низком уровне, как железо. По факту, задача выжимки ресурсов в программировании есть на любом уровне. В этой статье мы разберем оптимизации на уровне CPU такие как NUMA, prefetch, TLB и alignment. Статья получится немного неоднородной и больше про “высокие материи”, что в принципе намекает на то, что разбор “железной” составляющей скоро подойдет к концу! Вводная Как мы рассматривали некогда ранее обращение на RAM – это достаточно дорого. CPU пытается это “скрыть”, чтобы работа казалась куда более быстрой. Одним из таких механизмов, естественно, является иерархия кэшей! Но вот не возникало ли у вас вообще вопроса – “А почему память – это в принципе проблема? Почему дорого?”. Все очень просто – доступ к памяти медленный Тактовая частота например моего ноута – 2,70 ГГц, то есть 2,7 миллиарда циклов/операций в секунду Доступ к ОЗУ имеет задержку аж в 150–350 циклов! То есть за это время мы могли бы выполнить 200 операций. Такое положение дел нас в современных реалиях не устраивает, поэтому прибегаем к различным оптимизациями. Prefetch В предыдущей серии мы рассматривали модель исполнения процессорных инструкций. Когда инструкции поступают, CPU, а точнее его механизм hardware prefetcher, загружает данные в кэш из предположения, что они скоро понадобятся. На всякий случай зафиксируем:

    habr.com/ru/articles/1026308/

    #go #assembler #numa #tlb #cpu #ram #hardware

  16. Деконструкция GO: CPU, RAM и что там происходит. Оптимизации на CPU. Часть 1.4

    Первые великие оптимизаторы появились уже на таком низком уровне, как железо. По факту, задача выжимки ресурсов в программировании есть на любом уровне. В этой статье мы разберем оптимизации на уровне CPU такие как NUMA, prefetch, TLB и alignment. Статья получится немного неоднородной и больше про “высокие материи”, что в принципе намекает на то, что разбор “железной” составляющей скоро подойдет к концу! Вводная Как мы рассматривали некогда ранее обращение на RAM – это достаточно дорого. CPU пытается это “скрыть”, чтобы работа казалась куда более быстрой. Одним из таких механизмов, естественно, является иерархия кэшей! Но вот не возникало ли у вас вообще вопроса – “А почему память – это в принципе проблема? Почему дорого?”. Все очень просто – доступ к памяти медленный Тактовая частота например моего ноута – 2,70 ГГц, то есть 2,7 миллиарда циклов/операций в секунду Доступ к ОЗУ имеет задержку аж в 150–350 циклов! То есть за это время мы могли бы выполнить 200 операций. Такое положение дел нас в современных реалиях не устраивает, поэтому прибегаем к различным оптимизациями. Prefetch В предыдущей серии мы рассматривали модель исполнения процессорных инструкций. Когда инструкции поступают, CPU, а точнее его механизм hardware prefetcher, загружает данные в кэш из предположения, что они скоро понадобятся. На всякий случай зафиксируем:

    habr.com/ru/articles/1026308/

    #go #assembler #numa #tlb #cpu #ram #hardware

  17. Деконструкция GO: CPU, RAM и что там происходит. Оптимизации на CPU. Часть 1.4

    Первые великие оптимизаторы появились уже на таком низком уровне, как железо. По факту, задача выжимки ресурсов в программировании есть на любом уровне. В этой статье мы разберем оптимизации на уровне CPU такие как NUMA, prefetch, TLB и alignment. Статья получится немного неоднородной и больше про “высокие материи”, что в принципе намекает на то, что разбор “железной” составляющей скоро подойдет к концу! Вводная Как мы рассматривали некогда ранее обращение на RAM – это достаточно дорого. CPU пытается это “скрыть”, чтобы работа казалась куда более быстрой. Одним из таких механизмов, естественно, является иерархия кэшей! Но вот не возникало ли у вас вообще вопроса – “А почему память – это в принципе проблема? Почему дорого?”. Все очень просто – доступ к памяти медленный Тактовая частота например моего ноута – 2,70 ГГц, то есть 2,7 миллиарда циклов/операций в секунду Доступ к ОЗУ имеет задержку аж в 150–350 циклов! То есть за это время мы могли бы выполнить 200 операций. Такое положение дел нас в современных реалиях не устраивает, поэтому прибегаем к различным оптимизациями. Prefetch В предыдущей серии мы рассматривали модель исполнения процессорных инструкций. Когда инструкции поступают, CPU, а точнее его механизм hardware prefetcher, загружает данные в кэш из предположения, что они скоро понадобятся. На всякий случай зафиксируем:

    habr.com/ru/articles/1026308/

    #go #assembler #numa #tlb #cpu #ram #hardware

  18. Деконструкция GO: CPU, RAM и что там происходит. Оптимизации на CPU. Часть 1.4

    Первые великие оптимизаторы появились уже на таком низком уровне, как железо. По факту, задача выжимки ресурсов в программировании есть на любом уровне. В этой статье мы разберем оптимизации на уровне CPU такие как NUMA, prefetch, TLB и alignment. Статья получится немного неоднородной и больше про “высокие материи”, что в принципе намекает на то, что разбор “железной” составляющей скоро подойдет к концу! Вводная Как мы рассматривали некогда ранее обращение на RAM – это достаточно дорого. CPU пытается это “скрыть”, чтобы работа казалась куда более быстрой. Одним из таких механизмов, естественно, является иерархия кэшей! Но вот не возникало ли у вас вообще вопроса – “А почему память – это в принципе проблема? Почему дорого?”. Все очень просто – доступ к памяти медленный Тактовая частота например моего ноута – 2,70 ГГц, то есть 2,7 миллиарда циклов/операций в секунду Доступ к ОЗУ имеет задержку аж в 150–350 циклов! То есть за это время мы могли бы выполнить 200 операций. Такое положение дел нас в современных реалиях не устраивает, поэтому прибегаем к различным оптимизациями. Prefetch В предыдущей серии мы рассматривали модель исполнения процессорных инструкций. Когда инструкции поступают, CPU, а точнее его механизм hardware prefetcher, загружает данные в кэш из предположения, что они скоро понадобятся. На всякий случай зафиксируем:

    habr.com/ru/articles/1026308/

    #go #assembler #numa #tlb #cpu #ram #hardware

  19. Cross-compiler/assembler: Calypsi 5.16 for Windows, Linux and Mac OS

    Calypsi is a collection of compilers and assemblers for Windows, Linux and Mac OS, that generatescode for various retro computers. New in version 5.16:

    amiga-news.de/en/news/AN-2026-

  20. Cross-compiler/assembler: Calypsi 5.16 for Windows, Linux and Mac OS

    Calypsi is a collection of compilers and assemblers for Windows, Linux and Mac OS, that generatescode for various retro computers. New in version 5.16:

    amiga-news.de/en/news/AN-2026-

    #compiler #assembler #Windows #Linux #macOS #calypsi #opensource #MOS6502 #WDC65816 #Motorola68000 #HPNut

  21. Cross-compiler/assembler: Calypsi 5.16 for Windows, Linux and Mac OS

    Calypsi is a collection of compilers and assemblers for Windows, Linux and Mac OS, that generatescode for various retro computers. New in version 5.16:

    amiga-news.de/en/news/AN-2026-

    #compiler #assembler #Windows #Linux #macOS #calypsi #opensource #MOS6502 #WDC65816 #Motorola68000 #HPNut

  22. Cross-compiler/assembler: Calypsi 5.16 for Windows, Linux and Mac OS

    Calypsi is a collection of compilers and assemblers for Windows, Linux and Mac OS, that generatescode for various retro computers. New in version 5.16:

    amiga-news.de/en/news/AN-2026-

    #compiler #assembler #Windows #Linux #macOS #calypsi #opensource #MOS6502 #WDC65816 #Motorola68000 #HPNut

  23. Cross-compiler/assembler: Calypsi 5.16 for Windows, Linux and Mac OS

    Calypsi is a collection of compilers and assemblers for Windows, Linux and Mac OS, that generatescode for various retro computers. New in version 5.16:

    amiga-news.de/en/news/AN-2026-

    #compiler #assembler #Windows #Linux #macOS #calypsi #opensource #MOS6502 #WDC65816 #Motorola68000 #HPNut

  24. m68k assembler support: m68kplugin 0.2.2 for JetBrains

    In addition to Chris 'platon42' Hodges' MC68000 Assembly Language Plugin for Jetbrains' integrated development environments, Yann Cébron also provides one. Now version 0.2.2 has been released:

    amiga-news.de/en/news/AN-2026-

  25. m68k assembler support: m68kplugin 0.2.2 for JetBrains

    In addition to Chris 'platon42' Hodges' MC68000 Assembly Language Plugin for Jetbrains' integrated development environments, Yann Cébron also provides one. Now version 0.2.2 has been released:

    amiga-news.de/en/news/AN-2026-

    #assembler #m68k #JetBrains

  26. m68k assembler support: m68kplugin 0.2.2 for JetBrains

    In addition to Chris 'platon42' Hodges' MC68000 Assembly Language Plugin for Jetbrains' integrated development environments, Yann Cébron also provides one. Now version 0.2.2 has been released:

    amiga-news.de/en/news/AN-2026-

    #assembler #m68k #JetBrains

  27. m68k assembler support: m68kplugin 0.2.2 for JetBrains

    In addition to Chris 'platon42' Hodges' MC68000 Assembly Language Plugin for Jetbrains' integrated development environments, Yann Cébron also provides one. Now version 0.2.2 has been released:

    amiga-news.de/en/news/AN-2026-

    #assembler #m68k #JetBrains

  28. m68k assembler support: m68kplugin 0.2.2 for JetBrains

    In addition to Chris 'platon42' Hodges' MC68000 Assembly Language Plugin for Jetbrains' integrated development environments, Yann Cébron also provides one. Now version 0.2.2 has been released:

    amiga-news.de/en/news/AN-2026-

    #assembler #m68k #JetBrains

  29. Деконструкция GO: CPU, RAM и что там происходит. Многозадачность, многопоточность, кэши, проблемы. Часть 1.2

    В прошлой статье я немного слукавил, сказав, что мы будем разбирать атомики, барьеры и системные вызовы. Я пару дней поразмышлял и осознал – а зачем вообще это объяснять, если мы даже не знаем про причину их возникновения и проблемы, которые они решают В части 1.1 мы рассмотрели базовые инструкции, которые выполняет наш CPU и которыми в конечном счете и являются наши прекрасные строчки на Go. Но возникает закономерный вопрос: “Окей, мы поняли как работает на одном ядре, но Go у нас во многом про многопоточку, соответственно как это будет работать на нескольких потоках?” Если что, то это часть большого цикла по разбору Go! Данная статья – это подводка уже к тому, с чем мы имеем дело в Go достаточно часто(барьеры памяти, атомики, сисколы) В этот раз будет без Go Assembler, но с +- реальными примерами, если что-то непонятно будет, то на Хабре есть классный ИИ-помощник Многозадачность Хоть мы и развенчиваем в этом цикле абстракции, придется немного к ним вернуться. Но ненадолго! Вспоминаем, как у нас выполняются инструкции в процессоре и представляем следующую конфигурацию: Есть какое-то количество ГБ RAM Есть 1 ядро CPU Соответственно в один момент CPU может выполнять ровно 1 набор инструкций Но почему-то всё во времена одноядерных CPU работало непрерывно… На самом деле нет! Работало еще как с прерываниями(не путать с теми, которые interrupt), просто настолько быстро, что мы были неспособны это осознать, а для того, чтобы успевали работать фоновые службы, приложения и что бы то ни было ещё как раз и придумали многозадачность !

    habr.com/ru/articles/1024868/

    #assembler #go #multithreading #multitasking #race_condition #cache_contention #cpu #ram #linux

  30. Деконструкция GO: CPU, RAM и что там происходит. Многозадачность, многопоточность, кэши, проблемы. Часть 1.2

    В прошлой статье я немного слукавил, сказав, что мы будем разбирать атомики, барьеры и системные вызовы. Я пару дней поразмышлял и осознал – а зачем вообще это объяснять, если мы даже не знаем про причину их возникновения и проблемы, которые они решают В части 1.1 мы рассмотрели базовые инструкции, которые выполняет наш CPU и которыми в конечном счете и являются наши прекрасные строчки на Go. Но возникает закономерный вопрос: “Окей, мы поняли как работает на одном ядре, но Go у нас во многом про многопоточку, соответственно как это будет работать на нескольких потоках?” Если что, то это часть большого цикла по разбору Go! Данная статья – это подводка уже к тому, с чем мы имеем дело в Go достаточно часто(барьеры памяти, атомики, сисколы) В этот раз будет без Go Assembler, но с +- реальными примерами, если что-то непонятно будет, то на Хабре есть классный ИИ-помощник Многозадачность Хоть мы и развенчиваем в этом цикле абстракции, придется немного к ним вернуться. Но ненадолго! Вспоминаем, как у нас выполняются инструкции в процессоре и представляем следующую конфигурацию: Есть какое-то количество ГБ RAM Есть 1 ядро CPU Соответственно в один момент CPU может выполнять ровно 1 набор инструкций Но почему-то всё во времена одноядерных CPU работало непрерывно… На самом деле нет! Работало еще как с прерываниями(не путать с теми, которые interrupt), просто настолько быстро, что мы были неспособны это осознать, а для того, чтобы успевали работать фоновые службы, приложения и что бы то ни было ещё как раз и придумали многозадачность !

    habr.com/ru/articles/1024868/

    #assembler #go #multithreading #multitasking #race_condition #cache_contention #cpu #ram #linux

  31. Деконструкция GO: CPU, RAM и что там происходит. Многозадачность, многопоточность, кэши, проблемы. Часть 1.2

    В прошлой статье я немного слукавил, сказав, что мы будем разбирать атомики, барьеры и системные вызовы. Я пару дней поразмышлял и осознал – а зачем вообще это объяснять, если мы даже не знаем про причину их возникновения и проблемы, которые они решают В части 1.1 мы рассмотрели базовые инструкции, которые выполняет наш CPU и которыми в конечном счете и являются наши прекрасные строчки на Go. Но возникает закономерный вопрос: “Окей, мы поняли как работает на одном ядре, но Go у нас во многом про многопоточку, соответственно как это будет работать на нескольких потоках?” Если что, то это часть большого цикла по разбору Go! Данная статья – это подводка уже к тому, с чем мы имеем дело в Go достаточно часто(барьеры памяти, атомики, сисколы) В этот раз будет без Go Assembler, но с +- реальными примерами, если что-то непонятно будет, то на Хабре есть классный ИИ-помощник Многозадачность Хоть мы и развенчиваем в этом цикле абстракции, придется немного к ним вернуться. Но ненадолго! Вспоминаем, как у нас выполняются инструкции в процессоре и представляем следующую конфигурацию: Есть какое-то количество ГБ RAM Есть 1 ядро CPU Соответственно в один момент CPU может выполнять ровно 1 набор инструкций Но почему-то всё во времена одноядерных CPU работало непрерывно… На самом деле нет! Работало еще как с прерываниями(не путать с теми, которые interrupt), просто настолько быстро, что мы были неспособны это осознать, а для того, чтобы успевали работать фоновые службы, приложения и что бы то ни было ещё как раз и придумали многозадачность !

    habr.com/ru/articles/1024868/

    #assembler #go #multithreading #multitasking #race_condition #cache_contention #cpu #ram #linux

  32. Деконструкция GO: CPU, RAM и что там происходит. Многозадачность, многопоточность, кэши, проблемы. Часть 1.2

    В прошлой статье я немного слукавил, сказав, что мы будем разбирать атомики, барьеры и системные вызовы. Я пару дней поразмышлял и осознал – а зачем вообще это объяснять, если мы даже не знаем про причину их возникновения и проблемы, которые они решают В части 1.1 мы рассмотрели базовые инструкции, которые выполняет наш CPU и которыми в конечном счете и являются наши прекрасные строчки на Go. Но возникает закономерный вопрос: “Окей, мы поняли как работает на одном ядре, но Go у нас во многом про многопоточку, соответственно как это будет работать на нескольких потоках?” Если что, то это часть большого цикла по разбору Go! Данная статья – это подводка уже к тому, с чем мы имеем дело в Go достаточно часто(барьеры памяти, атомики, сисколы) В этот раз будет без Go Assembler, но с +- реальными примерами, если что-то непонятно будет, то на Хабре есть классный ИИ-помощник Многозадачность Хоть мы и развенчиваем в этом цикле абстракции, придется немного к ним вернуться. Но ненадолго! Вспоминаем, как у нас выполняются инструкции в процессоре и представляем следующую конфигурацию: Есть какое-то количество ГБ RAM Есть 1 ядро CPU Соответственно в один момент CPU может выполнять ровно 1 набор инструкций Но почему-то всё во времена одноядерных CPU работало непрерывно… На самом деле нет! Работало еще как с прерываниями(не путать с теми, которые interrupt), просто настолько быстро, что мы были неспособны это осознать, а для того, чтобы успевали работать фоновые службы, приложения и что бы то ни было ещё как раз и придумали многозадачность !

    habr.com/ru/articles/1024868/

    #assembler #go #multithreading #multitasking #race_condition #cache_contention #cpu #ram #linux

  33. Деконструкция Go: модель памяти, happens-before и почему ваш код работает

    Приветствую всех! У меня было обилие мыслей на тему того, что можно сюда написать и решил разобраться в фундаменте мироустройства языков программирования. Копнуть в самую суть с разбором когда американских дедов(и их же репозиториев), которые вполне себе могли написать нечто и под знаменитым кукурузным XXX самогоном. Решил я фундаментально разобрать то, как работает Golang, потому что в интернете(YT, Конфы и пр.), на мой взгляд, крайне много откровенно поверхностной и верхнеуровневой информации. Я, конечно, буду рад, если вы укорите меня в моих слабых навыках поиска и покажете мне, что реальность не такая, какой я её выдумал, но субъективно это так. Разборы здесь будут скорее про то, что лежит в порождении сумрачного американского гения по ссылке github.com/golang/go с периодической синхронизацией с официальной документацией. Моя главная цель – разобрать всё максимально исчерпывающе, насколько я это смогу. Чтож, поехали! Ах, да. В этом цикле не будет особо веселых рисуночков с гоферами, а скучные блок-схемы, диаграммы и вырезки из кода. Структурная схема

    habr.com/ru/articles/1023762/

    #go #языки_программирования #memory #память #процессор #атомарность #assembler

  34. Деконструкция Go: модель памяти, happens-before и почему ваш код работает

    Приветствую всех! У меня было обилие мыслей на тему того, что можно сюда написать и решил разобраться в фундаменте мироустройства языков программирования. Копнуть в самую суть с разбором когда американских дедов(и их же репозиториев), которые вполне себе могли написать нечто и под знаменитым кукурузным XXX самогоном. Решил я фундаментально разобрать то, как работает Golang, потому что в интернете(YT, Конфы и пр.), на мой взгляд, крайне много откровенно поверхностной и верхнеуровневой информации. Я, конечно, буду рад, если вы укорите меня в моих слабых навыках поиска и покажете мне, что реальность не такая, какой я её выдумал, но субъективно это так. Разборы здесь будут скорее про то, что лежит в порождении сумрачного американского гения по ссылке github.com/golang/go с периодической синхронизацией с официальной документацией. Моя главная цель – разобрать всё максимально исчерпывающе, насколько я это смогу. Чтож, поехали! Ах, да. В этом цикле не будет особо веселых рисуночков с гоферами, а скучные блок-схемы, диаграммы и вырезки из кода. Структурная схема

    habr.com/ru/articles/1023762/

    #go #языки_программирования #memory #память #процессор #атомарность #assembler

  35. Деконструкция Go: модель памяти, happens-before и почему ваш код работает

    Приветствую всех! У меня было обилие мыслей на тему того, что можно сюда написать и решил разобраться в фундаменте мироустройства языков программирования. Копнуть в самую суть с разбором когда американских дедов(и их же репозиториев), которые вполне себе могли написать нечто и под знаменитым кукурузным XXX самогоном. Решил я фундаментально разобрать то, как работает Golang, потому что в интернете(YT, Конфы и пр.), на мой взгляд, крайне много откровенно поверхностной и верхнеуровневой информации. Я, конечно, буду рад, если вы укорите меня в моих слабых навыках поиска и покажете мне, что реальность не такая, какой я её выдумал, но субъективно это так. Разборы здесь будут скорее про то, что лежит в порождении сумрачного американского гения по ссылке github.com/golang/go с периодической синхронизацией с официальной документацией. Моя главная цель – разобрать всё максимально исчерпывающе, насколько я это смогу. Чтож, поехали! Ах, да. В этом цикле не будет особо веселых рисуночков с гоферами, а скучные блок-схемы, диаграммы и вырезки из кода. Структурная схема

    habr.com/ru/articles/1023762/

    #go #языки_программирования #memory #память #процессор #атомарность #assembler

  36. Деконструкция Go: модель памяти, happens-before и почему ваш код работает

    Приветствую всех! У меня было обилие мыслей на тему того, что можно сюда написать и решил разобраться в фундаменте мироустройства языков программирования. Копнуть в самую суть с разбором когда американских дедов(и их же репозиториев), которые вполне себе могли написать нечто и под знаменитым кукурузным XXX самогоном. Решил я фундаментально разобрать то, как работает Golang, потому что в интернете(YT, Конфы и пр.), на мой взгляд, крайне много откровенно поверхностной и верхнеуровневой информации. Я, конечно, буду рад, если вы укорите меня в моих слабых навыках поиска и покажете мне, что реальность не такая, какой я её выдумал, но субъективно это так. Разборы здесь будут скорее про то, что лежит в порождении сумрачного американского гения по ссылке github.com/golang/go с периодической синхронизацией с официальной документацией. Моя главная цель – разобрать всё максимально исчерпывающе, насколько я это смогу. Чтож, поехали! Ах, да. В этом цикле не будет особо веселых рисуночков с гоферами, а скучные блок-схемы, диаграммы и вырезки из кода. Структурная схема

    habr.com/ru/articles/1023762/

    #go #языки_программирования #memory #память #процессор #атомарность #assembler

  37. New version of Skoolkit, a suite of tools that can be used to create a disassembly of a Spectrum game (or any other piece of software), in HTML form or as plain assembly language, from a single set of source files:

    skoolkit.ca/

    #zxspectrum #assembler #machinecode #retrogaming

  38. New version of Skoolkit, a suite of tools that can be used to create a disassembly of a Spectrum game (or any other piece of software), in HTML form or as plain assembly language, from a single set of source files:

    skoolkit.ca/

    #zxspectrum #assembler #machinecode #retrogaming

  39. New version of Skoolkit, a suite of tools that can be used to create a disassembly of a Spectrum game (or any other piece of software), in HTML form or as plain assembly language, from a single set of source files:

    skoolkit.ca/

    #zxspectrum #assembler #machinecode #retrogaming

  40. New version of Skoolkit, a suite of tools that can be used to create a disassembly of a Spectrum game (or any other piece of software), in HTML form or as plain assembly language, from a single set of source files:

    skoolkit.ca/

    #zxspectrum #assembler #machinecode #retrogaming

  41. New version of Skoolkit, a suite of tools that can be used to create a disassembly of a Spectrum game (or any other piece of software), in HTML form or as plain assembly language, from a single set of source files:

    skoolkit.ca/

    #zxspectrum #assembler #machinecode #retrogaming