Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Понятие процесса. Реализация многозадачности. Понятие потока
1. Понятие процесса. Процесс — экземпляр выполняемой программы, включая текущие значения счетчика команд, регистров и переменных. Процесс — это своего рода действия. У него есть программа, входные, выходные данные и состояние. Один процессор может совместно использоваться несколькими процессами в соответствии с неким алгоритмом планирования, который используется для определения, когда остановить один процесс и обслужить другой. Процесс – программа в процессе исполнения. Состоит из: · Последовательности исполняемых команд (потока команд) · Ресурсов, необходимых для обслуживания и исполнения этих команд Модель процесса: o Все функционирующее на компьютере программное обеспечение может быть представлено в виде набора (последовательности) процессов; o Каждый процесс можно представить в виде задачи, выполняющейся на машине с однозадачной системой, в которой есть своя оперативная память и свой процессор, а также другие ресурсы. Как это делается? Возможно два пути: o Процесс ждет пока предыдущий процесс не закончит работу; o Процессы чередуются по времени, передавая друг другу процессор. Этапы существования процесса o Создание процесса o Функционирование процесса o Завершение процесса Создание процесса возможно при следующих случаях: o Инициализация системы; o Выполнение работающим процессом системного запроса на создание процесса; o Запрос пользователя на создание процесса; o Инициирование пакетного задания. Создание процесса в различных системах o Создание процесса в UNIX-системах – системный вызов fork – дублирование существующего процесса. После выполнения системного вызова fork два процесса, родительский и дочерний, имеют единый образ памяти, единые строки описания конфигурации и одни и те же открытые файлы. o Windows - функция интерфейса Win32 API CreateProcess – создание нового процесса. Одним вызовом функции Win32 CreateProcess создается процесс, и в него загружается нужная программа. Завершение процесса o Обычный выход (добровольно) o Выход по ошибке (добровольно) o Выход по неисправимой ошибке (принудительно) В качестве примеров можно привести неверную инструкцию, ссылку на несуществующий адрес памяти или деление на нуль. o Уничтожение другим процессом (принудительно) Завершение процесса в различных системах o Системы UNIX – системные вызовы exit и kill o Системы Windows – функции ExitProcess и TerminateProcess Для завершения процесса следует иметь необходимые полномочия.
Состояния процесса: o Работа (использующий в данный момент центральный процессор); o Ожидание (работоспособный, но временно приостановленный, чтобы дать возможность выполнения другому процессу); o Блокировка (неспособный выполняться, пока не возникнет какое-нибудь внешнее событие).
Реализация процесса Для управления процессами операционная система содержит специальную структуру – таблицу процессов, которая располагается в области памяти ядра и содержит всю необходимую для работы с процессом информацию, для каждого процесса отводится одна структура данных в этой таблице. Эти записи содержат важную информацию о состоянии процесса, включая счетчик команд, указатель стека, распределение памяти, состояние открытых им файлов, его учетную и планировочную информацию и все остальное, касающееся процесса, что должно быть сохранено, когда процесс переключается из состояния выполнения в состояние готовности или блокировки, чтобы позже он мог бы возобновить выполнение, как будто никогда и не останавливался. Поля первого столбца относятся к управлению процессами. Поля остальных двух столбцов относятся соответственно к управлению памятью и файлами. Следует заметить, что наличие тех или иных полей в таблице процессов в большей степени зависит от системы, но в этой таблице изложено основное представление о типе необходимой информации. Содержание таблицы процессов Вектор прерываний (используется для поддержания иллюзии нескольких последовательных процессов в системе с одним процессором и несколькими устройствами ввода-вывода): · Область памяти, связанная с каждым классом устройств ввода-вывода · Содержит адрес, по которому находится процедура обработки прерываний
Существует область памяти (обычно это фиксированная область в нижних адресах), связанная с каждым классом устройств ввода-вывода, которая называется вектором прерывания. В ней содержится адрес процедуры, обслуживающей прерывание. Обработка прерывания
2. Понятие потока В традиционных операционных системах у каждого процесса есть адресное пространство и единственный поток управления. Фактически это почти что определение процесса. Тем не менее, нередко возникают ситуации, когда неплохо было бы иметь несколько потоков управления в одном и том же адресном пространстве, выполняемых квазипараллельно (почти параллельно, на одном физическом процессоре, но в режиме разделения времени), как будто они являются чуть ли не обособленными процессами (за исключением общего адресного пространства). Необходимость в подобных мини-процессах, называемых потоками, обусловливается целым рядом причин. Рассмотрим некоторые из них. Основная причина использования потоков заключается в том, что во многих приложениях одновременно происходит несколько действий, часть которых может периодически быть заблокированной. Вторым аргументом в пользу потоков является легкость (то есть быстрота) их создания и ликвидации по сравнению с более «тяжеловесными» процессами. Третий аргумент в пользу потоков также касается производительности. Когда потоки работают в рамках одного центрального процессора, они не приносят никакого прироста производительности, но когда проводятся значительные вычисления, а также значительная часть времени тратится на ожидание ввода-вывода, наличие потоков позволяет этим действиям перекрываться по времени, ускоряя работу приложения. И наконец, потоки весьма полезны для систем, имеющих несколько центральных процессоров, где есть реальная возможность параллельных вычислений. Модель потока Процессы используются для группировки ресурсов в единое образование, а потоки являются «сущностью», распределяемой для выполнения на центральном процессоре. Один процесс содержит минимум один поток, но может содержать и несколько. Наличие нескольких потоков, выполняемых параллельно в рамках одного процесса, является аналогией наличия нескольких процессов, выполняемых параллельно на одном компьютере. В первом случае потоки используют единое адресное пространство и другие ресурсы. А в последнем случае процессы используют общую физическую память, диски, принтеры и другие ресурсы. Зачем использовать несколько потоков в одном процессе? · При переключении потоков внутри одного процесса требуется сохранять гораздо меньше информации · Создание и удаление потока занимает гораздо меньше времени. · Потоки могут совместно использовать одну область памяти и одни и те же открытые файлы. · При использовании многопроцессорных и многоядерных систем, появляется возможность полной загрузки системы. Важно!!! Работа одного потока не защищена от работы других. Защиты не существует, потому что это невозможно и ненужно. Потоки созданы таким образом, чтобы работать совместно, но при этом не мешать друг другу. Потоки разделяют не только адресное пространство, но и отрытые файлы, дочерние процессы, сигналы и т.д.
Реализация потоков Есть два основных способа реализации набора потоков: в пользовательском пространстве и в ядре. Это утверждение носит несколько спорный характер, поскольку возможна еще и гибридная реализация. · В пространстве пользователя · В пространстве ядра Реализация в пространстве пользователя · Не требует переключения в режим ядра; · Операционная система не «знает» о существовании потоков. Суть в том, чтобы поместить весь набор потоков в пользовательском пространстве. И об этом наборе ядру ничего не известно. Что касается ядра, оно управляет обычными, однопотоковыми процессами. Первое и самое очевидное преимущество состоит в том, что набор потоков на пользовательском уровне может быть реализован в операционной системе, которая не поддерживает потоки. Таблица потоков управляется системой поддержки исполнения программ. Когда поток переводится в состояние готовности или блокируется, информация, необходимая для возобновления его выполнения, сохраняется в таблице потоков, точно так же как ядро хранит информацию о процессах в таблице процессов. + Собственная система планирования. - Однако реализация блокировок сложна. Реализация в пространстве ядра В данном случае отсутствует система исполнения программ, нет необходимости в таблице потоков в каждом процессе, вместо этого есть единая таблица потоков, отслеживающая все потоки системы. Если потоку необходимо создать новый поток или завершить имеющийся, он выполняет запрос ядра, который создает или завершает поток, внося изменения в таблицу потоков. Дополнительно ядро содержит таблицу процессов, отслеживающую все процессы системы. · Все потоки описаны структурами данных ядра; · Переключение между потоками осуществляется через переключение в режим ядра. Смешанная (Гибридная) реализация Используются оба вида реализации потоков. Заключается в использовании потоков на уровне ядра, а затем нескольких потоков на уровне пользователя в рамках некоторых или всех потоков на уровне ядра. При таком подходе ядру известно только о потоках самого ядра, работу которых оно и планирует. У некоторых из этих потоков могут быть несколько потоков на пользовательском уровне, которые расходятся от их вершины. Создание, удаление и планирование выполнения этих потоков осуществляется точно так же, как и у пользовательских потоков, принадлежащих процессу, запущенному под управлением операционной системы, не способной на многопоточную работу. В этой модели каждый поток на уровне ядра обладает определенным набором потоков на уровне пользователя, которые используют его по очереди. Активация планировщика Цель работы по активации планировщика заключается в имитации функциональных возможностей потоков на уровне ядра, но при лучшей производительности и более высокой гибкости, свойственной пакетам потоков, реализуемых в пользовательском пространстве. · Используется специальное программное обеспечение, которое работает «поверх» операционной системы · При этом нет надобности в создании специальных «чехлов», для отслеживания работы потоков Один процесс содержит минимум один поток, но может содержать и несколько. · Создание и удаление потока занимает гораздо меньше времени. · Потоки могут совместно использовать одну область памяти и одни и те же открытые файлы. · При использовании многопроцессорных и многоядерных систем, появляется возможность полной загрузки системы.
3. Реализация многозадачности Многозадачность – свойство ОС обеспечивать возможность параллельной обработки нескольких процессов. Существует 2 типа многозадачности: Процессная многозадачность (основанная на процессах — одновременно выполняющихся программах). Здесь программа — наименьший элемент кода, которым может управлять планировщик операционной системы. Более известна большинству пользователей (работа в текстовом редакторе и прослушивание музыки). Поточная многозадачность (основанная на потоках). Наименьший элемент управляемого кода — поток (одна программа может выполнять 2 и более задачи одновременно). Примитивные многозадачные среды обеспечивают чистое «разделение ресурсов», когда за каждой задачей закрепляется определённый участок памяти, и задача активизируется в строго определённые интервалы времени. Более развитые многозадачные системы проводят распределение ресурсов динамически, когда задача стартует в памяти или покидает память в зависимости от её приоритета и от стратегии системы.
Возможно два пути: · Процесс ждет пока не закончит работу предыдущий · Процессы чередуются по времени, передавая друг другу процессор Типы псевдопараллельной многозадачности Невытесняющая многозадачность - Тип многозадачности, при котором операционная система одновременно загружает в память два или более приложений, но процессорное время предоставляется только основному приложению. Для выполнения фонового приложения оно должно быть активизировано. Подобная многозадачность может быть реализована не только в операционной системе, но и с помощью программ-переключателей задач. Совместная или кооперативная многозадачность - Тип многозадачности, при котором следующая задача выполняется только после того, как текущая задача явно объявит себя готовой отдать процессорное время другим задачам. Как частный случай, такое объявление подразумевается при попытке захвата уже занятого объекта mutex (ядро Linux), а также при ожидании поступления следующего сообщения от подсистемы пользовательского интерфейса. Вытесняющая или приоритетная многозадачность (режим реального времени) - вид многозадачности, в котором операционная система сама передает управление от одной выполняемой программы другой в случае завершения операций ввода-вывода, возникновения событий в аппаратуре компьютера, истечения таймеров и квантов времени, или же поступлений тех или иных сигналов от одной программы к другой. В этом виде многозадачности процессор может быть переключен с исполнения одной программы на исполнение другой без всякого пожелания первой программы. Распределение процессорного времени осуществляется планировщиком процессов. К тому же каждой задаче может быть назначен пользователем или самой операционной системой определенный приоритет, что обеспечивает гибкое управление распределением процессорного времени между задачами (например, можно снизить приоритет ресурсоёмкой программе, снизив тем самым скорость её работы, но повысив производительность фоновых процессов). Этот вид многозадачности обеспечивает более быстрый отклик на действия пользователя. Проблемные ситуации в многозадачных системах Голодание (starvation) - Задержка времени от пробуждения потока до его вызова на процессор, в течение которой он находится в списке потоков, готовых к исполнению. Возникает по причине присутствия потоков с большими или равными приоритетами, которые исполняются все это время. Негативный эффект заключается в том, что возникает задержка времени от пробуждения потока до исполнения им следующей важной операции, что задерживает исполнение этой операции, а следом за ней и работу многих других компонентов. Как правило, для предотвращения голодания ОС автоматически вызывает на исполнение готовые к нему низкоприоритетные потоки даже при наличии высокоприоритетных, при условии, что поток не исполнялся в течение долгого времени (~10 секунд). Визуально эта картина хорошо знакома большинству пользователей Windows — если в одной из программ поток зациклился до бесконечности, то переднее окно работает нормально, несмотря на это — потоку, связанному с передним окном, Windows повышает приоритет. Остальные же окна перерисовываются с большими задержками, по порции в секунду, ибо их отрисовка в данной ситуации работает только за счет механизма предотвращения голодания (иначе бы голодала вечно). Гонка (race condition) - Недетерминированный (алгоритм, который указывает несколько путей обработки одних и тех же входных данных, без какого-либо уточнения, какой именно вариант будет выбран) порядок исполнения двух путей кода, работающих с одними и теми же данными и исполняемыми в двух различных нитях. Приводит к зависимости порядка и правильности исполнения от случайных факторов. Устраняется добавлением необходимых блокировок и примитивов синхронизации. Обычно является легко устраняемым дефектом (забытая блокировка). Инверсия приоритета - Поток L имеет низкий приоритет, поток M — средний, поток H — высокий. Поток L захватывает mutex, и, выполняясь с удержанием mutex’а, преемптивно прерывается потоком M, который пробудился по какой-то причине, и имеет более высокий приоритет. Поток H пытается захватить mutex. В полученной ситуации поток H ожидает завершения текущей работы потоком M, ибо, пока поток M исполняется, низкоприоритетный поток L не получает управления и не может освободить mutex. Устраняется повышением приоритета всех нитей, захватывающих данный mutex, до одного и того же высокого значения на период удержания mutex'a. Некоторые реализации mutex’ов делают это автоматически. Date: 2016-06-06; view: 1189; Нарушение авторских прав |