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.
Folie SP1-052 eigentuemliche und betriebssystemprogramme
Hallo,
habe zwei Fragen zu einer Folie(SP1-052):
“es interpretiert eigentümliche Programme nur eingeschränkt partiell”
=> Was sind eigentuemliche Programme, und was heisst eingeschraenkt partiell?
“Teilinterpretation von Betriebssystemprogrammen
Bewirkt indirekt rekursive Programmausführungen im
Betriebssystem und erfordert daher die Fähigkeit zum
Wiedereintritt (re-entrance). Je nach Operationsprinzip des
Betriebssystems ist dies zulässig oder (temporär) unzulässig.”
=> Was sind betriebssystemprogramme? sind damit programme gemeint die in einem prozess im Betriebssystem laufen oder ist damit das betriebssystem an sich gemeint?
Hi,
herrlich verschwurbelte Folie, auf die ich auch erstmal ne ganze Weile gestarrt habe. Ich versuch mich mal an einer Erklärung, ohne Garantie auf Richtigkeit
(Ich glaube, es ist sinnvoller, beide Fragen auf einmal zu beantworten).
„eigentümlich“ ist hier nicht im Sinne von „sonderbar“, sondern abgeleitet von „Eigentum“. Ein „eigentümliches Programm“ ist also in dem Kontext ein Teil des Betriebssystems („dem Betriebssystem zu eigen“… oder so ähnlich). Auf der Folie ist das meines Erachtens synonym zu „Betriebssystemprogramm“ zu verstehen. Auf einem monolithischen System ist ein Gerätetreiber also in der Regel ein Betriebssystemprogramm / ein „eigentümliches Programm“.
Ein Betriebssystem implementiert die Maschinenprogrammebene (siehe Folie). D.h., es übersetzt das für das Betriebssystem kompilierte Anwendungsprogramm (das z.B. Systemaufrufe (Syscalls) enthält) auf Befehlssatzebene (das, was die CPU frisst). Dabei sind nur einzelne Eingriffe in den Programmablauf nötig (z.B. bei Traps, Interrupts oder Systemaufrufen), in der Regel läuft das Programm selbstständig auf der CPU. Das ist das, was wosch als „partielle Interpretation“ bezeichnet - nur einzelne Teile des Programms werden vom Betriebssystem interpretiert, der Rest läuft direkt auf der Hardware.
So ein Betriebssystemkern besteht aus mehreren Schichten und Komponenten. Einige davon kümmern sich um Interrupts oder die Hardware, diese laufen nativ und sind keiner partiellen Interpretation unterworfen (durch was denn auch?). Wenn jetzt aber z.B. einer der genannten Gerätetreiber eine Division durch Null auslöst, oder einen Page-Fault, dann werden die unteren Schichten (Trap-Handler) des Betriebssystem sich darum kümmern müssen, ein Linux wird davon nicht gleich komplett abstürzen. Die partielle Interpretation, die man von Anwendungsprogrammen kennt, findet also nur auf manchen Teilen des Betriebssystemcodes statt. Also: Eingeschränkte (betrifft nicht den kompletten Teil des Betriebssystems) partielle Interpretation.
Das ist dann auch genau das, was mit „Teilinterpretation von Betriebssystemprogrammen“ gemeint ist: Wenn ein Teil des Betriebssystems einen Trap auslöst, dann wird zum Trap-Handler gesprungen. Die den Trap auslösende Instruktion ist also „indirekt“ (da durch die Hardware umgesetzt) ein rekursiver Aufruf in einen anderen Betriebssystemcodepfad (bzw. man kann es als solchen nennen).
Alle Klarheiten beseitigt?
(Nochmal Disclaimer: Meine Interpretation von dem, was da steht, nicht mehr).
Danke, ja ich denke so in der richtung habe ich es dann auch verstanden. Ähnliche Sprachliche problematik hat sich bei Laufzeitsystem aufgetan… auch ist mir nicht ganz klar ob Laufzeitsystem und laufzeitumgebung dasselbe sind.
Ich habe es so verstanden dass das Laufzeitsystem einfach die funktionen sind die das betriebssytem bereitstellt um das betriebssystem zu aktivieren so das dieses dann syscalls an die cpu schicken kann. mir ist nicht so klar warum zwishen laufzeitsystem und betriebssystem unterschieden wird… ein system ist für mich ja etwas aktives. Das betriebssystem tut dies ja, in dem es z.B. die prozesse mangaged… aber das laufzeitsystem? klingt für mich nur danach das dies halt eine sammlung von funktionen ist die ich aufrufe und erst dann tut dies etwas aktiv. Für mich stellt sich die Frage warum da dann zwischen laufzeitsystem und betriebssystem ein untershcied ist… vielleicht hab ich da auch nur was nicht so ganz verstanden.
Also nach V.2/23 hab ich zuerst gedacht, Laufzeitsystem ist [m]man 2[/m] und Laufzeitumgebung [m]man 3[/m]. Aber V.2/24 widerspricht dem. Deswegen würde ich sagen, dass es da keinen Unterschied gibt. Aber sicher weiß ich das auch nicht, da solltest du mal wosch fragen.
Wichtig, Syscalls sind die Schnittstelle zwischen Anwendung und Betriebssystem. In den Folien „Laufzeitsystemebene“ wird das auch genannt. Syscalls haben also mit der CPU erstmal nichts zu tun (außer, dass sie durch spezielle Instruktionen gestartet werden).
Das ist aus den Folien ziemlich klar. Das Betriebssystem selbst stellt nur die Syscalls zur Verfügung. Anwendungen können (bzw. werden) nicht direkt Syscalls zu nutzen. Also braucht es dazwischen noch eine Schicht, das Laufzeitsystem. In C wäre das die libc, die dir Funktionen wie [m]write(2)[/m] (oder auch [m]printf(3)[/m]) zur Verfügung stellt.
Richtig. Das Laufzeitsystem ist nur eine „bequemere“ Schnittstelle zwischen Anwendung und Betriebssystem. Wichtig ist auch, dass es vollständig im Adressraum der Anwendung ist. Dagegen ist das Betriebssystem (meist) von der Anwendung isoliert.