dwa procesy mogą dzielić tego samego segmentu pamięci wspólnej?
Tak i nie. Zazwyczaj w przypadku nowoczesnych systemów operacyjnych, gdy inny proces jest od forked inny, mają one tę samą przestrzeń pamięci z zestawem "copy-on-write" na wszystkich stronach. Wszelkie aktualizacje dokonane na dowolnej ze stron pamięci do odczytu i zapisu powodują wykonanie kopii strony, tak że będą dwie kopie, a strona pamięci nie będzie już współużytkowana pomiędzy procesem nadrzędnym i podrzędnym. Oznacza to, że tylko strony lub strony tylko do odczytu, które nie zostały zapisane, będą udostępniane.
Jeśli proces ma , a nie został rozwidlony z innego, to nie współużytkuje żadnej pamięci. Jedynym wyjątkiem jest sytuacja, w której uruchomione są dwa wystąpienia tego samego programu, dlatego mogą one udostępniać code and maybe even static data segments, ale nie będą udostępniane żadne inne strony.
Istnieje również specific memory-map calls, aby udostępnić ten sam segment pamięci. Wywołanie określa, czy mapa jest tylko do odczytu, czy do odczytu i zapisu. Jak to zrobić zależy od systemu operacyjnego.
czy dwa wątki mogą mieć tę samą pamięć współdzieloną?
Oczywiście. Zazwyczaj cała pamięć wewnątrz procesu wielowątkowego jest "współdzielona" przez wszystkie wątki. Jest to zwykle definicja wątków, ponieważ wszystkie one działają w tej samej przestrzeni pamięci.
Wątki mają również dodatkową złożoność polegającą na posiadaniu cached memory segments w pamięci o wysokiej prędkości związanej z procesorem/rdzeniem. Ta buforowana pamięć nie jest udostępniana i aktualizowana na stronach pamięci w centralnej pamięci w zależności od operacji synchronizacji.
Re "Ta pamięć podręczna nie jest współużytkowana, a aktualizacje stron pamięci są przepłukiwane do pamięci centralnej w zależności od operacji synchronizacji": czy to dobrze czy źle? – Pacerier
Re "Wątki mają również dodatkową złożoność posiadania buforowanych segmentów pamięci w szybkiej pamięci związanej z procesorem/jądrem": czy to jest nawet coś z jądra systemu operacyjnego ?, czy tylko funkcja biblioteki językowej oprogramowania? – Pacerier
To bardzo dobra rzecz @Pacerier. Lokalna pamięć podręczna pamięci procesora zapewnia większą wydajność w programach wielowątkowych. Jest to obsługiwane przez _hardware_, a nie system operacyjny i oprogramowanie. Oprogramowanie musi uwzględniać pamięci podręczne pod względem barier w pamięci, które kontrolują spłukiwanie i aktualizowanie, ale zdarzają się automagicznie z powodu projektowania procesora. – Gray