Mein Verständnis ist, dass jedes Programm, dessen Segmentregister haben die beiden LSBs Null im Kernel-Modus ausgeführt werden soll, während ein Programm, dessen Segmentregister haben die beiden LSBs = 1 wird in Benutzer ausgeführt werden, Modus. Tatsächlich definieren die beiden LSBs des Segments rgeisters das Privileged Level (0 am höchsten bis 3 am niedrigsten)
Also, um ein Programm im Kernel-Modus laufen zu lassen, müssen Sie die Segmentregister auf 0010 hex setzen (ich glaube). Ich bin mir nicht sicher, wie Sie ein Programm in diesen Speicherplatz einfügen können, ohne etwas anderes zu überschreiben - mit anderen Worten, wie stellt der Linker dies sicher? Wenn Sie den Kernel-Moduscode aus dem Benutzermoduscode aufrufen möchten, müssen Sie herausfinden, wie Parameter übergeben werden - sie verwenden nicht die gleiche Speicherkapazität, können also keine Daten nach Speicherreferenz übergeben. Ich denke, du musst es in Registern weitergeben.
Wenn jemand die Lücken in den obigen füllen kann, wäre ich sehr dankbar.
Es ist architekturabhängig und nicht unbedingt vom Betriebssystem abhängig. –