"ein paar Fragen"

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

“ein paar Fragen”
Kann der Zugrif auf eune logische Adresse zu einem Trap führen?
Was versteht man unter den privilegierten Maschienenbefehlen?
Und Namensräume?Ist es wahr, dass flache Namensräume keinen doppelten Kontext haben?Tja, ich habe noch viele Fragen, aber da muss ich mich noch mehr damit beschäftigen…die Antworten auf diese Fragen habe ich nirgendwo gefunden…Im Voraus Danke :wand:


Also priviligierte Maschinenbefehle kann ich dir vielleicht erklären (hab da nämlich gestern was drüber gelesen):

Es gibt zwei CPU Betriebsarten. Den User Mode und den Monitor-Mode. Im User-Mode können nur die nicht priviligierte Befehle ausgeführt werden, wird ein priviligierter Befehl ausgeführt, wird der so behandelt als gäbe es den Befehl nicht, es wird ein TRAP ausgelöst.

Will ein User nun einen priviligierten Befehl ausführen (z.B eine I/O Operation) so übergibt er die Kontrolle dem Betriebssystem (per System-Call) und sagt was gemacht werden soll (Das ist der Aufruf mit “int 0x80”). Dann wird in den Monitor-Mode gewechselt und der priviligierte Befehl wird ausgeführt. Danach wird wieder in den User-Mode gewechselt und das BS gibt die Kontrolle zurück an die aufrufende Instanz. Die beiden Modes werden mit einem Flag, also einem Bit unterschieden.

Soweit ich das aus dem Skript verstanden hab gibt es bei flachen Namenräumen jeden Dateinamen nur ein einziges Mal. (z.B. DOS)

Hoffe das hilt Dir weiter! :smiley:

Toby

logische Adresse, privilegierter Maschinenbefehl, Namensraum
Hi,

mal sehen, ob ich hier auch etwas zur Klärung beitragen kann…

“Kann der Zugrif auf eune logische Adresse zu einem Trap führen?”

Ja, z.B. wenn es sich um eine ungültige logische Adresse handelt oder dynamisches Binden implementiert ist.

Eine ungültige logische Adresse zeigt aus den einem Programm zugewiesenen logischen Adressraum heraus. Solch eine Adresse kann man sich z.B. in C einfach selbst generieren: char *hal = (char *)42; (Achtung: diese Beispiel ist natürlich betriebssystemabhängig!!!)

Dynamisches Binden kann in einer Form vom Betriebssystem realisiert sein, dass z.B. der erste Aufruf an eine noch nicht eingebundenen Prozedur zum Trap führt. Im Betriebssystem wird dann im Zuge der Trapbehandlung ein bindender Lader aktiv, der die fehlende Prozedur in den Adressraum des Benutzerprogramms einbindet. Bei Multics hat man das “trap on use” genannt. Auf einem Pentium kann man sowas auch ganz prima implementieren, wenn das Betriebssystem das im Pentium implementierte Gate-Konzept konsequent nutzt. Man kann natürlich auch “Hacks” machen: ein statischer Binder erzeugt als logische Adresse einer noch nicht wirklich eingebundenen Prozedur eine eindeutige, ungültige Adresse. Springt man die ungültige Adresse an, kommt es zum Trap. Der Traphandler kennt den Sonderfall: er bricht das unterbrochene Programm nicht ab, sondern leitet die Ausnahme weiter an den bindenden Lader. Nicht wirklich schön, klappt aber auch ganz prima…

“Was versteht man unter den privilegierten Maschienenbefehlen?”

Das sind Maschinenbefehle, deren wirksame Ausführung nur im privilegierten Arbeitsmodus der CPU möglich ist. Es setzt voraus, dass die CPU mindestens zwei Arbeitsmodi unterscheidet: den nicht-privilegierten Benutzer- und eben den privilegierten Systemmodus (auch user mode und supervisor/system/kernel/… mode). Solche Befehle wurden eingeführt, damit Mehrprogrammbetrieb sicher implementiert werden kann. Problematisch sind in diesem Zusammenhang immer Anweisungen, die z.B. den durch die Hardware (MMU, Timer) erzwungenen Adressraum- bzw. CPU-schutz umgehen könnten. Direkte Zugriffe auf die MMU und die Geräteregister müssen für Benutzerprogramme in solch einem Fall unterbunden werden. Wird versucht, privilegierte Maschinenbefehle im nicht-privilegierten Modus auszuführen, trappt die CPU das Programm. Der Traphandler bewirkt den Abbruch des Programms oder die Emulation des Befehls.

Mit Systemaufrufen hat das aber erst mal nicht soviel zu tun…

“Und Namensräume?Ist es wahr, dass flache Namensräume keinen doppelten Kontext haben?”

Im Prinzip schon: die haben nur einen einzigen Kontext.

“…die Antworten auf diese Fragen habe ich nirgendwo gefunden…”

Waren die Antworten hilfreich?

wosch

Danke
Das war wirklich hilfreich,
so schön und ausführlich habe ich doch nicht erwartet,
na ja, bei mir war es ziemlich knapp mit Punkten in Klausur :wand: ,
obwohl ich die ganze Zeit fleißig war, keine Vorlesung verpasst…
auf jeden Fall Klausur hatte einen guten Sinn, man hatte diesmal daraus mindestens gelernt,dass man die Aufgaben gut , zu Ende durchzulesen sollte, bevor man mit etwas anfängt… :vogel:
Und wenn das das einzige Problem war, beim nächsten Fall schafft man sicher oder?
Ist noch nicht alles verloren, wie ich es verstanden habe, man muss dann nur beim 2. Mal 50 % haben.
Auf jeden Fall noch einmal Danke,
die Kurve meiner Motivation sieht monoton steigend aus-im Moment ist das das Wichtigste-tja :finger: momentan bin ich beim Lesen eines schönen Buchs-“Betriebssysteme-Carsten Vogt”. :slight_smile:


richtig


Soweit ich weiss musst du bei der 2.ten nur 50% schaffen wenn du bei der ersten unetschuldigt gefehlt hast … ansonsten sinds da auch 40% …
Korrigiert mich bitte wenn ich mich irre!


Hmmm, das haben wir auf den Folien und der Webseite etwas unterschiedlich formuliert.
Also nehmen wir wohl jetzt besser die kleinere Huerde:
wer beim ersten mal nicht mitgeschrieben hat und keine ordentliche
Entschuldigung liefert, braucht 50%.
Wer mit triftigem Grund gefehlt hat oder die 40% nicht erreicht hat,
braucht beim 2. mal 40%.


Und wann ist der 2.Versuch?
Ich würd´ gern mitschreiben :gun: - macht wirklich Spass! :smiley:


soviel ich mitbekommen habe die letzte vorlesung, also am donnerstag den 14.7.
Stoffmäßig, is dass dann wohl volles Programm, gottseidank hab ichs scho geschafft.


hätte mal ne frage zwecks zweiter miniklausur:

können die leute die jetzt schon bestanden habe den zweiten versuch vielleicht ausser konkurrenz mitschreiben?
also so als kleine abfrage oder zu übungszwecken… damit man vielleicht weiss wie fit man dann schon für die richtige klausur ist…
weil ich fand die miniklausur war ne echt gute sache!

oder wenns schon nich ausser konkurrenz geht wie is des dann wenn man bei der ersten schon die hürde geschaft hat, aber dann bei der zweiten nicht - würden dann beide punkte zusammengerechnet oder wie und was ?


die zweite Miniklausur schreiben wir am 14.7 - ich dneke es wird ziemlich
analog zum Donnerstag ablaufen.

Natuerlich darf jeder mitschreiben (das sag’ ich jetzt einfach mal so -
selbst auf die Gefahr hin, dass meine Kollegen mich das dann alleine
korrigieren lassen :slight_smile:

noch eine Frage-privilegierte Maschienenbefehle
Stimmt es denn dass man mit nicht privilegierten Befehlen Zugriff auf Geräteregister grundsätzlich nicht ermöglichen kann…
wie ich es verstehe die priviligierten können es auf jeden Fall.
Und welche von den Befehlen dürfen in Anwendungsprogrammen benutzt werden-priviligierte oder doch nicht?

Noch einmal im Voraus Danke


Auf die Gefahr hin, dass die Verwirrung eher groesser wird. Man kann mit nicht privilegierten
Befehlen auf Geraeteregister zugreifen! Das wir d zumindestens bei allen mir bekannten
Architekturen so gemacht. Es gibt zwar Architekturen die spezielle Befehle fuer Geraetezugriffe
besitzen z. B. die in- und out-Befehle beim x86, aber das ist wohl eher Altlast.

Neue Geraete spricht man auch beim x86 ueber Memory-Mapped-Register an, dabei werden die Register
der Hardware einfach in den Adressraum abgebildet und der Zugriff erfolgt mit den normalen Befehlen
zum Zugriff auf den Speicher (movl etc.) und diese Befehle sind definitive keine priviliegierten :wink:

ABER, … was faellt uns den bei Addressraum ein? … und … ahhh Speicherschutz … genau
nicht jeder Prozess darf wie er gerade lustig ist in den Speicher schreiben sondern der
Kern legt die Spielregel fest und … genau diese Befehle zum veraendern der Seitenkacheltable
sind zum Beispiel priviliegierte Befehle. Es gibt noch ein ganze Reihe anderer z.B. Befehle
zum Bearbeiten der Interrupts etc.

Die Sache mit dem Addressraum und Speicherschutz ist also einfach genial, da man
keinen extra Zugriffschutz braucht und jeder Compiler mit normalen Zuweisungen auf
Speicherstellen die Register bearbeiten kann. Man braucht dafuer keine Assembler-
kenntnisse und ist Architektur unabhaengiger.


man sollte vielleicht noch ergaenzen, dass “normale” Betriebssysteme die Speicheradressen,
ueber die Geraeteregister zugreifbar sind, normalerweise natuerlich nicht in den logischen
Adressraum eines normalen Benutzerprozesses, sondern nur in den logischen Adressraum
des Betriebssystems abbilden. Dadurch kann man dann nur im privilegierten Modus auf solche
Register zugreifen (also nur das Betriebssystem selbst).
Das muss aber nicht so sein. Man kann auch Betriebssysteme bauen (und wir machen das
in unseren Forschungs-Betriebssystemen auch), in denen auch user-level-Code auf
Geraete-register zugreifen kann. Auf die Weise kann man dann Geraetetreiber auch im
nicht-prvilegierten Modus laufen lassen. Mann muss dann noch einiges mehr
beachten, damit da kein Unfug passieren kann. Aber sowas erzaehlen wir erst im
Hauptstudium bzw. man kann im Rahmen von Studien- oder Diplomarbeit mit solchen Sachen
spielen…