In Linux, quando un processo tenta di accedere a una pagina che non ha un mapping fisico corrente (manca la voce della tabella di pagina), viene generato un errore di pagina (dalla CPU). Questo fa sì che venga richiamato il gestore degli errori di pagina di Linux. Se questo errore è "maggiore", il che significa che Linux deve leggere la pagina dal dispositivo di swap, il gestore deve leggere dal disco reale in questo caso. Poiché la lettura da un disco è asincrona (submit_bio), questo fa sì che il processo riprogramma? (E al risveglio quando l'I/O è completo?)Un errore di pagina provoca la riprogrammazione del processo di errore?
Se si ripianifica, dove è la chiamata a "schedule()"? Leggere il codice in mm/swap_state.c non mi dà la minima idea di quando (o se) questo accade.
C'è un might_sleep() chiamata a do_page_fault() (mm/fault.c) Forse che farà sì che il processo da "preempted "Più tardi - Dopo che ha presentato la biografia. – dividebyzero
@dividebyzero no 'might_sleep()' contrassegna le funzioni che potrebbero dormire, penso che tu stia cercando 'cond_resched()' – iabdalkader