fork() и все-все-все
- From
- Denis Sotchenko (2:5020/118.112)
- To
- Boris Rudakov ()
- Date
- 2003-06-09T09:12:32Z
- Area
- CARBON.COPY
* Forwarded from area 'RU.UNIX.PROG'
Kак-то раз 08 Jun 03 Boris Rudakov написал(a) для меня следующее:
BR> 1. Как под i386 в юниксах отрабатываются хардверные (т.е.
BR> не те что throw) эксепшины?
Честно говоря, я от C++ и его понятия эксепшенов далёк. А на хардверные
приходят сигналы: на кривую инструкцию - SIGILL, на попадание не туда - SIGSEGV
и так далее. Если процесс не повесил обработчик на сигнал - его ждёт
неминуемая смерть, если повесил - получит управление указанная функция.
Кстати, так юниксы ведут себя на любом проце.
Или мы о разных вещах? Со спецификой i386 я не знаком, у меня на
настольной машине вообще не x86...
BR> 2. Как это делает (если делает) Гнусь
а это не задача компилятора, это задача libc. обычные функции.
BR>>> форка (который есть неконцептуальное зло и пережиток)
DS>> Обоснуй.
BR> Лехко !!!
BR> Форком юзаются чтобы распараллелить вычисления - один процесс
BR> побег по одной ветке, а его клон ломанулся по другой. В момент
BR> форкания создается ИДЕНТИЧНЫЙ клон - копия памяти, дубликаты
BR> хендлов. НАХЕРА ?????
Налицо концептуальное непонимание =)
Фундаментальной (хорошее слово...:) фичей юниксов является такая вещь, как
COW. И это не корова, а Copy-On-Write. Когда процесс форкается,
процесса-клона мапится туда же. Соответственно, памяти клон будет кушать ровно
столько же. До тех пор, пока не попытается её менять - тут и сработает COW,
изменённые страницы будут скопированы и изменены. То бишь, те участки памяти,
которые не менялись, в памяти не дублируются. Хотя для самого процесса это
выглядит именно как "копия памяти".
А дубликаты хэндлов, как ты их называешь (в юниксах это дескрипторы) нужны
хотя бы для того, чтобы был общий stdin/stdout/stderr. Иногда требуется и
большее - чтение одного и того же файла, например.
BR> Реально ведь склонированному процессу ВСЕГО ЭТОГО - НЕ НУЖНО,
Бывает, что нужно, бывает, что не нужно. Не нужно - ну не используй,
какие проблемы? Каши не просит же.
BR> Ну и плюсом к этому безобразию еще один disadvantage -
BR> усложняется взаимодействие между родителем и клоном.
BR> IPC надо.
Никто тебе не мешает пользоваться нитями.
Форки хороши ещё возможностью, например, более надёжных решений, когда это
требуется. Упал один из клонов - ну упал, и всё, отвалился один клиент от
сервера. Упала нить - упал процесс, рухнули все клиенты. Вот работу с одним
клиентом делать на нитях совершенно безопасно.
А когда есть *только* нити - это уж звиняйте, ограничение какое-то
(примечание: данное слово в моих устах является ругательством). 640 килобайт
хватит всем?
BR> И вот ведь забавная штука: это не исключение, это ПРАВИЛО
BR> что линуксоидные сырцы нашпигованы ляпами по самые яйца !!!
Если сравнить среднее количество ляпов в открытом виндовом и открытом
юниксовом проекте, могу предположить, что оно будет абсолютно идентичным.
А что касается мира closet... тьфу, closed-source - не знаю, что там
творится. Но судя по тому, как ненадёжно большинство программных продуктов из
этой ниши - творится там что-то очень нехорошее.
__
__/ / Powered [pepsi inside]
\_\/ by MOTOROLA [smoking suxx]
--- rdc#lanport.ru http://rdc.lanport.ru/
* Origin: Куплю "Дихлофос" или продам тараканов (2:5020/118.112)