Ale namotales :)
czyli mam rozumiec ze windows wkorzystuje segmentowanie i stronicowanie ?
Segmentacja dziala zawsze, z tym, ze w rmode jest ustawiona na sztywno (tam segmenty maja rozmiar 64b i ich poczatek jest co 16b [jak pomylilem wartosci to krzyczec] przez co one na siebie "nachodza") a w pmode programista osa sam moze sobie zrobic segmenty jakie i gdzie chce. Stronicowanie Windows tez wykorzystuje po to aby stworzyc oddzielne przestrzenie. W v86 natomiast MMU (stronicowanie) wciaz dziala, lecz adresuje sie tak jak w rmode, wyglada to mniej wiecej tak:
[jakas operacja na wskazniku] -> segmentowanie w stylu 80186 -> LDT (jesli jest, ale w windows bodaj jest) -> GDT (stronicowanie pmode) -> MMU (stronicowanie).
czy nie sa to raczej dwa oddzielne sposoby podzialu pamieci ?
Sa, ale moga dzialac rownolegle, pierw segmentacja, potem stronicowanie (jak w przykladzie).
pozaty mam pytanie co to znaczy ze poczatek segmentu moze byc ustalany co 16 bajtow ( czyli na wstepie pamieci nie jest podzielona (zsegmentowana) dopiero to jak podzieli ja OS ) ?
W pmode dzieli to OS, w rmode jest na sztywno ustawione, w v86 jest mix :)
Dalej mam pytanie w zwiazku z adresowaniem 16 bitowym w trybie rzeczywistym lub wirtualnym... skoro adresowanie jest 16 bitowe to program ma dostep tylko do 1MB pamieci i teraz dwa pytania czy tylko do pamieci swojego kodu czy tez do pamieci ktory jest poza kodem i drugie pytanie co jesli program jest dluzszy niz 1MB ?
Prawdopodobnie Windows go utnie :)
Z tym marnotrawieniem nie chce mi sie dochodzic o to chodzi ale to jest tak, ze dzieki stronicowaniu wirtualnie pamiec jest liniowa, a fizycznie dziurawa jak pofragmentowany dysk, po to jest MM w systemie zeby tym zarzadzac :)