Los datos temporales, como los argumentos de método/función, la dirección de retorno y las variables locales, se almacenan en la pila del proceso, mientras que, por otro lado, la pila de la CPU consta de una colección de palabras de datos. Emplea la técnica de acceso Last In First Out (LIFO) , que es la más común en la mayoría de las CPU. En este artículo vamos a descubrir la diferencia detallada entre ambos.
1. Ejemplo de una pila de procesos:
C
#include <stdio.h> int main() { printf("Geeks for Geeks \n"); return 0; }
Geeks for Geeks
Análisis: este código solo imprime una línea, ya que solo se limita a un proceso, que finaliza después de su finalización.
2. Ejemplo de una pila de CPU:
C
#include <stdio.h> int GeeksforGeeks(int parameter1, char parameter2) { int local1 = 9; char local2 = 'Z'; return 0; } int main(int argc, char* argv[]) { GeeksforGeeks(7, '9'); return 0; }
Producción :
int main(int argc, char *argv[]) { 00401060 push ebp 00401061 mov ebp, esp 00401063 sub esp, 40h 00401066 push ebx 00401067 push esi 00401068 push edi 00401069 lea edi, [ebp-40h 0040106C mov ecx, 10h 00401071 mov eax, 0CCCCCCCCh 00401076 rep stos dword ptr [edi]}
Análisis: como puede ver, todos estos son los diferentes registros de CPU que se muestran al ejecutar esto, ya que la pila de CPU es un proceso más grande.
Diferencia entre una pila de proceso y una pila de CPU:
Pila de procesos |
Pila de CPU |
---|---|
Cada proceso tiene su propio bloque de control de procesos (PCB) para guardar dicha información en un cambio de contexto, lo que permite que el algoritmo de programación funcione en una ID de proceso básica. | Cada proceso no posee su propio PCB , por lo tanto, el estado de un proceso también está contenido en los registros que se almacenarán para su desalojo. |
El PCB asociado con esa ID se restaura cuando un proceso obtiene la CPU. | El PCB asociado con esa ID no se restaura a diferencia de Process Stack. |
Una pila no es más que un bloque de memoria. | Consiste en varios bloques de memoria agrupados. |
Cada modo de procesador generalmente tiene su propia pila en un proceso. Cada subproceso en subprocesos múltiples tiene su propia pila. | Cada modo de CPU generalmente posee una pila única. Puede haber varias pilas en un proceso. |
Cuando ocurre una transición de contexto, el núcleo «elimina» el proceso anterior y trae uno nuevo. | Cuando ocurre una transición de contexto, se restaura su estado anterior para que pueda reanudar la ejecución donde la dejó. |
Hay un número finito de registros en cada arquitectura. | Guardar registros en la pila es por razones de eficiencia, por lo que todo lo que tiene que hacer ahora es volver a ingresar los valores. |
Las variables locales se almacenan en la pila. Cuando se declaran variables locales, se reserva espacio en la pila para ellas. | El puntero de la pila aumenta a la siguiente ubicación de memoria física cuando se inserta o «empuja» un nuevo elemento de datos en la parte superior de una pila, y el nuevo elemento se copia en esa dirección. |
Contando con todo lo anterior, esas fueron las diferencias, espero que este artículo lo haya ayudado a identificarlas, también tenga en cuenta que, aunque los dos pueden sonar algo similares, los pequeños cambios lo hacen omnipresente.
Publicación traducida automáticamente
Artículo escrito por icloudanshu y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA