Sistemas Operativos
Procesos 2012
Agenda
• Introducción • PCB (task_struct) • Agrupaciones de procesos • Estado de un proceso • Cambio de proceso (task switch) • Creación y destrucción de un proceso • Threads
TSO – Procesos – 2012
Introducción
• Un proceso es un programa en ejecución • Es una de las abstracciones fundamentales en un sistema Unix • Incluye un conjunto derecursos como archivos abiertos, señales pendientes, espacio de memoria y uno o más hilos de ejecución • Cada hilo de ejecución tiene su propio stack y program counter • Veremos que para Linux un thread es solo un tipo particular de proceso
TSO – Procesos – 2012
Introducción
• Identidad de los procesos:
− −
Process ID (PID) Credenciales (UID, GID) Argumentos Entorno (lista conNOMBRE=VALOR) Se guardan al principio del stack del proceso y se heredan en un fork
• Entorno de ejecución
− − −
• En el código del kernel de Linux se les llama tasks
TSO – Procesos – 2012
Introducción
• Contexto de los procesos
− − − − − −
Contexto de planificación: copia de los registros, prioridad, clase de planificación (más adelante) Recursos en uso y consumidos (accounting) Tablade archivos abiertos Contexto en el file system (working directory) Tabla de señales Contexto de memoria virtual (describe el espacio de memoria del proceso)
TSO – Procesos – 2012
PCB
• Es el struct task_struct • Es una estructura de cerca de 2 KB en una máquina de 32 bits • Se puede acceder rápidamente al task_struct del proceso actual mediante la macro current • Antes del kernel 2.6 seguardaba al final del stack del kernel de cada proceso • Ahora se crea dinámicamente por el slab allocator y en su lugar se guarda el struct thread_info al final del stack • El thread_info contiene un campo task que es un puntero al task_struct
TSO – Procesos – 2012
Current en x86
Fuente: Understanding the linux kernel, 3ra edición
TSO – Procesos – 2012
PCB
Fuente:Understanding the linux kernel, 3ra edición
TSO – Procesos – 2012
Agrupaciones de procesos
• Todas las listas son doblemente encadenadas con un encabezado (struct list_head) • Lista global de procesos • Listas de procesos listos • Jerarquía: parent, children, sibling • pid_hash: para encontrar un proceso a partir del PID • Listas de espera por eventos
TSO – Procesos – 2012
Agrupaciones deprocesos
Fuente: Understanding the linux kernel, 3ra edición
TSO – Procesos – 2012
list_head
• Es una implementación de listas doblemente encadenadas y circulares provista por el kernel • Puede contener elementos de cualquier tipo y funciona en todas las plataformas soportadas por el kernel • A diferencia de las listas comunes funciona agregando un elemento de tipo list_head a cualquier struct• Se pueden tener varios elementos de este tipo en el mismo struct para armar varias listas (como en task_struct) • El tipo es:
struct list_head { struct list_head *next; struct list_head *prev; }
TSO – Procesos – 2012
list_head
• Se proveen varias funciones para
− − −
Insertar al principio y al final Recorrer la lista Obtener y borrar elementos list_entry(elemento, struct lista,variable)
• Para obtener un elemento se usa la macro (#define)
− − −
elemento: es un puntero a un list_head struct lista: es el tipo de la lista variable: es el elemento de tipo list_head dentro del struct
• Se obtiene el puntero al struct a partir del puntero al list_head restando al puntero elemento el offset de variable dentro del struct
TSO – Procesos – 2012
Estado de unproceso
• El estado de un proceso está dado por el flag state del PCB • TASK_RUNNING
−
El proceso está corriendo o en una lista de espera por la CPU El proceso está bloqueado esperando por alguna condición. El proceso puede pasar a running si recibe una señal Igual que el anterior solo que no se despierta si recibe una señal. En general se usa menos que el otro.
• TASK_INTERRUPTIBLE
−
•...
Regístrate para leer el documento completo.