¿Qué es diferente entre la memoria virtual y la memoria principal y la memoria primaria y la memoria secundaria?

Consideraré lo que me han enseñado.

La memoria principal y la memoria primaria son nombres para RAM, que yo sepa. RAM es la memoria que los programas usan activamente, es volátil (es decir, lo que contiene tiene un significado temporal, aunque la información persistente se prepara aquí antes de enviarla al dispositivo de almacenamiento y se almacena aquí mientras se procesa, después de leer desde el dispositivo de almacenamiento)

La memoria secundaria es el dispositivo de almacenamiento (HDD, SSD, Intel Octane, tarjetas SD y unidades flash USB, posiblemente otros dispositivos) donde los datos persistentes (que están TIPICAMENTE organizados como archivos: el diseño del archivo es tan omnipresente y tan eficiente que uno se preguntaría si algo lo demás existe realmente, pero no tiene por qué ser así: el flujo único de bits que es su disco también se puede considerar como algo más y, en casos muy específicos, se puede hacer que una base de datos funcione directamente en ese flujo sin procesar) . Cuando se desconecta, los datos en la memoria secundaria permanecen (aunque debido a problemas como el almacenamiento en caché, pueden quedar desactualizados o, si el software no tiene el cuidado adecuado para evitarlo, se corrompen por completo y se vuelven inutilizables).

Sin embargo, hablemos de memoria virtual. La explicación anterior es correcta, pero los programas NO los ven directamente. La memoria virtual significa que un programa tiene su propia vista en la RAM, y el sistema operativo administra esa vista; también puede elegir, en una granularidad de páginas, en qué páginas se puede escribir, cuáles no, puede elegir también dar un significado: páginas anónimas (datos generados en la memoria y no destinados a vivir en el disco, pero que pueden terminar) arriba en la memoria de intercambio, un archivo de página) y páginas respaldadas por archivo (datos que representan el contenido real del archivo, o una parte de él, que parece ser directamente editable como memoria). Las páginas respaldadas por archivos son realmente el mecanismo detrás de mmap, PERO mmap no es la única forma de interactuar con los archivos (y ni siquiera es la forma típica, especialmente en las arquitecturas de 32 bits y 16 bits donde simplemente no tiene el lujo de hacer eso)

La memoria virtual le da el lujo de tener programas en ejecución y ser contenidos por el sistema operativo de tal manera que no sobrescriban el núcleo en sí, un controlador, la tabla ACPI que intermedia básicamente todos los accesos de hardware, etc. DOS no tenía virtual memoria, por lo que los programas esencialmente podrían reemplazar el DOS en la memoria por completo y convertirse en sistemas operativos separados; de hecho, existe el gestor de arranque y el gestor de arranque GRUB4DOS, que es exactamente eso: un archivo .EXE que puede ejecutarse desde DOS y puede reemplazarlo con algún otro gestor de arranque o un kernel de Linux, en la memoria.

Si comparamos tanto la memoria primaria como la memoria secundaria, la memoria primaria es mucho más rápida.

La memoria secundaria es permanente, aquí podemos almacenar todos los archivos y programas en la memoria secundaria.