- •Тема 1. Операционные системы
- •Тема 2. История ос
- •0.Аналитическая машина Чарльза Бэббиджа
- •Тема 3. Архитектура ос
- •Тема 4. Процессы и потоки
- •Тема 5. Обработка прерываний
- •Тема 6. Управление процессами и потоками
- •Тема 10.Взаимоблокировки
- •Тема 11.Управление памятью
- •Тема 12.Виртуальная память
- •Тема 13. Стратегии замещения виртуальной памяти
- •Тема 13.Файловые системы
- •Тема 14. Реализация некоторых подсистем ос Windows
- •Ipc (обмен)
- •Ipc (синхронизация)
- •Тема 15. Реализация некоторых подсистем ос Linux
- •Тема 7. Межпроцессное взаимодействие (Inter-Process Communication, ipc)
- •6.2) Аппаратная поддержка (xchg)
- •Тема 8. Примитивы межпроцессного взаимодействия
- •1) Семафоры
- •2) Мьютексы (mutex)
- •3) Мониторы
- •4) Очереди сообщений
- •5) Барьеры
- •Тема 9. Классические проблемы межпроцессного взаимодействия
Тема 15. Реализация некоторых подсистем ос Linux
Модель работы
Основная сущность — процесс
Один процесс — одна программа
Порождение нового процесса — fork():
Создание копии вызывающего процесса (!)
Модификация PCB
Возврат управления в процессы
API работы с процессами
fork()
waitpid()
execl(), execv(), execle(), execve()
exit()
kill()
Фоновый процесс — демон (daemon)
Закрыть STDIN, STDOUT, STDERR
Сбросить обработчики и маску сигналов
Вызвать fork() (дочерний процесс №1)
Отключиться от терминала (setsid())
Ещё раз вызвать fork()
Завершить дочерний процесс №1
Подключить STDIN, STDOUT, STDERR к /dev/null
Сменить umask на 0
Сменить рабочий каталог на /
Записать PID в файл
Понизить привилегии
Уведомить бывший родительский процесс об успешном запуске
Завершить родительский процесс
Представление процессов в ядре
Любой процесс или поток — task
Все задачи объединены в двусвязный список структур task_struct
Потоки в Linux
clone(function, stack_ptr, sharing_flags, arg)
Linux-специфичный вызов
Новый поток получает PID родителя
Для различения потоков и процессов используется TID (Task ID)
Планирование
3 класса потоков:
Реального времени невытесняемые — FIFO
Реального времени вытесняемые — RR
Разделения времени
Приоритеты реального времени от 0 до 99
Приоритеты разделения времени от 100 до 140
Приоритет — nice (-20 — +19)
Больше приоритет — больше квант (800/5)
Динамический приоритет от -5 до +5 на основе эвристики
По очереди выполнения на каждый процессор системы
Поддерживается CPU affinity
Скорость планировщика — О(1)
IPC в Linux
Сигналы
Неименованные каналы:
popen(), pclose()
pipe()
dup2()
Именованные каналы:
mkfifo() / mknod()
Семафоры:
semget()
semop()
semctl()
Разделяемая память:
shmat()
shmdt()
shmctl()
Очереди сообщений:
msgget()
msgsnd(), msgrcv()
msgctl()
Сокеты (UNIX — AF_UNIX, Berkeley — AF_INET):
socket(), socketpair()
setsockopt(), getsockopt()
send(), recv()
sendmsg(), recvmsg(), cmsg()
Алгоритмы планирования
1) FCFS
2) SJF
3) SRT
4) RR
5) HRRN
6) Приоритетное планирование
7) Гарантированное планирование
8) Лотерейное планирование
9) Справедливое планирование
1) First Come First Served / FIFO
Задания выполняются в порядке их поступления в систему
+ Простота
+ Минимальные накладные расходы
2) Shortest Job First
Очередь строится на основе ожидаемого времени выполнения задания
(na+(n-1)b+(n-2)c+...)/n
+ Оптимальность в случае одновременного поступления заданий
- Необходимость вычисления длины задания
3) Shortest Remaining Time
Очередь строится на основе оставшегося до завершения задачи времени
+ Решение проблемы SJF с неодновременным поступлением процессов
- Необходимость регистрации времени работы процесса
- Увеличение накладных расходов
- Проблема «голодания»
4) Round Robin
FCFS с циклической очередью
Каждому процессу выделяется квант времени на работу
+ Оптимальность в системах разделения времени
- Проблема выбора кванта
5) Highest Response Ratio Next
Очередь строится на основе времени ожидания в очереди и ожидаемого времени выполнения
+ Баланс между быстрыми процессами и ожидающими долгими процессами
+ Нет проблемы «голодания»
- Высокие накладные расходы
Приоритет
Приоритет — искусственный коэффициент, влияющий на место процесса в очереди
Виды приоритетов:
Статические
Динамические
6) Приоритетное планирование
Несколько очередей
В каждой очереди находятся процессы одного приоритета
Проблема «голодания»
Схема снижения приоритета
7) Гарантированное планирование
Процессорное время гарантированно распределяется между процессами заранее известным образом
Требуется учёт использованного процессорного времени
Критерий построения очереди — соотношение потраченного и обещанного процессорного времени
8) Лотерейное планирование
Каждому процессу выдаётся один или несколько билетов, повышающих шанс процесса быть выполненным в следующий квант
Обмен билетами
+Позволяет приблизиться к достижению нужного разделения процессорного времени
9) Справедливое планирование
Учитывается пользователь, запустивший процесс, и количество процессов, запущенных этим пользователем
Планирование потоков
Потоки в пространстве пользователя
Время выполнения потока больше кванта
Время выполнения потока меньше кванта
Потоки в пространстве ядра
Задачи ядра
Обработка прерываний
Управление процессами и потоками
Обеспечение межпроцессного взаимодействия
Управление памятью
Управление вводом-выводом
Обеспечение защиты