Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Тема: Нитки управления. Анализ ниток і процессов для основных архетипов операционных систем
Логическая реализация относится к средствам связи ориентированным на организацию взаимодействия различных процессов. Однако, усилия, направленные на ускорение решения задач в классических ОС привели к появлению совершенно иных механизмов, к изменению самого понятии процесса. Внутреннее мультипрограммирование позволило повысить пропускную способность компьютерной системы, т.е. понизить среднее время ожидания работы процессов. Но каждый отдельно взятый процесс в мультипрограмированной системе никогда не может быть выполнен быстрее чем при работе в однопрограммной системе на том же вычислительном комплексе. Тем не менее, если алгоритм решения задачи обладает внутренним параллелизмом можно ускорить его выполнение, организовав взаимодействие некоторых процессов. Ввести массив А Ввести массив В Ввести массив С А=А+В С=А+С Вывести массив С При выполнении такой программы в рамках одного процесса этот процесс будет 4 раза блокироваться ожидая окончания операции ввода/вывода. Но этот алгоритм обладает внутренним параллелизмом. Вычисление суммы массивов А+В можно было бы выполнять параллельно с ожиданием окончания операции ввода массива С. Такое совмещение операций можно реализовать использую два взаимодействующих процессов. Для простаты считаем, что процессы взаимодействуют через разделяемую память. Процесс 1 процесс 2 Создать процесс Переключение контекста Выделение общей памяти Ожидание ввода А и В Переключение контекста Выделение общей памяти Переключение контекста А=А+В Переключение контекста С=А+С Очевидно, что можно не только не выиграть во времени решения задачи но даже и проиграть, т.к. временные потери на создание процесса, выделение общей памяти, переключение контекста могут превысить выигрыш полученный за счет переключения операций. Для реализации исходной идеи вводится новая абстракция внутри понятия процесса — нить исполнения. Нити процесса разделяют его программный код, глобальные переменные и системные ресурсы, но каждая нить имеет свой собственный программный счетчик, свое содержимое регистров и свой стек. Теперь процесс представляется как совокупность взаимодействующих нитей и выделенных ему ресурсов. Процесс содержащий всего одну нить исполнения идентичен процессу в традиционном смысле. Иногда нити называют облегченными процессами или мини процессами, т.к. во многих отношениях они подобны традиционным процессам. Нити, как и процессы могут порождать нити-потомки, но только внутри своего процесса, переходить из одного состояния в другое. Состояния нитей аналогично состояниям традиционных процессов. Из состояния рождения процесс приходит содержащим всего одну нить исполнения. Другие нити процесса будут являться потомками этой нити прародителя. Считается, что процесс находится в состоянии готовность, если хотя бы одна из его нитей находится в состоянии готовность и не одна из его нитей не находится в состояние исполнения. Процесс находится в состоянии исполнения если одна из его нитей находится в состояние исполнения. Процесс находится в состояние ожидания если все его нити находятся в состоянии ожидания. Наконец, процесс находится в состоянии завершил исполнение если все его нити находятся в состоянии завершил исполнение. Пока одна нить процесса заблокирована, другая нить того же процесса может выполняться. Нити разделяют Ц.П. так же как это делали традиционные процессы в соответствии с рассмотренными алгоритмами планирования. Т.к. нити одного процесса разделяют существенно больше ресурсов чем различные процессы то операции создания новой нити и переключения контекста между нитями одного процесса занимают значительно меньше времени, чем аналогичные операции другого процесса в целом. Различают ОС поддерживающие нити на уровне ядра и на уровне библиотеки. ОС поддерживающая нити на уровне ядра использует планирование Ц.П. в терминах нити а управление памятью и другими ресурсами остается в терминах процесса. В ОС поддерживающей нити на уровне библиотек пользователей и планирование Ц.П. и управление ресурсами осуществляется в терминах процесс. Распределение использования Ц.П. по нитям в рамках выделенного Ц.П. временного интервала осуществляется средствами библиотеки. В подобных системах блокирование нити приводит к блокированию всего процесса. Т.к. ядро системы не имеет представления о существовании нити, по сути дела в таких ВС просто имитируются наличие нитей исполнения.
Лекция 8. Тема: Семафоры. Определения. Реализация. Задача взаимодействия производителя и потребителя данных и ее решение с помощью блокировок и семафоров Семафоры могут применяться для различных целей. Их можно использовать для взаимного исключения, синхронизации взаимодействия процессов и управления выделением ресурсов. В зависимости от конкретного применения используются разные начальные значения семафора и различные последовательности вызова методов SImWait() и SimSignal(). 1. Взаимоисключения – с помощью семафора, инициализированного значением 1 можно обеспечить монопольный доступ к общему ресурсу (например, к совместно используемой структуре данных). В описанном применении первым в критическую секцию входит процесс, который первым запросил ее использование с помощью вызова SimWait(). Способ планирования процессов зависит от конкретной реализации и не является частью концепции семафора. Например, при выполнении одним из процессов вызова SimSignal() можно освободить все ожидающие процессы и тогда в критическую секцию войдет тот из них, который первым снова выполнит вызов SimWait(). В этом случае выбор процесса будет определятся алгоритмом планирования, используемым в ОС. Еще одна альтернатива заключается в организации планирования для очередей семафора на основе приоритета процессов, которые в этом случае должны быть известны семафору.
2) Условная синхронизация – два взаимосвязанных процесса должны иметь возможность синхронизировать свои действия. Процессы могут быть связаны следующим образом: при достижении процессом А определенной точки, он не может продолжить роботу, пока процесс В не выполнит некоторую задачу. Для их синхронизации можно применять инициализированный значением 0 семафор, у которого процесс А должен ждать в точке синхронизации, выполнив вызов SimWait(), пока процесс В не вызовет метод SimSignal(). Особенность данного способа применения семафора заключается в том, что вызов SimWait() выполняет один процесс, а вызов SimSignal() – другой. Семафор используемый таким образом называется приватным, ждать у него может только один процесс, сигнализировать с его помощью о программных событиях может произвольное количество процессов.
3) Использование более одного экземпляра ресурса. В ОС типичной бывает ситуация, когда несколько процессов имеют возможность обращаться к ресурсу одновременно, но количество таких обращений должно быть ограничено. Если в системе имеется два принтера, которые представляют собой ресурс, которым одновременно могут пользоваться несколько процессов, соответствующий семафор этого ресурса нужно инициализировать значением 2. Каждый раз, когда некоторый процесс запрашивает доступ к ресурсу и значение семафора этого ресурса больше 0, данное значение уменьшается на 1. Как только значение семафора станет равным 0, последующие попытки доступа к ресурсу должны быть блокированы, а соответствующие процессы установлены в очередь. После ого, как процесс освободит ресурс, семафор проверит имеющиеся в очереди другие процессы. При их отсутствии значение семафора увеличивается на 1, в противном случае одному из процессов предоставляется доступ к ресурсу. Для того, чтобы семафор можно было использовать описанным способом, его метод SimWait() должен устанавливать процесс в очередь. Освобождая ресурс, процесс должен вызвать метод SimSIgnal(), при этом каждый ресурс следует защитить собственным семафором. Для успешного функционирования семафора недостаточно одних атомарных операций SimWait() и SimSignal(). Необходимо также, чтобы эти операции начавших обязательно завершились, причем без чрезмерных задержек. Проверка и изменение значения семафора задержек не вызывает. Изменение состояния процесса требует доступа к его дескриптору, возможно с вызовом операций блокировать и разблокировать, реализованных в другом модуле. Доступ к дескриптору процесса может осуществляться от имени другого процесса. Если предположить, что время выполнения операций блокировать и разблокировать фиксировано, то можно гарантировать и время выполнения операций SimWait() и SimSiganl(). При разработке системы, в которой присутствуют семафоры, необходимо доказать, что вызовы между классами семафоров и процессов не приведут к взаимоблокировке, т.е. при построении ОС необходимо разработать атомарные, правильно функционирующие операции SimWait() и SimSiganl() с фиксированным временем выполнения.
Лекция 9. Популярное:
|
Последнее изменение этой страницы: 2016-05-28; Просмотров: 690; Нарушение авторского права страницы