windows - sistemas - x64 o x86 como saber




¿Por qué el sistema operativo no puede usar 64 bits completos para direccionar? ¿Por qué sólo los 48 bits? (5)

Estoy leyendo "Entendiendo Linux Kernel".

Paginación para arquitecturas de 64 bits

Como hemos visto en las secciones anteriores, la paginación de dos niveles es comúnmente utilizada por microprocesadores de 32 bits. Sin embargo, la paginación de dos niveles no es adecuada para computadoras que adoptan una arquitectura de 64 bits. Usemos un experimento mental para explicar por qué:

Comience asumiendo un tamaño de página estándar de 4 KB. Debido a que 1 KB cubre un rango de 2 10 direcciones, 4 KB cubre 2 12 direcciones, por lo que el campo Offset es de 12 bits. Esto deja hasta 52 bits de la dirección lineal a distribuir entre la tabla y los campos de directorio. Si ahora decidimos usar solo 48 de los 64 bits para el direccionamiento (¡esta restricción nos deja con un espacio de direcciones cómodo de 256 TB!) , Los restantes 48-12 = 36 bits tendrán que dividirse entre la tabla y los campos del Directorio. Si ahora decidimos reservar 18 bits para cada uno de estos dos campos, tanto el Directorio de páginas como las Tablas de páginas de cada proceso deben incluir 2 18 entradas, es decir, más de 256,000 entradas.

  1. "Si ahora decidimos usar solo 48 de los 64 bits para direccionar". ¿Por qué? & ¿Por qué sólo 48 bits? ¿Por qué no algún otro número?

  2. Bueno, solo soy un usuario y programador de PC regular. Es difícil de creer que el direccionamiento de 32 bits, es decir, 4GB (2GB / 3GB para ser más correcto), el espacio de direcciones por proceso es un límite. Si realmente te topaste con este límite. Por favor dame un ejemplo

  3. ¿Cuál es este límite para windows?

  4. ¡Sé que la memoria virtual! = Memoria física y pines de dirección del procesador no tienen nada que ver con la memoria virtual. Esta es una pregunta completamente diferente. Cómo saber el número de pines de dirección (= tamaño del bus de dirección) para un procesador. Las especificaciones http://ark.intel.com de un procesador no incluyen esta especificación.

Responder:

Vea la respuesta de Paul Betts para una respuesta razonable para la primera pregunta.


"Si ahora decidimos usar solo 48 de los 64 bits para direccionar". ¿Por qué? ¿Y por qué sólo 48 bits? ¿Por qué no algún otro número?

Los arquitectos de sistemas hacen concesiones. 256TB parece más que suficiente espacio para el espacio de direcciones de 1 proceso. Recuerde la dirección virtual! = Dirección física, y en general, cada proceso tiene su propio espacio de dirección.

Mientras los punteros sean de 64 bits, esto es más un problema de capacidad de rendimiento que cualquier otra cosa. Si y cuando 48 bits se convierten en una limitación, el sistema operativo podría ser ajustado para utilizar más bits del espacio de direcciones de 64 bits sin romper la incompatibilidad de la aplicación. Por ahora, los arquitectos se están comprando una cantidad de tiempo muy cómoda.

Puede tener que ver con las capacidades de direccionamiento virtual del lado del procesador, ya que muchos procesadores ahora tienen unidades de administración de memoria para manejar la asignación de memoria virtual -> física.

Cómo saber el número de pines de dirección (= tamaño del bus de dirección) para un procesador. Las especificaciones http://ark.intel.com de un procesador no incluyen esta especificación.

Esto es en su mayor parte irrelevante. Es una forma para que un procesador implemente varios esquemas de direccionamiento físico. Un procesador de 64 bits podría obtener buses de dirección / datos externos para su espacio de direcciones completo con 64, 32, 16, 8, 4, 2 o 1 pin de dirección si el bus es síncrono y los bits de dirección se multiplexan en el tiempo. De nuevo, dirección virtual! = Dirección física; El direccionamiento virtual de 64 bits se podría implementar con direcciones físicas de 48 bits o de 32 bits (solo que estaría limitado a 2 48 o 2 32 palabras de memoria).

actualización: si realmente quiere saberlo, debe consultar la hoja de datos de cada procesador en cuestión. Por ejemplo, Intel Core 2 Duo - la sección 4.2 de la hoja de datos habla sobre las señales - el bus de direcciones tiene un ancho de 36 bits (pero en realidad es de 33 líneas de señal; el ancho de los datos es de 64 bits = 8 bytes, por lo que las otras 3 líneas son probablemente innecesario con la alineación de datos adecuada)

Bueno, solo soy un usuario y programador de PC regular. Es difícil de creer que el direccionamiento de 32 bits, es decir, 4 GB (2 GB / 3 GB para ser más correcto), el espacio de direcciones por proceso es un límite. Si realmente te topaste con este límite. Por favor dame un ejemplo

Dos palabras: archivos mapeados en memoria .


Es difícil de creer que el direccionamiento de 32 bits, es decir, 4 GB (2 GB / 3 GB para ser más correcto), el espacio de direcciones por proceso es un límite. Si realmente te topaste con este límite. Por favor dame un ejemplo

Es más eficiente (más rápido) obtener datos de la RAM que obtenerlos del disco.

La velocidad del servidor SQL depende en parte de la cantidad de datos (por ejemplo, la cantidad de su índice y sus páginas de datos) que puede mantener en la RAM en lugar de en el disco.

Por lo tanto, las bases de datos SQL (por ejemplo) pueden ser más rápidas en máquinas con más de 4 GB de RAM.

Lo mismo ocurre con otros tipos de servidores (por ejemplo, servidores de archivos, proxies HTTP, etc.), que pueden ser más rápidos si pueden tener cachés de RAM más grandes.


Creo que la respuesta más simple es - la ley de Moore.

La ley de Moore básicamente dice que los CI reducen a la mitad el costo cada 18 meses. Hay algunas maneras de interpretar esto: la cantidad de memoria instalada en una PC tiende a duplicarse cada 18 meses. La velocidad efectiva se duplica (al menos si toma los núcleos * los MHz en lugar de solo los MHz).

De todos modos, nos hemos quedado realmente sin espacio de direcciones de 32 bits, por lo que un salto de 32 a 48 significa que, en el lado del hardware, hemos asignado espacio de expansión para aproximadamente 16 iteraciones de la ley de Moore, lo que equivale a aproximadamente 20 años.

Estoy bastante seguro de que, si bien algunas PC pueden ser superadas en los 10 años, 20 años de espacio para la expansión parecen ser una desventaja: las computadoras van a ser diferentes en 20 años, ya que no usarán las mismas CPU y los buses de RAM. Igual que eran diferentes hace 20 años. Diseñar más de 20 años de espacio para la cabeza en una interfaz es una tontería sobre la ingeniería que nunca se va a utilizar.

Y no es tan breve que el hardware existente corra un riesgo real de quedar obsoleto demasiado pronto.


Desde una perspectiva de hardware, otra consideración es la alineación.

Una vez que necesite un tipo de datos de más de 4 bytes, digamos 6, debe colocarlos en los límites de 8 bytes para recuperarlos en una sola instrucción. Si no está alineado, debe hacer el enmascaramiento y desplazamiento de bits y agregar comprobaciones al código (ensamblaje).

Mucha gente se molestó con el cambio a 64 bits por el hecho de que sus programas consumían mucha más memoria. Habrían deseado punteros de 48 bits, y si no hubiera restricciones en la alineación, los fabricantes de CPU probablemente habrían creado una arquitectura de 48 bits.

Tenga en cuenta que si está tan hambriento de memoria que desea que sus punteros tengan 6 bytes, hay formas de hacerlo. Pero hay una penalización al tiempo de ejecución.


Ninguna de estas respuestas es correcta, la razón por la que los sistemas operativos no usan los 64 bits completos es porque las tablas de páginas serían mucho más grandes (64 bits ya son hasta 3 niveles de tablas de páginas), y no hay razón para pagar La indirección extra necesaria, 48 bits es suficiente. 48 bits también es conveniente porque obtiene algunos bits adicionales para almacenar marcas en (etiquetado de punteros)





address-space