1.17k likes | 1.48k Views
Нижегородский государственный университет им. Н.И.Лобачевского. Факультет Вычислительной математики и кибернетики. Операционные системы: аспекты параллелизма. Процессы и потоки. Планирование. Синхронизация. Линёв А.В. 201 2 Нижний Новгород. Тема обсуждения. Программисты создают программы
E N D
Нижегородский государственный университет им. Н.И.Лобачевского Факультет Вычислительной математики и кибернетики Операционные системы:аспекты параллелизма Процессы и потоки. Планирование.Синхронизация. Линёв А.В. 2012 Нижний Новгород
Тема обсуждения • Программисты создают программы • Пользователи запускают программы на исполнение • Что представляет собой объект исполнения в ОС? Операционные системы: аспекты параллелизма
Объект исполнения • Объект, представляющий прикладную программу в состоянии выполнения, включает • Адресное пространство, выделенное для выполнения программы • Код выполняющейся программы • Данные выполняющейся программы • Стек и указатель на его вершину (stack pointer, SP) • Выделенные ресурсы ОС (открытые файлы, установленные сетевые соединения и т.д.) • Программный счетчик (instruction pointer, IP), указывающий на следующую выполняемую инструкцию • Текущие значения регистров общего назначения • Объект исполнения представлен двумя понятиями: процесс и поток Операционные системы: аспекты параллелизма
Процесс • Процесс - абстракция, представляющая программу во время ее выполнения • Процессу ОС выделяет ресурсы, необходимые для выполнения программы, например: • адресное пространство процесса содержит его программный код, данные и стек (или стеки) • файлы используются процессом для чтения входных данных и записи выходных • устройства ввода-вывода используются в соответствии с их назначением • Процесс – пассивный объект – владелец ресурсов, контейнер для выполнения потоков Операционные системы: аспекты параллелизма
Поток / нить (thread) • Поток - абстракция, представляющая последовательное выполнение команд программы, развертывающееся во времени • Процесс может иметь несколько потоков • потоки совместно используют • глобальные и статические переменные (располагаются в регионе данных) • динамически распределяемую память (кучу) • системные ресурсы, выделенные процессу • каждый поток имеет свои собственные • программный счетчик (IP) • значения регистров • локальные переменные (т.е. свой собственный стек) • Процесс - совокупность взаимодействующих потоков и выделенных ему ресурсов Операционные системы: аспекты параллелизма
Процесс с одним потоком виртуальное адресное пространство (ВАП) процесса MAX Стек SP пространствоадресов Куча Регион данных IP Регион кода MIN Операционные системы: аспекты параллелизма
Процесс с несколькими потоками виртуальное адресное пространство (ВАП) процесса MAX Стек потока 1 SP потока 1 Стек потока 2 SP потока 2 Стек потока 3 SP потока 3 пространствоадресов Куча Регион данных IP потока 1 Регион кода IP потока 2 IP потока 3 MIN Операционные системы: аспекты параллелизма
Зачем нужны процессы с несколькими потоками? • Для параллельной обработки нескольких однотипных запросов (сетевые сервисы) • Для разделения исполнительных активностей, параллельно решающих различные задачи • обеспечение пользовательского интерфейса • математические вычисления • фоновая печать • … • Для создания параллельных программ, эффективно использующих аппаратные ресурсы (например, несколько аппаратно имеющихся ЦП) • Для улучшения структуры программы Операционные системы: аспекты параллелизма
Многопоточная программа vs. Взаимодействующие процессы • При использовании потоков • экономятся ресурсы (все потоки одного процесса пользуются одним набором ресурсов) • экономится время (операции создания/уничтожения потока намного менее затратны, чем операции создания/уничтожения процесса) • взаимодействие между потоками одного процесса более удобно и эффективно по причине использования общей памяти Операционные системы: аспекты параллелизма
Процессы и потоки Процесс MS-DOS UNIXbydesign Процесс Процесс один потокв процессе Поток Поток Поток Процесс Java WinNT,Linux, Mach, … Процесс Процесс несколькопотоковв процессе Поток Поток Поток Поток Поток Поток Поток один процесс несколько процессов Операционные системы: аспекты параллелизма
Состояния потока в многозадачной ОС… Создание 1 Готов к выполнению 2 5 3 Выполнение Ожидание 4 6 Завершение Операционные системы: аспекты параллелизма
Состояния потока в многозадачной ОС… • Выполнение – состояние работающего потока – обладающего всеми необходимыми ресурсами, в том числе возможностью использования ЦП • Готов к выполнению – поток обладает всеми необходимыми для выполнения ресурсами за исключением ресурса "время ЦП" • Ожидание (сон, блокировка) – выполнение потока заблокировано до наступления некоторого внешнего события (например, поступления входных данных или освобождения ресурса) Операционные системы: аспекты параллелизма
Состояния потока в многозадачной ОС С 1 ГВ 2 5 3 4 • (2,3) - осуществляются ядромоперационной системы(планировщиком) • (4) - продолжение работы невозможно • для продолжения работы требуется наступление какого-либо события • поток затребовал недоступный в данный момент ресурс • поток переводится в состояние ожидания ядром операционной системы во время обработки системного вызова • поток заблокирован внешним по отношению к нему вызовом • (5) - производится ядром ОС в момент выполнения условия ожидания В О 6 З Операционные системы: аспекты параллелизма
Init (0) Standby (3) preempt Transition (6) Terminate (4) wait resolved after kernel stack made pageable Thread Scheduling States (2000,XP) preemption, quantum end Ready (1) Running (2) voluntary switch Waiting (5) Ready = thread eligible to be scheduled to run Standby = thread is selected to run on CPU Windows Operating System Internals - by David A. Solomon and Mark E. Russinovich with Andreas Polze Операционные системы: аспекты параллелизма
Управление процессами/потоками • Структуры, описывающие процессы и потоки в ядре ОС • Операции над процессами и потоками • Распределение ресурсов между процессами/потоками • время центрального процессора (выделяется потокам) • оперативная память (выделяется процессам) • другие ресурсы (как правило, выделяются процессам) • Интерфейс прикладных программ (частные реализации) Операционные системы: аспекты параллелизма
Контекст процесса • Контекст – множество информации, полностью описывающее состояние объекта (в частности, достаточное для восстановления объекта в случае его удаления) • Контекст процесса включает • Множество информации, используемое операционной системой для управления ресурсом типа «процесс» • Адресное пространство процесса • Структуру и содержимое пользовательской части адресного пространства процесса • Множество ресурсов, используемых процессом или принадлежащих процессу, и их состояния Операционные системы: аспекты параллелизма
Контекст потока • Контекст потока включает • Множество информации, используемое операционной системой для управления ресурсом типа «поток» • Множество ресурсов, используемых потоком или принадлежащих потоку и их состояния • Аппаратный контекст исполнения потока Операционные системы: аспекты параллелизма
Аппаратный контекст потока • Состояние процессора с точки зрения предоставляемых потоку прав его использования в конкретной ОС (обычно представляется множеством доступным потоку регистров процессора и их текущими значениями) • Состояние других устройств в случае, если управление ими осуществляется непосредственно на уровне команд программы, а не через интерфейс доступа к устройствам через выполнение системных вызовов ОС Операционные системы: аспекты параллелизма
Переключение контекста • Переключение контекста происходит при переходе к исполнению другого потока (возможно, другого процесса) • При переключении контекста необходимо • сохранить контекст вытесняемого потока • если поток, выбранный на исполнение, принадлежит другому процессу • сохранить контекст процесса – владельца вытесняемого потока • загрузить контекст процесса – владельца потока, выбранного на исполнение • загрузить контекст потока, выбранного на исполнение • Для описания процессов и потоков (в том числе для хранения их контекстов) в ядре ОС вводятся специальные структуры – дескрипторы процесса и потока Операционные системы: аспекты параллелизма
Дескриптор процесса • Идентификатор процесса • Групповые параметры процесса • Параметры, используемые в процессе определения приоритета процесса при конкуренции за какой-либо ресурс • Состояние процесса • Статистические данные • Описание адресного пространства процесса • Контекст ввода-вывода • Контекст безопасности • Текущие системные параметры выполнения • Код завершения процесса В Linux дескриптор процесса – структура task_struct (include/linux/sched.h), содержит около 100 полей! Операционные системы: аспекты параллелизма
Дескриптор потока • Идентификатор потока • Идентификатор процесса – владельца потока • Параметры, используемые в процессе определения приоритета потока при конкуренции за какой-либо ресурс • Статистические данные потока • Аппаратный контекст выполнения потока (программный счетчик, стек и указатель на его вершину, значения регистров) • Код завершения потока Операционные системы: аспекты параллелизма
Кто управляетпроцессами и потоками? • За управление процессами всегда отвечает ядро ОС • Ядро всегда предоставляет каждому процессу один поток, но не всегда поддерживает многопоточность • потоки, непосредственно управляемые ядром ОС, называются потоками ядра • Можно реализовать многопоточность в библиотеке пользовательского уровня! Операционные системы: аспекты параллелизма
Потоки ядра vs.пользовательские потоки… Операционные системы: аспекты параллелизма
Потоки ядра vs.пользовательские потоки • При использовании пользовательских потоков • (+) Операции над потоками выполняются без выполнения системных вызовов (в 10-100 раз быстрее, чем при использовании потоков ядра) • (+) Можно реализовать собственный алгоритм планирования • (-) Ядро ничего не знает о потоках пользовательского уровня и распределяет время ЦП независимо от их количества в процессе • (-) Если будет выполнен блокирующий системный вызов (например, вызвана синхронная операция ввода-вывода), в состояние ожидания переводится поток ядра, использовавшийся для обеспечения выполнения нескольких (или всех) пользовательских потоков. Соответственно, выполнение всех этих пользовательских потоков будет заблокировано. Операционные системы: аспекты параллелизма
Операции надпроцессами и потоками
Создание процесса • Создать дескриптор процесса и поместить его в таблицу процессов • Проинициализировать значения полей общего назначения дескриптора процесса • Создать виртуальное адресное пространство (ВАП) процесса и сформировать его структуру • Заполнить необходимыми данными ВАП процесса (разместить в нем код, данные и т.д.) • Выделить процессу ресурсы, которые он может использовать сразу после создания • Оповестить подсистемы, принимающие участие в управлении процессами, о создании нового процесса • Создать первичный поток процесса Операционные системы: аспекты параллелизма
Создание процесса Таблица дескрипторов процессов Ядро Таблица дескрипторов потоков 1. Создание дескриптора процесса 2. Создание ВАП процесса 3. Формирование структуры ВАПпроцесса и его заполнение 4. Выделение ресурсов по умолчанию Куча Создание первичного потока Регион данных Регион кода Операционные системы: аспекты параллелизма
Создание потока • Создать дескриптор потока и поместить его в таблицу потоков • Проинициализировать значения полей общего назначения дескриптора потока • Создать области данных, необходимые для функционирования потока в данной аппаратной архитектуре • Инициализировать поле дескриптора «аппаратный контекст выполнения потока» • Оповестить подсистемы, принимающие участие в управлении потоками, о создании нового потока • Перевести поток в состояние «готов к выполнению» Операционные системы: аспекты параллелизма
Создание потока Таблица дескрипторов процессов Ядро Таблица дескрипторов потоков Стек SP IP значения регистров 1. Создание дескрипторапотока 2. Создание стека Куча 3. Инициализацияаппаратногоконтекста Регион данных состояние = "готов к выполнению" Регион кода 4. Установкасостояния потока Операционные системы: аспекты параллелизма
Завершение потока • Сохранить статистические данные потока и код возврата в его дескрипторе • Перевести все ресурсы, принадлежащие потоку, в непротиворечивое и стабильное состояние • Освободить все ресурсы, принадлежавшие потоку или использовавшиеся потоком • Оповестить подсистемы, принимающие участие в управлении потоками, о завершении потока • Установить состояние потока в значение «завершен» • Если данный поток является последним активным потоком в процессе – завершить процесс После выполнения всех действий остается дескриптор потока, содержащий его код возврата и статистические данные; момент уничтожения дескриптора зависит от реализации Операционные системы: аспекты параллелизма
Завершение процесса • Завершить выполнение всех потоков процесса • Сохранить статистические данные процесса и код возврата в его дескрипторе • Перевести все ресурсы, принадлежащие процессу, в непротиворечивое и стабильное состояние • Освободить все ресурсы, принадлежавшие процессу или использовавшиеся процессом • Освободить ВАП и уничтожить его • Оповестить подсистемы, принимающие участие в управлении процессами, о завершении процесса • Установить состояние процесса в значение «завершен» После выполнения всех действий остается дескриптор процесса, содержащий его код возврата и статистические данные; момент уничтожения дескриптора зависит от реализации Операционные системы: аспекты параллелизма
Создание/завершение процесса – Win32 • BOOL CreateProcess( LPCTSTR lpszImageName, LPCTSTR lpszCommandLine, LPSECURITY_ATTRIBUTES lpsaProcess, LPSECURITY_ATTRIBUTES lpsaThread, BOOL fInheritHandles, DWORD fdwCreate, LPVOID lpvEnvironment, LPTSTR lpszCurDir, LPSTARTUPINFO lpsiStartInfo, LPPROCESS_INFORMATION lppiProcInfo); • VOID ExitProcess(UINT fuExitCode); • BOOL TerminateProcess(HANDLE hProcess,UINT uExitCode ); • Описание функций можно найти в MSDN и в работе [2] Операционные системы: аспекты параллелизма
STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); CreateProcess( NULL, // No module name (use command line). TEXT("MyChildProcess"),// Command line. NULL, // Process handle not inheritable. NULL, // Thread handle not inheritable. FALSE, // Set handle inheritance to FALSE. 0, // No creation flags. NULL, // Use parent's environment block. NULL, // Use parent's starting directory. &si, // Pointer to STARTUPINFO structure. &pi ); // Pointer to PROCESS_INFORMATION structure. // Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); Операционные системы: аспекты параллелизма
Создание/завершениепотока – Win32 • HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,SIZE_T dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId); • VOID ExitThread(DWORD dwExitCode); • BOOL TerminateThread(HANDLE hThread,DWORD dwExitCode); • Описание функций можно найти в MSDN и в работе [2] Операционные системы: аспекты параллелизма
int GlobalVar = 0; DWORD WINAPI ThreadProc( LPVOID arg ){ *(int*)arg = *(int*)arg + 1; ExitThread(0); } int main(void){ int i; HANDLE Threads[10]; for( i = 0; i < 10; i ++ ){ Threads[i]=CreateThread(NULL,0, ThreadProc,(LPVOID)&GlobalVar,0,NULL); } for( i = 0; i < 10; i ++ ){ WaitForSingleObject(Threads[i],INFINITE); } return 0; } Операционные системы: аспекты параллелизма
Создание/завершение процесса – UNIX… • Создание копии процессаint fork(void); • Использование ресурсов процесса для выполнения указанной программыint exec*(char *path, char* argv[], char **env); • Завершение процессаvoid exit(int status); • Ожидание завершения процесса-потомкаint wait(int *status); • Описание функций можно найти в документации UNIX (man или info) и вработе [3] Операционные системы: аспекты параллелизма
Итоги • Процессы и потоки – объекты, представляющие программы во время их выполнения • Процесс – пассивный объект, владелец ресурсов • Поток – активный объект • С точки зрения ОС, процессы и потоки – специфичные типы ресурсов, требующие специального управления Операционные системы: аспекты параллелизма
Тема обсуждения • Потокам для выполнения нужен центральный процессор (ЦП) • Если потоков больше, чем процессоров, ОС должна обеспечить возможность поочередного использования процессоров потоками Операционные системы: аспекты параллелизма
Что такое "планирование"? • Планирование – распределение времени центрального процессора Процесс Поток Процесс Центральный процессор Поток Поток Поток Поток Поток Процесс Поток Поток Операционные системы: аспекты параллелизма
Что такое "планирование"? • Планирование – распределение времени центрального процессора • Планирование бывает • долгосрочное – принятие решений о запуске и откладывании запуска заданий • среднесрочное – принятие решений о временном вытеснении процессов на диск • краткосрочное (диспетчеризация) – выбор потока, которому следует предоставить ЦП • При реализации планирования используется механизм переключения контекстов процессов и потоков Операционные системы: аспекты параллелизма
График выполнения потока а) Потоки, ограниченные возможностями ЦПб) Потоки, ограниченные возможностями ввода-вывода Операционные системы: аспекты параллелизма
А если потоков несколько? Для каждого потока можно построить график его выполнения в однозадачной среде Если имеются 2 потока и 1 центральный процессор, операционная система должна определить последовательность использования центрального процессора потоками Операционные системы: аспекты параллелизма
А если потоков несколько? Хорошо ли мы распределили время ЦПмежду потоками? Операционные системы: аспекты параллелизма
Критерии оценки алгоритмов планирования… • Общие критерии • Справедливость – всем выделяется равное количество времени ЦП • Баланс – обеспечение загрузки всех устройств системы • Накладные расходы – процент ресурсов, потребляемых планировщиком • Масштабируемость – увеличение потребления ресурсов планировщиком при увеличении числа объектов планирования Операционные системы: аспекты параллелизма
Критерии оценки алгоритмов планирования… • Справедливость – всем выделяется равное количество времени ЦП • Как измерить справедливость? • Одинаковое время потребления ЦП? Одинаковое количество выполненных команд? • Честно на уровне потоков? процессов? пользователей? • Что если один процесс ограничен возможностями ЦП, а другой – возможностями ввода-вывода? • Иногда нужно быть несправедливым и явно оказывать предпочтение некоторым определенным классам потоков/запросов/событий (иметь систему приоритетов), но… • следует избегать голодания(starvation) – ситуации, когда некоторым потокам процессор может не выделяться в течении неограниченного времени Операционные системы: аспекты параллелизма
Критерии оценки алгоритмов планирования… • Системы пакетной обработки данных • Пропускная способность – среднее число заданий, полностью выполняемых в единицу времени (час, сутки,…) • Оборотное время – среднее время между запуском задания и завершением его обработки • Эффективность – средний процент загрузки центрального процессора Операционные системы: аспекты параллелизма
Критерии оценки алгоритмов планирования… • Интерактивные системы • Время отклика – среднее время между возникновением события и завершением его обработки • Время ожидания – среднее время между переходом потока из состояния "ожидание" в состояние "готов к выполнению" и предоставлением ему ЦП • Соразмерность – соответствие производительности ожиданиям пользователя Операционные системы: аспекты параллелизма