Some javascript/style in this post has been disabled (
why?)
Добрый день, Dmitry Groshev!
Ваше сообщение от 24.02.2008 22:29:
А реентерабельность
реализуется легко - исключением глобальных переменных и
прочих глобальных структур. Делов то.
Да, давайте исключим регистры процессора. Делов-то. ;-)
Да, они исключаются еще легче - сохранением контекста процессора.
В прерываниях и потоках сохраняется "автоматически", а там, где не
сохраняется - ничто не мешает сохранить.
Асинхронные сигналы в Виндах есть.
Какие именно?
Например, PostThreadMessage ;)
Ставил и такое - снёс в первый же день. Не все дистры одинаково полезны. ;-)
Ну это само-собой, ведь далеко не все дистро-собиратели с прямыми
руками, да? ;)
Не говоря уж о дистро-пользователей :) А вот NT можно ставить любую, с
NT4 96го года
до свеженькой Win2008 - и все будет нормально. Там есть одно золотое
правило - не
ставить сверху хакерских поделок третьих фирм (не MS), типа firewall'ов
всяких, и всё
будет нормально. А если еще и отключить неиспользуемые сервисы, то
вообще железно.
Т.е. с NT можно обладать и кривыми руками, только поменьше ими махать :)
Если лишние знания о Линуксе уважаемому сэру ни к чему, то мне пустая говорильня не нужна и подавно - я, кажется, уже упоминал что в этом забеге моей лошади нет.
Ну, линуксовый SPF это тоже не то что бы моя лошадь. Но "Это наша
лошадь" (произносится с интонацией братков из мультфильма "Алеша
Попович" :)
У нас тут не маленький забег, а большое поле, которое мы вместе пашем
несколько лет. Многие пришли со своими конями, улучшили породу наших :)
Если ты пришел постоять в сторонке, раздавая отвлеченные советы, то
лучше проходи мимо.
Я действительно в нутре линукса смыслю достаточно мало (практики мало),
без подробностей, поэтому и не лезу эту часть делянки сильно пахать. Но
на подсобных работах - ну подковать там - вполне могу. Мишин LinuxSPF
довел до уровня юзабельности и _расширяемости_ и совместимости на трех
осях (мелкими правками), может и в posix-spf что-нибудь починю, или по
крайней мере замечу незамыленным глазом какую-то неисправность. Imho,
это все же полезней, чем твоя позиция.
Если же сэр всё-таки пожелает узнать о чём же собственно идёт речь в нашем странном диалоге, эту информацию можно найти по уже упомянутой ссылке:
http://www.gnu.org/software/libtool/manual/libc/Nonreentrancy.html
Запиши и URL нашей дискуссии для будущих ссылок :)
"Реентерабельность функций из того же потока" - "бред
воспаленного мозга"? А как насчет рекурсии? ;)
А никак. Не надо путать божий дар с яичницей.
Я не путаю, а цитирую тебя. Реентерабельность (=повторновходимость)
"функции из того же потока" - это фактически обращение к самой себе
(как еще может дважды войтись функция из ТОГО же потока управления?), а
это есть рекурсия.
Рекурсивная функция вызывает саму себя из чётко определённых точек - тем и жива. Если некто третий начнёт втыкать вызовы куда попало - то можете, наверное, представить себе результат.
Некто третий - это уже отдельный поток (включая обработчики
прерываний). В пределах одного потока третьему больше неоткуда взяться,
т.к. всё линейно.
Если речь об обработке прерываний, о колбэках из оси в
пользовательский код (а оттуда обратно в ось), то это
Вот именно о них и речь. То, что в Линуксе это называется "сигнал", сути дела не меняет.
Меняет. Прерывание - это отдельный поток с автоматическим сохранением
контекста процессора, ничто не мешает при этом сохранять весь контекст
прерванного потока, системы, и чего угодно. Конечно, в какой-то
категории прерываний (от таймера, допустим) это можно не успеть
сделать, да это и не нужно в таких случаях. А в рассматриваемом случае
- исключения самого процессора - нет причин жить без SEH. Я уверен, что
и в юниксе это понимают, и что-нибудь для этого сделали. Кто-нибудь
знает, и может подсказать. Хорошо будет, если ты.
Плохая практика тупого перезапуска процесса при сбое распространена и в
Windows, но большинство осведомлены, что это крайний случай (если
программисты разных уровней системы не смогли создать соотв. механизм),
а не нормальный.
Увы, но "почти" не считается - контекст исполнения остаётся тот же самый, и если прерванная функция чего-то там заблокировала, а обработчик сигнала к этому обратится, то поток будет ждать самого себя - разумеется, вечно. Отсюда и нереентерабельность.
Не разумеется, а только если "автор потока" не знает, как эту ситуацию
обрабатывать. Отдельный вход в функцию вне рекурсии - на уровне системы
это отдельный поток управления, и его легко, даже элементарно, засечь и
обработать.
Отдельный стек для сигналов, кстати, в Линуксе надо попросить через sigaltstack(). И просить его придётся - иначе обработка переполнения стека закончится не начавшись.
Вот, похоже, первое предложение в нашем трёпе, заслуживающее внимания.
Нет, там другая причина - Win32 подсистема с ним дружить не приучена.
А зачем им дружить? Все подсистемы - win32,os/2,posix,dos - между собой
не общаются. Могли бы (через ядро), но нет наверное большой нужды.
Каждому своё - кому обязательно нужно posix, используют Interix; кому
этого мало (cygwin) - как-то справляются поверх win32; а остальные
просто считают, что win32 лучшая из виндовых подсистем, её и используют.
Я вообще-то в курсе, какими способами и через какое место в виндах эмулируется fork() - случилось изучать вопрос. В курсе и что народ от этого плюётся - очень уж сильно медленнее это в виндах работает.
Я не в курсе, как эмулируется в win32 fork, но я бы эмулировал через
флаги секций exe. Да, это разумеется медленнее родной многопоточности,
т.к. так как еще один процесс все же запускается (дисковых операций и
памяти только требуется меньше, чем при "обычном" запуске), а это в
винде дороже, чем в линуксе. А в линуксе дороже, чем в досе. И что?
NTFS наменого медленнее чем FAT, но все равно мы используем NTFS.
Что-то проигрываем, но что-то и выигрываем.
зачем в posix'е тогда потоки сделали?
Наверное, для тех случаев, когда от них бывает польза.
Просто когда из инструментов один молоток - то повсюду мерещатся гвозди; а когда есть ещё и отвёртка, то среди гвоздей начинаешь различать шурупы. :-)
Золотые слова! :)
Ну, в этом вопросе я как-то более склонен верить Линусу Торвальдсу. Не нам учить его писать операционки. ;-)
Почему бы и не пообщаться на эту тему. Требования к осям диктует в т.ч.
и наша практика. Мы с ним ровесники, и опыт программирования у нас
"одинаковой длинны" :), а насчет толщины можно подискутировать (с
Линусом, не с тобой: его-то "лошадей" мы видели, он наших тоже может
посмотреть, а твои лошади последний раз пахали в 1999м?).
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev