2016-10-13 2 views
1

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?

+2

Welche API planen Sie verwenden, um Ihren Prozess zu unterbrechen? – jlliagre

+0

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

Antwort

0

Das Aussetzen des aktuellen Prozesses verursacht einen sofortigen Kontextwechsel. Interrupt Maskierung ist ein Teil des Kontexts, , so dass der Kontextwechsel normale Wiederaufnahme der Interruptbehandlung verursacht.

Natürlich ist Schlaf unterscheidet sich von Suspend in diesem Suspend ist viel mehr sichtbar auf Benutzerebene. Ein Prozess, der schläft, ist fast nicht von einem Prozess zu unterscheiden, der ausgeführt wird (es sei denn, Sie betrachten ps, /proc, top oder andere Überwachungstools). Ein Prozess, der angehalten wurde sieht aus wie es ist halbtot (wait() in den Eltern zurückgibt). Jedes Signal (das nicht blockiert oder ignoriert wird) kann einen Schlafprozess wecken, , aber nur SIGCONT kann einen unterbrochenen Prozess fortsetzen. (Selbst SIGTERM wird ein suspendierter Prozess ausgesetzt, verlassen, aber SIGKILL wird es töten.)

Verwandte Themen