Betriebssysteme wenden verschiedene Strategien an, um Hunger bei Ressourcenzuweisungsprozessen zu verhindern. Hunger tritt auf, wenn einem Prozess wiederholt den Zugriff auf eine Ressource verweigert wird, obwohl er seine Arbeit ausführen kann. Hier ist eine Aufschlüsselung gemeinsamer Techniken:
1. Prioritätsbasierte Zeitplanung mit Alterung:
* Das Problem: Prozesse mit hoher Priorität können Ressourcen kontinuierlich monopolisieren, wodurch verhindern, dass Prozesse mit niedrigerer Priorität jemals die Chance haben, zu laufen und möglicherweise Hunger zu verursachen.
* Die Lösung - Alterung:
* Konzept: Erhöhen Sie im Laufe der Zeit die Priorität von Prozessen, die lange gewartet haben, um eine Ressource zu erwerben.
* Implementierung: Das Betriebssystem erhöht regelmäßig die Priorität von Warte Prozessen. Dies stellt sicher, dass auch Prozesse mit niedriger Priorität letztendlich zum Laufen berechtigt werden.
* Beispiel: Ein Vorgang, der auf die CPU -Zeit wartet, kann alle paar Takten auf die Priorität gestoßen werden. Schließlich wird es zum höchsten Prioritätsprozess und wird geplant.
2. Faire Warteschlange und gewichtete faire Warteschlange:
* Das Problem: Prozesse, die dieselbe Ressource anfordern, können unvorhersehbare Zuteilungen erhalten, was möglicherweise einige wiederholt gegenüber anderen gegenüber bevorzugt.
* Die Lösung - Faire Warteschlange:
* Konzept: Garantieren Sie jedem Prozess einen angemessenen Anteil einer Ressource im Laufe der Zeit.
* Implementierung:
* Prozesse, die auf eine Ressource warten, werden in eine Warteschlange gestellt.
* Die Ressource wird den Prozessen in fairer Weise zugeteilt, häufig mit Round-Robin oder ähnlichen Planungsalgorithmen.
* Jeder Prozess erhält eine Zeitscheibe (oder eine andere Ressourcenquote), bevor ein anderer Vorgang eine Kurve erhält.
* Gewichtete Fair -Warteschlange (WFQ):
* Konzept: Eine Variation der fairen Warteschlange, bei der jedem Prozess ein Gewicht zugewiesen wird, das den relativen Anteil der Ressource bestimmt.
* Implementierung:
* Prozesse mit höheren Gewichten erhalten proportional größere Scheiben der Ressource.
* Dies ermöglicht die Priorisierung wichtiger Prozesse und stellt dennoch sicher, dass andere Prozesse einen gewissen Zugriff erhalten.
3. Ressourcenzuweisung mit Deadlock -Verhütung/Vermeidung:
* Das Problem: Deadlock kann zum Hunger führen. Wenn Prozesse auf die Ressourcen des anderen warten, können einige auf unbestimmte Zeit blockiert werden. Selbst wenn die Deadlock gebrochen ist, könnten dieselben Prozesse wiederholt als Opfer ausgewählt werden, was zu Hunger führt.
* Die Lösung:
* Deadlock Prevention: Entwerfen Sie das Ressourcenallokationssystem strukturell, um die Bedingungen zu beseitigen, die Deadlock verursachen. Dies könnte:
* gegenseitige Ausschluss -Eliminierung (normalerweise nicht machbar): Ermöglichen Sie es, dass Ressourcen gleichzeitig von mehreren Prozessen verwendet werden.
* Halten und Wartenprävention: Erfordern Sie einen Prozess, um alle Ressourcen gleichzeitig anzufordern oder alle gehaltenen Ressourcen freizugeben, bevor Sie mehr anfordern.
* Keine Vorstellung: Erlauben Sie dem Betriebssystem, Ressourcen gewaltsam von einem Prozess zu entfernen (wenn der Prozess eine Ressource enthält, die ein anderer Prozess benötigt und auf eine andere Ressource wartet).
* Kreislaufwartprävention: Ressourcentypen eine Gesamtbestellung auferlegen und verlangen, dass Prozesse Ressourcen in aufsteigender Reihenfolge anfordern.
* Deadlock Vermeidung: Überwachen Sie den Ressourcenzuweisungszustand dynamisch und vermeiden Sie es, Ressourcen zuzuweisen, wenn dies zu einem Deadlock führen könnte. Der Algorithmus des Banker ist ein häufiges Beispiel.
* Warum dies hilft: Durch das Vermeiden von Deadlocks stellt das Betriebssystem sicher, dass die Ressourcen schließlich für Warte Prozesse freigegeben und zur Verfügung gestellt werden, wodurch die Wahrscheinlichkeit einer unbestimmten Blockierung verringert wird.
4. Reservierungsbasierte Systeme:
* Das Problem: Prozesse können von anderen für den Zugang zum Ressourcen kontinuierlich übertroffen werden.
* Die Lösung:
* Konzept: Erlauben Sie Prozessen, Ressourcen im Voraus zu reservieren.
* Implementierung:
* Ein Prozess kann eine garantierte Zuweisung einer Ressource für einen bestimmten Zeitraum anfordern.
* Das Betriebssystem stellt sicher, dass die Ressource verfügbar ist, wenn der Prozess sie benötigt.
* Warum dies hilft: Reservierung verhindert, dass ein Prozess wiederholt den Zugriff verweigert wird, da er nicht mit den unmittelbaren Anforderungen anderer Prozesse konkurrieren kann. Es sorgt für ein bestimmtes Mindestdienstniveau.
5. Lotterieplanung:
* Das Problem: Prozesse können in zufälligen Zuordnungsschemata durchweg unglücklich sein.
* Die Lösung:
* Konzept: Geben Sie Prozesse "Lotteriekarten" für eine Ressource. Das Betriebssystem wählt zufällig ein Ticket aus, und der Prozess, der dieses Ticket hält, erhält die Ressource.
* Implementierung:
* Jedem Prozess wird eine Reihe von Tickets zugewiesen, die proportional zu seiner Bedeutung oder seinem Bedarf proportional sind.
* Das Betriebssystem enthält eine Lotterie, um zu bestimmen, welcher Prozess die Ressource erhält.
* Warum dies hilft: Während es immer noch möglich ist, dass ein Prozess in einer einzigen Lotterie unglücklich wird, werden im Laufe der Zeit Prozesse mit mehr Tickets statistisch einen größeren Anteil an der Ressource erhalten, wodurch eine dauerhafte Verweigerung des Dienstes verhindert wird. Je mehr Tickets ein Prozess hat, desto höher ist die Gewinnchance. Sogar Prozesse mit wenigen Tickets haben eine Gewinnchance ungleich Null, was einen vollständigen Hunger verhindern.
6. Rückkopplungsmechanismen:
* Das Problem: Statische Planungsalgorithmen passt möglicherweise nicht gut an sich ändernde Systembedingungen.
* Die Lösung:
* Konzept: Überwachen Sie die Leistung von Prozessen und passen Sie die Ressourcenzuweisung entsprechend an.
* Implementierung:
* Das Betriebssystem verfolgt, wie lange Prozesse auf Ressourcen gewartet haben.
* Wenn ein Prozess auf eine übermäßige Zeit gewartet hat, kann das Betriebssystem seine Priorität erhöhen, mehr Ressourcen zuweisen oder zu einem anderen Planungsalgorithmus wechseln.
* Warum dies hilft: Mit Rückkopplungsmechanismen kann das Betriebssystem dynamisch auf Hungersituationen reagieren und Korrekturmaßnahmen ergreifen.
wichtige Überlegungen:
* Overhead: Alle diese Lösungen sind mit etwas Overhead ausgestattet. Die Komplexität des Algorithmus wirkt sich auf die CPU -Verwendung aus, und die Verfolgung der Wartezeiten erfordert Speicher.
* Fairness vs. Effizienz: Oft besteht ein Kompromiss zwischen Fairness (Verhinderung von Hunger) und Effizienz des Gesamtsystems. Ein vollkommen faires System ist in Bezug auf den Durchsatz möglicherweise nicht das effizienteste.
* Kontextspezifisch: Der beste Ansatz zur Verhinderung des Hungers hängt von der zugewiesenen spezifischen Ressource, der Art der Prozesse und den Gesamtsystemzielen ab. Ein Echtzeit-Betriebssystem (RTOS) hat strengere Anforderungen als ein allgemeines OS.
Zusammenfassend verwenden Betriebssysteme eine Vielzahl von Techniken, häufig in Kombination, um Hunger zu verhindern und sicherzustellen, dass alle Prozesse schließlich die Ressourcen erhalten, die sie benötigen, um ihre Aufgaben zu erledigen. Der Schlüssel besteht darin, Fairness, Effizienz und die spezifischen Anforderungen des Systems auszugleichen.