Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SISTEMAS OPERATIVOS
1. Introducción
Los elementos básicos de una computadora son:
● CPU
● Memoria
● Dispositivos de E/S
● Bus
E/S: Dispositivos de entrada y salida (teclado, pantalla, disco, placa de red, etc)
Técnicas de E/S:
● E/S Programada
● E/S por Interrupciones:
● Acceso directo a memoria (DMA)
PROGRAM COUNTER (PC): Puede ser manipulado por hardware y software, y contiene la
dirección de la próxima instrucción a ser ejecutada.
● Hardware: Para notificar por ej, que se terminó una transferencia de datos.
● Software: Desde el procesador hacia el procesador. Ej: División por cero.
● Enmascarables Interrupciones que pueden ser no atendidas en el momento que se
producen.
● No enmascarables: Interrupciones que deben ser atendidas.
● E/S
● Fallas del hardware
● Clock: Interrupciones que se configuran para que se genere una interrupción cada x
cantidad de tiempo
Notas:
● Las interrupciones son transparentes a los programas
● Solo es posible tener un número predefinido de interrupciones
OVERHEAD: Tiempo que ejecuta el sistema operativo en donde no se está ejecutando otros
procesos.
Nota:
● Otros ejemplos de syscall son exec() , wait(), fork() wait () exit()
● Para ejecutar una syscall, es necesario pasar a modo kernel
El wrapper (de una syscall) es una función que corre en modo usuario que se interpone entre la
solicitud del servicio y la syscall real. Ofrece mayor facilidad/claridad/portabilidad en el uso,
aunque restringe flexibilidad y la posibilidad de realizar optimizaciones de performance
Notas:
● Entre aplicaciones, siempre tiene que ejecutar el SO.
● Cuando arranca el sistema, el hardware se inicia en modo kernel
● Cuando se produce una excepción o una interrupción el SO pasa de modo usuario a
modo kernel.
2. Procesos
PROGRAMA: Secuencia de instrucciones compiladas a código máquina
➔ Un programa pasa a ser un proceso cuando se ejecuta
MULTIPROGRAMACIÓN: Modo de operación que permite que dos o más programas ejecuten
de forma concurrente. (No es lo mismo que multiprocesamiento)
DIAGRAMA DE 2 ESTADOS:
● Ejecutando
● No Ejecutando
DIAGRAMA DE 3 ESTADOS:
● Ejecutando (Running/cpu)
● Bloqueados (Blocked): están esperando a que suceda algún evento (interrupción) que
los desbloquee.
● Listo (Ready)
DIAGRAMA DE 5 ESTADOS:
● Nuevo
● Listo
● Ejecutando
● Bloqueado
● Salida
Nota: Este estado muestra únicamente el flujo de éxito.
DIAGRAMA DE 7 ESTADOS:
● Nuevo
● Listo
● Listo/Suspendido
● Ejecutando
● Bloqueado
● Bloqueado/Suspendido
● Salida
o El proceso que lo crea se llama proceso padre y el creado se llama proceso hijo.
Pasos:
● Asignación del PID
● Reservar espacio para estructuras (código, datos, pila y heap)
● Inicializar PCB
● Ubicar PCB en las listas de planificación
Notas:
● Ambos pueden ejecutar de forma concurrente
● En linux, la system call se llama fork(). El hijo pasa a contener la misma información que
el padre menos el PID, PPID y ID.
TERMINACIÓN DE UN PROCESO:
● Terminación Normal
o exit (init exit_staus) / wait(int*status)
● Terminado por otro proceso
o kill(pid,sig)
● Terminado por falla o condición de error
Nota: Si el proceso padre finaliza inesperadamente,| los procesos hijos pueden seguir
ejecutando dado que son entidades autosuficientes (aún si son adoptados por otro proceso
como su nuevo padre
CAMBIO DE UN PROCESO:
3. Planificación CPU
PLANIFICACIÓN CPU:
➔ Asigna procesos al procesador
➔ Optimiza algún aspecto del comportamiento del sistema.
➔ Elige entre los procesos nuevos, cuál va a pasar a la cola de listos (planificación a corto
plazo).
➔ Decide dónde ubicar el PCB del proceso que estaba ejecutando.
Nota: Como consecuencia del planificador de mediano plazo, los procesos pasan de
Ready/Suspended a Ready.
PLANIFICADOR DE LARGO PLAZO: Elige entre los procesos nuevos, cuál va a pasar a la
cola de listos.
● Controla la multiprogramación
● No se ejecuta con tanta frecuencia como el de corto plazo
● Sólo interviene:
○ Cuando se está creando un proceso nuevo y tiene que ser admitido para que
pueda empezar a ejecutar
○ Cuando el proceso finaliza.
● Estados que intervienen
○ New
○ Exit
GRADO DE MULTIPROGRAMACIÓN:Totalidad de los procesos en donde interviene el
planificador de corto plazo (ready, running, blocked).
Nota: Un proceso tiene que terminar con un CPU Burst en una finalización normal.
CONTEXT SWITCH: Tarea que realiza el SO en modo kernel en donde conmuta de la CPU a
otro proceso guardando en el PCB el contexto de ejecución del proceso a remover y carga el
contexto almacenado del nuevo proceso a ejecutar. Esta operación tiene overhead
CRITERIOS DE PLANIFICACIÓN:
● Tiempo de ejecución (Turnaround): Tiempo entre Inicio/Fin de un proceso
● Tiempo de Respuesta: Desde que está en estado listo hasta que se atiende ??
● Tiempo de Espera: Tiempo que un proceso está esperando para ejecutar en estado listo
CATEGORÍAS DE ALGORITMO:
● Sin desalojo (non preemptive): Mientras un proceso está ejecutando no va a ser
cambiado por otro hasta que se realice una llamada al sistema.
● Con desalojo (preemptive): Un proceso que se está ejecutando puede ser retirado y
puesto en la cola de listo.
○ Insumen más overhead que las sin desalojo porque previenen que cualquiera de
los proceso monopolice al procesador por mucho tiempo
FIRST COME FIRST SERVE (FIFO): Algoritmo que asigna mayor prioridad a los procesos que
llegan primero. Trabaja con una cola de procesos “listos” para ejecutarse. Cuando un proceso
se deja de ejecutar, se toma el proceso que lleva más tiempo en la cola de “listos”. Es
Apropiativo. Sin desalojo
SHORT JOB FIRST (SJF): El proceso más corto va primero. Se verifican los tiempos de
procesamiento y se los ordena de menor a mayor para ser ejecutados. Los procesos más
largos pueden sufrir inanición. En caso de que haya dos ráfagas con el mismo tamaño, se elige
el que primero llegó. Sin desalojo.
SHORTEST REMAINING TIME (SRT) : También llamado SJF con desalojo. Se ordenan los
procesos por el tiempo restante de procesamiento. Los procesos más largos pueden sufrir
inanición. (Tiene mejor throughput que el SJF)
ROUND ROBIN (RR): Se cambia de proceso en ejecución por una interrupción de reloj
(Quantum). Permite a todos los procesos ejecutarse la misma cantidad de tiempo. Con desalojo
● El quantum lo selecciona el SO y es fijo para todos los procesos.
● Cola de procesos listos en FIFO
● Cuanto menor es el quantum, más eficaz es la planificación.
● Proceso <= Quantum: Se ejecuta todo el proceso.
● Proceso > Quantum: Se ejecuta la cantidad de unidades de Quantum y luego se corta y
le deja paso al siguiente proceso en cola.
VIRTUAL ROUND ROBIN (VRR): Se cambia de proceso en ejecución por una interrupción de
reloj (Quantum). Permite a todos los procesos ejecutarse la misma cantidad de tiempo. Con
desalojo.
● Los procesos que salen de la cola de bloqueados, van a una cola auxiliar y esta cola
auxiliar puede pasar a ejecución, y la cola auxiliar tiene mayor prioridad que la cola de
listos.
● Los procesos que vienen de bloqueados a la cola auxiliar, si hay procesos en la cola
auxiliar primero los toma el Dispatcher y luego los demás.
● Mejora el rendimiento para procesos I/O Bound ante los CPU Bound.
HIGHEST RESPONSE RATIO NEXT (HRRN): Primero el proceso que de mayor tasa de
respuesta.
Se aproximan las tasas de respuestas en base a entradas previas, y al salir de ejecución un
proceso se elige de la lista Ready el proceso con tasa de respuesta más alta. Sin desalojo.
R = 1 + W/S
Nota: Prioriza a los procesos que están más tiempo en espera y a los procesos más cortos. No
tiene overhead.
COLAS MULTINIVEL (Feedback Multinivel): Si hay desalojo por interrupción de reloj, baja su
prioridad.
ALGORITMO POR PRIORIDADES: Una sola cola, los procesos están únicamente ordenados
por prioridad.
AGING: Prioriza a los que están más tiempo en espera para evitar la inanición.
ESTIMACIÓN DE RÁFAGA: Se utiliza cuando se necesita saber el tamaño de la próxima
ráfaga. Se realizan en base a estadísticas utilizando la fórmula del promedio exponencial
Notas:
● Aquellos algoritmos que requieren una estimación de ráfaga, van a tener mayor
overhead
● Al realizar el gantt, para tomar una decisión se toma la ráfaga de estimación pero luego
se aplica la ráfaga real.
Los algoritmos sin desalojo sólo re-planifican cuando se libera la CPU, es decir, cuando
los procesos la abandonan voluntariamente (finalizan o se bloquean). Los algoritmos con
desalojo consideran además otros eventos, esto es, por ejemplo, cuando hay un proceso
nuevo en la cola de listos (desde nuevo o bloqueado) o si es que se implementa un
quantum.
4. Hilos
HILO: Es una unidad básica de utilización de CPU. Cada hilo tiene un contexto de ejecución
distinto.
● Un Hilo comparte con sus hilos pares:
○ Sección de código
○ Sección de datos (variables globales)
○ Seccion Heap (memoria dinamica)
● Un Hilo NO comparte con sus hilos pares:
○ Pila (variables locales)
○ TCB (Contexto de ejecución)
➔ Clases de Hilos:
● KLT (Kernel Level Thread): Es generado por fork().
● ULT (User Level Thread)
➔ Ventajas de hilos:
● Capacidad de respuesta
● Economía
● Compartición de recursos
● Comunicación eficiente
● Permite multiprocesamiento
● Procesamiento asíncrono
Notas:
● Si un hilo está ejecutando, los otros no están ejecutando (si tengo un solo procesador)
● Si un hilo ULT se bloquea, se bloquea el proceso (a menos que utilice jacketing).
● En un cambio de hilo no requiere un mode switch y no requiere necesariamente que se
involucre el SO.
● Puede que un proceso esté bloqueado pero sus hilos no.
PCB: Se guarda en la memoria del SO. Existirá un PCB por cada proceso
ULT: User Level Thread. Ejecutan "del lado del usuario" por lo que no requieren la intervención
del SO para poder ser utilizados.
● Ventajas
○ Bajo overhead
○ Planificación personalizada
○ Portabilidad
● Desventajas
○ Syscall bloqueante, bloquea todo el proceso
○ No permite multiprocesamiento
POR CAPAS: Arquitectura de kernel. Para acceder a una capa, quizá se tiene que acceder a
otra primero. Ejecuta modo kernel.
● Ventajas
○ Mas organizado
○ Si una capa tiene un problema, no afecta tanto a las otras capas
● Desventajas
○ Comunicación más lenta que el monolítico
MICROKERNEL: No todo se ejecuta en modo kernel. Las funciones esenciales las ejecuta en
modo kernel y las no tan esenciales en modo usuario.
● Ventajas:
○ Estabilidad. Si se cae un servicio se puede levantar o reemplazar.
○ Robusto
○ Confiable
● Desventajas:
○ Es más lento (por el paso de mensajes)
5. Sincronización
SECCIÓN CRÍTICA: Determina en dónde están los recursos que pueden estar inestables si no
ordenamos/sincronizamos los procesos. Debe cumplir los siguientes requisitos:
● Exclusión mutua: puede haber un único proceso/hilo ejecutando sobre un recurso (a la
vez).
● Progreso: Si hay un proceso/hilo ejecutando sección crítica, puedan ejecutar otros
procesos/hilos una vez que el que proceso/hilo anterior termine de ejecutar.
● Espera limitada: Los procesos/hilos no deben morir por inanición.
● Velocidad Relativa: Debe tener cierta velocidad para ejecutar (no usar sleep).
->
SEMÁFOROS: Son estructuras compartidas que pueden ser modificadas por varios procesos o
hilos que provee el SO. Utiliza system calls para crear y manipular semáforos.
● Permite exclusión mutua entre varios procesos
● Permite sincronizar varios procesos
● Permite controlar acceso a recursos (dándoles orden)
● Son utilizados mediante wait(s) y signal(s)
➔ Estructura:
○ Valor entero
○ Lista de procesos bloqueados
➔ Tipos de Semáforo:
○ General o contador: Se usa para proteger instancias, se inicia en 1 o mas
dependiendo de las instancias.
○ Binario: Se usa para proteger y ordenar recursos.
○ Mutex: Mutua exclusión
➔ Semáforos fuertes: Utiliza alguna lista de ordenamiento para despertar un proceso
(ordenada en fifo)
➔ Semáforos débiles: Puede despertar cualquier proceso de la lista bloqueado
Notas:
● La mutua exclusión se realiza a través de las soluciones de software y hardware. Si bien
alguna de estas presentan espera activa, la sección crítica del semáforo es
relativamente chica y no afecta tanto la performance.
● Un semáforo con un valor negativo indica la cantidad de procesos bloqueados
esperando por ese semáforo
Notas:
● La variable del semáforo es variable compartida.
● Wait y signal se ejecutan de manera atómica ya que el SO se asegura que van a
funcionar de manera correcta aun si son interrumpidas en el medio de su ejecución
PRODUCTOR/CONSUMIDOR: Ejemplo
6. Deadlock
RECURSO: Un recurso puede tener n instancias. Esto pasa cuando los recursos son idénticos
entre sí.
Tipos de recursos:
● Reutilizable
● Consumible (ej. Interrupción,mensaje de socket)
Ciclo dirigido:
● Si no hay ciclos, no hay deadlock
● Si hay un ciclo en el grafo puede implicar la existencia de deadlock
● Si hay un ciclo en el grafo y además todos los recursos involucrados en el deadlock son
de una sola instancia, entonces hay deadlock
➔ Mutua exclusión
Si hay recursos que no se pueden compartir, no puede evitarse.
➔ Retención y espera
◆ Que los procesos soliciten todos los recursos juntos que necesitan
◆ Que los proceso soliciten los recursos de a uno o varios, utilizarlos y liberarlos
➔ Sin desalojo de recursos
◆ Si un proceso que tiene recursos asignados solicita uno que no está disponible,
debe liberar los recursos
◆ Si un proceso A solicita un recurso que está asignado a otro proceso B que está
a la espera de más recursos, el recurso asignado al proceso B puede asignarse
al proceso A.
➔ Espera circular
◆ Asignar un número de orden a los recursos. Los recursos solo puede solicitarse
en orden creciente (de las mejores opciones)
◆ Ordenar los mismos para que ambos procesos pidan los recursos en el mismo
orden.:
● Si no se usa semáforos, ordenar el pedido de recursos
Notas:
● No genera overhead
● Puede generar inanición ya que cuando se bloquea un proceso esperando un recurso
venga otro que necesite alguno de los que retiene y sea desalojado reiteradas veces
ALGORITMO DEL BANQUERO: Se asegura que siempre esté en estado seguro (nunca va a
haber deadlock)
➔ Estado del sistema:
◆ Vector de recursos totales del sistema
◆ Vector de recursos disponibles del sistema
Nota: Se tienen en cuenta todos los procesos que estén en sistema (esten bloqueados o no).
Tiene overhead.
Es estado seguro si puedo encontrar al menos una secuencia de finalización para todos los
procesos.
Aquellos procesos que no se puedan simular su ejecución, indican que están en deadlock.
7. Memoria Principal
MEMORIA RAM: Es una tarjeta que se representa como un vector muy grande de bytes
administrado por el sistema operativo.
● La memoria no conoce su contenido.
● Para poder ejecutar un programa, debe cargarse en memoria en forma de proceso.
● La memoria ram contiene el código, pila, heap, PCB del proceso.
● Solo el procesador puede acceder a la memoria ram
○ Los dispositivos de I/O no pueden acceder de manera directa a memoria (hay un
intermediario)
● Es volátil. Es decir, que si apago la computadora y la vuelvo a prender, se borra lo que
estaba anteriormente y arranca desde cero.
● La memoria RAM es mucho más rápida que otros dispositivos (Disco, pendrive, etc)
● En memoria reside el sistema operativo y procesos de usuario.
Requisitos que debería tener hoy en día la memoria ram para un uso eficiente:
● Reubicación: Característica que debe tener el SO que si un programa está ubicado en
una cierta posición de la memoria, debería existir la posibilidad de que el código de
proceso pueda correrse y pueda ser cargado en otra ubicación de la memoria
● Protección:
○ Un proceso no puede acceder al espacio de memoria asignado a otro proceso
○ No se cumple la protección cuando el SO puede acceder a cualquier parte de la
memoria (memoria propia del so como memoria de los procesos)
● Compartición: Si bien por defecto está la protección,el SO debe poder asignar un
espacio de memoria para que sea compartido entre más de un proceso.
● Organización física y lógica:
Nota: La memoria principal es la única área de almacenamiento a la que las CPU pueden
acceder directamente. No hay ninguna instrucción que acepte direcciones de disco.
Para calcular en donde se termina el proceso, hay que hacer registro base + registro límite
Etapas que pasa un código fuente para llegar a la memoria principal para empezar a ejecutar:
● Compilador: Convertir el código en código objeto. Es una traducción en lo que
escribimos en un lenguaje de alto medio o bajo nivel a código máquina (instrucciones
assembler a ejecutar)
● Enlace: Al código fuente original se le agregan todas las bibliotecas que debe usar
formando así un archivo ejecutable que contiene el código fuente y todas las bibliotecas
que él mismo utiliza.
● Carga: Se carga el proceso en memoria principal, se inicializan las estructuras, etc.
Nota: En linux, para poder ejecutar un archivo ejecutable debe tener formato de archivo
ejecutable y debe tener los permisos de ejecución.
MEMORY MANAGEMENT UNIT (MMU): Componente de hardware que reside dentro del
procesador y se ocupa de realizar la traducción de dirección lógica a dirección física.
Registro de reasignación: En vez de usar un registro base, se utiliza el relocation register. Este
registro puede cambiar de valor. El SO conoce esta dirección.
Notas:
● El procesador conoce la dirección lógica de los procesos
● La MMU también valida la presencia de la página en la memoria. El sistema operativo
participa al momento de evaluar si la página es inválida o si hay que ir a buscarla a
disco
DIRECCIÓN LÓGICA: Es la referencia a una ubicación de memoria utilizada por los procesos,
son independientes de la ubicación real en memoria.
Es una dirección generada por la CPU. Una dirección virtual es una dirección lógica
ENLACE ESTÁTICO:
CARGA DINÁMICA: Da la posibilidad de cargar una biblioteca en tiempo de ejecución. Se
utiliza en caso que se quiera agregar código a un programa compilado
➔ Mismo tamaño:
◆ El SO debe saber la cantidad de particiones de la memoria
◆ Qué particiones están libres
➔ Diferente tamaño:
◆ El SO debe saber la cantidad de particiones de la memoria
◆ El SO debe saber el tamaño de las particiones (en donde comienza y termina
c/partición)
◆ Qué particiones están libres y el tamaño de cada una
Nota: Un proceso puede ocupar solo una partición por lo que el máximo grado de
multiprogramación es la cantidad de particiones.
Nota: Tanto el primer ajuste como el mejor ajuste son mejores que el de peor ajuste en
términos de tiempo necesario y de utilización de espacio de almacenamiento. La estrategia de
primer ajuste es la más rápida de implementar
FRAGMENTACIÓN INTERNA: Porción de memoria que no puedo usar para cargar otro
proceso. Es decir, es la memoria sobrante que el proceso no ocupa de la partición
tl
PAGINACIÓN:
● El proceso no necesita estar contiguo en memoria
● Los procesos se dividen en páginas del mismo tamaño
● La memoria se divide en frames del mismo tamaño
● Tabla administrativa
○ Una tabla de páginas por cada proceso
● Ventajas
○ Sin fragmentación externa
● Desventajas
○ Tiene fragmentación interna (mucho menos que el particionamiento estático) ya
que la fragmentación se va a dar en la última página del proceso. La
fragmentación interna máxima es el tamaño de la página - 1
○ Tiene más overhead que la segmentación ya que se necesitan al menos dos
accesos a memoria para realizar la traducción
Notas:
● El tamaño de la página lo elige el SO en base a las opciones que le de el procesador
● Suelen tener tamaño 2^n y suelen ser de 4 kb.
● La fragmentación interna promedio por proceso es del tamaño de la página / 2
● El marco es de la memoria y la página pertenece al proceso
● La MMU necesitará un acceso para leer la tabla de páginas para determinar en qué
marco de la memoria se encuentra. Luego se hará un segundo acceso para acceder al
dato solicitado. La compartición es simple. Los procesos pueden compartir marcos de
memoria, simplemente ubicando el mismo marco en tablas de páginas diferentes.
TABLA DE FRAMES: Estructura de datos que tiene una entrada por cada frame físico que
indica si esta libre o asignado, y si está asignado, indica a que pagina y a que proceso ha sido
asignado.
En decimal:
Dirección lógica = (Nro página * tamaño de página) + desplazamiento
Dirección física = (Nro frame * tamaño de página) + desplazamiento
Si el campo válido/inválido está en 0, significa que la página no forma parte del proceso.
Notas:
● No es tan consistente como la protección de la segmentación
● Al querer escribir una página a la que se tiene protección de lectura provocará una
interrupción de hardware al SO.
COMPARTICIÓN (Sharing):
● Facilita cuando dos procesos necesitan compartir información
● Las tablas de páginas de los procesos apuntan a un mismo frame
Nota: La dirección lógica está compuesta por número de segmento, número de página y
desplazamiento. No sufre fragmentación externa porque divide toda la memoria en marcos.
Además genera fragmentación interna en la última página de cada segmento.
MEMORIA VIRTUAL: Espacio de memoria secundaria (disco) que puede ser direccionado
como si fuese memoria principal. La memoria virtual puede ser una partición del disco rígido o
un archivo creado muy grande.
● Traducción de direcciones en tiempo de ejecución (permite reubicar los procesos)
● Al tener los procesos separados en partes, se puede tener una parte de los procesos en
memoria principal y otros en memoria virtual
Durante la ejecución del proceso no se usan todas sus partes (páginas o segmentos) por lo que
se puede cargar únicamente lo que se necesita en memoria principal y dejar el resto en
memoria virtual.
Ventajas de usarla:
● Más espacio libre en memoria principal (solo tengo lo que necesito y no todo el proceso)
● Mayor grado de multiprogramación
● Los procesos más grandes que tenían tamaño mayor al segmento o página, con el uso
de la MV pueden ejecutarse.
Notas:
● La MV no es una extensión de la memoria principal.
● Las direcciones físicas cuando se traducen, siempre tienen que estar en memoria
principal y nunca en la virtual
MECANISMO DE BÚSQUEDA DE PÁGINAS: Para buscar una página en memoria virtual se
realizan los siguientes pasos:
● Bit de presencia: Indica si la página está en memoria principal (1) o en memoria virtual
(0). Si el bit es (0), el número de frame que tenga asignado es basura
● Bit de modificado: Indica si una página se escribió o no. Si es (1), se deberá escribir la
página de memoria principal a virtual los datos de la página.
● Bit de uso/referencia: Indica si la página fue referenciada (leída o escrita).
● Instante de referencia: Indica el tiempo de cuando se modificó, Es un Timestamp (4
bytes)
● Bits de Protección: Permisos de lectura o lectura y escritura
● Bit de Bloqueo: Indica si una página puede ser seleccionada como víctima o no
Eficiencia:
● Requiere más accesos a memorias
● Requiere más accesos a discos
● No mejora el rendimiento para la ejecución del proceso ya que no puedo seguir
ejecutando mi proceso hasta que no tenga las páginas que necesita.
Nota: Las instrucciones para cargar o modificar los registros de la tabla de páginas son
privilegiadas, de modo que solo el SO puede cambiar el mapa de memoria.
● Ventajas
○ Resuelve casi todos los problemas de la búsqueda secuencial ineficiente
● Desventajas
○ Colisión Se resuelve aplicando nuevamente la función de hash o buscando la
entrada previa o siguiente.
Colisión: Puede que la función devuelva siempre el mismo resultado frente a entradas
diferentes
TLB: Buffer de traducción anticipada. Es una pequeña memoria que está en el procesador
(forma parte del hardware) que mejora el rendimiento de la traducción de direcciones.
● Tiene dos partes
○ Clave o etiqueta
○ Valor
● Funciona como caché de la tabla de páginas
● Almacena solamente algunas entradas de la tabla de páginas
● Es consultada por la MMU
● Su consulta casi no ocupa tiempo
○ Si hay un hit en la TLB, se suspende la búsqueda en la tabla de páginas y se
toma el frame de la TLB
■ En este caso, se necesita solo un acceso a memoria
○ Si no hay hit, sigue buscando en la tabla de páginas
● Inicialmente la TLB está vacía y cuando se actualiza la tabla de página, se actualiza
también la TLB (a nivel hardware)
○ Solo tiene data de un solo proceso. Si se hace un process switch, se hace un
flush vaciando la tabla y se arranca de nuevo
● Se lee cuando se quiere acceder a una página, en el momento de realizar la traducción,
● Se escribe cuando se actualiza una entrada de la tabla de páginas (por ejemplo se
carga una nueva página en memoria, se desaloja una página o se finaliza un proceso).
● Ventajas
○ Puede reducir la cantidad de accesos a memoria ya que ahorra accesos a
memoria (si se encuentra la página en la TLB)
○ Es rápida
○ En caso de las TP jerárquicas, si alguna no está en RAM la tengo que traer de
disco. Por lo tanto, minimiza el tiempo de acceso efectivo a memoria
● Desventajas
○ Tiene pocas entradas (generalmente de 64 a 128 entradas)
Nota: La consulta en la TLB es más rápida que en la tabla de páginas. Mejora aún su eficiencia
cuando se utiliza paginación jerárquica
TLB Fault: O fallo de TLB, ocurre cuando el numero de pagina no se encuentra en el buffer.
POLÍTICAS DEL SO: Su objetivo es mejorar el rendimiento intentando tener la menor cantidad
de page fault posibles.
● Hardware
○ Soporta o no memoria virtual
○ Soporta o no paginación, segmentación o ambas
● Software
○ Políticas para la gestión de memoria virtual
Políticas:
● De recuperación: Se pueden usar ambas juntas o separadas
○ Paginación bajo demanda: Las páginas que vamos a traer de memoria virtual a
principal a medida que se van necesitando (Ej: cuando se produce page fault)
○ Paginación adelantada (prepaging): Consiste en cargar en memoria de una sola
vez todas las páginas que vayan a ser necesarias y así evitar el alto nivel de
page fault.
● De ubicación
○ Con segmentación pura: Se utiliza un algoritmo para definir en donde se ubicará
la página.
■ Mejor
■ ajuste, primer ajuste, próximo ajuste, peor ajuste
● De reemplazo o sustitución
○ Bloqueo de marcos: Bit que indica que una página no puede ser reemplazada
○ Algoritmos: Se reemplaza en memoria una página por otra utilizando un
algoritmo
■ Optimo, FIFO, LRU, Clock, Clock mejorado
● Del conjunto residente
● De Limpieza
ALGORITMO ÓPTIMO: Es un algoritmo de reemplazo que trata de evitar el page fault o llevarlo
lo más lejos posible.
● Selección de la víctima: Se elige la página a la que se realizará una referencia en el
futuro más lejano.
● Desventaja: No se puede implementar, se utiliza solamente para estadísticas
Nota: Este algoritmo no sufre de la anomalía de Belady ya que pertenece a una clase de
algoritmos de sustitución de páginas (algoritmos de pila).
Nota: Este algoritmo no sufre de la anomalía de Belady ya que pertenece a una clase de
algoritmos de sustitución de páginas (algoritmos de pila).
Casos posibles:
1. (u = 0; m = 0): No accedido recientemente, no modificado
2. (u = 0; m = 1): No accedido recientemente, modificado
3. (u = 1; m = 0): Accedido recientemente, no modificado
4. (u = 1; m = 1): Accedido recientemente, modificado
GESTIÓN DEL CONJUNTO RESIDENTE: Técnica que tiene el SO si decide o no asignar más
frames a un proceso para cargar sus páginas.
● Cuantas más pagina estan cargadas de un proceso, menos posibilidades de que se
produzca page fault
● Anomalía de Belady: Ocurre cuando se usa FIFO, en donde asignar mayor cantidad de
páginas a un proceso, termina produciendo más page faults
Conjunto residente: Conjunto de páginas que están en memoria principal.
Tamaño del conjunto Residente: Para esta característica se utilizan dos políticas:
● Asignación Fija/Equitativa: Se le asigna a cada proceso la misma cantidad de marcos
sin importar el tamaño del proceso.
● Asignación Variable/Proporcional: Se le asigna a cada proceso una cantidad de marcos
dependiendo del tamaño del proceso.
POLÍTICA DE LIMPIEZA: Se refiere a las páginas que tengo en memoria principal, en que
momento se actualizan en memoria virtual
● Limpieza bajo demanda
● Limpieza adelantada (cada x cantidad de tiempo, los voy escribiendo en memoria virtual
4. Compartición de páginas:
Esta característica llamada “Copia durante escritura (cow)” permite que esa duplicación de
proceso no se realice, así reduciendo el tiempo.
● Cuando se ejecuta el Fork(), padre e hijo comparten memoria
● Esto se da con paginación y segmentación si hay memoria virtual.
● Ventajas
○ Al compartir la información, se duplica únicamente la tabla de páginas por lo que
ocupa menos memoria y no necesito duplicar todo el proceso
● Si luego alguna de las páginas se modifica, en ese caso si se separan
5. Escritura de programas: Por cada lectura, se tiene un page fault por lo que los compiladores
invierten la lectura de la matriz para prevenirlo
Orden de algoritmos respecto al óptimo:
● Óptimo
● LRU
● CLOCK
● FIFO
MAPEO DE MEMORIA: Es una técnica que permite asociar lógicamente un archivo como una
parte del espacio virtual de direcciones.
9. Filesystem
➔ Atributos:
● Nombre
● Identificador
● Tipo
○ Común
○ Archivos del file system (socket)
● Ubicación
● Tamaño
● Permisos
● Fechas
● Propietario
➔ Operaciones básicas
● Crear
● Abrir
● Leer
● Renombrar (mover entre mismo filesystem)
● Truncar (cambiar de tamaño para agrandar/achicar el archivo)
● Borrar
● Cerrar
● Escribir
● Reposicionar (es cambiarle de valor el puntero)
➔ Operaciones combinadas:
● Renombrar (mover entre distintos filesystem)
● Copiar
● Pegar
➔ Modo de apertura
● Lectura
● Escritura
● Lectura y escritura
Nota: No contiene el puntero al archivo ya que el mismo debe formar parte de la tabla de
archivos por proceso.
TABLA DE ARCHIVOS ABIERTOS POR PROCESO: Es una tabla diferente por proceso en
donde tiene información particular del archivo abierto. Ej: puntero a la próxima escritura, modo
de apertura.
Nota: Cuando un proceso haga una referencia o necesite los datos de algún atributo del
archivo, siempre va a ir a consultar a la tabla de archivos abiertos por procesos, y si necesita
buscar el tamaño desde esa tabla busca el puntero o nodo a la tabla global.
TIPOS DE ARCHIVOS:
● Archivos regulares: pdf, mp3, jpg.
● Archivos de SO
○ Archivos de directorio:
○ Archivos de dispositivo
○ Archivos de acceso directo
○ Archivos de tipo dispositivo
○ Archivos tipo socket
○ Archivos tipo terminales
○ Archivos de bloques
○ Archivos de caracteres
● Archivos ejecutables:
Notas:
● Para ejecutar un archivo en windows, tiene que ser .exe .com o ./ y tiene que ser
ejecutable
● Para ejecutar un archivo en linux, tiene que tener el formato ejecutable y permisos de
ejecución
RUTA DE UN ARCHIVO:
● Ruta absoluta: Ruta de donde se encuentra el archivo.
● Ruta relativa o Working directory: Permite hacer referencia a los archivos sin tener que
usar la ruta completa. Es un punto de referencia de una estructura de directorio
En linux solo se puede montar carpeta mientras que en windows se puede montar en carpetas
y C: D: etc.
Notas:
● Se utilizaba con el comando mount en linux y se montaba el filesystem en un directorio
● En windows se puede montar tanto en un directorio como en una unidad (pendrive)
Permisos de acceso:
● Tipo de permiso unix: Permite acceso al owner y a un grupo de usuarios de un grupo
puntual.
○ Primeros 3 bits, que es lo que puede hacer el propietario del archivo
○ 3 a 6 bits, que puede hacer los usuarios que pertenezcan al grupo que tiene
asignado el archivo
○ 6 a 9 bits, que pueden hacer los demás
● Matriz de accesos: Por cada archivo compartido existe una columna por cada usuario y
una fila por cada recurso (archivo). Tengo toda la información en una matriz
● Lista de control de acceso (ACL): Se le agrega un bit más que se especifica con un
comando. Se puede definir accesos particulares para un usuario. Tengo que recorrer
archivo x archivo para sacar la información.
DISCO LÓGICO:
BLOQUE: Unidad mínima de lectura y escritura del filesystem. Su tamaño se define cuando se
formatea el disco. El filesystem se divide en bloques del mismo tamaño y en él se guarda una
parte de un archivo.
● Hay información de un solo archivo por lo que sufre de fragmentación interna
● Si se modifica un solo byte del archivo, se debe modificar todo el bloque.
Tabla de particiones: Indica en dónde comienza y termina una partición dentro del disco.
ESTRUCTURAS DE UN FS:
● Bloque de arranque o booteo: Indica cuál es el fs con el que empieza a ejecutar.
● Bloque de control del archivo (FCB): Tiene información/atributos sobre el archivo.
Existen un FCB por archivo
● Bloque de control de volumen: Contiene información de donde empieza y termina el fs,
tamaño, cantidad de bloques libre, cantidad de archivos,etc.
● Estructura de directorios:
○ Entradas de directorio: Nombre de archivo + atributos o puntero al FCB
● Estructuras extra que pueden tener los fs que convienen que estén en memoria
○ Tabla de montaje: Todos los fs que tengo cargados en el SO
■ Está siempre en disco
○ Estructura de directorios
■ Está siempre en disco
○ Tabla o lista global de archivos abiertos
■ Como la tabla se crea cuando se van creando archivos, no es necesario
que la información esté en el fs por lo que se puede guardar en memoria
principal
○ Tabla o lista de archivos abiertos por proceso
■ Como la tabla se crea cuando se van creando archivos, no es necesario
que la información esté en el fs por lo que se puede guardar en memoria
principal
MÉTODOS DE ASIGNACIÓN
● Bitmap: Por cada bloque tengo asociado un bit que indica si está libre u ocupado. Es el
más usado comúnmente.
1. Crear archivo
a. Verificar que exista el FCB disponible
b. Crear entrada de directorio
2. Asignar bloques requeridos
a. Abrir el archivo y agregarlo en las listas de archivos abiertos
b. Obtener bloques libres
c. Asignar los bloques al archivo
3. Escribir en el archivo
a. Escribir los bloques
b. Actualizar atributos (fechas, tamaño, permisos)
4. Cerrar el archivo
a. Actualizar lista de archivos abiertos
RECUPERACIÓN:
● Comprobación de coherencia: Revisar que la estructura del filesystem sea la correcta
○ Que no haya FCB perdidos
○ Que la estructura esté acorde a lo que indica
● Backups: Copia de seguridad de un archivo en otro lado (duplicando la información)
● Journaling (Estructura de registro): Es un mecanismo que tienen algunos filesystem que
dan la posibilidad que a cada tarea que realice el filesystem la trate como una
transacción. Asegura que las tareas se realicen y en caso de que ocurra algún tipo de
interrupción, se pueda resumir con las tareas que no se pudieron terminar
○ Registra de manera secuencial los cambios a realizar y las confirma
○ Si el cambio termina de manera correcta entonces la tarea se realizó y se
confirma
○ Si no se confirma una tarea, se asume que no se realizó la operación
AREA DE SWAPPING:
● Partición: Se define una partición únicamente para área de swapping (esta utiliza linux).
○ Ventajas
■ Menos overhead que el archivo
○ Desventajas
■ Para hacer crecer la partición, se debe decrecer el tamaño de las
particiones contiguas
● Archivo: (esta usa windows)
○ Ventajas
■ Al ser un archivo, este puede crecer y decrecer sin problema
○ Desventajas
■ Overhead.
■ Para acceder al archivo se deben usar operaciones de fopen(), fwrite(),
etc teniendo así la intervención del SO con las llamadas al sistema para
poder ejecutar dichas operaciones
INICIALIZACIÓN:
● Se formatea el disco indicando el filesystem que se desea usar y el tamaño del bloque
● Agrega estructuras que nos permite operar con el filesystem
Entrada de directorio: Contiene los atributos del archivo y parte de la información que necesito
para acceder a todos los bloques.
● Tipo de archivo
● Nombre y extensión
● Primer Cluster del archivo
● Tamaño
○ Tamaño máximo del archivo en FAT: El campo definido para el tamaño del
archivo es de 32 bits (4 bytes) por lo que sólo se puede direccionar hasta 4gb.
Notas:
● FAT no permite el uso permisos y no reconoce al propietario del archivo
● El cluster 0 y 1 no se suelen usar.
● La entrada del directorio están limitada a 32 bytes para representar el nombre, tipo de
archivo, etc
Estructura de clusters libres: El SO o el filesystem debe crear dicha estructura cuando se inicia
el filesystem.
● Leer toda la tabla FAT
● Se fija los clusters libres y los escribe en una estructura adicional (depende de la
implementación del SO)
Tamaño máximo teórico del fs: Tamaño del bloque * Tamaño del puntero
Tamaño máximo real: Lo máximo que me permite el fs o lo mínimo que me permite el disco.
Notas:
● Se dice que el tamaño máximo teórico ya que no se tiene en cuenta el tamaño que
ocupa el filesystem en sí.
● Si tengo un disco más grande que el tamaño máximo del filesystem, esa parte no se va
a poder utilizar pero:
○ Se puede particionar el disco y en esa otra partición, implementar otro FAT32.
○ Aumentar el tamaño del cluster.
Notas:
● La cantidad de grupos no es fija sino que depende del filesystem
● Cada grupo contiene la estructura y su información del superbloque y descriptor de
grupo (se repite la información en cada grupo)
Entrada de directorio:
● Número de inodo: Identificador único
● Nombre del archivo: Campo de tamaño variable. Existe una entrada para indicar el
tamaño del nombre.
● Tipo de archivo
Punteros adicionales: Para poder direccionar archivos más grandes, se puede solicitar punteros
al filesystem a demanda (cuando los voy necesitando) y almacenarlos en bloques de datos.
● Se asigna un bloque a un inodo
● Se lo divide en punteros
Cantidad de punteros en Indirecto doble: Cantidad de punteros por bloque indirecto simple al
cuadrado.
Cantidad de punteros en Indirecto triple: Cantidad de punteros por bloque indirecto simple al
cubo.
Ejemplo :
● Localizar un archivo
○ Buscar a través de los directorios por medio de la ruta
● Asignar espacio:
○ Si es necesario, asignar bloques libres al archivo.
■ Se modifica el bitmap de bloques y los punteros en el inodo
● Escribe los datos en el nuevo archivo
○ Modificar atributos del archivo (tamaño, fechas)
FAT vs UFS
● Complejidad: FAT tiene menos estructuras que UFS
● FCB: FAT no tiene un file control block, UFS si (Inodo)
● Espacio libre: FAT no tiene una estructura aparte para gestionar los espacios libres, el
UFS utiliza bitmap
● Journaling: FAT no tiene journaling, UFS si (EXT3).
● Links: FAT no permite el uso de links
● Seguridad: FAT no tiene seguridad ni propiedad del archivo, UFS si.
ACCESOS DIRECTOS:
Es una referencia a un archivo que está en el filesystem. Estos links están a nivel filesystem y
no dependen tanto del SO.
Soft/Symbolic Link: Dentro del soft link está la ruta al archivo que se quiere referenciar.
➔ Ventajas
◆ Se puede referenciar a un archivo que esté en otro fs
◆ Se puede hacer un soft link a un directorio
➔ Desventajas
◆ Se ocupa un inodo
◆ Se ocupa un bloque extra
◆ Se agrega un acceso a disco extra
➔ Para crear un soft link:
◆ Crear la entrada de directorio nueva
◆ Asignar a un inodo
◆ Que el inodo tenga el tipo de soft link
◆ Asignar la ruta a la que se quiere referenciar
➔ Para eliminar un soft link
◆ Se debe eliminar el archivo como si fuera un archivo común
◆ Se debe eliminar la entrada a directorio
◆ Se debe eliminar el inodo
◆ Desasignar los bloques
➔ Si se elimina el archivo al que el soft link apunta: El soft link va a quedar referenciando a
un archivo que no existe y no se va a poder usar.
Notas:
● Aún usando un soft link, el archivo tiene un contador de HL
● El tamaño del archivo soft link es el tamaño del path
● Para EXT4, si la ruta del soft link tiene menos de 60 caracteres, el tamaño del bloque es
0 ya que lo guarda dentro del contenido inodo y no reserva ese bloque extra (no hay
que tomarlo para la práctica)
Hard link: El archivo se asigna al mismo inodo y ya se está referenciando al mismo archivo.
➔ Ventajas
◆ Es más simple que el soft link
➔ Desventajas
◆ No se puede usar hard links entre filesystems ya que tienen distintas estructuras
de inodo
◆ No pueden apuntar a directorios
➔ Para crear un hard link
◆ Crear la entrada de directorio nueva
◆ Asignarle un inodo al que se desea referenciar
◆ Sumar 1 al contador de Hard Links
◆ Una vez que se crea el link, ya no existe un “archivo original” y otro la
“referencia”.
➔ Para eliminar una referencia hard link
◆ Se debe eliminar la entrada a directorio
◆ Se debe acceder al inodo y verificar el contador de hl y decrementar en 1
● Si el contador queda en 0
○ Se debe liberar el inodo
○ Desasignar los bloques
○ Eliminar el archivo
● Si el contador queda > 0, no se debe realizar ninguna otra acción
E/S no bloqueante:
● El proceso hace una solicitud
● El proceso sigue ejecutando (no se bloquea)
● La respuesta es inmediata:
○ Correcta: el proceso puede seguir avanzando
○ Incorrecta: el programador debe preguntar si la solicitud realizada anteriormente
está o no disponible
E/S PROGRAMADA
El procesador se comunica a través de un driver con una placa controladora.
La CPU ejecuta las instrucciones de E/S para controlar la operación:
● Activación
● Tarea a realizar
● Comprobación del estado
● Transferencia
Notas:
● Es la primera que surgió.
● Se usa para dispositivos que no utilizan muchas transferencias (es muy simple).
Cuando los niveles de transferencia son muy altos no se usa.
E/S por INTERRUPCIONES
La CPU ejecuta las instrucciones y es avisado cuando finaliza:
● Activación
● Tarea a realizar
● Transferencia
El procesador realiza la solicitud (de lectura o escritura) y cuando está lista, se genera la
interrupción y sólo en ese momento el procesador va a buscar el dato para traer o buscar la
información
Notas:
● A diferencia de la programada, el procesador no tiene que preguntar constantemente si
el dispositivo está listo (no tiene espera activa)
● El procesador sigue siendo responsable de buscar/traer la información
PROCESADOR DMA
Procesador mas chico que tiene solo las instrucciones necesarias para enviar datos de un
dispositivo a la memoria. Se comunica de manera directa con el dispositivo para guardar lo que
está leyendo en la memoria. Cuando esto finaliza, se realiza la interrupción.
● Ventajas
○ El procesador interviene lo menos posible
● Desventajas
○ El procesador no puede usar el bus (Robo de ciclo): Cuando el procesador DMA
está enviando datos de memoria a dispositivo /dispositivo a memoria sigue
usando el bus de la computadora (existen técnicas para que el procesador
pueda usarlo como por ej la memoria caché)
Notas: Esta es la opción correcta cuando se intentan transferir grandes cantidades de datos
(disco, placa de red, etc)
BUFFERING
Área de memoria que almacena datos mientras se transfieren entre dispositivos o entre un
dispositivo y una aplicación
Sirven para
● Adaptar la unidad de transferencia.
● Amortiguar las diferencias de velocidades entre la diferencia entre dispositivos y los
procesos
PLANIFICACIÓN DE DISCO
● Principal almacenamiento secundario
● Memoria virtual
PARTES DE UN DISCO
● Plato: Cada plato tiene 2 caras o cabezales (inferior y superior)
● Pista: Cada plato tiene muchas pistas
● Sector: Cada pista tiene muchos sectores (siempre tienen la misma cantidad)
● Brazo: Es el que hace la lectura de información y transfiere del dispositivo a la
controladora del disco rígido para que el procesador DMA lo guarde en la memoria. Se
numera de adentro hacia afuera.
● Cilindro: Es el conjunto de pistas (Ej, pistas posición 0, pistas posición 1) de cada plato
TA = TB + LR + TT
Nota: Al guardar un archivo, si se eligen bloques cercanos o del mismo “grupo”, el tiempo de
acceso será menor
Se asume que existe una cola de solicitudes y el disco la va atendiendo una a una.
Nota: Se asume que la LR es 0 (a menos que el ejercicio diga lo contrario)
FIFO
Se atienden los pedidos en el orden en que llegan (First in, First out)
Nota: Este es el mejor caso para disco de estado sólido que no tienen tiempo de búsqueda
SSTF
Shortest seek time first - Primero el de menor tiempo de búsqueda. Calcula cuáles de las
solicitudes están más cerca de la pista actual. (Si llegan nuevas solicitudes estas pueden ser
atendidas antes que algunas existentes)
➔ Ventajas:
◆ El tiempo total disminuye.
◆ Prioriza a las pistas que están más cerca de la posición actual
➔ Desventajas:
◆ Tiene inanición
SCAN
Algoritmo que recorre todas las pistas y atiende los pedidos que esten mas cerca (pero siempre
para el lado que está recorriendo)
Del 0 al N (ascendente) y luego del N al 0 (descendente)
➔ Ventajas:
◆ Es un intermedio entre el FIFO y SSTF
➔ Desventajas:
◆ Puede tener inanición (si se hacen muchos pedidos dentro de la misma pista)
C-SCAN
Algoritmo que recorre todas las pistas y atiende los pedidos que estén más cerca (pero siempre
para el lado que está recorriendo)
Es similar al SCAN con la diferencia de que recorre de 0 a N en una única dirección
(ascendente/descendente)
➔ Ventajas
◆ Es un poco más rápido que el SCAN
➔ Desventajas:
◆ Puede tener inanición (si se hacen muchos pedidos dentro de la misma pista)
LOOK
Atiende de manera ascendente y descendente. Es parecido al SCAN con la diferencia de que
no necesariamente llega a los topes
➔ Ventajas
◆ Es el más rápido que el SCAN
➔ Desventajas:
◆ Puede tener inanición (si se hacen muchos pedidos dentro de la misma pista)
C-LOOK
Atiende de manera ascendente y descendente. Es similar al LOOK con la diferencia que
recorre de 0 a N en una única dirección (ascendente/descendente)
➔ Ventajas
◆ Es el más rápido que el SCAN, C-SCAN y LOOK
➔ Desventajas:
◆ Puede tener inanición (si se hacen muchos pedidos dentro de la misma pista)
◆ Puede ser difícil de implementar a nivel hardware para caer exactamente al
número de pista deseado
FSCAN
N step SCAN
➔ Utiliza colas de N pedidos o menos
➔ Los pedidos se acumulan en varias colas de tamaño N
➔ Cada cola se atiende utilizando el algoritmo SCAN
➔ Ventajas
◆ No tiene inanición gracias al uso de las colas
◆ Simple de implementar
➔ Desventajas:
◆ Lleva más tiempo de atención
GEOMETRÍA DE UN DISCO
Indicar la cantidad de:
● Cilindros (C)
● Cabezas (H)
● Sectores (S)
Tamaño del disco = Cant Cilindros x Cant Cabezas x Cant Sectores x tamaño del sector
Nota: El tamaño del sector se asume de 512 bytes a menos que se indique lo contrario
RAID
Redundant array of independent disks