Prozessverwaltung

Hallo,

Ich versuche jetzt ein paar Sachen zu erklären:

Also, ein Scheduler ist dafür zuständig die Prozesse der CPU zuordnen.

Es gibt 2 Grundsysteme: kooperatives Multitasking(Der aktive Prozess gibt von sich aus die CPU nach einem bestimmten Zeitpunkt frei) und verdrängendes Multitasking(Der Scheduler kann einem aktiven Prozess die CPU entziehen(durch Timer-Interrupt z.B.)).

Scheduler-Strategien:

  • first come - first serve: Also nach dem Prinzip „Wer zuerst kommt, malt zuerst“, d.h. je früher der Prozess da ist, desto früher wird ihm die CPU zugeteilt.

  • Prioritätssteuerung: jedem Prozess wird eine Priorität hinzugeteilt. Je höher diese ist, desto früher wird dem Prozess die CPU zugeteilt.

  • round robin(zeitverschiebeverfahren): Die Prozesse sind in der Warteschlange, diese wird durch „Wer zuerst kommt, malt zuerst“ angeordnet oder? Je früher ein Prozess kommt, desto weiter vorne steht er in der Warteliste.
    Und dann gibt es eine Zeitschlitz, d.h. wenn dieser 20ms wäre, dann wird der 1. Prozess 20ms die CPU bzw. Ressourcen zugeteilt und dann stellt er sich hinten in der Warteschlange an --> 2. Prozess kommt für 20ms dran usw.

Stimmt das was ich bisher gesagt habe? Fehlt noch etwas, was noch wichtig zu sagen wäre?

Wie ist denn das? Wird nach 20ms ein Timer-Interrupt ausgelöst, d.h. round robin wird nur beim verdrängenden Multitasking verwendet?

Bei Prioritätssteuerung und first come - first serve, wenn der Prozess die CPU zugeteilt wird, wie lange wird da der Prozess ausgeführt? Bis er fertig ist? Oder wie geht das genau? Wie hängt das zusammen?

„Scheduling als arbeiten mit Listen“:

Ok ich weiß nur das es eine Prozess-Tabelle gibt. Wie werden die Prozesse da angeordnet? Sind die irgendwie in der Tabelle angeordnet? Diese Prozesse in dieser Tabelle sind mit Pointern verbunden, also einfach eine einfach verkettet Liste. Und in welche Reihenfolge wird verkettet? Also wie anordnen?

Es gibt da Ready-, Blocked-, und Free-Listen, d.h. nur Prozesse die Ready sind in die Ready-List, die Blocked sind die Blocked-List usw., richtig?

Naja erstmal das hier verstehen, vielleicht weiß ich dann genau wie gemischtes Scheduling und watch Dog funktioniert.

Bitte helft mir!

Danke.

Moin,

schau Dir mal eine reine Zeitscheiben- und eine reine Vorrangsteuerung an und frag Dich, was da alles an Verklemmungen passieren kann, dann wird es leichter zu verstehen, warum nur Mischformen die Kundschaft zufriedenstellen.

Es gibt da Ready-, Blocked-, und Free-Listen, d.h. nur
Prozesse die Ready sind in die Ready-List, die Blocked sind
die Blocked-List usw., richtig?

ob richtig oder nicht (früher hießen die mal anders), interessant ist doch eher die Frage, wozu es diese Listen gibt.

Gruß Ralf

Hallo Fragewurm,

Also, ein Scheduler ist dafür zuständig die Prozesse der CPU
zuordnen.

OK

Es gibt 2 Grundsysteme: kooperatives Multitasking(Der aktive
Prozess gibt von sich aus die CPU nach einem bestimmten
Zeitpunkt frei) und verdrängendes Multitasking(Der Scheduler
kann einem aktiven Prozess die CPU entziehen(durch
Timer-Interrupt z.B.)).

OK, die Bezeichnung „kooperatives Multitasking“ wurde mal von MS eingeführt…

Scheduler-Strategien:

  • first come - first serve: Also nach dem Prinzip „Wer zuerst
    kommt, malt zuerst“, d.h. je früher der Prozess da ist, desto
    früher wird ihm die CPU zugeteilt.

Da gibt’s schon die erste Variante einer Priorisierung. Normalerweise wird ein Task hinten an die Queue angehängt, aber man kann einen Task bevorzugen, indem er zuvorderst in der Queue eingefügt wird :wink:

  • Prioritätssteuerung: jedem Prozess wird eine Priorität
    hinzugeteilt. Je höher diese ist, desto früher wird dem
    Prozess die CPU zugeteilt.

Eine reine Prioritätssteuerung ist eine Form des kooperativen Multitaskings. Der Prozess mit der höchsten Priorität behält die CPU, bis er sie angibt.

  • round robin(zeitverschiebeverfahren): Die Prozesse sind in
    der Warteschlange, diese wird durch „Wer zuerst kommt, malt
    zuerst“ angeordnet oder? Je früher ein Prozess kommt, desto
    weiter vorne steht er in der Warteliste.
    Und dann gibt es eine Zeitschlitz, d.h. wenn dieser 20ms wäre,
    dann wird der 1. Prozess 20ms die CPU bzw. Ressourcen
    zugeteilt und dann stellt er sich hinten in der Warteschlange
    an --> 2. Prozess kommt für 20ms dran usw.

Wie ist denn das? Wird nach 20ms ein Timer-Interrupt
ausgelöst, d.h. round robin wird nur beim verdrängenden
Multitasking verwendet?

Round Robin ist mehr eine Verwaltungsgeschichte.
Wenn ein Task die CPU abgibt, oder abgeben muss, kommt der nächste in der Queue dran.

Bei Prioritätssteuerung und first come - first serve, wenn der
Prozess die CPU zugeteilt wird, wie lange wird da der Prozess
ausgeführt? Bis er fertig ist? Oder wie geht das genau? Wie
hängt das zusammen?

Eine Prioritätssteuerung mach eigentlich nur Sinn, bei einem verdrängenden System!
Der Task mit der höchsten Priorität, welcher zudem Ready ist, bekommt die CPU.
Praktisch hat man dann aber meistens ein Round Robin Timeslice für Tasks mit der selben Priorität. Aktuell abgearbeitet wird dann immer die gefüllte Queue der höchsten Priorität.

„Scheduling als arbeiten mit Listen“:

Ok ich weiß nur das es eine Prozess-Tabelle gibt. Wie werden
die Prozesse da angeordnet? Sind die irgendwie in der Tabelle
angeordnet? Diese Prozesse in dieser Tabelle sind mit Pointern
verbunden, also einfach eine einfach verkettet Liste.

Meistens verwendet man mindestens doppelt verkettete Listen, weil man dann schneller ein Element aus der Liste entfernen/einfügen kann.

Und in
welche Reihenfolge wird verkettet? Also wie anordnen?

Da gibt es unterschiedliche Varianten. Einfache Varianten auf MicroControllern können schon mal mit Tabellen arbeiten.

Wie schon angesprochen sind es meistens mehrfach doppelt verkettet Listen.

Eine Verkettung ist für die Task-Queue, also für das Round Robin.

Eine andere entsprechend der Task-ID. Wenn ein Ereignis eintritt, muss diese an den entsprechenden Task geleitet werden. Ein wildes durchsuchen aller Queues wäre zu zeitaufwändig.

Und was der Entwickler sonst noch alles für wichtig hält…

Es gibt da Ready-, Blocked-, und Free-Listen, d.h. nur
Prozesse die Ready sind in die Ready-List, die Blocked sind
die Blocked-List usw., richtig?

Bei einer Prioritätssteuerung hat man meist für jede Prioritätsebene eine eigene Liste mit den Ready-Tasks, welche dann Round Robin abgearbeitet wird.

Blocked- oder Waiting-Queue hat man meist nur eine.

Ich hoffe das hilft die mal fürs Erste.

MfG Peter(TOO)