Разница между процессом и обычным вызовом функции? - PullRequest
0 голосов
/ 02 мая 2020

Меня только что познакомили с идеей процесса.

Книга определяет процесс как «экземпляр работающей программы».

  1. Я все еще немного озадачен тем, что это значит. Мне кажется, что процесс - это конкретная инструкция, которую запускает программа? Или нет?

  2. В чем разница между вызовом функции и процессом? Например, допустим, у нас есть функция с именем main, и внутри нее мы вызываем функцию printf. Считается ли printf отдельным процессом? Почему / почему нет?

  3. Что делает ребенка чем-то родительским процессом? Я знаю, что одним из способов создания дочерних процессов является вызов fork (). И затем, основываясь на целочисленном значении, которое возвращает fork, мы можем быть либо дочерними, либо родительскими. Но кроме того, есть ли что-то, что делает что-то родительским по сравнению с дочерним процессом?

  4. Также, основываясь на ответе на вопрос 2, будет ли printf считаться дочерним процессом?

1 Ответ

1 голос
/ 02 мая 2020

Говоря строго в терминах linux процессов, это "экземпляры" программ, как упоминается в книге. Это означает, что они содержат информацию, которую ваша программа должна «выполнить».

  1. Процесс не означает инструкцию, которую выполняет программа, это означает всю запущенную программу. Программа, на которую вы ссылаетесь, я предполагаю, что вы пишете код, но это только один аспект процесса. Существуют различные другие атрибуты, такие как пространство стековой памяти, пространство кучи и идентификатор процесса и т. Д. c. и все эти детали хранятся в структуре данных, называемой блок управления процессом (PCB). Предположим, у вас есть скомпилированная версия вашего кода "Fibonacci. c", называемая fibonacci, если вы запустите ее с двух разных терминалов, это приведет к "двум процессам" одной и той же программы.

  2. Вызовы функций - это то, что происходит внутри процесса. printf произойдет в той же функции. Он не считается отдельным процессом, поскольку выполняется внутри одной и той же сущности.

  3. fork может создавать дочерние процессы. Как правило, я бы сказал, что любой процесс, который создается внутри нашего текущего процесса, будет дочерним процессом. Хотя это не может быть строгим определением. То, что делает форк, дублирует текущий процесс, это означает, что он создает новую запись, создавая новую печатную плату. Он имеет тот же сегмент кода, что и процесс, вызывающий ответвление, но у него будет собственное пространство памяти, идентификатор процесса и т. Д. c. Я не буду go углубляться в то, как обрабатывается память, когда происходит разветвление, но вы можете узнать больше об этом на страницах руководства.

  4. printf также не является дочерним процессом. Он находится в самом текущем процессе.

...