- •4 Курс, 1 семестр
- •Оглавление
- •1 Введение в ос unix
- •1.1 История создания
- •1.2 Базовые концепции
- •1.3 Архитектура unix
- •1.4 Пользователи системы
- •1.5 Пользовательская среда Unix.
- •2 Файловая подсистема
- •2.1 Понятие
- •2.2 Логическая структура файловой системы
- •2.3 Имена файлов в ос unix
- •2.4 Типы файлов
- •2.5 Права доступа к файлам
- •2.6 Физическое размещение файловой системы
- •2.7 Особенности размещения файловой системы sVfs
- •2.8 Особенности размещения файловой системы ffs (ufs)
- •2.9 Монтирование файловых систем
- •2.10 Восстановление файловой системы
- •2.11 Типы файловых систем unix
- •3 Подсистема управления процессами
- •3.1 Понятие процесса
- •3.2 Логическая организация процессов
- •3.3 Жизненный цикл процесса
- •3.4 Реализация процессов
- •3.4.1 Состав процесса
- •3.4.2 Структуры управления процессом
- •3.4.3 Файловая система /proc
- •3.5 Нити (потоки)
- •Причины появления нитей
- •Типы нитей
- •3) Прикладные нити. Существует возможности поддержки нитей полностью на прикладном уровне, при этом ядру об их существовании ничего не известно.
- •3.5 Планирование
- •3.5.1 Задачи планировщика
- •3.5.2 Приоритеты процессов
- •3.5.3 Реализация планировщика
- •3.5.4 Расчет приоритета
- •3.5.5 Особенности планирования в Linux
- •3.6 Взаимодействие между процессами (Interprocess Communication, ipc)
- •3.6.1 Введение
- •3.6.2 Взаимодействие родственных процессов
- •3.6.3 Взаимодействие произвольных процессов
- •Разделяемая память.
- •Передача сообщений.
- •Семафоры.
- •3.6.4 Межпроцессное взаимодействие с помощью файловой системы
- •4 Управление памятью
- •4.1 Понятие виртуальной памяти
- •4.2 Свопинг
- •4.3 Страничное замещение
- •4.4 Стратегия замещения страниц
- •5 Подсистема ввода-вывода
- •5.1 Основные задачи
- •5.2 Типы устройств ввода-вывода в ос
- •5.3 Общая схема
- •5.4 Драйвера
- •5.5 Буферизация
- •5.6 Поддержка операций ввода-вывода
- •6 Unix в сетях
- •6.1 Конфигурация tcp/ip
- •6.2 Основные сетевые утилиты
- •6.3 Основные сетевые интерфейсы
- •6.4 Доступ к сетевым ресурсам
- •6.5 Сетевые службы Unix
3.5.5 Особенности планирования в Linux
Потоки в Linux реализованы в ядре. Поэтому планирование основано на потоках, а не на процессах. Планировщик различает три класса потоков:
потоки реального времени, обслуживаемые по алгоритму FIFO
потоки реального времени, обслуживаемые в порядке циклической очереди
потоки разделения времени
1 – имеют наивысший приоритет и не могут прерываться другими потоками, за исключением таких же.
2 – то же, что и 1, но с тем отличием, что они могут прерываться таймером, после чего поток перемещается в конец своей очереди.
Каждый поток имеет приоритет. С каждым процессом связан квант времени, т.е. количество тиков таймера, в течение которых процесс может выполняться. По умолчанию каждый тик равен 10мс. Этот интервал в Linux называют «джиффи».
Планировщик использует квант и приоритет для определения текущего приоритета.
Кроме этого, процессы могут получать бонусы за неиспользованное процессорное время, который позволяет выиграть в спорных ситуациях. Предпочтение отдается только что работавшему процессу, т.к. в этом случае его страницы и кэш еще находятся в памяти и экономится время на их замену.
Планировщик выбирает поток с максимальным приоритетом. Во время работы его квант уменьшается на единицу на каждом тике. Поток лишается ЦП при выполнении одного из следующих условий:
квант потока уменьшился до 0
поток блокируется на операции ввода-вывода
в состояние готовности пришел ранее заблокированный поток с более высоким приоритетом.
Т.о. потоки, связанные с в/в получают преимущество при планировании.
Другое свойство этого алгоритма заключается в том, что когда потоки соревнуются за право использовать ЦП, поток с большим приоритетом получает большую долю процессорного времени.
3.6 Взаимодействие между процессами (Interprocess Communication, ipc)
3.6.1 Введение
Межпроцессное взаимодействие – связь между процессами, предназначенная для выполнения некоторой задачи, передачи данных и синхронизации работы процессов.
В UNIX каждый процесс выполняется в своем собственном адресном пространстве. Это позволяет исключить “плохое” влияние одного процесса на другой. В сложных программных системах часто используются несколько взаимодействующих процессов, решающих общую задачу.
Процессы могут взаимодействовать:
1) Передавая данные. Один процесс передает данные другому процессу, объемом от десятков байтов до нескольких мегабайтов.
2) Совместно используя данные. Можно не копировать информацию, а использовать ее совместно, при этом изменения, сделанные одним процессом, должны быть сразу видны другому. Взаимодействовать могут несколько процессов. При совместном использовании данных процессам нужен протокол взаимодействия, который позволит:
сохранить целостность данных;
и исключить конфликты при доступе данным.
3) Уведомляя о событиях. Процесс может сообщить другому процессу или группу процессов о наступлении некоторого события. Таким образом, можно синхронизировать выполнения нескольких процессов.
Поэтому процессам надо предоставить возможность общаться и разделять между собой общие ресурсы и данные. Можно решать эту задачу средствами самих процессов, но это неэффективно, а в многозадачной системы еще и опасно. ОС должна предоставлять средства межпроцессного взаимодействия (InterProcess Communication, IPC).
Средства межпроцессного взаимодействия, присутствующие во всех версиях UNIX, это:
сигналы
каналы
FIFO (именованные каналы)
сообщения (очереди сообщений)
семафоры
разделяемая память
сокеты.