Pull to refresh
0
@MacInread⁠-⁠only

User

5
Subscribers
Send message
mov ecx, 24h

не 01h.

Да. Или так, чтобы не возиться со стеком, раз уж у нас stdcall:

mov esi, 24h
m1:

цикл

dec esi
jnz m1
Вторая причина в том, что в отличии от регистра cx мне больше не требуется префикс 0x66, а это экономия одного байта на каждой операции с регистрами кроме mov.

Собственно, а назачем было в 32битном режиме изначально использовать cx вместо ecx?

я и решил использовать вместо loop обычную комбинацию из inc, cmp и jl, в качестве регистра-счётчика я всё равно оставил cx

Зачем inc и cmp, если можно dec и jnz?

То же самое с ebx и esi: можно было использовать один регистр.
Это особенно актуально на ноутбучной клавиатуре.
Унификация: Ctrl+C везде. Это стандарт.
У того же Таненбаума спинлок, семафор и мьютекс (который рассматривается как частный случай семаформа с максимальным значением 1) разделены

В той редакции, что есть у меня на руках, спинлок (спин-блокировка) указывается в разделе методов, а не примитивов. Наравне с запретом прерываний, например. К примитивам отнесены мьютекс, семафор и монитор. Это как раз то, о чем я и говорю — мьютекс — это абстрактный примитив, спин — способ реализации.
Часто под mutex'ом понимают примитив, имеющим дополнительную семантику, связанную с переключением контекста при невозможности его захвата

Верно ли это? По мне, если говорить не академическим языком, мьютекс — черный ящик, который может быть в каждый момент времени захвачен только одним потоком. Спинлок ли это в чистом виде, комбинация спинлока и засыпания или попытка захвата и засыпание — детали реализации.

Но да, это терминологический вопрос. Чаще всего в литературе встречается (по моему опыту) указание, как синхронизационных примитивов, мьютекса и семафора. Иногда монитора, но это отдельный разговор.
А то. Но вопрос был о теоритическом делении.
Чистый спинлок — тоже мьютекс, если исключить waitone(mutex->event, INFINITE) и использовать процессорное время полностью.
Userspace здесь не имеет значения.

Да, я ошибся по этой части, мои извинения. Почему-то в голове отложилось, что спинлок это конкретно вид мьютекса со спином именно в 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. И ниже будет только процессор.
Сама история "увода" ракет старее — еще со времен ВОВ, наведения ракет V2(?) по лучу.
Да по сути, если внимательно посмотреть, то вся статья — не техническая, так… на околотехническую тему. История, даты, красивые фотографии.
Так и я не вижу! Но постоянно находятся недалекие, которые пересказывают по кругу историю про то, как бедный несчастный советский инженер имея кучу авторских свидетельств, получал несчастные же 150р (премиальные начисления за экономический эффект как-то скромно опускаются при этом), а потом уехал в штаты, изобрел новую технологию и кааааак развернулся. И никто не смеет посягать на его Идею — это же он придумал!

В штатах это Antitrust laws.

Ах, да — не будем смешивать рынок и капитализм, это разные измерения.
Минус не ставил, но в статье приведена прямая ссылка на патент, где все расписано.
Попытка СССР решить эту проблему центральным планированием не привела к оглушительному успеху тоже

Потому что пытались подогнать под планирование все, в том числе мелочь широкой номенклатуры, которая планированию не поддается. То, что выпускается валом с ограниченным кол-вом модицикаций, вполне себе планируется.

тех, кто «сильно вырос» и пытается «маленьких забижать» государства начинают «лупить по попе»

Ага, только вчера читал про Xerox — они были пионерами в своем деле, разработали множество технологий, получили гору патентов. А потом американский FTC сказал им, что "так низя" и давайте-ка вы ребята, по добру по здорову, сами отдадите свои патенты? Пришлось отдать, и вскоре доля Xerox на рынке упала с +-100% до 14%.

Это, кстати, тонкий намек тем, кто любит вписывать в преимущества капитализма монетизацию своих идей.

Information

Rating
Does not participate
Registered
Activity