Autor Thema: Timer-Interrupt  (Gelesen 26871 mal)

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #20 am: 25. December 2004, 14:28 »
Ich sag ja alles eine Frage der Implementierung
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #21 am: 25. December 2004, 17:51 »
Counterstrike benutzt ja auch DX. Und da pinselt das direkt über die Hardware und nicht über nen Task :)

Versteift euch aber nicht einfach so auf die Anzahl der Taskwechsel.

Die meistens Tasks sind die größte Zeit idle. Und dann kommen ja auch noch Prioritätsklasse hinzu.

18,2 mögliche wechsel pro Sekunde ist klar zu wenig.
Aber man muss auch nicht 1000 und mehr haben. Der Timerint kann ja 1000 mal pro Sek aufgerufen werden. Aber das heisst nicht das damit auch 1000 mal pro Sek der task gewechselt werden muss.

Der Timerinterupt ist ja ursprünglich nicht umbedingt dazu gedacht gewesen für das Task-Switchen verantwortlich zu sein. In zeiten des Preemptiven Taskwechselns ist er dafür passender Weise "missbraucht" worden :)
----------------------
Redakteur bei LowLevel

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #22 am: 26. December 2004, 12:05 »
Ich hab 250 Mal nen Taskhandleraufruf, je nach Priorität wird dann gewechselt oder eben noch einmal Zeit gegeben^^.
Counterstrike läuft ja auch meistens auf Monolithischen Kerneln;)
Der Sinn von Microkerneln ist ja alles gesondert zu machen und damit die Sicherheit zu erhöhen.
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #23 am: 26. December 2004, 13:48 »
Das ist nicht korrekt ROshi :)

Windows2k/XP benutzen einen Microkernel.
Es stehen für jede Verwaltungsaufgabe sogenannte Server bereit. Und das sind im Grunde auch nur Tasks die die arbeit übernehmen.

Aber trotzdem ist DirectX in der Hinsicht eine gute erweiterung.
Weil gerade Spiele etc die DirectX nutzen laufen meist eh exklusiv im Fordergrung und warum sollte man diesen dann nicht den direkten Zugriff auf die Hardware geben? Erhöht die Geschwindigkeit enorm und lässt den Verwaltungsaufwand der Server weg.

Aber es muss jeder für sich entscheiden wie er sein OS aufbauen will :)
----------------------
Redakteur bei LowLevel

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #24 am: 26. December 2004, 14:36 »
Tut mir leid, wenn ich hiermit mal kurz komplett OT gehe, aber das WindowsXP ein richtiger Microkernel ist, wage ich zu bezweifeln. Nachdem, was ich so darüber gelesen habe, würde ich es vielmehr als "microkernel ähnlich" bezeichnen.

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #25 am: 26. December 2004, 14:58 »
Sehe ich auch so, Win XP usw ist definitiv kein vollständiger Microkernel, es sind lediglich Ansätze davon vorhanden. Vieles bleibt Monolithisch.
Das es sind macht einigen Anwendungen dann direkten Hardwarezugriff zugeben sehe ich ja ein, ich werde das ja auch so machen.^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #26 am: 26. December 2004, 15:05 »
über was ihr euch so streitet ;-)
ich fänds/finds am besten (und so werd ich es machen), dass jeder task eine stufe von 0 bis 2 hat (0=system,1=hardwarenahe,sowas, wie ICQ,2=normales proggy) und wenn dann ein task im vordergrund läuft, dann werden alle tasks auf ebene 2 außer ihm auf "pausiert" geschaltet, sodass nurnoch die wichtigen system-dienste und die sachen, die auf ports aus sind laufen. das erhöht die rechenzeit für den task (z.B. CounterStrike), außerdem können programme, die ja auf etwas warte, wie z.B. einen eingang an port xyz den ja in ner schleife auslesen, und wenn da nix drinne ist gleich wieder mit dem intaufruf zurückgeben, oder aber sich einen neuen task machen, den mit dem int verknüpfen, dass aufgerufen wird, wenn an dem port was ankommt, und sich dann schlafen legen, und das int weckt sie dann wieder. das spart mehr zeit. denn, was will ich mit einem AKTIVEN word, wenn ich CounterStrike zocke, dann benutz ich es ja net, und dann kann ich es auch gleich pausieren, denn das wartet ja auf nix, während ich aber vielleicht trotzdem noch in ICQ verfügbar sein will...

mfg

JN!
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #27 am: 26. December 2004, 17:14 »
Joachim deine Idee hat einen kleinen Schönheitsfehler.

Angenommen du pausierst alle anderen Tasks, dann könnten Tauschbörsen, ICQ etc im Hintergrund garnicht weiterlaufen während du zockst....ob das so vom User gewollt ist?

Es würde genügen den Task für das Zeichnen der Fenster zu pausieren, weil das ja in dem Moment in dem ein Task im Vollbild läuft eh fürn Fuss wäre, wenn im Hintergrund Fenster neu gezeichnet werden würden.
Abgesehen davon das es sich mit jenem ins Gehege kommen würde, da es ja selbst über eine API mit der hardware kommuniziert.
----------------------
Redakteur bei LowLevel

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #28 am: 26. December 2004, 17:25 »
achtung: fehler!!!  ich hab gesagt, dass ich nur proggys pausiere, wie z.B. Word, die auf ebene 2 laufen. ICQ und Co. würden auf ebene 1 laufen, und die werden nicht abgeschaltet!
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #29 am: 26. December 2004, 18:32 »
Hiho,

@joachim_neu:
Wenn Word im Hintergrund ist, macht es doch sowieso nichts...
Es wartet auf Nachrichten, und währenddessen wird es vom Kernel nicht in Scheduling einbezogen. ICQ hängt ja auch nur so rum, bis ein Timer ne Message schickt, das z.B. der Onlinestatus abgefragt werden soll.

Also kriegt sowieso nur jedes Programm Rechenzeit, wenn es sie benötigt...

MfG GhostCoder
A man, a legend!

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #30 am: 26. December 2004, 19:14 »
Jedenfalls würde ich das nicht so pauschal abgrenzen.

Daher wenn ein Programm exklusiv im Fordergrund (Vollbild) ist, einfach die NeuZeichen-Messages der anderen Programm solange auf die lange Bank schieben bis das exklusive Programm beendet wird, oder vom Vollbild runtergeht.
----------------------
Redakteur bei LowLevel

 

Einloggen