1
Offtopic / bitte löschen
« am: 08. January 2006, 02:53 »
sry, für den Thread,
bitte löschen
bitte löschen
20. April 2024, 11:51
Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.
Es gibt Prozesse und Threads.
Jeder Prozess besitzt mindestens einen Thread.
Der Prozess ist die Umgebung, also der virtuelle Adressraum, bei einem Prozesswechsel muss also das Register CR3 verändert werden.
Jeder Prozess "hat" ein Objekt, das diesen repräsentiert. Mit diesem Objekt wird ein Prozess verwaltet, es beinhaltet Angabe über die Prozess ID, die Basispriorität des Prozesses, sowie die zum Prozess gehörigen Threads.
Ein Thread ist ein Faden im Prozess, der zu dessen Ausführung beiträgt.
Jeder Thread benötigt seinen eigenen Stack und seinen eigenen CPU-Status.
Auch jeder Thread "hat" ein Objekt, das diesen repräsentiert und durch den er verwaltet wird.
Dieses beinhaltet Angaben, über die Thread ID, den CPU-Status, den Zustand des Threads (aktiv/blockiert/wartend/etc.), seine Normalpriorität und seine aktuelle Priorität.
Was hat es nun mit den Prioritäten auf sich und wie wird was verwaltet?
Also, durch Normalpriorität und Basispriorität wird durch Addition dem Thread eine Maximalpriorität zugeordnet.
Bei der Verwaltung geht es um die Zuteilung der CPU-Zeit (Systeme mit mehrern Prozessoren, werden fürs erste außen vor gelassen). Die Verwaltung der CPU-Zeit erfolgt auf Thread-Basis, da sie es sind, die CPU-Zeit beanspruchen.
Alle aktiven Threads werden in einer Priority Queue (priorisierte Warteschlange) verwaltet.
Die Priorität, nach der das entschieden wird, ist die aktuelle Priorität, die sich im Laufe verändert und bei Erzeugung des Threads auf die Maximalpriorität gesetzt wird.
Die CPU-Zeit erhält immer der Thread, der in der Warteschlange ganz vorne steht.
Dieser wird der Warteschlange entnommen (und irgendwo zwischengespeichert).
Die CPU-Zeit wird zerteilt, das heißt z.b. jede 1/512 Sekunde kommt der Scheduler zum Einsatz.
Hierbei, wird die aktuelle Priorität des laufenden Threads dekrementiert (um 1 erniedrigt).
Desweiteren wird überprüft, ob nun ein anderer Thread vorne steht oder der aktuelle Thread blockiert ist.
Der Thread wird in die Liste eingefügt (oder nicht, falls blockiert).
Der neue Thread wird aus der Warteschlange genommen und falls nötig ein CR3-switch durchgeführt und der neue CPU-Status geladen.
Wenn ein Thread Priorität von 0 erreicht, wird zu den aktuellen Prioritäten der aktiven Threads die Maximalpriorität addiert, dies hat Leider einen Zeitaufwand von n * log n, da die Queue neu geformt werden muss, gibt es verbesserungsvorschläge?
grep -c /bin/bash /etc/passwd
grep -l 'DEFINITION MODULE' /programme/*
rm -Rf <Verzeichnisname>
void main() {
UINT* pData = new UINT[384 * 1024 * 1024];
for (;;)
for (int i = 0; i < 384 * 1024 * 1024; i += 1024)
pData[i] = 0;
}