Objašnjenje je veoma jednostavno.
Kao što sigurno znaš, zaštitu memorije je na x86 arhitekturi moguće obezbediti i kroz straničenje (,,page fault'': na Linux-u se koristi zasebni virtuelni adresni prostor/virtuelna memorija za pojedinačni proces). Kako ne postoji SIGPAGEV :), a SIGSEGV se definiše U SUS/POSIX specifikaciji (na
http://www.opengroup.org/mem_o...4009965/basedefs/signal.h.html) kao ,,Invalid memory reference'', jasno je da se taj signal koristi za ove potrebe. Sigurno je tekst ,,Segmentation violation'' ostao iz nekih ranijih dana.
A lepo si i sam primetio: ,,kako se onda obezbeđuje da proces ne može da piše po svom txt i data segmentu, već samo po steku''? Mislim da je upravo to ono što omogućava sve drage nam ,,buffer-overflow-e'' gde se zatim nekako i pokrene taj kod koji bi se morao nalaziti u stek segmentu (ili kojem već, ali ne zajedno sa kodom). Da to nije slučaj, i da svi ti segmenti nisu mapirani na iste adrese, zaštita od prekoračenja bafera bi se, čini mi se, lakše obezbedila (tj. na hardverskom nivou, ali jasno je koliko je to složeno uraditi pomoću baratanja segmentima, dinamička izmena veličine segmenata itd.).
Zbog toga Linux (i većina ostalih x86 OS-eva) spada u tip operativnih sistema koji brinu samo o svojoj sigurnosti: korisnički program ne može naštetiti jezgru niti drugim programima (osim ako je naravno pokrenut u ring0, ali onda ga ne zovemo ,,korisničkim''), već samo sebi i na njemu je odgovornost da bude dobro napisan.
E sad, prethodna dva pasusa nisu zasnovana na pravom znanju, već na pogađanju šta bi moglo biti šta, i zato ih ne uzimajte zdravo za gotovo. U analizi ima dosta nedostataka, ali zaista ne poznajem sve detalje konkretne implementacije (Linux-a) da bih mogao biti siguran.
Dodaću još nešto karakteristično za IA32. Scenario koji si opisao (virtuelni adresni prostor procesa je podeljen na segmente, a segmenti su podeljeni u stranice) je nemoguć na ovoj arhitekturi. Prvenstveno zbog toga što ,,virtuelni adresni prostor'' podrazumeva upotrebu straničenja (tj. on se i obezbeđuje pomoću stranica), a segmentiranje se uvek vrši ,,na'' virtuelnom adresnom prostoru (ako smatramo da kada nema straničenja onda on predstavlja ,,linearni adresni prostor'').
Priznajem da je prošlo dosta vremena od kada sam ja poslednji put čitao o ovome u Intel Pentium System Developers' referencama, pa sam možda malo pomešao terminologiju (možda treba zameniti ,,linearni'' i ,,virtuelni'') koju oni koriste, ali se nadam da je ostalo ispravno. Ukoliko nije, slobodno me ispravite.
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.