Al estudiar los sistemas operativos (principalmente con Linux como referencia), hay algunos puntos que no encuentro bien explicados en el material que he estudiado.Segmentación de memoria en sistemas operativos modernos
Los programas cargados en la memoria a menudo se describen divididos en segmentos de texto, datos, pila, etc., incluso en el contexto de sistemas operativos como Linux donde la memoria virtual se basa exclusivamente en paginación. ¿Es el caso que es solo el programa, y no la memoria en sí misma, lo que se conoce como segmentado? Si es así, creo que la terminología es confusa.
Vi que malloc se puede implementar en Linux utilizando la llamada 'sbrk' que aumenta el tamaño del segmento de datos. De nuevo, ¿este "segmento de datos" es solo una región de memoria que se usa para datos por convención y no como un segmento "real"? (Pregunta adicional: 'sbrk' no parece ser capaz de disminuir el tamaño del 'segmento'. ¿Esto significa que un proceso nunca puede liberar memoria en el sistema operativo que no sea salir?)
También me ha interesado saber por qué los sistemas operativos modernos no parecen estar usando la segmentación (paginada). ¿No evitaría ciertos tipos de ataques que el código resida en su propio segmento protegido, aumentando así la seguridad? Por otro lado, ¿esto haría, p. Compilación JIT imposible/difícil?
Además de las respuestas "sí"/"no" a las preguntas anteriores, estoy interesado en cualquier aclaración detallada sobre el tema.
Gracias de antemano.
También hay 'brk', que * puede * establecer el programa de ruptura a un valor inferior. Y los segmentos * están * divididos en páginas, y cada página * puede * de hecho ser de solo lectura o no ejecutarse, y el segmento de texto y el segmento de ro-data generalmente se establecerán de esta manera. –