0

Предположим, что у вас есть два процесса: P1 и P2. P1 имеет высокий приоритет, P2 имеет низкий приоритет. P1 и P2 имеют один общий семафор (то есть оба они выполняют ожидания и сообщения на одном и том же семафоре). Процессы могут чередоваться в любом произвольном порядке (например, P2 может быть запущен до P1).О тупике в Linux и Windows

Кратко объяснить, может ли тупик процессы, когда:

II. оба процесса выполняются в системе Linux в качестве задач совместного использования времени

iii. оба процесса запускаются в системе Windows 7 как переменные задачи

iv. оба процесса работают в системе Windows 7 как задачи реального времени.

Я думаю, что P1 и P2 могут привести только к инверсии приоритета. Согласно одному из требований тупика (Circular wait: существует круговая цепочка из двух или более процессов, ожидающих ресурса, удерживаемые другими процессами), инверсия приоритета не равна тупиковой ситуации. Кроме того, P1 и P2 имеют только 1 семафор, что означает, что кругового движения не будет, поэтому они никогда не вызовут взаимоблокировки. Поэтому все ответы будут отрицательными. Правильно ли это? Если нет, то какой ответ?

ответ

0

Вы правы, без взаимоблокировки возможен только один семафор.

Тупик для двух процессов может произойти только в том случае, если P1 содержит некоторый ресурс, необходимый для P2, и требует ресурса, удерживаемого P2. Таким образом, P1 не может продолжаться до тех пор, пока P2 не освободит ресурс, а P2 не сможет продолжить, пока P1 не освободит ресурс. Таким образом, они оба застревают друг друга, но не позволяют друг другу двигаться вперед. Как вы уже упоминали, circular wait condition не может быть выполнен с одним семафором.

Кроме того, P1, ожидающий освобождения ресурса P2, не является инверсией приоритета. Приоритетная инверсия происходит, когда Px имеет приоритет между P1 и P2, а P1 ожидает, что P2 освободит ресурс, а P2 ждет Px, поскольку он имеет более высокий приоритет. Таким образом, P1 ожидает, что Px имеет более низкий приоритет, несмотря на то, что он не предназначен для использования (без общих ресурсов или чего-то еще).