Pull to refresh

Пишу игрушечную ОС (о реализации мьютекса)

System Programming *

Продолжаю блог о разработке игрушечной ОС (предыдущие посты: раз, два, три). Сделав паузу в кодировании (майские праздники, всё-таки), продолжаю работу. Только что набросал сканирование PCI-шины. Эта штука понадобится для работы с SATA-контроллером: следующее, что хочу сделать — это простенький драйвер диска. Он позволит поэкспериментировать с проецированием постоянной памяти на адресное пространство (своппинг, доведённый до логического конца). А пока хотел бы описать реализацию мьютекса.
Читать дальше →
Total votes 70: ↑63 and ↓7 +56
Views 27K
Comments 11

Потоки, блокировки и условные переменные в C++11 [Часть 1]

Programming *C++ *
Tutorial
В первой части этой статьи основное внимание будет уделено потокам и блокировкам в С++11, условные переменные во всей своей красе будут подробно рассмотрены во второй части
Читать дальше →
Total votes 67: ↑67 and ↓0 +67
Views 384K
Comments 14

Потоки, блокировки и условные переменные в C++11 [Часть 2]

Programming *C++ *
Tutorial
Для более полного понимания этой статьи, рекомендуется прочитать ее первую часть, где основное внимание было уделено потокам и блокировкам, в ней объяснено много моментов (терминов, функций и т.д.), которые без пояснения будут использованы здесь.
В данной статье будут рассмотрены условные переменные…
Читать дальше →
Total votes 54: ↑54 and ↓0 +54
Views 141K
Comments 8

Такие удивительные семафоры

Programming *C++ *Concurrent computing *
Translation
От переводчика: Джефф Прешинг (Jeff Preshing) — канадский разработчик программного обеспечения, последние 12 лет работающий в Ubisoft Montreal. Он приложил руку к созданию таких известных франшиз как Rainbow Six, Child of Light и Assassin’s Creed. У себя в блоге он часто пишет об интересных аспектах параллельного программирования, особенно применительно к Game Dev. Сегодня я бы хотел представить на суд общественности перевод одной из статей Джеффа.

Поток должен ждать. Ждать до тех пор, пока не удастся получить эксклюзивный доступ к ресурсу или пока не появятся задачи для исполнения. Один из механизмов ожидания, при котором поток не ставится на исполнение планировщиком ядра ОС, реализуется при помощи семафора.

Раньше я думал, что семафоры давно устарели. В 1960‑х, когда еще мало кто писал многопоточные программы, или любые другие программы, Эдсгер Дейкстра предложил идею нового механизма синхронизации — семафор. Я знал, что при помощи семафоров можно вести учет числа доступных ресурсов или создать неуклюжий аналог мьютекса, но этим, как я считал, область их применения ограничивается.
Читать дальше →
Total votes 38: ↑37 and ↓1 +36
Views 124K
Comments 1

Вся правда об ОСРВ от Колина Уоллса. Статья #5. Взаимодействие между задачами и синхронизация

Programming microcontrollers *
Translation


В предыдущих статьях мы рассмотрели многозадачную модель, и выяснили, что каждая задача является квазинезависимой программой. Хотя задачи во встраиваемых системах имеют определенную степень независимости, это не означает, что они не «знают» друг о друге. Некоторые задачи будут действительно изолированы от других, но взаимодействие и синхронизация между ними является распространенным требованием. Этот механизм является одной из ключевых функций ОСРВ. Диапазон функций может варьироваться в зависимости от ОСРВ, поэтому в этой статье мы рассмотрим общедоступные варианты.
Читать дальше →
Total votes 8: ↑6 and ↓2 +4
Views 3.1K
Comments 0