Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Все ответы на вопросы.docx
Скачиваний:
30
Добавлен:
26.04.2019
Размер:
474.16 Кб
Скачать

29. Родственные проблемы тупиков. Двухфазная локализация. Тупики не ресурсного типа. Голод (starvation).

 Родственные проблемы

1.Двухфазная локализация

Когда несколько процессов работают с базой данных,  есть реальная опасность тупика.  Типичный в подобных ситуациях  подход - двухфазная локализация. В первой фазе процесс пытается локализовать все записи, которые ему нужны за один раз. Если это ему удалось,  то он переходит ко второй фазе, выполняя изменения и освобождая записи. В первой фазе не делается реальной работы.

Если в первой фазе некоторые записи, которые ему нужны, уже локализованы, процесс освобождает все, что он локализовал и пытается повторить первую фазу.

2.Тупики не ресурсного типа

До сих пор все наше внимание было сконцентрировано на ресурсных тупиках.  Есть и другие тупиковые ситуации, например, когда  один из процессов ждет чего-то от другого. Это часто случается при некорректном использовании семафоров, когда один из процессов забывает открыть семафор для другого процесса.

3.Голод (starvation)

Близкая к тупикам проблема - голод. В динамических  системах постоянно происходят запросы процессов к ресурсам. Естественно, что должна быть реализована некоторая политика для принятия решения относительно того, кто получит  ресурсы и когда. Эта политика может быть дискриминационной по отношению к некоторым процессам, хотя формально они и не в тупике.

Например, несколько процессов конкурируют за принтер, и система выделяет его по принципу - первым печатать файл наименьшего размера. Этот подход увеличивает  число счастливых пользователей принтера и кажется удовлетворительным. Однако пользователь с большим файлом оказывается в состоянии бесконечного ожидания (тупике).  В данном случае голода можно избежать путем применения  иной политики, например, FCFS (первый пришедший обслуживается первым).

30. Управление памятью. Функции. Связывание адресов.

Главная задача компьютерной системы – выполнять программы. Программы вместе с данными, к которым они имеют доступ, в процессе выполнения должны находиться в оперативной памяти. Операционной системе приходится решать задачу распределения памяти между пользовательскими процессами и компонентами ОС. Эта деятельность называется управлением памятью. Таким образом, память (storage, memory) является важнейшим ресурсом, требующим тщательного управления.

Физическая организация памяти компьютера

Запоминающие устройства компьютера разделяют, как минимум, на два уровня: основную (главную, оперативнуюфизическую ) и вторичную (внешнюю) память.

Функции системы управления памятью

Чтобы обеспечить эффективный контроль использования памяти, ОС должна выполнять следующие функции:

  • отображение адресного пространства процесса на конкретные области физической памяти;

  • распределение памяти между конкурирующими процессами;

  • контроль доступа к адресным пространствам процессов;

  • выгрузка процессов (целиком или частично) во внешнюю память, когда в оперативной памяти недостаточно места;

  • учет свободной и занятой памяти.

Связывание адресов

Итак логические и физические адресные пространства ни по организации, ни по размеру не соответствуют друг другу. Максимальный размер логического адресного пространства обычно определяется разрядностью процессора (например, 232) и в современных системах значительно превышает размер физического адресного пространства. Следовательно, процессор и ОС должны быть способны отобразить ссылки в коде программы в реальные физические адреса, соответствующие текущему расположению программы в основной памяти. Такое отображение адресов называют трансляцией (привязкой) адреса или связыванием адресов (рис. 8.3).

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

  • Этап компиляции (Compile time). Когда на стадии компиляции известно точное место размещения процесса в памяти, тогда непосредственно генерируются физические адреса. При изменении стартового адреса программы необходимо перекомпилировать ее код.

  • Этап загрузки (Load time). Если информация о размещении программы на стадии компиляции отсутствует, компилятор генерирует перемещаемый код. В этом случае окончательное связывание откладывается до момента загрузки. Если стартовый адрес меняется, нужно всего лишь перезагрузить код с учетом измененной величины.

  • Этап выполнения (Execution time). Если процесс может быть перемещен во время выполнения из одной области памяти в другую, связывание откладывается до стадии выполнения. Здесь желательно наличие специализированного оборудования, например регистров перемещения. Их значение прибавляется к каждому адресу, сгенерированному процессом. Большинство современных ОС осуществляет трансляцию адресов на этапе выполнения, используя для этого специальный аппаратный механизм.

Рис. 8.3.  Формирование логического адреса и связывание логического адреса с физическим.