Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sistemas Operativos.
Es un programa de control, ya que controla la ejecución de los programas para evitar errores o
uso impropio del hardware.
2. Objetivos
Principal: Facilitar al usuario el uso del Sistema Informático y gestionar los recursos del mismo.
Secundarios:
Interfaz amigable.
Eficiencia de los recursos disponibles.
Fiabilidad, evitar errores.
Mantenible y capaz de evolucionar ante nuevas versiones.
3. Arranque de un ordenador.
1. Ejecución del POST para inicializar dispositivos.
2. Carga en memoria el MBR del dispositivo de arranque.
3. Ceder control al boot manager.
4. Arranque del SO.
Entre ellos distinguimos los de interfaz con el usuario (escritorio y ventanas) y los de utilidades
(manejo de ficheros etc.).
5. Concepto de proceso.
Un proceso se trata de un programa en ejecución con un contexto que gestiona el núcleo, este
contexto consta de:
Un proceso puede dar lugar a la creación de otros, que serán sus procesos hijos. Cada proceso
está identificado mediante un identificador de usuario (UID) que es compartido entre los
procesos padres e hijos. Por otra parte, los procesos también pueden ser miembros de grupos,
los cuales también tienen un identificador de grupo (GID).
Por ultimo dentro de los procesos hay un tipo especial, el superusuario, que tiene privilegios y
podría violar muchos de las reglas de protección.
6. Multiprogramación.
Técnica que permite mantener varios procesos en memoria y repartir la CPU y otros recursos
entre ellos, de forma que todos avancen “simultáneamente”. Cada proceso cree que tiene la
máquina para él solo, pero en realidad la está compartiendo. Esta técnica maximiza el
aprovechamiento de los recursos, ya que mientras un proceso esta ocioso(esperando a E/S o
básicamente realizando cualquier tarea que no tenga que ver con la CPU), algún otro proceso
puede usar la CPU u otros recursos.
Obliga a que el sistema operativo realice una planificación de recursos de como asignar los
tiempos de uso de la CPU, que zona de memoria se asigna a cada proceso o cómo se organiza
el acceso a los E/S. Esto crea problemas de concurrencia, es decir, que dos procesos quieran
modificar el mismo fichero al mismo tiempo, pero también posibilita el trabajo cooperativo
entre procesos.
8. Conmutación de tareas.
Para conmutar la CPU de un proceso a otro:
1. Se guarda el valor actual de los registros de la CPU en el PCB del proceso saliente.
2. Se cargan los registros de la CPU con el valor almacenado en el PCB del proceso que
entra en la CPU.
3. La conmutación de tareas solo puede producirse si el núcleo del SO obtiene el control
del procesador, y solo lo puede obtener mediante llamada al sistema, interrupción
hardware, temporizador o excepción.
Debido a esto se dice que un sistema operativo es (event driven) dirigido por eventos, ya que
el SO se activa únicamente cuando se produce un evento.
Para pasar a modo supervisor se tiene que hacer mediante interrupciones tanto software
(Llamadas al sistema), como hardware (dispositivos de E/S) o con excepciones (Situaciones
inesperadas), al terminar las interrupciones se vuelve al modo anterior.
Las instrucciones privilegiadas solo se pueden ejecutar en modo supervisor y estas pueden
comprometer la seguridad del sistema, y son:
Entrada y salida
Cambios en los registros de control
Cambio de vectores de interrupción
Control: des/activación de memoria virtual, modo protegido…
10. Protección.
La protección evita que unos procesos o usuarios puedan dañar otros procesos, usuarios o al
propio sistema operativo. Es imprescindible contar con el hardware apropiado para
implementar mecanismos de protección eficaces. Esta protección es necesaria en CPU,
memoria, E/S…
Las modificaciones del valor del registro base y límite se realizan en modo supervisor.
En ciertas máquinas se utiliza una técnica conocida como memoria virtual, en la que el SO
mantiene una parte del espacio de direcciones en la memoria principal y otra parte en disco, y
transfiere fragmentos de memoria entre ambos según los necesite.
En general los programas no efectúan las llamadas al sistema directamente, ya que estas
normalmente son en lenguaje ensamblador, sino que ejecutan una función de biblioteca
definida en algún lenguaje de programación que realice esta llamada al sistema.
Dentro de las llamadas al sistema existe una clasificación según a que se dirige esta llamada:
Procesos.
Memoria.
Manejo de ficheros.
Manejo de dispositivos.
Red.
12. Virtualización.
La idea es proporcionar un recurso idealizado (virtual) usando recursos reales (físicos). Con la
gestión adecuada de un único recurso pueden proporcionarse numerosos recursos virtuales. El
ejemplo más claro es una máquina virtual.
Un proceso está compuesto por su código, datos y la pila, además de un contexto de proceso
asociado dinámicamente (prioridad, registros de CPU, protección, ficheros abiertos…).
Los procesos interactivos son intensivos en E/S, con un gran número de ráfagas de CPU muy
cortas y pocas largas.
Los procesos de cálculo no interactivos son intensivos en CPU, con un gran número de ráfagas
de CPU largas.
Cuando no hay multitarea, el procesador no puede ser utilizado con otro proceso mientras el
proceso en ejecución espera a que se complete una operación de E/S.
Servidor Web:
Un grupo de procesos trabajadores, cada trabajador acepta una conexión y atiende al cliente
hasta que cierra la conexión. El controlador gestiona los trabajadores existentes.
Ventajas de la multitarea:
Aprovecha los tiempos de espera de los procesos.
Aumenta el uso de la CPU
Permite el servicio de varios usuarios de forma ágil.
Permite ejecutar aplicaciones multiproceso, lo que permite aumentar su rendimiento
en sistemas multiprocesador, separar responsabilidades…
Para ser efectivos los procesos no deben hacer espera activa.
Estados suspendidos: Válido para estados preparado y bloqueado, se libera memoria al tener
el proceso en disco.
Cambio de contexto.
El cambio de contexto se trata de una operación por la que se guarda el estado del proceso
actualmente en CPU para que otro pase a ejecutarse en la CPU y poder reanudar la ejecución
donde se quedó. Este cambio se usa para implementar la multiprogramación y para atender a
interrupciones.
Lo que se guarda de estos procesos es el valor de los registros de la CPU, y son guardados en
memoria, que puede ser tanto en el PCB o en la pila del proceso.
Este cambio de contexto puede ser voluntario, en la que el proceso realiza alguna operación
que lo bloquea, o involuntario, en la que el proceso es expulsado.
Más pesados:
2.3. Hilos.
En una aplicación multiproceso clásica los cambios de contexto entre diferentes procesos son
costosos, ya que cada proceso tiene su zona de memoria. Si pensáramos en compartir recursos
entre procesos distintos es más difícil debido a que tienen zonas de memoria separadas y para
compartir tendrían que usar solo las zonas de memoria compartidas.
Surge el concepto de hilo, que se trata de poder tener diferentes secuencias de ejecución
dentro de un mismo proceso, una segunda causa por la que los hilos son útiles es que la
creación de los mismos es mucho más rápida que la creación de un proceso completo. Una
tercera es que no producen un aumento de la velocidad de procesamiento y que en los
sistemas con CPUs múltiples sí que se puede llegar a la ejecución completamente en paralelo.
Un hilo comparte con los demás el espacio de memoria, las variables globales, los ficheros
abiertos y las herramientas de sincronización y comunicación entre procesos. Mientras que
cada hilo tiene para si un contador de programa, unos registros, una pila y un estado.
La parte del SO que decide a quien se le asigna la CPU es el planificador a corto plazo y el
algoritmo usado se llama algoritmo de planificación. La planificación también decide que
trabajos entran al sistema (largo plazo) o que procesos deben esperar en disco (medio plazo).
Los dispositivos en los que la multiprogramación es más necesaria son los servidores de red. Ya
que tiene que decidir si ejecutar un proceso de medición de las estadísticas diarias o uno que
atiende las peticiones de los usuarios por ejemplo.
Por ultimo este planificador es el que determina el grado de multiprogramación del sistema.
Existen 2 razones para llevar a un proceso que se encuentra en estado de espera (bloqueado o
preparado) a disco: para reducir el grado de multiprogramación real o porque no hay memoria
libre.
Expulsor
Puede obligar a los procesos a abandonar la CPU aunque no hayan completado su
ráfaga de CPU.
Se usa en sistemas donde los procesos importantes deben ejecutarse antes que los
menos importantes.
También en los sistemas en tiempo compartido (con procesos interactivos) para
asegurar un buen tiempo de respuesta.
La expulsión tiene un coste de tiempo (por el cambio de contexto) y de memoria(se
mantienen varios procesos en ella para que el cambio sea rápido).
No Expulsor
Los procesos solo abandonan la CPU al finalizar su ráfaga de CPU.
Los procesos con mucha E/S tienen que esperar más por culpa de los intensivos en
CPU.
Si el proceso entra en un bucle sin fin deja colgado al sistema.
El diseño es más simple que el expulsor.
Objetivos de la planificación.
Imparcialidad: Todos los procesos deben ser tratados igual y ninguno debe sufrir
inanición.
Eficiencia: Que el núcleo dedique poco tiempo (sobrecarga) a gestionar la
planificación.
Minimizar el tiempo de respuesta para los procesos interactivos.
Favorecer a los procesos importantes.
Responder bien ante situaciones de uso intensivo de CPU.
FIFO/FCFS
En este estilo de planificación los procesos son atendidos según el orden en que llegaron a la
cola de preparados. Una vez que el proceso tiene la CPU se ejecuta hasta que complete su uso,
es No Expulsor. Realiza una planificación imparcial, aunque perjudica a procesos con mucha
E/S y a los importantes. Si un proceso entra en un bucle sin fin, el sistema se queda colgado.
RR(Round Robin)
Es un FIFO con planificación expulsora, la CPU se asigna a un proceso durante un tiempo
definido llamado CUANTO o cuantum. Es también un planificador imparcial.
Cuando un proceso sale, si la ráfaga de CPU es mayor que el cuanto implica que ha sido
expulsado, mientras que si es menor implica que ha salido voluntariamente. De esta manera se
consigue una multiplexacion en el tiempo, adecuada para los sistemas de tiempo compartido.
Fijo o variable.
Igual para todos los procesos o distinto para ciertas categorías.
Grande RR parecido a FIFO, por lo que aumenta la eficiencia pero tiene menor
tiempo de respuesta.
Pequeño Disminuye la eficiencia debido a la sobrecarga del cambio de contexto
pero mejora el tiempo de respuesta ya que el sistema se hace más ágil.
Prioridad
Se asocia una prioridad a cada proceso, y se concede la CPU al proceso con prioridad más alta.
Estas prioridades pueden definirse de 2 formas:
Internamente: Utilizan valores internos del sistema para definir la prioridad. (Límites
de tiempo y relación de uso de CPU-E/S)
Externamente: Utilizan criterios externos al SO. (Tipo de usuario, Importancia de la
tarea y dinero pagado por el tiempo de CPU)
Estática:
No cambia con el tiempo, se asigna al crear el proceso.
Es fácil de implementar y tiene baja sobrecarga.
No se adapta al entorno.
El tiempo de respuesta puede ser más predecible.
Puede dejar colgado al sistema si un proceso de muy alta prioridad entra en un
bucle sin fin.
Dinámica:
Se asigna una prioridad inicial al proceso, pero se puede recalcular/reajustar a
lo largo de su ejecución.
Es más compleja de implementar y produce más sobrecarga (menos eficiente).
Se adapta a cambios de entorno.
La cola de preparados se divide en varias colas, y cada cola tiene una prioridad. Los procesos
van entrando a las colas según su prioridad y el planificador escoge el proceso de la cola de
mayor prioridad. Los procesos que llevan mucho tiempo preparados se suben a una cola más
prioritaria para evitar la inanición y en caso contrario, si un proceso agota su cuanto se le baja
de prioridad para que no monopolice la CPU. Los procesos que finalizan operaciones de E/S se
depositan en colas con prioridad alta para acelerar su vuelta a la ejecución.
Número de colas
Un criterio para determinar en qué cola entra un proceso de nueva creación.
Un criterio para determinar cuándo ascender a un proceso a una cola de mayor
prioridad.
Un criterio para determinar a qué cola vuelve un proceso que pasa de ejecución a
preparado
Un criterio para determinar a qué cola vuelve un proceso que pasa de bloqueado a
preparado.
Cada proceso se identifica mediante un PID y estos a su vez se agrupan en: grupos de procesos
y sesiones.
Tipos de procesos.
Procesos del núcleo: Cuyo código está dentro del núcleo, se ejecutan en modo supervisor y
realizan tareas básicas del núcleo.
Diagrama de estados.
Planificador 4BSD
Se trata de un planificador de colas multinivel con realimentación y dentro de las colas se usa
un Round-Robin con un cuanto de 10 a 100 ms.
Los hilos del núcleo de atención a interrupciones y el código de las llamadas al sistema se
ejecutan con la máxima prioridad.
Los procesos de usuario se ejecutan con prioridades dinámicas. Penaliza los procesos
intensivos en CPU y se permite la interacción del usuario mediante nice. Los procesos en
tiempo real y los ociosos utilizan prioridades estáticas.
Compilación:
Resuelve referencias dentro de cada módulo fuente.
Genera módulo objeto.
Montaje (o enlazado):
Resuelve referencias entre módulos objeto.
Resuelve referencias a símbolos de bibliotecas.
Genera el ejecutable.
Durante la ejecución del proceso se pueden crear nuevas regiones y puede variar el tamaño de
las existentes por lo que el mapa puede tener huecos.
3.2. Cachés.
Principio de localidad de referencia.
Los programas de ordenador suelen acceder repetidamente a conjuntos de datos ( e
instrucciones) que están relacionados.
Localidad espacial: Si se accede a una cierta posición, es muy probable que en el futuro
cercano se acceda a posiciones cercanas. Por ejemplo, recorrer una tabla
secuencialmente.
Localidad temporal: Si se accede a una cierta posición, es muy probable que en el
futuro cercano se vuelva a acceder a esa misma posición. Por ejemplo, ejecutar un
bucle repetidamente.
Caché.
Aprovechando la localidad de referencias, se puede utilizar una memoria más rápida M1,
aunque más cara y de menor capacidad, para almacenar una copia del subconjunto de datos
referenciados repetidamente de otra memoria más lenta M2.
tA = tasa de aciertos.
𝑐1∗𝑚1+𝑐2∗𝑚2
Coste por MB: 𝑐 = 𝑚1+𝑚2
Si hay que cargar otro dato nuevo y la caché está llena se machaca otro dato, por localidad
temporal lo más interesante seria eliminar un dato que hace mucho que no se usa.
Cuando se escribe algo en la caché hay que actualizarlo también en la memoria inferior, si se
actualiza en ese momento se llama write-through, y si se actualiza más adelante write-back.
Una solución fácil sería reservar memoria de más por si se necesita, pero
ineficiente, reservar lo necesario e ir reubicando el proceso cada vez que se
necesite más memoria sería más eficiente pero a la vez más costoso en tiempo de
ejecución.
Este método es aplicable porque los procesos solo usan parte de su mapa en cierto
intervalo de tiempo, lo que se llama proximidad de referencias. Esto nos lleva a que
gracias a la memoria virtual permite aumentar el grado de multiprogramación real,
al poder tener más procesos en memoria, y permite la ejecución de programas cuyo
mapa no cabría en memoria principal.
Pero antes veremos asignación de memoria continua, por introducir diversos conceptos y
utilizarse en algunos casos.
Asignación contigua.
Se carga el mapa de proceso en una zona contigua de memoria principal. No existen regiones,
y solo requiere un registro base y un registro limite.
Mejor ajuste (best-fit): Asignar el espacio libre con tamaño suficiente, se trata de
una política ineficiente ya que se generan espacios libres pequeños.
Peor ajuste (worst-fit): Asignar el mayor espacio libre con tamaño suficiente, con
esta política se generan espacios libres más grandes.
Primer ajuste (first-fit): Asignar el primer espacio libre con tamaño suficiente, con
esta política no pierdes tiempo en la búsqueda de espacios libres.
Para identificar las páginas tenemos las direcciones lógicas: nº página y desplazamiento, y
existe una tabla de páginas que relaciona cada página con el marco que la contiene, existe una
tabla de páginas para cada proceso y es usada por la MMU para traducir direcciones lógicas a
físicas.
Contenido de la TP.
Numero de marco asociado.
Bit de validez (V)
Página validada dentro del espacio de direccionamiento del proceso (no es un
hueco)
Si se accede a pág. inválidaExcepción.
Información de protección: EXS
E=escribible, X=ejecutable, S=solo modo supervisor
Si operación no permitida Excepción
Bit de página Presente (P)
Usado en memoria virtual para indicar si página cargada en memoria
Si se accede a página no presente Excepción
Fragmentación interna.
A cada proceso se le asigna un número entero de páginas, aunque la última de cada región no
la use al completo. El proceso puede desperdiciar parte del último marco de cada región.
Tamaño de página.
Condicionado por diversos factores contrapuestos:
Estrategias de paginación.
Paginación por demanda: traer a memoria las paginas a medida que se necesitan.
Prepaginación: Traer paginas por anticipado( aunque todavía no se hayan demandado)
En fallo de página se traen, además, otras páginas que se prevé que necesitara
el proceso en el futuro cercano.
Se monitorizan los procesos y se traen a memoria las páginas que
habitualmente usa.
Beneficiosa dependiendo de si hay acierto en la predicción.
El fallo de página puede implicar dos operaciones en disco (liberar marco + cargar nueva
página)
Algoritmos de reemplazo.
El objetivo de estos algoritmos es minimizar la tasa de fallos de página. Cada algoritmo tiene
una versión local, criterio que se aplica a las paginas residentes del proceso, y otra global,
criterio que se aplica a las paginas residentes de todos los procesos.
Algoritmo óptimo.
La victima es la página en memoria que tardará más en volverse a usar, lo cual es imposible de
implementar porque necesita conocer el futuro para ser realizado. Este algoritmo tiene interés
para analizar otros procesos reales comparando su efectividad con la de este.
Algoritmo FIFO
La victima es la página que lleva más tiempo en memoria. Se trata de un algoritmo de fácil
implementación ya que se expulsa a la primera de la cola, pero no se trata de una buena
estrategia, ya que una página que lleva mucho tiempo residente puede seguir accediéndose
frecuentemente. Su criterio no se basa en el uso de la página.
Una alternativa a usar cola FIFO es tratar la tabla como una lista circular, con una referencia a
la página evaluada en el último reemplazo, se visualiza como un reloj donde la referencia a la
última página evaluada es la aguja del reloj.
Fija:
El número de marcos asignados al proceso (conjunto residente) es constante, pero puede
depender de las características del proceso. Esto lleva a un inconveniente, no se adapta a las
distintas fases del programa, pero es fácil de implementar. Solo tiene sentido su uso en
reemplazo local.
Dinámica:
El número de marcos varía dependiendo del comportamiento de los procesos. Si se usa con el
reemplazo local un proceso va aumentando o disminuyendo su conjunto dependiendo de su
comportamiento. Con la asignación dinámica los procesos se quitan páginas entre ellos.
Hiperpaginación (Trashing).
Se trata de una tasa excesiva de fallos de página de un proceso o en el mismo sistema. Con
asignación fija existe hiperpaginación si: |conjunto residente de Pi| < |conjunto de trabajo Pi|,
con asignación dinámica si: |nº de marcos del sistema|< Σ |conjuntos de trabajo de todos los
procesos|.
El grado de uso de la CPU cae drásticamente, ya que los procesos están casi siempre en colas
de dispositivo de paginación.
Tema 4. Concurrencia
La región critica se crea por Brich Hansen como una herramienta de programación para
resolver el problema de la sección critica, asi como las regiones criticas condicionales, que son
para poder esperar a que se cumpla una condición dentro de una región critica. Por ejemplo,
para sacar un elemento de la cola tiene que haber elementos, o para añadirlos debe haber
espacio.
4.5. Semáforos.
Se trata de un contador interno atomico, que ayuda a la ejecución concurrente y a solucionar
el tema de las secciones criticas, es decir es una manera de implementar regiones criticas.
Junto a los semáforos también existen en java los objetos atómicos, en los cuales todas las
operaciones son atomicas, pero antes de usarlas hay que valorar si realmente interesa el uso
de estas.
4.6. Monitores.
Se trata de una herramienta de sincronización que permite a los hilos:
Una variable de condición o cola de eventos, permite dejar bloqueado a un hilo a la espera de
que alguien lo despierte, se asocian a cerrojos para crear regiones criticas condicionales con
multiples colas de hilos bloqueados. Se puede despertar a los hilos de una cola( variable de
condición) sin despertar a los que esperan en otra cola, cuando se despierta a un hilo este
vuelve a la cola asociada al cerrojo, y cuando consigue bloquearlo ejecuta la instrucción que
evalua la condición.
4.8. Interbloqueo
Se trata de un bloqueo permanente de un conjunto de procesos que compiten por los recursos
del sistema o se comunican entre si. Problema dependiente de la velocidad de ejecución de los
procesos. Para que se produzca interbloqueo se deben dar:
Periféricos: Se llama así a los dispositivos que permiten la comunicación entre los
usuarios y el ordenador. Dentro de este grupo se incluyen todos los dispositivos que
sirven para proporcionar interfaz con el usuario, tanto para entrada (ratón, teclado…)
como para salida (impresoras, pantalla…)
Dispositivos de almacenamiento: Se usan para proporcionar almacenamiento no
volátil de datos y memoria. Su función primordial es abastecer de datos y
almacenamiento a los programas que se ejecutan en la CPU. Según su capacidad e
inmediatez se pueden dividir en almacenamiento secundario (discos) y terciario
(cintas, CD, DVD…).
Dispositivos de comunicaciones: Permiten conectar al ordenador con otros
ordenadores a través de una red. Los dos tipos de dispositivos más importantes de
esta clase son los MODEM y tarjetas de red.
El controlador es el componente más importante desde el punto de vista del núcleo, ya que
constituye la interfaz del dispositivo junto con el bus del ordenador y es el componente que se
ve desde la CPU. Su programación se lleva a cabo mediante una interfaz de muy bajo nivel que
proporciona acceso a una serie de registros del controlador. Las características del controlador
son muy importantes, ya que definen el aspecto del periférico para el núcleo, que pueden ser:
Dirección de E/S, unidad de transferencia de caracteres, bloques o paquetes; o una interacción
ordenador-controlador con E/S programada.
Facilitar el manejo de los dispositivos periféricos. Para ello debe ofrecer una interfaz
entre los dispositivos y el resto del sistema que sea sencilla y fácil de utilizar.
Optimizar la E/S del sistema, proporcionando mecanismos de incremento de
prestaciones donde sea necesario.
Proporcionar dispositivos virtuales que permitan conectar cualquier tipo de dispositivo
físico sin que sea necesario remodelar el sistema de E/S del núcleo.
Permitir la conexión y desconexión de dispositivos nuevos de E/S, solventando de
forma automática su instalación usando mecanismos del tipo plug&play.
Software independiente del dispositivo: Lo forman los niveles superiores del núcleo. Su
función es ejecutar las funciones de E/S que son comunes a todos los dispositivos a
través de una interfaz uniforme. Realiza:
Almacenamiento intermedio: usar buffers del núcleo para acomodar los
diferentes tamaños y velocidades de acceso.
Gestión de dispositivos: nombrado, protección y control de acceso.
Planificación de E/S: colas de peticiones para cada dispositivo. Se ordenan
según una política de planificación.
Gestión de errores: errores transitorios y permanentes.
5.6. Buffering.
Consiste en usar una zona de memoria como almacenamiento intermedio en una transferencia
de datos. Tiene como ventajas que permite adaptar velocidades entre productor y
consumidor, permite agrupar múltiples transferencias pequeñas en una grande, diferenciar
entre la zona de memoria usada para transferencias por el núcleo y por el proceso y permite
expulsar al proceso de memoria mientras se realiza la E/S, pues esta se hace sobre la zona de
memoria del núcleo.
Como caso particular del buffering tenemos el spooling en el que se usa el dispositivo como
almacenamiento intermedio porque el dispositivo es mucho más lento que el proceso o
porque el volumen de datos de cada transferencia puede ser muy elevado.
5.7. Discos.
Se trata de dispositivos básicos para llevar a cabo el almacenamiento masivo y no volátil de
datos. Además se usan como plataforma para el sistema de intercambio que usa el gestor de
memoria virtual.
Un disco duro es un dispositivo de gran capacidad compuesto por varias superficies con
material magnético y un bloque de cabezas de lectura/escritura. Las superficies del disco están
divididas en cilindros, con dos pistas por plato y un cierto número de sectores por pista.
En disco de estado sólido (SSD), el tiempo de acceso típico es inferior de 0,1 ms.
FIFO.
Las peticiones se atienden según llegan.
Ascensor (SCAN)
El movimiento del brazo empieza siempre en un extremo del disco y continúa hasta el otro. Allí
cambia de sentido y se vuelve el otro extremo. Con esto se pretende evitar atrás y adelante, lo
que lleva a que se pueda retrasar mucho el servicio da algunas peticiones si no se insertan
adecuadamente.
Las principales técnicas usadas para proporcionar esta fiabilidad y tolerancia a fallos son:
Códigos correctores de error, como los existentes en las cabeceras y colas de los
sectores.
Redundancia, tanto en datos replicados como un código de paridad para detectar
errores y recuperarlos. Esta técnica se implementa mediante el uso de dispositivos
RAID ( Redundant Array of Inexpensive Disks).
Redundancia hardware: conectar un disco a través de dos controladores.
Sistemas RAID.
Conjunto de discos físicos vistos por el sistema como una sola unidad lógica. Mejora la
capacidad de almacenamiento, las prestaciones (ancho de banda y tiempo de respuesta),
aumento de la disponibilidad del sistema.
JBOD (Concatenación)
Busca capacidad sacrificando la disponibilidad, y pueden usar discos de tamaños diferentes.
Raid 10 (Seleccionado+Espejo)
Combina el Raid 0 y 1, por lo que tolera el fallo de un disco pero sigue costando el doble.
Paridad.
La paridad más usual es la Xor.
Supongamos un Raid 5 con 4 discos para datos, 1 disco para paridad y uno de repuesto, donde
se han guardado estos datos.
Si el disco 3 falla por ejemplo, se puede recuperar su información a través del resto de los
discos y empezar a usar el disco de repuesto.
Disco reserva= 00101010 XOR 10001110 XOR 10110101 XOR 11100110 = 11110111
Otras consideraciones sobre las RAID son el uso de discos de reserva en configuraciones
redundantes para reducir el tiempo de funcionamiento degradado o el empleo de memorias
no volátiles respaldadas por batería en las controladoras para no perder escrituras en caso de
fallo de alimentación.
6.1. Introducción.
Un sistema de ficheros está formado por ficheros (archivos), directorios (carpetas), y sistemas
de ficheros y particiones (volúmenes). Estos se pueden dividir en locales (FAT, NTFS, HFS…) o
remotos (NFS, CIFS).
De forma lógica estos ficheros se ven como unidades, directorios o ficheros, pero en realidad
no son más que bloques de octetos ubicados en dispositivos de almacenamiento.
Partición o volumen
Se trata de una porción de disco a la que se dota de una identidad propia y que puede ser
manipulada por el SO como una entidad lógica independiente, dentro de cada partición se
puede instalar un sistema de ficheros (formatear el disco). La tabla de particiones indica el
principio, el tamaño y el tipo de cada partición. Las particiones se pueden diferenciar entre:
6.3. Ficheros
Concepto.
Un fichero es un almacén de datos arbitrarios no volátil, identificado por un nombre y unos
atributos. Existen múltiples tipos de ficheros, que suelen diferenciarse por un número mágico
en la cabecera o por su extensión en el nombre. El SO no puede reconocer los tipos de ficheros
excepto los ejecutables, en Windows el explorador sabe lanzar la aplicación asociada según la
extensión del fichero.
El contenido del fichero se trata de una ristra de octetos, que se diferencia entre:
Modos de acceso.
Son los métodos que ofrece el SO a las aplicaciones para acceder a los ficheros. Modos:
El acceso directo tiene 2 operaciones: Leer o escribir siguiente e ir a una posición definida. Este
tipo de acceso es utilizado en dispositivos de tipo disco y es imprescindible en bases de datos.
El tamaño del bloque es un parámetro, generalmente fijo, que se decide al crear el sistema de
ficheros (formateo). Esto produce una fragmentación interna ya que, por ejemplo, un fichero
de 1 byte ocupa 4KiB en un disco con bloques de 4KiB.
El descriptor del fichero tiene la información relacionada con el fichero y se apunta a él desde
los directorios.
Asignación contigua.
Desfragmentando el disco:
Asignación enlazada.
En FAT(ms-dos) se usa una asignación enlazada, pero los enlaces no se almacenan en el bloque
sino en una tabla llamada FAT.
La tabla de asignación de ficheros (FAT) contiene todos los punteros a bloques, así como los
bloques libres y erróneos.
Ejemplo:
Asignación indexada.
6.4. Directorios
El sistema de ficheros dispone de una estructura de directorios que le permite gestionar un
gran número de ficheros de manera eficiente. El directorio es propiamente dicho un fichero,
cuyo contenido es manejado por el SO. El directorio ofrece:
Implementaciones.
Para implementar el directorio hay dos alternativas:
FAT
En FAT cada entrada de directorio contiene un descriptor de fichero, un campo apunta al
primer bloque y el resto de los punteros a bloques que se obtienen de la FAT.
La FAT32 tiene de especial que para permitir nombres largos y tener compatibilidad hacia atrás
se usa una entrada con el nombre en formato 8+3 y de 1 a 63 entradas extras con el resto del
nombre.
UFS
Hay que buscar un equilibrio entre cantidad de memoria dedicada a caché, rendimiento de
escrituras y pérdida de datos o corrupción en caso de caída abrupta.
Enlace físico.
En el directorio se almacena el mismo puntero a descriptor que otro fichero del directorio.
Enlace simbólico.
Se usa un fichero especial cuyo contenido es el nombre de otro fichero al cual apunta. Si se
borra el fichero original, el enlace simbólico queda inútil (dangling).