MichiLee: Betriebssystemfragen

Beitrag lesen

Hi,
danke Udo.
Mein Hauptverständnisproblem liegt wie ihr alle seht bei der Frage 1. Den Rest der Antworten kommentiere ich nicht, da ich Eure Antworten verstanden habe.

Das Rechenwerk ist das Ding, das schlicht und ergreifend genau dies tut: Rechnen. Der Stapelspeicher gehört IMHO nicht dazu.

Oki, das verstehe ich noch:-)

Der Progammzähler enthält die Speicheradresse (RAM oder ROM) des nächsten Befehls (oder auch Daten), was ausgeführt wird. Richtig?

Fast, er enthält die Adresse des nächsten Befehls. Punkt. Er zeigt nicht auf Daten, dafür gibt es andere Register. (Er kann natürlich auf eine Speicherzelle zeigen, die ein Datum enthält und keinen Befehl, nur ist dann halt Katastrophe, Absturz, Weltuntergang.)

Und dieser (Stinknormale Befehl wie addiere, subrahiere usw.) Befehl steht im Arbeitsspeicher ne?

Im Befehlsregister wird der nächste zu auszuführende Befehl abgelegt abgelegt inkl. Inhalt der Speicherstelle im Hauptspeicher. (So steht es bei uns im Script.) D.h., der Programmzähler zeigt auf den Befehlsregister, wenn hier die Befehle drin sind?

Nein, das Befehlregister wäre das Register im Prozessor, in dem der gerade zu bearbeitende Befehl steht. Dieser Befehl wurde anhand des Programmzählers aus dem Speicher kopiert.

Aha ok. Anhand des Programmzählers wird der nächste Befehl (wie oben beschrieben) vom Speicherbereich oder Zelle in den Befehlsregister kopiert.
Der Befehlsregister hat nun ein Befehl und muss sich nun die Daten auch dazu irgendwie heranziehen?

Für was braucht man nch einen Kellerzeiger/Stapelzeiger, wenn der Programmzähler auf das nächste Befehl (Speicheradresse) zeigt?
Der Stapelspeicher ist ein besonderer Speicherbereich, in dem Rücksprungadressen und lokale Funktionsvariaben abgelegt werden. Wenn du in einem Programm eine Funktion aufrufst, wird die nächste Befehlsadresse auf dem Stapelspeicher abgelegt und dann die Funktionsadresse geladen. Um aus der Funktion wieder heraus ins Hauptprogramm zu springen, wird die Adresse vom Stapelspeicher zurückgeholt:

1 gosub 5         -> Haupt: Adresse 2 (nächster Befehl) auf Stapelspeicher, Stapelspeicherzeiger + 1, Adresse 5 in Programmzähler laden
2 ping            -> Haupt: ping machen
3 end             -> Haupt: Ende
4 print "hallo"   -> Unterfunktion: "hallo" ausgeben
5 return          -> Stapelspeicherzeiger - 1, Rücksprungadresse vom Stapelspeicher holen und in Programmzähler laden

Hier habe ich noch größere Probleme beim Verstehen. Wie gesagt, bevor ich andere Leute strapaziere versuche ich noch heute etwas mehr zu Lesen.
Wie es ausschaut, sind das dann zwei verschiedene Speicherbereich, was den Stapelzeiger und Programmzähler irgendwie betrifft. Dumm wie Stroh bin ich derzeit :-) (Sicherlich müsste man sich in die ganze Sache eigentlich vertiefen, da das ganze ja nicht so simpel ist, wie ping machen, Hallo ausgeben usw., da beim Rechenwerk ja naher nur nullen und einsen ankommen. Ich sollte schlafen :-)

Das Leitwerk steuert die Befehlsausführung, es holt zum Beispiel den nächsten Befehl aus dem Speicher und kopiert ihn ins Befehlsregister.

Oki, das habe ich verstanden und muss noch dann die anderen Wörter wie Befehlsadresse (auf das der Programmzähler zeigt ne oder ist das wieder was anders) Programmstatuswort/Statusregister mal in Ruhe heute Abend oder morgen im Laufe des Tages in Lektüren nachholen, bzw. mir einen etwas verständlichen Gesamtüberblick verschaffen.

Das Programmstatuswort, genauer: seine einzelnen Bits zeigen den aktuellen Zustand des Prozessors an, dazu kann gehören, ob der Prozessor beispielsweise gerade in einem wie auch immer gearteten Debugging-Modus arbeitet oder gestoppt ist. Meist gehört dazu auch eine allgemeine Aussage über das Ergebnis der letzten Operation, ob gleich, größer oder kleiner Null war, oder ein Überlauf stattgefunden hat.

Ah, ok, dann hat sich ein Wort oben von mir geklärt.

  1. 4 notwendige Bedingungen für Deadlocks.

Der vierte Punkt "Wechselseitiger Auschluss (ressourcen sind nur exklusiv nutzbar. Die eine Ressource benutzenden Prozesse schließen sich wechselseitig aus"

Was versteht man dadrunter genau? Der Inhalt könnte ja auch in "Besitzen und Warten" fallen?

"Besitzen und Warten" hört sich für mich so an, dass ein Prozess eine weitere Sperre auf etwas anlegen möchte, das er schon zuvor gesperrt hat.

Unter Besitzen und Warten steht: Prozesse warten auf die Freigabe einer angeforderten Ressource, ohne bereits selbst belegte Ressourcen in der Zwischenzeit freizugeben. Das hört sich ähnlich an, wie die von der Bedingung "Wechselseitiger Ausschluss -> Die eine Ressource benutzenden Prozesse schließen sich wechselseitig aus"

Danke und Grüße :-)
Michi