Механизмы синхронизации в операционных системах

2024 ж. 27 Нау.
18 598 Рет қаралды

50 оттенков синхронизации потоков и процессов в операционных системах
#МГТУ кафедра ИУ9
#operatingsystem #операционнаясистема

Пікірлер
  • Алексей Владимирович моргает в отдельных потоках.

    @saitaro@saitaroАй бұрын
    • Теперь надо присмотреться, одновременно ли моргают оба глаза.

      @u2bear377@u2bear377Ай бұрын
  • Автору можно верить. У него такие же фингалы под глазами от загара перед монитором как и у меня.

    @bdick8136@bdick8136Ай бұрын
    • Там кожа истоничилась, глаза много напрягает, зрение плохое, тёр много

      @Sky-pg8ot@Sky-pg8ot29 күн бұрын
  • Случайно наткнулся на один из роликов с данного канала месяц назад, теперь смотрю каждый выпуск в свободное от работы время с огромным удовольствием несмотря на то, что каждый день работаю с кодом. Базы много не бывает, ребята, а с такой подачей материала так вообще красота, подогревает интерес к любимому делу. Спасибо вам огромное за ваш труд!

    @user-rg8pt1kk4i@user-rg8pt1kk4iАй бұрын
  • Насколько помню, в Pascal/Delphi/C++Builder-е тот же самый Motitor под капотом synchronized(), т.е. как и в С#. Пауза в конце как всегда на высоте, спасибо!)

    @Dimoniada@DimoniadaАй бұрын
  • Человек снял весь материал за один дубль, потом нарезал и выкладывает нам по одному видосу ))

    @3955006@3955006Ай бұрын
    • Так это нормальная практика)

      @artemzakharov8961@artemzakharov8961Ай бұрын
    • И за всё это время ни разу не моргнул.

      @ghaydn@ghaydnАй бұрын
  • KZhead плохого не посоветует. Если показывает в 4 ночи в рекомендованных, значит надо смотреть :)

    @user-jx8zx8uk2m@user-jx8zx8uk2m29 күн бұрын
  • Вот уже с примерами кода, это прям в разы интереснее! 👍

    @Dr33mway@Dr33mwayАй бұрын
  • Подскажите, после Оппенгеймера какой следующий фильм будете снимать?

    @Lazarforce@LazarforceАй бұрын
  • Очень доступно и не нудно. Спасибо за полезный контент!

    @jordanmessi1@jordanmessi1Ай бұрын
  • Съезд любителей поездов и железных дорог объявляется открытым! Have a railbuff!

    @SuperArt1st@SuperArt1stАй бұрын
  • Это база. Благодарю. Лайк и комментарий для поддержки и продвижения канала!

    @user-fw3kx2ix3p@user-fw3kx2ix3p29 күн бұрын
  • Чел мега хорош, продолжай пожалуйста. Это просто бомба! Очень круто и качественно объясняешь на тем более в ру сегменте

    @user-xz9se8mr8s@user-xz9se8mr8s22 күн бұрын
  • Кликнул случайно. Офигел от качества. Подписался))

    @golosbezdoka@golosbezdoka29 күн бұрын
  • Очень интересно. Надеюсь что когда-нибудь смогу это понять.

    @madplayer5@madplayer527 күн бұрын
  • Спасибо за лекцию. Очень классно и познавательно. Теперь я знаю немного больше и больше понимаю как это всё работает.

    @TheMrGlobus@TheMrGlobusАй бұрын
  • Огромное спасибо Вам за эти видео! Я Java-разработчик, который сам учил программирование с 0, сейчас вот собираюсь поступать в магистратуру на Computer Science и вы невероятно помогаете освоить материалы!

    @artemzakharov8961@artemzakharov8961Ай бұрын
    • привет, по каким материалам учился сам? или все так же с нуля (ютубы, stepik, metaint какой-нибудь)? 😊

      @freestylerveevo@freestylerveevoАй бұрын
    • @@freestylerveevo привет! Я читал книгу Хорцмана "Java. Библиотека профессионала", смотрел Ютуб видео в самом начале, а когда стал крепче понимать прочитал Блинова "Java методы программирования" (она уже есть новая с Java 17 если не ошибаюсь)

      @artemzakharov8961@artemzakharov896129 күн бұрын
  • Превьюха космос)

    @justcurious1397@justcurious1397Ай бұрын
  • Много слышал о необходимой осторожности при применении общих переменных, теперь понял суть. Спасибо!

    @Andrew_Shadrin@Andrew_Shadrin27 күн бұрын
  • Огромное спасибо за видео! Очень интересно ❤

    @dimontools@dimontoolsАй бұрын
  • Замечательные ролики

    @dimakof@dimakofАй бұрын
  • Отлично, выпуск ждал. Вот реально интересно.

    @sterd0@sterd0Ай бұрын
  • "Необходимо и достаточно". Чистые данные. Спасибо автору!

    @user-fi2vo5rg7y@user-fi2vo5rg7y29 күн бұрын
  • В шарпе так же существует слово lock, которое является сахаром для монитора, прям как synchronized в жабе. В примере можно было например написать так: lock(cm) { counter++; }

    @TimLaizaR228@TimLaizaR228Ай бұрын
  • Спасибо за видео, долго просидел над примером и не мог понять где ошибка. Я не разработчик С#, я разработчик С++ и конечно бы использовал std::atomic переменные, собственно я не смог найти ошибку, но в конце когда вы объяснили в чём ошибка, я понял, как я её избежал правильно используя C++.

    @AlexAlex-jk2tn@AlexAlex-jk2tn29 күн бұрын
  • Большое спасибо! Очень интересно и полезно) Буду пересматривать)

    @artorios5192@artorios5192Ай бұрын
  • продолжай, интересно слушать тебя, автор

    @xikkn@xikkn28 күн бұрын
  • Молоток!! Давай еще!!! Контент в кайф! Дельно.

    @user-sz3fo3yc7g@user-sz3fo3yc7g28 күн бұрын
  • Классная видяшка. Нормально так знаний насыпали.

    @user-mz2zb9cq9s@user-mz2zb9cq9sАй бұрын
  • я один всё время смотрел на цветные треугольники в мониторе сзади ?

    @wasd6461@wasd6461Ай бұрын
    • Кстати, да, отвлекают.

      @u2bear377@u2bear37729 күн бұрын
  • динамические превьюшки к видео 😊 как мило... син-хро-ни.... 🙃 син-за-хро-ци-ни-я 😏

    @MrCter@MrCterАй бұрын
  • Супер

    @mobilafilm@mobilafilm29 күн бұрын
  • Привет ИУ от ФН! В С++ есть lock_guard (их там несколько). Они помогают захватить ресурс один раз и отпускают его автоматически при выходе из блока. Принцип известный как RAII - resource aquisition is initialization. Поэтому не надо бояться забыть V. С точки зрения художественной. Я бы в начало и в конец добавил "Здравствуйте!" и "До встречи!". А то видео кончилось просто внезапными 3 секундами молчания.

    @danielmilyutin9914@danielmilyutin991429 күн бұрын
    • Это его фишечка.

      @johnjohnson8818@johnjohnson881828 күн бұрын
  • куда делся флаг реактоса с фона 😭😭😭😭

    @rkc137@rkc137Ай бұрын
  • Блин, круто)

    @BeDb_MeDb@BeDb_MeDbАй бұрын
  • Класс!

    @ARLX-yo1wr@ARLX-yo1wrАй бұрын
  • Вот прям Factorio со своим дискретным принципом

    @Kolemag@Kolemag29 күн бұрын
  • Спасибо за объяснение на языке c#, пробовал до этого Java, но .net мне больше понравился, сколько туда сейчас фишек завезли)

    @azerqgaming@azerqgamingАй бұрын
  • Отличное видео! Привет с РК6)

    @Lhander07@Lhander0728 күн бұрын
    • Оо, РК! )

      @abragin@abragin28 күн бұрын
  • Лучший клбеикйт, что я видел!

    @MotorBorg@MotorBorgАй бұрын
    • Согласен

      @melkiy582@melkiy58229 күн бұрын
  • Интересно. Но я в этой теме ожидал в конце описания синхронизации между unix процессами через операции с файловой системой. Ну, чтобы показать, как в реальном мире приходится выкручиваться ;) P.S. За PDP-11 - отдельное спасибо! Сентиментальная слеза Катилась По Его Щеке.. 2024-03-29 10:38 UTC алгоритмам

    @Eustrop@EustropАй бұрын
  • А если вместо монитора lock использовать?он тоже требует обьекта, коим каунтер не является, но можно создать произвольный объект в чем отличие от монитора?и как реализованы блокировки на субд,и если ли разница в операционных системах например мсскуэль на виндовс и на линукс и зависят ли от железа?

    @tree-service@tree-serviceАй бұрын
  • Вы, как человек, знающий низкоуровневые основы программирования, можете ли сказать что-то по поводу развития ИИ, и может ли он в будущем заменить разработчиков?

    @MainEditor0@MainEditor0Ай бұрын
    • Тут не получится сказать "да" или "нет". Во-первых, смотря насколько далёкое будущее. Во-вторых, смотря каких разработчиков. Быдлокодеров можно заменить хоть сейчас. А стоит задать ChatGPT нешаблонное задание, и оно ничего не сделает путного. Попробуйте попросить его написать парсер CSS на C# без использования сторонних библиотек. Будет ходить вокруг да около, предлагая классы с методами-заглушками. Тоже самое и с разработчиками. Те, кто способен делать нестандартные решения будут всегда нужны.

      @abragin@abraginАй бұрын
    • ​@@abragin спасибо за ответ! Почему я спросил: на англоязычных форумах, посвящённых программированию, на реддите все время спрашивают про это и опасаются, а я, как студент IT направления, вследствие этого тоже стал задаваться таким вопросом и даже раздумывать "а там ли я учусь, хоть мне и нравится моё направление"

      @MainEditor0@MainEditor0Ай бұрын
  • в том примере что Вы в начале показали, со счетчиком, это не Race condition, а Data race. Разница в том что сделав операцию инкремента счетчика атомарной мы эту проблему решим, а при Race condition так не получится. Например если бы мы не инкрементили счетчик, а в каждом потоке присваивали ему некое значение, то даже защитив счетчик мютексом была бы недетерминированность из за того что неясно в какой очередности отработают потоки. Советую читать англоязычную Википедию, там это все достаточно подробно описано, зато в русской пол статьи про то как американцы налажали с этим Тераком))) А так спасибо за ролики, очень познавательно

    @alexlm2598@alexlm2598Ай бұрын
    • Кстати про Терак, на самом деле 99% рассказчиков повторяют одно и тоже про пользовательскую сторону проблемы (ввели X, стёрли, ввели E, и т.п.) и отсутствие аппаратных интерлоков, а вот информацию конкретно про саму операционку, которая там работала, и про сами ошибки мне удалось найти только в официальных отчётах и немногочисленных других документах.

      @abragin@abraginАй бұрын
    • Про data race несомненно верно!

      @abragin@abraginАй бұрын
  • Вы прям по темам книжки Танненбаума по ОСям идете))

    @ilovebobrov88@ilovebobrov88Ай бұрын
    • разве что танембаум показывает примеры на линуксовых pthread'ах на языке С. в видео примеры с кодом получше, но это имхо

      @broken_beyond_belief@broken_beyond_beliefАй бұрын
  • Этот взгляд в конце как бы говорит мне, что стоит вот такими штуками заниматься, а не тратить жизнь на ерунду :)

    @skybladeby@skybladebyАй бұрын
  • в конце видосика про тред-берриер это не всегда так можно заюзать глобальную переменную в конце метода, а она volatile и фиг компилятор [и процессор] в методе чего переставит, но есть нюансы в интеле работает [и тоже есть нюансы, но их мало] а на авна-арме не работает [нюансов нет, на арме вменяемо ничего не работает, это же арм]

    @AEF23C20@AEF23C2028 күн бұрын
  • Спасибо автору, очень интересный контент и хорошая подача, но возникла пара вопросов; Может ли возникнуть ситуация в которой несколько потоков ждущих разлок мутекса/семафора/другого примитива одновременно преодолеть вайл когда это произойдет? Они ведь вроде как друг от друга не зависят. И ещё, у всех примитивов в недостатках упоминается активное ожидание, значит есть варианты как без него обойтись и просто в видео нет?

    @mikhaililin3033@mikhaililin3033Ай бұрын
    • Так это смотря про какой lock говорим. А активное ожидание - да, обойтись можно в том случае, когда ядро поддерживает такую блокировку на уровне планировщика. То есть ожидающему потоку вообще не будет выделяться учёт времени до тех пор, пока не подойдёт его очередь. Есть реализация семафоров без активного ожидания, например

      @abragin@abraginАй бұрын
  • А volitile поставить для переменных, которые используются в нескольких потоках? Оно же автоматически memory barrier создает и не дает кэш пробить. В данном примере, скорее всего пробитие кэша не сыграет, но в реальных случаях вполне. Про lock вместо голого Monitor тут уже писали.

    @semenkovalev4988@semenkovalev4988Ай бұрын
    • Да, пойдёт! Надо было мне про этот способ сказать 😊

      @abragin@abraginАй бұрын
    • @@abraginЯ не особо знаком с C#, но в C++ volatile всего лишь говорит компилятору(процессору) читать данные из памяти, а не из кэшей. Это полезно для memory mapped io. Во многопотоке все равно нужны барьеры, т.к. никто не мешает другому потоку наломать дров так как volatile не делает доступ к этой переменной атомарной. В общем я бы эту глупость не рекомендовал юзать.

      @bdick8136@bdick8136Ай бұрын
    • @@bdick8136 Скорее всего завсисит от платформы, потому что в Java volatile даёт доступ напрямую из памяти процессора + ставит баръер

      @artemzakharov8961@artemzakharov8961Ай бұрын
  • В многопотоке всегда использую флаг проверки выполнения, причем в зависимости от задачи может быть как bool, так и int с указанием конкретного этапа. В некоторых ситуациях приходится использовать "по обе стороны".

    @RusLSystems@RusLSystemsАй бұрын
    • А что значит флаг проверки выполнения?

      @abragin@abraginАй бұрын
    • @@abragin Выделение любой переменной для конкретной задачи под операционку, либо reg - регистр для программирования непосредственно в железе.

      @RusLSystems@RusLSystemsАй бұрын
  • Выходит, что примитивы синхронизации в ОС используют активное ожидание? Т.е нагружают процессор проверкой флага? Есть ли механизм синхронизации основанный на планировщике потоков, например, поток не получает процессорного времени пока не получит сигнал, что можно входить в критическую секцию. Тем самым не нагружая процессор?

    @dr1n@dr1nАй бұрын
  • В случаи Therac Там бал проблема что одну и ту же переменную использвали для хранения своих значений в разное время,считаю что по времени они не пересекуться

    @TheMicstep@TheMicstep29 күн бұрын
    • Напортачили, в общем

      @abragin@abragin29 күн бұрын
  • Кстати, не знаю как в C#, но вообще есть еще всякие atomic-типы/классы. Где-то гарантируется атомарное чтение/присвоение, а где-то даже простенькие операции. Но наверное да, это уже сахар всякий...

    @BeDb_MeDb@BeDb_MeDbАй бұрын
  • Удивило то, что в начале видео вы... специально моргнули. Отладка модуля имитации бессознательных людских рефлексов идёт своим чередом). Пауза в конце была коротковата на мой взгляд.

    @Ssilki_V_Profile@Ssilki_V_ProfileАй бұрын
  • а вы лекции не будете выкладывать больше? интересно про архитектуру NT узнать

    @jopawhand3190@jopawhand319026 күн бұрын
    • Планирую ещё много

      @abragin@abragin26 күн бұрын
  • Кажется я только что понял, что означает страшное слово "прерывания"

    @999poll@999poll29 күн бұрын
  • Спасибо очень понятно объясняете , но я походу туповат и под конец уже потерял нить повествования😅

    @evgur4@evgur4Ай бұрын
  • В превью можно было написать СИН ЗА ХРО ЦИ НИ Я :D

    @YouSitePro@YouSiteProАй бұрын
    • Отличная идея, пробую!

      @abragin@abraginАй бұрын
    • О! Название для метода подсказал!

      @MSaidu-sj6vx@MSaidu-sj6vxАй бұрын
    • Звучит как название живого организма. "Cинзахроциния многопоточная"

      @u2bear377@u2bear377Ай бұрын
  • Ну на представленном примере монитор так себе освобождает от ошибок типа "забыл отпустить мьютекс" :) Всё равно нужно написать enter и leave. Тут скорее подошёл бы пример с C++ным unique_lock/scoped_lock

    @jopa19991@jopa19991Ай бұрын
    • Согласен. В C# Monitor редко используется напрямую, как раз из-за возможных ошибок, описанных в видео. Для блокировки используется оператор lock, который содержит внутри себя перехват исключений и освобождает монитор в секции finally.

      @semenkovalev4988@semenkovalev4988Ай бұрын
  • Огонь. Но моргайте хоть иногда.

    @user-hp7pc3lv3v@user-hp7pc3lv3vАй бұрын
    • все-так он человек. моргнул на 8:15

      @tart_meidep@tart_meidep28 күн бұрын
  • А не подскажите, пожалуйста, как вы добились этого эффекта на 4:48? Очень интересно выглядит. Что это за софт?

    @homka122@homka12228 күн бұрын
    • cool-retro-term, там куча различных настроек, можно по вкусу настраивать

      @abragin@abragin28 күн бұрын
    • @@abragin спасибо большое!

      @homka122@homka12228 күн бұрын
  • ставь лайк, если пришел с курса по многопоточному программированию!

    @non5309@non530921 күн бұрын
  • Очень, нет. ОЧЕНЬ крутое видео!

    @Vorono4ka@Vorono4ka28 күн бұрын
    • Спасибо 😀

      @abragin@abragin28 күн бұрын
  • volatile можно было Но в целом самому сделать - очень сложно, пользуйтесь апи ос через примитивы языка

    @user-sv3dc5nz8w@user-sv3dc5nz8w29 күн бұрын
    • Совершенно верно!

      @abragin@abragin29 күн бұрын
  • А зачем нужна атомарность если на момент когда мы начнем взаимодействие с ресурсом спинлок уже будет установлен?

    @Typeofundefined-mq8pj@Typeofundefined-mq8pjАй бұрын
  • Много неточностей. Например, что мешает забыть вызвать Monitor.Exit() в примере? Еще порядок исполнения инструкций меняет не только компилятор, но и процессор. Про работу памяти вообще ничего не сказано - пишем в одном потоке, когда запись видно в другом?

    @xibodohls9469@xibodohls946929 күн бұрын
    • Про забыть вызвать - верно, это я про поддержку ключевых слов synchronized и lock имел в виду, а пример показал с явным вызовом. Про процессор так и сказал же: "а современные процессоры и среды выполнения типа dotnet..." 12:18. У потоков одно адресное пространство, когда пишем, тогда и видно.

      @abragin@abragin29 күн бұрын
    • да, про процессоры не услышал. прошу прощения. про видимость записи все таки не соглашусь. у разных платформ и языков по разному. на том же арме видимость записи гарантрирается только после барьера.

      @xibodohls9469@xibodohls946929 күн бұрын
  • Смотрю на некоторые алгоритмы и думаю, бедный процессор. Я бы применял бы эти локи, но в купе с паттерном Unit Of Work. Я понимаю что увеличение переменной на 1 из 2 потоков это абстрактный пример, но можно было бы увеличивать локальную переменную в потоке на 1, а каждые 100 итераций брать блокировку и увеличивать разделяемый ресурс на эту локальную переменную. После чего её сбрасывать, отпускать блокировку и продолжать.

    @awwarez@awwarez28 күн бұрын
    • Ну тут как в анекдоте, что плац лучше метлой подметать, но поставлена задача сделать это зубной щёткой

      @abragin@abragin28 күн бұрын
  • Скажите, ну похож ведь на Алекса Мёрфи из Робокопа?

    @sheffield85rus@sheffield85rus24 күн бұрын
  • Как правильно пишется этот 1:43 медицинский аппарат ?

    @vechnonedovolen666@vechnonedovolen666Ай бұрын
    • Therac-25

      @abragin@abraginАй бұрын
  • "непонятные ошибки решаются непонятными методами"

    @user-ch1df4fs8p@user-ch1df4fs8pАй бұрын
  • Класс! но звук "пш-пш"... напрягает...

    @user-si3vc8my8t@user-si3vc8my8t27 күн бұрын
    • Что за звук? Скажите таймкод послушать

      @abragin@abragin27 күн бұрын
    • @@abragin весь ролик... шипящие свистящие прут)

      @user-si3vc8my8t@user-si3vc8my8t27 күн бұрын
  • Автор ты не думал озвучивать антагонистов в фильмах?

    @TheMicstep@TheMicstep29 күн бұрын
    • Мне протагонисты больше нравятся

      @abragin@abragin29 күн бұрын
  • Почему, объясните мне почему. Я попадаюсь на это видео 3 раз, и тема мне интересна, все окей, но почему я читаю название как "мемы синхронизации..."

    @brothers_pilots@brothers_pilots28 күн бұрын
  • Джек Степлтон?!

    @leonardodavinci3737@leonardodavinci3737Ай бұрын
  • я в этом ни чего не понимаю но то что вы говорите чтото понимаю продолжение дорлжно не минуемо следовать

    @user-fu9ix6xh7x@user-fu9ix6xh7x25 күн бұрын
  • Подписался, очень круто

    @albion_faults@albion_faults29 күн бұрын
  • Ух ты, про MemoryBarrier не подозревал, а это, оказывается важная штука, лайк

    @baltasar9547@baltasar9547Ай бұрын
  • Хорошо быть роботом

    @user-ly6sv1zj7b@user-ly6sv1zj7b29 күн бұрын
    • Мне тоже нравится

      @abragin@abragin29 күн бұрын
  • Походу надо удалять весь мой код, и писать всё ядро с \0.

    @krotov_play@krotov_playАй бұрын
  • ээээ... друзья! автор главного не сказал) это у автора уже предельная проф.деформация поток - это такая штука, за которой следить не нужно поток сделал что либо - и должен закрыться, всё! и поток не должен использовать разделяемые ресурсы, что бы это не значило

    @AEF23C20@AEF23C2028 күн бұрын
  • Отличное видео и объяснение. Думал, что пример на C++, тк counter++; и хотел спросить зачем потоки стартовать, тк в STL C++ потоки стартуются сами в конструкторе после создания, но потом понял, что это C#😊

    @UchebavGermanii@UchebavGermanii29 күн бұрын
  • Елси во всех словах лобгюо пеоенижлрдя лбгоюо язкыа мриа псиравтееть бувкы маемсти крмое пверой и пслднеоей, то пертионче отснсеатя таикм же пяытоннм как и рнеае, елси кеончно вы не оиртбтае на это вамнниие.

    @pompei2@pompei2Ай бұрын
    • Это не работает прямо вот так "в лоб", на уровне букв. Приведённый текcт получилcя практичеcки нечитаемым.

      @u2bear377@u2bear37729 күн бұрын
  • а asinc await в си нет? чё-т какой-то примитивный язык для программирования медицинского оборудования (шутка, я знаю, что сама операционка написана на си) :)

    @user-zd7oi5ko1b@user-zd7oi5ko1b29 күн бұрын
  • С таким голосом невозможно слушать

    @Gengzu@Gengzu28 күн бұрын
  • Это всё хорошо, но очень старые подходы. Вот аккурат 60-х годов прошлого века. В окно смотрели? Там 2024 год уже. Синхронизацию данных в потоках так никто уже не делает лет 15 - 20.

    @kykyshka138@kykyshka13828 күн бұрын
    • Так расскажите нам, как надо)

      @abragin@abragin28 күн бұрын
  • Если бы G-Man был программистом:

    @vladislove1337@vladislove133728 күн бұрын
KZhead