Similar presentations:
Архитектура операционных систем. Процессы и потоки
1. Архитектура операционных систем 3. Процессы и потоки
2. Процесс
• Определения:– Это программа в состоянии выполнения
– Объект, выполняемый на процессоре
• Процессы – фундаментальное понятие в ОС
– Как исполняемый объект, процесс позволяет
параллельное выполнение нескольких программ в
системе (ЦП переключается между процессами)
– Всё ПО, работающее на компьютере, включая саму
ОС, организовано в виде множества процессов
2
3. Процесс 2
• Процесс состоит из трех основных компонент– Исполняемого программного кода
– Ассоциированных с ним данных, необходимых для
выполнения этой программы
– Контекста (информация, необходимая ОС для
управления процессом)
• № процесса
• Регистры ЦП
• Содержимое стэка
• Контекст – основа для переключения процессов
• ОС ведёт список всех процессов, находящихся в
системе
3
4. Образ процесса
• Это выделенное место в памяти• Каждый процесс выполняется в
собственном виртуальном адресном
пространстве, которое состоит из:
макс.
стэк
– Сегмента стэка: используется для
вызовов функций и системных вызовов
– Сегмента данных: переменные,
статические и динамические
выделяемые из кучи
– Сегмент кода: код программы, обычно
доступ в режиме только для чтения
Сегмент стэка
Сегмент данны
куча
• Запуск одной и той же программы
несколько раз – порождает новые
процессы, у каждого из которых своё
виртуальное адресное пространство и
окружение
данные
код программы
0
Сегмент кода
4
5. Структуры управления процессом
• Таблица процессов. Одна запись на каждыйпроцесс
• Блок управления процессом: Process Control
Block (PCB)
– Описывает свой процесс и его текущее
состояние
• Образ процесса (Process Image)
– Память, выделенная для процесса
5
6. Process Control Block
• Содержит всю информацию, необходимую дляприостановки и последующего возобновления процесса
– Идентификатор процеса
• № процесса, информация о пользователе, …
– Состояние процессора
• Регистры, указатели стэка, и т.д.
– Состояние процесса
Информация для планировщика: приоритет, …
Привилегии: доступ к памяти, допустимые инструкции
Информация о виртуальной памяти, присвоенной процессу
Статистика и ограничения (ограничения по времени выполнения,
статистика о затраченном процессорном времени)
• Ввод/вывод: владение ресурсами, открытые файлы, выделенные
устройства
6
7. Диспетчеризация
• «Диспетчер» отправляет процессы навыполнение: выделяет время ЦП, переключает
ЦП с одного процесса на другой
• В любой момент времени, процесс может
находится в каком-либо состоянии
–
–
–
–
–
Ожидания ввода/вывода
Выполнения
Готовности к выполнению
Выгруженном
…
7
8. Модель состояний процесса 1
• Можно выделить три основных состояния– Выполнения (исполняется на ЦП)
– Готовности (временно остановлен)
– Блокировки (ожидает внешнего события)
Ожидание события
Выполнение
1.
2.
Диспетчеризация
Таймаут
Блокировка
3.
4.
Готовность
1. Процесс заблокирован для В/В
2. Диспетчер планирует другой
процесс
3. Диспетчер планирует этот
процесс
4. В/В произошёл, процесс
возобновляет выполнение
Событие произошло
8
9. Модель состояний процесса 2
ДиспетчеризацияНовый
Принят
Завершение
Готов
Выполняется
Завершен
Таймаут
Событие произошло
Ожидание события
Заблокирован
• Модель из пяти состояний
– Новый: процесс создан, но ещё не помещён операционной системой в
пул выполняемых процессов. Создан PCB, но процесс ещё не в памяти
– Готовность: процесс полностью готов для выполнения
– Выполнение: процесс исполняется
– Блокировка: процесс ожидает внешнего события (В/В, и т.п.)
– Завершен: процесс удаляется из пула выполняемых процессов (он
закончил работу)
9
10. Планирование процессов
• В ОС есть различные очереди (или списки)для планирования процессов
– Очередь задач: множество всех процессов в
системе
– Очередь готовых: множество всех процессов,
готовых для выполнения
– Очередь ожидающих: множество всех
заблокированных процессов
• Процессы перемещаются между этими
очередями
10
11. Управление процессами
Используется одна очередь «готовых» и одна очередь «заблокированных»
Недостатки:
– При наступлении события, все ожидающие этого события процессы нужно переместить
из «заблокированных» в очередь «готовых»
– ОС нужно просмотреть все заблокированные процессы в очереди, чтобы выбрать
правильный
Решение: Использовать несколько очередей «заблокированных» процессов
Поступление
Произошло
событие
Очередь «готовых»
Диспетчинг
Освобождение
ЦП
Таймаут
Очередь «заблокированных»
Ожидание события
11
12. Создание процесса
• Загрузка системы– При инициализации системы создаются несколько процессов
– В Unix, это процессы «демоны» sched (pid 0), init (pid 1), и другие более
высокоуровневые (веб-сервер, емейл-сервер и т.п.). Ядро – не процесс!
– В NT, ядро - это системный процесс System (pid 4), далее загружаются
система управления подсистемами smss.exe и т.д.
• Текущий процесс порождает дочерний процесс
– Напр. веб-сервер может порождать дочерний процесс для каждого
нового запроса. Ужас! :)
– В UNIX процесс init ожидает авторизации пользователя для того, чтобы
запустить оболочку (новый процесс)
• Пользователь создаёт новый процесс
– Пользователь вызывает команду из текстовой оболочки, или запускает
новую программу через графическую оболочку. Это создаёт новый
процесс, родитель которого – оболочка.
12
13. Создание процесса 2
• Присвоить уникальный идентификаторновому процессу
• Выделить место для процесса
– Программа, данные, стэк
• Инициализировать PCB
• Добавить процесс в очередь «готовых» к
выполнению
13
14. Иерархия процессов (UNIX)
• Строгая иерархия между процессами:дочерний и родительский процессы всегда
взаимосвязаны
• Группы процессов
• Напр. интерпретатор командной строки (shell)
является родительским для всех процессов,
которые пользователь запускает из командной
строки
– Если пользователь посылает сигнал (напр. SIGKILL)
группе процессов, то сигнал доставляется каждому
процессу из группы
14
15. Иерархия процессов (Windows)
• Её нет. Все равны.• Хэндл процесса: когда новый процесс
создаётся родительским, то родитель
получает хэндл дочернего процесса. Т.о.
может им управлять.
• Этот хэндл можно передавать другим
процессом (в отличие от Unix, где
родительский процесс не может менять
множество дочерних процессов)
15
16. Создание процесса (UNIX)
• Процессы создаются через fork() / exec()– fork() создаёт точный клон вызывающего процесса, т.н.
«дочерний» процесс
– exec() заменяет образ процесса этого клона новой
программой, которая должна быть выполнена
– Поэтому всегда есть иерархия
• После создания у родительского и дочернего процессов
собственные, разные адресные пространства.
Некоторые ресурсы могут быть общими (напр.
открытые файлы)
• Поэтому системный вызов fork() «возвращается
дважды»
– Один раз в родительский процесс, и один раз во вновь
созданный
16
17. Создание процесса (UNIX) 2
РодительскийPCB
Похожие, но не копия
Адресное
пространство
родителя
(код,
статические
данные, куча,
стэк)
идентичная
копия
(единственно
е исключение
– аргумент
PID на
вершине
стэка)
Дочерний
PCB
Адресное
пространство
дочернего
процесса
(код,
статические
данные, куча,
стэк)
17
18. Создание процесса (UNIX) 3
• Как же создать новую программу, а не ещёодну копию старой?
• «Легко». Вначале fork(), потом exec().
• exec() не создаёт нового процесса, а заменяет
данные текущего процеса новыми данными
• У такой модели есть недостатки:
– fork() очень медленный (нужно создать полную
копию всего)
– Решения в виде vfork(), copy-on-write, и т.п.
18
19. Что в Linux?
• clone() заменяет fork() (и vfork() тоже). У clone()есть дополнительные опции.
• Но всё-равно нужно чётко понимать, как
работает fork()
• В Linux exec() не является системным вызовом.
• execve() – единственный системный вызов,
аналогичный по функционалу exec()
• Всё-равно нужно чётко понимать, как работает
exec()
19
20. Создание процесса (NT)
• Процессы создаются через системныйвызов NtCreateProcess().
20
21. Переключение между процессами
• При необходимости переключиться на другойпроцесс, ОС выполняет «переключение
контекста»
– Состояние старого процесса сохраняется в его PCB
– Состояние нового процесса восстанавливается из
его PCB
• Время затраченное на переключение
контекста – накладные расходы ОС
• Зависит от аппаратной реализации
21
22. Переключение контекста
• События, вызывающие переключениеконтекста:
• Прерывания
• Исключения
• Системные вызовы
22
23. Потоки (нити)
• Процесс состоит как минимум из:– Адресного пространства
• Набор инструкций (код) программы
• Данные для программы
– Состояния потока выполнения
• Счётчик команд (регистр IP)
• Указатель стэка SP
• Другие регистры
– Множества ресурсов ОС
• Открытые файлы, сетевые соединения, …
• И всё это в одном понятии процесса. Не есть
хорошо.
• Разделим соответственно на 3 области
23
24. Потоки, зачем они нужны
• Потоки – для параллелизма и одновременности.• Параллелизм – это физически одновременное выполнение для
достижения наибольшей производительности.
• Одновременность – логическое и/или физическое
одновременное выполнение. Далее «параллелизм».
• Один из вариантов достижения параллелизма –
использование множества процессов
– Программы в разных процессах изолированы друг от друга
• Потоки – другой способ достичь параллелизма
– Потоки работают внутри одного процесса, все потоки
процесса имеют одно адресное пространство, и те же
ресурсы ОС
– У потоков есть свой стэк и своё состояние ЦП
24
25. Параллелизм
• Возьмём пример про веб-сервер со слайда 12,который должен обслуживать несколько запросов
параллельно
– Ожидая данных по запросу клиента из базы данных,
сервер мог бы загрузить данные с диска для другого
клиента, и обработать запрос третьего клиента
• Или, веб-браузер
– В момент обращения к веб-страничке, он мог бы
параллельно загружать данные из различных
источников
• Некая вычислительная программа, использующая
физический параллелизм
• Нужно обработать большой массив данных
25
26. Параллелизм 2
• В каждом из этих примеров параллелизма естьобщее:
–
–
–
–
Один код
Доступ к одним данным
Один уровень доступа
Одно множество ресурсов
• Но есть разное:
– Стэк и указатель на стэк SP
– Счётчик инструкций (регистр IP), указывающий на
следующую инструкцию
– Множество регистров ЦП
26
27. Параллелизм 3
• Как этого достичь?• Используя знания о процессах, можно
– fork-нуть несколько процессов
– Заставить каждый из них отображать своё
виртуальное адресное пространство на одну и ту
же физическую память
• Неэффективно!
– Затраты на PCB, таблицы страниц, создание
операционной системой структур данных,
копирование адресного пространства, и т.д.
27
28. Решение – потоки!
• Основная мысль– отделить понятие процесса (адресного
пространства, ресурсов ОС) от
– Минимальной нити, потока управления (т.е.
состояния выполнения – стэка, регистров ЦП)
• Иногда такое состояние выполнения
называют «лёгким процессом» или
потоком
28
29. Потоки и процессы
• Большинство современных ОС поддерживает дваобъекта:
– Процесс, который определяет адресное пространство и
общие атрибуты процесса
– Поток, который определяет последовательный поток
выполнения в рамках процесса
• Поток привязывается к одному процессу (адресному
пространству)
– Но может быть много потоков в одном адресном
пространстве
– Лёгкий доступ к общим данным
– Создание потоков занимает очень мало времени
• Потоки стали единицей планирования
• Процессы – всего-лишь контейнер, в котором
выполняются потоки
29
30. Потоки и процессы 2
• Многопоточность полезна для:– Обработки одновременных событий
– Построения параллельных программ
• Поддержка многопоточности – разделение
понятия процесса от минимального потока
управления
– Для параллельного выполнения не нужно
создавать новые процессы
– Быстрее, меньше требования к памяти
30
31. Потоки и процессы 3
• Раньше: «процесс» = адресноепространство + ресурсы ОС +
подразумевался единственный поток
• Теперь: «процесс» = адресное пространство
+ ресурсы ОС + все потоки процесса
31
32. Потоки режима ядра и пользователя
• На уровне ядра– Есть функция ядра для создания нового потока
• Выделяет стэк выполнения внутри адресного
пространства процесса
• Создаёт и инициализирует Thread Control Block
(указатель стэка и другие регистры ЦП)
– Каждый поток идентифицируется своим номером
(TID, по аналогии с PID)
• На уровне пользователя
– Есть возможность управлять потоками из
библиотеки режима пользователя
32
33. Потоки режима пользователя
• Библиотека pthreads– Каждый поток представляется регистром PC,
остальными регистрами ЦП, стэком и
небольшим блоком TCB
– Создание потока, переключение между
потоками и синхронизация потоков
выполняется вообще без участия ядра!
– Потоки уровня пользователя могут быть в 10100 раз быстрее, чем потоки режима ядра
33
34. Сравнение производительности
• По данным Gribble, Lazowska, Levy, Zahorjanиз Университета им. Вашингтона:
– Создание потока режима ядра
pthread_create()/pthread_join() в 2.5 раза
быстрее создания нового процесса fork/exit.
– Создание потока режима пользователя в 20 раз
быстрее создания потока режима ядра
• В тестах использовалось ядро Linux
34
35. Обобщение
• Множество потоков в одном адресномпространстве – это хорошо.
• Потоки режима ядра намного эффективнее
процессов, но есть потери на системные вызовы
• Потоки режима пользователя имеют преимущества
и недостатки
– Высокая скорость и «дешевизна» создания
– Могут быть проблемы с вводом/выводом и
блокировками, из-за того, что ядро «не знает» об этих
потоках
• Возможно решить проблемы на уровне
планировщика
35