Взялся из любопытства заценить историческую статью Эдсгера Дейкстры, где он изобрёл семафоры. Называется "Over seinpalen" (PDF), на голландском. Статья не датирована, ориентировочно 1962 год. Оказалась странная вещь: никто её так и не перевёл на английский. Есть более поздние работы, а эта увы. Ну, я быстренько через Google translate набросал. Там надо будет кое-что повычистить на досуге, но и так уже неплохо.
"About semaphores"
"About semaphores"

no subject
Date: 2023-03-15 01:59 (UTC)no subject
Date: 2023-03-15 03:23 (UTC)no subject
Date: 2023-03-15 03:38 (UTC)https://en.wikipedia.org/wiki/Load-link/store-conditional
no subject
Date: 2023-03-15 04:25 (UTC)no subject
Date: 2023-03-15 05:13 (UTC)no subject
Date: 2023-03-15 05:20 (UTC)На самом деле можно и ослабить.. для синхронизации нужна:
- общая память
- гарантия что при записи ячейка пишется целиком, атомарно
- для записи с любого процессора, другие процессоры «когда-нибудь» увидят это изменение
no subject
Date: 2023-03-15 05:28 (UTC)https://en.wikipedia.org/wiki/Peterson%27s_algorithm
no subject
Date: 2023-03-17 03:51 (UTC)Действительно такой алгоритм простой и понятный, но сработает только когда нет кешей у ядра и доступ к памяти осуществляется по одной шине (тогда в любом случае запросы будут сериализованны). В простом случае хватит простого арбитра доступа к памяти и слова volatile в тот сишный псевдокод.
no subject
Date: 2023-03-15 05:24 (UTC)no subject
Date: 2023-03-15 05:29 (UTC)no subject
Date: 2023-03-17 03:53 (UTC)no subject
Date: 2023-03-18 12:33 (UTC)Классная машинка, оказывается, этот RP2040 с точки зрения наворотов архитектуры
Даже есть очереди на восемь слотов: Inter-processor FIFOs (Mailboxes)
The SIO contains two FIFOs for passing data, messages or ordered events between the two cores. Each FIFO is 32 bits wide, and eight entries deep. One of the FIFOs can only be written by core 0, and read by core 1. The other can only be written by core 1, and read by core 0.
Там не только RP/M полетит :)
no subject
Date: 2023-03-15 03:40 (UTC)https://riscv.org/wp-content/uploads/2017/05/riscv-spec-v2.2.pdf
no subject
Date: 2023-03-15 03:43 (UTC)no subject
Date: 2023-03-15 03:57 (UTC)no subject
Date: 2023-03-15 04:34 (UTC)Системщик: не работает!
Хардверщик: а ты прочитай назад.
Системщик: прочитал, совпадает, не работает!
Хардверщик: а ты кэши вытолкнул? И прочисти кэш чтобы на самом деле читало. И не забудь о барьерах, а то кэш можно вытолкнуть ещё до того как данные туда доедут. Ах да, у нас ещё writeback buffer, набей его нулями.
Системщик: работает, но ненадежно.
Хардверщик: А-а-а блин metal spin.
no subject
Date: 2023-03-15 06:04 (UTC)no subject
Date: 2023-03-17 03:56 (UTC)А вот то, что они выбрали именно те инструкции, которые облегчают реализацию атомиков для Си++ не может являться проблемой в более общем случае?
no subject
Date: 2023-03-17 04:30 (UTC)no subject
Date: 2023-03-15 10:26 (UTC)Ключевые слова parbegin и parend - там Дийкстра ввел такое расширение Алгола-60 - операторные скобки, ограничивающие набор операторов, которые будут выполняться параллельно.
А что касается неделимых атомарных функций, так это классика низкоуровневого программирования
cli
код который нельзя прерывать
sti
и пусть весь мир подождет
no subject
Date: 2023-03-15 16:23 (UTC)no subject
Date: 2023-03-15 20:44 (UTC)