[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Слои программного обеспечения

Хотя программа может быть полностью реализована только операторами
языка программирования, большинство программ используют функции из
библиотек и, возможно, системные вызовы. Например, команда date(1)
исполняет системный вызов time(2), чтобы прочитать значение системных
часов, и функцию localtime(3), чтобы отформатировать прочитанное
значение. Также обратите внимание, что в языке Си ввод/вывод не
является частью языка.
Системный вызов представляет собой запрос к операционной системе UNIX
для выполнения какой-либо функции. Когда делается системный вызов,
исполняются команды из ядра системы. В других ОС системные вызовы
могут называться вызовами суперпользователя или исполнителя. Системные
вызовы описываются в секции 2 Справочного руководства программиста ОС
UNIX+ System V. Этот курс перечислит большинство из них. Не будут
обсуждаться только те вызовы, которые требуют привилегий
суперпользователя (пользователя root).
Когда делается системный вызов, программа переходит из
пользовательского режима в системный. В системном режиме можно
исполнять некоторые привилегированные команды и исследовать или
модифицировать привилегированные данные. Реальное аппаратное
обеспечение машины (т.е. память, диски, ленты и т.д.) доступно только
через системные вызовы. Системные вызовы представляют собой интерфейс
между процессом и операционной системой для эффективного использования
машины. Благодаря тому, что пользовательские программы не могут
непосредственно исполняться в системном режиме, гарантируется
целостность и безопасность системы.
Большинство функций общего назначения помещены в объектные библиотеки.
Такие функции описаны в секции 3 Справочного руководства программиста
UNIX+ System V. Некоторые из них реализованы с использованием
системных вызовов, другие содержат только код на языке Си. Например,
printf(3S), puts(3S) и все остальные функции вывода исполняют
системный вызов write(2). С другой стороны, такие функции, как
strcpy(3S), которая делает побайтовое копирование, останавливаясь
после передачи NULL, не зависят ни от каких системных вызовов.
С исполнением системного вызова связаны определенные накладные
расходы. Переключение контекста из пользовательского режима в
системный занимает гораздо больше времени, чем вызов функции, которая
является частью пространства команд процесса. Некоторые библиотечные
функции буферизуют обращения к системным вызовам. Это уменьшает
количество системных вызовов и, следовательно, накладные расходы.