Почему Exece и BRK (NULL) всегда являются первыми двумя системными вызовами?

После загрузки в ОС запустите это в терминале

  • подключитесь к Интернету

  • откройте новый Терминал, затем введите следующие команды (нажимайте Enter после каждой строки):

    sudo add-apt-repository ppa:yannubuntu/boot-repair
    sudo apt-get update
    sudo apt-get install -y boot-repair && boot-repair
    
6
27.08.2018, 01:39
1 ответ

В Linux новый процесс создается с помощью fork(), что делает дочерний процесс практически идентичным родительскому процессу. Чтобы создать новый процесс, программа которого отличается от программы исходного процесса, новый дочерний процесс немедленно вызывает execve(), что в основном является процессом, говорящим «заменить мою текущую программу этой другой программой».

brk(NULL)— это процесс, который спрашивает, где заканчивается его куча памяти . Многие программы называют это своим первым системным вызовом (, который появится сразу после execve()), потому что они используют malloc()сразу (или вызов библиотеки, который они делают, использует malloc()внутренне ). Если программе и ее библиотечным вызовам некоторое время не нужно вызывать malloc(), тогда вторым системным вызовом будет что-то кроме brk(NULL).

8
27.01.2020, 20:27

Теги

Похожие вопросы