Coloquio Flashcards
Que hace un sistema operativo?
Administra los recursos de hardware de un sistema de
computación para ofrecer servicios a sus usuarios.
Es un programa que controla la ejecucion de otros programas (aplicaciones). Debe perseguir 3 objetivos:
Eficiencia
Evolucion
Comodidad
Debe ofrecer servicios tales como: creacion de programas, ejecucion de programas, acceso a dispositivos de E/S, acceso controlado a los archivos.
Ademas, el SO debe proveer servicio de deteccion y respuesta a errores, como fallas de hardware o de software. Tambien debe proveer un sistema de contabilidad y monitoreo de recursos.
Es un sistema de control, que funciona dentro del mismo sistema que controla, y ademas abandona el control del sistema para dar lugar a las tareas de los usuarios
Componentes de un sistema de computación
Procesador, Memoria principal, Dispositivos de E/S, Interconexión
Registros del procesador
Visibles para el usuario: Al utilizarlos se reduce el acceso a la memoria principal.
De control y estado: Utilizados por el procesador para ejercer control sobre las operaciones y por rutinas del SO
Registros visibles
Se puede hacer referencia a estos registros (programador). Por ejemplo de datos, de direcciones, etc.
Registros de direccion (forma parte de registros visibles para el usuario)
Registro indice: para formar direcciones fisicas a partir de logicas
Puntero de segmento: tambien se usa para formar direcciones
Puntero de pila: contiene direccion a extremo superior de la pila
Registros de control y estado
PC (program counter): contiene direccion de memoria donde se almacena la proxima direccion a ejecutar
IR (instruction register): contiene ultima instruccion leida
PSW (program state word): muestra los codigos de condiciones, estado de interrupciones, privilegio de ejecucion, etc.
Ciclo de instruccion
Procesador lee instruccion de memoria RAM que indica el PC, luego de esto el PC se incrementa. Procesador carga la instruccion en el IR, se interpreta y ejecuta, y el ciclo se repite.
Con interrupciones: antes de buscar una nueva instruccion el procesador verifica si hubo una interrupcion. Luego busca siguiente instruccion del programa o primera instruccion de la rutina de interrupcion, segun sea el caso.
Tipos de instruccion (CPU)
Transferencia procesador/memoria: se mueven datos desde registros a RAM y viceversa
Transferencia procesador E/S: se mueven datos desde el procesador a dispositivo E/S y viceversa
Manipulacion de datos: operaciones aritmeticas o logicas sobre datos en los registros
Control: instrucciones que alteran la secuencia de ejcucion, modificando PC
Interrupciones
Evento que interrumpe el flujo normal de instrucciones. Procesador guarda estado de sus registros y sirve la interrupcion. Luego reanuda su ejecucion donde la dejo. Esto tambien se usa para que el procesador multiplexe entre procesos.
Se transfiere el control desde el programa del usuario hacia el SO.
Tipos de interrupciones
De programa: generadas por el mismo procesador mientras ejecuta un programa. Desbordamiento, division por cero, etc.
De reloj: disparada por un contador de hardware
De E/S: generada por dispositivos externos: mouse, teclado, placa de red, etc.
Interrupciones multiples
En estos casos pueden servirse de manera secuencial o por orden de prioridad.
Secuencial: se sirve la primera, inhabilitando servicio de interrupciones hasta terminar de servirla, y luego se continua.
Prioridad: si se esta sirviendo una interrupcion y llega otra de mayor prioridad, se interrumpe la actual y se sirve la de mayor prioridad.
Multiprogramación
Ejecucion de multiples programas en simultaneo. Mientras un programa espera por E/S se ejecuta otro. Todo esto se hace con interrupciones.
Ejecucion de operaciones de E/S (tipos)
E/S programada: Procesador pide datos (lectura o escritura) y espera hasta que la operacion termine
E/S por interrupciones: Procesador pide datos (lectura o escritura), luego comienza a ejecutar otro programa hasta que el dispositvo interrumpe para avisar que termino
E/S por DMA (direct memory access): igual al anterior pero el dispositivo interrumpe cuando termina de copiar datos a memoria principal. De esta forma se libera al procesador de la tarea de mover los datos
DMA (Direct memory access)
Sistema que permite a dispositivos de E/S acceder directamente a la memoria RAM, liberando al procesador de esta tarea
Jerarquia general de memoria
Al descender por la piramide el costo por bit se reduce, aumenta la capacidad, pero disminuye la velocidad.
Cache de disco
Porcion de la memoria principal que se utiliza para guardar datos de la memoria secundaria, que se supone se utilizan frecuentemente, con el objetivo de ganar velocidad. Tambien se usa para juntar bloques de datos a escribir antes de iniciar tranferencia al disco
Memoria cache
Es la misma idea que el cache de disco, pero esta se situa entre el CPU (registros) y la RAM. Se utiliza para guardar datos o instrucciones que el CPU usa con frecuencia. El SO desconoce esto, ya que se maneja por HW especifico. Cuando el CPU necesita un dato primero lo busca en la cache, y si no lo encuentra lo busca en memoria
Evolucion de los SO
Primera generacion (1945-55) Sistemas basados en valvulas concebidos de manera casi artesanal.
Segunda generacion (1955-65) Sistemas a base de transistores
Tercera genracion (1965-80) Se intenta mejorar la eficiencia de la produccion de sistemas, aparece multiprogramacion, se desarrolla UNIX y estandar POSIX
Cuarta generacion (1980-90…) Aparecen microcomputadoras o computadoras personales PC. Aparece MAC, windows, redes LAN, WAN, se desarrolla el kernel LINUX
Quinta generacion (1990-….) Evolucion de dispositivos moviles. IOS, Android, Windows, RIM (blackberry)
Multiprogramacion y Tiempo compartido
Multiprogramacion: multiples programas ocupando la memoria de manera simultanea y que se alternan para usar el CPU
Tiempo compartido: similar a multiprogramacion, pero con la diferencia de que soporta multipes sesiones interactivas
Atributos de SO modernos
Concepto de proceso, gestion de memoria y concepto de memoria virtual, seguridad en el manejo de la informacion, planificacion avanzada del uso de recursos, estructura modular del sistema
Otros atributos mas recientes:
MicroKernels: solo las funciones esenciales son ejecutadas por el kernel
Multithreading: para soportar procesadores con capacidad de ejecutar multiples threads
Multiprocesamiento simetrico: para soportar sistemas con multiples nucleos que comparten E/S y memoria
Sistemas operativos distribuidos: en base a multiples sistemas diferentes le ofrece al usuario uno unico.
Problemas de la multiprogramacion
Sincronzacion incorrecta: rutinas que esperan señales, que pueden llegar duplicadas o no llegar
Fallos de exclusion mutua: accesos simultaneos y conflictivos a los recursos
Funcionamiento no deterministico: interferencias entre programas, dificil de depurar
Interbloqueos: dos o mas programas esperandose mutuamente
Concepto de proceso
Es una unidad de ejecucion constituida por:
Un programa ejcutable
Datos e instrucciones necesarios para el programa
Entorno o contexto de ejecucion para el programa, es decir informacion externa al programa que crea y mantiene el SO para administrar su ejecucion (informacion de estado y de control)
Avances en el manejo de memoria
Aislamiento de procesos, evita interferencias
Asignacion automatica y gestion de la memoria para los procesos de manera transparente
Proteccion y control de acceso, permite compartir datos entre programas de forma controlada
Almacenamiento de largo plazo
Memoria virtual
Permite a los programas utilizar y acceder a la memoria independientemente de su implementacion fisica. Aparecen conceptos de paginacion y segmentacion
Seguridad y proteccion de informacion
Los SO se enfocan en la disponbilidad, confidencialidad e integridad con respecto a la informacion y archivos
Planificacion y gestion de recursos
Se consideran factores tales como equidad en la reparticion de recursos, respuesta diferenciada basada en prioridades, eficiencia, entre otros
Traza
Es el listado de la secuencia de instrucciones que se ejecutan para un proceso particular
Modelos de estados y de colas para el manejo de procesos
Hay distintos modelos para representar los estados de los procesos, algunos mas simples que otros, buscar imagenes en las diapositivas
Creacion y terminacion de procesos
Creacion: nuevo usuario intenta acceder al sistema, SO genera un nuevo proceso para ofrecer un servicio, o un proceso puede crear otro, llamado proceso hijo.
SO asigna id al proceso nuevo
Define cuanto espacio va a ocupar el proceso, incluyendo bloque de control
Inicializa bloque de control, stack, estado, etc
Incluye el proceso en las tablas adecuadas
Terminacion: Programa termina por si mismo, usuario desconecta su sesion, usuario termina la ejecucion de una app, o bien errores anormales
Procesos suspendidos
El CPU es tan rapido que puede suceder que la memoria este llena de procesos que esperan eventos.
Para esto se suspenden los procesos, copiando su imagen al almacenamiento secundario, para poder cargar otro proceso en memoria. Asi surgen dos estados nuevos: bloqueado y suspendido, o listo y suspendido.
Procesos pueden ser suspendidos por muchas razones:
Intercambio: el SO necesita memoria para cargar otro proceso
A pedido del usuario: usuario puede solicitar suspension de algun proceso
Temporizacion: suspension por clock
A pedido del padre: padre puede pedirle al SO que suspenda algun descendiente suyo
Estructuras de control del SO
Permiten al SO conocer el estado de los recursos y procesos del sistema:
Tablas de memoria, tablas de E/S, Tablas de archivos
Tablas de memoria
Para seguir estado de memoria principal y virtual. Parte de la memoria esta reservada siempre para el SO. Se necesita la siguiente info:
Asignacion de memoria principal y virtual a cada proceso
Esquemas de proteccion de memoria
Informacion de gestion de memoria virtual
Tablas de E/S y archivos
Para E/S el SO necesita conocer el estado de cada dispositivo:
Disponible
Ocupado
Proceso al cual esta asignado
Direcciones de memoria de destino u origen de las transferencias
Tablas de almacenamiento secundario mantienen info de los archivos:
Posicion en memoria secundaria
Estado actual
Atributos
Imagen de un proceso
Programa ejecutable
Espacios de memoria donde se almacenan variables
Stack del programa
Bloque de control del proceso, administrado por SO
Todo esto es la imagen del proceso
Tablas de procesos
Contienen:
Ubicacion: SO debe saber donde esta la imagen del proceso. Puede estar completa o parcialmente en memoria principal o secundaria
Identificacion: generalmente un numero unico que identifica al proceso, tambien se almacenan identificadores del proceso padre y el usuario que lo genero
Informacion de control del proceso: info de estado y planificacion, prioridad, evento que se espera si esta bloqueado, comunicacion con otros procesos, manejo de memoria, recursos asignados
Gestion de procesos (modos de ejecucion)
Modos de ejecucion: modo kernel o sistema y modo usuario
El modo usuario tiene restricciones: no puede leer registros de control, ni ejecutar instrucciones de manejo de memoria o interrupciones, etc.
El objetivo el proteger estructuras criticas del SO de acceso indebido de porogramas de usuario.
CPU intercambia estos modos segun distintos eventos
Cambio de proceso (posibles causas)
Disparo de interrupcion del clock: proceso consumio su tiempo asignado
Interrupcion de E/S: SO actualiza estructuras de control y puede decidir cambiar de proceso
Fallo de memoria: no es enrealidad una falla de hw, sino que una instruccion o dato no esta en memoria principal y hay que buscarlo en el disco. SO puede decidir cambiar de proceso mientras esto ocurre
Cepos o trampas: error durante ejecucion de programa, SO toma el control y lo suspende o termina
Llamada de sistema del proceso: se transfiere control al SO, y este puede cambiar de proceso
Al cambiar de procesos se debe:
guardar contexto del procesador
actualizar bloque de control
poner el proceso en la cola correspondiente
seleccionar nuevo proceso a ejecutar
actualizar estructuras
etc.
Detalles sobre ejecucion del SO (kernel y funciones del SO)
Kernel se encuentra separado, no se considera un proceso.
Muchas funciones del SO se encuentran dentro de los espacios de memorias compartida de los procesos, entonces al ejecutar estas funciones no se cambia de proceso, solo de modo
Cambio de modo
Mucho mas liviado que el cambio de proceso. Se guardan registros del CPU, se modifica el PC y segun lo que siga despues se guarda mas info o no
Seguridad
Privilegios de usuario limitados. Privilegios de administrador le permiten acceder y modificar todos los recursos. Los SO deben prevenir o detectar intentos de escalar privilegios de los usuarios.
Amenazas de seguridad para el SO y contramedidas
Intrusos: buscan acceso al sistema o mejorar privilegios actuales
Malware parasito: porciones de programa que necesitan de otro para cumplir su funcion
Malware independiente: son programas completos que se ejecutan por el SO
Contramedidas:
Anaizar eventos del sistema para buscar intrusos o malware, analisis de red
Procesos e hilos
Se puede decir que el proceso es un “supervisor” de hilos de ejecucion.
El proceso se encarga de control de recursos, mientras que la ejecucion en si es a lo que generalmente se conoce como hilo.
Un hilo es una secuencia de codigo en ejecucion dentro del contexto de un proceso. Un hilo no puede existir por si solo, siempre depende de un proceso que lo contiene.
Un proceso puede tener multiples hilos.
Cada hilo posee estado de ejecucion, su pila propia. El acceso a la memoria y recursos son los de su proceso, y los comparte con los demas hilos en ese proceso.
Ver imagenes de diapos.
Beneficios de usar hilos
Crear hilos es mucho mas rapido que crear procesos. Lo mismo sucede para matarlos.
Para el CPU es mas rapido conmutar entre hilos que entre procesos
La comunicacion entre hilos es mas veloz ya que comparten memoria y archivos
Desventajas de usar hilos
Dado que comparten memoria, el acceso a recursos se debe sincronizar por parte del programador. Dificiles de testear y depurar. Si se abusa de la sincronizacion esta tiene un costo demasiado alto
Usos de hilos
Trabajo en primer y segundo plano
Procesamiento asincrono
Velocidad de ejecucion mayor
En SO que soportan hilos la planificacion se hace a nivel de hilo, por lo que la info de estado de ejecucion se mantiene en estructuras dentro de los hilos
Sin embargo hay acciones que afectan a todos los hilos, por lo que se manejan a nivel de proceso, como la terminacion o suspension de un proceso.
Estados de un hilo
Creacion: un hilo se crea al crear un proceso, luego el proceso puede crear mas hilos.
Bloqueo
Desbloqueo
Terminacion
Nivel de existencia de hilos
Hilos a nivel de usuario: el kernel no conoce su existencia
Procesos o aplicaciones administran hilos, el kernel solo gestiona procesos. Los hilos se manejan con alguna libreria que lo permita.
Hilos a nivel de kernel: kernel conoce existencia de los hilos
El kernel administra los procesos y sus hilos, la aplicacion no se encarga de administrar los hilos. Planificacion del uso del CPU se realiza por el kernel a nivel de thread
Ventajas de hilos a nivel de usuario: independientes del SO, no se necesita el modo kernel para cambiar de un thread a otro, y la planificacion de hilos puede ser distinta segun la app
Desventaja: si un thread hace llamada al sistema todo el proceso se bloquea
Ventajas de hilos a nivel de kernel: rutinas del SO pueden ser multithread
Multiprocesadores
Se utilizan multiples computadoras normales para lograr capacidad de computo mayor. Arquitecturas mas populares: Multiprocesadores simetricos (SMP) y clusters
MIMD (multiple instructions, multiple data streams)
Si los procesadores tienen cada uno su memoria: clusters de computadoras
Si los procesadores comparten memoria entonces hablamos de memoria compartida, para este caso tenemos varias opciones:
SO independientes: Cada CPU con su SO y procesos, no se comparte memoria. Hay desbalance de carga entre los CPUs y memorias
Maestro/esclavo: Un procesador maestro se dedica a planificacion mientras que los otros ejecutan procesos. Maestro puede generar cuello de botella.
SMP: Todos los CPUs pueden realizar planificacion y ejecucion de procesos.
Consideraciones para SO con soporte SMP
Procesos concurrentes y simultaneos: rutinas del kernel deben ser reentrantes y estructuras de datos deben estar protegidas por la concurrencia
Planificacion: tambien se deben evitar problemas de concurrencia.
Sincronizacion: Acceso a recursos debe estar sincronzado
Manejo de memoria: sistemas de paginacion deben coordinarse
Confiabilidad y tolerancia a fallos: sistema debe seguir funcionando frente a falla de algun CPU
MicroKernels
Se busca reducir al maximo la cantidad de codigo que se ejecuta en modo kernel. Solo incluye servicios esenciales como gestion de interrupciones, E/S, entre otros. El resto de funciones se ejecutaran en modo usuario como servicios modulares. Esto provee mas flexibilidad. Imagen comparativa en diapos
Manejo de memoria
Es la tarea de subdividir la memoria para darle espacio a los distintos procesos. Esto se realiza dinamicamente. La idea es mantener la mayor cantidad de procesos en memoria para ocupar al CPU. Los requerimentos para implementar esto son la reubicacion, la proteccion, compartir memoria y organizacion logica
Reubicacion (manejo de memoria)
Al suspenderse un proceso y volver a cargarse en memoria, muy probablemente lo haga en una ubicacion distinta. El programador no sabe donde se ubica el proceso de manera dinamica ni sus cambios de posicion. El SO debe resolver la traduccion de direcciones relativas a direcciones fisicas en la memoria
Proteccion (manejo de memoria)
SO debe proteger espacio de memoria de cada proceso para que no se interfieran entre si. Esto es dinamico, no se puede controlar en compilacion. Se deben verificar todos los accesos a memoria para garantizar que estan en zonas permitidas. Se debe evitar que un proceso acceda a espacio de memoria del SO o de otro proceso. A este requisito lo satisface el hardware.
Compartir (manejo de memoria)
Debe estar la opcion de compartir memoria entre procesos, puede resultar mas eficiente en procesos que usan los mismos datos o instrucciones. Esto es un claro requerimiento
Organizacion logica (manejo de memoria)
Los programas se organizan en modulos. El SO debe reconocerlos, para poder escribir y compilar los modulos de manera independiente, como asi tambien agregar distintos grados de proteccion, o compartir modulos entre procesos
Particionado de memoria
Es la operacion que realiza el SO para dividir en partes la memoria, asignando un espacio a cada proceso. Estas particiones pueden ser fijas o dinamicas
Particiones fijas (memoria)
Particiones de igual capacidad. Cualquier proceso mas chico que la particion se puede cargar en memoria. Si todas estan ocupadas debe suspenderse algun proceso.
El uso de memoria es muy ineficiente (procesos muy chicos desperdician memoria), ya que se produce fragmentacion interna (ver imagenes). Una solucion podria ser usar particiones fijas de diferentes tamaños, pero no resuelve del todo el problema. Esto evita mucho desperdicio, pero puede haber procesos sin cargar en memoria aun cuando esta tiene espacio libre suficiente.
Particiones dinamicas
Particiones variables en numero y capacidad. A cada proceso se le asigna exactamente la memoria necesaria. Luego de un tiempo la memoria se fragmenta externamente, reduciendo capacidad de aceptar nuevos procesos. Se puede resolver usando compactacion de memoria, pero esto genera overhead.
Se debe usar algun algoritmo para reducir la frecuencia de compactacion. 3 ejemplos: best-fit, first-fit y next-fit
Algoritmos para manejo de particiones dinamicas en memoria
Best-fit
First-fit
Next-fit
Colegas
Algoritmo Best-fit (particiones dinamicas en memoria)
Elige entre los espacios libres aquel que tiene la capacidad mas parecida a la que requiere el nuevo proceso. Genera memoria fragmentada en muchos espacios pequeños y tiene baja performance.
Algoritmo First-fit (particiones dinamicas en memoria)
Elige el primer espacio libre de memoria donde entre el nuevo proceso. Mas simple y rapido, pero genera fragmentacion al comienzo de la memoria
Algoritmo Next-fit (particiones dinamicas en memoria)
Elige el primer espacio libre donde entre el nuevo proceso pero buscando desde la posicion donde se cargo el proceso previo. Genera fragmentacion hacia el final de la memoria y requiere mas frecuencia de compactacion que first-fit
Algoritmo de Colegas (particiones dinamicas en memoria)
En este caso el espacio total de memoria se trata como un solo bloque incialmente. Si se realiza solicitud de espacio menor este se subdivide, y asi sucesivamente hasta encontrar el tamaño mas adecuando. Cuando hay dos bloques libres adyacentes de igual capacidad se funden en uno. Funciona coomo si fuera un arbol binario de busqueda para asignar el espacio en memoria (ver imagenes)
Direccion fisica, logica y relativa (memoria)
Direccion fisica: ubicacion real en memoria fisica
Direccion logica: referencia a una ubicacion de memoria independiente de su asignacion real.
Direccion relativa: tipo de direccion logica expresada como una ubicacion relativa a un punto conocido de la memoria.
Generalmente los programas usan direcciones relativas a la del comienzo de programa.
Paginacion
Proceso que se realiza para reducir la fragmentacion interna y externa. Consiste en dividir la memoria en pedazos de igual capacidad, relativamente pequeña, llamados marcos. Lo mismo se hace con los procesos, dividiendolos en porciones de la misma capacidad que los marcos, llamados paginas. Cuando se carga un proceso, se asignan paginas del mismo a un conjunto de marcos libres (no siempre adyacentes).
El SO mantiene una lista de paginas para cada proceso, que indica en que marco de la memoria se encuentra cada una. En los programas cada direccion se representa como un numero de pagina sumado a un deplazamientoa dentro de esta. Para simplificar la tarea de traduccion (direcciones logicas o relativas a fisicas) se suele usar paginas que tengan una capacidad de una potencia de dos
Segmentacion
Se utiliza para dividir programas en segmentos, organizando asi la informacion y datos con diferentes permisos para cada segmento. El compilador o el programador definen los segmentos. Al ejecutar el programa el SO arma una tabla de segmentos indicando el inicio de cada uno.
A diferencia de la paginacion (que es invisible para el programador), la segmentacion si puede ser controlada por este.
Seguridad (memoria)
La memoria es un verctor comun de ataques. Se debe proteger contra accesos no autorizados. Se debe evitar el buffer overflow, que consiste en poner en un buffer mas informacion que su capacidad maxima, sobreescribiendo otra informacion adyacente a este. Esto sucede tipicamente como un error de programacion, y normalmente el SO termina el programa cuando esto sucede, ya que se sale de su espacio de memoria asignado.
Conjunto residente
Parte de un proceso que esta en la memoria, ya que no se carga todo el proceso, sino algunas paginas, y se cargan mas a medida que se necesitan. Esto permite cargar muchos procesos en memoria. Cuando un proceso requiere una pagina que no esta en memoria se produce un “fallo de memoria”, el SO toma el control y mediante E/S carga la pagina faltante a memoria. Mientras tanto el SO cambia a otro proceso para que aproveche el tiempo
Hiperpaginacion
Cuando el SO necesita traer una nueva pagina a memoria debe liberar un marco ocupado, y existe el riesgo de eliminar una pagina que proximamente se necesitara. Si se da esto muy seguido el SO pierde mucho tiempo cargando paginas en memoria, perdiendo tiempo para ejecutar procesos. A esto se le llama hiperpaginacion.