Copy-On-Write

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.

Copy-On-Write
Wenn ich ein copy-on-write habe, ist es dann so,
dass beide Prozesse darauf wie auf eine Datei/Stream
zugreifen, oder wird die Seite/das Segment in den
bestehenden Adressraum eingeblendet?

Soweit ich das verstanden habe, ist ein fork ja
auch per copy-on-write realisiert, was für das
Einblenden stehen würde (das müsste ja eigentlich
irgendwie in die Seitentabelle eingetragen werden
und insbesondere muss das BS doch wissen wieviele
noch darauf zugreifen … aber wie?)

Alternativ kann man Seiten anscheinend anderen
Prozessen auch “schicken”, was eher für einen
Zugriff per Stream stehen würde.

Oder gibt es beides?


bei copy-on-write mit nem fork haben erstmal beide prozesse den gleichen adressraum, aber beide read-only. sobald jetz einer der beiden schreibend zugreifen will, wird der entsprechende teil kopiert (also erstmal ein seitenfehler ausgeloest, dann kopiert, um genau zu sein), usw. und da jeder prozess seinen eigenen adressraum hat, normalerweise, und der adressraum fuer jeden prozess einzeln verwaltet wird, bekommt das das betriebssytem schon mit :wink:


Die Seiten können aber nicht nur als
read-only markiert sein, ansonsten wüsste
das BS ja nicht, dass es sich um eine
copy-on-write-Seite handelt und den
Zugriff einfach sperren.
Und soweit ich weiß wird doch auch nur
die Seite kopiert, die sich verändert
nach einem fork, dh. wenn sich nur der
Stack ändert eben nur der Teil.
Ausserdem beantwortet es noch nicht, ob
es noch ein 2. Verfahren gibt Seiten
anderen Prozessen zu zustellen.


Also es werden afaik schon ganze Segmente kopiert, aber das meinst du, oder?

Soweit ich weiß gibts nur noch „direktes“ shared-memory über shmget(2) und Co.

Die copy-on-write Seiten werden meines Wissens auch noch extra markiert. War das nicht in einer MC-Frage drin?


das kann sich das BS ja irgendwo im Prozesskontrollblock oder
in anderen Datenstrukturen zum Prozess aufschreiben.
Es merkt ja auch den Unterschied zwischen einem Zugriff auf eine
nicht-existierende Seite am Ende des Stacks und sonst irgendwo.
Wie das in welchem System genau ist - dazu muesste man sich die
jeweilige Implementierung ansehen - aber es ist sicher kein Problem
sich vorzustellen, dass man eine Datenstruktur bauen kann, in der man
so eine Information ablegen kann. Und dieses Prinzip zu wissen sollte
einfach reichen - dann versteht man auch eine konkrete Implementierung.

Ja, das kann man mit jeder einzelnen Seite machen. Und ist häufig auch
sehr sinnvoll, weil ein Sohnprozess nicht besonders wild im gesamten geerbten
Speicher rumschreibt. Häufig macht er nur sehr wenig oder kurz drauf ein
exec, wodurch er den geerbten speicher eh’ wieder aufgibt (und der Daddy kann
ihn dann wieder read-write zurückbekommen).

Ich gleube nicht, dass das in der Vorl. besprochen wurde. Aber es ist ganz simpel.
Im Betriebssystem MACH wurde ein message passing Mechanismus eingefuehrt, bei
dem bei kleinen Nachrichten die Daten kopiert wurden und bei grossen nachrichten (also ab >4 oder 8K)
die entsprechenden Pages mit copy-on-write transferiert wurden.
Das muesste eigentlich im MacOS heute so drin sein. Die Frage ist, wo
es in der Praxis eingesetzt wird (aber das ist bei veielen Konszepten ja
die Frage :slight_smile: ).

Frage
Hallo zusammen,

ich habe eine Frage. Ich habe hier einen “Only-Write-Memory” Chip.

Darauf steht die Bezeichnung:
ST62T60C6
1991A8 V1
MYS 99 622

Hersteller: Microtronix

Nun die Frage… Findet sich jemand, wo weiss wie man einen solchen Chip auslesen kann ? - Natürlich gerne auch gegen entsprechende Bezahlung !

Gruss… Gurkenpfeffer


http://en.wikipedia.org/wiki/Write_Only_Memory :nuts:
Da wären die E-Techniker wohl besser als Ansprechpartner geeignet. :slight_smile: