Multitasking Abstraction Layer / iOS 4 Konzept adaptieren



  • Umfrage: Nette Spielerei oder doch Müll den Apple mir eingetrichtert hat?

    Auswahl Stimmen Prozent
    Klingt interessant 8 88.9%
    In meinen Augen einfach nur Müll 1 11.1%

    Die Entwicklung eines Betriebssystems ist ein hartes Unterfangen, was viel Vorarbeit und Überlegungen braucht. So auch das Multitasking.

    Ein Kumpel, der mir bei der Entwicklung hilft, hat mir vorgeschlagen, nicht (nur) das Round-Robin-Scheduling zu nutzen, sondern auch was anderes zu nutzen, um ressourcenschonend zu arbeiten. Bisher war die Überlegung, nicht alle Programme immer "gleichzeitig" im Hintergrund zu halten, sondern verschiedene Schichten/Layer für diese parat zu halten:

    • Layer 0 - Freeze: Ein Programm, welches nicht den "Fokus" hat, wird im Hintergrund gefreezed, solange es nicht wieder angefordert wird, oder per IPC (Inter Process Communication) eine Request o.ä. bekommt.
    • Layer 1 - Queue: Ein Programm, welches noch etwas erledigen will im Hintergrund kann dies tun und wird daraufhin auf Layer 0 geschickt, wenn nichts mehr in der "Action-Queue" ist.
    • Layer 2 - Native: Ein Programm bleibt in "echtem" Multitasking und kann immer auf alles reagieren.

    Es sollte verständlich werden, dass durch dieses "Fake"-Multitasking ressourcenschonend gearbeitet werden kann. Dies ist für PC unrelevant, aber für mobile Endgeräte dann doch ausschlaggebend.
    Dies waren so kurze Schmierereien von gestern Abend. Ich würde gerne eure Meinungen darüber wissen und Vorschläge, was man implementieren kann.

    Gruß,
    Chris

    PS: Dieses Konzept ist durch Apples iOS inspiriert, und teils adaptiert. Änderungen vorbehalten. 😃



  • Hm, letztendlich heißt das doch einfach nur, dass sich ein Prozess schlafen legen kann, oder? Das ist jetzt nichts wirklich revolutionäres, sondern dürfte in jedem OS vorhanden sein.



  • taljeth schrieb:

    Hm, letztendlich heißt das doch einfach nur, dass sich ein Prozess schlafen legen kann, oder? Das ist jetzt nichts wirklich revolutionäres, sondern dürfte in jedem OS vorhanden sein.

    Die Überlegung war ja in diesem Fall dann, dass die Programme es nicht nur können, sondern müssen, falls diese nicht "zeitkritisch" sind. Allzu revolutionär mag dieses Konzept noch nicht erscheinen, durch eine gute Implementierung kann man jedoch was Effektives ausarbeiten.


  • Mod

    Hier findest du die aktuell verwendeten Scheduling-Varianten: http://wiki.osdev.org/Scheduling_Algorithms

    Multi-Layer, Multi-Queue, Multi-... ist normal bei dispatcher/scheduler. Die frage ist, was man damit anfängt. Der Algo entscheidet.



  • Allerdings macht das Konzept nur Sinn, wenn möglichst wenig Anwendungen in Layer 2 laufen. Ich würd bei Programmen in Layer 1 nicht das ganze Programm laufen lassen, sondern für die Queue einen neuen (Hintergrund-)Prozess starten und den Hauptprozess schlafen legen.

    // EDITH: Ich habe die in ICQ geadded Erhard.



  • welche programme fallen dir für die verschiedenen layer ein?



  • Layer 0: Textverarbeitung, IDEs, Dateibrowser
    Layer 1: Twitter-Client, Mail-Client
    Layer 2: Browser, IRC-Client, Messenger, Audiostream, Entpackprogramm



  • inwiefern hat es einen vorteil, die anwendung ganz zu stoppen, wenn sie eh nichts tut?


  • Mod

    Jede Task hat eine zeitscheibe. "Nichtstun" kostet auch CPU-Zeit bei Zuteilung.



  • Wenn ich das richtig verstehe, soll Prozessen auf Layer 0 gar keine CPU-Zeit mehr zugeteilt werden.



  • Das siehst Du nicht richtig, denn es wurde gesagt, das es nur gefreezed wird, wenn es "nicht den Fokus hat". Wenn es den Focus hat, also beispielsweise im Vordergrund ist, dann wird gerechnet.



  • Ah gut, ich hab es so aufgefasst, dass Programme den Layer wechseln. Naja gut, aber dann wird den Layer-0-Programmen im Hintergund keine CPU-Zeit zugewiesen, oder?



  • @erhard
    Jede Task hat eine zeitscheibe. "Nichtstun" kostet auch CPU-Zeit bei Zuteilung.

    die aussage entspricht nicht den tatsachen. nichtstun kostet auch nichts. wenn es das doch tut, ist das ein fehler in der implementierung.

    um die ganze sache zusammenzufassen: das zeug ist nicht neu und ist im endeffekt die standardimplementierung. jedes os macht das so und das sogar vollkommen automatisch, ohne dass irgendwelche layer explizit angegeben werden müssen. diese ganze sache ist nichts anderes als wieder mal ein versuch von apple, etwas komplett alltägliches als von ihnen erfunde entwicklung darzustellen. bitte fallt nicht auf pr-gags und werbekampagnen rein.


  • Mod

    Interessant wird es erst, wenn konkrete Aussagen zu Größe der Zeitscheibe und Priorität bezüglich der Zeit oder des Warteranges bis zur Zuteilung erfolgen. Wann komme ich als Task wieder dran und wieviel zusammenhängende CPU-Zeit erhalte ich dann?



  • Es kommt drauf an was man als "Nichtstun" bezeichnet. Gerade GUI Anwendungen besitzen meistens eine Schleife, in der nur Eingaben abgefragt werden. Solange keine Eingaben da sind tut das Programm also nichts, verbraucht aber CPU-Zeit.

    Schön wäre es natürlich wenn das Programm beim Abfragen von Eingaben blockiert und Schlafen gelegt wird, aber es gibt auch Situationen wo das nicht das gewünschte Verhalten ist. Also muss man beides anbieten und dem Anwendungsentwickler vertrauen, dass er die richtige Variante wählt. Bei einem Handy kann man davon ausgehen das sich die Anwendungen auf viel GUI und wenig Hintergrundberechnungen beschränken, und so das richtige Verhalten erzwingen, in dem man halt immer das Programm schlafen legt wenn es nicht den Fokus hat, und so keine Eingaben erwarten kann.


Anmelden zum Antworten