Takie pytanie do specjalistów od Linux. Skoro Linux używa płaskiego modelu pamięci, bez segmentacji to:
int main()
{
char tab[1] = {'a'};
tab[10000] = 'b';
}
nie powinno wywalać błędu, bo przeciez nie wychodzimy z segmentu danych, ani nic podobnego. Kernel powinien dostać błąd stronicowania i zaalokować pamięć pod tym adresem.
Jaki mechanizm wykrywa, ze proces coś namieszał?Mi przychodzi do głowy tylko albo:
- wyjście poza limit dostępny dla pojedynczego procesu sprawdzany przy "page fault"
- chęć dostępu do pamięci zbytnio oddalonej liniowo od pozostałej reszty danych
Jakieś sugestie?