- •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) Прикладные нити. Существует возможности поддержки нитей полностью на прикладном уровне, при этом ядру об их существовании ничего не известно.
Библиотеки C-threads системы Mach и pthreds стандарта POSIX содержат все необходимые функции для создания, синхронизации, планирования и обработки нитей без какой-либо специальной помощи ядра. Вследствие этого функционирование таких нитей является необычайно быстрым.
Прикладной контекст нити может сохраняться и восстанавливаться без вмешательства ядра. Каждая прикладная нить обладает собственным стеком в адресном пространстве процесса, областью для хранения контекста регистров прикладного уровня и другой важной информации, такой как маски сигналов. Библиотека планирует выполнение и переключает контекст между прикладными нитями, сохраняя стек и состояние регистров следующей по расписанию нити. Прикладные нити не являются по настоящему планируемыми задачами, так как ядро ничего о них не знает.
Рисунок 3.7 - Применение пользовательских нитей: а – прикладные нити обычных процессов; б – мультиплексирование прикладных нитей.
Ядро просто планирует выполнение процесса (или LWP). Если процесс или LWP вытеснен кем-то, такой же участи и все его нити. Если процесс обладает всего одним LWP (или если прикладные нити реализованы на однонитевой системе), будут заблокированы все его нити.
Нитевая библиотека также включает в себя объекты синхронизации, обеспечивающие защиту совместно используемых структур данных.
3.5 Планирование
3.5.1 Задачи планировщика
UNIX&LINUX является системой разделения времени, это означает, что каждому процессу вычислительные ресурсы выделяются на ограниченный промежуток времени, после чего они предоставляются другому процессу и т.д. Максимальный временной интервал, на который процесс может захватить процессор, называется квантом времени (time quantum time или slice). Таким образом, создается иллюзия, что процессы выполняются одновременно, хотя в действительности в каждый момент времени выполняется только один процесс (на однопроцессорной машине).
Центральный процессор является общим ресурсом, разделяемым между всеми процессами системы. Планировщик является компонентом ОС, определяющим, какой из процессов должен выполняться в данный момент времени и как долго он может занимать процессор.
Планировщик должен наиболее оптимально распределять процессорное время между всеми процессами системы. А также, учитывая загруженность системы, обеспечивать приемлемую производительность каждому приложению при общей загруженности системы в рамках нормы.
Приложения можно условно разбить на несколько классов, в зависимости от их требований к планированию и к производительности работы:
Интерактивные приложения. Приложения типа командных интерпретаторов, редакторов и программ с графическим пользовательским интерфейсом, постоянно взаимодействующих с пользователем. Большую часть времени такие приложения находятся в ожидании действий пользователя, таких как ввод с клавиатуры или манипуляции мышью. После получения ввода приложение должно быстро его обработать, иначе пользователь будет скучать;
Пакетные приложения. К ним относятся такие, как сборка программ или вычисления, т. е. программы, не требующие взаимодействия с пользователем и часто выполняющиеся в фоновом режиме. Для таких задач эффективность планирования определяется временем завершения их работы при функционировании других процессов, сравниваемое со временем их выполнения если бы они были единственной задачей в системе;
Приложения реального времени. Это класс задач, для которых время является критическим. Обычно все они требуют гарантированного времени реакции.
На рабочей станции одновременно могут выполняться сразу несколько типов приложений. А планировщик должен оптимально удовлетворить требования каждого из них.
Цель алгоритма планирования состоит в том, чтобы обеспечить соответствие качество обслуживания приоритету, т.е. чем выше приоритет, тем меньше должно быть время отклика (реакция ОС) и тем большая доля процессорного времени достанется процессу.