Книга: Архитектура операционной системы UNIX

10.3.7 Вход в систему

10.3.7 Вход в систему

Как показано в главе 7, процесс начальной загрузки, имеющий номер 1, выполняет бесконечный цикл чтения из файла "/etc/inittab" инструкций о том, что нужно делать, если загружаемая система определена как "однопользовательская" или "многопользовательская". В многопользовательском режиме самой первой обязанностью процесса начальной загрузки является предоставление пользователям возможности регистрироваться в системе с терминалов (Рисунок 10.19). Он порождает процессы, именуемые getty-процессами (от "get tty" — получить терминал), и следит за тем, какой из процессов открывает какой терминал; каждый getty-процесс устанавливает свою группу процессов, используя вызов системной функции setpgrp, открывает отдельную терминальную линию и обычно приостанавливается во время выполнения функции open до тех пор, пока машина не получит аппаратную связь с терминалом. Когда функция open возвращает управление, getty-процесс исполняет программу login (регистрации в системе), которая требует от пользователей, чтобы они идентифицировали себя указанием регистрационного имени и пароля. Если пользователь зарегистрировался успешно, программа login наконец запускает командный процессор shell и пользователь приступает к работе. Этот вызов shell'а именуется "login shell" (регистрационный shell, регистрационный интерпретатор команд). Процесс, связанный с shell'ом, имеет тот же идентификатор, что и начальный getty-процесс, поэтому login shell является процессом, возглавляющим группу процессов. Если пользователь не смог успешно зарегистрироваться, программа регистрации завершается через определенный промежуток времени, закрывая открытую терминальную линию, а процесс начальной загрузки порождает для этой линии следующий getty-процесс. Процесс начальной загрузки делает паузу до получения сигнала об окончании порожденного ранее процесса. После возобновления работы он выясняет, был ли прекративший существование процесс регистрационным shell'ом и если это так, порождает еще один getty-процесс, открывающий терминал, вместо прекратившего существование.

алгоритм login /* процедура регистрации */
{
 исполняется getty-процесс: установить группу процессов (вызов функции setpgrp);
 открыть терминальную линию; /* приостанов до завершения открытия */
 if (открытие завершилось успешно) {
  исполнить программу регистрации: запросить имя пользователя;
  отключить эхо-сопровождение, запросить пароль;
  if (регистрация прошла успешно) { /* найден соответствующий пароль в /etc/passwd */
   перевести терминал в канонический режим (ioctl);
   исполнить shell;
  }
  в противном случае считать количество попыток регистрации, пытаться зарегистрироваться снова до достижения определенной точки;
 }
}

Рисунок 10.19. Алгоритм регистрации

Оглавление книги


Генерация: 0.193. Запросов К БД/Cache: 2 / 0
поделиться
Вверх Вниз