2012-05-22 2 views
1

Предположим, что есть процесс, который пытается войти в критическую область, но поскольку он занят каким-то другим процессом, текущий процесс должен его дождаться. Итак, в то время, когда процесс добавляется в очередь ожидания семафора, предположим, что произойдет прерывание (ex-battery finished), тогда что будет с этим процессом и очередью ожидания?Прерывание при размещении процесса в очереди ожидания

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

И затем он вернется к процессу, который помещает процесс в очередь.

Просьба дать некоторые советы/предложения по этому вопросу.

+3

Ответ на этот вопрос во многом зависит от дизайна ОС. Ваша ОС может просто прекратить все выполнение в тот момент или батарея может разрядиться до того, как ОС выполнит всю экономию данных. Слишком мало информации. –

ответ

0

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

Для Java см API для Thread.interrupt()

Прерывания эту тему.

Если текущий поток не прерывает себя, что всегда разрешено, вызывается метод checkAccess этого потока, что может вызвать выброс SecurityException.

Если этот поток заблокирован вызовом wait(), wait (long) или wait (long, int) методов класса Object или join(), join (long), join (long, int), sleep (long) или sleep (long, int), методы этого класса, затем состояние его прерывания будет очищено и оно получит InterruptedException.

Если этот поток заблокирован в операции ввода-вывода по прерывистому каналу, тогда канал будет закрыт, статус прерывания потока будет установлен, и поток получит исключение ClosedByInterruptException.

Если этот поток заблокирован в Селекторе, тогда будет установлен статус прерывания потока, и он немедленно вернется из операции выбора, возможно, с ненулевым значением, как если бы был вызван метод пробуждения селектора.

Если ни одно из предыдущих условий не было выполнено, статус прерывания этого потока будет установлен.

Прерывание нити, которая не жива, не нуждается в каком-либо эффекте.

1

Это очень аппаратное обеспечение/OS зависимых, однако несколько мыслей:

Как уже упоминалось в комментариях, а «батареи закончил» прерывание может рассматриваться как частный случай, просто потому, что машина может выключите, не предпринимая никаких действий, и в этом случае процессы + очередь исчезнут. В целом, однако, если предположить, что прерывание и возобновление работы не является фатальным прерыванием и ОС, я думаю, что вряд ли будет какое-либо заметное влияние на выполнение любого процесса.

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

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

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

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