Вторая причина в том, что в отличии от регистра cx мне больше не требуется префикс 0x66, а это экономия одного байта на каждой операции с регистрами кроме mov.
Собственно, а назачем было в 32битном режиме изначально использовать cx вместо ecx?
я и решил использовать вместо loop обычную комбинацию из inc, cmp и jl, в качестве регистра-счётчика я всё равно оставил cx
Зачем inc и cmp, если можно dec и jnz?
То же самое с ebx и esi: можно было использовать один регистр.
У того же Таненбаума спинлок, семафор и мьютекс (который рассматривается как частный случай семаформа с максимальным значением 1) разделены
В той редакции, что есть у меня на руках, спинлок (спин-блокировка) указывается в разделе методов, а не примитивов. Наравне с запретом прерываний, например. К примитивам отнесены мьютекс, семафор и монитор. Это как раз то, о чем я и говорю — мьютекс — это абстрактный примитив, спин — способ реализации.
Часто под mutex'ом понимают примитив, имеющим дополнительную семантику, связанную с переключением контекста при невозможности его захвата
Верно ли это? По мне, если говорить не академическим языком, мьютекс — черный ящик, который может быть в каждый момент времени захвачен только одним потоком. Спинлок ли это в чистом виде, комбинация спинлока и засыпания или попытка захвата и засыпание — детали реализации.
Но да, это терминологический вопрос. Чаще всего в литературе встречается (по моему опыту) указание, как синхронизационных примитивов, мьютекса и семафора. Иногда монитора, но это отдельный разговор.
Да, я ошибся по этой части, мои извинения. Почему-то в голове отложилось, что спинлок это конкретно вид мьютекса со спином именно в userspace, а не любой мьютекс с проверкой в цикле.
Хорошо, я допускаю, что неверно использовал термин spinlock, а вы правы по этой части, приношу мои извинения. Но так или иначе, если пользоваться этой терминологией, то спинлок в чистом виде — это тоже реальная реализация мьютекса, пусть и неэффективная.
Но это все равно не меняет того, что спинлок — только реализация синхронизационного примитива "мьютекс", а не примитив сам по себе.
Схематично:
1) Атомарная проверка и обмен
2) Удалось захватить? Выход
3) Не удалось — п.1
Да, это неэффективно — профессор простаивает, но это другой вопрос. Но реализуется на любом кольце. Только не говорите, пожалуйста, что переход от 3 к 1 это спин, потому что спинлок выделяется особо из-за такого цикла, прокрученного в userspace некоторое кол-во раз перед отдачей своего кванта времени и перехода ко сну в противоположность системе, где при первой неудаче происходит переход ко сну. Здесь же цикл не ограничен ничем, и он может быть на любом уровне, даже если нет разделения на kernel и userspace.
Я не понимаю вашего возражения.
Простой compare-and-exchange — самостоятельная операция, реализованная в CPU и спинлок ею пользуется. Как и мьютекс. Это не делает верным высказывание "мьютекс реализован с помощью спинлоков, а вот спинлоки реализованы сами по себе".
Мьютекс — это и есть lock. Spinlock — подвид lock'а, со специфичной реализацией. Поэтому, опуская детали реализации, "мьютекс реализован с помощью спинлоков, а вот спинлоки реализованы сами по себе" = "lock реализован при помощи lock'а, а вот lock — автономно, сам по себе".
Самый обычный EnterCriticalSection/LeaveCriticalSection — это тоже lock (он же mutex), который реализован на compare-and-exchange операции.
Дело в том, что внутри ядра мьютекс реализован с помощью спинлоков, а вот спинлоки реализованы сами по себе, автономно. Они — действительно базовый примитив. Ниже — только сам процессор.
Никто не мешает реализовать мьютекс что внутри ядра, что вне его при помощи атомарной compare-and-exchange операции, как это сделано с CS в Win. И ниже будет только процессор.
Так и я не вижу! Но постоянно находятся недалекие, которые пересказывают по кругу историю про то, как бедный несчастный советский инженер имея кучу авторских свидетельств, получал несчастные же 150р (премиальные начисления за экономический эффект как-то скромно опускаются при этом), а потом уехал в штаты, изобрел новую технологию и кааааак развернулся. И никто не смеет посягать на его Идею — это же он придумал!
В штатах это Antitrust laws.
Ах, да — не будем смешивать рынок и капитализм, это разные измерения.
Попытка СССР решить эту проблему центральным планированием не привела к оглушительному успеху тоже
Потому что пытались подогнать под планирование все, в том числе мелочь широкой номенклатуры, которая планированию не поддается. То, что выпускается валом с ограниченным кол-вом модицикаций, вполне себе планируется.
тех, кто «сильно вырос» и пытается «маленьких забижать» государства начинают «лупить по попе»
Ага, только вчера читал про Xerox — они были пионерами в своем деле, разработали множество технологий, получили гору патентов. А потом американский FTC сказал им, что "так низя" и давайте-ка вы ребята, по добру по здорову, сами отдадите свои патенты? Пришлось отдать, и вскоре доля Xerox на рынке упала с +-100% до 14%.
Это, кстати, тонкий намек тем, кто любит вписывать в преимущества капитализма монетизацию своих идей.
не 01h.
Да. Или так, чтобы не возиться со стеком, раз уж у нас stdcall:
Собственно, а назачем было в 32битном режиме изначально использовать cx вместо ecx?
Зачем inc и cmp, если можно dec и jnz?
То же самое с ebx и esi: можно было использовать один регистр.
Унификация: Ctrl+C везде. Это стандарт.
В той редакции, что есть у меня на руках, спинлок (спин-блокировка) указывается в разделе методов, а не примитивов. Наравне с запретом прерываний, например. К примитивам отнесены мьютекс, семафор и монитор. Это как раз то, о чем я и говорю — мьютекс — это абстрактный примитив, спин — способ реализации.
Верно ли это? По мне, если говорить не академическим языком, мьютекс — черный ящик, который может быть в каждый момент времени захвачен только одним потоком. Спинлок ли это в чистом виде, комбинация спинлока и засыпания или попытка захвата и засыпание — детали реализации.
Но да, это терминологический вопрос. Чаще всего в литературе встречается (по моему опыту) указание, как синхронизационных примитивов, мьютекса и семафора. Иногда монитора, но это отдельный разговор.
Да, я ошибся по этой части, мои извинения. Почему-то в голове отложилось, что спинлок это конкретно вид мьютекса со спином именно в userspace, а не любой мьютекс с проверкой в цикле.
Но это все равно не меняет того, что спинлок — только реализация синхронизационного примитива "мьютекс", а не примитив сам по себе.
1) Атомарная проверка и обмен
2) Удалось захватить? Выход
3) Не удалось — п.1
Да, это неэффективно — профессор простаивает, но это другой вопрос. Но реализуется на любом кольце. Только не говорите, пожалуйста, что переход от 3 к 1 это спин, потому что спинлок выделяется особо из-за такого цикла, прокрученного в userspace некоторое кол-во раз перед отдачей своего кванта времени и перехода ко сну в противоположность системе, где при первой неудаче происходит переход ко сну. Здесь же цикл не ограничен ничем, и он может быть на любом уровне, даже если нет разделения на kernel и userspace.
Простой compare-and-exchange — самостоятельная операция, реализованная в CPU и спинлок ею пользуется. Как и мьютекс. Это не делает верным высказывание "мьютекс реализован с помощью спинлоков, а вот спинлоки реализованы сами по себе".
Мьютекс — это и есть lock. Spinlock — подвид lock'а, со специфичной реализацией. Поэтому, опуская детали реализации, "мьютекс реализован с помощью спинлоков, а вот спинлоки реализованы сами по себе" = "lock реализован при помощи lock'а, а вот lock — автономно, сам по себе".
Самый обычный EnterCriticalSection/LeaveCriticalSection — это тоже lock (он же mutex), который реализован на compare-and-exchange операции.
Никто не мешает реализовать мьютекс что внутри ядра, что вне его при помощи атомарной compare-and-exchange операции, как это сделано с CS в Win. И ниже будет только процессор.
В штатах это Antitrust laws.
Ах, да — не будем смешивать рынок и капитализм, это разные измерения.
Потому что пытались подогнать под планирование все, в том числе мелочь широкой номенклатуры, которая планированию не поддается. То, что выпускается валом с ограниченным кол-вом модицикаций, вполне себе планируется.
Ага, только вчера читал про Xerox — они были пионерами в своем деле, разработали множество технологий, получили гору патентов. А потом американский FTC сказал им, что "так низя" и давайте-ка вы ребята, по добру по здорову, сами отдадите свои патенты? Пришлось отдать, и вскоре доля Xerox на рынке упала с +-100% до 14%.
Это, кстати, тонкий намек тем, кто любит вписывать в преимущества капитализма монетизацию своих идей.