2011-02-09 31 views
9

¿Cuál es la necesidad de utilizar dos pilas diferentes en el mismo programa? ¿Cómo cambia la trampa la pila actual de programas de la pila del usuario a la pila del kernel? ¿Cómo vuelve a la pila del usuario después de completar la llamada al sistema?¿Cuál es la diferencia entre la pila del kernel y la pila del usuario?

¿Todos los procesos tienen un kernel y una pila de usuarios?

+2

¿Qué arquitectura estás estudiando? – Gabe

+0

http://www.cs.umb.edu/~eoneil/cs444_f06/class10.html: algo bueno para aclarar el problema. De un sitio web de la universidad! –

+0

Me desmayé de la universidad hace 5 años y esta pregunta todavía me recuerda mis años de estudiante universitario. Cada vez que recibo una notificación para esta pregunta sobre el desbordamiento de la pila, me llena de nostalgia. – user609306

Respuesta

3

Una de las razones para tener una pila de kernel separada es que el kernel necesita un lugar para almacenar información donde el código de modo de usuario no puede tocarlo. Esto impide que el código en modo usuario que se ejecuta en un subproceso/proceso diferente afecte accidental o maliciosamente la ejecución del kernel.

4

¿cuál es la necesidad de utilizar dos pilas diferentes en el mismo programa

nunca he oído hablar tanto de un kernel y pila de usuario en términos de un mismo proceso, aunque puede ser extremadamente comunes. Se discute here.

La pila del núcleo debe estar aislada de la pila del modo de usuario. De lo contrario, el código del modo de usuario podría dañar la pila del kernel, causando un bloqueo del kernel.

cómo lo hace trampa cambia la pila actual del programa de pila del usuario al núcleo pila

Es posible que desee buscar algo así como el Intel Software Developer's Manuals.

hace cada proceso tiene kernel y pila de usuario

Asumo que esto varía con el diseño del sistema operativo, aunque tal vez es bastante universal. Los enlaces que proporcioné arriba indican que Linux usa dos (o más) pilas por proceso. No he oído hablar de Windows utilizando una pila de kernel en modo por proceso.

+0

significa que las ventanas tienen una pila de kernel por cpu y linux tiene pila de usuario y kernel por proceso. – user609306

10

Hay una "pila de kernel" por CPU. Hay una "pila de usuario" para cada proceso, aunque cada subproceso tiene su propia pila, incluidos los subprocesos del usuario y del núcleo.

Cómo "la captura cambia la pila" es realmente bastante simple.

La CPU cambia procesos o "modos", como resultado de una interrupción. La interrupción puede ocurrir por muchos motivos diferentes: se produce un error (como un error o error de página) o una interrupción de hardware físico (como desde un dispositivo) o una interrupción de temporizador (que ocurre, por ejemplo, cuando un proceso ha utilizado todos los de su tiempo asignado de la CPU ")

cualquier manera -. cuando esta interrupción se llama, los registros de la CPU se guardan en la pila - todos los registros -. incluido el propio puntero de pila

Normalmente luego un" planificador "Sería llamado. El planificador luego elige otro proceso para ejecutar - restaurando todos sus registros guardados incluyendo el puntero de la pila, y continúa la ejecución desde donde dejó (almacenado en el puntero de la dirección de retorno).

Esto se denomina "Cambio de contexto".

Estoy simplificando algunas cosas, como cómo se guarda y restaura el contexto de administración de memoria, pero esa es la idea.Solo guarda y restaura registros en respuesta a una interrupción, incluido el registro "puntero de pila".

+0

its means windows tiene una pila de kernel por cpu y linux tiene pila de usuario y kernel por proceso. – user609306

+3

En Windows, cada subproceso (incluso subprocesos de modo de usuario) tiene su propia pila de kernel. Las pilas de Kernel definitivamente no son por CPU. – Gabe

0

Depende del sistema operativo. La razón para tenerlo es la seguridad básica del sistema operativo. Es por un diseño cuidadoso del sistema operativo en sí. Por ejemplo, algunos procesadores tienen pilas Kernel, Executive, Supervisor y User.

Renee

7

Hay 2 pilas porque hay 2 contextos de ejecución de la CPU. La pila de modo de usuario atenderá a su programa con respecto a crear marcos de pila para funciones, variables locales, direcciones de retorno, etc. Cuando la CPU cambia el contexto al modo kernel, por ejemplo durante la ejecución de llamadas al sistema, necesita acceder a la memoria del kernel y estructuras de datos y entonces cambia a usar su pila de kernel. Y sí, Unix creo que usa una pila de kernel por proceso.

3

Estoy aprendiendo el sistema operativo en la universidad, y nuestro proyecto se basa en OS/161 construido por Harvard. Entonces mi respuesta está basada en este sistema operativo.

En OS/161, cada hilo tiene 2 pilas - una para el programa de usuario/aplicación, una para el programa kernel.

1. ¿Cuál es la necesidad de usar dos pilas diferentes en el mismo programa?

Supongamos que solo usamos la pila en el modo de aplicación. Dado que el espacio de memoria es compartido por múltiples hilos, si algún otro hilo sobrescribe accidentalmente la dirección utilizada por kernel, entonces kernel podría colapsarse, lo que lleva a un sistema operativo muy vulnerable.

2. ¿Cómo la trampa cambia la pila actual de programas de la pila del usuario a la pila del núcleo?

en OS/161, el trap se usa para transferir desde un programa de aplicación a kernel. Existen tres mecanismos que pueden invocar trap: Llamadas del sistema, Excepciones e Interrupciones. El marco de trampa en la pila del núcleo se usa para guardar el contexto del hilo actual.

siguiente es el proceso detallado (de lecture note of UWaterloo CS350):

  • Cuando uno de mecanismo anterior se produce, el hardware conmuta el CPU en modo privilegiado y transfiere el control a una ubicación predefinida, a la que un kernel controlador debe ser localizado.

  • El controlador de núcleo crea un marco de captura y lo utiliza para guarda el contexto del subproceso aplicación para que el código del controlador puede ejecutar en la CPU.

  • Justo antes del controlador de kernel termine de ejecutarse, se restaura el contexto hilo aplicación desde el marco de captura, antes de volver control a la aplicación.

3. ¿Cómo vuelve a la pila del usuario después de completar la llamada al sistema?

El proceso anterior también explica claramente esta cuestión.

+0

gracias, han pasado 4 años que hice esta pregunta, yo estaba en la universidad esa vez. Aún así tu respuesta mejoró mi conocimiento. – user609306

0

El contexto de un proceso (psw, estado de los registros, pc ...) se guarda en la PCB del proceso, en el espacio del kernel de la memoria, no en la pila. Sí, hay una pila para cada proceso de usuario y más, una pila para cada subproceso en la memoria de espacio de usuario. En el kernel, las estructuras de datos son compartidas por los códigos múltiplos de la función en el kernel. La pila se usa para la llamada del procedimiento y para las variables locales, no para guardar el contexto.

Cuestiones relacionadas