Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 82
Текст из файла (страница 82)
Эти значения наследуются каждым новымпроцессом, запущенным от имени данного пользователя, и используются ядром системы для контроля правомочности доступа к файлам, выполнения программ и т. д.Все пользователи операционной системы UNIX явно или неявно работают с файлами. Файловая система операционной системы UNIX имеет древовидную струкТУРУ [39]. Промежуточными узлами дерева являются каталоги со ссылками наДругие каталоги или файлы, а листья дерева соответствуют файлам или пустымкаталогам.
Каждому зарегистрированному пользователю соответствует некоторыйкаталог файловой системы, который называется домашним (home) каталогом пользователя. При входе в систему пользователь получает неограниченный доступк своему домашнему каталогу и всем каталогам и файлам, содержащимся в нем.Пользователь может создавать, удалять и модифицировать каталоги и файлы, содержащиеся в домашнем каталоге. Потенциально возможен доступ и ко всем другим файлам, однако он может быть ограничен, если пользователь не имеет достаточных привилегий.316Глава 10. Краткий обзор современных операционных системСуперпользовательОчевидно, что администратор системы, который тоже является зарегистрированным пользователем, чтобы управлять всей системой, должен обладать существенно большими, чем обычные пользователи, привилегиями.
В операционных системах UNIX эта задача решается путем выделения единственного нулевого значенияUID. Пользователь с таким значением UID называется суперпользователем (superuser) и обозначается словом root (корень). Он имеет неограниченные права надоступ к любому файлу и на выполнение любой программы.
Кроме того, такойпользователь имеет возможность полного контроля над системой. Он может остановить ее и даже разрушить. По этой причине не рекомендуется работать под этойучетной записью. Администратор должен создать себе обычную учетную записьпростого пользователя, а для выполнения действий, связанных с административными полномочиями, рекомендуется использовать команду su.
Команда su запрашивает у пользователя пароль суперпользователя, и, если он указан правильно,операционная система переводит сеанс пользователя в режим работы суперпользователя. После выполнения необходимых действий, требующих привилегий суперпользователя, следует выполнить команду exit, которая и вернет администратору статус простого пользователя.Еще одним важным отличием суперпользователя от обычного пользователя операционной системы UNIX является то, что на суперпользователя не распространяются ограничения на используемые ресурсы.
Для обычных пользователей устанавливаются такие ограничения, как максимальный размер файла, максимальноечисло сегментов разделяемой памяти, максимально допустимое пространство надиске и т. д. Суперпользователь может изменять эти ограничения для других пользователей, но на него они не действуют.Интерфейс пользователяТрадиционный способ взаимодействия пользователя с системой UNIX основывается на командных языках. После входа пользователя в систему для него запускается один из командных интерпретаторов (в зависимости от параметров, сохраняемых в файле/etc/passwd). Обычно в системе поддерживается несколько командныхинтерпретаторов с похожими, но различающимися своими возможностями командными языками.
Общее название для любого командного интерпретатора ОСUNIX — оболочка (shell), поскольку любой интерпретатор представляет внешнееокружение ядра системы. По умолчанию в системах Linux командным интерпретатором является bash. В принципе он может быть заменен другим, но практически никто этого не делает.Вызванный командный интерпретатор выдает приглашение на ввод пользователем командной строки, которая может содержать простую команду, конвейер команд или последовательность команд.
После выполнения очередной команднойстроки и выдачи на экран терминала или в файл соответствующих результате!интерпретатор команд снова выдает приглашение на ввод командной строки, и тадо тех пор, пока пользователь не завершит свой сеанс работы и не выйдет из системы.Пемейство операционных систем UNIX317Командные языки, используемые в UNIX, достаточно просты, чтобы новые пользователи могли быстро начать работать, и достаточно мощны, чтобы можно былоиспользовать их для написания сложных программ.
Последняя возможность опирается на механизм командных файлов (shell scripts), которые могут содержать произвольные последовательности командных строк. При указании имени командного файла вместо очередной команды интерпретатор читает файл строка за строкойи последовательно интерпретирует команды.Поскольку в настоящее время все большее распространение получают графические интерфейсы, в операционных системах семейства UNIX стали все чаще работать в X-Window. X-Window — это графический интерфейс, позволяющий пользователям взаимодействовать со своими вычислениями и с системой в графическомрежиме. В отличие от систем Windows компании Microsoft, графический интерфейс для UNIX-систем не является основным, в системе можно работать и без него.Прежде всего, графический режим разрабатывался для приложений, предназначенных для работы с графикой.
Однако в последние годы его стали применять гораздо чаще, особенно в системах Linux, которые начинают использовать не толькокак серверные операционные системы, но и как системы для персональных компьютеров.Графический интерфейс в UNIX-системах основан на модели клиент-сервер. Серверная часть X-Window — это аппаратно-зависимая система ввода-вывода, которая непосредственно взаимодействует с приложением и видеоподсистемой, клавиатурой и мышью. При этом серверная часть должна работать на компьютере,производящем вычисления. Взаимодействие с пользователем осуществляется через клиентскую часть, которая обеспечивает вывод данных на дисплей и прием ихс устройств ввода.
Клиентская часть должна быть на том компьютере, за которымработает пользователь. Таким образом, можно работать в графическом режиме,сидя за одним компьютером, в то время как собственно вычисления могут происходить и на другом компьютере.Один из клиентов X-Window — это оконный менеджер (также называемый диспетчером окон). Он управляет размещением окон на экране, определяет их види характер управляющих элементов. То есть именно он и предоставляет пользователю графический интерфейс (GUI), тогда как X-Window — это его основа.В системах Linux наиболее популярными менеджерами графического интерфейсаявляются KDE и GNOME.
Для запуска X-Window в системах семейства UNIX(и Linux) используется команда startx.Команды и командный интерпретаторКак уже упоминалось, оболочкой (shell) в UNIX-системе называют механизм взаимодействия между пользователями и системой. По сути дела, это интерпретаторкоманд, который считывает набираемые пользователем строки и запускает указанные в командах программы, которые и выполняют запрошенные системныеФункции и операции. Полный командный язык, интерпретируемый оболочкой,богат возможностями и достаточно сложен, однако большинство команд просты вИспользовании, и запомнить их не составляет труда.318Глава 10. Краткий обзор современных операционных системКомандная строка состоит из имени команды (а именно имени выполняемого файла), за которым следует список аргументов, разделенных пробелами.
Оболочкаразбивает командную строку на компоненты. Указанный в команде файл загружается, и ему обеспечивается доступ к заданным в команде аргументам.Любой командный язык оболочки фактически состоит из трех частей:Q служебных конструкций, позволяющих манипулировать текстовыми строками и строить сложные команды на основе простых команд;а встроенных команд, выполняемых непосредственно интерпретатором командного языка;Q команд, представляемых отдельными выполняемыми файлами.В свою очередь, набор команд последнего вида включает стандартные команды(системные утилиты, такие как vi, ее и т. д.) и команды, созданные пользователямисистемы.
Для того чтобы выполняемый файл, разработанный пользователем ОСUNIX, можно было запускать как команду оболочки, достаточно определить в одном из исходных файлов функцию с именем main (имя main должно быть глобальным, то есть перед ним не должно указываться ключевое слово static). Если употребить в качестве имени команды имя такого выполняемого файла, командныйинтерпретатор создаст новый процесс и запустит в нем указанную выполняемуюпрограмму, начиная с вызова функции main.Тело функции main, вообще говоря, может быть произвольным (для интерпретатора существенно только наличие входной точки в программу с именем main),но для того чтобы создать команду, которой можно задавать параметры, придерживаются некоторых стандартных правил.
В этом случае каждая функцияmain должна определяться с двумя параметрами — argc и argv. После вызовакоманды параметру argc будет соответствовать число символьных строк, указанных в качестве аргументов вызова команды, a argv — массив указателей напеременные, содержащие эти строки. При этом имя самой команды составляетпервую строку аргументов (то есть после вызова значение argc всегда большеили равно 1). Код функции main должен проанализировать допустимость заданного значения argc и соответствующим образом обработать заданные текстовые строки.Например, следующий текст на языке С может быть использован для созданиякоманды, которая выводит на экран текстовую строку, заданную в качестве ее аргумента:linclude <stdio.h>main (argc.
argv)int argc;char *argv[]:{if (argc ! = 2){ printfC'usage: %s your-text\n". argv[0]):exit:}printf("%s\n". argv[l]);}Семейство операционных систем UNIXо 19ПроцессыПроцесс в системах UNIX — это процесс в классическом понимании этого термина,то есть это программа, выполняемая в собственном виртуальном адресном пространстве. Когда пользователь входит в систему, автоматически создается процесс, в котором выполняется программа командного интерпретатора.