Diferencia entre una pila de proceso y una pila de CPU

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;
}
Producción

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *