![Какому процессу возвращен результат из ядра?](https://rvso.com/image/52097/%D0%9A%D0%B0%D0%BA%D0%BE%D0%BC%D1%83%20%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D1%83%20%D0%B2%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%89%D0%B5%D0%BD%20%D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%20%D0%B8%D0%B7%20%D1%8F%D0%B4%D1%80%D0%B0%3F.png)
Когда процесс требует действий, требующих режима ядра, он использует системный вызов. Итак, как результаты возвращаются процессу?
решение1
ПРИМЕЧАНИЕ:ВСЯ НИЖЕПРИВЕДЕННАЯ ИНФОРМАЦИЯ ВЗЯТА С УКАЗАННОГО САЙТА
Отэтотссылку, я нашел следующую информацию.
Асистемный вызовэто интерфейс между приложением пользовательского пространства и службой, которую предоставляет ядро. Поскольку служба предоставляется в ядре, прямой вызов не может быть выполнен; вместо этого необходимо использовать процесс пересечения границы пользовательского пространства/ядра.
Использование системного вызова
Давайте рассмотрим, что необходимо для их использования из приложения пользовательского пространства. Существует два способа использования новых системных вызовов ядра. Первый — это удобный метод (не то, что вы, вероятно, захотите делать в производственном коде), а второй — традиционный метод, требующий немного больше работы. С помощью первого метода вы вызываете новые функции, идентифицируемые по их индексу через функцию syscall. С помощью функции syscall вы можете вызвать системный вызов, указав его индекс вызова и набор аргументов. Например, короткое приложение, показанное ниже, вызывает ваш, sys_getjiffies
используя его индекс.
#include <linux/unistd.h>
#include <sys/syscall.h>
#define __NR_getjiffies 320
int main()
{
long jiffies;
jiffies = syscall( __NR_getjiffies );
printf( "Current jiffies is %lx\n", jiffies );
return 0;
}
Как вы можете видеть, функция syscall включает в качестве своего первого аргумента индекс таблицы системных вызовов для использования. Если бы были какие-либо аргументы для передачи, они были бы предоставлены после индекса вызова. Большинство системных вызовов включают символическую константу SYS_ для указания их сопоставления с _НРиндексы. Например, вы вызываете индекс __NR_getpid с помощью системного вызова как:
syscall( SYS_getpid )
Функция syscall зависит от архитектуры, но использует механизм передачи управления ядру. Аргумент основан на отображении _NR индексирует SYSсимволы, предоставленные /usr/include/bits/syscall.h
(определяются при сборке libc). Никогда не ссылайтесь на этот файл напрямую; вместо этого используйте /usr/include/sys/syscall.h
.