Conceptos fundamentales sobre procesos en sistemas operativos

Un proceso es la unidad básica de asignación de recursos y planificación en un sistema operativo. Representa la ejecución de un programa, siendo una entidad activa ("viva"), a diferencia del programa que es simplemente código almacenado en disco ("muerto").

Algoritmos de planificación de procesos

  • FIFO (First In First Out): Beneficia processo largos, perjudica cortos
  • SJF (Shortest Job First): Favorece procesos cortos, desfavorece largos
  • Round Robin con colas multinivel: Divide el tiempo en segmentos con prioridades, permitiendo equilibrio

Estados de un proceso

Los procesos transitan entre tres estados principales: listo, en ejecución y bloqueado.

Creación de procesos en Python

Método básico usando Process

from multiprocessing import Process
import time

def tarea_secundaria(nombre):
    print(f'Proceso secundario {nombre} iniciado')
    time.sleep(2)
    print(f'Proceso {nombre} finalizado')

if __name__ == '__main__':
    proc = Process(target=tarea_secundaria, args=('proceso1',))
    proc.start()
    print('Proceso principal continuando')

Método orientado a objetos

from multiprocessing import Process

class MiProceso(Process):
    def run(self):
        print('Proceso personalizado ejecutándose')
        # Lógica del proceso

if __name__ == '__main__':
    mp = MiProceso()
    mp.start()

Comunicación entre procesos

Los procesos no comparten memoria, requiriendo mecanismos especiales para comunicación:

Uso de colas (Queue)

from multiprocessing import Queue

cola = Queue(maxsize=3)
cola.put('mensaje1')
print(cola.get())  # Recupera 'mensaje1'

Modelo productor-consumidor

from multiprocessing import Process, Queue
import random

def productor(cola):
    for i in range(5):
        item = f'producto_{i}'
        cola.put(item)

def consumidor(cola):
    while True:
        item = cola.get()
        print(f'Consumiendo {item}')

if __name__ == '__main__':
    q = Queue()
    p = Process(target=productor, args=(q,))
    c = Process(target=consumidor, args=(q,))
    p.start()
    c.start()

Sincronización con Lock

from multiprocessing import Process, Lock

def tarea_con_recurso(lock, recurso):
    lock.acquire()
    try:
        # Sección crítica
        recurso.value += 1
    finally:
        lock.release()

Procesos especiales

  • Procesos zombis: Procesos terminados que conservan identificador
  • Procesos huérfanos: Procesos cuyo padre terminó antes
  • Procesos demonio: Terminan cuando el proceso principal finaliza

Etiquetas: multiprocessing Python procesos queue lock

Publicado el 9-27 07:14