Entonces, ¿cómo se hace esto?

Entonces, ¿cómo se hace esto?

El resultado de lsofmi RHEL7 muestra que mem40 procesos utilizan un archivo con descriptor de archivo. ¿Significa que este archivo está mapeado en la memoria 40 veces o qué? ¿Alguien podría explicar qué significan los archivos mapeados en memoria? ¿Significa que está 40 veces en mi memoria?

# lsof /usr/lib/locale/archivo-local
COMANDO PID USUARIO TIPO FD TAMAÑO DEL DISPOSITIVO/OFF NOMBRE DEL NODO
vmtoolsd 605 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
agetty 656 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
sintonizado 963 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
iostat 1199 adm mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
chkMtaMem 1205 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
snmpd 4704 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
dormir 5461 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
cmsubagt 6487 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
dormir 6649 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc1 6803 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc2 6835 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc3 6836 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc4 6856 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc5 6884 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc6 6889 usr mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc7 6893 usr1 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
cmfpagt 7704 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc8 7943 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
crond 8001 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
sh 8005 adm mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
iostat 8014 adm mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
crond 20427 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc9 20648 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc10 20649 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc10 20760 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc9 20777 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc11 21353 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc12 21354 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc13 21355 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc14 21356 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc15 21357 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc16 21358 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc17 21554 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc18 21569 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc19 21590 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc20 21647 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc21 22016 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc22 22017 memoria raíz REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc23 22104 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc24 22122 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive

Respuesta1

Eche un vistazo a la diferencia entre memoria virtual y física.

Muchos procesos pueden asignar la misma memoria física. Si 10 procesos asignan el mismo archivo, como máximo se almacenará en caché una copia en la RAM.

Si la memoria no se comparte, entonces si un proceso la cambia, entonces esta página (con el cambio) se duplica antes de confirmar la escritura. (Por lo tanto, no se copia toda la memoria. Esto se llama copia en escritura o COW).

Un archivo asignado en memoria es cuando le pide al sistema operativo que asigne un archivo a la memoria. No carga el archivo hasta que comienza a leer/escribir y luego solo lo que se necesita. El mapeo de memoria es solo una interfaz diferente para leer/escribir/buscar/etc. También puede acceder a la memoria mediante lectura/escritura/búsqueda.

Entonces, ¿cómo se hace esto?

Se hace al darse cuenta de que algunas cosas son iguales: es decir, el intercambio y los archivos son iguales; y la memoria RAM y el caché de archivos son los mismos. Entonces, cuando abres un archivo, se asigna como intercambio (no te preocupes, no se usará para intercambiar otras cosas). Cuando comienza a leer, se genera una falla de segmentación y el sistema operativo la intercambia desde el archivo (la excepción (falla de segmentación) es manejada por el sistema operativo, por lo que no se pasa a un proceso) (en realidad, no es una falla de segmentación) , es un fallo de página). No importa qué interfaz utilices, memoria o archivo. Son solo interfaces sobre la misma funcionalidad.

Respuesta2

Sí, según el manual de lsof:

   FD         is the File Descriptor number of the file or:

                   cwd  current working directory;
                   Lnn  library references (AIX);
                   err  FD information error (see NAME column);
                   jld  jail directory (FreeBSD);
                   ltx  shared library text (code and data);
                   Mxx  hex memory-mapped type number xx.
                   m86  DOS Merge mapped file;
                   mem  memory-mapped file;
                   mmap memory-mapped device;
                   pd   parent directory;
                   rtd  root directory;
                   tr   kernel trace file (OpenBSD);
                   txt  program text (code and data);
                   v86  VP/ix mapped file;

Es solo si está asignado en modo no compartido y cualquier proceso escribe en la memoria virtual, lo que requeriría más de una copia del archivo en la memoria física. De lo contrario, si no se produce ninguna escritura (lo cual no creo), los datos ni siquiera tienen que ocupar la memoria física antes de que cualquier proceso lea la memoria.

información relacionada