Nello studio dei sistemi operativi (principalmente con Linux come riferimento), ci sono alcuni punti che non trovo bene spiegati nel materiale che ho studiato.Segmentazione della memoria nei moderni sistemi operativi
I programmi caricati in memoria sono spesso descritti come divisi in segmenti di testo, dati, stack ecc., Anche nel contesto di sistemi operativi come Linux in cui la memoria virtuale si basa esclusivamente sul paging. È il caso che è solo il programma, e non la memoria stessa che viene definita segmentata? Se è così, trovo la terminologia confusa.
Ho visto che malloc può essere implementato in Linux utilizzando la chiamata "sbrk" che aumenta le dimensioni del segmento di dati. Di nuovo, questo 'segmento di dati' è solo una regione di memoria che viene utilizzata per dati per convenzione e non per un segmento 'reale'? (Domanda extra: 'sbrk' non sembra in grado di ridurre la dimensione del 'segmento'. Significa che un processo non può mai rilasciare memoria nel sistema operativo diverso dal chiudere?)
Anche io sono interessato a sapendo perché i moderni sistemi operativi sembrano non utilizzare la segmentazione (paginata). Non impedirebbe certi tipi di attacchi di avere il codice che risiede nel proprio segmento protetto, aumentando così la sicurezza? D'altra parte, farebbe ad esempio Compilazione JIT impossibile/difficile?
Oltre alle risposte "sì"/"no" alle domande precedenti, sono interessato a qualsiasi elaborazione approfondita sull'argomento.
Grazie in anticipo.
C'è anche 'brk', che * possa * impostare la pausa programma a un valore inferiore. E i segmenti * sono * suddivisi in pagine, e ogni pagina * può * essere effettivamente di sola lettura o non-esecuzione, e il segmento di testo e il segmento di dati ro di solito vengono impostati così. –