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.
Partielle Interpretation
Hallo zusammen,
darf ich euch kurz etwas zum Thema “partielle Interpretation” fragen? In der SP1-Vorlesung haben wir ja gelernt, dass partielle Interpretation durch das Betriebssystem immer dann erforderlich ist, wenn man eine Systemfunktion wie z.B. printf() aufruft in seinem eigenen C-Programm. Dann wird ja das C-Programm nach dem Kompilieren/ Assemblieren und Linken letztendlich auf Maschinenbefehle übersetzt. Der Maschinencode von printf() ist jedoch nicht verfügbar und wird erst vom Betriebssystem geliefert und dann letztendlich das dadurch vervollständigte Programm auf der CPU ausgeführt. Ist das korrekt?
Ansonsten kommt es im Allgemeinen zu einer partiellen Interpretation durch das OS, wenn ein Interrupt abgehandelt werden soll. Hab ich das mit printf() überhaupt korrekt verstanden oder wird partielle Interpretation immer nur dann ausgeführt, wenn man auf die Floatingpointeinheit einer CPU zugreifen möchte, welche diese Einheit gar nicht hat und darum das OS eine Alternative ausführen muss? Inwiefern ist eig. das OS bei einem Seitenfehler zuständig?
Vielen Dank!
froschigon
Was partielle Interpretation bedeutet, hat iridium vor einiger Zeit mal ganz gut zusammengefasst: https://fsi.cs.fau.de/forum/post/144352
Dem Ganzen zugrunde liegt eine relativ philosophische Sichtweise: Der Rechner wird aufgefasst als eine abstrakte Maschine, die fortlaufend eine Sequenz von Instruktionen abarbeitet. Die meisten dieser Instruktionen können direkt von der untersten Schicht der Maschine (sprich dem Prozessor) verarbeitet werden - aber auch Betriebssystemoperationen wie z. B. [m]write()[/m] werden als Instruktionen der abstrakten Maschine angesehen.
Der Prozessor stellt keine native Operation bereit, um den Inhalt eines Puffers in einen Dateideskriptor zu schreiben. Die [m]write()[/m]-“Instruktion” muss also von einer Zwischenebene (sprich dem Betriebssystem) interpretiert werden. Das geschieht dadurch, dass mithilfe eines Traps die Kontrolle an das Betriebssystem abgegeben wird, das dann seinerseits eine Sequenz von Maschineninstruktionen auslöst, die die gewünschte Operation erledigen. Danach geht die Kontrolle zurück an das Anwendungsprogramm, das die Ausführung seiner Instruktionssequenz fortsetzt.
Die Sache mit Fließkommaeinheit ist ein weiteres Beispiel für partielle Interpretation: Wenn die CPU nativ Fließkommabefehle unterstützt, werden sie einfach direkt abgearbeitet. Wenn das nicht der Fall ist, gibt’s einen Trap (ungültige Instruktion) und das Betriebssystem kann die betreffende Operation in Software emulieren (so wie ihr das in GTI gelernt habt).
Ist wie gesagt eine sehr abstrakte Sicht auf die Dinge, aber so tickt wosch halt. Vielleicht sollte man die Lehrveranstaltung umbenennen von Systemprogrammierung in Betriebssystemphilosophie.