
- •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.2 Структуры управления процессом
Выполнение процесса может происходить в двух режимах – ядра и задачи. В режиме задачи выполняется основная часть процесса, выполняя инструкции прикладной программы, допустимые на непривилегированном уровне защиты процессора. При этом ему недоступны системные структуры ядра. Когда процессу требуется получение каких-либо услуг ядра, он делает системный вызов, который выполняет инструкции ядра, находящиеся на привилегированном уровне. Выполнение процесса при этом переходит в режим ядра.
////Стековая страница ядра никогда не своппится, так как она должна быть доступна в любое время работы системы.
Соответственно каждый процесс в системы Unix состоит из двух частей и представлен двумя структурами: пользовательской (user) и системной (proc).
Таблица процессов ядра
В различных реализациях UNIX ядро имеет массив фиксированного размера, называемый таблицей процессов, которая загружается в оперативную память при загрузке системы и остается там до окончания работы. Записями этой таблицы являются структуры proc. Таблица процессов является одновременно массивом и двусвязным списком в виде дерева.
Физическое описание представляет собой статический массив указателей, длина которого является константой. Размер этого массива зависит от максимального количества процессов, которые одновременно могут быть запущены в системе.
Указатели описаны системной переменной curproc. Curproc указывает на структуру proc активного процесса и меняется планировщиком, когда ресурсы процессора передаются другому процессу. Структура proc содержит указатель на данные структуры user.
Каждому процессу в таблице процессов ядра соответствует свой элемент.
Номер записи в таблице - есть идентификатор процесса “PID”. Указатель на строку таблицы содержится в системной переменной curproc.
Рисунок 3.3 – Состав структуры proc
Записями этой таблицы являются структуры proc, содержащие
ссылки на тело и контекст процесса
текущее состояние, ожидаемые события, время до истечения интервала будильника, PID и PPID процесса, идентификаторы пользователя и группы.
Параметры планирования: Приоритеты, процессорное время, потребленное за последний учитываемый период, количество времени, проведенное в ожидании
Сигналы: маски, указывающие, какие сигналы игнорируются, какие перехватываются, какие временно заблокированы или находятся в процессе доставки
Пользовательская структура user
Данные user размещаются в определенном месте виртуальной памяти ядра и адресуются системной переменной u.
В структуре пользователя содержится информация, которая не требуется, когда процесса физически нет в памяти и он не выполняется. Структура пользователя выгружается на диск, освобождая место в памяти, чтобы не тратить память на ненужную в данный момент информацию.
Структура пользователя делится на следующие категории:
Машинные регистры: заполняются при прерывании с переключением в режим ядра
Состояние системного вызова: информация о текущем вызове, включая параметры и результаты
Таблица дескрипторов файлов: по дескриптору файла находится структура данных (inode), соответствующий данному файлу
Учетная информация: указатель на таблицу использования процессорного времени, максимальный размер стека, количество страниц памяти и т.д.
Стек ядра: фиксированный стек для использования процессом в режиме ядра.
Рисунок 3.4 – Связь между структурами процесса
Прикладные программы работают в режиме задачи, а функции ядра выполняются в режиме ядра. Ядро защищает часть адресного пространства от доступа в режиме задачи. Более того, наиболее привилегированные машинные инструкции могут выполняться только в режиме ядра. Главной причиной появления различных режимов выполнения является безопасность. Если пользовательские процессы выполняются в менее привилегированном режиме, то они не могут случайно или специально повредить другой процесс или ядро системы. Ошибки в программе имеют локальный характер и обычно не влияют на выполнение других процессов.