poll_schedule_timeout
poll()
ist ein Systemaufruf 1, der zur Behandlung von E / A verwendet wird. Es ist ähnlich wie select()
. 2
Anwendungen, die nicht blockierende E / A verwenden, verwenden diese Aufrufe, um festzustellen, ob sie aus einer Datei lesen oder in eine Datei schreiben können, ohne sie blockieren zu müssen. Sie werden häufig für Eingabe- / Ausgabestreams verwendet, die möglicherweise nicht blockiert werden (andernfalls würde sich Ihre Maus möglicherweise nicht mehr bewegen).
Der Wartekanal poll_schedule_timeout
zeigt an, dass eine Task auf E / A wartet, entweder Hardware wie Tastaturen und Mäuse, Audiogeräte oder sogar Netzwerk-Sockets.
- Eine Funktion im Kernel
- Sie sind in definiert
<linux/poll.h>
. poll
Wurde eine Implementierung erstmals in System V gesehen, select
entspricht dies BSD UNIX.
futex_wait_queue_me
:
Um dies zu erklären, müssen wir uns Locks anschauen. Eine Sperre ist ein gespeicherter Status im System, der angibt, dass eine Aufgabe mit einer Ressource zusammenarbeitet. Es kann zum Beispiel nur eine Aufgabe geben, die eine Datei liest. Diese Task würde die Datei sperren. Jede andere Task 1 , die versucht, die Datei zu lesen, würde wissen, dass sie gesperrt ist, und warten, bis die Sperre aufgehoben ist, bevor sie darauf zugreifen kann. Das gleiche passiert für die Prozessorzeit.
Moderne Linux-Versionen (auf den meisten Architekturen) verwenden eine Futex-Sperre (Fast Userspace Mutex) im Kernel. Mutex, gegenseitiger Ausschluss, bezieht sich auf die Idee, dass auf eine gemeinsame Ressource jeweils nur von einer Aufgabe zugegriffen werden kann. Hierzu werden im System Flags gesetzt.
Wenn ein Prozess auf eine gesperrte Ressource wartet, wird dies als Beschäftigt-Warten
oder "Drehen" bezeichnet. Dies bezieht sich auf die Tatsache, dass er immer wieder versucht, auf sie zuzugreifen, bis dies möglich ist. Eine Aufgabe wird blockiert, wenn sie sich dreht.
FUTEX Schlösser kann als eine Zahl in User - Space gedacht werden, die von einer Aufgabe inkrementiert oder dekrementiert werden kann (in Fällen , in denen die Ressource kann durch mehrere Aufgaben zugegriffen werden kann, kann diese Zahl größer geworden ist als eins). Dies ist die in Abbildung 4 gezeigte Zahl .
Diese Aufgaben werden in die Warteschlange eingereiht , eine einfache Warteschlange mit Aufgaben, die etwas Arbeit erledigen müssen. Sobald Verarbeitungszeit verfügbar ist, erledigen die Aufgaben ihre Arbeit und werden aus der Warteschlange entfernt.
futex_wait_queue_me
stellt eine Aufgabe in die Warteschlange. Es wartet dann auf ein Signal, eine Auszeit oder ein Aufwecken. Aufgabe, in diesem sind Warte Kanal warten nicht auf der Warteschlange, warten sie eine Warteschlange eingereiht werden.
- Eine Aufgabe kann entweder ein Prozess 3 oder ein Thread 2 sein
- Ein Thread ist ein Unterabschnitt eines Prozesses. Viele Threads können parallel laufen
- Ein Prozess ist ein vollständiges Programm, das aus einem oder mehreren Threads besteht, obwohl ein Programm auch aus mehreren Prozessen bestehen kann.
- Denken Sie daran, dass dies immer noch eine sehr allgemeine Sicht der Dinge ist und nicht die Implementierungsdetails berücksichtigt