Sistemas Operativos - ALIPSO.COM: Monografías, resúmenes, biografias y tesis gratis.
Aprende sobre marketing online, desarrollo de sitios web gratis en Youtube
Suscribite para recibir notificaciones de nuevos videos:
Miércoles 24 de Abril de 2024 |
 

Sistemas Operativos

Imprimir Recomendar a un amigo Recordarme el recurso

Les ofrecemos aquí un white paper que estudia los conceptos fundamentales que los componen, dejando para otra oportunidad la historia de su desarrollo, los distintos sistemas de la actualidad como ser Windows, Linux, Solaris, Mac OS X, etc. También dejaremos afuera por esta vez los sistemas distribuidos y de redes. Los temas expuestos serán los procesos de los sistemas operativos, la administración de memoria, sistema de E/S y sistema de archivos.

Agregado: 06 de JULIO de 2008 (Por Ramiro Gomez) | Palabras: 8759 | Votar | Sin Votos | Sin comentarios | Agregar Comentario
Categoría: Apuntes y Monografías > Computación > Varios >
Material educativo de Alipso relacionado con Sistemas Operativos
  • Sistemas de Informacion II.: ...
  • Sistemas de Informacion General:
  • Bases de datos: introducción a los sistemas de archivos.: Almacenamiento. Tipos de acceso. Componentes físicos. Tipos de organización. Accesos a disco. Operaciones sobre ficheros.

  • Enlaces externos relacionados con Sistemas Operativos


    Autor: Ramiro Gomez (ramiagomez@yahoo.com.ar)

    Este apunte fue enviado por su autor en formato DOC (Word). Para poder visualizarlo correctamente (con imágenes, tablas, etc) haga click aquí o aquí si desea abrirla en ventana nueva.

    Indice

    Introducción .................... .. 1

    Procesos ........................ .. 3

    Administración de la memoria .... .. 11

    Sistemas de E/S ................. .. 16

    Sistema de archivos ............. .. 20

    Bibliografía .................... .. 22

    Introducción

    En esta oportunidad vamos a enfocar nuestra atención en los sistemas operativos. Les ofrecemos aquí un white paper que estudia los conceptos fundamentales que los componen, dejando para otra oportunidad la historia de su desarrollo, los distintos sistemas de la actualidad como ser Windows, Linux, Solaris, Mac OS X, etc. También dejaremos afuera por esta vez los sistemas distribuidos y de redes.

    Los temas expuestos serán los procesos de los sistemas operativos, la administración de memoria, sistema de E/S y sistema de archivos.

    Pág. 1


    Un sistema operativo es un programa o conjunto de programas que permiten la utilización eficaz de los recursos hardware. Los sistemas operativos hacen la conexión entre las aplicaciones y el hardware, de modo que éstas en general se limitan a usar funciones provistas por el sistema.


    Las operaciones básicas que se pueden hacer dentro de un sistema operativo son:

    •          abrir y cerrar: archivos o directorios

    •          crear y borrar: archivos o directorios

    •          buscar

    •          cambiar nombre

    •          copiar, cortar y pegar

    •          ejecutar: programa o script

    •          formatear: unidades de almacenamiento

    •          Entre otras opciones más recientes no tan básicas tenemos:

    •          comprimir - descomprimir: archivos o directorios

    •          desfragmentar: unidad de almacenamiento

    •          comprobar disco: de errores

    •          copia de seguridad

    •          restaurar sistema

    Los sistemas operativos se pueden clasificar de muchas maneras, de acuerdo a las características o maneras de operar que tengan:

    • según la administración de las tareas

    S O monotarea s: sólo pueden ejecutar una tarea por vez, es decir que no son concurrentes. Son los más antiguos y es difícil ver sistemas modernos monotareas.

    S O multitarea s: pueden ejecutar varias tareas simultáneamente (o cuasi-simultáneamente), aprovechando los tiempos ociosos de la CPU. Alternan entre varias tareas, las que se procesan en partes durante pequeños intervalos de tiempo (quantums).

    • Según la cantidad de usuarios

    S O monousuarios : admiten un solo usuario por vez.

    S O multiusuario : permiten varios usuarios

    compartiendo recursos al mismo tiempo. Necesitan dar protección a cada uno (restringiendo accesos, con claves, con permisos, etc.)

    • según la administración de recursos

    S O centralizados : se ocupan los recursos de una sóla máquina, como ser CPU, memoria, disco, etc.

    S O de red : permiten compartir datos, dispositivos de E/S. Reduce costos para el trabajo en equipos.

    Pág. 2


    Es la opción elegida en los sistemas operativos modernos. ○ S O distribuidos : constituyen una generalización del anterior, ya que se comparten recursos y distribuyen los procesos del sistema entre varios nodos (computadoras). Este tipo de SO son más difíciles de implementar y necesitan un estudio especial, que trataremos en algún futuro white paper (manténgase actualizados en www.peiper.com.ar!). Deben contemplar fallos en la red, problemas de sincronización, diferente hardware en cada nodo, atomicidad, etc.


    Procesos

    Una de las tareas fundamentales de los sistemas operativos

    es la administración y planificación de la ejecución de

    los procesos. Estos son parte fundamental de todo sistema,

    y básicamente son programas que procesan y devuelven

    datos.

    Los procesos para funcionar necesitan muchos recursos: una

    CPU, memoria principal, almacenamiento secundario (disco),

    recursos de E/S y a veces también servicios de red.

    Hay 2 tipos principales de procesos: procesos de usuario y

    procesos de sistema. El 1ro se ejecuta en modo usuario, y

    el segundo en modo supervisor.

    Los procesos son (o deberían serlo) internos del sistema y

    transparentes al usuario, de modo que se le simplifique el

    trabajo a éste.

    Pero nos podemos preguntar cuál es la necesidad de usar

    procesos. ¿Por qué el sistema operativo no es un solo

    programa que invoque subprogramas? Las razones para

    usarlos radican en

    ?        simplicidad: para permitir una estructura modular que facilita la comprensión.

    ?        velocidad: al tener un conjunto de procesos estos se pueden ejecutar de manera concurrente y planificar para mejorar el uso de los recursos.

    seguridad: para permitir o no su ejecución y limitar el uso de los recursos que cada uno hace.

    PCB y SCB

    Cada proceso se representa en el sistema operativo a través de un PCB (bloque de control de proceso). Un PCB mantiene información del proceso, de su estado actual y datos y variables que sirven al sistema operativo para planificarlos (por ej. prioridad).

    Los objetivos del uso de PCBs son almacenar información de cada proceso que sirve para la planificación que hace el sistema operativo, para ejecutar cada proceso de una manera correcta, y en general para almacenar la información de cada proceso que usará el sistema operativo. La información de un PCB es:

    • puntero: locación del proceso en memoria.

    • estado del proceso: hay 5 estados básicos.

    Pág. 3


    • número del proceso: process id. Sirve para
    identificarlo dentro del sistema.

    • contador de programa: la posición actual por donde
    va la ejecución.

    • datos de pila

    • registros: usados por el proceso

    • variables

    • prioridad

    • lista de archivos abiertos

    • código (instrucciones)

    Por otra parte, los sistemas operativos disponen de

    estructuras para vincular los PCBs, llamadas "bloques de

    control del sistema (SCB)".

    Un SCB es similar al PCB pero lo utiliza el sistema

    operativo para enlazar los PCB residentes en memoria

    principal. Los SCBs contienen PCBs.

    Su información es: excepciones, interrupciones, fallos de

    CPU, PCB, reloj y consola.

    Ejecución de los procesos

    Un sistema operativo puede usar alguno de 3 tipos de ejecución, de acuerdo a los requerimientos del sistema y al ambiente en el que se lo usará. Cada una de estas clasificación supone una evolución de la anterior, siendo la más aceptada actualmente el "tiempo compartido". En orden de aparición tenemos:

    Ejecución secuencial: es característica de los
    sistemas por lotes, los más antiguos. Se ejecuta
    sólo un proceso a la vez, y no se conmuta a otro
    hasta que termina su procesamiento. Maneja la
    técnica llamada spooling, que usa buffers para
    realizar E/S. Esta técnica de ejecución supone un
    derroche de recursos, sobre todo actualmente que el
    hardware comienza a tener una orientación
    "masivamente paralela", con procesadores multi-
    núcleo, discos en RAID, placas de video en SLI o
    CrossFire, etc.

    Multiprogramación: Permite organizar la ejecución de
    los trabajos a fin de mejorar el aprovechamiento de
    la CPU. Por ejemplo, al solicitar un trabajo E/S,
    mientras ésta se realiza se selecciona otro trabajo
    para ejecutarlo.

    Tiempo compartido: Es una extensión de la
    multiprogramación. En ésta la ejecución de los
    procesos se realiza alternadamente, conmutando entre
    varios procesos. Se ejecuta un proceso durante un
    intervalo de tiempo (llamado quantum) y aunque no
    haya terminado, al finalizar el quantum se pasa a
    ejecutar otro.

    Estados de los procesos

    Hoy en día la mayoría de los sistemas operativos manejan los procesos de manera concurrente a través de la multiprogramación. Este significa que en un intervalo de tiempo dado el sistema es capaz de atender y dar espacio de ejecución a 2 o más procesos. Para esto se utilizan distintos algoritmos y estructuras de datos para organizarlos según su estado.

    Pág. 4


    Para la planificación y organización de los procesos las estructuras más comúnmente usadas son las colas, que organizan a los procesos según su estado. Tenemos:

    cola de procesos listos: contiene los procesos que
    están listos para ejecutarse y que compiten por la
    CPU.

    cola de suspendido listo: aquí están los procesos
    que terminaron su ejecución y no están compitiendo
    por la CPU.

    cola de en espera o bloqueado: contiene los procesos
    que están en estado de espera por causa de E/S.

    cola de suspendido bloqueado: los procesos que se
    interrumpe su ejecución.

    Planificación

    El sistema operativo es el encargado de conmutar el uso de la CPU con los diferentes procesos. El estado ideal sería tener un procesador por cada proceso, pero esto es muy poco flexible y conlleva un alto costo. Entonces, ya que la mayoría de las computadoras poseen un solo procesador es necesario compartirlo, cambiando de un proceso a otro conmutando el contexto. La conmutación de contexto es una tarea por lo general costosa en términos de utilización de recursos y tiempos necesarios, y de ser excesiva el sistema podría pasarse conmutando sin realizar procesamiento productivo. Por eso, la estructura y técnicas de un sistema operativo están muy relacionadas con el hardware sobre el que correrá. Los objetivos de la planificación son:

    • equidad y justicia

    • mejorar los tiempos de respuesta y retorno

    • minimizar los tiempos de espera

    • maximizar la productividad

    Para regular el grado de multiprogramación (la cantidad de procesos que están en memoria principal) se usa el planificador a largo plazo, que es el encargado de escoger procesos en almacenamiento masivo y traerlos a memoria principal. Este planificador tiene una frecuencia de ejecución baja, alrededor de una vez cada 100 milisegundos (aunque depende mucho del sistema operativo). No es común su uso en sistemas de tiempo compartido.

    Por otra parte tenemos el planificador a corto plazo, que se ejecuta mucho más frecuentemente. Su tarea es seleccionar procesos de la cola de procesos listos y asignarles la CPU. Su ejecución debe ser concisa y rápida debido a su frecuente uso.

    Hay otro nivel de planificador que se puede encontrar más en los sistemas de tiempo compartido, y es el planificador a mediano plazo. Este selecciona procesos que no se están ejecutando, los coloca en memoria virtual (swaping o intercambio) y en el momento necesario los trae nuevamente a memoria principal. La diferencia con el planificador a largo plazo es que éste selecciona procesos que están en ejecución (pero esperando por el procesador en cola de listos, en espera o bloqueados).

    Operaciones con procesos

    Los procesos se pueden crear, destruir, suspender, reanudar, cambiar su prioridad y temporizar su ejecución (quantum). En general todas estas acciones las realiza el sistema operativo automáticamente, aunque en algunos casos

    Pág. 5


    particulares puede ser necesaria la intervención del usuario.

    Jerarquía de procesos: padres e hijos

    Tenemos 2 tipos de procesos: procesos padres y procesos

    hijos.

    Los procesos padres son aquellos que invocan la ejecución

    de otros procesos, que reciben el nombre de hijos. Los

    procesos hijos pueden ocupar recursos de 2 maneras

    distintas: del sistema o de los recursos que tiene

    asignados su padre.

    Tipos de procesos

    Los procesos se clasifican de varias maneras.

    • Según el código ejecutable:

    o reutilizables: pueden ser usados por varios programas de manera simultánea. Manejan datos compartidos. En cada llamada empiezan a ejecutarse desde el principio.

    o reentrantes: se mantiene una sola imagen cargada en el sistema.

    • De acuerdo al uso del procesador y los recursos:

    o apropiativos: no sueltan la CPU hasta que terminan su procesamiento. No son para nada deseables estos tipos de procesos porque quitan capacidad de control al sistema operativo.

    o no apropiativos: permiten al sistema operativo administrarles la CPU.

    • De acuerdo a la forma de ejecución:

    o residentes: se ubican sólo en memoria principal. Puede ser conveniente que los procesos del sistema más utilizados sean residentes, a fin de mejorar la performance general.

    o intercambiables: pueden encontrarse tanto en memoria principal como en virtual.

    Procesos cooperativos e independientes

    Los procesos independientes son aquellos que no comparten recursos y que no dependen de otros procesos externos para proveerse de información. Es decir, que funcionan de manera independiente.

    Los procesos cooperativos son más difíciles de implementar

    y su organización en el sistema es más compleja, pero

    permiten proveerse de datos entre ellos, comparten

    recursos tales como E/S, memoria principal, etc.

    Las razones principales de su uso son para compartir

    información, para acelerar los cálculos, para usar la

    modularidad y por comodidad para el usuario.

    Una desventaja posible es que en error en uno de ellos

    puede repercutir en sus procesos dependientes, provocando

    cuelgues o inestabilidades.

    Otro de sus problemas es conocido como problema de los

    productores - consumidores: un proceso consume información

    provista por un proceso productor. ¿Pero qué pasa si el

    proceso productor produce más despacio que lo que consume

    el consumidor? ¿O si es al revés? Para solucionar este

    problema se introduce el uso de buffers. Estos pueden ser

    de 2 formas, limitados o ilimitados.

    Puede ser necesario que en vez de 1 buffer debamos usar 2.

    Así, el proceso productor rellena el buffer 1, cuando está

    Pág. 6


    lleno lo pasa a consumir el proceso consumidor. Pero mientras ocurre ésto no es conveniente que el productor sobrescriba el mismo buffer 1. En vez de ello, el productor comienza a escribir en el buffer 2. Y de esta forma se van alternando ambos buffers.

    Comunicación entre procesos

    Los procesos cooperativos o padres e hijos deben tener la

    capacidad de comunicarse.

    Se pueden usar buffers por un lado, y por el otro

    mensajes.

    En el caso de los mensajes disponemos de dos mecanismos:

    comunicación directa: se envía un mensaje de un
    proceso a otro cuyos parámetros son nombre de
    proceso y mensaje. Su sintaxis es:
    enviar(procesoP,mensaje) y recibir(procesoQ,mensaje)

    Comunicación indirecta: el mensaje se envía a un
    buzón de mensajes. La sintaxis es:

    enviar(buzón,mensaje) y recibir(buzón,mensaje). Cada proceso tiene un buzón propio y este se puede implementar a través de un buffer, que puede ser de

    capacidad cero, capacidad limitada, o capacidad ilimitada.

    En todos los casos el sistema operativo o el subsistema de comunicación entre procesos (IPC) deben asegurar la consistencia y la correctitud de los mensajes. Para esto se pueden implementar sumas de verificación (checksum) o similares.

    Excepciones

    El sistema operativo debe contar con un gestor de excepciones a fin de tratar los eventos anómalos que se pueden producir durante la ejecución de los procesos. Al producirse una de éstas se puede abortar la ejecución del proceso o se la puede tratar y luego continuar con la ejecución.

    Los tipos de excepciones son fallos de hardware, fallos de software, entrada de datos incorrectos o eventos anómalos (como resultados inesperados. ej: división por cero). Según la gravedad de cada excepción, éstas pueden ser catastróficas (ej: fallo en el suministro eléctrico), irrecuperables (desborde de pila) o recuperables (ej: desborde de arreglo).


    Concurrencia

    La concurrencia de procesos es una situación deseada en un sistema operativo, pero no es gratis porque además de agregar complejidad al sistema causa diversos problemas:

    i nanición :
    cuando se
    posterga la
    ejecución de un
    proceso indefinidamente.

    b loqueo mutuo (espera circular): cuando se forma una
    cadena en la que un proceso A tiene los recursos que

    Pág. 7


    necesita B, y el proceso B tiene los recursos que necesita el A.

    c ondición de carrera : 2 o más procesos compiten por
    el uso de la CPU y los recursos. El primero que
    llegue será el beneficiado. Se debe manejar esta
    situación para lograr "justicia" en la ejecución.

    c ondición de exclusión mutu a: Cuando un proceso usa
    un recurso del sistema y no se debe ni puede
    interrumpir para mantener la consistencia de los
    datos. A la parte del código que usa los recursos se
    le llama sección crítica.

    c ondición de apropiación de recursos: hay procesos
    que se pueden apropiar de algunos recursos
    indefinidamente o por un largo tiempo. Ocurre a
    menudo con procesos apropiativos. Esto también se
    debe gestionar y solucionar.

    c ondición de espera activa : cuando un proceso ocupa
    ciclos de CPU sólo esperando la liberación de algún
    recurso. Provoca un uso ineficiente de los recursos
    y se debe evitar a toda costa. Relacionada con el
    DMA (acceso directo a memoria) y con las
    interrupciones.

    H ilo s

    Los hilos son procesos ligeros que se componen de

    registros, un espacio de pila y un contador de programa.

    Los hilos comparten su código ejecutable, su pila y los

    recursos que utiliza. Con el uso de hilos deja de ser

    necesaria la costosa conmutación de contexto de uno a otro

    proceso.

    Los hilos son especiales para realizar procesamiento

    paralelo, pero esto incurre en algunos problemas como la

    consistencia de datos, para lo que se usan distintos

    mecanismos para solucionarlos como secciones críticas y

    cerraduras.

    Los hilos pueden estar a nivel del núcleo del sistema

    operativo o a nivel de usuario.

    Hilos a nivel usuario: su ventaja es que tienen
    mejor desempeño porque no se deben hacer llamadas al
    núcleo. Su desventaja es que el bloqueo de un hilo
    produce el bloqueo del resto de los hilos de la
    tarea.

    Hilos a nivel del núcleo: Su ventaja es que el
    bloqueo de uno de ellos no afecta al resto. Su
    desventaja es que la conmutación de un hilo a otro
    se hace mediante interrupciones, que producen
    sobrecarga.

    Dos ejemplos de uso intensivo de hilos son el sistema operativo de tiempo real Solaris 2; y el lenguaje Java, ambos de Sun Microsystems.

    Sincronización

    Al haber procesos concurrentes se deben emplear mecanismos para asegurar la consistencia de los datos. Como ejemplo, supongamos que tenemos 3 procesos concurrentes que quieren modificar un mismo archivo. Si los 3 acceden a este al mismo tiempo el archivo quedará con valores incorrectos. Para resolver problemas como este se ideó la sección crítica, que es el segmento de código que accede a los recursos. Sólo puede haber una sección crítica en ejecución por vez, así nos aseguramos que los datos quedan consistentes.

    Pág. 8


    espera

    que deseados

    desuso. Se compone de "espera con mutex",

    y "algoritmo de Dekker".

    Los mecanismos para manejar la sincronización se

    clasifican en 2 grandes grupos, espera activa y

    inactiva.

    El enfoque de espera activa se basa en procesos

    consumen tiempo mientras esperan, son los menos

    han quedado en

    "alternancia",


    y


     


    Los mecanismos de espera inactiva no mientras esperan. Se clasifican en:


    consumen recursos


    Semáforo: Un semáforo es un mutex con espera inactiva que tiene 2 operaciones, señal(entero) y espera(entero). Se implementa como una estructura que contiene un número entero y una lista de procesos. La operación espera(entero) agrega un proceso en la lista del semáforo, mientras que señal(entero) selecciona un proceso de esta lista para ejecutar.


    Ejemplos:


    proceso1 ( ) { espera(2)

    . .....

    señal(2) } proceso2 ( ) {

    espera(1)

    . .....

    señal(1) }


    Monitores: Están caracterizados por un conjunto de
    procedimientos (que se declaran dentro de un
    monitor). Sólo se puede ejecutar un procedimiento a
    la vez de los están declarados en éste. Así se
    asegura que no habrá 2 procedimientos utilizando los
    mismos recursos.

    Rendez-vous: Es similar a los monitores pero en vez
    de ser la llamada a un procedimiento, es a un
    conjunto de sentencias dentro de éste.

    Contador de eventos: Se usan variables enteras para
    contar las cantidades de determinados eventos que se
    producen. Ej: cuantos leen y cuantos escriben. Esta
    información la puede usar luego el sistema
    operativo.

    Cerraduras: Otra posibilidad es asignar una
    cerradura a cada dato o recurso. Para acceder a
    estos, se debe usar un protocolo que permita o
    restrinja el acceso según el estado de la cerradura.

    Protocolos con marcas de tiempo: Otra posibilidad es
    ejecutar las transacciones (atómicas) a partir de
    una marca de tiempo que se le asocia a cada una.

    Otras: Mensajes y llamadas remotas.

    Hay varios problemas clásicos que normalmente se usan para comprobar el buen funcionamiento de un algoritmo o esquema de sincronización. Ellos son:

    El problema de los lectores y escritores: Un proceso
    puede acceder a un recurso con dos fines, uno es
    sólo lectura y otro es lectura - escritura. Cuando
    tenemos un conjunto de procesos que sólo leen un
    recurso no hay problema, pero estos surgen cuando
    hay al menos un proceso que escribe. De esta manera
    no podemos asegurar que lo que otros procesos están

    Pág. 9


    leyendo eran los datos anteriores o los nuevos luego de haberse hecho la escritura. Como una posible implementación podríamos tener 2 colas: una para procesos lectores y otra para escritores. De haber 1 o más procesos escritores compitiendo por CPU, se deberá restringir o bien la lectura o escritura por parte de los demás procesos, o bien la escritura de éste y privilegiar a los lectores.

    El problema de los filósofos comensales: Ilustra de una manera clara cómo hay conflictos al haber 5 filósofos, 5 palillos chinos y 1 plato de arroz en el medio. Para que un filósofo pueda comer necesita tener 2 palillos en la mano, pero esta situación dejará a un filósofo sin palillos. Es un buen esquema que plantea cómo evitar la inanición (que un filósofo muera de hambre).

    Interbloqueo (bloqueo mutuo)

    Hay una situación que es totalmente indeseada en la ejecución de varios procesos: y es el interbloqueo o también llamado bloqueo mutuo. En general, esta situación ocurre cuando hay varios procesos que tienen recursos A y piden nuevos recursos B. Y otros que tienen B y piden A. En esta situación se genera una traba de la que no pueden salir por cuenta propia.

    Es tarea del sistema operativo evitarlos o corregirlos, aunque también los puede ignorar (como pasa en muchas versiones de UNIX).

    Para que ocurra un bloqueo mutuo los procesos involucrados deben ejecutar su sección crítica de manera exclusiva (mutua exclusión), cada uno está ocupando algunos recursos y solicita más y no son capaces de expropiarse la ejecución entre sí (procesos no apropiativos). Por último, el sistema debe estar en un estado de espera circular (el proceso1 tiene recurso1 y pide r2. El p2 tiene r2 y pide r3. El pN tiene rN y pide el r1. Es decir que todos tienen los recursos que necesitan los otros y piden los que tienen estos. Para evitar los bloqueos mutuos se puede:

    V        hacer listar a cada proceso los recursos que usará y en base a esto permitirle o no ejecutarse.

    V        Obligar a los procesos que cuando solicitan otro recurso liberen el actual que poseen.

    V        la sutil diferencia de que cuando se les asigna otro recurso se libere el que tienen. También se les puede asignar a los recursos un orden, y cuando el recurso que se pide es posterior, se libera el anterior que tienen.

    Hay algunos algoritmos para detectar o evitar bloqueos mutuos, como el algoritmo de grafo de asignación de recursos, que se usa para detectar interbloqueos y consiste en detectar ciclos dentro de este grafo (hay bloqueo mutuo si hay algún ciclo).

    También tenemos el algoritmo del banquero, el cual se usa para evitarlos. Consiste en preguntar a cada proceso los recursos que necesitará y sólo ejecutarlo si luego de asignados el sistema aún queda en estado seguro. Para esto se puede simular con el algoritmo del grafo esta situación. Se le dio este nombre porque el sistema actúa como un banquero, que no puede prestar más dinero del que tiene.

    Si el sistema no evita los bloqueos mutuos se debe hacer algo si ocurren. Una alternativa es destruir los procesos uno por uno y comprobar en cada paso si el sistema aún está bloqueado. Otra opción menos drástica es expropiar

    Pág. 10


    los recursos de algunos procesos hasta que se rompa el bloqueo.

    Algoritmos de planificación

    Ya sabemos que el sistema operativo tiene una cola de procesos listos, es decir que están esperando por la CPU. Pero se debe emplear un mecanismo para seleccionar el proceso correcto de esta cola a fin de asegurar: maximizar la productividad, el uso de la CPU y el rendimiento, minimizar el tiempo de espera, de retorno y de respuesta. Se debe elegir uno o una combinación de éstos de acuerdo a estos criterios, con el fin de encontrar un rendimiento óptimo del sistema. Los principales algoritmos de planificación son:

    FCFS (1ro en llegar, 1ro en ser atendido): es el más
    justo de todos, pero no es el más eficiente ni el
    que mejor rendimiento produce.

    SJF (el trabajo más corto primero): es uno de los
    mejores, pero es muy difícil de implementar porque
    implica la necesidad de conocer el tiempo que
    demandará un proceso.

    el trabajo de tiempo restante más corto 1r o: es una
    variante del anterior, también produce buenos
    resultados, aunque puede producir inanición.

    por prioridad : no tiene el mejor rendimiento pero
    está cercano. Se debe implementar envejecimiento de
    prioridades para evitar la inanición.

    round robin : apoya al tiempo compartido. La
    ejecución de los procesos se divide en intervalos de
    tiempo regulares llamados quantum. Este debe ser
    pequeño para simular concurrencia pero no demasiando
    para no provocar sobrecarga y para permitirle a la
    CPU hacer procesamiento productivo. El actual
    estándar ronda los 10 ms. Ej: las primeras versiones
    de Solaris tenían implementado un quantum largo.

    colas múltiples : es una generalización de todas ya
    que es posible ubicar a los procesos en diferentes
    colas, y cada una con un algoritmo diferente.

    colas múltiples con realimentació n: la idea de este
    es parecida al anterior pero es posible que los
    procesos cambien de cola, según su estado o el uso
    que hagan de los recursos. Es muy bueno para evitar
    la inanición y permite implementar a gusto los
    algoritmos anteriores.



    Administración de la memoria

    Al decir memoria no sólo estamos hablando de memoria principal (RAM), sino también de secundaria (disco), caché, terciaria, etc.

    El sistema operativo debe ser el encargado de administrarla eficientemente para que varios procesos la puedan compartir. Hace esto a través de su "Administrador


    Pág. 11


    de memoria" (MMU). Los requerimientos para un correcto manejo de memoria son:

    1.        transparencia: la asignación que hace el SO de la memoria a cada proceso debe ser transparente para el usuario.

    2.                 protección: se debe asegurar que no haya una sobre -escritura de memoria.

    3.  segmentos múltiples: los segmentos de un proceso deben aparecer lógicamente contiguos.

    4.                 código compartido: se debe mantener una sola imagen de cada proceso.

    Los programas hacen uso de ésta a través de variables u objetos, que tienen un nombre que está vinculado internamente con una dirección en memoria principal. Ejemplo: la variable entera "edad" puede estar vinculada a la dirección de memoria 01E3-559F (en hexadecimal, 32 bits).

    Debemos considerar varios puntos para saber cuál es la cantidad óptima de memoria que requiere un sistema. Entre estos tenemos el tamaño de los programas, la cantidad de programas, el espacio ocupado por el sistema operativo y el tamaño del disco rígido.

    Recordando la primera clasificación de los sistemas operativos encontramos la monoprogramación. En este antiguo mecanismo la memoria estaba dedicada exclusivamente a un solo proceso y hasta que no se terminaba no ejecutaba otro. En este esquema se dividió la memoria en 2 partes: una para el usuario y otra para el sistema operativo. Esto trajo consigo problemas como la protección. No se realiza intercambio (entre memoria y disco).

    La multiprogramación es lo contrario a la monoprogramación. En este esquema la memoria se comparte con varios procesos y hay intercambios (swapping). Esto quiere decir que es posible la memoria virtual, que es una extensión de la principal pero en disco rígido. Surgen entonces 2 tipos de direcciones:

    -    físicas: sólo en memoria principal. Es más pequeña que la lógica.

    -    lógicas: abarca tanto la memoria principal como la secundaria (disco). Funciona como un solo espacio de direcciones.

    Uno de los mayores problemas que debe considerar un sistema operativo es la "fragmentación de la memoria", que se refiere a su división en pequeñas partes de forma que quedan espacios vacíos demasiado pequeños para ser utilizados con eficiencia. Destacamos la fragmentación interna y externa.

    La fragmentación interna corresponde al espacio vacío que queda en el último bloque de cada proceso. No se puede usar por estar ya ocupado. Se produce al dividir la memoria en bloques de igual tamaño.

    La fragmentación externa corresponde al espacio vacío que queda entre los diferentes procesos y que no puede ser asignado a ninguno por ser demasiado pequeño. Se produce mayormente con los bloques de tamaño variable en los que se divide la memoria.

    Estos problemas se pueden solucionar o evitar de varias maneras. Aquí enunciaremos sólo algunas, pero en sí cada empresa desarrolladora de sistemas operativos dispone de sus propios métodos, que están adaptados a la estructura de su SO. Corresponde a desarrollos privados que rara vez se divulgan de manera total.

    Pág. 12


    Podemos almacenar los datos y procesos de manera contigua o en fragmentos.

    El almacenamiento contiguo de los procesos genera fragmentación externa pero evita la interna. Es decir que pueden quedar varios huecos inutilizados entre cada proceso por ser demasiado pequeños. Para hacer más espacio entonces es necesario realocar los procedimientos teniendo en cuenta que no deben quedar espacios entre estos. Pero este proceso, llamado compactación, es muy costoso en términos de tiempo.

    Una alternativa mejor es dividir un proceso en múltiples partes de menor tamaño, así podremos ubicarlas en los espacios libres que queden entre procesos. Esta opción tal vez es mejor pero tenemos que saber que aparece algo de fragmentación interna (en el último bloque de un proceso, por no completarse totalmente ya que es de tamaño fijo) y también tenemos fragmentación externa (aunque disminuye mucho en comparación con la asignación contigua). La selección del espacio libre donde se ubicarán nuestros bloques puede ser:

    primer ajuste: es el más eficiente y da los mejores
    resultados de performance, pero puede desperdiciar
    algo de memoria principal.

    mejor ajuste: implica recorrer toda la lista en
    busca del hueco más pequeño donde quepa nuestro
    bloque. Poca performance si no se usan tablas de
    espacio libres. Es el que menos de memoria produce.

    peor ajuste: no tiene buenos resultados. Es
    contrario al mejor ajuste.

    Una vez ubicados los bloques en la memoria principal necesitamos poder leer cada uno de estos bloques de un mismo proceso y poder reconstruirlo exactamente igual a como estaba antes de la división en partes. Esto se puede solucionar usando punteros o tablas de punteros. Cada uno de éstos estará al final de cada bloque, y nos indicará cuál es el próximo bloque componente. Las tablas de punteros son quizás más eficientes y permiten un acceso aleatorio al archivo o proceso en memoria principal. ¿Por qué? Porque de lo contrario tendríamos que recorrer uno por uno los bloques siguiendo sus punteros, hasta llegar al bloque deseado. Este mecanismo es muy ineficiente y para archivos o procesos grandes agrega un tiempo de espera totalmente inaceptable. Es por esto que al tener todos los punteros a bloques en una sola tabla, se puede obtener el bloque exacto en unos pocos accesos.

    Paginación

    La paginación es una técnica que permite pasar procesos de

    memoria principal a virtual.

    Se corresponde directamente con la memoria virtual.

    Cada proceso posee una tabla de páginas propia, aunque se

    puede implementar una tabla de páginas global a nivel

    sistema con el proceso dueño de cada una acoplado. Este

    esquema recibe el nombre de paginación invertida, porque

    no es el proceso el que contiene las páginas, sino que es

    el sistema.

    La memoria principal está dividida lógicamente en marcos.

    Cada marco puede contener 1 página. Tanto los marcos como

    las páginas son de longitud fija, lo que simplifica

    enormemente su búsqueda y manipulación por parte del

    sistema operativo.

    ¿Cómo hacemos para acceder a una dirección específica de

    la memoria?

    Para ésto la dirección se desdobla en dos partes: una

    representa el número de página y la otra el desplazamiento

    desde su principio.

    Pág. 13


    Si queremos acceder a la dirección "d" calculamos:

    num. marco = parte_entera(d / tamaño de marco) desplazamiento = d - num. marco*tamaño de marco

    Con estas dos fórmulas nos es suficiente para saber la ubicación exacta dentro de la memoria, aunque debemos tener una tabla con la página que le corresponde a cada marco, otra tabla con la ubicación de las distintas páginas en el disco, otra con los marcos libres, y otra con las páginas libres.

    La paginación tiene un mecanismo llamado "demonio de paginación" que es un proceso demonio (hilo de muy baja prioridad) que se encarga de recorrer las tablas de páginas y recolectar información como ser las páginas libres o las menos usadas.

    Fallo de página: Ocurre cuando se solicita una página que no está en memoria principal. Entonces la MMU (unidad de manejo de memoria del sistema operativo) debe hacer un intercambio disco >>> memoria principal, para traer la página que falta.

    Paginación multinivel

    Cuando el espacio de direcciones es muy grande se

    dificulta la ubicación de las páginas en las tablas de

    manera eficiente. Para esto podemos usar dos esquemas que

    mejorarán la velocidad de acceso a las páginas. Una es

    usar técnicas de dispersión (hashing).

    Otra es usar una doble paginación. En ésta tenemos las

    páginas y la tabla de páginas, pero agregamos una nueva

    tabla que indexa la tabla de páginas.

    Podemos tener 3, 4 o más niveles de paginación.

    Segmentación

    Utilizando el mismo enfoque de la paginación, dividimos los procesos en partes. Sólo que esta vez su tamaño es variable. Esto tiene varias ventajas. Disminuye la fragmentación externa, desaparece la interna, y agrega protección y seguridad a los datos. También permiten traer de disco sólo los segmentos que se necesitan (así no es necesario traer todo el proceso) y compartir bloques de código y datos, lo que los hace un mecanismo ideal para implementar un sistema operativo flexible y poderoso. Cada segmento tiene la posición en memoria donde comienza, su tamaño y bits de protección, entre otros. Esta técnica produce fragmentación externa, a diferencia de la paginación que produce interna.

    Debemos tener tablas al igual que con la paginación para manipularlos de una manera eficiente y rápida. Segmentación paginada: Es una combinación de los 2. Se aprovechan las mejores características de cada mecanismo y esto permite reducir aún más la fragmentación y mejorar el rendimiento. Su esquema e un conjunto de segmentos indexados a su vez por una tabla de páginas. Podemos tener el otro enfoque que es paginación segmentada, que también puede producir buenos resultados.

    Administración de la asignación de memoria

    Para señalizar que páginas se encuentran libres y cuales ocupadas tenemos 3 técnicas:

    Administración con mapa de bits: es muy eficiente pero puede consumir mucha memoria. Por ejemplo para una memoria de 512 MB y un marco de 4 KB tendríamos una mapa de bits de 16 MB. Cuanto más grande la memoria y más pequeños los marcos, la tabla será más grande. Ej: 01010101010111111010010101111110000. Los

    Pág. 14


    1 indican que esa posición de memoria está ocupada. Cada digito hace referencia a bloques de memoria de 4 KB, por ej.

    Administración con listas enlazadas: Tenemos una
    lista en la que cada nodo tiene información de si
    está vacía u ocupada y los límites o la cantidad de
    bloques ocupados.

    Sistema de los asociados: Se parte de considerar a
    la memoria como un gran bloque. A medida que se van
    haciendo asignaciones, se va dividiendo siempre por
    potencias de 2.

    Protección: La protección de las páginas y de los marcos se puede hacer con bits que indican si son sólo de lectura, de lectura-escritura o de ejecución.

    Para almacenar todos estos estados y atributos de las páginas necesitamos algunas tablas con varios bits para cada una. Cada bit corresponde a una bandera. Nombremos algunas banderas usadas: bit de

    presente/ausente, bit de protección (para indicar lectura o lectura - escritura, o 3 bits para lectura / escritura / ejecución), bit de lectura (se marca con 0 la página que ha sido referenciada o leída, y cada cierto tiempo se la marca con 1 para indicar que no fue referenciada. Una alternativa más potente al uso de este bit es almacenar el tiempo en el que se hizo la última referencia. Esto permite una precisión máxima, bit de escritura.

    Técnicas de gestión de memoria

    Tenemos 6 técnicas para gestionar la memoria, 3 son de paginación y las otras 3 de segmentación.

    en particiones fijas: Esta técnica es sencilla de
    implementar. Cada proceso se carga en una partición
    de tamaño fijo (casi siempre de mayor tamaño que el
    proceso). Puede tener fragmentación interna. El
    proceso trae toda la partición para ejecutarse.

    en particiones dinámicas: Similar a la anterior pero
    la partición se crea según el tamaño del proceso.
    Tiene fragmentación externa. Produce sobrecarga de
    la CPU.

    en páginas simples: Los procesos se dividen en
    muchos marcos de igual tamaño. Para ejecutar un
    proceso se necesitan traer todas sus páginas.

    en segmentos simples: Los procesos se dividen en
    muchos marcos de distinto tamaño.

    en memoria virtual paginada: Para ejecutar un
    proceso no se necesitan traer todas sus páginas. La
    carga se hace de manera automática.

    en memoria virtual segmentada: Igual que la anterior
    pero con segmentos.

    Pág. 15



    M E MORIA VIRTUAL

    La memoria virtual usa la paginación o la segmentación y permite intercambiar procesos y datos entre la memoria y el disco. Pero la diferencia es que permite traer procesos por partes, o sea sólo las páginas segmentos que se necesitan en ese momento. Esto también se llama paginación o segmentación por demanda. Para mejorar un poco la eficiencia podemos usar el principio de localidad de referencia para traer datos vecinos de los necesitados.


    Ventajas de la memoria virtual

    Aunque el uso de este tipo de memoria disminuye la performance del sistema, tiene claras ventajas:

    •        Disminución de la E/S porque NO se necesitan traer todas las partes de un proceso. Se traen a memoria principal sólo las que se necesitan.

    •        Aumento del uso del procesador, porque puede haber más procesos en memoria al no cargarse completos.

    •        Los procesos pueden ser de cualquier tamaño. Adhiere flexibilidad.

    Algoritmos de reemplazo de páginas o segmentos

    Entre los algoritmos más comunes tenemos:

    Aleatorio: Se elige cualquier página o segmento, sin usar un criterio en especial.

    Primero en entrar, primero en salir: En la cola de procesos listos, si ejecutamos un proceso que se prepara a salir, no lo ponemos arriba de la cola. Esto quiere decir que si entró hace tiempo, se prepara a salir en poco tiempo aunque lo usemos nuevamente.

    Menos recientemente usada: se intercambia la página que se uso hace más tiempo. Si se necesita de vuelta una página que ya está en la cola, se la reordena poniéndola arriba de la cola (será la última en salir).

    Usada recientemente: Al revés que el anterior. Se intercambian las páginas que se usaron hace menos tiempo.

    Sistemas de ENTRADA/SALIDA (E/S)

    Ofrecer facilidades para el uso de dispositivos de E/S de una computadora es otra de las tareas que debe hacer un sistema operativo. Es lo que corresponde a la interactividad del usuario con la computadora. Los dispositivos pueden ser discos rígidos, lectoras de CD o DVD, impresoras, monitores, joysticks, teclados, mouses, parlantes, módems, tarjetas de red, etc... El SO debe disponer de funciones que permitan usar estos dispositivos de la forma más sencilla y regular posible. Es decir que debe abstraerse de las características físicas y de funcionamiento de cada dispositivo, y concentrarse exclusivamente en la transferencia de

    Pág. 16


    información. Para lograr esto tiene conjuntos de funciones y procedimientos que están en la API del sistema (biblioteca de funciones del SO), y que pueden ser usadas por las aplicaciones, protocolos y hasta por los lenguajes.

    El sistema operativo tiene que tener tablas donde guardar

    la información y el estado de los dispositivos, para

    administrarlos. Debe tener tabla de archivos abiertos,

    tabla de estado de dispositivos, tabla de conexiones de

    red, y la lista continúa.

    ¿Cómo hace un

    sistema operativo

    para comunicarse con

    los control adores?

    Esto depende de cada

    SO. En UNIX por

    ejemplo los

    dispositivos son

    archivos, y en

    Windows son

    unidades. Se usan :

    1. registros de dispositivos

    2. control adores

    3.              canales: conectan la CPU con los control adores

    Por ejemplo, un

    monitor es un

    dispositivo de

    salida al que se le

    pasan datos del

    color que debe tener cada píxel. Una impresora también es

    exclusivamente de salida y se le pasa información de cómo

    debe imprimir la hoja en cada parte.

    El problema principal es que hay una gran cantidad de

    fabricantes y modelos de dispositivos, y cada uno puede

    tener comportamientos muy distintos, aunque pertenezcan al

    mismo tipo. Para ello se les agrega un conjunto de

    circuitos llamado controlador, que se ubica entre la CPU y

    el dispositivo mismo. El controlador se encarga de

    interpretar las ordenes que le envía la CPU u otro

    controlador (como DMA, por ejemplo) y en función de estas

    hacer trabajar al dispositivo.

    Para gestionar los errores el dispositivo que lo genera

    informa de esto enviando una interrupción con un código de

    error determinado a la CPU, y a partir de esta información

    esta activa el manejador de excepciones necesario.

    Hay 3 maneras fundamentales para interactuar con un

    dispositivo de E/S:

    o E/S programada : La CPU envía las ordenes al

    controlador una por una, y está ocupada con esta E/S hasta que termina. Este mecanismo es tedioso e impide a la CPU ocuparse del procesamiento. Al ser la E/S mucho más lenta que esta, se gastan muchos ciclos sin hacer nada, esperando respuesta. o interrupciones : Es mucho más flexible y mejora mucho el rendimiento. La CPU envía la orden al controlador, y sigue ejecutando su trabajo. Cuando el controlador ya tiene respuesta genera una interrupción, que obliga a la CPU a detener su trabajo, salvar la posición por la que iba su ejecución, atender la interrupción de acuerdo al código que se le pase, y continuar con el trabajo

    Pág. 17


    que estaba haciendo. Es más eficiente pero sigue generando algo de sobrecarga.

    o no enmascarables : no se pueden desactivar.

    o enmasc arables : son menos críticas que las anteriores. Permiten su desactivación. o acceso directo a memoria (DMA): es el mejor de todos. La CPU escribe las ordenes de E/S en el controlador de DMA, y luego se desentiende del problema. Este controlador se encarga de comunicarse con el controlador de dispositivo indicado y comienza a hacer la transferencia memoria <<< >>> dispositivo. Cuando se termina, el controlador de DMA interrumpa a la CPU para informarle que los datos ya se transmitieron o ya están disponibles en memoria principal. Nos damos cuenta que esta técnica es óptima en aprovechamiento de recursos, ya que no obliga a la CPU a esperar innecesariamente. Repasemos entonces los componentes de un sistema de E/S:

    dispositivos

    o por bloques (alto rendimiento) o por caracteres.

    •        control adores

    •        controlador de DMA

    •        buses

    •        puertos de E/S

    •        saludo

    El saludo es la acción de comunicación entre el anfitrión (proceso o CPU) y el dispositivo. Básicamente tiene 3 mensajes, que son ocupado, orden lista y error. Cuando el anfitrión tiene más datos para el dispositivo le dice "orden lista". Cuando el dispositivo está ocupado dice "ocupado", y si se genera un error dice "error". Si el anfitrión tiene una orden lista pero detecta que el dispositivo está ocupado, debe esperar e intentar de nuevo.

    Niveles de software de E/S

    Aplicaciones de usuario >>> Rutinas del sistema operativo >>> Drivers (controladores de software) >>> Manejadores de interrupciones >>> Controladores de dispositivos >>> Dispositivos

    Relojes

    No entran en las categorías de dispositivos de bloques ni

    de caracteres, pero tienen una importancia vital en la

    mul ti programación y el tiempo compartido.

    Los relojes pueden ser de cristal de cuarzo o eléctricos.

    En general están embebidos dentro del procesador.

    Se usan para dar la hora, para dar el tiempo transcurrido

    desde una marca y para temporizar una operación.

    Para temporizar se envía una petición al procesador, y la

    operación a temporizar se pone en una cola ordenada por el

    tiempo de vencimiento. Así, cuando vayan pasando los

    tiempos de cada una de las operaciones de la cola, se

    interrumpe al procesador y se hace la acción indicada.

    Drivers

    Los drivers son programas que sirven para controlar un dispositivo. Están implementados sobre el controlador y hacen de interfase entre éste y las funciones del sistema operativo (provistas en su API).

    Los drivers generalmente están programados en lenguaje assembler (o en C) dado su alto rendimiento y bajo nivel. Para un dispositivo podemos tener varios drivers, uno por cada sistema operativo. Por ejemplo, para un mismo disco

    Pág. 18


    rígido tenemos un driver para Windows, otro para Linux y otro para Mac.

    La estructura de los Drivers depende del dispositivo al que controlen y de los estándares que emplee.

    Buffers y caché

    Ya sabemos que la E/S es lenta. Para amortiguar esto se usa un almacenamiento de soporte que evita al procesador solicitar byte por byte, y en vez de ello se leen muchos datos con una sola solicitud. Son los buffers y la caché. Los buffers se usan tanto para lectura y escritura de disco, para impresora, monitor, para placa de red, etc. SU misión es agilizar la transferencia emitiendo una sola petición e interrupción para un conjunto de datos. Los tipos de buffers son:

    buffer sencillo

    buffer doble

    circular

    La función de la caché es similar a la de los buffers, pero está implementada con circuitos de muy alta velocidad y tienen algunas ventajas tecnológicas como la búsqueda por asociación (que busca en muchas entradas al mismo tiempo).

    Nos puede ser muy útil para mejorar el rendimiento poner partes del sistema de archivos en la caché, y cualesquier otros datos que usemos con frecuencia.

    Líneas de comunicaciones

    Tenemos 2 líneas de comunicaciones. Una que sirve para

    conectar los componentes de una misma computadora (bus) y

    otra para conectar varias máquinas, para hacer redes.

    Los buses pueden ser sincrónicos (tienen frecuencias) o

    asincrónicos.

    Un ejemplo es el bus de memoria principal. En fin, siempre

    que queramos comunicar 2 partes de una computadora

    necesitamos buses.

    A través de los buses se envían datos e información de

    control, para chequear la consistencia, propiedades de los

    datos, banderas, etc.

    Almacenamiento secundario

    Se usa para mantener información guardada por tiempo permanente, aunque no haya suministro eléctrico. Se usa también para memoria virtual.

    Las lecturas y escrituras de disco se pueden hacer en orden de llegada, pero hacer esto implica mucho movimiento del brazo del disco, que es mecánico (lento!). Una opción es tomar las peticiones para el disco y hacer una planificación similar a la que hacemos con los procesos. Los discos tienen 2 factores para considerar respecto al rendimiento: latencia de rotación (correspondiente a los sectores y bloques) y tiempo de búsqueda (del cilindro). Los algoritmos a continuación son mecanismos de planificación a nivel software (del sistema operativo), pero también podemos encontrarla a nivel hardware en los dispositivos más nuevos.

    Por ejemplo, los discos SATA 2 tienen una tecnología que se llama NCQ (native queu command) que ordena las peticiones para hacer la menor cantidad de movimientos del brazo posible. El sistema operativo debe tener esto en cuenta porque sino se estaría incurriendo en un gasto doble que tal vez puede ser contraproducente y disminuir el desempeño, como ordenar dos veces de manera distinta las peticiones.

    Pág. 19


    Algoritmos de planificación de discos:

    primero el de camino más corto.

    SCAN: el brazo está en continuo movimiento yendo de
    un lado al otro, y atiende las solicitudes que
    encuentra en el camino.

    C-SCAN: igual al SCAN pero cuando llega a un
    extremo, vuelve al principio sin leer nada en el
    trayecto.

    LOOK: igual que SCAN pero sus extremos llegan hasta
    las peticiones más alejadas. Este tiene mejor
    rendimiento que el SCAN.

    C-LOOK: es LOOK y C-SCAN combinados.

    Sistemas de archivos

    La mayoría de los sistemas operativos tienen sistemas de archivos. Se usan para almacenar datos de manera segura. Están compuestos por particiones, archivos y directorios, y opcionalmente también de archivos de enlace (accesos directos en Windows). Los sistemas de archivos se deben montar, aunque esto lo hace automáticamente el sistema operativo al iniciar la sesión. Algunos SO de red permiten montar los sistemas de archivos de otras computadoras en directorios comunes.

    Entre las estructuras que puede tener tenemos: estructura arbórea, grafo acíclico y grafo general. La estructura arbórea es la más sencilla de implementar. Internamente el disco está dividido en bloques físicos (por ej: 512 bytes) y bloques lógicos o clusters (por ej: 4KB). Es bueno que los clusters sean múltiplo del tamaño de los bloques físicos, por razones de eficiencia.

    En la estructura de un sistema de archivos tenemos que considerar que, al igual que con la memoria principal, siempre se produce algo de fragmentación, que puede ser interna (dentro de cada cluster o bloque) o externa (entre archivos).

    Cada nodo de la estructura se llama archivo o directorio, y tiene un nombre lógico que está directamente relacionado con una posición física dentro del disco. Es responsabilidad de este sistema recuperar los datos dado un nombre de archivo y su ruta de acceso. Esto lo hace usando tablas o punteros.

    Por ejemplo el archivo c:materiasoperativos.doc está vinculado con la ubicación 227E-5294-FF12-437D dentro del disco.

    Los atributos de los archivos y directorios son:

    V       nombre

    V       tipo

    V ubicación (ruta)
    y tamaño

    V       protección (permisos y contraseñas)

    V       hora, fecha y usuario creador

    Las operaciones que se pueden hacer con archivos o directorios son crear o destruir, leer o escribir, truncar, o búsqueda (dentro del archivo).

    Pág. 20


    Políticas de los sistemas de archivos

    Cada sistema de archivos debe tener bien definido el comportamiento para manejar cada una de las políticas siguientes:

    consistencia del sistema de archivos

    confiabilidad

    desempeño

    seguridad: permisos de acceso, protección contra virus, contraseñas...

    respaldos

    manejo de bloques defectuosos

    Responsabilidades

    Un sistema de archivos que se precie de tal debe permitir almacenar archivos con nombres lógicos; permitir crear, modificar y borrar archivos, brindarles protección y seguridad a los datos, permitir compartirlos, y administrar el acceso a éstos.

    Asignación del espacio de almacenamiento

    Cuando un archivo está dividido en muchos bloques y estos están dispersos por todo el disco, necesitamos guardar las posiciones de cada uno de estos bloques. Podemos guardar dentro de cada bloque una referencia al siguiente o tener una tabla con todas las posiciones.

    ?       Asignación continua

    ?       Asignación enlazada: se guarda al final de cada bloque un puntero al siguiente. En este esquema es muy ineficiente el acceso aleatorio a un archivo.

    ?       Asignación indexada: se mantiene una tabla con todos los punteros a los bloques.

    Protección de archivos, directorios y particiones

    Pueden tener protección de lectura, lectura - escritura y ejecución. Para darle más flexibilidad al esquema estos permisos se asignan a distintos grupos, como "usuario", "grupo de trabajo" y "resto". También es posible restringir el acceso a usuarios específicos, sin

    Pág. 21


    organizarlos en grupos. Pero esto generalmente necesita un archivo aparte para contener la lista de usuarios y sus permisos.

    Es posible usar más banderas dentro de la cabecera de un archivo para protegerlo y brindarle seguridad. También existe una opción que es relativamente novedosa, que son las cuotas de disco. Se usan en redes y consisten en limitar a los usuarios con la cantidad de bytes o archivos que se pueden escribir.

    Implementación de directorios

    Hay dos formas básicas para implementarlos:

    Lista lineal : Se almacenan de forma lineal. Para
    encontrar un directorio dado se necesita hacer una
    búsqueda lineal lo que baja el rendimiento.

    Tabla hash o de dispersió n: Es el método de acceso
    más rápido pero es el que más espacio en disco y en
    memoria principal ocupa. Las tablas hash no son
    perfectas, por eso se deben elegir el tamaño de la
    tabla y la técnica hash con cuidado. Hay que
    considerar las colisiones. Para disminuirlas podemos
    establecer el tamaño de la tabla con un número
    primo.

    Consistencia y recuperación

    Un sistema de archivos tiene que prever que puede haber fallos en el hardware (en disco) o en el software, cortes eléctricos, caídas del dispositivo, golpes, etc. Ante uno de estos casos es muy difícil mantener la información intacta, pero debe asegurar la mayor consistencia y recuperación posibles.

    Hay muchas aplicaciones para chequear la consistencia del disco, por ej: chkdsk del DOS. A veces se asegura durante las lecturas.

    Si un bloque tiene varios bytes fallados, el sistema deberá anular ese bloque entero y reemplazarlo por otro que esté sano; que puede estar en una zona de reserva o no. Se deben registrar los bloques defectuosos en un tabla del sistema de archivos.

    Autor: Ramix (Ramiro A. Gómez)

    Pág. 22


    Bibliografía

    •          Sistemas operativos - Abraham Silberschatz, Peter Baer Galvin - ISBN:9684443102 - Editorial Longman México

    •          Wikipedia: http://es.wikipedia.org/wiki/Sistema_operativo

    •          Recurso web http://www.monografias.com/trabajos47/sistema-operativo/sistema-operativo.shtml. Autores: Danny González, Eduard Alaniz

    •          Recurso web: h ttp://www.monograf i as.com/trabajos42/sistemas-operativos/sistemas-operativos.shtml Autores: Aro Sandra, Aro Ricardo y Herrera Catherine.

    White paper disponible en el sitio web: Peiper (www.peiper.com.ar)

    Pág. 23

    Este apunte fue enviado por su autor en formato DOC (Word). Para poder visualizarlo correctamente (con imágenes, tablas, etc) haga click aquí o aquí si desea abrirla en ventana nueva.


    Votar

    Ingresar una calificación para del 1 al 10, siendo 10 el máximo puntaje.

    Para que la votación no tenga fraude, solo se podrá votar una vez este recurso.

    Comentarios de los usuarios


    Agregar un comentario:


    Nombre y apellido:

    E-Mail:

    Asunto:

    Opinión:



    Aún no hay comentarios para este recurso.
     
    Sobre ALIPSO.COM

    Monografias, Exámenes, Universidades, Terciarios, Carreras, Cursos, Donde Estudiar, Que Estudiar y más: Desde 1999 brindamos a los estudiantes y docentes un lugar para publicar contenido educativo y nutrirse del conocimiento.

    Contacto »
    Contacto

    Teléfono: +54 (011) 3535-7242
    Email:

    Formulario de Contacto Online »