Nein, innerhalb der DPCs sind die INTs an aber die DPCs stellen wimre die höchste Priorität dar so das selbst Prozesse mit sehr hoher Priorität von unwichtiger HW (bzw. von deren schlechten Treibern) verdrängt werden können.
Das macht das Problem für mich noch unverständlicher. Ich weiß das es unter WinXP definitiv nicht auftritt, bei Win7 x86 bin ich mir nicht sicher, aber ich bin mir sicher das es ein Treiber-Problem ist. Auf meinem Laptop wo auch Win7 x64 läuft, habe ich diese Probleme nicht. Diese Latency Probleme sind aber von Gerät zu Gerät unterschiedlich. Deswegen liegt es irgendwo am Konzept bzw. den Treibern (unter Linux scheint es die Probleme ja nicht zu geben).
Die Priorität von HW-Geräten und deren IRQs sollte meiner Meinung nach von der Priorität der gerade erfüllten Aufgaben abhängen.
Hmm, darüber müssen wir diskutieren
Also ich bin der Meinung alle IRQs sollten erstmal behandelt werden, damit es halbwegs schnell weitergehen kann. Allerdings habe ich bei mir auch die Möglichkeit die Priorität der IRQs festzulegen. Da würde es dann schon Sinn machen diese Priorität auch an die IRQ-Handler weiterzugeben.
Der Treiberprogrammierer weiß doch noch gar nicht welche Anforderungen später mal zur Laufzeit zu erfüllen sind.
Da bin ich halt anderer Meinung. Um mal dein Bsp. mit dem MP3-Player, der im Hintergrund läuft, aufzugreifen. Ich möchte eigentlich auch da das es zu keinen Aussetzern kommt, dann läuft halt z.B. die Kompilierung langsamer, aber die Musik läuft durchgehend. Das meine ich mit Latenz und das der Treiberprogrammierer die kennen sollte.
An diesem Bsp. sieht man halt gut, worauf jeder Wert legt. Mir ist es wichtig das die Daten dann zum entsprechenden Zeitpunkt in die Hardware kommen, auch wenn dafür ein Prozess mit höherer Priorität (ausgehend von einem MP3-Player im Hintergrund und einer Kompilierung um Vordergrund) verdrängt wird.
Ich muss aber zugeben, dass ich absolut keine Ahnung habe wie das genau mit den Treibern (am Bsp von Soundkarten) genau funktioniert. Sprich ob man z.B. wie du es immer meinst, einfach nen riesigen Buffer an den Treiber übergeben kann oder nicht.
Um es nochmal deutlich zu sagen, es geht mir dabei um den Treiber, nicht um das Programm welches die Daten für den Treiber erzeugt.
Die Frage ist aber: ist es das was Du wirklich willst? Wäre es nicht besser wenn die die wichtigen HW-Geräte eine höhere Priorität als die weniger wichtigen HW-Geräte haben?
Im Prinzip passiert das ja schon so automatisch. Denn die Threads der IRQ-Handler werden definitiv in der Reihenfolge ausgeführt in der die IRQs auftreten (FIFO). Die Zeitscheibe sollte dann im Schnitt lang genug sein, dass die meisten Handler schon vorher abgeben (da sollten doch eigentlich ein paar ms reichen oder?).
Wäre es nicht besser wenn die die wichtigen HW-Geräte eine höhere Priorität als die weniger wichtigen HW-Geräte haben? Und wäre es nicht praktisch wenn die Priorität der HW-Geräte sich dynamisch nach der Wichtigkeit der von ihnen momentan bearbeiteten Aufgaben richtet?
Jein
Wie gesagt, ich betrachte z.B. Audio/Video als verdammt wichtig, da macht es schon nen Unterschied ob da alles zur richtigen Zeit passiert. Wenn die Tastatur/Maus die Daten mal ein "wenig" (ms, aber ich denke eher weniger) später zur Anwendung schicken kann, ist eher verschmerzbar. Genauso HDD/ODD. Deswegen sollte halt der Treiberprogrammierer entscheiden können (bzw. halt die Priorität der IRQs) wie wichtig für das Gerät die Latenz ist.
Problem dabei ist natürlich, dass man entweder nen QM für Treiber braucht (was für ein Hobby-OS vllt noch geht, aber wenn man mal davon ausgeht das man kleiner als MS ist und nicht alle Treiber kontrollieren kann, geht es halt nicht) oder den Programmierern alles vorschreiben muss (und das geht auch nicht wirklich).
Gleiche Prinzip ist, dass ein Programm sich einfach in die höchste Priorität packen kann und schon setzt man die meisten/alle Mechanizmen aus, die eigentlich greifen sollen für ne gute User Experience.
Deswegen sollte man halt auch ganz deutlich wissen worauf man sein OS spezialisieren will (was auch ein Problem von Linux auf dem Desktop ist und wo Windows es teilweise besser macht).
Ich würde eher sagen das der Scheduler dann O(n/2) o.ä. ist weil es ja doch recht wahrscheinlich ist das einer der nächsten Threads auf der gerade aktuellen CPU als letztes gelaufen ist
Ist O(n/2) nicht gleich O(n)?
Ich komme bei der O-Notation immer durcheinander und finde die auf nem Rechner sowieso eher unpraktikabel, weil wenn man streng nach der Theorie geht, ist aufm Rechner alles O(1).
Stimmt, die Cache-Problematik sollte bei einem Single-Sockel-System gar nicht mal so schlimm werden da ja bei Intel und auch bei AMD die letzte Cache-Ebene immer für alle Cores gemeinsam gilt, kritisch werden wohl erst Mehr-Sockel-Systeme.
Das will ich bei mir durch "einige" Scheduler lösen (im Mom sind es 2, werden aber mind. 3). Zur Bootzeit wird dann entschieden welcher Scheduler genommen wird, das wird aber automatisch gemacht und kann vom User nicht so wirklich beeinflusst werden (es sei denn er deaktiviert im BIOS irgendwelche CPUs oder Kerne).
Die meisten ARM-MultiCore-SoCs haben üblicherweise pro Core einen kleinen L1-Daten-Cache und einen kleinen L1-Code-Cache aber zusätzlich noch einen großen und gemeinsamen L2-Cache für alles, von daher denke ich dass das Cache-Problem bei den heutigen ARM-MultiCore-SoCs nicht allzu bedeutend ist.
Ich sollte mich so langsam echt mal in ARM einlesen. Denn ich stelle mir gerade die Frage, woher weiß man auf ARM eigentlich wie viele Cores vorhanden sind? Es gibt ja nicht sowas wie ACPI.