Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porMaría Antonia Salazar Moreno Modificado hace 7 años
1
Proceso: Una instancia de un programa en ejecución
Paul Leger
2
Procesos Un proceso que se ejecuta en segundo plano, es un proceso que se ejecuta “detrás de escena” sin intervención del usuario El funcionamiento de SO depende de un conjunto de procesos que se ejecuten en segundo plano (conocidos como servicios y antiguamente como demonios). Ejemplos: servicios de red, sonido, Web, antivirus, buscador de actualizaciones Procesador ejecuta varios procesos (en segundo plano o no) por segundos, sin embargo, en teoría no hay paralelismo (TAREA: estudiar el comando “top”)
3
Procesos (2) Seleccionar qué proceso y cuánto tiempo se debe ejecutar un proceso en un momento no es fácil. Hay varias estrategias detrás de este tema (más sobre esto: “job scheduling”) Cambiar desde un proceso a otro tiene un costo de sobrecarga asociado. Ejemplo, retomar los datos necesario para cargar ese nuevo programa Un programa ejecutado dos veces, tiene dos procesos asociados. Incluso, un proceso podría estar ejecutado en modo superusuario y el otro en modo simplemente usuario
4
Creación de Procesos (1)
El arranque del sistema. Ejemplos: servicios de red, sonido, bluetooth, Web, Mail, etc La ejecución, desde un proceso, de una llamada al sistema para creación de procesos Ejemplo: ejecución de un programa en Python, el cual ejecuta un programa para enviar un mail Una petición de usuario para crear un proceso Ejemplo: Pulsar un “click” al reproductor de multimedia El inicio de un trabajo por lotes Ejemplo: Un programa que inicie todos los días a las 3:00 AM, el cual ejecute varios procesos (TAREA: estudie el comando crontab)
5
Creación de Procesos (2)
Un proceso puede crear otro proceso independiente llamado proceso hijo. En Unix, la función se llama fork y en Windows se llama CreateProcess
6
Procesos Pesados Cada proceso PESADO tiene su propio espacio de memoria y contador de programa, pero comparten el texto de programa En Unix, los procesos padres e hijos forman una jerarquía de procesos. Por ejemplo, todos los procesos en Unix vienen del procesos init
7
Scheduling de Procesos (1)
Procesador Proceso Listas de Procesos Procesos desbloqueado Lista de Procesos bloqueada
8
Scheduling de Procesos (2)
9
Estrategias de Job Scheduling
FIFS (First-in First-Serve): El primer proceso en llegar, es el primer en ser servido. Observación: El último proceso que llega debe esperar que todos los procesos anteriores terminen Round Robin Scheduling: Hay pequeña unidad de tiempo q por proceso (time-slice). Todo proceso, cuyo estado es listo, puede ejecutar por tiempo q. Observaciones: 1) Todo proceso debe esperar a lo mas q*(n – 1) unidad de tiempo 2) q muy grande, se puede transformar en FIFs 3) q muy pequeño, se usa el procesador casi todo el tiempo en cargar un proceso para ser ejecutado
10
Procesos Livianos (Threads/Hilos)
Es un proceso dentro de otro proceso Es útil para realizar “algo” mientras el proceso principal trabaja. Ejemplo, interfaces gráficas, funciones automáticas en un procesador de texto como contar palabras Comparten memoria (no necesita ser enviada entre procesos). Analogía, piensen en un Dropbox La creación de los hilos son mucho más rápido que el fork de un proceso
11
Procesos Livianos v/s Pesados
Cada proceso tiene su propia memoria Cada proceso comparte su memoria
12
Threads (Hilos) Mini-procesos que pueden realizar “algo” con el proceso trabaja para mostrar los resultados temporales. Ejemplo, interfaces gráficas, funciones automáticas en un procesador de texto como contar palabras Comparten memoria (no necesita ser enviada entre proceso). Analogía, piensen en un Dropbox Son mucho más rápido que el fork de un proceso
13
Ejemplos de hilos Un procesador de texto como Word usa hilos para revisar la ortografía y la gramática. Además, puede usar otros hilos para dar formato al documento y contar palabras
14
Mirar Threads en Python
Hay una librería llamada threading Un hilo se crea con la funcion threading.Thread(target = funcion, args = (parametros) Ejemplo: myThread = threading.Thread(target = mostrar, args = (texto,) Un hilo comienza a trabajar con el método start. Por ejemplo: myThread.start() Para esperar que un thread termine, se usa la función join
15
Ver Ejemplo 1
16
Propiedades de un Hilo y Proceso
17
Hilos
18
Secciones Críticas (1/2)
Cómo los hilos comparten memoria (área de datos y variables globales), dos hilos operando “al mismo tiempo”, puede dejar esta memoria inconsistente En threading, esto se conoce como datarace o race condition Para evitar esto, es necesario reconocer cuáles son las secciones críticas
19
Secciones Criticas (2/2)
count = count + 1 #count = count + 1
20
Ver ejemplo 2
21
Evitar Race Condition Race Condition deja la memoria de un programa en ejecución en estado inconsistente Se han creado varias técnicas para evitar race condition Básicamente, estas técnicas duermen hilos cuando ellos pueden potencialmente dejar la memoria en estado inconsistente
22
Semáforos Se crea un semáforo, el cual se puede ver como una maquina de tickets que pueden ser consumidos nWaitSem consume tickets y nSignalSem entrega tickets Si no hay tickets, no se puede seguir avanzando, es decir, el hilo se duerme
23
Productor/Consumidor
HILO Productor HILO Consumidor
24
Pseudo-Código de Productor/Consumidor
Suponga dos semáforos: Full & Empty Full con “0” tickets Empty con “N” tickets Una lista con una limitada capacidad: buffer de tamaño N Dos variables: nextEmpty = 0 & nextFull = 0 def productor(): while True: item = producir() nWaitSem(Empty) buffer[nextEmpty] = item nextEmpty = [nextEmpty + 1]%N nSignalSem(Full) def consumidor(): while True: nWaitSem(Full) item = buffer[nextFull] nextFull = [nextFull + 1]%N nSignalSem(Empty)
25
Lecturas Sección : Completa Secciones: – Secciones: – 2.3.5
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.