Статус нашего сайта: |
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В [56] предложено другое решение этой проблемы. Где-то в памяти находятся две переменные, которые могут содержать неотрицательные целые числа. Эти переменные называются семафорами. Операционная система предоставляет два системных вызова, up и down, которые оперируют семафорами. Вызов up прибавляет 1 к значению семафора, а вызов down вычитает 1 из значения семафора. Если операция down совершается для семафора, значение которого больше О, значение этого семафора уменьшается на 1, и процесс продолжается. Если же значение семафора равно 0, то операция down не может завершиться. Тогда данный процесс приостанавливается до тех пор, пока другой процесс не выполнит для этого семафора операцию up. Как правило, приостановленные процессы собираются в одну очередь, что упрощает задачу их отслеживания. Команда up проверяет, не равно ли 0 значение семафора. Если равно, а другой процесс приостановлен, значение семафора увеличивается на 1. После этого приостановленный процесс должен завершить операцию down, установив в 0 значение семафора. В этом случае оба процесса могут продолжать работу. Если значение семафора не равно 0, команда up просто увеличивает его на 1. Семафор позволяет сохранять сигналы пробуждения, так что они не пропадут зря. У семафорных команд есть одно важное свойство: если один из процессов начал выполнять команду для семафора, то другой процесс не сможет получить доступ к этому семафору до тех пор, пока первый процесс не завершит выполнение команды или не будет приостановлен, пытаясь выполнить команду down при нулевом значении семафора. В табл. 6.2 представлены важные свойства системных
Как уже отмечалось, проблема гонок может быть решена средствами языка 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, и оба процесса продолжают работу. |