2015-03-13 2 views
0

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

ответ

0

Приложение представляет собой набор процессов, выполняющих разные коды.

Допустим, что в приложении есть 2 процесса - A и B. A и B хотят получить доступ к определенному файлу - «play.txt» альтернативным способом. Я имею в виду, что A обращается первым, а затем B, а затем A и так далее.

Операционная система не имеет представления об этом порядке выполнения. OS знает только о процессах ядра, поэтому пользователь должен реализовать его. Пользователь будет использовать семафоры в своей программе, которые будут прочитаны ОС, чтобы узнать все о двух процессах.

2

Семафор - это переменная или абстрактный тип данных, который используется для управления доступом несколькими процессами к общему ресурсу в параллельной системе, такой как операционная система мультипрограммирования.

Полезный способ думать о семафоре - это запись того, сколько единиц определенного ресурса доступно в сочетании с безопасными операциями (то есть без race conditions) отрегулировать эту запись, поскольку единицы измерения требуются или становятся свободными, и , при необходимости дождитесь появления единицы ресурса. Семафоры являются полезным инструментом в предотвращении условий гонки;

Courtesy

0

Семафор представляет собой тип данных, предоставляемых ОС, которая используется для синхронизации процессов.
Семафор имеет две атомные операции (атомные средства либо выполняются полностью, либо вообще не работают) wait и signal.dust, поскольку эти два контекстных переключателя операций не происходят, поскольку они являются атомарными.
Программист должен реализовать эти операции, чтобы ОС не переключилась в контекст во время некоторой важной операции. проблема-считыватель.

ПРИМЕЧАНИЕ. - Операционная система очень сложна, концепции ОС - дать нам представление о работе операционной системы. Но текущая работа системы может быть такой же, как и с каждым десятилетием обновление компьютерной системы в отношении ОС, а также аппаратных средств .OS реализует различные концепции, чтобы поддерживать его работу и обеспечить лучшее использование ЦП.

0

Sempahore используется для защиты доступа к структуре данных, разделяемой между двумя более независимыми потоками или процессами. Вы можете встретить фразу «критическая область», используемая в описаниях семафора; игнорируй это. Вы не защищаете код с помощью семафора, вы защищаете общие структуры данных.

Скажет у вас есть эти переменные:

int savings; 
int house_payment; 

и вы хотите переместить некоторые деньги из накопительного ведра в ведро house_payment. Пока это происходит, другой процесс должен знать ваш баланс в банке и баланс ссуды.

Процесс А берет платеж, вычитая стоимость сбережений. Процесс А затем добавляет значение в ведро house_payment.

Теперь предположим, что процесс B должен проверить баланс нагрузки и ваш сберегательный баланс. Поскольку процессы не синхронизированы, процесс B просматривает значения в момент времени A, который удаляет деньги из ваших сбережений, но до того, как процесс A может добавить платеж в ваш house_payment.

Что касается процесса В, то сберегательное ведро имеет слишком мало денег, а ведро house_payment недостаточно. Ваши деньги на оплату дома теряются в пути. Если процесс B затем снова выглядит, магически недостающие деньги появляются в ковре house_payment.

Для защиты от этого окна используется семафор. Процесс A берет семафор при передаче денег и освобождает семафор после того, как деньги помещаются в ведро house_payment.

Процесс B берет семафор перед доступом к сбережениям и ведрам house_payment и освобождает семафор, когда это делается.

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

В настоящее время операционная система не может знать, когда применять семафорную охрану. Это то, что приложение должно управлять.

0

Да, операционная система должна заботиться о проблемах доступа, и семафоры просто помогают ей это делать. Попытайтесь понять это так: Существует железная дорога, и есть 4 поезда (скажем, поезд A, B, C, D), ожидающий доступа к железной дороге. Теперь условие состоит в том, что только один поезд может получить к нему доступ в данном экземпляре. Итак, что делает мастер станции, дает каждому водителю поезда лампочку. Если лампочка поезда (скажем, поезд А) включена, это означает, что поезд А имеет разрешение на использование железной дороги. В то время как A использует дорогу, поезд B, C, D будет ждать (в очереди ожидания) с выключенными лампочками. Протокол, когда поезд A выполняется по дороге, он выключает лампу и следующий поезд в очереди (скажем, поезд B), получает свою лампочку включенной и использует дорогу. Это продолжается, пока все поезда в очереди не получат шанс.

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

Смежные вопросы