Aufgrund der Einschränkung der CPU-Berechtigungen ist die Kommunikation zwischen dem Linux-Benutzerstatus und dem Kernelstatus bei der Interprozesskommunikation nicht so einfach, wie man es sich vorstellt. Dieser Artikel befasst sich mit den Kommunikationsmethoden zwischen dem Linux-Benutzerstatus und dem Kernelstatus. Wenn wir Code schreiben, greifen wir normalerweise über Systemaufruffunktionen im Benutzerbereich auf den Kernelbereich zu. Dies ist die am häufigsten verwendete Art der Kommunikation zwischen Benutzerbereich und Kernelbereich. (Weitere Informationen zum Linux-Benutzermodus und Kernelmodus finden Sie unter xx) Darüber hinaus gibt es vier weitere Möglichkeiten:
procfs(/proc) Eine Datei, die wir in diesem Verzeichnis sehen, ist tatsächlich eine Kernelvariable. Der Kernel verwendet dieses Verzeichnis, um seine internen Informationen in Form von Dateien anzuzeigen. Dies entspricht dem Verzeichnis Beispielsweise stellen die gemeinsamen root@ubuntu:~# ls /proc/ 1 1143 1345 1447 2 2292 29 331 393 44 63 70 76 acpi diskstats irq sperren sched_debug sysvipc zoneinfo 10 1145 1357 148 20 23 290 332 396 442 64 7019 77 asound dma kallsyms mdstat schedstat thread-selbst 1042 1149 1361 149 2084 2425 291 34 398 45 65 7029 8 Buddyinfo Treiber Kcore Meminfo SCSI Timer_Liste 1044 1150 1363 15 2087 25 3 3455 413 46 66 7079 83 Bus Execdomains Schlüssel Sonstiges Selbst Timer_Stats 1046 1151 1371 16 2090 256 30 35 418 47 6600 7080 884 cgroups fb Schlüsselbenutzer Module slabinfo tty 1048 1153 1372 17 21 26 302 36 419 5 67 71 9 cmdline Dateisysteme kmsg mountet softirqs Betriebszeit 11 1190 1390 18 22 27 31 37 420 518 6749 72 96 Konsolen fs kpagecgroup mtrr stat Version 1126 12 143 182 2214 28 32 373 421 524 68 73 97 CPU-Info Interrupts Kpagecount Net Swaps Versionssignatur 1137 1252 1434 184 2215 280 327 38 422 525 69 74 98 Krypto iomem kpageflags pagetypeinfo sys vmallocinfo 1141 13 144 190 2262 281 33 39 425 5940 7 75 985 Geräte ioports loadavg Partitionen sysrq-trigger vmstat Wie Sie sehen, gibt es viele Dateien, die durch Zahlen dargestellt werden. Dabei handelt es sich eigentlich um die Prozessdateien, die im aktuellen System ausgeführt werden. Die Zahlen stellen die Prozess-ID (PID) dar. Jede Datei enthält alle Konfigurationsinformationen des Prozesses, einschließlich Prozessstatus, Dateideskriptoren, Speicherzuordnung usw. Werfen wir einen Blick darauf: root@ubuntu:~# ls /proc/1/ attr/ cmdline environ io mem ns/ pagemap schedstat stat timer Autogruppierung, Komm, Exe, Grenzwerte, Mountinfo, Numa_Maps, Persönlichkeit, Sitzungs-ID, Statm, Uid_Map auxv coredump_filter fd/ loginuid mounts oom_adj projid_map setgroups status wchan cgroup cpuset fdinfo/ map_files/ mountstats oom_score root/ smaps syscall clear_refs cwd/ gid_map Karten net/ oom_score_adj sched Stapel Aufgabe/ Zusammenfassend lässt sich sagen, dass der Kernel seine Systemkonfigurationsinformationen nacheinander in Dateien verfügbar macht. Einige dieser Dateien sind schreibgeschützt, andere beschreibbar und wieder andere ändern sich dynamisch. Wenn eine Anwendung beispielsweise eine sysctl Das uns bekannte sysctl ist ein Linux-Befehl. Seine Funktionen und Verwendung können Sie Es verwendet im Wesentlichen immer noch Dateilese- und -schreibvorgänge, um die Kommunikation zwischen Benutzermodus und Kernelmodus abzuschließen. Es verwendet ein Unterverzeichnis von procfs gibt hauptsächlich schreibgeschützte Daten aus, während die meisten von sysctl ausgegebenen Informationen schreibbar sind. Beispielsweise verwenden wir normalerweise Für denselben Vorgang stellt Linux auch die Datei sysfs Sysfs ist ein virtuelles Dateisystem, das in Linux 2.6 eingeführt wurde. Es verwendet auch die Datei Sysfs kann nicht nur Geräte- und Treiberinformationen aus dem Kernelspeicher lesen, sondern auch Geräte und Treiber konfigurieren. Sehen wir uns an, was sich unter # ls /sys Block Bus Klasse Dev Geräte Firmware FS Hypervisor Kernel Modul Leistung Es ist ersichtlich, dass diese Dateien grundsätzlich eng mit den Geräten und Treibern des Computers zusammenhängen. Die genaue Bedeutung dieser Dateien können Sie selbst herausfinden, daher werde ich hier nicht näher darauf eingehen. Netzlink Netlink ist die am häufigsten verwendete Methode zur Kommunikation zwischen dem Linux-Benutzermodus und dem Kernelmodus. Unterstützung ist erst ab Linux-Kernel 2.6.14 verfügbar. Es handelt sich im Wesentlichen um einen Socket, und die von regulären Sockets verwendete Standard-API gilt auch für ihn. Um beispielsweise einen Netlink-Socket zu erstellen, können Sie die folgende Socket-Funktion aufrufen: #include <asm/types.h> #include <sys/socket.h> #include <linux/netlink.h> netlink_socket = Socket (AF_NETLINK, Sockettyp, Netlink-Familie); Der flexible Ansatz von Netlink ermöglicht die Verwendung in Nachrichtenübermittlungssystemen zwischen dem Kernel und verschiedenen Benutzerprozessen, wie etwa Routing-Subsystemen, Firewalls (Netfilter), IPSec-Sicherheitsrichtlinien usw. Verlängerung: Zusammenfassen Für die Kommunikation zwischen dem Linux-Benutzermodus und dem Kernelmodus gibt es vier Hauptwege, von denen Netlink und Procfs die gängigsten sind. Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. |
<<: Detaillierte Erläuterung der Deep Copy und Shallow Copy im JS-Variablenspeicher
>>: C# implementiert MySQL-Befehlszeilensicherung und -wiederherstellung
Der Zweck des Schreibens von Skripten besteht dar...
1. MySQL installieren Dieser Artikel wird über AP...
Verwaltung der Ein- und Ausgaben im System 1. Ver...
Inhaltsverzeichnis 1. Verwandte Binlog-Konfigurat...
Kontroverse um Nofollow Zwischen Zac und Guoping ...
Frage Die Angabe des Typs der hochgeladenen Datei...
In diesem Artikel erfahren Sie, wie Sie mit Canva...
Inhaltsverzeichnis 1. Öffnen Sie das Projektverze...
In diesem Artikel wird der spezifische Code für J...
Vorwort In diesem Artikel wird hauptsächlich ein ...
Dank unserer umfassenden CSS-Erfahrung als Webdesi...
<br />Hallo zusammen! Es ist mir eine Ehre, ...
1. Entpacken Sie nginx-1.8.1.tar.gz 2. Entpacken ...
Der erste Schritt besteht darin, einen MySQL-Cont...
Installation und Konfiguration von MySQL8.0.22 (s...