Hardware··2 min de lectura

El debate de memoria plana y segmentada vuelve a la mesa

La arquitectura x86 ha perdido soporte para la segmentación fina en la era de 64 bits, pero la discusión sobre su retorno y su relación con modelos de memoria seguros sigue viva.

La arquitectura x86, que ha evolucionado de la era de 16 bits a 64 bits, ha visto una disminución de la protección de memoria fina, tanto con la transición a 64 bits como con las mejoras de llamadas al sistema. El resultado es que la segmentación, que fue un elemento distintivo desde el 286, se ha vuelto casi irrelevante.

La razón principal es la prevalencia de Unix. Este sistema operativo favoreció espacios de direcciones planos, inspirados en los PDP-11 y PDP-7, y no mostró interés por una versión de 64 bits de la segmentación. Mientras tanto, WebAssembly, que muchos desarrolladores ven como una especie de retorno a modelos de OS/2 y otros sistemas no Unix, ha popularizado la idea de que la segmentación podría volver a tener un papel.

El problema con la segmentación tradicional de x86 es que no ofrece la granularidad necesaria para confinar código no privilegiado. Un programa sin privilegios puede recargar registros de segmento y acceder a cualquier segmento definido, con una separación de privilegios muy gruesa (solo usuario vs. sistema). Por lo tanto, la segmentación era útil principalmente para aislamiento de fallos, no para seguridad contra actores maliciosos.

Este debate no se trata simplemente de “plano o segmentado”. Los programadores siempre subdividen la memoria, ya sea con arenas, pools o estructuras anidadas. La pregunta es cómo conciliar esa recursividad del software con la naturaleza finita y no recursiva de la mayoría de los CPUs. Una solución es limitar la profundidad de subdivisión que el hardware conoce; pero eso delega todo lo demás al software y elimina cualquier beneficio de hardware.

CHERI propone una alternativa. En lugar de limitar la profundidad, CHERI permite que el software controle la subdivisión recursiva, pasando límites estrechos a través de capacidades. La dirección se mantiene en una cadena unida de derivaciones de capacidades con límites que solo pueden disminuir. Esta aproximación mantiene la flexibilidad y permite a los sistemas de seguridad basados en CHERI adaptarse a estructuras de memoria arbitrariamente complejas.

Un ejemplo práctico es liballocs, una biblioteca que rastrea la subdivisión recursiva de la memoria plana sin imponer reglas de derivación. Liballocs registra cómo las asignaciones se anidan dentro de otras, creando un árbol. No impone límites de nivel N, sino que ofrece una vista homogénea de estructuras heterogéneas, lo que facilita la construcción de mecanismos de seguridad adicionales.

En última instancia, la cuestión es si la comunidad adoptará soluciones como CHERI o liballocs. Si se vuelven estándar, podrían revitalizar la segmentación, pero el costo de adoptar nuevas arquitecturas de hardware es alto. El futuro de la protección de memoria en x86 probablemente dependerá de cuántos desarrolladores y empresas estén dispuestos a invertir en estas tecnologías.

##Relacionado