> Системный вызов fork создает точную копию исходного процесса
Хотелось бы уточнить, что Linux ядро не создает точную копию процесса, т.к. это накладно и глупо.
Вместо этого используется механизм copy-on-write. Т.е. создается просто дубликат таблиц адресного пространства
родителя, копирование происходит, только если процесс начинает менять данные. Но тут есть еще одна хитрость.
Сразу после fork() потомок получает более высокий приоритет, чем родитель и соответственно новая программа
успевает начать выполняться раньше :)
Знаете, когда пишешь какую-нибудь дребедень для разового использования не всегда приходит в голову, что ты пишешь «многопоточное приложение без специальной синхронизации». Чаще всего думаешь «ща по-быстрому костыль приделаю». Первые пару раз я сильно удивлялся, что некоторые команды в скрипте отрабатывают не последовательно, потом стал осмотрительнее.
> Сразу после fork() потомок получает более высокий приоритет, чем родитель и соответственно новая программа успевает начать выполняться раньше
Вообщето это не совсем так. Кто запускается после fork — parent or child завист от параметра заданного в
/proc/sys/kernel/sched_child_runs_first
Когда-то давным давно первым запускался child, затем в 2.2 поменяли на parent, затем в 2.6 поменяли на child но добавили опцию в /proc. В 2.6.32 по-умолчанию поменяли обратно на parent-first :)
Почему же parent-first лучше? Дело в том что child обычно сразу же вызывает exec что убивает кеши процессора. А если parent продолжает выполнение, то используются текущие кеши и производительность повышается.
А еще в linux есть vfork — оптимизированная версия fork которая не копирует таблицы адресов. Хотя она не posix и не рекомендуется к использованию.
Данная статья написана по лекции, прослушенной в университете. Сам преподаватель расхваливал книгу Эндрю Таненбаумана «Современные операционные системы». Возможно лекции сплошняком брались оттуда, не проверял. Но если это так, тогда www.nrjetix.com/fileadmin/doc/publications/Lectures/Lecture13.pdf тоже копипаст.
А вы еще одногрупникам предложите написать каждому по статье на хабр «что я смог понять и запомнить из последней лекции в универе».
Чего уж там мелочиться.
Всегда пожалуйста. Только не ожидал я такой реации на то, что если я взял что-то за основу и честно в этом признался, то человека обязательно надо зачмырить. Я и не знал, что большинство людей здесь родились со знаниями в IT.
Есть странный парадокс, люди которые что-то знают, начинают считать что другие это знают тоже, и когда кто-то решает для других объяснить это толковым языком, начинают за это чмырить.
Более странный парадокс, что Вы одобряете копипасту. В данном случае Танненбаум -> Лектор -> Студент -> Хабр.
По правилам Хабра все же публиковаться должен авторский контент, а не реферат.
> 90% не смогут ничего написать. А что Вы кстати написали содержательного за последнее время?
Вы тоже ничего не написали сами, только пересказали лекцию, и даже не имеете представления, что первоисточник Таненбаум. От себя или из других источников абсолютно ничего не добавлено.
Еще более печально, что на группу студентов (по Вашим оценкам) только один-два могут вразумительно рассказать, что было на лекции. И опять же, судя по Вашим оценкам, — это потолок способностей 100%.
Запрещён правилами полный копипаст. Тут явно не он, а скорее грубый рерайт, что правилами, вроде бы, не запрещено, а народ топик поддерживает, намекая, что содержание интересно, но карму опустил, намекая что топик-ссылка был бы уместнее. Саморегуляция :)
Вот что полезного в этой статье?
Лично для вас, обнаружившего в ней толковый язык?
Вот какие можно сделать из статьи для себя выводы поо пунктам:
Что такое такое «фоновый процесс aka daemon»?
Откуда они берутся в системе?
Как помянутый cron может запускать другие процессы?
Насколько точна фраза «Процесс может посылать сигналы только членам своей группы процессов»? И как это согласуется с действительностью, данной нам в ощущениях?
Процесcы в операционной системе Linux (основные понятия)