URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10184
[ Назад ]

Исходное сообщение
"Как работает fork()"

Отправлено rdzxx , 14-Окт-17 11:39 
Не могу разобраться что происходит в момент вызова fork(). Понятно что происходит развоение процеса в точке вызова. Но вот что под копотом непонятно. С памятью понятно там используется 'copy on write' механизм, но вот что с кодом? Откуда потомок берет код?

Содержание

Сообщения в этом обсуждении
"Как работает fork()"
Отправлено PavelR , 14-Окт-17 13:04 
> Не могу разобраться что происходит в момент вызова fork(). Понятно что происходит
> развоение процеса в точке вызова. Но вот что под копотом непонятно.
> С памятью понятно там используется 'copy on write' механизм, но вот
> что с кодом? Откуда потомок берет код?

А код он не в памяти?


"Как работает fork()"
Отправлено rdzxx , 14-Окт-17 14:02 
>> Не могу разобраться что происходит в момент вызова fork(). Понятно что происходит
>> развоение процеса в точке вызова. Но вот что под копотом непонятно.
>> С памятью понятно там используется 'copy on write' механизм, но вот
>> что с кодом? Откуда потомок берет код?
> А код он не в памяти?

В случае с интерпретаторами не уверен


"Как работает fork()"
Отправлено Аноним , 14-Окт-17 14:15 
>>> Не могу разобраться что происходит в момент вызова fork(). Понятно что происходит
>>> развоение процеса в точке вызова. Но вот что под копотом непонятно.
>>> С памятью понятно там используется 'copy on write' механизм, но вот
>>> что с кодом? Откуда потомок берет код?
>> А код он не в памяти?
> В случае с интерпретаторами не уверен

Наверное зависит от компилятора, нужно скомпилить пробную программу в нужном компиляторе, и посмотреть код.

Или посмотреть в исходниках компилятора, как от это делает .....



"Как работает fork()"
Отправлено Аноним , 14-Окт-17 14:33 
> Или посмотреть в исходниках компилятора, как от это делает .....

fork() это системный вызов (syscall), в компиляторе ты не найдешь код реализации этой функции, надо смотреть исходники ядра той ОС, в которой ты его запускаешь. В *BSD и Linux код fork()  в ядре будет разный.



"Как работает fork()"
Отправлено Аноним , 14-Окт-17 15:05 
>> Или посмотреть в исходниках компилятора, как от это делает .....
> fork() это системный вызов (syscall), в компиляторе ты не найдешь код реализации
> этой функции, надо смотреть исходники ядра той ОС, в которой ты
> его запускаешь. В *BSD и Linux код fork()  в ядре
> будет разный.

Ок, полезная инфа,


"Как работает fork()"
Отправлено ПавелС , 14-Окт-17 15:48 
>>> Или посмотреть в исходниках компилятора, как от это делает .....
>> fork() это системный вызов (syscall), в компиляторе ты не найдешь код реализации
>> этой функции, надо смотреть исходники ядра той ОС, в которой ты
>> его запускаешь. В *BSD и Linux код fork()  в ядре
>> будет разный.
> Ок, полезная инфа,

Происходит точное копирование процесса, создание копии.
И потомок и родитель содержат код и потомка и родителя. Только родитель идёт по своей ветке алгоритма, а потомок по своей.


"Как работает fork()"
Отправлено ПавелС , 14-Окт-17 16:00 
>>>> Или посмотреть в исходниках компилятора, как от это делает .....
>>> fork() это системный вызов (syscall), в компиляторе ты не найдешь код реализации
>>> этой функции, надо смотреть исходники ядра той ОС, в которой ты
>>> его запускаешь. В *BSD и Linux код fork()  в ядре
>>> будет разный.
>> Ок, полезная инфа,
> Происходит точное копирование процесса, создание копии.
> И потомок и родитель содержат код и потомка и родителя. Только родитель
> идёт по своей ветке алгоритма, а потомок по своей.

Если проще. Вот fork. Он сделал копию процесса. В родителей возвратился 0 к примеру. В потомке 1. Ты делаешь ифы и они дальше выполняют разное.


"Как работает fork()"
Отправлено rdzxx , 14-Окт-17 19:06 
>[оверквотинг удален]
>>>> этой функции, надо смотреть исходники ядра той ОС, в которой ты
>>>> его запускаешь. В *BSD и Linux код fork()  в ядре
>>>> будет разный.
>>> Ок, полезная инфа,
>> Происходит точное копирование процесса, создание копии.
>> И потомок и родитель содержат код и потомка и родителя. Только родитель
>> идёт по своей ветке алгоритма, а потомок по своей.
> Если проще. Вот fork. Он сделал копию процесса. В родителей возвратился 0
> к примеру. В потомке 1. Ты делаешь ифы и они дальше
> выполняют разное.

Про это читал, но вот все таки что происходит с кодом? Как сказано выше он берется так же из памяти?


"Как работает fork()"
Отправлено ыы , 14-Окт-17 20:30 
>[оверквотинг удален]
>>>>> будет разный.
>>>> Ок, полезная инфа,
>>> Происходит точное копирование процесса, создание копии.
>>> И потомок и родитель содержат код и потомка и родителя. Только родитель
>>> идёт по своей ветке алгоритма, а потомок по своей.
>> Если проще. Вот fork. Он сделал копию процесса. В родителей возвратился 0
>> к примеру. В потомке 1. Ты делаешь ифы и они дальше
>> выполняют разное.
> Про это читал, но вот все таки что происходит с кодом? Как
> сказано выше он берется так же из памяти?

https://ru.wikipedia.org/wiki/Fork
https://www.opennet.ru/man.shtml?topic=fork


"Как работает fork()"
Отправлено prog , 15-Окт-17 06:08 
>[оверквотинг удален]
>>>>> будет разный.
>>>> Ок, полезная инфа,
>>> Происходит точное копирование процесса, создание копии.
>>> И потомок и родитель содержат код и потомка и родителя. Только родитель
>>> идёт по своей ветке алгоритма, а потомок по своей.
>> Если проще. Вот fork. Он сделал копию процесса. В родителей возвратился 0
>> к примеру. В потомке 1. Ты делаешь ифы и они дальше
>> выполняют разное.
> Про это читал, но вот все таки что происходит с кодом? Как
> сказано выше он берется так же из памяти?

тебе нужно начать - структура программы в памяти, старт программы что в этот момент происходит и т.п. процессе


"Как работает fork()"
Отправлено rdzxx , 15-Окт-17 07:26 
>[оверквотинг удален]
>>>> Происходит точное копирование процесса, создание копии.
>>>> И потомок и родитель содержат код и потомка и родителя. Только родитель
>>>> идёт по своей ветке алгоритма, а потомок по своей.
>>> Если проще. Вот fork. Он сделал копию процесса. В родителей возвратился 0
>>> к примеру. В потомке 1. Ты делаешь ифы и они дальше
>>> выполняют разное.
>> Про это читал, но вот все таки что происходит с кодом? Как
>> сказано выше он берется так же из памяти?
> тебе нужно начать - структура программы в памяти, старт программы что в
> этот момент происходит и т.п. процессе

Понял, спасибо


"Как работает fork()"
Отправлено Аноним , 15-Окт-17 09:39 
>[оверквотинг удален]
>>>>> И потомок и родитель содержат код и потомка и родителя. Только родитель
>>>>> идёт по своей ветке алгоритма, а потомок по своей.
>>>> Если проще. Вот fork. Он сделал копию процесса. В родителей возвратился 0
>>>> к примеру. В потомке 1. Ты делаешь ифы и они дальше
>>>> выполняют разное.
>>> Про это читал, но вот все таки что происходит с кодом? Как
>>> сказано выше он берется так же из памяти?
>> тебе нужно начать - структура программы в памяти, старт программы что в
>> этот момент происходит и т.п. процессе
> Понял, спасибо

А я не понял, все это делает ядро, а вот как пока не ясно



"Как работает fork()"
Отправлено Аноним , 15-Окт-17 09:40 
>[оверквотинг удален]
>>>>> Если проще. Вот fork. Он сделал копию процесса. В родителей возвратился 0
>>>>> к примеру. В потомке 1. Ты делаешь ифы и они дальше
>>>>> выполняют разное.
>>>> Про это читал, но вот все таки что происходит с кодом? Как
>>>> сказано выше он берется так же из памяти?
>>> тебе нужно начать - структура программы в памяти, старт программы что в
>>> этот момент происходит и т.п. процессе
>> Понял, спасибо
> А я не понял, все это делает ядро, а вот как пока
> не ясно

Тут нужно знать как ядро работает .....


"Как работает fork()"
Отправлено Аноним , 15-Окт-17 09:43 
>[оверквотинг удален]
>>>>>> к примеру. В потомке 1. Ты делаешь ифы и они дальше
>>>>>> выполняют разное.
>>>>> Про это читал, но вот все таки что происходит с кодом? Как
>>>>> сказано выше он берется так же из памяти?
>>>> тебе нужно начать - структура программы в памяти, старт программы что в
>>>> этот момент происходит и т.п. процессе
>>> Понял, спасибо
>> А я не понял, все это делает ядро, а вот как пока
>> не ясно
> Тут нужно знать как ядро работает .....

Linus должен объяснить как правильно fork-нуться ......


"Как работает fork()"
Отправлено ПавелС , 15-Окт-17 10:12 
>[оверквотинг удален]
>>>>> будет разный.
>>>> Ок, полезная инфа,
>>> Происходит точное копирование процесса, создание копии.
>>> И потомок и родитель содержат код и потомка и родителя. Только родитель
>>> идёт по своей ветке алгоритма, а потомок по своей.
>> Если проще. Вот fork. Он сделал копию процесса. В родителей возвратился 0
>> к примеру. В потомке 1. Ты делаешь ифы и они дальше
>> выполняют разное.
> Про это читал, но вот все таки что происходит с кодом? Как
> сказано выше он берется так же из памяти?

Программа дублируется в памяти. В ней и код родителя и потомка. Выполняются разные части.


"Как работает fork()"
Отправлено ПавелС , 15-Окт-17 10:12 
>[оверквотинг удален]
>>>> Происходит точное копирование процесса, создание копии.
>>>> И потомок и родитель содержат код и потомка и родителя. Только родитель
>>>> идёт по своей ветке алгоритма, а потомок по своей.
>>> Если проще. Вот fork. Он сделал копию процесса. В родителей возвратился 0
>>> к примеру. В потомке 1. Ты делаешь ифы и они дальше
>>> выполняют разное.
>> Про это читал, но вот все таки что происходит с кодом? Как
>> сказано выше он берется так же из памяти?
> Программа дублируется в памяти. В ней и код родителя и потомка. Выполняются
> разные части.

Да из памяти.


"Как работает fork()"
Отправлено pavlinux , 16-Окт-17 03:28 
> Не могу

1. Копируется окружение (память)
2. Создаётся пустой (чистый), спящий процесс (новый PID)
3. Скопированное окружение прописывается новому процессу.
4. Процесс будят (суют в конец очереди планировщика).
5. Отваливают.
6. Новый процесс доходит до очереди к процессору. Ура!!!


"Как работает fork()"
Отправлено Аноним , 16-Окт-17 07:19 
>> Не могу
> 1. Копируется окружение (память)
> 2. Создаётся пустой (чистый), спящий процесс (новый PID)
> 3. Скопированное окружение прописывается новому процессу.
> 4. Процесс будят (суют в конец очереди планировщика).
> 5. Отваливают.
> 6. Новый процесс доходит до очереди к процессору. Ура!!!

павлинух друх ты мой, тока ты усе знаешь


"Как работает fork()"
Отправлено Аноним , 16-Окт-17 07:23 
павлинух, прикинь я вчера кардан от К-700 пропил,

"Как работает fork()"
Отправлено Аноним , 16-Окт-17 07:24 
> павлинух, прикинь я вчера кардан от К-700 пропил,

передний



"Как работает fork()"
Отправлено pavlinux , 18-Окт-17 02:45 
>> павлинух, прикинь я вчера кардан от К-700 пропил,
>  передний

Кто здесь?! o.O



"Как работает fork()"
Отправлено Аноним , 18-Окт-17 08:47 
>>> павлинух, прикинь я вчера кардан от К-700 пропил,
>>  передний
> Кто здесь?! o.O

RedD


"Как работает fork()"
Отправлено Аноним , 18-Окт-17 10:18 
>>> павлинух, прикинь я вчера кардан от К-700 пропил,
>>  передний
> Кто здесь?! o.O

Но как продвинутый, ты должен писать who