Чтение онлайн

на главную

Жанры

Linux для пользователя

Костромин Виктор Алексеевич

Шрифт:

К обязанностям системного администратора обычно относят следующие задачи:

• подключение и настройка аппаратных устройств;

• установка и обновление программного обеспечения;

• запуск и настройка общесистемных сервисов (конфигурирование системы);

• управление пользователями;

• управление процессами;

• распределение ресурсов;

• обеспечение безопасности.

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

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

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

В самом первом приближении можно считать, что процесс - это загруженная в оперативную память программа. Но это не совсем точно, правильнее было бы сказать, что "процесс выполняет программу". Дело в том, что в Linux вначале запускается процесс, который загружает в оперативную память программу из указанного ему файла и начинает ее выполнять. Это означает, что каждый процесс должен быть запущен (как говорят - "порожден") каким-то другим процессом. То есть для каждого процесса однозначно определен его "родитель" (или "предок"), для которого данный процесс является "дочерним" (или "потомком"). Если вы хотите увидеть "дерево" запущенных в вашей системе процессов, выполните команду pstree. Вывод этой команды позволяет увидеть, что "отцом" всех процессов в системе (или "корнем дерева процессов") является процесс init, который первым запускается после загрузки ядра.

Каждый процесс в системе имеет уникальный идентификатор - PID, назначаемый процессу при запуске. Процесс с идентификатором 1 выполняет программу init. Именно по этим идентификаторам система различает процессы. Каждый запущенный процесс в любой момент времени находится в одном из следующих состояний: активен (R), приостановлен (T) или "спит" (S). Текущее состояние процесса называют статусом процесса.

Кроме идентификатора и статуса для каждого процесса в специальных структурах ядра сохраняются следующие данные (приводимый ниже перечень является далеко не полным):

• полная командная строка запуска выполняемой процессом задачи;

• информация об отведенном процессу адресном пространстве;

• ссылка на текущий рабочий каталог и корневой каталог процесса (последний служит для ограничения доступа процесса к файловой структуре);

• таблица открытых процессом файлов;

• так называемое окружение процесса, т. е. перечень заданных для данного процесса переменных с их текущими значениями;

• атрибуты, определяющие права и привилегии процесса, таблица обработчиков сигналов;

• указание на родительский процесс;

• пользовательская маска (umask) или маска доступа - указание на то, какие права надо удалить при создании нового файла или каталога из стандартного набора прав, присваиваемых файлу (каталогу).

Поскольку Linux - система многозадачная, одновременно может быть запущено много процессов. Впрочем, слово "одновременно" здесь применено не совсем корректно, поскольку на самом деле в каждый момент времени выполняется только один процесс. (Для точности следует заметить, что в многопроцессорных системах, на которых Linux тоже может работать, одновременно могут выполняться несколько процессов, но мы рассматриваем только однопроцессорные системы). Планировщик процессов выделяет каждому процессу небольшой квант времени и по истечении этого кванта передает управление следующему процессу. Кванты времени, выделяемые каждому процессу, так малы, что у пользователя создается иллюзия одновременного выполнения многих процессов. А для того, чтобы некоторые, наиболее важные процессы, получали больше процессорного времени, для каждого процесса установлен приоритет.

Пользователи могут "общаться" с процессами путем посылки им сигналов. Процессы тоже общаются друг с другом посредством сигналов. Когда мы нажимаем комбинацию клавиш ‹Ctrl›+‹C›, чтобы завершить выполнение какой-то программы, мы фактически посылаем соответствующему процессу сигнал "Завершить работу". Завершаясь, процесс посылает родительскому процессу сигнал о своем завершении. Но бывают случаи, когда родительский процесс завершается раньше дочернего. Процессы, не имеющие родителя, называются "сиротами". "Сироты" автоматически усыновляются процессом init, который и принимает сигналы об их завершении. Если процесс-родитель по каким-то причинам не может принять сигнал о завершении дочернего процесса, то процесс-потомок превращается в "зомби" и получает статус Z. Процессы-зомби не занимают процессорного времени (т. е. их выполнение прекращается), но соответствующие им структуры ядра не освобождаются. Уничтожение таких процессов - одна из обязанностей системного администратора. Наконец, процесс может надолго "впасть в сон", прервать который не удается. Статус таких процессов обозначается символом D. Уничтожить их удается только при перезагрузке системы.

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

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

Приведенных данных о процессах нам пока достаточно (к рассмотрению процессов мы еще вернемся в разд. 8.4).

8.2. Процедура загрузки ОС Linux

Для начала надо отметить, что все, о чем будет рассказано в этом разделе, относится к дистрибутиву Red Hat и его аналогам. В других дистрибутивах (например, Debian) процедуры загрузки могут быть организованы иначе.

8.2.1. Процесс init и файл /etc/inittab

Как вы знаете, после включения питания компьютера и завершения тестирования аппаратной части BIOS считывает из первого сектора загрузочного диска короткую программу-загрузчик. Эта программа запускает основной системный загрузчик (например, lilo), который, в свою очередь, загружает в память ядро системы, которое обычно хранится в файле vmlinuz-x.y.z-a в каталоге /boot. Здесь x.y.z - это номер версии ядра, а вместо символа a часто стоит указание на какие-то конкретные модификации ядра. Впрочем, название файла ядра может быть и другим, для загрузчика это не имеет значения, только это имя надо указать в конфигурационном файле загрузчика.

Сразу после загрузки ядро монтирует корневую файловую систему и запускает процесс init. Процесс init - это программа, которая ответственна за продолжение процедуры загрузки, и перевод системы от начального состояния, возникающего после загрузки ядра, в стандартное состояние обработки запросов многих пользователей. Init выполняет еще массу различных операций, необходимых для дальнейшей работы системы: проверку и монтирование файловых систем, запуск различных служб (демонов), запуск процедур логирования, оболочек пользователей на различных терминалах и т. д.

Поделиться:
Популярные книги

Купеческая дочь замуж не желает

Шах Ольга
Фантастика:
фэнтези
6.89
рейтинг книги
Купеческая дочь замуж не желает

Последняя Арена 2

Греков Сергей
2. Последняя Арена
Фантастика:
рпг
постапокалипсис
6.00
рейтинг книги
Последняя Арена 2

Системный Нуб 2

Тактарин Ринат
2. Ловец душ
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Системный Нуб 2

Ледяное проклятье

Михайлов Дем Алексеевич
4. Изгой
Фантастика:
фэнтези
9.20
рейтинг книги
Ледяное проклятье

Путь Шамана. Шаг 5: Шахматы Кармадонта

Маханенко Василий Михайлович
5. Мир Барлионы
Фантастика:
фэнтези
рпг
попаданцы
9.34
рейтинг книги
Путь Шамана. Шаг 5: Шахматы Кармадонта

Инферно

Кретов Владимир Владимирович
2. Легенда
Фантастика:
фэнтези
8.57
рейтинг книги
Инферно

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

Разведчик. Заброшенный в 43-й

Корчевский Юрий Григорьевич
Героическая фантастика
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.93
рейтинг книги
Разведчик. Заброшенный в 43-й

Хозяйка старой усадьбы

Скор Элен
Любовные романы:
любовно-фантастические романы
8.07
рейтинг книги
Хозяйка старой усадьбы

Кровь, золото и помидоры

Распопов Дмитрий Викторович
4. Венецианский купец
Фантастика:
альтернативная история
5.40
рейтинг книги
Кровь, золото и помидоры

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Кодекс Охотника. Книга XVIII

Винокуров Юрий
18. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVIII

Сумеречный стрелок

Карелин Сергей Витальевич
1. Сумеречный стрелок
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный стрелок

Здравствуй, 1985-й

Иванов Дмитрий
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Здравствуй, 1985-й