The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Как работает fork(), !*! rdzxx, 14-Окт-17, 11:39  [смотреть все]
Не могу разобраться что происходит в момент вызова fork(). Понятно что происходит развоение процеса в точке вызова. Но вот что под копотом непонятно. С памятью понятно там используется 'copy on write' механизм, но вот что с кодом? Откуда потомок берет код?
  • Как работает fork(), !*! PavelR, 13:04 , 14-Окт-17 (1)
    > Не могу разобраться что происходит в момент вызова fork(). Понятно что происходит
    > развоение процеса в точке вызова. Но вот что под копотом непонятно.
    > С памятью понятно там используется 'copy on write' механизм, но вот
    > что с кодом? Откуда потомок берет код?

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

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

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

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

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

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


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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

                      Да из памяти.

  • Как работает fork(), !*! pavlinux, 03:28 , 16-Окт-17 (17) +1
    > Не могу

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру