Как ждать внутри системного вызова в Minix 3

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

while (var != desired_value)
{
    // wait
}

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


person user1615148    schedule 10.03.2013    source источник


Ответы (2)


Конечно, в Minix есть неблокирующий механизм ожидания:

#include <sys/types.h>
#include <sys/wait.h>

pid_t wait(int *status)
pid_t waitpid(pid_t pid, int *status, int options)

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

waitpid предоставляет альтернативный интерфейс для программ, которые не должны блокироваться при сборе состояния дочерних процессов или которые хотят ожидать одного конкретного дочернего процесса.

Minix предоставляет POSIX, поэтому вы можете использовать fork, exec и т. д. для управления процессами.

person ymn    schedule 08.05.2013

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

person Rafalini    schedule 07.12.2019