Действительно ли системные вызовы являются единственным способом взаимодействовать с ядром Linux от пространства пользователя?

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

Вы не хотите, чтобы пароли были записаны в диск. Это прекрасно. Запишите им в файл, который не хранится на диске.

Много систем используют файловую систему в оперативной памяти (tmpfs) для /tmp. Солярис делал это целую вечность; дистрибутивы Linux не спешили прибывать в соединение (Fedora 18 принял его, Debian и Ubuntu все еще не сдвинулись с места), таким образом, оно обычно требует, чтобы системный администратор настроил его вручную. Однако современные дистрибутивы Linux монтируют tmpfs файловую систему где-нибудь; последние версии стандартной библиотеки требуют его. Стандартное местоположение для tmpfs /run, с /run/shm будучи мировым перезаписываемым (те же полномочия как /tmp), но некоторые дистрибутивы еще не могут иметь его; посмотрите на /dev/shm и возможно другие местоположения.

3
16.04.2014, 01:50
2 ответа
[118743]The kernel syscall API is the primary API (хотя и скрытый под libc, и редко используемый непосредственно программистами), и большинство стандартных механизмов IPC сильно смещены в сторону [119129]- все это файловый[119130] подход, который устраняет их здесь, так как в конечном счете они требуют чтения/записи (и более) вызовов.

Однако, на большинстве платформ (если исключить все системные вызовы, чтобы попасть туда) есть способ: [119131]VDSO[119132]. Это механизм, при котором ядро отображает одну (или более) слегка волшебную страницу в каждый процесс (обычно в виде ELF .so). Это можно увидеть как [119133]linux-vdso.so[119134] или аналогично с [119135]ldd[119136] или в [119137]/proc/PID/maps[119138]. Это фактически IPC с отображением на карте памяти между ядром и пользовательским процессом (хотя и односторонний в своей текущей реализации).

$host.version

Он используется для ускорения системных масштабирований в целом и был изначально реализован (

Major  Minor  Build  Revision
-----  -----  -----  --------
2      0      -1     -1
linux-gate.so

wmic /output:wmiclog.txt <command>
) для решения проблем с производительностью x86, но он также может содержать данные ядра и функции доступа к ним. Вызовы типа [119141]getcpu()[119142] и [119143]gettimeofday()[119144] могут использовать их вместо того, чтобы делать системный вызов [119145]actual[119146] и переключатель контекста ядра. Доступность этих оптимизированных вызовов обнаруживается и включается кодом запуска glibc (при условии доступности платформы). Текущие реализации содержат (только для чтения) страницу разделяемых переменных ядра, известную как "VVAR" страница, которую можно напрямую прочитать.

Вы можете проверить это, посмотрев выходной сигнал [119147]strace -e trace=clock_gettime date[119148], чтобы увидеть, делает ли Ваша команда [119149] date[119150] syscalls [119151]clock_gettime()[119152], при работающем VDSO не будет (время будет считано со страницы VVARS функцией на странице VDSO, смотрите

arch/x86/vdso/vclock_gettime. c

).

netsh interface portproxy add v4tov4 5118 127.0.0.1 8182
netsh interface portproxy add v6tov6 5118 ::1 8182

Здесь есть полезная техническая информация: [119155]http://blog.tinola.com/?e=5[119156] более подробное руководство: [119157]http://www.linuxjournal.com/content/creating-vdso-colonels-other-chicken[119158] , и man-страница: [119159]http://man7.org/linux/man-pages/man7/vdso.7.html

9
27.01.2020, 21:08
[117716] Нет. [12143]Пример тривиального счетчика, он будет взаимодействовать с ядром:[12144]Это вызовет обработчик ошибок страницы ядра, в результате чего ваш процесс получит [118192]SIGSEGV[118193] (предполагая, что компилятор не "оптимизирует" этот код, чтобы сделать что-то кроме очевидного, так как это неопределенное поведение по стандарту Си, убедитесь, что компилируете с [118194]-O0[118195])[117721].
8
27.01.2020, 21:08

Теги

Похожие вопросы