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

18. Монитор Хоара как примитив синхронизации высокого уровня.

Мониторы Хоара – структура ЯВУ схожа с классом ООП. Он может содержать переменные, которые являются критическим ресурсом, и функции-методы, которые могут использовать только свои входные аргументы и переменные монитора. Внутри монитора в конкретный момент может находиться только один процесс, т.е. для процесса вызвавшего метод монитора обеспечивается взаимное исключение. При компиляции функции-методы монитора дополняются прологом и эпилогом из семафоров.

Переменные состояния – переменные монитора, над которыми доступно две примитивных операции:

a) wait – блокирует процесс на данной переменной состояния до тех пор, пока другой процесс не произведет на данной переменной состояния операцию signal;

b) signal.

В отличии от семафора переменные состояния не имею памяти, поэтому если операция signal будет проведена на переменной состояния, на которую не заблокирован ни один процесс, то этот сигнал будет потерян.

Решение задачи производителя и потребителя с помощью мониторов.

Monitor M

{ state full;

state empty;

void get ()

{ read; }

void put ()

{ write; }}

M m; int count=0;

производитель потребитель

while (true) { while (true) {

if (count ==N) if (count ==N)

m.empty.wait; m.full.wait;

m.put(); m.get();

count++; count--;

m.full.signal; m.empty.signal;

remainder; } remainder; }

19. Понятие физического и виртуального адреса.

Понятие «адрес памяти» может рассматриваться с двух точек зрения. С одной стороны, при написании любой программы ее автор либо явно указывает, по каким адресам должны размещаться переменные и команды (так бывает при программировании на языке ассемблера), либо присвоение конкретных адресов доверяется системе программирования. Те адреса памяти, которые записаны в программе, принято называть виртуальными адресами.

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

Для идентификации переменных и команд на разных этапах жизненного цикла программы используются символьные имена (метки), виртуальные адреса и физические адреса (рис. 5.1).

Символьные имена присваивает пользователь при написании программы на алгоритмическом языке или ассемблере.

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

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

Физическое адресное пространство представляет собой последовательность ячеек памяти на физической плате, каждая из которых идентифицируется своим номером (это есть физический адрес).

Логическое адресное пространство процесса – виртуальное пространство, принадлежащее только данному процессу со своим набором адресов (адресацией).

Связывание или трансляция адреса – преобразование логического или виртуального адреса процесса в адрес физической ячейки.

Связывание может производится:

1) на этапе компиляции: при этом способе связывания в двоичном коде жестко указаны физические адреса, поэтому программа может загружаться только в конкретное место памяти. Недостаток: несколько программ могут затребовать загрузку в одно и то же место, а значит работать не будут.

2) на этапе загрузки: компилятор оставляет относительные ссылки, которые при загрузке программы в память преобразовываются в абсолютные физические. Достоинства: программа может быть загружена в любое место. Недостатки: впоследствии она не может быть перемещена, при свопинге(свопинг – выгрузка целиком из памяти и последующая загрузка обратно целиком) программа может быть возвращена только в тоже самое место.

3) на этапе выполнения: при каждом обращении к памяти относительные ссылки преобразовываются в абсолютные программно-аппаратным способом с использованием MMU (устройство управления памятью). Достоинства: перемещаемый код.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]