Wenn in Linux ein Prozess versucht, auf eine Seite zuzugreifen, die keine aktuelle physische Zuordnung aufweist (fehlender Seitentabelleneintrag), wird ein Seitenfehler (durch CPU) generiert. Dies führt dazu, dass der Seitenfehlerhandler von Linux aufgerufen wird. Wenn dieser Fehler "major" ist, dh Linux muss die Seite vom Swap-Gerät lesen, muss der Handler in diesem Fall von der tatsächlichen Festplatte lesen. Da das Lesen von einer Festplatte asynchron ist (submit_bio), verursacht dies eine Neuplanung des Prozesses? (Und wachen Sie auf, wenn I/O abgeschlossen ist?)Führt ein Seitenfehler dazu, dass der fehlerhafte Prozess neu geplant wird?
Wenn eine Neuplanung stattfindet, wo ist der Aufruf von "schedule()"? Das Lesen des Codes in mm/swap_state.c gibt mir keine Ahnung, wann (oder falls) das passiert.
Es gibt eine might_sleep() -Aufruf in do_page_fault() (mm/fault.c) zu schlafen gezwungen Vielleicht „vorbelegt werden, dass der Prozess wird dazu führen, "später - Nachdem es die Bio eingereicht hat. – dividebyzero
@dividebyzero no 'might_sleep()' markiert Funktionen, die schlafen könnten, ich denke du suchst nach 'cond_resched()' – iabdalkader