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

More Related Content

What's hot

Lightweight Transactions at Lightning Speed
Lightweight Transactions at Lightning SpeedLightweight Transactions at Lightning Speed
Lightweight Transactions at Lightning Speed
ScyllaDB
 
Practical Malware Analysis: Ch 10: Kernel Debugging with WinDbg
Practical Malware Analysis: Ch 10: Kernel Debugging with WinDbgPractical Malware Analysis: Ch 10: Kernel Debugging with WinDbg
Practical Malware Analysis: Ch 10: Kernel Debugging with WinDbg
Sam Bowne
 
4 Mapping the Application
4 Mapping the Application4 Mapping the Application
4 Mapping the Application
Sam Bowne
 
Apache Pulsar First Overview
Apache PulsarFirst OverviewApache PulsarFirst Overview
Apache Pulsar First Overview
Ricardo Paiva
 
Introduction to agile and scrum
Introduction to agile and scrumIntroduction to agile and scrum
Introduction to agile and scrum
Anat (Alon) Salhov
 
How Criteo is managing one of the largest Kafka Infrastructure in Europe
How Criteo is managing one of the largest Kafka Infrastructure in EuropeHow Criteo is managing one of the largest Kafka Infrastructure in Europe
How Criteo is managing one of the largest Kafka Infrastructure in Europe
Ricardo Paiva
 
Password Attack
Password AttackPassword Attack
Password Attack
Aliaqa Hosainy
 
[cb22] Understanding the Chinese underground card shop ecosystem and becoming...
[cb22] Understanding the Chinese underground card shop ecosystem and becoming...[cb22] Understanding the Chinese underground card shop ecosystem and becoming...
[cb22] Understanding the Chinese underground card shop ecosystem and becoming...
CODE BLUE
 
Ch 10: Attacking Back-End Components
Ch 10: Attacking Back-End ComponentsCh 10: Attacking Back-End Components
Ch 10: Attacking Back-End Components
Sam Bowne
 
Apache Ratis - In Search of a Usable Raft Library
Apache Ratis - In Search of a Usable Raft LibraryApache Ratis - In Search of a Usable Raft Library
Apache Ratis - In Search of a Usable Raft Library
Tsz-Wo (Nicholas) Sze
 
Traffic types in internet
Traffic types in internetTraffic types in internet
Traffic types in internet
Srinivas Dabbeeru
 
Ch 12 Attacking Users - XSS
Ch 12 Attacking Users - XSSCh 12 Attacking Users - XSS
Ch 12 Attacking Users - XSS
Sam Bowne
 
Building Microservices with gRPC and NATS
Building Microservices with gRPC and NATSBuilding Microservices with gRPC and NATS
Building Microservices with gRPC and NATS
Shiju Varghese
 
Injection on Steroids: Codeless code injection and 0-day techniques
Injection on Steroids: Codeless code injection and 0-day techniquesInjection on Steroids: Codeless code injection and 0-day techniques
Injection on Steroids: Codeless code injection and 0-day techniques
enSilo
 
Automating Web Application Security Testing With OWASP ZAP DOT NET API - Tech...
Automating Web Application Security Testing With OWASP ZAP DOT NET API - Tech...Automating Web Application Security Testing With OWASP ZAP DOT NET API - Tech...
Automating Web Application Security Testing With OWASP ZAP DOT NET API - Tech...
gmaran23
 
MacOS memory allocator (libmalloc) Exploitation
MacOS memory allocator (libmalloc) ExploitationMacOS memory allocator (libmalloc) Exploitation
MacOS memory allocator (libmalloc) Exploitation
Angel Boy
 
Performance Monitoring: Understanding Your Scylla Cluster
Performance Monitoring: Understanding Your Scylla ClusterPerformance Monitoring: Understanding Your Scylla Cluster
Performance Monitoring: Understanding Your Scylla Cluster
ScyllaDB
 
[若渴]Study on Side Channel Attacks and Countermeasures
[若渴]Study on Side Channel Attacks and Countermeasures [若渴]Study on Side Channel Attacks and Countermeasures
[若渴]Study on Side Channel Attacks and Countermeasures
Aj MaChInE
 
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
Performance Tuning -  Memory leaks, Thread deadlocks, JDK toolsPerformance Tuning -  Memory leaks, Thread deadlocks, JDK tools
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
Haribabu Nandyal Padmanaban
 
CNIT 152: 1 Real-World Incidents
CNIT 152: 1 Real-World IncidentsCNIT 152: 1 Real-World Incidents
CNIT 152: 1 Real-World Incidents
Sam Bowne
 

What's hot (20)

Lightweight Transactions at Lightning Speed
Lightweight Transactions at Lightning SpeedLightweight Transactions at Lightning Speed
Lightweight Transactions at Lightning Speed
 
Practical Malware Analysis: Ch 10: Kernel Debugging with WinDbg
Practical Malware Analysis: Ch 10: Kernel Debugging with WinDbgPractical Malware Analysis: Ch 10: Kernel Debugging with WinDbg
Practical Malware Analysis: Ch 10: Kernel Debugging with WinDbg
 
4 Mapping the Application
4 Mapping the Application4 Mapping the Application
4 Mapping the Application
 
Apache Pulsar First Overview
Apache PulsarFirst OverviewApache PulsarFirst Overview
Apache Pulsar First Overview
 
Introduction to agile and scrum
Introduction to agile and scrumIntroduction to agile and scrum
Introduction to agile and scrum
 
How Criteo is managing one of the largest Kafka Infrastructure in Europe
How Criteo is managing one of the largest Kafka Infrastructure in EuropeHow Criteo is managing one of the largest Kafka Infrastructure in Europe
How Criteo is managing one of the largest Kafka Infrastructure in Europe
 
Password Attack
Password AttackPassword Attack
Password Attack
 
[cb22] Understanding the Chinese underground card shop ecosystem and becoming...
[cb22] Understanding the Chinese underground card shop ecosystem and becoming...[cb22] Understanding the Chinese underground card shop ecosystem and becoming...
[cb22] Understanding the Chinese underground card shop ecosystem and becoming...
 
Ch 10: Attacking Back-End Components
Ch 10: Attacking Back-End ComponentsCh 10: Attacking Back-End Components
Ch 10: Attacking Back-End Components
 
Apache Ratis - In Search of a Usable Raft Library
Apache Ratis - In Search of a Usable Raft LibraryApache Ratis - In Search of a Usable Raft Library
Apache Ratis - In Search of a Usable Raft Library
 
Traffic types in internet
Traffic types in internetTraffic types in internet
Traffic types in internet
 
Ch 12 Attacking Users - XSS
Ch 12 Attacking Users - XSSCh 12 Attacking Users - XSS
Ch 12 Attacking Users - XSS
 
Building Microservices with gRPC and NATS
Building Microservices with gRPC and NATSBuilding Microservices with gRPC and NATS
Building Microservices with gRPC and NATS
 
Injection on Steroids: Codeless code injection and 0-day techniques
Injection on Steroids: Codeless code injection and 0-day techniquesInjection on Steroids: Codeless code injection and 0-day techniques
Injection on Steroids: Codeless code injection and 0-day techniques
 
Automating Web Application Security Testing With OWASP ZAP DOT NET API - Tech...
Automating Web Application Security Testing With OWASP ZAP DOT NET API - Tech...Automating Web Application Security Testing With OWASP ZAP DOT NET API - Tech...
Automating Web Application Security Testing With OWASP ZAP DOT NET API - Tech...
 
MacOS memory allocator (libmalloc) Exploitation
MacOS memory allocator (libmalloc) ExploitationMacOS memory allocator (libmalloc) Exploitation
MacOS memory allocator (libmalloc) Exploitation
 
Performance Monitoring: Understanding Your Scylla Cluster
Performance Monitoring: Understanding Your Scylla ClusterPerformance Monitoring: Understanding Your Scylla Cluster
Performance Monitoring: Understanding Your Scylla Cluster
 
[若渴]Study on Side Channel Attacks and Countermeasures
[若渴]Study on Side Channel Attacks and Countermeasures [若渴]Study on Side Channel Attacks and Countermeasures
[若渴]Study on Side Channel Attacks and Countermeasures
 
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
Performance Tuning -  Memory leaks, Thread deadlocks, JDK toolsPerformance Tuning -  Memory leaks, Thread deadlocks, JDK tools
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
 
CNIT 152: 1 Real-World Incidents
CNIT 152: 1 Real-World IncidentsCNIT 152: 1 Real-World Incidents
CNIT 152: 1 Real-World Incidents
 

Similar to Операционные системы 2015, лекция № 4

лекция 2
лекция 2лекция 2
презентация 2
презентация 2презентация 2
презентация 2
Nikita Zablotskiy
 
Нурафшанский филлиал Ташкентского Университета Информационных Технологий имен...
Нурафшанский филлиал Ташкентского Университета Информационных Технологий имен...Нурафшанский филлиал Ташкентского Университета Информационных Технологий имен...
Нурафшанский филлиал Ташкентского Университета Информационных Технологий имен...
dieraseralieva321
 
Презентация 5
Презентация 5Презентация 5
Презентация 5
Nikita Zablotskiy
 
Операционные системы 2015, лекция № 1
Операционные системы 2015, лекция № 1Операционные системы 2015, лекция № 1
Операционные системы 2015, лекция № 1
Aleksey Bragin
 
Операционные системы 2015, лекция № 2
Операционные системы 2015, лекция № 2Операционные системы 2015, лекция № 2
Операционные системы 2015, лекция № 2
Aleksey Bragin
 
Операционные системы
Операционные системыОперационные системы
Операционные системыyaevents
 
6 кареев киров
6 кареев киров6 кареев киров
6 кареев кировqasib
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
Iosif Itkin
 
Процессы и потоки
Процессы и потокиПроцессы и потоки
Процессы и потоки
Evgeniy Mironov
 
Консервация процессов в домашних условиях
Консервация процессов в домашних условияхКонсервация процессов в домашних условиях
Консервация процессов в домашних условиях
OpenVZ
 
JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)Mikhail Davydov
 
Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015
OSLL
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестирования
SQALab
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
Nikolay Samokhvalov
 
Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора Yandex
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 

Similar to Операционные системы 2015, лекция № 4 (20)

лекция 2
лекция 2лекция 2
лекция 2
 
презентация 2
презентация 2презентация 2
презентация 2
 
Theme 07
Theme 07Theme 07
Theme 07
 
Нурафшанский филлиал Ташкентского Университета Информационных Технологий имен...
Нурафшанский филлиал Ташкентского Университета Информационных Технологий имен...Нурафшанский филлиал Ташкентского Университета Информационных Технологий имен...
Нурафшанский филлиал Ташкентского Университета Информационных Технологий имен...
 
Презентация 5
Презентация 5Презентация 5
Презентация 5
 
Операционные системы 2015, лекция № 1
Операционные системы 2015, лекция № 1Операционные системы 2015, лекция № 1
Операционные системы 2015, лекция № 1
 
Операционные системы 2015, лекция № 2
Операционные системы 2015, лекция № 2Операционные системы 2015, лекция № 2
Операционные системы 2015, лекция № 2
 
Операционные системы
Операционные системыОперационные системы
Операционные системы
 
Linux Kernel Processes
Linux Kernel ProcessesLinux Kernel Processes
Linux Kernel Processes
 
Dev collaboration
Dev collaborationDev collaboration
Dev collaboration
 
6 кареев киров
6 кареев киров6 кареев киров
6 кареев киров
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
Процессы и потоки
Процессы и потокиПроцессы и потоки
Процессы и потоки
 
Консервация процессов в домашних условиях
Консервация процессов в домашних условияхКонсервация процессов в домашних условиях
Консервация процессов в домашних условиях
 
JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)
 
Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестирования
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 

Операционные системы 2015, лекция № 4

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