Studiuję systemy operacyjne i architekturę x86, a kiedy czytałem o segmentacji i stronicowaniu, naturalnie byłem ciekawy, jak nowoczesne systemy operacyjne obsługują zarządzanie pamięcią. Z tego, co znalazłem, Linux i większość innych systemów operacyjnych zasadniczo unika segmentacji na rzecz stronicowania. Kilka powodów, dla których znalazłem to prostota i przenośność.
Jakie praktyczne zastosowania ma segmentacja (x86 lub inna) i czy kiedykolwiek zobaczymy, że używają jej solidne systemy operacyjne, czy też nadal będą faworyzować system oparty na stronicowaniu.
Teraz wiem, że jest to obciążone pytanie, ale jestem ciekawy, jak poradzić sobie z segmentacją w nowo opracowanych systemach operacyjnych. Czy faworyzowanie stronicowania ma tyle sensu, że nikt nie rozważy bardziej „segmentowego” podejścia? Jeśli tak, dlaczego?
A kiedy mówię o „unikaniu” segmentacji, sugeruję, że Linux używa go tylko w takim stopniu, w jakim jest to konieczne. Tylko 4 segmenty dla segmentów kodu / danych użytkownika i jądra. Czytając dokumentację Intela, miałem wrażenie, że segmentacja została zaprojektowana z myślą o bardziej niezawodnych rozwiązaniach. Z drugiej strony wielokrotnie mówiono mi, jak skomplikowane może być x86.
Tę ciekawą anegdotę znalazłem po powiązaniu z oryginalnym „ogłoszeniem” Torvalda dla Linuksa. Powiedział to kilka postów później:
Po prostu powiedziałbym, że przeniesienie jest niemożliwe. Przeważnie jest w C, ale większość ludzi nie nazwałaby tego, co piszę. Wykorzystuje każdą możliwą funkcję 386, jaką mogłem znaleźć, ponieważ był to również projekt, aby nauczyć mnie o 386. Jak już wspomniano, używa MMU , zarówno dla stronicowania (jeszcze nie na dysk), jak i segmentacji. To segmentacja sprawia, że NAPRAWDĘ zależy od niej 386 (każde zadanie ma segment 64 MB na kod i dane - maksymalnie 64 zadania w 4 Gb. Każdy, kto potrzebuje więcej niż 64 Mb / zadanie - twarde pliki cookie).
Wydaje mi się, że moje własne eksperymenty z x86 skłoniły mnie do zadania tego pytania. Linus nie miał StackOverflow, więc po prostu zaimplementował go, aby go wypróbować.