Скачиваний:
22
Добавлен:
09.05.2014
Размер:
354.82 Кб
Скачать

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

Как показано в главе 7, процесс начальной загрузки, имеющий номер 1, вы-

полняет бесконечный цикл чтения из файла "/etc/inittab" инструкций о том,

что нужно делать, если загружаемая система определена как "однопользователь-

ская" или "многопользовательская". В многопользовательском режиме самой пер-

вой обязанностью процесса начальной загрузки является предоставление пользо-

вателям возможности регистрироваться в системе с терминалов (Рисунок 10.19).

Он порождает процессы, именуемые getty-процессами (от "get tty" - получить

терминал), и следит за тем, какой из процессов открывает какой терминал;

каждый getty-процесс устанавливает свою группу процессов, используя вызов

системной функции setpgrp, открывает отдельную терминальную линию и обычно

приостанавливается во время выполнения функции open до тех пор, пока машина

не получит аппаратную связь с терминалом. Когда функция open возвращает уп-

равление, getty-процесс исполняет программу login (регистрации в системе),

которая требует от пользователей, чтобы они идентифицировали себя указанием

319

регистрационного имени и пароля. Если пользователь зарегистрировался успеш-

но, программа login наконец запускает командный процессор shell и пользова-

тель приступает к работе. Этот вызов shell'а именуется "login shell" (регис-

трационный shell, регистрационный интерпретатор команд). Процесс, связанный

с shell'ом, имеет тот же идентификатор, что и начальный getty-процесс, поэ-

тому login shell является процессом, возглавляющим группу процессов. Если

пользователь не смог успешно зарегистрироваться, программа регистрации за-

вершается через определенный промежуток времени, закрывая открытую терми-

нальную линию, а процесс начальной загрузки порождает для этой линии следую-

щий getty-процесс. Процесс начальной загрузки делает паузу до получения сиг-

нала об окончании порожденного ранее процесса. После возобновления работы он

выясняет, был ли прекративший существование процесс регистрационным shell'ом

и если это так, порождает еще один getty-процесс, открывающий терминал,

вместо прекратившего существование.

+------------------------------------------------------------+

| алгоритм login /* процедура регистрации */ |

| { |

| исполняется getty-процесс: |

| установить группу процессов (вызов функции setpgrp); |

| открыть терминальную линию; /* приостанов до завершения|

| открытия */ |

| если (открытие завершилось успешно) |

| { |

| исполнить программу регистрации: |

| запросить имя пользователя; |

| отключить эхо-сопровождение, запросить пароль; |

| если (регистрация прошла успешно) |

| /* найден соответствующий пароль в /etc/passwd */ |

| { |

| перевести терминал в канонический режим (ioctl);|

| исполнить shell; |

| } |

| в противном случае |

| считать количество попыток регистрации, пытаться|

| зарегистрироваться снова до достижения опреде- |

| ленной точки; |

| } |

| } |

+------------------------------------------------------------+

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

Соседние файлы в папке материалы к собеседованию