Erhalte das Copy-on-Write-Verhalten von fork () ing, ohne fork ()

8

Ich habe einen großen Puffer:

%Vor%

Wenn ich einen neuen Prozess abgab, würde es einen Buf geben, der den Speicher mit dem Buf der Eltern teilte, bis der eine oder andere an ihn schrieb. Selbst dann müsste nur ein neuer 4-KByte-Block vom Kernel zugewiesen werden, der Rest würde weiterhin geteilt werden.

Ich würde gerne eine Kopie von buf machen, aber ich werde nur ein wenig von der Kopie ändern. Ich hätte gerne ein Copy-on-Write-Verhalten ohne Forking. (Wie Sie kostenlos beim Forking bekommen.)

Ist das möglich?

    
fadedbee 12.06.2012, 14:38
quelle

1 Antwort

9

Sie möchten eine Datei auf der Festplatte oder ein gemeinsames POSIX-Speichersegment ( shm_open ) für den Block erstellen. Das erste Mal, ordnen Sie es mit MAP_SHARED . Wenn Sie bereit sind, eine Kopie zu erstellen und zu COW zu wechseln, rufen Sie mmap erneut mit MAP_FIXED und MAP_PRIVATE auf, um über die ursprüngliche Karte zu mappen, und mit MAP_PRIVATE , um die zweite Kopie zu erstellen. Dies sollte Ihnen die gewünschten Effekte bringen.

    
R.. 12.06.2012, 15:18
quelle

Tags und Links