- •И.Н.Акуленок, а.В.Акуленок
- •Часть I. Основы операционной системы unix Утверждено советом университета
- •Введение
- •Глава 1. История создания ос unix
- •Реализации oc unix
- •Unix на платформе Intel
- •Доля компьютеров с ос unix (1993 год)
- •Продажи unix–серверов (III квартал 2007 года)
- •1.2. Исследовательские версии unix
- •1.1. Первые шаги по созданию unix
- •1.3. Основные стандарты
- •1.3.1. Основные задачи стандартизации
- •1.4. Разработчики операционных систем
- •1.4.1. Версии at&t
- •1.4.2. Версии Microsoft/sco
- •1.4.3. Версии университета Беркли
- •1.4.4. Версии компании Sun
- •1.4.5. Версии компании Nowell
- •1.4.6. Популярные версии unix
- •1.4.7. Свободно распространяемые системы unix
- •1.5. Реализация ядра unix
- •1.5.1. Микроядро Mach
- •1.5.2. Микроядро Chorus
- •1.6 Характеристики oc unix
- •1.6.1.Файловая система
- •1.6.2. Многозадачность
- •1.6.3. Многопользовательский режим
- •1.6.4. Мобильность
- •1.6.5. Виртуальная память
- •1.6.6. Связь между задачами
- •1.6.7. Внешние устройства
- •1.6.8. Связь между компьютерами
- •1.6.9. Графический пользовательский интерфейс
- •1.6.10. Безопасность
- •1.6.11. Поддержка баз данных
- •1.6.12. Наличие стандартов
- •1.6.13. Открытость
- •1.6.14. Разработка программного обеспечения
- •1.7. Контрольные вопросы
- •1.8. Тесты
- •Глава 2. Функционирование ос unix
- •2.1. Ядро
- •2.1.1. Функции ядра
- •2.1.2. Структура ядра
- •2.1.3. Файловая подсистема
- •2.1.4. Подсистема управления процессами
- •2.1.5. Подсистема ввода/вывода
- •2.2. Командный процессор Shell
- •2.3. Программы–утилиты
- •2.4. Контрольные вопросы
- •2.5. Тесты
- •Глава 3. Процессы
- •3.1. Контекст процесса
- •3.3. Типы процессов
- •3.3.1. Системные процессы
- •3.3.2. Демоны
- •3.3.3. Прикладные процессы
- •3.4. Атрибуты процесса
- •3.4.1. Идентификатор процесса
- •3.4.2. Идентификатор родительского процесса
- •3.4.3. Приоритет процесса
- •3.4.4. Терминальная линия
- •3.4.5. Реальный и эффективный идентификаторы пользователя
- •3.4.6. Реальный и эффективный идентификаторы группы
- •3.4.7. Идентификатор терминальной группы
- •3.5. Иерархия процессов
- •3.6. Взаимодействие процессов
- •3.6.1. «Отцы», «дети», «сироты», «зомби»
- •3.7. Системные вызовы
- •3.7.1. Механизм создания процесса и запуска программы
- •3.7.2. Графический пример дерева процессов
- •3.8. Связи между процессами
- •3.8.1. Сигналы
- •Сигналы posix 1.1
- •3.8.2. Очереди сообщений
- •3.8.3. Семафоры
- •3.8.4. Совместная память
- •3.8.5. Программные каналы
- •3.8.6. Программные гнезда
- •3.9. Контрольные вопросы
- •3.10. Тесты
- •Глава 4. Файловая система unix
- •4.1. Имена файлов
- •4.2. Структура файловой системы
- •4.2.1. Загрузочный блок
- •4.2.2. Суперблок
- •4.2.3 Дескрипторы файлов
- •4.2.4. Блоки данных и свободные блоки
- •4.3. Типы файлов
- •4.3.1. Обычные файлы
- •4.3.2. Каталоги
- •4.3.4. Символические связи
- •4.3.5. Fifo – Именованные каналы
- •4.3.6. Сокеты
- •4.3.7. Обозначение типов файлов
- •Типы файлов
- •4.4. Дескриптор обычного файла
- •4.5. Дескриптор каталога
- •4.6. Дескриптор специального файла
- •4.7. Системная таблица файлов
- •4.8. Монтирование файловых систем
- •4.9. Демонтирование файловых систем
- •4.10. Проверка и восстановление файловых систем
- •4.11. Журналирование файловых систем
- •4.12. Контрольные вопросы
- •4.13. Тесты
- •Глава 5. Этапы начальной загрузки ос Unix
- •5.1. Загрузка и инициализация ядра
- •5.2. Распознавание и конфигурирование устройств
- •5.3. Создание спонтанных процессов
- •5.4. Выполнение команд оператора
- •5.5. Выполнение командных файлов запуска системы
- •5.6. Переход в многопользовательский режим
- •5.7. Контрольные вопросы
- •5.8. Тесты
- •Глава 6. Обзор командных файлов
- •6.1. Процесс init
- •6.1.1. Формат файла inittab
- •6.1.2. Уровни выполнения
- •Уровни выполнения
- •6.1.3. Дисциплины обработки процесса
- •Дисциплины обработки процесса
- •6.1.4. Запуск и этапы работы процесса init
- •6.2. Процесс rc
- •6.2.1. Сценарии запуска системы Solaris
- •6.3. Процесс cron
- •6.4. Процесс регистрации пользователей
- •6.5. Контрольные вопросы
- •6.6. Тесты
- •Глава 7. Останов системы
- •7.1. Выключение питания
- •7.2. Команда shutdown
- •7.3. Команда halt
- •7.4. Изменение уровня выполнения процесса init
- •Глава 8. Задачи системного администрирования
- •8.1. Инструменты администрирования
- •8.1.1. Администрирование aix
- •8.1.2. Администрирование hp-ux
- •8.1.3. Администрирование Solaris
- •8.1.4. Администрирование Linux
- •8.2. Пользователь root
- •8.2.1. Команда su
- •8.3. Добавление новых пользователей в систему
- •8.3.1. Файл /etc/passwd
- •Идентификаторы пользователей
- •8.3.2. Файл /etc/group
- •8.4. Контрольные вопросы
- •8.5. Тесты
- •Литература
- •Содержание
- •Глава 1. История создания ос unix 6
- •Глава 2. Функционирование ос unix 51
- •Глава 3. Процессы 75
- •Глава 4. Файловая система unix 116
- •Акуленок Ирина Николаевна Акуленок Анатолий Васильевич
- •Часть I. Основы операционной системы unix
6.1.3. Дисциплины обработки процесса
Они могут быть определены как следующие (табл. 6.2):
Таблица 6.2.
Дисциплины обработки процесса
Действие |
Ожидание |
Перезапуск |
initdefault |
неприменимо |
неприменим |
boot |
нет |
нет |
bootwait |
да |
нет |
once |
нет |
нет |
wait |
да |
нет |
respawn |
нет |
да |
powerfail |
нет |
нет |
sysinit |
да |
нет |
off |
неприменимо |
неприменим |
initdefault – инициируется после загрузки и задает исходный уровень выполнения. Поле процесса игнорируется.
boot – определяет команду, заданную в поле process, как процедуру загрузки. Не ждет окончания порожденного процесса перед чтением следующей строки, выполняется только во время загрузки системы.
bootwait – тоже, но с ожиданием завершения процесса; выполняется при переходе с однопользовательского на многопользовательский режим после запуска системы.
once – запускает процесс однократно.
wait – выполняет процесс и ждет его завершения перед чтением следующих строк.
respawn – выполняет процесс, если он уже не выполняется, и не ожидает его завершения перед чтением следующей строки, другими словами всегда поддерживает процесс в рабочем состоянии.
powerfail – выполняется при получении демоном init сигнала сбоя питания или когда запрашивается выключение питания.
sysinit – выполняет действия, необходимые для приведения системы в состояние, в котором init сможет запросить информацию у оператора, т.е. выполняет процессы, которые должны предшествовать выводу приглашения на консоль.
off – завершает процесс на данном уровне, если он выполняется.
Некоторые действия представлены в графическом виде (рис. 6.1).
Рис. 6.1. Особенности выполнения действий при переходе на различные уровни выполнения
6.1.4. Запуск и этапы работы процесса init
Процесс init запускается ядром сразу после монтирования файловых систем. Затем init осуществляет переход в тот режим выполнения, который ему указан как initdefault в файле /etc/inittab. Переход к этому режиму выполнения фактически означает запуск всех программ, которые перечислены в этом файле для указанного режима выполнения. Схема работы процесса init показана на рис. 6.2.
Рис. 6.2. Работа процесса init
В приведенном примере файла /etc/inittab система по умолчанию переходит на уровень 1.
Если эта запись с действием initdefault в файле /etc/inittab присутствует, то она должна быть расположена в первой строке. При наличии такой строки процесс init использует ее для определения начального уровня выполнения.
Например:
init:2:initdefault:
Если в данной строке не указано значение в втором поле, то считается по умолчанию, что его значение равно 0123456789. Поэтому в качестве уровня будет выбран старший уровень 9.
В файле /etc/inittab может и не быть строки с действием initdefault. Тогда init запросит в момент загрузки начальное значение уровня выполнения у пользователя через виртуальную системную консоль /dev/syscon.
Общая схема запуска процессов, представленных в файле inittab, следующая (см. рис. 6.2).
Процесс init читает весь файл и ищет строки, для которых необходимо выполнить перезапуск процесса на данном уровне выполнения.
В отношении каждой такой найденной строки init запускает указанный процесс и порождает своего потомка.
После того, как все запуски процессов из файла были завершены, init переходит в состояние ожидания.
Init ждет выполнения следующих возможных событий:
возможно завершится один из его потомков;
будет получен сигнал об ошибке питания;
порожденная пользователем команда попросит init изменить уровень выполнения.
Если хотя бы одно из этих событий происходит, то процесс init вновь просматривает файл inittab.
Имеется возможность заставить процесс init, который в обычном состоянии находится в состоянии ожидания указанных трех видов событий, немедленно начать просмотр и обработку файла inittab.
Для этого служит команда:
$ init Q
или
$ init q (для System V)
Кроме того, действия по повторному обращению к файлу inittab инициируются в AIX (IBM) по команде:
$ telinit q
Если процесс init получает запрос по данной команде о смене уровня выполнения, то он рассылает сигнал–предупреждение SIGTERM всем процессам, которые не должны работать на указанном в команде уровне. Далее предусматривается 20 секунд на их завершение. Если по истечении данного времени на терминале еще останутся процессы, которые не отреагировали на такого рода предупреждение, то они принудительно терминируются сигналом SIGKILL через 5 секунд
Пример файла inittab:
strt:2:initdefault:
lev0:06s:wait:/etc/rc0 >/dev/console 2>&1 < /dev/console
lev2:23:wait:/etc/rc2 > /dev/console 2>&1 < /dev/console
lev3:3:wait:/etc/rc3 > /dev/console 2>&1 < /dev/console
rebt:6:wait:/etc/init.d/announce restart
ioin::sysinit:/sbin/ioinitrc > /dev/console 2>&1
brcl::bootwait:/sbin/bcheckrc < /dev/console 2>&1
cons:123456:respawn:/usr/sbin/getty
powf::powerwait:/sbin/powerfail > /dev/console 2>&1
В приведенном примере файла inittab при включении питания система по умолчанию переключится на уровень 2.
Уровни 0 (прекращение работы), 6 (перезагрузка) и s (один пользователь) выполняют сценарий /etc/rc0, который, в свою очередь может вызывать другие сценарии.
Уровни 2 и 3 (многопользовательский режим/расширенный многопользовательский режим) выполняют сценарий /etc/rc2.
Уровень 3, кроме того, выполняет сценарий /etc/rc3.
Уровень 6 (перезагрузка) выводит сообщение о происходящем путем выполнения сценария /etc/init.d/announce с аргументом restart. Перед выводом на консоль приглашения входа в систему для любого уровня выполняется /sbin/ioinitrc, чтобы проверить соответствие между данными ядра и файлом конфигурации ввода/вывода.
При любом переключении с однопользовательского режима на многопользовательский выполняется /sbin/bcheckrc, чтобы проверить целостность файловой системы.
Для уровней 1–6 запускается процесс getty, если он не существует. Для любого уровня, где запрашивается выключение питания, выполняется сценарий /sbin/powerfail.
