Unter Rechenwerk haben wir nuns tehen: Programmzähler, Befehlsregister und Kellerzeiger/Stapelzeiger.
Das Rechenwerk ist das Ding, das schlicht und ergreifend genau dies tut: Rechnen. Der Stapelspeicher gehört IMHO nicht dazu.
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.)
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.
Befehle werden im Prozessor letztlich durch Transistoren "ausgeführt". Diese Transistoren können nicht mit dem Speicher verdrahtet werden (buchstäblich), ihre Verbindung besteht zum Befehlsregister.
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
Vor allem, weil in einem anderen Script unter Leitwerk anstatt Kellerzeiger das Wort Programmstatuswort erscheint. (Accountingdaten, Statuswort, ...) Dürfte vermutlich dasselbe sein?
Das Leitwerk steuert die Befehlsausführung, es holt zum Beispiel den nächsten Befehl aus dem Speicher und kopiert ihn ins Befehlsregister.
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.
Ist der Kellerzeiger evtl. für Interrupts wichtig, wenn ein Prozess angehalten wird und mit einer anderen weitergemacht? (Interrupthandler)
Möglich, ein Interruptaufruf ja wie ein Funktionsaufruf. Kommt aber IMHO auf den Prozessor an, ich meine mich zu entsinnen, dass manche dafür eigene Register haben.
- Verstehe ich in Shell folgendes richtig: wait %jobnr
Wenn ich durch wait &jobnr etwas vom Hintergrund aufrufe, wird meine Tastatur so lange gekoppelt, bis der Prozess fertig ist, ohne dass ich den Prozess sehe?
"Abkoppeln" halte ich für etwas übertrieben, es wird einfach gewartet, bis der Prozess fertig ist. "Blockieren" ist wohl der üblichere Ausdruck.
Ob du den Prozess siehst oder nicht, ist eine andere Frage. Auch ein Hintergrundprozess kann noch in die Shell ausgeben.
- 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.
- Alle Teilnehmer eines LANs teilen sich die Übertragungskapazität des physikalischen ÜBertragungswegs: "Shared networks". alle Stationen sehen alle Daten-Rahmen im LAN (Jeder Rahmen erreicht prinzipiell jede Station)
Meint man mit Rahmen den Verbund aller Stationen, praktisch ein Netz?
Nein, einfach ein Datenpaket, das durchs Kabel wandert (Englisch: Frame).
- RC4-Stromverschlüsselungsverfahren (Bsp. WEP-Schlüssel)
Verschlüsserung: C = P xor K
Entschlüsselung: C xor K = P xor K xor K = P
Warum ist die Entschlüsselung so komisch, reicht da C xor K nicht aus, um wieder an den Klartext P zu kommen? (K = Schlüsselstrom, C = Verschlüsselter Text)
Obacht, das ist keine Entschlüsselung, sondern eine Gleichung: 1 + 2 = 5 - 2 = 3. Um das Ergebnis 3 zu erhalten, musst du nicht erst 1 + 2 rechnen, dann 5 - 2. Du kannst 1 + 2 rechnen oder 5 - 2, beides ist gleich 3.
Um das Ergebnis P zu erhalten, musst du nicht erst C xor K rechnen und dann P xor K xor K. Du kannst C xor K nehmen oder P xor K xor K, beides ist gleich P.
- Für was soll die Broadcast-Adresse 255.255.255.255 gut sein? (Um eventuell, wenn man sich in ein Netzwerk verbindet und die 255.255.255.255 anspricht, dass man vom Netzwerk seine eigene IP als Antwort erhält?
Auf Broadcast-Adressen reagieren alle Stationen im Netz. Sowas nutzt man immer, wenn man nicht weiß, wer für die Anfrage zuständig ist. Damit könnte man zum Beispiel auch Netzwerkdrucker finden.
- Modifizieren des Programmzählers muss nicht im privilegierten Modus (Kernelmode) ausgeführt werden. Stimmt das?
Wenn dem so wäre, müssten ja sämtliche Prozesse im privilegierten Modus laufen, weil sie sonst keinen Schritt machen könnten.
- Kooperative Multitasking: Der aktive Prozess muss die CPU von sich aus freigeben
Richtig. Die Prozesse müssen sich kooperativ verhalten, sie müssen mitarbeiten.
"[..] Häufig sind funktionstüchtige Hardwarekomponenten mit proprietären Treibern mit neueren Betriebssystemen nicht lauffähig. Dies hängt oft mit den kommerziellen Interessen von Hardwareherstellern zusammen [..]"
Wenn aber das Betriebssystem, wie oben erwähnt, die Klassen von Geräten (also den Treiber, bzw. Treiberaufruf) vorgibt, dann sollte der gleiche Treiber auf neuerem Betriebssystem eigentlich auch laufen, da der Aufruf, bzw. die Vorgabe ja gleich bleibt? (Der Treiber kümmert sich dann um die Kommunikation zur Hardware hin)?
Der Treiber nutzt mit hoher Wahrscheinlichkeit selbst Funktionen des Betriebssystems (zum Beispiel zum Reservieren von Speicher). Haben die sich geändert, tut's der Treiber nicht mehr. Darüber hinaus kann sich auch die Schnittstellendefinition selbst geändert haben.
Du wirst Schwierigkeiten haben, Windows 7 einen Treiber schmackhaft zu machen, der für eine Windows-3-Umgebung entwickelt wurde.