2012-04-19 16 views
5

¿Es posible cambiar el tamaño de página de la memoria virtual? Pregunto esto porque en el X86_64 part of the MMU article on wikipedia, se habla de diferentes tamaños de página. Si el tamaño de la página puede ser cambiado, ¿cómo se cambia?¿Es posible cambiar el tamaño de página de la memoria virtual?

+0

¿Está preguntando cómo una aplicación puede cambiar el tamaño de su página o cómo el sistema operativo crea páginas de un tamaño diferente? – ughoavgfhw

+0

Bueno, estoy preguntando si el tamaño de la página se puede cambiar de todos modos, pero si se puede hacer por aplicación, ¡sería genial! – pythonic

Respuesta

4

En x86_64 puede solicitar explícitamente 2 páginas MiB en lugar de las habituales 4 páginas KiB con la ayuda de hugetlbfs. En los núcleos modernos con compatibilidad transparente con páginas enormes, las páginas pequeñas se pueden concatenar automáticamente en páginas grandes en segundo plano, dado que la fragmentación de la memoria no es demasiado grande y la memoria es suficiente.

-2

de Windows: http://windows.microsoft.com/en-US/windows-vista/Change-the-size-of-virtual-memory

Linux:

En /usr/src/linux/include/asm-generic/page.h se pueden encontrar las siguientes líneas:

/* PAGE_SHIFT determina el tamaño de página */

definir PAGE_SHIFT 12

el artículo siguiente se explica en la sección de comentarios.

http://www.cyberciti.biz/faq/linux-check-the-size-of-pagesize/

El proc/sys/vm/parámetro/swappiness, que cambia el equilibrio entre el canje de la memoria en tiempo de ejecución, en lugar de dejar caer las páginas de la página del sistema de caché.

+2

El OP pregunta por cambiar el tamaño de una página determinada en la memoria virtual, sin cambiar el tamaño de la memoria virtual. Además, la pregunta está etiquetada como linux. – ughoavgfhw

+2

Um ... el OP pregunta por Linux ... Su enlace es para Windows. – Mysticial

3

Por lo que yo sé, ningún sistema operativo permite la aplicaciones para solicitar un tamaño de página. El sistema de paginación x86_64 proporciona la capacidad de mezclar páginas de diferentes tamaños, pero esto generalmente solo se usa si se asigna una gran cantidad de memoria a la vez.

En x86_64 (y x86), las direcciones virtuales se asignan a direcciones físicas a través de una serie de tablas de páginas. Cada tabla proporciona una cierta cantidad de bits para la dirección virtual física. x86_64 actualmente puede usar hasta 4 tablas para cada asignación, cada una proporciona 9 bits de dirección virtual, y los 12 bits bajos especifican la compensación dentro de la página. Las primeras 3 tablas cada punto a la dirección física de la siguiente tabla, y los últimos puntos a la dirección física de la página real.

| PML4T entry |-+ 
       V 
    +-| PDPT entry | 
    V 
| PDT entry |-+ 
       V 
    | PT entry |-> Physical address (4kB page) 

Sin embargo, la segunda y tercera entradas de la tabla también contienen un poco, que si conjunto indica que no hay más tablas y que la entrada proporciona la dirección física. Cuando esto ocurre, los bits que proporcionarían las otras tablas se mueven al desplazamiento físico de la página, multiplicando el tamaño de la página por 512 para cada tabla eliminada.

| PML4T entry |-+ 
       V 
    +-| PDPT entry | 
    V 
| PDT entry (PS=1) | -> Physical address (2MB page) 

Al cambiar el número de tablas utilizadas para asignar a una dirección virtual dado, el sistema operativo puede crear páginas de 4 KB (4 mesas), 2 MB (3 mesas), o 1 GB (2 mesas). Dado que el bit se proporciona en cada entrada de la tabla, se pueden mezclar diferentes tamaños de página, por lo que, por ejemplo, una página de 2 MB puede ir seguida de una página de 4kB.

+0

Ver madvise() en Linux, puede al menos páginas más grandes con MADV_HUGEPAGE – nos

2

Sí y no.

El tamaño de página es fijo. Pero el tamaño de una región de memoria virtual no es (en la arquitectura x86).Cuando crea una región de memoria virtual que no tiene el mismo tamaño que una página, se denomina segmento.

Cuestiones relacionadas