- •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.4 Реализация процессов
3.4.1 Состав процесса
Процесс состоит из:
Инструкций (сегмент кода);
Данных (сегмент данных);
Адресного пространства;
Информации о процессе (элемент таблицы процессов ядра).
Тело процесса
Телом процесса мы будем называть набор команд и данных, которыми оперирует процесс.
Тело процесса состоит из двух сегментов: сегмента текста и сегмента данных. Сегмент текста - это часть данных процесса, которые включают в себя код исполняемой программы. Сегмент данных - это те пространства оперативной памяти, которые могут статически содержать данные.
Unix дает возможность иметь разделенные сегменты текста и сегменты данных. С другой стороны, можно с одним сегментом текста связывать произвольную группу сегментов данных.
Рисунок 3.2 – Структура тела процесса
Если k пользователей вызывают один текстовой редактор, то в системе находится одна копия этого редактора и k копий сегмента данных и контекстов (копии, надо заметить, не идентичные).
Контекст процесса
Контекст процесса - Это блок данных, который размещается в адресном пространстве ОС и содержат оперативную информацию о состоянии процесса и текущую информацию, связанную с процессом и его запуском. Эта информация сохраняется, когда выполнение процесса приостанавливается, и восстанавливается, когда планировщик предоставляет процессу вычислительные ресурсы.
Контекст процесса в ОС UNIX состоит из нескольких частей:
1) Адресное пространство (образ) процесса.
2) Управляющая информация:
номера пользователя и группы;
указатель на индексный дескриптор текущего каталога;
информация об открытых в процессе файлах,
информация о текущем состоянии процесса на случай его приостановки,
состояние регистров,
обработка сигналов
3) Среда процесса. Переменные среды процесса, значения которых задаются в командном интерпретаторе или в самом процессе с помощью системных вызовов, а также наследуются порожденным процессом от родительского и обычно хранятся в нижней части стека. Среду процесса можно получать или изменять с помощью функций.
4) Аппаратный контекст.
Адресное пространство
Адресное пространство – список адресов памяти от некоторого минимума до некоторого максимума, которые процесс может прочесть и в которое он может писать. Сюда входят код, данные и стек процесса, а также другие области, например, разделяемая память или код и данные динамических библиотек.
Стек состоит из фреймов, содержится в памяти и используется для хранения локальных переменных программы и передачи параметров. Когда процесс выполняет обращение к функции или подпрограмме, в стек отправляется новый фрейм. Одной из частей каждого фрейма является указатель на предыдущий фрейм, который позволяет вернуться из вызова функции. Т.о. надо знать местоположение текущего фрейма и вершину стека.
Стеки, используемые работающими в разных режимах процессами, различны - переменный сегментный стек используется в пользовательском режиме, а режим ядра использует стек определенной величины.
Выполнение процесса заключается в точном следовании набору инструкций. Процесс выполняет последовательность инструкций в адресном пространстве. Процесс отслеживает последовательность выполняемых инструкций при помощи счетчика команд (это аппаратный регистр). Более поздние версии UNIX поддерживают несколько счетчиков команд (нитей), т. е. могут существовать несколько параллельно выполняемых последовательностей инструкций в одном процессе.
Адресное пространство процесса является виртуальным, и обычно только его часть соответствует участкам в физической памяти. Ядро хранит содержимое адресного пространства процесса в областях свопинга (swap areas), находящихся обычно на локальных дисках. Подсистема управления памятью ядра переключает страницы (блоки фиксированного размера) памяти процесса между этими областями по мере необходимости.
Аппаратный контекст
Каждый процесс также имеет набор регистров, которые соответствуют реальным аппаратным регистрам. Ядро хранит регистры процесса, выполняющегося в текущий момент времени в аппаратных регистрах, и сохраняет регистры остальных процессов в контекстах процессов (специальных структурах данных, отводимых для каждого процесса).
Аппаратный контекст включает содержимое регистров общего назначения, а также набора специальных системных регистров.
Программный счетчик (program counter, PC). Хранит адрес следующей выполняемой инструкции.
Указатель стека (stack pointer, SP). Содержит адрес верхнего элемента стека.
Слово состояния процессора (processor status word, PSW). Содержит несколько битов с информацией о состоянии системы, в том числе о текущем и предыдущем режимах выполнения, текущем и предыдущем уровнях приоритетов прерываний, а также биты переполнения и переноса.
Регистры управления памятью, в которых хранится адреса таблиц трансляции адресов процесса.
Регистры сопроцессора (Floating point unit, FPU).
Машинные регистры содержат аппаратный контекст текущего выполняемого процесса. Когда происходит переключение контекста эти регистры в блоке управления процессом (process control block, PCB). Ядро выбирает следующий процесс для выполнения и загружает его аппаратный контекст из блока РСВ.