Subido por Manuel Madrigal

Operating Systems in a nutshell

Anuncio
Manuel Madrigal Valenzuela
A01114070
Sistema operativo: Es un programa pero NO un proceso
1. Nos da API para acceder a nuestro Hw al mismo tiempo que lo protege de nosotros
desarrolladores mediante la utilización de llamadas a sistema
2. Administra procesos (Sw) mediante la virtualización del Hw, dando acceso a este a los
procesos de manera “concurrente”(Scheduler, Quantum)
Crear (fork,exec), terminar (exit), planificar (scheduler), comunicar (pipe, signals)
3. Administra memoria, usuarios y energía/Disipación
Llamada a Sistema.(Interface entre proceso y SO) Es una interrupción que habilita el modo kernel
en el CPU para tener acceso al Hw y, una vez que se realice la acción requerida, pasa de nuevo por
el CPU para desactivar el modo kernel y regresa el control al usuario.
Modo Kernel. Es un registro en el CPU que al estar activo da acceso a todo el Hw (uso exclusivo SO).
Una llamada a sistema, desde el punto de vista del usuario, se implementa mediante una
interrupción, activando el bit correspondiente al modo kernel en el CPU




El Sistema operativo se ejecuta en el privilegio más alto y permite a las aplicaciones solicitar
servicios mediante llamadas a sistema, las cuales son iniciadas por medio de interrupciones.
Son accesadas mayormente por programas por medio de una API que por uso directo de la
llamada a sistema.
Típicamente, un número es asociado a cada llamada a sistema. La interface mantiene una
tabla indexada de acuerdo a estos números
El usuario no necesita saber nada acerca de cómo es implementada la llamada a sistema
Existen 3 métodos generales para pasar parámetros al SO:
1. Por medio de registros
2. Guardarlos en un bloque de memoria y pasar la dirección de este en un registro
3. Por medio del stack
Tipos de llamadas a sistema:
 Control de procesos. Un programa corriendo debe ser capaz de detener ejecución(load,
execute, end/abort, créate process, terminate process)
 Administración de archivos. Create/delete file, open, close, read, write, reposition, get/set
 Administración de dispositivos. El usuario solicita el dispositivo y al terminar lo libera.
(request/release device, read, write, repostion, get/set, attach/detach devices)
 Administración de información. Usada para transferir información entre el programa de
usuario y el SO(get/set time/date,get/set system data, get/set process/file/device attribute)
 Comunicación.
o Message-passing. Utiliza un buzón de mensajes común para pasar mensajes entre
procesos. Utiliza llamadas a sistema
o Memoria compartida. Dos procesos intercambian información mediante la lectura
y escritura de los datos compartidos.
Procesos. Son una instancia de un programa en un determinado estado (new, ready, running,
waiting/sleeping, terminated) y con cierta memoria y recursos asignados. Tiene un padre y puede
tener hijos.
La memoria de procesos está dividida en 4 secciones:
 Texto. Comprende el código de programa compilado, se lee de
memoria no volátil cuando el programa es lanzado.
 Datos. Guarda variables estáticas y globales asignadas e inicializadas
previamente a la ejecución del main
 Heap. Es usado para asignación dinámica de memoria y es manejado
mediante llamadas a new, delete, malloc, free, etc.
 Stack. Espacio en el stack está reservado para variables locales al
momento de ser declaradas, el espacio se libera cuando las variables
van más allá del alcance.
Estados de un proceso:
 New. El proceso está en la etapa de creación
 Ready. El proceso tiene todos los recursos disponibles
que necesita para ejecutarse pero el CPU no está
trabajando aún en las instrucciones de este proceso.
 Running. El CPU esta trabajando en las instrucciones
de este proceso
 Waiting. Este proceso no puede ejecutarse por el
momento debido a que esta esperando por algún recurso o la ocurrición de un evento.
 Terminated. El proceso se ha completado
Para cada proceso existe un Bloque de Control de Procesos(PCB) que involucra información
específica del proceso: Estado, PID, CPU registers y PC, Información de planificación del CPU(e.g.
prioridades), Información de manejo de memoria, I/O status.




Proceso síncrono. El padre espera a que el hijo termine para poder continuar
Proceso asíncrono. El padre crea un hijo pero no se queda esperándolo.
Zombie. Proceso que perdió su padre y ya terminó (murió).
Huerfano. Proceso que perdió a su padre pero que aún se está ejecutando.
Planificación de procesos. Los objetivos principales del planificador de procesos son mantener el
CPU ocupado todo el tiempo y entregar tiempos de respuesta “aceptables” para todo programa.


Long term Scheduler. Corre infrecuentemente, hasta que acabó un proceso, puede tomarse
el tiempo de tomar decisiones inteligentes
Short term scheduler. Corre muy frecuentemente y tiene que ser muy veloz para cambiar
entre procesos
Cada cierto tiempo (Quantum) el planificador se despierta y asigna el PC al siguiente
proceso(Context Switching-Guardar y restaurar estados, registros, etc)



User time. Tiempo que pasó ejecutando instrucciones que no involucran llamadas a sistema
Sys time. Tiempo que el SO pasó en modo kernel
Real time. User time+ sys time + tiempos muertos de espera
Casi todos los procesos alternan entre dos estados (CPU burst e I/O burst) en un ciclo continuo.




Proceso cambia de running a waiting
Proceso termina
Proceso cambia de running a ready
Proceso cambia de waiting a ready
Non preemptive scheduling or cooperative. Un
Nuevo proceso debe ser seleccionado
Preemptive scheduling. O continua ejecutando
el proceso actual o selecciona uno diferente
Criterios de planificación. Utilización de CPU, Throughput (número de procesos completados por
unidad de tiempo), Turnarround time(tiempo requerido por un proceso particular para
completarse), Waiting time(Cuanto tiempo gastan los procesos esperando su turno), response time.
Algoritmos de planificadores.






First Input First Output. Fácil implementación pero no se puede ejecutar el sig. Proceso
hasta que termine el anterior
Shortest Job First. Atiende primero a los procesos cortos y deja los procesos largos para el
final. Pero no existe manera ideal de implementarlo ya que no podemos conocer que tan
largo es un proceso hasta el momento de ejecución.
Priority Scheduling. Asigna tiempos de acuerdo a prioridades preasignadas, los de más alta
prioridad son atendidos primero.
Round Robin. Asigna misma cantidad de tiempo(Quantum) a todos los procesos por igual.
Multilevel Queue Scheduling. Multiples Queues separadas son establecidas, cada una de
ellas implementando el algoritmo más apropiado (Round Robbin más usado). La
planificación debe efectuarse también entre queues. Dos opciones comunes son “Strict
priority”(ningún proceso en una queue de menor prioridad corre hasta que todas las queues
de mayor prioridad estén vacías)(más utilizado) y “round robin”
Multilevel Feedback-Queue Scheduling. Similar a la anterior a excepción de que los procesos
pueden brincar entre queues
Multiple processor Scheduling.


Asymmetric multiprocessing. Un procesador es el master, controlando todas las actividades
y corriendo todo el código kernel, mientras los demás ejecutan solo código de usuario.
Symmetric multiprocessing. Cada procesador planifica sus propios trabajos.
Inter Process Communication
IPCs hace referencia al mecanismo que el SO provee a los procesos para compartir información.
Pipes: Un pipeline es una secuencia de procesos encadenados por sus flujos estándar, de manera
que la salida de cada proceso alimenta la entrada del siguiente. Los pipes son unidireccionales, la
información fluye a través del pipe de izquierda a derecha. Un concepto importante en lo que
respecta a Unix pipes es el “buffering”, donde la salida de un proceso es almacenada en un buffer
hasta que un segundo proceso comienza a leer de este.
Señales. Es una notificación asíncrona enviada a un proceso o a un thread específico dentro del
mismo proceso para notificarle que un evento ha ocurrido. Cuando una señal es enviada, el SO
interrumpe el flujo normal de ejecución del proceso destino para entregar la señal. Si el proceso ha
registrado previamente un manejador de señales, esa rutina es ejecutada, de otro modo, la rutina
de manejo de señales por default es ejecutada. Como las señales son asíncronas, otra señal puede
ser entregada al proceso durante la ejecución de una rutina de manejo de señales, es por ello que
existen métodos para bloquear y desbloquear la entrega de señales.
Memoria Compartida. Es memoria que puede ser accedida de manera simultánea entre
múltiples procesos, en un intento por proveer comunicación entre ellos y evadir copias
redundantes. Es un método de IPC para intercambiar información entre procesos corriendo
al mismo tiempo. Un proceso reserva un bloque de RAM al cual otros procesos pueden
acceder.
Manejo de Memoria
Es la funcionalidad de un SO para manejar memoria principal y mover procesos de ida y de regreso
entre memoria principal y Disco durante ejecución. Realiza un seguimiento de cada locación de
memoria, decide que procesos obtienen la memoria, en qué momento y cuanta de esta.
Memoria Virtual vs Memoria Física. El código tiene una dirección virtual y al momento de cargarlo
en RAM se asocia una dirección física. El programa de usuario trabaja con direcciones
lógicas/virtuales, nunca ve en realidad la dirección física, pues es el MMU (Memory-Management
Unit) quien se encarga de mapear direcciones virtuales a direcciones físicas.
Swapping. Un proceso puede ser cambiado temporalmente hacia fuera de la memoria en un
almacén de respaldo, para hacer ese espacio de memoria disponible para otro proceso y después
traído de vuelta a memoria para continuar ejecución.
Memory Allocation (Contiguous). Memoria principal dividida en 2 particiones (SO (parte baja) y
procesos de usuario (parte alta)). Existen registros para saber los límites de las particiones
(segmentación). Al desocuparse algunos procesos van dejando huecos en memoria que después
son reutilizados por otros procesos. First-Fit (Alocar el primer hueco lo suficientemente grande).
Best-Fit (Alocar el hueco más pequeño que es lo suficientemente grande). Worst Fit (Alocar el hueco
más grande).
Fragmentación. Mientras los procesos son cargados y removidos en memoria, el espacio libre en
memoria se va segmentando en pequeñas piezas. Hasta llegar al punto en que esos bloques de
memoria sobrantes son tan pequeños que no pueden ser asignados a un proceso. External (El
espacio en memoria es suficiente pero no contiguo) e Internal (El bloque de memoria asignado es
más grande que el proceso dejando alguna porción de memoria inútil)
Paging. Traer páginas a memoria solo cuando son necesitadas. Se lleva un registro en la tabla de
páginas con un bit ( valid (1) - invalid (0) ) para saber si la página está o no en memoria, este es
revisado al ser solicitada la página, y de no estar es necesario avisar al SO para que vaya por ella a
DD, actualice la tabla de páginas y reinicia la instrucción. Las páginas son remplazadas en memoria
cuando es necesario traer una nueva página, este remplazo se lleva a cabo con un algoritmo
eficiente que no rebaje el desempeño.
Esquema de traducción de direcciones. La dirección se divide en el número de página (usado como
índice en la tabla de páginas) y offset de página. Por lo que en este esquema se requieren dos
accesos a memoria, lo cual se puede solucionar con el uso de un hw especial tipo cache de rápida
búsqueda (TLBs), el cual asocia páginas (Divisiones de memoria lógica en bloques del mismo
tamaño) con frames (Divisiones de memoria física en bloques del mismo tamaño).
Page Table Structure. Hierarchichal Paging (Base and Offset inside the table), Hashed Page Tables
(Unique Hash Key), Inverted Page Table (An entry for every page)
Page sharing. Cuando dos procesos tienen el mismo código pero diferentes datos (argumentos).
Comparten la misma página de código y tienen página propia para los datos.
Segmentation. Mismo principio que paging a diferencia de que en paging la memoria está divida en
bloques del mismo tamaño. En segmentation se tienen procesos de diferentes tamaños guardados
en memoria con una tabla que guarda la dirección del principio del proceso y el tamaño del mismo.
Sistemas de Archivos
Directorio. Es un tipo especial de archivo que contiene nombre y referencia (sector y pista) de otros
archivos
FAT. File Allocation Table es un sistema de archivos referenciado por una tabla indexada. Tiene la
ventaja de que no necesariamente se encuentra en localidades contiguas, por lo que al ampliar el
archivo no se ocupa mover de lugar. Cómo desventaja se fragmenta el disco poco a poco, hay que
buscar constantemente en la FAT por la siguiente página, los records FAT son limitados, el tamaño
de los archivos es limitado.
UFS. Unix File System utiliza una tabla que contiene inodos cada uno con nombres, permisos, tipo
(dir/archivo). Tiene una tabla con 4 referencias directas y una 5ta hacia un archivo que contiene 512
referencias. Tamaño no limitado de archivos.

El más usado es ext 3, que es una combinación de UFS, Journaling (Principio de
transacciones: Guarda en RAM y primer sector de disco periodicamente y cuando tiene
tiempo guarda en DD), swapping, hibernation(Guarda RAM en un segmento de DD)
Copiar archivos.





Especificar directorio de origen y destino
Agregar path completo
Buscar secuencialmente el path iniciando desde root
Crear un nuevo registro en el directorio y asociarlo a un inodo
Copiar los bloques de memoria referenciados por el archivo 1 y referenciar la copia al
archivo 2
Borrar archivos. Se borra la referencia al inodo, y si el inodo ya no referencía nada, este es marcado
como libre.
Chmod. (lectura r=4, escritura w=2,ejecución x=1)



Usuario. Colección de variables de ambiente, permisos y archivos que se aplican y me
identifican ante la computadora.
Grupo, A través de estos se obtienen privilegios adicionales a los que ya tenía como usuario.
Otros. Quienes no pertenecen a usuario ni grupo.
Transacción. Todas las escrituras a disco siempre van dentro de una transacción. Estas permiten que
la escritura a disco sea segura, ya que si no se escribe un dato, no se escribe ninguno, y esta debe
ser enviada de nuevo. Las transacciones siempre deben ser pequeñas.
Concurrencia. Es una propiedad de sistemas que consiste en cómputos que se ejecutan de manera
superpuesta en el tiempo, y que podrá permitir el reparto de recursos comunes entre los cómputos
superpuestos. N cantidad de usuarios o procesos que quieren acceder al mismo recurso
Hilos. Un nuevo proceso (ligero) con un stack pequeño que apunta al stack original, un heap que
apunta al original y código que apunta a la función específica que se desea ejecutar en el proceso
original. Esto se ve reflejado en ganancia de tiempo de CPU pero puede ocasionar problemas de
concurrencia. En el momento que termina el proceso original, todos los hilos mueren.
Los hilos pueden interactuar con otros hilos de diferentes maneras:
• Compartir acceso a dispositivos del sistema (a través del SO)
• Compartir acceso a datos en su espacio de direcciones del proceso
MuTex (Mutual Exclusion): Permite que el recurso compartido sea accedido a lo más por un solo
hilo en cualquier momento dado. Es un tipo de variable global que solo acepta dos valores (0 y 1).
Hay dos operaciones: acquire (si la variable es 1 la decrementa, si no, espera a que sea 1 para
decrementarla) y release ( si esta en 0 la incrementa).
Sección crítica: La(s) parte(s) del programa en que el objeto compartido es accedido.
Condición de carrera: Una secuencia de instrucciones de la cual el resultado depende del orden en
que es ejecutada por los hilos, dando lugar a valores inconsistentes de variables.
Semáforo. Objeto (global) con un valor entero inicial que soporta dos operaciones:
• P-Si el valor es mayor que cero, decrementar. De otra manera, esperar hasta que el valor
sea mayor a cero para decrementar.
• V- Incrementar el valor del semáforo
*El balance óptimo para m recursos es n=m-1 procesos.
Deadlock. Esta situación se presenta cuando los procesos están atrapados esperando en una espera
circular por recursos.
Starvation. Cuando un proceso espera por un recurso de manera indefinida.
Data Center. Sistema de archivos distribuido, un solo rack con muchos CPUs pero un solo SO que
maneja todo.
Virtual CPU. Máquina remota que utiliza mi CPU.
Contenedores (Dockers). Mismo concepto que VCPU pero un solo SO para varias aplicaciones,
ahorrando disco. Las apps corren de manera aislada de manera que no se ven entre usuarios.
Descargar