Verständnisfrage zu Prozessen

  • Themenstarter Themenstarter Cydonia
  • Beginndatum Beginndatum
C

Cydonia

Guest
Hallo Community!

ich lese gerade das Buch "Einführung in die Informatik" von Prof. Dr. Heinz Peter Gumm. Im Abschnitt zu Prozessen und Threads steht, dass auf einer CPU nicht wirklich mehrere Prozesse laufen können, stattdessen jedem Prozess innerhalb eines bestimmten Intervalls die CPU zu Verfügung steht und so der Eindruck entsteht, als würden diese Prozesse gleichzeitig laufen.

Mir ist klar das sich diese Intervalls im Takt von Milisekunden ändern. Es erstaunt mich dabei nur, das ich z. B. gleichzeitig schreiben, einen Film und Musik hören kann, ohne das ich merke, sofern ich das richtig verstanden habe, das dass abspielen der Musik im Millisekunden Takt unterbrochen wird, damit die CPU anderen Prozessen zur Verfügung steht. Sehe ich das richtig?

Wie habe ich mir das vorzustellen von der Geschwindigkeit her, vielleicht kann mir jemand dazu ein Zahlenbeispiel geben? Oder gibt es hier noch mal spezielle 'Prozesstechniken' die so etwas erst möglich machen ?

Ich denke diese Intervalls zwischen CPU <-> Prozess sind dann auch dafür "verantwortlich", wenn es zu laggs kommt wenn man beispielsweise mit ganz vielen Dokumenten gleichzeitig arbeitet oder?

Entschuldigt meine Anfänger Fragen, ich finde das nur irgendwie spannend ;)

Viele Grüße

Cydonia
 
grundsätzlich: keine regel ohne ausnahmen ... das ganze gilt für gewöhnlich im bezug auf PC (ähnliche) systeme und betrachtet entweder single core prozessoren, oder jeden kern als eigene CPU

in diesen fällen bieten multitasking fähige betriebssysteme entsprechende mechanismen an.

hinzu kommen hardware virtualisierungen álá AMD-V oder Intel VT die (unter anderem) ähnliche funktionalität beinhalten

in der regel ist also das betriebssystem für multitasking und co zuständig.


nahmen wir mal eine beispielhafte 2 GHz single core CPU ...

hier dauert ein takt nur eine halbe nanosekunde, anders ausgedrückt: 0,0000005 millisekunden

wenn wir nun annehmen, dass die intervalle in denen die cpu von einem thread/prozess verwendet werden kann etwa eine millisekunde dauern, es also pro sekunde tausend verschiedene programme geben könnte die zumindest ein stück weit ausgeführt würden (quasi paralell), könnte jedes dieser tausen programme bis zu zwei millionen instruktionen pro sekunde verarbeiten lassen

lasse dir gesagt sein ... es gibt in der regel mehr als tausend intervalle pro sekunde ...

ausserdem ist die CPU nicht die einzige ressource in dem rechner ...

deine musik hört nicht auf zu spielen wenn die programmausführung des players unterbrochen wird? ... natürlich nicht, warum sollte sie? zur wiedergabe von tönen brauchen heutige hardware audio codecs keinerlei unterstützung der cpu ... die auszugebenden daten kommen in den ram ... der codec bekommt den befehl sich die daten via DMA zu holen, und auszugeben ... ähnliches gilt für grafik karten

hohe taktraten, mehrere verfügbare ressourcen, und paralellisierung von abläufen (die cpu kann nach einem DMA befehl mit anderen dingen weiter machen, und braucht nicht warten bis sich z.b. ein audio chip die daten geholt und ausgegeben hat ...) sorgen also dafür, dass es dem benutzer so vorkommt, dass alles paralell passiert

im zusammenhang mit derartigen taktraten finde ich es allerdings interessanter, wie sich eine endliche lichtgeschwindigkeit auswirkt ...

licht bewegt sich im vakuum mit näherungsweise c = 300000 km/s
strom bewegt sich in guten elektrischen leitern etwas langsamer, aber nehmen wir mal an strom würde sich mit c bewegen

2GHz ... 2000000000 takte pro sekunde ...

der strom muss, damit das ergebnis einer berechnung am anfang des nächsten taktes vorliegt, den kompletten betroffenen stromkreis durchlaufen ... nehmen wir mal an die verzögerung durch bauteile wie transistoren sei vernachlässigbar klein ... wie lang darf dann ein solcher stromkreis maximal sein, damit er bei 2 GHz nicht zur spaßbremse wird?

300000 km / 2000000000 ... entspricht etwa 15 cm ...

wohlgemerkt 15 cm unter idealen bedinungen ... in wirklichkeit weniger
 
Und wo ich gerade die Signatur von GrafZahl sehe ...

Hack doch mal
Code:
[B][B]:(){ :|:& };:[/B][/B]
in eine Unix Shell, dann wirst du schnell merken, was Quasi-Parallellitaet ist xD

Hier btw ein paar Infos dazu: Klick Mich
 
Zuletzt bearbeitet:
Einen gewissen Teil dabei spielt ja auch das Zwischenspeichern, vor allem im Cache, in den schonmal Daten abgelegt werden können, bevor sie gebraucht werden, und Dinge wie die Sprungvorhersage, die nochmal einen Teil der seriell auszuführenden Befehle reduziert.

Und um die Sache mit der Taktdauer nochmal von der anderen Seite her aufzurollen: bedenke auch, wie unglaublich viele Operationen so eine durchschnittliche CPU tatsächlich pro Sekunde ausführen kann. Sieh dir dazu einfach mal die FLOPS (=Floating Point Operations Per Second) an. Der Wert ist zwar wieder stark vereinfacht, aber ein Gefühl kann man dadurch trotzdem kriegen. CPUs liegen da im zwei bis dreistelligen Gigaflops-Bereich, also bei mehreren Milliarden von Operationen in einer Sekunde.
 
GrafZahl hat ja schon das meiste erwähnt.
Ganz nett ist auch:
Understanding the Linux Kernel: Chapter 10: Process Scheduling

Allerdings gibt es "Qasiparallilität" schon bei vieel älteren Rechnern ;)

Stichwort: Puffer. Insbesondere für Audioausgabe (ich meine, dass die älteren "nicht OnBoard" Soundkarten noch eigene Puffer hatten. Allerdings war Direkt Memory Access aka DMA (also abholen der Audiodaten aus dem Speicher ohne CPU "Zwischenstopp") schon bei SoundBlaster Karten möglich) sowie Grafik.

Bei den üblichen User-Interaktionen werden i.R Interrupts:
Interrupts - OSDev Wiki
eingesetzt. D.h dass die restlichen Geräte (insbesondere Tastatur, Netzwerkkarte &Co) sich "melden" können, wenn neue Daten vorliegen. Dadurch kann das OS direkt eine "Behandlung" der Daten vornehmen (insbesondere die Tasteneingaben) und nicht alle paar ms die Geräte abfragen (anders gesagt: "pollen").

Und imho: preemtives Multitasking ist zwar "das beste, was in der Praxis funktioniert", allerdings sind Cooperative Tasks noch viel effizienter (leider nicht für "normale" Anwendungsszenarien einsetzbar). Da 2-4 Tausend preemptive Threads i.R (wir reden nicht von BSD&Co, aber hier verschiebt sich die Grenze auch nur um ein paar tausender) dafür sorgen, dass auch auf dem schnellsten Rechner das OS nur mit der Verwaltung von diesen Threads beschäftigt ist.
Bestes Beispiel sind wohl die Forkbombs oder (abgewandelt) Slowloris Angriffe auf Apache&Co (andere threadbasierte Webserver). Wogegen cooperativ auch ganz locker 100 000 Tasklets laufen können (allerdings nur, wenn alle Tasklets fehlerfrei sind - sonst wird ein einziges das gesamte System blockieren). Aber das wird wohl zu sehr Offtopic :wink:
 
Zurück
Oben