
El resultado de lsof
mi RHEL7 muestra que mem
40 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.