Análisis del código fuente de la pila
Pila de usuarios larga [PAGE_SIZE gt;gt2];
Estructura {
larga *a;
corta b;
} stack_start = {amp user stack[page size gt gt2], 0x 10};
Se usa como pila del kernel durante la operación de inicialización del kernel y se usará como tarea después de la inicialización en el modo de usuario 0. pila. Es la pila de código del kernel antes de ejecutar la tarea 0 y luego se usa como pila de modo de usuario para las tareas 0 y 1. La siguiente estructura se utiliza para configurar la pila ss: esp (selector de segmento de datos, puntero), consulte head.s, línea 23. Ss está configurado en el selector de segmento de datos del kernel (0x10), y el puntero especialmente apunta después del último elemento de la matriz user_stack. Esto se debe a que cuando una CPU Intel realiza una operación de pila, primero disminuye el valor del puntero de pila sp y luego guarda el contenido de la pila en el puntero sp.
El bit e en el tipo de descriptor indica la dirección de expansión del segmento especificado, no la dirección de inserción de la operación de la pila. Para un segmento de datos general, su dirección base es el comienzo del segmento de datos. Para un segmento de pila de 32 bits (si se define un segmento de tipo pila), su dirección base indica que la memoria desde la dirección base hasta el límite de longitud especificado es inaccesible, es decir, el segmento de pila es la longitud real de la pila a partir del límite de longitud y termina en la dirección lineal (4G). Este e-bit desempeña este papel.
Por ejemplo, si el espacio de memoria es 10. Defina la dirección base del segmento = 3, longitud = 4. Entonces, si E = 0, el rango del segmento es 3-7. Si la longitud expandida dinámicamente es 6, el rango es 3-9. Es decir, la posición de extensión del segmento está al final del segmento.
Defina dirección base del segmento=3, longitud=4. Si E=1, el rango del segmento es 7-10. Si la longitud de la extensión dinámica es 6, el rango es 9-10. Es decir, la posición de extensión del segmento está en el extremo frontal.
Se puede observar que la posición E solo determina la dirección de expansión del segmento. Independientemente del funcionamiento real de la pila.