Поддержка и вызовы в ОС Linux

Системные вызовы и поддержка в Linux

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

Существуют и другие типы функций ядра, доступные для пользовательских процессов. Например, системные вызовы выполняют специальные задачи, которые пользовательский процесс не может выполнить хорошо в одиночку или вообще не может справиться с ними. Так, все действия, связанные с открытием, чтением и записью файлов, вовлекают системные вызовы.

Два системных вызова — fork() и exec() — важны для понимания того, как происходит запуск процессов:

  • fork(). Когда процесс осуществляет вызов fork(), ядро создает практически идентичную копию данного процесса;
  • exec(). Когда процесс осуществляет вызов exec(program), ядро запускает программу program, которая замещает текущий процесс.

За исключением процесса initвсе пользовательские процессы в системе Linux начинаются как результат вызова fork(), и в большинстве случаев осуществляется вызов exec(), чтобы запустить новую программу, а не копию существующего процесса. Простым примером является любая программа, которую вы запускаете из командной строки, например команда ls, показывающая содержимое каталога. Когда вы вводите команду ls в окне терминала, запущенная внутри окна терминала оболочка осуществляет вызов fork(), чтобы создать копию оболочки, а затем эта новая копия оболочки выполняет вызов exec(ls), чтобы запустить команду ls.

 

Post Author: Nikulux

Добавить комментарий