Está en la página 1de 82

RESUMEN

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)

BUS: Interconecta el procesador, memoria y dispositivos de E/S.

MEMORIA: Su jerarquía es:

PROCESADOR: Entidad cableada o no capaz de ejecutar programas.


En donde se procesa:
● Registros visibles por el usuario (programadores)
● Registros de Control y estado (el usuario no los puede modificar de manera directa)

SISTEMA OPERATIVO: Es un programa de control que administra el hardware de una


computadora. Proporciona las bases para los programas de aplicación y actúa como
intermediario entre el usuario y el hardware. Administra los recursos del sistema, los programas
en ejecución y se administra a sí mismo.
INSTRUCCIÓN: Determina el funcionamiento de la CPU. Para poder ejecutar un conjunto de
instrucciones, se debe cargar las instrucciones del disco a memoria.
Ciclo de una instrucción:
● Fetch: Busca la siguiente instrucción a ejecutar y se la pasa al procesador
● Decode: Decodifica la instrucción y sus operandos
● Execute: Se lleva a cabo la instrucción

INSTRUCCIÓN PRIVILEGIADA: Las instrucciones privilegiadas sólo pueden ejecutarse en


modo kernel. En modo usuario no es posible ejecutar instrucciones privilegiadas. Si se intenta
ejecutar una instrucción privilegiada en modo usuario, el hardware no ejecutará la instrucción y
enviará una excepción al SO.

PROGRAM COUNTER (PC): Puede ser manipulado por hardware y software, y contiene la
dirección de la próxima instrucción a ser ejecutada.

INTERRUPCIÓN: Son notificaciones de eventos dirigidas hacia el procesador.


Se utilizan para cortar la ejecución de la secuencia actual de instrucciones. Si no están
habilitadas podrían no atenderse. Implican un cambio a modo kernel para ser atendidas.
Se puede clasificar de varias maneras:

● 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

La ejecución de una instrucción nunca es interrumpida. La interrupción podría ocurrir en


cualquier momento, pero es atendida sólo cuando la instrucción actual termina su ejecución. En
caso de las interrupciones enmascarables, podrían no atenderse en ese instante si las
interrupciones no están habilitadas.

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.

CAPAS DE UNA COMPUTADORA:

SYSTEM CALL: Funciones incluidas en el kernel del sistema operativo.


➔ Son utilizadas para acceder a recursos del sistemas (El acceso a recursos requiere el
uso de instrucciones privilegiadas que los programas no pueden ejecutar)
➔ Los programadores pueden hacer system calls utilizando un wrapper.
➔ Ejemplo: write(1, “Hola mundo \n”, 12);
➔ Categorización
◆ Control de procesos
◆ Manipulación de archivos
◆ Manipulación de dispositivos
◆ Mantenimiento de información
◆ Comunicaciones

Nota:
● Otros ejemplos de syscall son exec() , wait(), fork() wait () exit()
● Para ejecutar una syscall, es necesario pasar a modo kernel

WRAPPER: Función que ejecuta una llamada al sistema.


➔ Un wrapper puede ejecutar más de una llamada al sistema
➔ Los wrappers utilizados en bibliotecas estándar podrían no ser tan eficientes, pero
permiten portabilidad, ya que son conocidos por todos los sistemas operativos que
utilicen esa biblioteca.
➔ Ejemplo: printf(“Hola mundo \n”);

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

MODOS DE EJECUCIÓN: El SO puede hacer un cambio de modo (Mode Switch) a:


● Modo Kernel: Puede ejecutar instrucciones privilegiadas y no privilegiadas. En este
modo solo ejecuta el SO
● Modo Usuario: Sólo puede ejecutar instrucciones no privilegiadas

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

EJECUCIÓN CONCURRENTE: dos o más programas ejecutando en el mismo intervalo de


tiempo.
PROCESO: Secuencia de instrucciones que están siendo ejecutadas. Programa en
ejecución.
Está compuesto de lo siguiente:
● Código: Espacio asignado para almacenar la secuencia de instrucciones del programa.
Toma el código y se trae las instrucciones (assembler)
● Datos: Espacio asignado para almacenar variables globales
● Pila(stack): Espacio usado para llamadas a función, parámetros y variables locales.
● Heap: Espacio asignado para el uso de memoria dinámica
● PCB

➔ Procesos bloqueantes y no bloqueantes:


Notas:
● Cuando se termina un proceso, toda la memoria se libera.
● Esto se almacena en la memoria RAM

MULTIPROGRAMACIÓN: Modo de operación que permite que dos o más programas ejecuten
de forma concurrente. (No es lo mismo que multiprocesamiento)

MULTIPROCESAMIENTO: Es el uso de dos o más procesadores (CPU) en una computadora


para la ejecución de uno o varios procesos.
Ejemplo:
● Si tenes un solo CPU el sistema es monoprocesado.
● Si tenes 2 CPUs, el grado de multiprocesamiento es 2.

Nota: La diferencia entre el multiprocesamiento y la multiprogramación es que el


multiprocesamiento ejecuta múltiples procesos al mismo tiempo en múltiples procesadores,
mientras que la multiprogramación mantiene varios programas en la memoria principal y los
ejecuta simultáneamente a través de una sola CPU.

CONTEXTO DE EJECUCIÓN: Contiene los valores que tenía el proceso al momento de


cambiar de instrucción.
BLOQUE DE CONTROL DE PROCESO (PCB): Es una estructura que guarda el contexto de
ejecución cuando el proceso no está ejecutando. Se guarda en el kernel.
● Hay uno por cada proceso en el sistema
● Contiene la dirección de las estructuras del proceso
● Atributos
○ Identificador
■ PID: process ID
■ PPID: parent process ID
■ User ID (UID)
○ Información de gestión de memoria
○ Información de planificación
○ Información de E/S
○ Información contable
PROGRAM STATUS WORD (PSW): Es un área de la memoria o registro que contiene
información sobre el estado de un programa utilizado por el sistema operativo

CICLO DE VIDA DE UN PROCESO:


● Tiempo que transcurre entre su creación y su finalización
● El SO reconoce el estado de un proceso a través del PCB de su proceso asociado.

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

Al suspenderlo, se libera memoria. (ya no se usa hoy en día)

SWAPPING: Pasar procesos de memoria a disco y viceversa. El PCB no se pasa.

CREACIÓN DE UN PROCESO: Un proceso se puede crear

● Por el sistema operativo

● Por otro proceso.

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.

PLANIFICADOR DE CORTO PLAZO: Elige de la cola de ready, cual proceso se va a ejecutar


y le asigna la CPU
● Se ejecuta constantemente
● Estados que intervienen:
○ Ready
○ Running
○ Blocked

PLANIFICADOR DE MEDIANO PLAZO: Relacionado con el swap


● Baja el grado de multiprogramación
● Estados que intervienen:
○ Blocked/Suspended
○ Ready/Suspended

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).

BURST (Ráfaga): Serie de instrucciones. Existen dos tipos:


● CPU
● I/O

Un proceso puede ser:


● CPU Bound: Rafaga grande de CPU y corta de de cpu y chica de I/O.
○ Ejemplo, programa que utiliza muchos cálculos matemáticos.
● I/O Bound: Rafaga grande de I/O y corta de CPU.
○ Ejemplo, programa que utiliza muchos recursos

Nota: Un proceso tiene que terminar con un CPU Burst en una finalización normal.

TIME SHARING: Es el tiempo compartido entre procesos.

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

● Rendimiento(Throughput): Cantidad de procesos finalizados en unidad de tiempo


● Utilización de CPU: Porcentaje de uso de CPU.

ALGORITMOS DE PLANIFICACIÓN: Ordena los procesos según una prioridad.


● A cada proceso le asigna una prioridad
● La prioridad de un proceso puede variar en cada decisión (no es fija)
● El planificador selecciona el proceso de prioridad más alta.

Los algoritmos son los siguientes:


● FCFS – First-Come First-Served
● Round Robin
● SPN/SJF – Shortest-Job First
● SRT – Shortest Remaining Time
● HRRN – Highest Response Ratio Next
● Prioridad (Mata al FCFS, es decir que se tiene en cuenta antes)

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 DE MULTINIVEL: Se clasifican los procesos por tipos de prioridad y dependiendo la


prioridad se asignará una cola. Siempre se toma primero la cola de mayor prioridad y solo se va
bajando si no queda ningún proceso en la cola de mayor prioridad.

Nota: Puede sufrir inanición

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.

STARVATION (Inanición): Situación a la que un proceso se le niega la utilización de recursos.


Esto ocurre por la constante aparición de procesos de mayor prioridad.
● Los algoritmos que tienen starvation son SJF con desalojo, SJF sin desalojo
● Los algoritmos que no tienen starvation son FIFO, HRRN, Round Robin

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

El alfa es variable y dependiendo el tipo de proceso, el que conviene utilizar.


● Si el alpha está mas cerca de 1, se basa más en la estimación anterior (si tengo mucho
historial de estimaciones de los mismos procesos)
● Si el apha está mas cerca del 0, se basa más en la real anterior (si los procesos son
nuevos o no tengo muchas estimaciones o son muy variables)

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.

Eventos que tiene en cuenta el SO:

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

➔ Estado de un hilo: Un hilo tiene un solo estado

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

TCB: Thread Control Block. Existirán tantos TCB como hilos.


Nota: Proceso con un solo hilo, tiene solo PCB y no TCB

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

KLT: Kernel Level Thread. El SO maneja los hilos.


● Ventajas
○ Syscall bloqueante, bloquea solo el hilo
○ Permite multiprocesamiento de hilos del mismo proceso. Si bien forman parte de
un mismo proceso, el sistema operativo los gestiona como procesos diferentes
● Desventajas
○ Mayor overhead respecto al ULT.
○ Planificación del SO
JACKETING: Previene que un hilo ULT se bloquee en caso que el dispositivo esté bloqueado.
Convierte una E/S bloqueante en una no bloqueante.
● El proceso sigue ejecutándose.
● El hilo pasa a estado bloqueado.
● Puedo elegir otro hilo para seguir ejecutando
HILOS COMBINADOS: Solución que utiliza tanto hilos ULT como KLT.

PLANIFICACIÓN DE HILOS: Se utilizan los algoritmos de planificación de procesos.

Nota: Cuando es desalojado un proceso, no cambia en el planeamiento de los hilos de ese


proceso.

I/O A TRAVÉS DE LA BIBLIOTECA:


● Si se utiliza, se puede re-planificar la ejecución de los hilos.
● Si no se utiliza, cuando se bloquea un proceso y se desbloquea, sigue ejecutando el
mismo hilo.

SIMULTANEIDAD DE EVENTOS EN READY: En un momento determinado tres procesos


ingresan en el mismo instante a la cola de listos. La prioridad (en la teoría) es la siguiente:
● 1. Interrupción de reloj (Q)
● 2. Interrupción por finalización de evento (I/O)
● 3. Llamada al sistema (New-> Ready)
IDENTIFICAR EN GANTT:
● Syscall:
○ Exec -> Blocked
○ New -> Ready
○ Exec -> Finish
● Interrupciones
○ E/S
○ Fin de Q
● Context Switch
○ Cuando se cambia de proceso
● Mode Switch
○ Cuando se cambia de hilo no se necesita

4.1. Arquitectura de Kernel


MONOLÍTICO: Arquitectura de kernel. El SO es un gran bloque de código pero ejecuta todo en
modo kernel. Sus módulos están fuertemente acoplados.
● Ventajas
○ Son más rápidos ya que todos los módulos entre sí se pueden comunicar de
manera directa
● Desventajas
○ Si un módulo tiene un problema, afecta a todo los módulos

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).

->

CONDICIÓN DE CARRERA: Si la misma se da en una sección crítica, se darán distintos


valores dependiendo del orden en que se ejecutaron los procesos/hilos. Se compite por los
recursos (el que primero llega lo toma y lo usa)

INTERACCIÓN ENTRE PROCESOS (y/o hilos):


● Comunicación entre procesos
● Competencia de los procesos por los recursos
● Cooperación de los procesos vía compartición. Los procesos no se conocen entre sí. Ej
archivos.
● Cooperación de los procesos vía comunicación. Hay un protocolo de por medio. Los
procesos se conocen entre sí

CONDICIONES DE BERNSTEIN: Permiten identificar si hay una posible condición de carrera.


Si se cumplen las 3 condiciones, no hay condición de carrera.
TIPOS DE SOLUCIONES:
● Soluciones de Software
● Soluciones de Hardware
● Soluciones de SO (Semáforos)
● Provistos por los lenguajes de programación (Monitores)

SOLUCIONES DE SOFTWARE: Soluciones que intentan resolver el problema frente a una


sección crítica. Soluciones de software que funcionan:
● Algoritmo de Dekker
● Algoritmo de Peterson (solo garantiza mutua exclusión)

Problemas generales de las soluciones de software:


● Alternancia (liveblock)
● Espera activa
● Falta de mutua exclusión

ESPERA ACTIVA: Cuando un proceso/hilo se queda esperando y “gasta” su quantum o tiempo


de ejecución esperando para ejecutar.

SOLUCIONES DE HARDWARE: Soluciones de hardware para solucionar la sección crítica.


➔ Deshabilitación de interrupciones: Se deshabilitan las interrupciones mientras se está
dentro de la sección crítica. Esto aplica solamente en sistemas monoprocesadores.
➔ Instrucciones especiales de procesador: Permiten hacer operaciones atómicas que no
pueden ser interrumpidas.
◆ Test and Set (es una instrucción atómica y no privilegiada)
◆ Exchange

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

FUNCIONES SOBRE SEMÁFOROS:

Wait(sem): Se utiliza a la entrada de una sección crítica


● Decrementa en uno el contador del semáforo.
● Si es necesario, bloquea el proceso (pasándolo a la lista de bloqueados)
Signal(sem): Se utiliza al final de una sección crítica.
● Incrementa en uno el contador del semáforo.
● Si fuese necesario, desbloquea un proceso de la lista de bloqueados
➔ Inicialización: Se inicializa en 0 o mayor a 0
◆ Para exclusión mutua, el valor del semáforo debe ser 1

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

PASOS PARA IMPLEMENTAR SEMÁFOROS:


1. Identificar las secciones críticas
2. Crear e inicializar los semáforos. Debe ser 0 o más (dependiendo la cantidad de
instancias)
○ Se deberá crear un semáforo por cada recurso (variable, impresora, socket, etc)
○ Si hay 2 recursos con M instancias:
t_sem SEM[2] = {m, m}
○ Si hay N recursos con 2 instancias:
t_sem SEM[n] = {2, 2 …., 2}
3. Poner barreras de ingreso y salida en cada sección crítica
4. Si tengo que agregar un semáforo a una variable que ya tiene mutex, siempre ponerla
por fuera del mutex para no generar deadlock
MONITORES: Son provistos por algunos lenguajes de programación. Solo un proceso o hilo
puede estar utilizando el monitor en un determinado momento.
● Internamente más complejo que un semáforo
● Más fácil de utilizar que un semáforo.
● Permite la mutua exclusión
● Permite ordenar los proceso
Los monitores son una colección de procedimientos, variables y estructuras de datos que se agrupan en un
cierto tipo de módulo particular y garantizan la exclusión mutua por si sola

6. Deadlock

DEADLOCK: Bloqueo permanente de un conjunto de procesos donde cada uno de estos


procesos está esperando un evento que solo puede generar un proceso del conjunto.

➔ Condiciones para la existencia de deadlock:


◆ Mutua exclusión
◆ Retención y espera
◆ Sin desalojo de recursos
◆ Espera circular
Nota: Se necesitan las 4 condiciones en simultáneo para que exista deadlock

LIVELOCK: Un bloqueo Livelock consume procesador. Los procesos están constantemente


consultando si pueden utilizar los recursos que solicitan. En cuanto a que los procesos puedan
continuar ejecutando sus instrucciones, es tan grave como el Deadlock. Pero en cuanto al
estado general del sistema, es peor que el Deadlock.
En el Deadlock los procesos quedan bloqueados y no vuelven a usar el procesador. En el
Livelock los procesos utilizan el procesador para consultar constantemente por la solicitud del
recurso, ocasionando que el resto de los procesos no involucrados en el Livelock compitan por
el uso del procesador con los que se encuentran en Livelock.

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)

GRAFO DE ASIGNACIÓN DE RECURSOS: Permite representar el estado del sistema con


respecto a la asignación de los recursos a cada proceso en un momento determinado.
● Qué procesos tiene asignados que recursos
● Qué recursos están disponibles

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

PREVENCIÓN DE DEADLOCK (1): Garantiza que no ocurra deadlock al impedir que se


produzca alguna de las cuatro condiciones.

➔ 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

EVASIÓN O PREDICCIÓN DE DEADLOCK (2): Garantiza que no ocurra deadlock al impedir


que se produzca alguna de las cuatro condiciones. El proceso está obligado a declarar cuál va
a ser la cantidad máxima de instancias de recursos que va a usar.

➔ Denegar el inicio de un proceso:


◆ Teniendo en cuenta la siguiente fórmula

➔ Denegar la asignación de un recurso (Algoritmo del banquero)


◆ Algoritmo de seguridad
◆ Algoritmo de solicitud de recursos

Nota: Genera overhead

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

Cada vez que se pide un recurso, se ejecuta el algoritmo del banquero.

Nota: Se tienen en cuenta todos los procesos que estén en sistema (esten bloqueados o no).
Tiene overhead.

ALGORITMO DE SEGURIDAD: Indica si el estado es seguro o no seguro.


● Estado Seguro: No habrá deadlock .Se asigna el recurso al proceso
● Estado Inseguro: Podría haber deadlock. No se asigna el recurso al proceso

Pasos para ver si un estado es seguro:

1. Crear una matriz de necesidades pendiente (necesidades máximas - recursos


asignados)
2. Basándose en lo máximo que puede llegar a pedir a la hora de asignar recurso.
Mi vector de disponibles es menor o igual a mi vector de pendientes
a. Si la respuesta es si, se simula la ejecución y luego se liberan los recursos
actualizando la matriz de recursos disponibles
b. Si la respuesta es no, se avanza con la simulación de otro proceso

Es estado seguro si puedo encontrar al menos una secuencia de finalización para todos los
procesos.

ALGORITMO DE SOLICITUD DE RECURSOS: Simula cómo sería la asignación de recursos y


sobre esas matrices calcula si es estado seguro. Si no es estado seguro, se bloquea el proceso
que solicitó la solicitud de recursos.

DETECCIÓN Y RECUPERACIÓN DE DEADLOCK (3):


● Puede ocurrir deadlock
● No hay restricciones para asignar recursos disponibles (cada proceso puede solicitar
todos los recursos que necesite/quiera)
● Periódicamente se ejecuta el algoritmo de detección para determinar la existencia de
deadlock
○ Cada cierto tiempo
○ De acuerdo a un evento detectado
➔ Opciones de recuperación:
● Terminar procesos involucrados
● Retroceder el proceso a un estado anterior
● Terminar algún proceso involucrado hasta que deje existir deadlock (esta es la
más usada)
● Expropiar recursos hasta que no exista deadlock (se puede hacer solo en
algunos recursos)

➔ Criterios de selección de procesos para terminar/expropiar:


● Menor tiempo de procesador consumido
● Menor cantidad de salida producida
● Mayor tiempo restante estimado
● Menor número total de recursos asignados
● Menor prioridad

Nota: Genera overhead (menor al del algoritmo del banquero)

ALGORITMO DE DETECCIÓN: Identifica los procesos que pueden estar en deadlock.


Pasos:
1. Eliminar los procesos que no tiene recursos asignados
2. Analizar las solicitudes actuales con los recursos disponibles
a. Si la respuesta es si, se simula la ejecución y luego se liberan los recursos
actualizando la matriz de recursos disponibles (marcando que el proceso
ejecutado no está en deadlock)
b. Si la respuesta es no, se avanza con la simulación de otro proceso

Aquellos procesos que no se puedan simular su ejecución, indican que están en deadlock.

Nota: No hay análisis con cada solicitud.

NO TRATAR EL DEADLOCK (4): Este caso es el que no implica overhead.

ESTRATEGIA INTEGRADA (5):


Agrupación de recursos y a cada grupo se le aplica alguna de las técnicas.

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.

PROTECCIÓN: El proceso va a tener asignado un registro base y un registro límite.


Registro base: Es en donde inicia el proceso. Almacena la dirección de memoria física legal
mas chica
Registro límite: Tamaño del proceso. Especifica el tamaño del rango.

Para calcular en donde se termina el proceso, hay que hacer registro base + registro límite

Para saber si un proceso puede acceder a un espacio de memoria, el procesador verifica si es


mayor o igual a la base y luego si es menor o igual a la base + límite.
● Si cumple las condiciones, se accede a la memoria
● Si no cumple las condiciones, se produce una interrupción indicando que el acceso es
inválido a memoria.
Nota: Los registros base y límite sólo pueden ser cargados por el SO que utiliza una instrucción
privilegiada especial.

ADDRESS BINDING: Es la asignación de direcciones.

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.

TIEMPO DE COMPILACIÓN: Se traduce la posición de memoria del programa cuando se


compila el mismo. (Ya no se usa)
En esta opción, no se puede tener más de una instancia de programa ejecutando (dos
procesos asociados a un mismo programa) y tampoco soporta la reubicación.
Nota: La dirección física es igual a la lógica

TIEMPO DE CARGA: Se traduce la posición de memoria del programa cuando se carga el


mismo. En esta opción no se sabe en donde está ubicada la variable sino que se tiene una
referencia.
No soporta la reubicación.

Nota: La dirección física es igual a la lógica

TIEMPO DE EJECUCIÓN: Se traduce la posición de memoria en tiempo de ejecución.


Se utilizan posiciones de referencia aun cuando el proceso está cargado en memoria y solo se
traducen las mismas cuando el SO quiere acceder a una posición de memoria para realizar la
lectura/escritura.

El SO con la ayuda de la MMU moverá libremente el proceso por la memoria.

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

DIRECCIÓN RELATIVA: Un tipo de dirección lógica, en que la dirección se expresa según a


un punto conocido.

DIRECCIÓN ABSOLUTA O FÍSICA: Referencia a una verdadera ubicación en memoria.


Mientras que la dirección lógica es siempre la misma, la dirección que varía en cada traducción
es la física.

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

ENLACE DINÁMICO: Bibliotecas compartidas.


La ventaja respecto a la carga dinámica es que no se le agrega más código al programa (no
crece la imagen del proceso).
PARTICIONAMIENTO ESTÁTICO (FIJO): Cuando el SO se inicializa, divide la memoria en
particiones
● Se divide la memoria en particiones tamaños fijos
○ Todas las las particiones del mismo tamaño
○ Particiones de tamaños diferentes
● El proceso se ubica en alguna partición del mismo tamaño o menor que el proceso
● Desventajas
○ Está limitada la cantidad de procesos a guardar en memoria (grado de
multiprocesamiento)
○ Está limitado el tamaño de los procesos a guardar (el proceso no puede ser
mayor al tamaño de la partición)
○ Tiene fragmentación interna

➔ 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.

PARTICIONAMIENTO DINÁMICO: Está toda la memoria disponible desde el comienzo.


● Si hay memoria disponible, a cada proceso se le asigna la memoria que necesita
● No hay número fijo de particiones
● Tablas de administración
○ Una tabla con la cantidad de procesos y el tamaño que ocupan
○ Una tabla con la cantidad de huecos libres y su tamaño
● Algoritmos de ubicación
○ Primer ajuste: Busca el primer hueco disponible desde el comienzo de la
memoria
■ Es el que genera el mejor rendimiento
■ Genera menos overhead (menos espacio en tablas y tiempo que ocupa
el SO viendo en qué espacio ubicar al proceso)
■ Permite tener huecos más grandes al final de la memoria hola
○ Siguiente ajuste: Busca el primer hueco disponible desde la posición de la última
asignación
○ Mejor ajuste: Busca el hueco más chico donde pueda ubicarse el proceso
○ Peor ajuste: Busca el hueco más grande donde pueda ubicarse el proceso
■ Este ajuste permite tener huecos más grandes y evitar tanta
fragmentación
● Tiene fragmentación externa (se resuelve con compactación)

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

FRAGMENTACIÓN EXTERNA: Cuando la memoria disponible es mayor al tamaño de un


proceso pero como dichos espacios no están contiguos en memoria, no se puede cargar un
proceso.
COMPACTACIÓN: Procedimiento por el cual el SO resuelve la fragmentación externa. Se
utiliza para generar huecos más grandes en memoria para reducir la fragmentación externa.
La compactación consiste en mover el contenido de la memoria situando toda la memoria libre
de manera contigua para formar un único bloque de gran tamaño.
● Para poder realizarla, se requiere que la memoria tenga reubicación
● Produce overhead
● Mientras se realiza la compactación la memoria está bloqueada y no se puede ejecutar
ningún proceso.

Nota: La compactación no siempre es posible.

BUDDY SYSTEM: Descomposición binaria


● Compensa desventajas de particionamiento fijo y dinámico
● Se asigna a los procesos tamaños de memoria que son potencias de 2
● La memoria asignada es según el tamaño del proceso y se redondea a la siguiente
potencia de dos
● Se consolidan según como fueron dividiéndose (consolidación por compañeros)
haciendo la compactación más sencilla
● Ventajas
○ La compactación es más sencilla
● Desventajas
○ Sigue teniendo fragmentación interna
○ Sigue teniendo fragmentación externa (pero se resuelve más rápido que en el
particionamiento dinámico) porque, según como se dividan los compañeros,
podría ser que no queden particiones contiguas.

SEGMENTACIÓN: Consiste en dividir el proceso en segmentos de tamaño variable sin


necesidad de que dichos segmentos estén contiguos en memoria
● Cada segmento va a tener el tamaño que el proceso necesite
● Cada segmento representa una parte del proceso
○ Código
○ Pila
○ Datos
○ Biblioteca
○ Heap
● Tablas de administración
○ Una tabla de segmentos para cada proceso
○ Una tabla de segmentos libre
● No hay un único valor base, sino que hay un valor base por cada segmento
● Se pueden usar los algoritmos de ajuste (primer ajuste, segundo ajuste, mejor ajuste,
peor ajuste)
● Ventajas:
○ No tiene fragmentación interna
● Desventajas:
○ Fragmentación externa (menos que en el particionamiento dinámico)
○ Administración más compleja

DIRECCIÓN LÓGICA A FÍSICA (para segmentación):


1. Identificar el segmento al que hace referencia
2. Identifico la base del segmento
3. A esa base le sumo el desplazamiento, resultando en la dirección física

tl

El SO se encarga de la creación, actualización y eliminación de las tablas y el MMU de realizar


la traducción de la dirección.
Nota: Solo el SO visualiza la dirección física

PROTECCIÓN (Segmentación): Cada segmento puede tener permisos de lectura, escritura y


ejecución
SEGMENTATION FAULT: Es un error que ocurre cuando se está intentando acceder a una
posición de memoria que el proceso no tiene acceso. El proceso puede estar accediendo a un
espacio de memoria inválido o que pertenece a otro proceso. Al generarse segmentation fault,
se finaliza el proceso.

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.

DIRECCIÓN LÓGICA A FÍSICA (para paginación):


1. Identificar la página a la que hace referencia
2. Identificar el frame de la página
3. A ese frame, se le suma el desplazamiento, resultando en la dirección física
La MMU es la encargada de consultar la tabla de páginas y realizar la traducción y el SO
separar al proceso en páginas y crear una tabla de páginas, para saber en qué página se va a
ubicar cada proceso.

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

PROTECCIÓN (paginación): Cada página puede tener permisos de lectura, escritura y


ejecución.

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

SEGMENTACIÓN PAGINADA: Combinación de segmentación y paginación


● Los segmentos se paginan
● Existe una tabla de segmentos por proceso
● Existe una tabla de páginas por cada segmento
● Combina ventajas de la segmentación y la paginación
○ No hay fragmentación externa
● Desventaja
○ Overhead
○ Tiene fragmentación interna (mayor que en paginación pero no es mucho)

La MMU es la encargada de consultar la tabla de páginas y de segmentos y realizar la


traducción y el SO separar al proceso en segmentos y luego páginas y crearlas, actualizarlas y
eliminarlas.
Además, mejora la eficiencia de la memoria realizando la traducción de Dirección Lógica a
Física. Las ventaja principal es permitir que la traducción se realice de manera más
rápida. Además, aporta protección al sistema analizando la validez de la dirección
lógica

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.

PROTECCIÓN (Segmentación paginación): Cada segmento puede tener permisos de lectura,


escritura y ejecución y cada página asociada tiene los mismos permisos

MEMORIA CACHE: Es un buffer de memoria utilizado para resolver la diferencia de velocidad


entre la CPU y la memoria principal.
8. Memoria Virtual

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:

1. Se realiza una referencia a memoria


a. Se verifica la presencia de la página en memoria mirando el bit de presencia
b. El MMU realiza un Page fault
2. Se genera la interrupción
a. Se bloquea el proceso hasta que esté disponible la página en memoria
b. Mientras tanto otro proceso puede utilizar el CPU
3. El SO realiza la solicitud de la página
a. Se determina en qué marco ubicar la página faltante
b. Se solicita la página faltante I/O al disco
4. Se carga la página en memoria principal y se produce una interrupción para que el SO
tome el control
5. El SO atiende la interrupción
a. Se actualiza la tabla de páginas
b. Desbloquea el proceso (cambia estado a listo)
6. Se ejecuta nuevamente la instrucción que provocó el page fault

ESTRUCTURA DE TABLA DE PÁGINAS:

● 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.

PRINCIPIO DE LOCALIDAD O PROXIMIDAD: Se va dando de manera natural mientras se


ejecutan los procesos. Mientras que la funcionalidad sea la misma, no se van a producir page
fault, y cuando se produzcan es probable que pasen todos juntos.
● Permite que la memoria virtual funcione y que no genera bajo rendimiento
● Durante un intervalo de tiempo, sólo se usan unas páginas de forma activa.
● Si se asignan menos marcos que el tamaño de la localidad, el proceso entrará en
sobrepaginación ya que no podrá mantener en memoria todas las páginas que esté
usando activamente.

Localidad: es un conjunto de páginas que se utilizan activamente de forma combinada.


PAGE FAULT: Es una interrupción de software que realiza la MMU indicando que la página no
está en memoria principal.
Nota: No es un error y es distinto al segmentation fault.

PAGINACIÓN JERÁRQUICA O POR NIVELES: Divide la tabla de páginas en páginas y la


parque que necesita la guarda en memoria principal y la otra en memoria virtual. Se necesita
un acceso extra en memoria (tabla externa)
● Ventajas:
○ Memoria principal más liviana
● Desventajas
○ Necesita más accesos a memoria (al menos 3)
○ Menor eficiencia ya que pueden haber 2 page fault
○ Overhead

TABLA DE PÁGINAS INVERTIDA:


● Hay una tabla de páginas para todos los procesos
● La cantidad de entradas de la tabla es igual a la cantidad de marcos en memoria
principal
● Ventajas
○ No existen tantas tablas de página reduciendo el tamaño utilizado en memoria
principal
○ Tengo el espacio reservado para la tabla
● Desventajas
○ Tiempo de búsqueda secuencial (si no se usa hash)
○ Es ineficiente
○ Es difícil implementarla con memoria virtual
○ No se puede realizar el sharing (dos procesos apuntando a la misma página)
Función de Hash: Es una función que a partir de un número de página y un id de proceso me
da un resultado que es entre 0 y el nro de marco más alto que exista así acotando el resultado
de búsqueda y no se sobrepase de la cantidad de marcos que tiene la memoria real.
El valor que devuelva la función es el frame que estoy buscando para acceder a la 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.

Tasa de acierto: Es el porcentaje de veces que se encuentra un número de pagina concreto en


el TLB.

ASID: Identificador de espacio de direcciones del proceso. Se asigna el dato (a donde?) y


permite cada vez que hay un cambio de proceso, evita el flush y tener pre-cargadas y mantener
fijas algunas líneas que más se usan (ej páginas de kernel).

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).

ALGORITMO FIFO: First in, first out


● Selección de la víctima: Elige la página que hace más tiempo está en memoria
● Está pensada con el principio de localidad
● Se requiere agregar a la tabla un puntero a la próxima página que será reemplazada.
● Es simple de implementar

Nota: Este algoritmo sufre de la anomalía de Belady

ALGORITMO LRU: Least recently used.


● Selección de la víctima: Elige la página que hace más tiempo no es referenciada
● Está pensada con el principio de localidad
● Por cada página se requiere almacenar el momento de su última referencia (timestamp)
● Desventajas: Es el algoritmo que mayor overhead tiene

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).

ALGORITMO DE CLOCK: Algoritmo mejorado de segunda oportunidad. Es un algoritmo con


sustitución FIFO. Se ejecuta solamente cuando hay page fault.
● Selección de la víctima: Se apunta al próximo marco a reemplazar pero:
○ Si el bit de uso == 0, se reemplaza el marco
○ Si el bit de uso == 1, se le asigna el bit de uso 0 y se apunta al siguiente marco y
se vuelve a preguntar

Bit de uso: Indica si la página está o no en uso.


● Se pone en (1) cuando:
○ La página es usada
○ La página se carga en memoria principal
● Se pone en (0) cuando:
○ Se ejecuta el algoritmo de clock
● Se debe agregar el bit de uso y el puntero al próximo que hay que apuntar.
● Desventajas: Tiene overhead pero menos que el LRU y más que el FIFO

ALGORITMO CLOCK MEJORADO:


● Toma en cuenta si la página que estoy haciendo referencia para elegir como víctima fue
modificada o no
● Requiere:
○ Un puntero al siguiente marco a analizar
○ Bit de uso
○ Bit de modificado
● Selección de la víctima: Toma en cuenta si la página fue modificada e intenta elegir una
que no fue modificada (ya que si la selecciona como víctima, se va a necesitar escribirla
en disco).
● Ventajas
○ Ahorra escrituras en disco
● Desventajas
○ Overhead

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.

Alcance del reemplazo: Para esta característica se utilizan dos políticas:


● Asignación Local: Permite a un proceso seleccionar un marco de sustitución que esté
en el conjunto de marcos asignados al proceso.
● Asignación Global: Permite a un proceso seleccionar un marco de sustitución que esté
en el conjunto de todos los marcos.

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

CONSIDERACIONES DE USAR MEMORIA VIRTUAL:

1. Sobrepaginación/Thrashing: Ocurren tantos page fault que el SO invierte más tiempo


intentando cargar páginas a memoria principal que ejecutando procesos. Causa problemas
de rendimiento.

Esto ocurre cuando el grado de multiprogramación es muy alto.


● Más procesos en memoria y menos marcos por proceso
● Es posible que haya más page fault
○ Baja la tasa de uso del cpu ya que el page fault realiza una interrupción de I/O
● Soluciones
○ Reduciendo el grado de multiprogramación (eliminando procesos - “En caliente”)
○ Ampliar la capacidad de la memoria RAM (aumentando la cantidad de frames)
2. Tamaño de la página:

3. Bloqueo de páginas: Se utiliza un bit de bloqueo de frames.


● Evita que una página que aún no fue utilizada sea sustituida (en caso que justo haya
sido la página que se trajo de MV y por algún motivo todavía no la pudo leer/escribir)
● Se utiliza para frames pertenecientes al SO

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

FILE SYSTEM: Es un sistema que almacena datos y opera con ellos.


● Da soporte a varios usuarios (implica )
● Minimiza la posibilidad de pérdida de datos
● Maximiza el desempeño del sistema
○ SO: Administrar espacio en disco y aprovecharlo
○ Usuario: Tiempo de respuesta
● Soporte para distintos tipos de dispositivos
● Garantizar la integridad o coherencia de los datos
● Almacena memoria no volátil

➔ 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: El filesystem no conoce el contenido de los bloques y se lo consulta al SO.


TABLA GLOBAL DE ARCHIVOS ABIERTOS: Es una única tabla para indicar cuáles son los
archivos abiertos. Se van a encontrar datos generales sobre los archivos que son iguales para
todos los procesos como el tamaño, fechas, permisos, cantidad de aperturas, etc.
La tabla se utiliza a medida que se abren y cierran los archivos y solo se almacena en memoria
principal ya que es caso que se desmonte el FS, no quedarán archivos abiertos del mismo.

Contador de apertura: Cuando se cierra el archivo, se pasa el contador a 0 y se elimina el


registro de la tabla

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.

BLOQUEOS/LOCKS: Permisos de un proceso sobre un archivo

● Compartido: Varios procesos pueden acceder a un mismo archivo


● Exclusivo: Solo un proceso a la vez puede acceder a un archivo
● Obligatorio: El SO es el encargado de aplicar el lock cada vez que se abre un archivo
● Sugerido: El SO no participa, la protección es dada por el programador (realizando una
syscall para asignar un lock)
● Ventajas
○ Se puede hacer un lock sobre una porción del archivo.
● Desventaja
○ Si un proceso hace un lock suger ido y otro proceso quiere acceder a la porción
de un archivo que fue protegida con un lock sugerido y este proceso no tiene un
lock se puede generar una inconsistencia

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

MÉTODOS DE ACCESO: Relacionado con el archivo en donde está montado el archivo


● Acceso Secuencial: Se tiene que recorrer todo el filesystem hasta llegar a lo que se está
buscando. Se recorre en secuencia
● Acceso directo: Se puede ir de manera directa al dato que se está buscando (ej disco)

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

DIRECTORIO: Un archivo de directorio es una lista de archivos que contiene el directorio


(carpeta). Tiene forma de grafo (árbol o con ciclos)
Operaciones:
● Búsqueda de un archivo
● Crear un archivo
● Renombrar un archivo
● Borrar un archivo
● Listar un directorio
● Recorrer el filesystem
IMPLEMENTACIÓN DE DIRECTORIOS: Las siguientes estructuras mantienen el orden de un
directorio. Debe existir alguna para poder listar los archivos de manera rápida
● Lista lineal: Lista que no tiene orden
○ Se utiliza generalmente cuando hay una carpeta que su contenido no cambia
● Lista ordenada: Lista ordenada
○ Se utiliza generalmente cuando hay una carpeta que su contenido no cambia
● Árbol:
○ Se utiliza generalmente cuando es un directorio que cambia constantemente
● Tabla de Hash:
○ Se utiliza generalmente cuando es un directorio que cambia constantemente

MONTAJE DE FS: A través del directorio raíz se puede recorrer

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)

PROTECCIÓN: Protección sobre archivo


● Acceso total: Cualquier usuario puede realizar cualquier operación
● Acceso Restringido: Cuando accede más de un usuario a un archivo. Se puede
restringir el acceso (el propietario del archivo tiene acceso solamente)
● Acceso Controlado: Permisos de acceso. Define el usuario o grupo de usuarios que
tienen acceso a los archivos y qué pueden hacer con dicho archivo (leerlo,escribirlo,
borrarlo)

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.

● Contraseña: Se ingresa una contraseña para poder abrir/escribir un archivo

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.

Nota: Algunas implementaciones permiten el uso de bloques de tamaño variable y de tamaño


variable y expandible.
PARTICIÓN: Partes de un disco. Para usarla, se debe instalar (montar) un filesystem en la
partición. Cada partición puede tener distintos tipos de filesystem

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

Nota: Se cargan distintas estructuras dependiendo del filesystem que se carga

MÉTODOS DE ASIGNACIÓN

● Asignación contigua: Asigna a un proceso bloques contiguos.


○ Archivo
○ Bloque inicial
○ Cantidad de bloques
○ Ventajas
■ Hay acceso directo y rápido
○ Desventajas
■ Tiene fragmentación externa (se soluciona con compactación)
■ Si un archivo crece de tamaño, no siempre se va a poder almacenar (Se
usan algoritmos de compactación o reubicación para solucionarlo)
● Enlazada o encadenada: Asigna a un proceso bloques que pueden no ser contiguos
○ Archivo
○ Bloque inicial
○ Bloque final
○ Cada bloque tiene un espacio reservado para almacenar un puntero indicando el
próximo bloque a ejecutar
○ Ventajas
■ No tiene fragmentación externa
○ Desventajas
■ Para acceder a un bloque, no tiene un acceso directo al archivo (hay que
ir recorriendo bloque por bloque hasta encontrar el que se necesita)
■ Si se pierde un bloque en el medio, se pierde el acceso desde ese
bloque en adelante.
● Indexada:
○ Por cada archivo existe una tabla
○ Se guarda en el disco.
■ Si abro el archivo, se almacena en memoria para acceso más rápido
○ Ventajas
■ Se tiene acceso rápido a la tabla
■ Si se pierde un bloque en el el medio, se tiene acceso al resto de los
bloques
■ No hay fragmentación externa
○ Desventajas
■ La tabla es de tamaño fijo (van a pesar muchísimo para archivos
grandes)
GESTIÓN DEL ESPACIO LIBRE: Estrategias para gestionar el espacio libre de un filesystem
● Lista de bloques libres: Lista de los bloques que están disponibles.
○ Indica el bloque disponible y hace referencia al próximo bloque disponible.

● Bitmap: Por cada bloque tengo asociado un bit que indica si está libre u ocupado. Es el
más usado comúnmente.

○ Puede o no persistir en disco


○ Puede o no calculable
○ Ventajas
■ Más rápida y más liviana
● Indexada (como archivo indexado): Una tabla que indica los bloques libres

● Agrupamiento en bloques: Se agrupa en bloques los números de bloques disponibles y


al final del bloque se hace referencia al próximo bloque disponible.
ESCRITURA DE UN ARCHIVO:
Para escribir un archivo, el filesystem debe realizar los siguientes pasos:

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

El procedimiento de journaling es básicamente el siguiente:


1. Se bloquean las estructuras de datos afectadas por la transacción para que ningún
otro proceso pueda modificarlas mientras dura la transacción.
2. Se reserva un recurso para almacenar el journal. Por lo general suelen ser unos
bloques de disco, de modo que si el sistema se para de forma abrupta (corte eléctrico,
avería, fallo del sistema operativo...) el journal siga disponible una vez reiniciado el
sistema.
3. Se efectúan una a una las modificaciones en la estructura de datos. Para cada una:
Se apunta en el journal como deshacer la modificación y se asegura de que esta
información se escribe físicamente en el disco. Se realiza la modificación.
4. Si en cualquier momento se quiere cancelar la transacción se deshacen los cambios
uno a uno leyéndolos y borrándolos del journal.
5. Si todo ha ido bien, se borra el journal y se desbloquean las estructuras de datos
afectadas.

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

MAPEO DE ARCHIVOS EN MEMORIA: Al mapear un archivo en memoria, se puede jugar con


la aritmética de punteros. Se utiliza con mmap().
● Es sugerido que los bloques de un archivo tengan el mismo tamaño que las páginas
● Es el mismo mecanismo que ocurre cuando hay page fault.
TIPOS DE FILESYSTEM:
● FAT
● Extended

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

FAT: File Allocation Table


● Desarrollado originalmente para dar soporte a los diskettes
● Actualmente se utiliza en algunas memorias flash (pendrive)
● Utiliza asignación enlazada.
● Versiones que más se usan
○ 12
○ 16
○ 32
○ ExFat: El fs se puede leer en windows, mac y linux
● Ventajas
○ Si se rompe un cluster, puedo seguir utilizando el archivo ya que la información
está en la tabla FAT.
○ Permite el acceso directo y secuencial
○ Es un sistema simple
○ Poco overhead (respecto al operar sobre los archivos)
● Desventajas
○ No hay Journaling
○ No hay seguridad ni permisos
○ No hay métodos de cifrados
○ No existe el FCB

Instalación de volumen tipo FAT en una partición (Formateo):


● Boot Sector: Contiene la información general sobre el filesystem
○ Nombre
○ Versión
○ Cantidad de bloques libres
○ Tamaño del bloque
● Tabla FAT: Permite conocer los bloques a los que pertenece cada archivo. Puede haber
varias tablas FAT
○ Se puede definir la cantidad de tablas fat, su tamaño y el tamaño de los punteros
○ Se crean copias como backup dada que es una tabla de importancia.
○ Cada entrada de FAT está relacionada con un bloque de datos del disco
● Root folder (Directorio raíz): Punto de entrada a los archivos (C:, /media, /). Lista de
archivos y directorios.
● Cluster: Bloques de datos de 512 bytes hasta 64kb.
Directorios: Contiene un listado de archivos y directorios que contiene.

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

TABLA FAT: Guarda en cada posición de la tabla, el próximo cluster a ejecutar.


Se tiene en cuenta el tamaño del archivo y el primer cluster.
● Libre: Cuando hay todos 0, se indica que el cluster está libre
● Fin: Cuando hay todos 1, se indica que es el fin del archivo
● Error: Hay códigos para indicar si un cluster está defectuoso.

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)

Implementaciones de FAT: Cada implementación tiene una cantidad máxima de bloques


distintas ya que dependiendo el tamaño de puntero, la cantidad de direccionamiento máximo.
● FAT12: Puntero de 12 bits
● FAT 16: Puntero de 16 bits
● FAT 32: Puntero de 32 bits pero sólo se usan 28 bits para el puntero

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.

UFS: Unix File System.


● Se utiliza en sistema tipo Linux/Mac
● Son más actuales que FAT
● Utiliza asignación indexada.
● Versiones que más se usan
○ Extended 2
○ Extended 3
● Ventajas
○ Permite el acceso directo (a través del inodo)
● Desventajas

Instalación de volumen tipo UFS en una partición (Formateo):


● Bloque de arranque: Indica en dónde comienza y termina cada partición
● Grupos de Bloques: Se numeran de 0 a n. Cada grupo de bloques contiene la misma
estructura.
○ Super Bloque: Estructura que contiene general del filesystem como el nombre,
magic number, tamaño de los bloques, si el estado del filesystem es coherente,
etc.
○ Descriptor de grupos: Estructura que contiene información sobre cada grupo
particular.
■ Cantidad de datos por grupo
■ Cantidad de bloques libres por grupo
■ Dónde comienza y termina cada grupo
○ Bitmap de bloques: Estructura para la gestión de los bloques libres. Por cada
bloque de datos que pertenece al grupo, hay un bit que indica si está libre u
ocupado
○ Bitmap de inodos: Por cada inodo, existirá un bit que indicará si el inodo está
libre u ocupado
○ Tabla de inodos
○ Bloques de datos:

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)

INODO: Es el File Control Block que se utiliza en extended.

Directorios: Contiene un listado de archivos y directorios que contiene.

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

TABLA DE INODOS: Contiene los inodos


● Tiene un tamaño fijo
● Cuando se inicializa el filesystem, ya se sabe la cantidad de inodos que van a existir.
● En cada grupo va a haber cierta cantidad de estructuras de tipo FCB ya definidas
(vacías creadas de antemano)

INODO: Es el FCB del filesystem.


● Hay un inodo por archivo. Un archivo no puede tener más de un inodo
● El mismo se inicializa vacío.
● Contiene los atributos del archivo
○ Id
○ Propietario
○ Grupo
○ Permisos
○ Tamaño
○ Un puntero por cada bloque de datos
● Tiene tamaño fijo de 128 bytes
● En ext2 60 bytes están asignados a los punteros por lo que se puede direccionar hasta
15 bloques (archivos de hasta 60kb). Esto se soluciona creando punteros a demanda.

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

Tipos de punteros en el inodo:


● Punteros directos: Apuntan a un bloque de datos
● Punteros indirectos: Apuntan a un bloque de punteros
○ Simples
○ Dobles
○ Triples
Nota: En ext2 el formato estándar suele ser de 12 punteros directos, 1 puntero indirecto simple,
1 doble y 1 triple

Cantidad de punteros en Indirecto simple:

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.

Tamaño máximo teórico de un archivo: (PD + IS + ID + IT) * Tamaño del bloque


Tamaño máximo real de un archivo: Está limitado al dispositivo.
Tamaño del filesystem teórico: 2^(tamaño del puntero) * tamaño bloque
Tamaño del filesystem real:
● Si el tamaño teórico del fs es mayor al tamaño del disco, entonces es el tamaño del
disco
● Si el tamaño teórico del fs es menor al tamaño del disco, entonces es el tamaño del fs.

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

Contador de Hard links: Cuenta la cantidad de referencias al archivo.


Notas:
● No se puede usar links en FAT porque existen 2 entradas para el mismo archivo y si
alguna de ellas cambia algo, la otra no puede saber si hubo un cambio (data
incoherente).
● En EXT si se puede ya que todos los atributos están centralizados en el inodo ya que no
importa qué cambio se haga, siempre se realiza en el inodo.

10. Entrada y Salida

E/S: Solicitud a un dispositivo generada a través de una syscall en donde el proceso se


bloquea.
➔ Tipos de dispositivos de E/S:
● Comprensibles para el usuario: mouse, teclado, impresora, etc
● Comprensibles para el sistema: placa de red, modem, etc
● De comunicación: modem, etc
➔ Diferencias:
● Velocidades de transferencia
● Uso
● Complejidad
● Unidad de transferencia
○ Para el disco es el tamaño del bloque
○ Para el teclado es caracter a caracter
● Condiciones de error
● E/S Bloqueante/ no bloqueante
● E/S Sincrona/ Asíncrona
● Acceso secuencial o aleatorio
● Compartible o dedicado
● Lectura, escritura o lectura/escritura
➔ Estructura de E/S:
● Software
● Hardware

E/S BLOQUEANTE o NO BLOQUEANTE

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

➔ Ventajas de E/S bloqueante:


● El programador se “desliga” de preguntar si la solicitud está o no disponible
● El proceso se bloquea
➔ Ventajas de E/S no bloqueante:
● El proceso no se bloquea, puede seguir ejecutando mientras espera a que la
solicitud finalice
● El programador debe preguntar si la solicitud realizada anteriormente está o no
disponible
E/S SÍNCRONA vs ASÍNCRONA

SÍNCRONA/ASÍNCRONA VS BLOQUEANTE/NO BLOQUEANTE

● La E/S bloqueante o no bloqueante está relacionado con el tipo de llamada al sistema


que podemos realizar
● Si es síncrona o asíncrona está sujeto al tipo de comunicación entre proceso y
dispositivo
● El E/S no bloqueante pero síncrono genera espera activa.
TÉCNICAS DE E/S
Técnicas que tiene el procesador para comunicarse con el módulo de E/S
● E/S Programada
● E/S por Interrupciones
● Acceso directo a memoria (DMA)

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

El procesador es el encargado de traer/enviar la información a cada dispositivo. Puede que un


dispositivo no esté “listo” para recibir esa información por lo que el procesador debe esperar al
mismo

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

ACCESO DIRECTO A MEMORIA (DMA)


● CPU delega la operación de E/S al procesador DMA
● CPU indica al módulo DMA
○ Tipo de operación (Lectura o escritura)
○ Dirección del dispositivo de donde leer o escribir
○ Cantidad de bytes a leer o escribir
○ La ubicación de la memoria donde debe leer o escribir

Nota: La función del procesador es comunicarse directamente con el procesador DMA

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

BUFFERING EN MEMORIA VIRTUAL


Cuando se reemplaza una página, en vez de directamente escribirla en disco, se guarda en un
marco libre de la memoria del SO reservado para el buffering
Ventajas:
● Una página reemplazada puede estar disponible en memoria (se ahorra un acceso a
disco)
● Páginas modificadas se escriben en grupos
● Evita el uso del bit de bloqueo de páginas

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

Se identifica como: Cilindro/Pista, Cabeza/Cara, Sector

PRINCIPIO DE LOCALIDAD ESPACIAL


Sí usé un sector, es posible que utilice otros sectores de la misma pista y es probable que no
necesite mover el brazo para ir a otra pista.

TIEMPO DE ACCESO A UN SECTOR


Es la suma de:
● Tiempo de búsqueda: Tiempo para posicionar el brazo en la pista deseada
○ Este se puede administrar
● Latencia Rotacional: Tiempo en que tarda en posicionarse en el sector dentro de la pista
(hasta que el sector quede debajo del cabezal)
○ Depende de qué pista quiero leer
● Tiempo de transferencia: Tiempo fijo en que tarda en llegar a la memoria (o a la
controladora del disco)

TA = TB + LR + TT

Nota: Al guardar un archivo, si se eligen bloques cercanos o del mismo “grupo”, el tiempo de
acceso será menor

ALGORITMOS DE PLANIFICACIÓN DE DISCO


Tienen como objetivo reducir el tiempo de búsqueda
● FIFO
● SSTF
● SCAN y C-SCAN
● LOOK y C-LOOK
● FSCAN
● N step SCAN

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)

Nota: El brazo se mueve solamente si hay un pedido

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

➔ Utiliza dos colas de pedidos


◆ Activa (la cola que se está atendiendo en el momento)
◆ Pasiva (la que acumula los pedidos mientras se atiende la activa)
◆ Se atienden los pedidos de la cola activa utilizando el algoritmo SCAN
◆ Los pedidos nuevos se agregan a la cola pasiva
◆ Cuando se atienden todos los pedidos de la cola activa
● La cola pasiva pasa a ser la activa
● La activa pasa a ser la pasiva
➔ Ventajas
◆ No tiene inanición gracias al uso de las colas
➔ Desventajas:
◆ Es más complejo
◆ Lleva más tiempo que el SCAN

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

SECTOR LÓGICO A CHS


Para obtener de un sector lógico al -> Cilindro Cabeza Sector

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

● Más seguridad (se puede repetir la información en otros discos)


● Más rendimiento (Se utilizan varios discos y se hacen lecturas en simultáneo)
● Existen 7 niveles (0 a 6) y además pueden combinarse
● Configuración por software o por hardware
Nota: En raid 0 no tengo discos duplicados y en Raid 0 + 1 si tengo duplicados

También podría gustarte