Pregunta

En linux, debido a que las bases de los segmentos son todos 0, por lo que la dirección lógica coincide con la dirección lineal (Libro "la Comprensión de que el kernel de linux").Creo que la dirección lógica de proceso diferente que puede ser el mismo, por lo que la dirección lineal de proceso diferente que puede ser el mismo y como cada vista de proceso de 4GB, cada proceso tiene su propio espacio de direcciones lineal (espacio de dirección local).Pero algunos otros artículos dice que hay un gran espacio de direcciones lineal compartida por todo el proceso, y el segmento mecanismo se utiliza para asignar los diferentes procesos en diferentes parte del espacio de direcciones lineal.Suena como un global de espacio de direcciones lineal, con una amplia bits de la dirección.Donde estoy equivocado?O que se utilizan en arquitectura diferente?

¿Fue útil?

Solución

Cada Linux proceso de tiene su propio espacio de direcciones;es la memoria virtual.Los diferentes procesos que tienen diferentes espacios de direcciones (pero todos los hilos dentro de un proceso comparten el mismo espacio de direcciones).

Usted puede obtener un mapa de proceso 1234 en Linux por la lectura /proc/1234/maps o desde el interior del proceso /proc/self/maps

Pruebe los siguientes comandos

 cat /proc/$$/maps
 cat /proc/self/maps

y pensar acerca de su salida;el primer comando muestra el mapa de memoria de su cáscara;la segunda muestra el mapa de memoria del proceso en ejecución cat

El espacio de direcciones se establece con execve(2) en el inicio del programa y cambiado con el mmap(2) y relacionadas con el syscalls.

Una aplicación interactuar con el kernel que sólo a través de llamadas al sistema.El kernel tiene un "diferentes" espacio de direcciones, que no debe de atención acerca de (a menos que la codificación en el interior del núcleo).

Leer un buen libro como Avanzados De Programación En Unix y/o Avanzados De Programación Para Linux

Ver también esta explicación en syscalls.

Observe que segmentado abordar es específico para i386 y es obsoleto:la mayoría de los sistemas no usarlo nunca más.Ha desaparecido completamente en la versión de 64 bits de modo de x86-64.Todos los sistemas Linux el uso de un modelo de memoria plana

Por favor, lea cuidadosamente todas las referencias.

Otros consejos

Soporte de Intel 3 tipos de direcciones:

Dirección lógica - (unidad de segmento) ---> Dirección lineal --- (unidad de localización) ---> Dirección física

Como usted sabe, todos los datos de acceso al kernel y el código de usuario o la dirección virtual del pensamiento de texto (dirección lógica en CPU). La dirección se traduce a la dirección lineal como el siguiente gráfico:

ingrese la descripción de la imagen aquí

Como la implementación de Linux no admite el concepto de direccionamiento lineal y los segmentos solo se proporcionan para el control de permisos. Linux Kernel configura el valor de compensación de cada segmento a cero. Es por eso que no puede ver la dirección lineal en el kernel y el kernel, use directamente la dirección virtual en unidades de paginación.

Después de obtener la dirección lineal, la unidad de paginación de MMU Referencia de referencia CR3 Registre para obtener la base de la tabla de paisas para generar una dirección física.

ingrese la descripción de la imagen aquí

Lo mismo con la memoria caché de la CPU, la unidad de localización también tiene un caché TLB por núcleo de CPU para acelerar la traducción de direcciones que se realiza en la memoria.

Referencia: Intel64 Software Developer's Manual

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top