- •Список тем к курсу Red Hat Enterprise Linux
- •Уровни работы ос: уровень ядра и пользователя
- •Назначение и функции ядра ос и системные компоненты (модули ядра, библиотеки и драйвера)
- •Файловая система как способ организации данных на диске
- •Назначение и содержимое супер-блока
- •Индексный узел (I-node). Файлы и каталоги.
- •Жесткие (hard) и символные (symbolic) ссылки
- •Файлы устройств
- •Виртуальная файловая система (vfs): назначение и организация
- •Дерево каталогов: корень и стандартные папки. Содержимое и назначение стандартных каталогов
- •Виды устройств: символьные, блочные. Стандартные устройства: console, null, random, stdin, stdout, stderr
- •Монтирование и работа с mount, umount, fstab
- •Страничная организация памяти и виртуальная память процессов
- •Процесс и контекст процесса: pid, ppid, process state, uid, priority. Потоки
- •Механизм создания процессов и потоков (функция fork)
- •Разделяемая память
- •Переменные окружения
- •Сигналы
- •Shell: назначение, приглашение
- •Shell: логические функции и спец. Символы &&, ||. Возвращаемые программами значения
- •Пользователи и группы. Uid, gid, euid, основная группа в которую входят пользователи.
- •Безопасность в Linux. Права доступа к файлам.
- •Авторизация и аутентификация. Процесс входа пользователя в систему.
- •Пользователь root
- •Конфигурационные файлы. Примеры, формат и назначение.
- •Системные службы (демоны): локальные и сетевые
- •Службы syslog и cron
- •Сетевая подсистема Linux. Сетевой интерфейс, сокеты, стек tcp/ip. Службы dns, dhcp. Файлы hosts, resolv.Conf и настройки сетевых адаптеров. Маршрутизация.
- •Работа со справкой: справка самих команд (вызов с аргументов --help), работа с man, info и whatis
- •Работа с текстовым редактором VI
- •Процесс загрузки ос. Mbr, Загрузочные скрипты, загрузчик, уровни загрузки.
- •Программа init, inittab и другие настройки загрузки.
- •Команды ls, cd, cp, mv, rm, ln, touch, cat, find, mkdir, tar gzip
- •Команды , echo, more, less, tail, head, file
- •Команды useradd, userdel, groupadd, groupdel, usermod, passwd, groupmod
- •Команды ps, top, nice, kill, killall
- •Команды chmod, chown, chgrp
- •Команды ifconfig, ping, route, netstat, traceroute
Механизм создания процессов и потоков (функция fork)
Механизм порождения новых процессов довольно существенно различается в разных операционных системах. Во всех операционных системах семейства UNIX новые процессы в системе не появляются «из ниоткуда», а ответвляются от уже существующих в системе процессов.
Когда возникает необходимость создания нового процесса (C), текущий процесс (P) выполняет системный вызов fork (см. рисунок Рисунок 1.42, «Создание нового процесса»). При этом создаётся новый процесс, представляющий собой копию исходного процесса и его контекста. Новый процесс отличается тем, что у него другой PID, а родителем для него является запустивший процесс (P). Далее дочерний процесс (C) с помощью системного вызова exec запускает вместо себя другую программу, заново проинициализировав свои код и данные.
Разделяемая память
Самый простой способ «обойти» разделение виртуальных пространств процессов — использование разделяемой памяти. Это специальный механизм, с помощью которого средствами операционной системы два процесса могут обращаться к общему участку физической памяти — каждый через свое адресное пространство. Для операционной системы этот способ является наиболее простым — ведь все страницы виртуальной памяти процессов в любом случае проецируются на какую-то область физической памяти — так почему бы на ту же область не проецировать часть адресного пространства другого процесса? Самое важное, что такое взаимодействие не требует каких-либо накладных расходов, процессы обмениваются информацией со скоростью обращения к памяти.
Однако для пользователя такой способ межпроцессного взаимодействия является труднодоступным. Во-первых, программы, взаимодействующие таким образом, должны изначально содержать соответствующий код — с помощью специальных системных вызовов обе программы должны обозначить участки своих адресных пространств, предназначенные для обмена информацией. Другая сложность состоит в том, что разделяемая память сама по себе не содержит средств синхронизации, программы должны согласованно изменять общий участок памяти, чтобы не испортить данные; обычно для этих целей применяются семафоры и аналогичные механизмы синхронизации.
Таким образом, разделяемая память — наиболее быстрый способ обмена, но при этом малопригодный для широкого использования. Обычная сфера применения разделяемой памяти — специализированные высокопроизводительные программы. Стоит также обратить внимание на явную аналогию разделяемой памяти и исполнения множества потоков в рамках одного процесса — в UNIX эти инструменты построения программ используются редко и только в связи с высокопроизводительными вычислениями и вводом-выводом.
Переменные окружения
Каждый запускаемый процесс система снабжает неким информационным пространством, которое этот процесс может изменять. Правила пользования этим пространством просты: в нем можно задавать именованные хранилища данных (переменные окружения), в которые записывать любую текстовую информацию (присваивать значение переменной окружения), а впоследствии эту информацию считывать (подставлять значение переменной). Конечно, переменные окружения — очень ограниченное средство межпроцессного взаимодействия. Во-первых, действие их односторонне, так как дочерний процесс не может изменить окружение родительского процесса. Более того, родительский процесс никак не может воспользоваться информацией из окружения дочернего. Во-вторых, окружение уже запущенного процесса изменить извне нельзя. В-третьих, через переменные окружения можно передавать только текстовые данные, обычно небольшого объёма. Поэтому переменные окружения используются в основном для задания условий запуска программы: положение конфигурационных файлов, требуемые параметры интефейса и аналогичные простые параметры.