@roboq6

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

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


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

Если же ресурс занят так как он содержит какую-то информацию, то можно эту информацию оттуда куда-нибудь скопировать (например в специальное место в свопе), таким образом давая возможность другим процессом пользоваться ресурсом пока данный процесс спит (т.е. находится в состоянии ожидания).
  • Вопрос задан
  • 267 просмотров
Решения вопроса 1
@herr_kaizer
Классический пример: предположим у нас есть два вида процессов - "читатели" и "писатели", причем работают данные пишутся и читаются в стек (читать и писать можно только с вершины, при завершении чтения инкремент уменьшается на 1, при завершении записи - увеличивается на 1), пишут и читают они по 4 байта.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы