Статус
нашего
сайта:
ICQ Secrets Center is Online  ICQ Information Center


ICQ SHOP
     5-значные
     6-значные
     7-значные
     8-значные
     9-значные
     Rippers List
ОПЛАТА
СТАТЬИ
СЕКРЕТЫ
HELP CENTER
OWNED LIST
РОЗЫСК!New!
ICQ РЕЛИЗЫ
Протоколы ICQ
LOL ;-)
Настройка компьютера
Аватарки
Смайлики
СОФТ
     Mail Checkers
     Bruteforces
     ICQTeam Soft
     8thWonder Soft
     Other Progs
     ICQ Patches
     Miranda ICQ
ФорумАрхив!
ВАШ АККАУНТ
ICQ LiveJournal

Реклама

Наш канал:

irc.icqinfo.ru

Таненбаум Э.- Архитектура компьютера. стр.361


Таненбаум Э.- Архитектура компьютера. стр.361

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

Если операция down совершается для семафора, значение которого больше О, значение этого семафора уменьшается на 1, и процесс продолжается. Если же значение семафора равно 0, то операция down не может завершиться. Тогда данный процесс приостанавливается до тех пор, пока другой процесс не выполнит для этого семафора операцию up. Как правило, приостановленные процессы собираются в одну очередь, что упрощает задачу их отслеживания.

Команда up проверяет, не равно ли 0 значение семафора. Если равно, а другой процесс приостановлен, значение семафора увеличивается на 1. После этого приостановленный процесс должен завершить операцию down, установив в 0 значение семафора. В этом случае оба процесса могут продолжать работу. Если значение семафора не равно 0, команда up просто увеличивает его на 1. Семафор позволяет сохранять сигналы пробуждения, так что они не пропадут зря. У семафорных команд есть одно важное свойство: если один из процессов начал

выполнять команду для семафора, то другой процесс не сможет получить доступ к этому семафору до тех пор, пока первый процесс не завершит выполнение команды или не будет приостановлен, пытаясь выполнить команду down при нулевом значении семафора. В табл. 6.2 представлены важные свойства системных

вызовов up и down.

   

Таблица 6.2. Результаты опер8аций с семафором

   

Команда

Семафор = 0

Семафор > 0

up

Семафор = семафор + 1 (если другой процесс пытается теперь выполнить операцию down для этого семафора, он сможет это сделать и продолжить свою работу)

Семафор

= семафор +1

down

Процесс приостанавливается до тех пор, пока другой процесс не выполнит операцию up для этого семафора

Семафор

= семафор -1

Как уже отмечалось, проблема гонок может быть решена средствами языка Java, но мы сейчас обсуждаем операционные системы, следовательно, нам нужно каким-либо образом реализовать механизм семафоров на языке Java, поскольку стандартного класса для них нет. Однако мы сможем это сделать, предположив, что два метода, up и down, совершающие, соответственно, системные вызовы up и down, уже написаны и используя в качестве их параметров обычные целые числа.

В листинге 6.2 показано, как можно устранить состояние гонок с помощью семафоров. В класс m добавляются два семафора: семафор available, изначально равный 100 (это размер буфера), и семафор filled, изначально равный 0. Производитель начинает работу с оператора Р1, а потребитель — с оператора С1. Вызов down для семафора filled сразу же приостанавливает работу потребителя. Когда производитель находит первое число, он вызывает метод down с переменной available в качестве параметра, присваивая ей значение 99. В операторе Р5 производитель вызывает метод up с параметром filled, присваивая переменной filled значение 1. Это действие освобождает потребителя, который теперь может завершить вызов метода down. После этого filled принимает значение 0, и оба процесса продолжают работу.


⇐ Предыдущая страница| |Следующая страница ⇒

.