- •Fedora Core 5 (Bordeaux)
- •2007 Оглавление
- •Многообразие ядер Linux
- •Чуть ближе к истории
- •Хронология
- •Нумерация версий
- •Поддержка
- •Стабильные версии
- •Загрузочные параметры ядра
- •Параметры корневой файловой системы
- •Параметры загрузки управления памяти
- •Параметры управления ram-диском
- •Другие параметры ядра
- •Процессы Немного об архитектуре процессов
- •Общие сведения о процессах
- •Системные вызовы fork() и ехес()
- •Нити Что такое нить?
- •Создание нити и идеология posix api
- •Завершение нити, особенности главной нити
- •Жизненный цикл нити
- •Синхронизация с использованиеmutex Что такое mutex?
- •Использование mutex
- •Проблема тупиков
- •Решение проблемы тупиков
- •Общая схема управления процессами
- •Команды управления процессами Команда ps
- •Команда top
- •Изменение приоритета процесса - команда nice
- •Взаимодействие процессов(ipc)
- •Семафоры
- •Файловая система Видимая сторона файловой системы
- •Имена файлов и каталогов
- •Каталоги
- •Стандартные каталоги
- •Типы файлов
- •Файлы физических устройств
- •Наиболее часто используемые стандартные имена устройств
- •Жесткие и символические ссылки
- •Именованные каналы
- •Права доступа к файлам и каталогам
- •Команды работы с файлами и каталогами
- •Команды chown и chgrp
- •Команда cat
- •Команда cp
- •Команда mv
- •Команды rm и rmdir
- •Команды more и less
- •Команда find и символы шаблонов для имен файлов
- •Команда split — разбиваем файл на несколько частей
- •Сравнение файлов и команда patch
- •Изнанка файловой системы
- •Типы файловых систем, поддерживаемых в Linux
- •Файловая система ext2fs – предшественница ext3fs
- •ReiserFs
- •Файловая система ext3 Введение в файловую систему ext3.
- •Журналируемая файловая система
- •Файловая система ext3
- •Различные журналируемые режимы в файловой системе ext3
- •Управление памятью
- •Аппаратно-независимый уровень управления памятью
- •Страничное замещение основной памяти и swapping
- •Свопинг
- •Управление пространством на устройстве выгрузки
- •Выгрузка процессов
- •Выгрузка при выполнении системной функции fork
- •Выгрузка с расширением
- •Загрузка (подкачка) процессов
- •Подкачка по запросу
- •Структуры данных, используемые подсистемой замещения страниц
- •Функция fork в системе с замещением страниц
- •Сборщик" страниц
- •Управление вводом/выводом
- •Взаимодействие драйверов с программной и аппаратной средой
- •Конфигурация системы
- •Программы обработки прерываний
- •Дисковые драйверы
- •Список используемой литературы
- •Приложение Низкоуровневый ввод/вывод Обзор механизмов ввода/вывод вLinux
- •Файловые дескрипторы
- •Открытие файла: системный вызовopen()
- •Закрытие файла: системный вызов close()
- •Чтение файла: системный вызов read()
- •Запись в файл: системный вызов write()
- •Произвольный доступ: системный вызов lseek()
Общая схема управления процессами
Каждый процесс может порождать полностью идентичный процесс с помощью fork(). Родительский процесс может дожидаться окончания выполнения всех своих процессов-потомков с помощью системного вызова wait. В любой момент времени процесс может изменить содержимое своего образа памяти, используя одну из разновидностей вызова ехес(). Каждый процесс реагирует на сигналы и, естественно, может установить собственную реакцию на сигналы, производимые операционной системой. Приоритет процесса может быть изменен с помощью системного вызова nice.
Сигнал - это способ информирования процесса ядром о происшествии какого-то события. Если возникает несколько однотипных событий, процессу будет подан только один сигнал. Сигнал означает, что произошло событие, но ядро не сообщает, сколько таких событий произошло.
Примеры сигналов:
Окончание порожденного процесса (например, из-за системного вызова exit).
Возникновение исключительной ситуации.
Сигналы, поступающие от пользователя, при нажатии определенных клавиш.
Установить реакцию на поступление сигнала можно с помощью системного вызоваsignal:
func = signal (snum, function);
где: snum номер сигнала;
function адрес функции, которая должна быть выполнена при поступлении указанного сигнала.
Возвращаемое значение - адрес функции, которая будет реагировать на поступление сигнала. Вместо function можно указать ноль или единицу. Если был указан ноль, то при поступлении сигнала snum выполнение процесса будет прервано аналогично вызову exit. Если указать единицу, данный сигнал будет проигнорирован, но это возможно не для всех процессов.
С помощью системного вызова kill можно сгенерировать сигналы и передать их другим процессам. Обычно kill используется для того, чтобы принудительно завершить («убить») процесс:
kill(pid, snum);
где: pid идентификатор процесса;
snum номер сигнала, который будет передан процессу.
Pid состоит из идентификатора группы процессов и идентификатора процесса в группе. Если вместо pid указать нуль, то сигнал snum будет направлен всем процессам, относящимся к данной группе (понятие группы процессов аналогично группе пользователей). В одну группу включаются процессы, имеющие общего предка. Идентификатор группы процесса можно изменить с помощью системного вызова setpgrp. Если вместо pid указать -1, то ядро передаст сигнал всем процессам, идентификатор пользователя которых равен идентификатору текущего выполнения процесса, посылающего сигнал. Номера сигналов приведены в табл. Сигналы (точнее, их номера) описаны в файле singnal.h.
Для нормального завершения процесса используется вызов:
exit (status), где status — это целое число, возвращаемое процессу-предку для его информирования о причинах завершения процесса-потомка.
Вызов exit может задаваться в любой точке программы, но может быть и неявным, например, при выходе из функции main (при программировании на С) оператор return 0 будет воспринят как системный вызов exit(0).
Команды управления процессами Команда ps
Команда ps предназначена для вывода информации о выполняемых в
текущий момент процессах. Данная команда имеет много параметров, о
которых вы можете прочитать в руководстве (man ps). Здесь будет описана лишь часть наиболее часто используемые мною (см. табл).
Параметр |
Описание |
-а |
Отобразить все процессы, связанные с терминалом(отображаются процессы всех пользователей) |
-е |
Отобразить все процессы |
-t список терминалов |
Отобразить процессы, связанные с указанными терминалами |
-и идентификаторы пользователей |
Отобразить процессы, связанные с данными идентификаторами |
-д идентификаторы групп |
Отобразить процессы, связанные с данными идентификаторами групп |
-X |
Отобразить все процессы, не связанные с терминалом |