Formación del proceso a partir del programa

Proceso : Un Proceso es un programa en ejecución se llama Programa. 

Pero la conversión de un programa en proceso implica varias etapas que están claramente definidas en este artículo. Además, después de que el programa se convierte en el proceso, la memoria debe asignarse a estos procesos en la memoria principal y estas asignaciones de memoria son manejadas por el sistema operativo utilizando varios métodos y algoritmos explicados hacia el final de este artículo. 

Inicialmente, cuando escribimos nuestro código en el editor de texto (ya sea en cualquier idioma) se almacena en la memoria principal. Y cuando llamamos al compilador, toma este código y lo convierte en código ensamblador, es decir, convierte el código de alto nivel en código de bajo nivel. Luego, el ensamblador toma este código ensamblador generado después de la compilación y lo convierte en código objeto. Este código de objeto es de 0 y 1, pero este código no se puede ejecutar directamente. 

Para ejecutar el código se adoptan secuencialmente los pasos explicados a continuación. El proceso de conversión de código de alto nivel a código de bajo nivel lo realiza el compilador y esos pasos se definen claramente en el curso Diseño del compilador, el resto de los pasos los maneja el sistema operativo. El ensamblador es diferente para las diferentes plataformas. 

En la actualidad, el compilador hace todo el trabajo que se enumera a continuación por nosotros. Por lo tanto, no enfrentamos el problema de compilar por separado, luego vincular y cargar en la memoria principal. 

Durante la compilación del código, se siguen los pasos que se definen a continuación: 
 

El código objeto producido después de todos los pasos anteriores tiene las siguientes secciones, a saber:  

1. Header
2. Text/Code Segment
3. Data Segment
4. Relocation Information
5. Symbol Table
6. Debugging Information 

Estos se explican a continuación a continuación. 

  1. Encabezado: 
    Dice cuáles son las secciones disponibles en el Código Objeto y cuáles son las ubicaciones en las que varias secciones están presentes en la memoria principal. Es como si mantuviera un puntero a las ubicaciones de todas las secciones. 
     
  2. Segmento de texto/código: 
    Es la parte del código objeto que contiene el código real escrito. 
     
  3. Segmento de datos: 
    es la parte del código objeto que contiene los miembros de datos. 
     
  4. Información de reubicación: 
    hay 2 tipos de dirección: 
    • i. Dirección reubicable: 
      la dirección es relativa a 0, ya que el lugar real donde se cargará el programa no se conoce en el tiempo de compilación. 

       

    • ii. Dirección absoluta: 
      la dirección reubicable se convierte en una dirección absoluta cuando el programa finalmente se carga en la memoria principal, ya que ese punto conocería la ubicación exacta donde se carga el programa. 

       

  1. Tabla de símbolos : 
    contiene todos los símbolos, es decir, todas las variables utilizadas y todas las funciones utilizadas. También realiza un seguimiento de las direcciones de las funciones definidas por nosotros o las funciones predeterminadas. 

    La tabla de símbolos contiene la dirección de las funciones definidas por nosotros, pero puede carecer de la dirección de las funciones predeterminadas porque en nuestro programa no definimos una y otra vez las funciones predeterminadas. Por lo tanto, la dirección de las funciones predeterminadas permanecería sin resolver en la tabla de símbolos. 

    Ahora estas direcciones no resueltas serán resueltas por Linker en los pasos posteriores. 

    Los programas están diseñados de tal manera que nunca un solo código de objeto es autosuficiente, sino que se toman en cuenta varios códigos de objeto para convertirlos en un código ejecutable correcto. Entonces, cada código de objeto toma la ayuda de varios otros códigos de objeto. 

    Ahora es el enlazador el que vuelve a resolver todas las direcciones no resueltas en la tabla de símbolos tomando la ayuda de varios otros códigos de objeto donde se definirían las funciones específicas. El enlazador para encontrar fuentes para resolver las direcciones buscaría inicialmente en el mismo directorio a partir del programa, si no se encuentra, iría al directorio especificado por el compilador. 
     

Linker funciona en 2 fases: 

I. Primera Fase: 
Aquí se encuentra cuales son los segmentos que están presentes y cuales segmentos se van a cargar. Utiliza 2 tablas: tabla de segmentos y tabla de símbolos. 

  • 1. Tabla de segmentos: se utiliza para encontrar los segmentos que se van a cargar. 
  • 2. Tabla de símbolos: se utiliza para encontrar los símbolos que no están resueltos en la Tabla de símbolos y que deben resolverse. 

     

II. Segunda Fase: 
Aquí, en esta fase, el Enlazador realmente resuelve todos los Símbolos no resueltos en la Tabla de Símbolos. 

Nota: 
Como se mencionó anteriormente, todavía se dejan algunos símbolos sin resolver intencionalmente porque el programa los usa comúnmente, por lo que se mantienen directamente en la memoria principal. Entonces, cuando necesitamos resolver, solicitamos directamente la dirección presente en la memoria principal en lugar de mantener repetidamente el mismo código. Esta parte del código se llama Stub Code

Entonces, el Enlazador combina todo el código Objeto para producir un solo código Objeto donde se resolverían todas las direcciones (excepto algunas que se usan comúnmente). Entonces, las funciones principales que realiza Linker son: –  

1. Relocation
2. Symbol Resolution 

Por lo tanto, el enlazador genera un código reubicable

Ahora el cargador aparecerá en la imagen. La función del cargador es colocar el programa en la memoria principal. El cargador sabe dónde debe cargarse el programa. Ahora, cuando el proceso se carga en la memoria principal, la asignación de memoria puede ser: – 

1. Asignación de memoria contigua: 

i. Static allocation
ii. Dynamic allocation 

2. Asignación de memoria no contigua : 

i. Paging
ii. Segmentation
iii. Segmented Paging 

Publicación traducida automáticamente

Artículo escrito por babayaga2 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 *