Frage

Meine Frage bezieht sich auf Daten aus dem Kernel zu einem User-Space-Programm übergeben. Ich möchte einen Systemaufruf "get_data (Größe, char * Buff, char ** meta_buf)" implementieren. In diesem Aufruf Buff wird von User-Space-Programm zugewiesen und seine Länge in der Größe Argumente übergeben. Jedoch ist meta_buf ein variabler Längenpuffer, der (in dem Benutzerraum-Programm vm Seiten) und gefüllt mit Kernel zugewiesen wird. User-Space-Programm wird diese Region befreien.

(I cant Daten im User-Space zuteilen als Programmbenutzerraum nicht Größe des meta_buff kennen. Auch Programmbenutzer Raum kann einen festen Betrag an Speicher nicht zuweisen und den Systemaufruf rufen immer wieder die gesamte Meta-Daten zu lesen. meta_data hat in einem einzigen Systemaufruf zurückgegeben werden)

  1. Wie kann ich Speicher für einen User-Space-Programm von Kernel-Thread zuzuordnen? (Ich würde sogar freuen, wenn Sie mich zu jedem anderen Systemaufruf verweisen können, die eine ähnliche Operation tut - im Kernel-Zuweisung und im User-Space zu befreien)
  2. Ist diese Schnittstelle richtig oder gibt es einen besseren Weg, es zu tun?
War es hilfreich?

Lösung

Versuchen Sie nicht, Speicher für User-Space aus dem Kernel zu verteilen - das ist eine große Verletzung der Abstraktion Schichtung des Kernels. Stattdessen ein paar andere Möglichkeiten in Betracht ziehen:

  • Haben User-Space fragen, wie viel Platz er braucht. Userspace zuordnet, dann packt den Speicher des Kernels.
  • Haben von Ihrem Fahrer direkt in den Adressraum Mmap Seiten Userspace gehört.
  • Stellen Sie eine obere auf die Menge an Daten gebunden benötigt. Nur zuteilen, dass viel.

Es ist schwer, mehr zu sagen, ohne zu wissen, Warum das hat atomar sein. Eigentlich Zuweisung Speicher unterbrechbare müssen gehen sowieso sein (oder du bist nicht erfolgreich sein), so ist es unwahrscheinlich, dass viel aus und zurück in den Kernel gehen wird weh tun. In der Tat, jeder User-Space-Speicher schreiben muss unterbrechbare sein, da es für die Seitenfehler erfordern IO das Potential ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top