Prozesse und Pointer



  • [quote="rkhb"]Grundsätzlich gilt aber: Ein Prozess kann nicht ohne weiteres im Adressraum (Stichwort für Google) eines anderen Prozesses herumpfuschen./quote]
    Dafür braucht es aber Schutzmaßnahmen vom Prozessor. Wenn die nicht vorhanden sind, kann man auch rumpfuschen.



  • ok. Nochmal für alle, die das offensichtliche nicht sehen können:
    Obig beschriebene liefern unter den Prämissen, dass die unter einem betriebssystem laufen, das keinen Speicherschutz bietet oben genanntes Ergebnis. Was auch wahrscheinlich dem entspricht, worauf der ur-ursprüngliche abziehlt.



  • Die Frage lässt sich nicht beantworten, ohne mehr Kontext. Z.B. wär mal interessant, was genau im gegebenen Beispiel unter einem "Prozess" verstanden wird. Unter einem modernen Betriebssystem wird z.B. jeder Prozess seinen eigenen Adressraum und seine eigene Konsole haben und Prozess P1 würde einfach 23 und Prozess P2 würde 42 ausgeben und das wars...



  • dot schrieb:

    Die Frage lässt sich nicht beantworten, ohne mehr Kontext.

    aber jaaaaa dottiiii aber jaaaaaahh
    guck:

    Ursula schrieb:

    Nehmen Sie dabei an, dass die Speicherstelle 0x804254C0 beschreibbar ist, ohne einen Segmentation Fault auszulösen.

    🙂



  • dochdochdochdoch ++ schrieb:

    dot schrieb:

    Die Frage lässt sich nicht beantworten, ohne mehr Kontext.

    aber jaaaaa dottiiii aber jaaaaaahh
    guck:

    Ursula schrieb:

    Nehmen Sie dabei an, dass die Speicherstelle 0x804254C0 beschreibbar ist, ohne einen Segmentation Fault auszulösen.

    🙂

    Ähm ok, ich scheine wohl zu dumm zu sein, erklär mir doch bitte mal, inwiefern uns das hilft!?



  • Ich denke, das ist eine dieser typischen Aufgaben, die man richtig interpretieren muss. Anscheinend wollen sie darauf hinaus, dass beide Prozesse 23 ausgeben, obwohl der eine eigentlich 42 ausgeben sollte. Kann natürlich sein, dass das falsch interpretiert ist, weil der Aufgabensteller gerade irgendwas anderes im Blick hat. Zum Beispiel virtueller Speicher oder Compileroptimierungen (ich seh kein volatile). Schreib das was der Professor hören will und vergiss das ganze.



  • Obig beschriebene liefern unter den Prämissen, dass die unter einem betriebssystem laufen, das keinen Speicherschutz bietet oben genanntes Ergebnis

    Meinst du mit "oben genannt" zweimal 23 oder "zuerst 23 [...] und dann 42" (steht beides oben).

    In der Aufgabe steht ja das man annehmen kann, "dass die Speicherstelle 0x804254C0 beschreibbar ist, ohne einen Segmentation Fault" auszulösen.
    Wie kann es dann zu dem Ergebnis

    zuerst 23 (P1 zum Zeitpunkt 5) und dann 42 (P2 zum Zeitpunkt 6)

    kommen?

    Im Moment stelle ich mir das so vor, dass der virtuelle Speicher quasi fortlaufende Speicheradressen hat. Und da beide Prozesse auf eine Adresse zugreifen ist diese dann auch physikalisch die gleiche.
    Der Adressraum für einen Prozess legt doch nur fest welche Adressen des virtuellen Speichers für den Prozess reserviert sind oder nicht?

    Die Überschrift der Aufgabe ist übrigens "Virtual Memory". Die Aufgabe gehört zur zweiten Serie im Fach Betriebssysteme und bringt auch nicht besonders viele Punkte.



  • Bashar schrieb:

    Ich denke, das ist eine dieser typischen Aufgaben, die man richtig interpretieren muss. Anscheinend wollen sie darauf hinaus, dass beide Prozesse 23 ausgeben, obwohl der eine eigentlich 42 ausgeben sollte.

    Ja, aufgrund der Art und Weise wie die Frage gestellt ist, würde ich auch mal davon ausgehen, dass sie darauf abzielt. Es könnte aber eben auch genausogut der Fall sein, dass es um virtual Memory geht und gerade die gegenteilige Antwort erwünscht ist...



  • Es geht um virtual Memory.



  • Na dann ist der Fall ja klar. Die angegebene Adresse ist virtuell und wird (selbstverständlich) vom Betriebssystem für beide Prozesse an unterschiedliche physikalische Adressen gemappt.



  • Ursula schrieb:

    Die Überschrift der Aufgabe ist übrigens "Virtual Memory". Die Aufgabe gehört zur zweiten Serie im Fach Betriebssysteme und bringt auch nicht besonders viele Punkte.

    Ok, dann ist

    zuerst 23 (P1 zum Zeitpunkt 5) und dann 42 (P2 zum Zeitpunkt 6)

    sehr wahrscheinlich die richtige Antwort.

    Ursula schrieb:

    Im Moment stelle ich mir das so vor, dass der virtuelle Speicher quasi fortlaufende Speicheradressen hat. Und da beide Prozesse auf eine Adresse zugreifen ist diese dann auch physikalisch die gleiche.
    Der Adressraum für einen Prozess legt doch nur fest welche Adressen des virtuellen Speichers für den Prozess reserviert sind oder nicht?

    Jeder Prozess hat seinen eigenen virtuellen Adressraum. Virtuelle Adressen werden auf physikalische Adresse abgebildet. Die virtuelle Adresse 0x804254C0 mapped also im Allgemeinen für jeden Prozess auf eine andere physikalische Adresse, außer es ist z.B. Shared Memory im Spiel...



  • Ah ok ^^
    Hat jemand eine Tipp wo genauer beschrieben ist wie das Mapping abläuft. Unser Prof hat nur ziemlich karge Folien und ich war letzte Woche nicht da 😉
    Hab halt gedacht mit der gleichen Virtuellen Adresse lande ich auch an der gleichen Stelle im physikalischen Speicher.



  • Schau z.B. hier: http://de.wikipedia.org/wiki/Virtuelle_Speicherverwaltung

    Ursula schrieb:

    Hab halt gedacht mit der gleichen Virtuellen Adresse lande ich auch an der gleichen Stelle im physikalischen Speicher.

    Das tu ich aber sowieso auch schon mit der physikalischen Adresse, dafür bräuchte ich keine Virtualisierung. Im Gegenteil, unter anderem will man mit Virtual Memory eigentlich genau das verhindern... 😉



  • Ok vielen Dank.
    Ich muss mich da noch ein bisschen einfuchsen.



  • dot schrieb:

    Ähm ok, ich scheine wohl zu dumm zu sein

    🙂

    mach dir nichts daraus!
    sind wir doch alle irgendwie ... mehr oder weniger 😉
    🙂


Anmelden zum Antworten