357
имена и интерпретируются командным интерпретатором либо другими
системными утилитами. Например, типичной является системная
переменная окружения path, значение которой задает список каталогов
для поиска программ командным интерпретатором. Пользовательские
переменные создаются, изменяются и интерпретируются пользователями и
приложениями. Чтобы окружение могло быть использовано, в системе
должны быть средства доступа к нему. На уровне команд это должна быть
команда типа show, выводящая на терминал имена и значения всех
переменных глобального окружения, на уровне API – системный вызов
getEvironment, возвращающий адрес блока глобального окружения.
Для внутреннего представления глобального окружения в ОС
возможны два варианта: либо хранить в системе единую таблицу со
значениями всех переменных окружения, либо для каждого процесса
создавать собственную копию такой таблицы. Чаще используется второй
вариант, который обеспечивает, во-первых, лучшую защиту глобального
окружения, а во-вторых, возможность варьировать окружения для разных
процессов, используя глобальное окружение отчасти как локальное. Очень
удобным является этот вариант для систем с иерархической структурой
отношений между процессами: в этом случае глобальное окружение
является частью наследства, передаваемого от предка к потомку.
Системные вызовы, связанные с порождением новых процессов, должны
обеспечивать возможность передавать потомку как точную копию
глобального окружения родителя, так и оригинальное окружение,
специально созданное родителем для потомка.
Внутреннее представление глобального окружения – всегда
текстовое, представленное в ключевой форме, как в команде set. Это
объясняется тем, что окружение интерпретируется прикладными
процессами, а именно текстовый тип может быть интерпретирован
наиболее гибким образом.