Главная страница
Навигация по странице:

  • Способы взаимодействия между процессами

  • Планирование выполнения процессов

  • Ответы к операционным системам. Вопросы по дисциплине Операционные системы


    Скачать 1.44 Mb.
    НазваниеВопросы по дисциплине Операционные системы
    АнкорОтветы к операционным системам
    Дата25.10.2019
    Размер1.44 Mb.
    Формат файлаdocx
    Имя файлаotvetymez (1).docx
    ТипДокументы
    #91797
    страница4 из 14
    1   2   3   4   5   6   7   8   9   ...   14

    Понятие процесса и его особенности

    Процесс - это выполнение программы процессором с учетом ее окружения. Окружение программы – контекст процесса. Основные компоненты контекста процесса:

    - значение счетчика команд процессора ЭВМ;

    - значения в регистрах, хранящих данные, адреса и состояние процессора ЭВМ;

    - данные в запоминающем устройстве;

    - исполняемый программный код.

    Один процесс может порождать другой процесс: родительский процесс и дочерний процессы. В текущий момент времени в системе содним процессором может быть активным только один процесс. Идентификация процессов в среде ОС выполняется на основе дескрипторов.

    Дескриптор процесса состоит из:

    - идентификатора процесса – кода;

    - состояния процесса;

    - данных о степени привилегированности процесса;

    - адреса кодового сегмента программы.

    Процесс, в своем жизненном цикле, проходит ряд состояний, показанных на рис. 2.1.



    Перечислим эти состояния:

    - готовность (ready): Процесс может выполняться, но процессор занят;

    - исполнение (running): Процесс исполняется процессором;

    - блокировка (blocked), ожидание (idle): Процесс ожидает внешнего события, либо процесс обработан или прерван.

    Заметим, что процесс может перейти в состояние «Исполнение»только из состояния «Готовность».


    1. Способы взаимодействия между процессами

    При обработке процессов возникает проблема их согласованной работы. Это ситуация может возникнуть, когда процесс требует для своей работы данные, подготовленные другим процессом. Другая проблема: один процесс ждет завершения фазы работы другого процесса для дальнейшего параллельного исполнения. Часто проблема синхронизации возникает, когда два процесса и более одновременно используют один и тот же ресурс. Например, изменяют общий файл данных на диске. Для организации синхронизации процессов используют базовые механизмы синхронизации:

    - семафор;

    - монитор;

    - сообщения.

    Семафоры

    Семафор был предложен нидерландским ученым Э.Б. Дейкстрой в 1965 году. Семафор – переменная S, для которой определено две атомарных операции P (открытие) и V (закрытие) [4, 10].

    Базовая реализация:

    P(S): [

    while (S<=0) {/* нет активности

    процесс можно прервать */}; S=S-1

    ]

    V(S): [S=S+1]

    Сначала инициализируется S=1

    P(S);

    Критическая секция;

    V(S);

    Здесь критическая секция – участок программного кода, подлежащий исполнению только одним процессом. Если процесс вошел в критическую секцию, то другой процесс не может получить доступ к обрабатываемому ресурсу до тех пор, пока процесс, его использующий, не покинет критическую секцию. Семафоры нашли широкое применение при разработке многопроцессных программ в среде таких операционных систем, как UNIX и Linux. В качестве недостатка использования семафоров отмечается, что процесс, который выполняет операцию P(S), требует много процессорного времени.

    Для эффективного использования семафора S объявляют, как объект со свойствами:

    - S.ctr (значение семафора);

    - S.list (список процессов в состоянии ожидания).

    Тогда псевдокод использования семафора примет вид:

    P(S): [S.ctr=S.ctr-1;

    if (S.ctr<0){

    put pid in S.list;sleep()}]

    V(S): [S.ctr=S.ctr+1;

    if (S.ctr<=0){

    get pid from S.list wakeup(pid)}

    ]

    Здесь pid – код процесса. Системный вызов sleep() приводит к тому, что pid процесса блокируется и таким образом нет надобности тратить процессорное время. Процесс будет разблокирован с помощью системного вызова wakeup(pid).

    Мониторы

    В 1974 году Хоаром (Чарльз Хоар) был предложен механизм синхронизации еще более высокого уровня, чем семафоры, получивший название мониторов. На абстрактном уровне можно описать структуру монитора следующимобразом:

    monitormonitor_name {

    описание внутренних переменных;

    void m1(...){... }

    void m2(...){... }

    ...

    void mn(...){... }

    {блок инициализации внутренних переменных; }

    }

    Здесь функции m1 ,..., mn представляют собой функции-методы монитора.Пока не будет вызван метод, не будет получен отклик от устройства.Блок инициализации внутренних переменных содержит операции, которые выполняются один и только один раз: при создании монитора или при самом первом вызове какой-либо функции-метода до ее исполнения.

    Важной особенностью мониторов является то, что в любой момент времени только один процесс может быть активен, т.е. находиться в состоянии «Готовность» или «Исполнение» внутри данного монитора.Концепция монитора используется в программах, написанных для виртуальной машины Java.

    Сообщения

    Синхронизовать работу процессов можно на основе механизма уведомления процессов о состоянии друг друга на основе механизма сообщений. При этом для прямой и непрямой адресации сообщений достаточно двух примитивов, чтобы описать передачу сообщений по линии связи – send и receive.

    Реализация примитивов:

    - send(P, message) – послать сообщение message процессу P;

    - receive(Q, message) – получить сообщение message от процесса Q.

    В случае непрямой адресации используют буфер – почтовый ящик:

    - send(A, message) – послать сообщение message в почтовый ящик A;

    - receive(A, message) – получить сообщение message из почто-вого ящика A.

    Эквивалентность семафоров, мониторов и сообщений

    В рамках одной вычислительной системы, когда процессы имеют возможность использовать разделяемую память, все они эквивалентны. Это означает, что любые два из предложенных механизмов могут быть реализованы на базе третьего, оставшегося, механизма [1]. Например, семафоры и мониторы можно реализовать на базе механизма сообщений.


    1. Планирование выполнения процессов

    Стратегии планирования

    Современные стратегии планирования подразделяют на вытесняющие и невытесняющие стратегии.

    - Preemptive (вытесняющие) стратегии: активный процесс лишают доступа к ЦПУ на некоторое время либо полностью удаляют из системы.

    - Nonpreemtive (невытесняющие) стратегии: активный процесс работает до тех пор, пока он не закончится или не перейдет в состояние блокировки (например, когда он ожидает доступа к устройству ввода-вывода).

    В современных ОС используются преимущественно вытесняющие стратегии. Невытесняющие стратегии используются в ОС специального назначения. Предпосылкой для использования вытесняющих стратегий является наличие в ЭВМ аппаратного таймера: после истечения периода времени t (например, 50 мс) планировщик получает вследствие прерывания доступ к ЦПУ.

    Очередь процессов

    Выбор нового процесса для исполнения осуществляется из начала очереди процессов в состоянии готовности. Очередь подобного типа имеет в системном программировании специальное наименование – FIFO, сокращение от First In, First Out (первым вошел, первым вышел). Такой алгоритм выбора процесса осуществляет невытесняющее планирование.

    Управление с разделением времени

    Каждый процесс на период времени T 0 получает доступ к ЦПУ. По истечении времени T0, если он не закончен, то он снова поступает в очередь ожидания.

    Такой алгоритм выбора процесса осуществляет вытесняющее планирование. На рис. 2.3 показан пример вытесняющего планирования на примере четырех процессов. Четвертый процесс не успел завершится на CPU (Central Process Unit – ЦПУ) и он переводится в состояние ожидания. Из состояния готовности выбирается третий процесс, на очереди перехода в состояние готовности второй процесс.

    Такая стратегия планирования получила условное обозначение RR (RoundRobin – карусель).



    1. 1   2   3   4   5   6   7   8   9   ...   14


    написать администратору сайта