> man operating_systems
Переход на страницу  1 [2]
Модераторы: Roman I Khimov, Wanderer, Dron
Автор Добавил
captain cobalt
Пятница 13.05.2005 19:50

ID пользователя #12
Зарегистрирован: Воскресенье 04.07.2004 21:44
Местонахождение: /ru/perm
Сообщений: 144
Семафоры - это слишком низкоуровневое средство.

Невнимательное использование семафоров часто приводит к ошибкам синхронизации, среди которых самые известные:
-- race condition
-- deadlock
-- starvation

Если ошибка синхронизации допущена в системном коде, злоумышленный прикладной код в принципе может повредить системные структуры данных. Такое действительно было, в том числе в Linux.

Поэтому для повышения надёжности вместо семафоров лучше взять что-нибудь помощнее.

bluebottle.ethz.ch - Bluebottle. Швейцария. Сделано с умом.
Наверх
Сайт
Dreamer
Пятница 13.05.2005 22:24

ID пользователя #9
Зарегистрирован: Воскресенье 04.07.2004 14:01
Сообщений: 235
Всё! Заказал Таненбаума. Самое интересное, что в книге 1040 страниц. Задавит же

Жизнь на Линуксе есть!
Наверх
Dron
Суббота 14.05.2005 10:03


ID пользователя #13
Зарегистрирован: Понедельник 05.07.2004 11:16
Местонахождение: Москва
Сообщений: 651
Поэтому для повышения надёжности вместо семафоров лучше взять что-нибудь помощнее.


Что ты имеешь ввиду???
Без локов то куда??? всмысле по любому мощные средства базируются на примитивных...

Локами не стоит злоупотреблять... а проблемы существуют всегда и везде...

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

Андрей Валяев
Наверх
Сайт
captain cobalt
Суббота 14.05.2005 23:14

ID пользователя #12
Зарегистрирован: Воскресенье 04.07.2004 21:44
Местонахождение: /ru/perm
Сообщений: 144
В хороших императивных языках используется блочно-структурное программирование. Сложная структура потока управления создаётся с помощью операторов цикла, условия и вызова подпрограммы. На низком уровне это всё тоже превращается в машинные команды переходов. Однако, программирование без использования команд перехода вручную имеет огромные преимущества и ничтожные недостатки. И поэтому широко используется.

Аналогично, для синхронизации имеет смысл использовать более высокоуровневые средства, чем семафоры. Хоть эти средства и опираются на семафоры...

bluebottle.ethz.ch - Bluebottle. Швейцария. Сделано с умом.
Наверх
Сайт
Dron
Понедельник 16.05.2005 10:17


ID пользователя #13
Зарегистрирован: Понедельник 05.07.2004 11:16
Местонахождение: Москва
Сообщений: 651
Сказал тоже мне...
Это общие фразы...
Ты конкретные названия говори, чтобы интересующиеся люди (Я к примеру) могли порыть и понять что ты хочешь сказать.

Почему же в виндузе до сих пор применяются CritycalSection?

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

Андрей Валяев
Наверх
Сайт
Dreamer
Понедельник 16.05.2005 17:36

ID пользователя #9
Зарегистрирован: Воскресенье 04.07.2004 14:01
Сообщений: 235
Dron написал(а) ...
Почему же в виндузе до сих пор применяются CritycalSection?

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

Кстати, по-моему правильно Critical

Жизнь на Линуксе есть!
Наверх
Dron
Понедельник 16.05.2005 17:53


ID пользователя #13
Зарегистрирован: Понедельник 05.07.2004 11:16
Местонахождение: Москва
Сообщений: 651
Да, наврал... Critical... редко пользуюсь.
Дык никто же не изобретает велосипед, ибо не за чем...

как говорится - нефиг ибо нафиг.

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

Андрей Валяев
Наверх
Сайт
Freeman
Понедельник 16.05.2005 19:54
ID пользователя #3
Зарегистрирован: Четверг 01.07.2004 14:57
Сообщений: 207
Dron написал(а) ...
как говорится - нефиг ибо нафиг.

Поэтому пофиг.
Наверх
captain cobalt
Понедельник 25.07.2005 03:06

ID пользователя #12
Зарегистрирован: Воскресенье 04.07.2004 21:44
Местонахождение: /ru/perm
Сообщений: 144
Dron написал(а) ...
Сказал тоже мне...
Это общие фразы...
Ты конкретные названия говори, чтобы интересующиеся люди (Я к примеру) могли порыть и понять что ты хочешь сказать.
Рассмотрим, к примеру, Bluebottle.

Возьмём быка за рога и рассмотрим хрестоматийный клочок кода.
Циклическая очередь объектов.
MODULE BoundedBuffers;
TYPE
Item* = OBJECT; (* произвольный объект *)
Buffer* = OBJECT
VAR h, n: INTEGER; B: ARRAY * OF Item;

PROCEDURE Get*(): Item;
VAR x: Item;
BEGIN {EXCLUSIVE}
AWAIT(n # 0); (* буфер не пустой *)
x := B[h]; h := (h+1) MOD LEN(B); DEC(n);
RETURN x
END Get;

PROCEDURE Put*(x: Item);
BEGIN {EXCLUSIVE}
AWAIT(n # LEN(B)); (* буфер не заполнен *)
B[(h+n) MOD LEN(B)] := x; INC(n)
END Put;

PROCEDURE &Init(max: INTEGER);
BEGIN (* initializer *)
NEW(B, max); h := 0; n := 0
END Init;
END Buffer;
END BoundedBuffers.

Имеется два примитива синхронизации - EXCLUSIVE и AWAIT.

Модификатором EXCLUSIVE помечаются блоки BEGIN ... END
Среда исполнения гарантирует, что когда один процесс исполняет EXCLUSIVE-блок объекта, ни один процесс не сможет выполнить другой EXCLUSIVE-блок этого же объекта. Для реализации этого внутри объекта заводится блокировка - бинарный семафор.

AWAIT - это оператор ожидания. Ему в качестве параметра передаётся булевское выражение. Если условие ложно, процесс блокируется до тех пор, пока оно не станет истинным. Оператор AWAIT всегда должен располагаться внутри EXCLUSIVE-блока. Когда процесс блокируется на невыполненном условии, блокировка объекта временно снимается и другие процессы могут входить в EXCLUSIVE-блоки чтобы установить условие.

Каждый раз, когда управление выходит из EXCLUSIVE-блока, если есть ожидающие на этом объекте AWAIT-ы, их условия перевычисляются. Если найдено истинное условие, блокировка объекта не снимается, а атомарно передаётся найденному ожидающему процессу, который при этом переводится в состояние готовности. Когда он в следующий раз попадёт на процессор, условие будет выполнено так как процесс обладает блокировкой на объект (предполагается, что доступ к критическим переменным защищён EXCLUSIVE).

Снова смотрим на исходник. Всё кристально ясно?

Глюк: не вставляется форматированный код.
<span class='smallblacktext'>[ Редактирование понедельник 25.07.2005 03:19 ]</span>

bluebottle.ethz.ch - Bluebottle. Швейцария. Сделано с умом.
Наверх
Сайт
Переход на страницу  1 [2]  

Перейти:     Наверх

Транслировать сообщения этой темы: rss 0.92 Транслировать сообщения этой темы: rss 2.0 Транслировать сообщения этой темы: RDF
Powered by e107 Forum System

© OSRC.info, 2004-2010.
Авторские права на любые материалы, авторы которых явно указаны, принадлежат их авторам. По вопросам публикации таких материалов обращайтесь к авторам.
Авторские права на любые другие материалы принадлежат OSRC.info.
Сайт является помещением библиотеки. Копирование, сохранение на жестком диске или иной способ сохранения произведений осуществляются пользователями на свой риск.
При использовании материалов сайта ссылка на OSRC.info обязательна.