Angenommen, ich habe einen Systemaufruf ABC erstellt.Können wir einen Prozess innerhalb eines Systemaufrufs anhalten?
syscall ABC()
{
int mask = disable(); // to disable interupt
....
pid // pid of calling process
if(some condition){
suspend(pid);
}
....
restore(mask); // restore interupts
}
Wenn ABC aus unserem Programm und aufgrund einiger Kriterien aufrufen, muss ABC Systemaufruf Suspend aufrufen. Was wird dann passieren? Da Interrupts deaktiviert sind, kann kein anderer Prozess den Kontext wechseln und ein aktueller Prozess befindet sich im Suspend-Zustand. Ist es in einem Single-Core-Prozessor ein hängender Zustand? Weil es keinen Prozess gibt, um den aktuellen Prozess fortzusetzen. Bitte korrigieren Sie mich, wenn ich falsch liege.
Statt Suspend können wir Schlaf verwenden. Gibt es einen Unterschied, während Sie eine Änderung vornehmen?
Welche API planen Sie verwenden, um Ihren Prozess zu unterbrechen? – jlliagre
Eigentlich habe ich das Betriebssystem nicht erwähnt. Es ist "Xinu", das Linux sehr ähnlich ist, aber nicht erweiterbar (hauptsächlich für den akademischen Zweck). Und ich arbeite in Xinu-System (Kernel), so gibt es suspend.c-Datei (API), die Suspend-Funktion enthält (die direkt auf die Prozesstabelle zugreift und auf ihren Eintrag zugreift). – Django