Witam !
Próbuję zrozumieć anatomię pamięci w systemach ale wszystkie opisy jakie zawierają przykłady dla programistów (i wszystkie są w C). Ja nigdy nie byłem programistą i te przykłady nie są dla mnie do końca jasne. Wszędzie jest opis, że jak aplikacja jest ładowana do pamięci to jest tworzona struktura mapowania stron wirtualnej pamięci i fizycznej pamięci.
Odpuszczam już sobie kwestię fizyczna-->wirtualna (zdaję sobie sprawę, że jest to potrzebne by program miał jednolitą/ciągłą przestrzeń adresową).
Chciałbym się skupić na strukturze - i może jakimś prostym przykładzie jak notepad.exe czy nano :
Kernel
Stack
Heap
BSS
Data
Text.
Wiem, że do sekcji Kernel użytkownik nie powinien się odwołać w żaden sposób (ani czytać ani pisać) - ale nie wiem czy to znaczy, że tam jest załadowane całe jądro OSa ??? Czy tam są też wszystkie biblioteki systemowe etc ???? Czy to się powiela dla każdej aplikacji ładowanej do pamięci ??? Czy tam znajdują się wszystkie polecenie systemowe (np.: dir, ls, whoami, etc.)
Po co ta przestrzeń aplikacji użytkownika ???
Co z tej części jest potrzebne windowsowemu notatnikowy czy nano spod linuksa ?
Tym razem od dołu - Text.
Wiem, że tu ładowany jest kod aplikacji czyli wykonywalne instrukcje dla procesora co ma robić. Ale w przykładach jakie znalazłem były podane polecenia np.: /bin/ls. Przecież to jest część systemu więc nie rozumiem, czemu to się nie zalicza do sekcji Kernel.
Rozumiem, że z mojego przykładu tu znajdzie się notatnik czy nano - ale czy w całej okazałości czy tylko jakaś część ???
Data - segment przewidziany dla "statycznych zainicjowanych danych".
Czytałem, że tutaj znajdują się globalnie zdefiniowane wartości - czyli (jeśli dobrze zrozumiałem) tutaj znalazłyby się zdefiniowane napisy/opcje z programu notatnik np.: "Plik", "Zapisz jako", "Zamień" etc.
Czy tu też mogłyby się znajdować domyślne wartości jak np. szerokość czy wysokość okna edycji ???
BSS - "segment niezainicjalizowanych danych", które na początku nie mają wartości (wypełnione są zerami)
Z tego co zrozumiałem to to tu znajdowałaby się np. definicja zmiennej całkowitej i gdzie nie podajemy wartości (przykłady jakie znalazłem to: static int i; )
Pytanie - co tutaj z takiego notatnika czy nano mogłoby się znaleźć ????
Stack - przestrzeń dla zmiennych lokalnych z punktu widzenia funkcji.
Jest tu podawany również jakiś "return adress" ??? - ale powrót do czego ??? po co jakiś return adress ???
Np. co w takim notatniku może być "return adrese" ???
Co z takiego notatnika znajdzie się w sekcji stak / stos ????
Heap - segment z dynamiczną alokacją pamięci.
Tu znalazłem opisy, że ładowane są współdzielone biblioteki i moduły potrzebne procesowi.
Co z takiego notatnika się tutaj znajdzie ???
No i na koniec - jak użytkownik wpisuje coś do notatnika - to w której części zostają wprowadzone te dane ??? Do stack ???
Z góry wielkie dzięki za podpowiedzi
pozdrawiam
Dominik.