miércoles, 4 de septiembre de 2013
01 Conceptos e Historia de los Sistemas Operativos
Conceptos e Historia de los Sistemas Operativos
Un sistema operativo es un
programa que tiene encontradas una serie de funciones diferentes cuyo objetivo
es simplificar el manejo y la utilización de la computadora, haciéndolo seguro
y eficiente.
Maquina desnuda
El término de máquina desnuda
se aplica a una computadora carente de sistema operativo, el término es
interesante porque resalta el hecho de que una computadora en si misma no hace
nada y para realizar una determinada función es necesario que contenga un
sistema operativo.
Funciones del sistema
operativo
Las funciones clásicas del
sistema operativo se pueden agrupar en las tres categorías siguientes:
- Gestión de los recursos de la computadora.
- Ejecución de servicios para los programas.
- Ejecución de los mandatos de los usuarios.
El sistema operativo como
gestor de recursos
En una computadora actual
suelen coexistir varios programas, del mismo o de varios usuarios, ejecutándose
simultáneamente. Estos programas compiten por los recursos de la computadora,
siendo el sistema operativo el encargado de arbitrar su asignación y uso. Como
complemento a la gestión de recursos, el sistema operativo ha de garantizar la
protección de unos programas frente a otros y ha de suministrar información
sobre el uso que se hace de los recursos.
El sistema operativo como
máquina extendida.
El sistema operativo ofrece a
los programas un conjunto de servicios, o llamadas al sistema, que pueden
solicitar cuando lo necesiten, proporcionando a los programas una visión de
máquina extendida. Los servicios se pueden agrupar en las cuatro clases
siguientes:
- Ejecución de programas
- Operaciones de E/S
- Operaciones sobre archivos
- Detección de tratamiento de errores.
Concepto de usuario y de grupo
de usuario
Un usuario es una persona
autorizada para utilizar un sistema informático. El usuario se autentica
mediante su nombre de cuenta y su contraseña o password.
2.2. Arranque de la
computadora
El arranque de una computadora
actual tiene dos fases:
- Arranque hardware
- Arranque software
Que por el arranque
hardware se entiende que es la parte dura es decir el inicio o encendido de
todos los componentes de la PC
Ahora el arranque software
es el inicio del sistema operativo en una computadora
2.3. Componentes y estructura
del sistema operativo
El sistema operativo está
formado por una serie de componentes especializados en determinadas funciones.
Cada sistema operativo estructura estos componentes de forma distinta. En esta
sección se describen en primer lugar los distintos componentes que conforman un
sistema operativo.
Componentes del sistema
operativo
Un sistema operativo está
formado por tres capas:
- El núcleo
- Los servicios y el intérprete de mandatos o shell.
El núcleo es la parte del
sistema operativo que interacciona directamente con el hardware de la máquina.
Las funciones básicas de manipulación de menmoria.
Estructura del sistema
operativo
Internamente los sistemas
operativos estructuralmente de se clasifican según como se hayan organizado
internamente en su diseño, por esto la clasificación más común de los sistemas
operativos son:
Sistemas monolíticos
En estos sistemas operativos
se escriben como un conjunto de procedimientos, cada uno de los cuales puede
llamar a cualquiera de los otros siempre que lo necesite. Cuando se emplea esta
técnica, cada procedimiento del sistema tiene una interfaz bien definida en
términos de parámetros y resultados, y cada una tiene la libertad de llamar a
cualquiera otra, si la última ofrece algún cálculo útil que la primera
necesite.
Para construir el programa
objeto real del sistema operativo cuando se usa este método, se compilan todos
los procedimientos individuales a archivos que contienen los procedimientos y
después se combinan todos en un solo archivo objeto con el enlazador.
En términos de ocultamiento de
información, esencialmente no existe ninguno; todo procedimiento es visible
para todos (al contrario de una estructura que contiene módulos o paquetes, en
los cuales mucha información es local a un módulo y sólo pueden llamar puntos
de registro designados oficialmente del exterior del módulo)
Sistemas operativos
estructurados
A medida que fueron creciendo
las necesidades de los usuarios y se perfeccionaron los sistemas, se hizo
necesaria una mayor organización del software, del sistema operativo, donde una
parte del sistema contenía subpartes y esto organizado en forma de niveles.
Se dividió el sistema
operativo en pequeñas partes, de tal forma que cada una de ellas estuviera
perfectamente definida y con un claro interfase con el resto de elementos
Cliente-servidor
El tipo más reciente de
sistemas operativos es el denominado Cliente-servidor, que puede ser ejecutado
en la mayoría de las computadoras, ya sean grandes o pequeñas.
Este sistema sirve para toda
clase de aplicaciones por tanto, es de propósito general y cumple con las
mismas actividades que los sistemas operativos convencionales.
El núcleo tiene como misión
establecer la comunicación entre los clientes y los servidores. Los procesos
pueden ser tanto servidores como clientes. Por ejemplo, un programa de
aplicación normal es un cliente que llama al servidor correspondiente para
acceder a un archivo o realizar una operación de entrada/salida sobre un
dispositivo concreto. A su vez, un proceso cliente puede actuar como servidor
para otro.
Historia de los sistemas operativos
Los Sistemas Operativos, al igual que el Hardware de los computadores,
han sufrido una serie de cambios revolucionarios llamados generaciones. En el
caso del Hardware, las generaciones han sido marcadas por grandes avances en
los componentes utilizados, pasando de válvulas ( primera generación ) a
transistores ( segunda generación ), a circuitos integrados ( tercera
generación), a circuitos integrados de gran y muy gran escala (cuarta
generación). Cada generación Sucesiva de hardware ha ido acompañada de
reducciones substanciales en los costos, tamaño, emisión de calor y consumo de
energía, y por incrementos notables en velocidad y capacidad.
Generación Cero (década de 1940)
Los primeros sistemas computacionales no poseían sistemas operativos.
Los usuarios tenían completo acceso al lenguaje de la maquina. Todas las
instrucciones eran codificadas a mano.
Primera Generación (década de 1950)
Los sistemas operativos de los años cincuenta fueron diseñados para
hacer mas fluida la transición entre trabajos. Antes de que los sistemas fueran
diseñados, se perdía un tiempo considerable entre la terminación de un trabajo
y el inicio del siguiente. Este fue el comienzo de los sistemas de procesamiento
por lotes, donde los trabajos se reunían por grupos o lotes. Cuando el trabajo
estaba en ejecución, este tenia control total de la maquina. Al terminar cada
trabajo, el control era devuelto al sistema operativo, el cual limpiaba y leía
e iniciaba el trabajo siguiente.
Al inicio de los 50's esto había mejorado un poco con la introducción de
tarjetas perforadas (las cuales servían para introducir los programas de
lenguajes de máquina), puesto que ya no había necesidad de utilizar los
tableros enchufables.
Además el laboratorio de investigación General Motors implementó el
primer sistema operativo para la IBM 701. Los sistemas de los 50's generalmente
ejecutaban una sola tarea, y la transición entre tareas se suavizaba para
lograr la máxima utilización del sistema. Esto se conoce como sistemas de
procesamiento por lotes de un sólo flujo, ya que los programas y los datos eran
sometidos en grupos o lotes.
La introducción del transistor a mediados de los 50's cambió la imagen
radicalmente.
Se crearon máquinas suficientemente confiables las cuales se instalaban
en lugares especialmente acondicionados, aunque sólo las grandes universidades
y las grandes corporaciones o bien las oficinas del gobierno se podían dar el
lujo de tenerlas.
Para poder correr un trabajo (programa), tenían que escribirlo en papel
(en Fortran o en lenguaje ensamblador) y después se perforaría en tarjetas.
Enseguida se llevaría la pila de tarjetas al cuarto de introducción al sistema
y la entregaría a uno de los operadores. Cuando la computadora terminara el
trabajo, un operador se dirigiría a la impresora y desprendería la salida y la
llevaría al cuarto de salida, para que la recogiera el programador.
Segunda Generación (a mitad de la década de 1960)
La característica de los sistemas operativos fue el desarrollo de los
sistemas compartidos con multiprogramación, y los principios del
multiprocesamiento. En los sistemas de multiprogramación, varios programas de
usuario se encuentran al mismo tiempo en el almacenamiento principal, y el procesador
se cambia rápidamente de un trabajo a otro. En los sistemas de
multiprocesamiento se utilizan varios procesadores en un solo sistema
computacional, con la finalidad de incrementar el poder de procesamiento de la
maquina.
La independencia de dispositivos aparece después. Un usuario que desea
escribir datos en una cinta en sistemas de la primera generación tenia que
hacer referencia especifica a una unidad de cinta particular. En la segunda
generación, el programa del usuario especificaba tan solo que un archivo iba a
ser escrito en una unidad de cinta con cierto número de pistas y cierta
densidad.
Se desarrollo sistemas compartidos, en la que los usuarios podían
acoplarse directamente con el computador a través de terminales. Surgieron
sistemas de tiempo real, en que los computadores fueron utilizados en el
control de procesos industriales. Los sistemas de tiempo real se caracterizan
por proveer una respuesta inmediata.
Tercera Generación (mitad de década 1960 a mitad década de 1970)
Se inicia en 1964, con la introducción de la familia de computadores
Sistema/360 de IBM. Los computadores de esta generación fueron diseñados como
sistemas para usos generales . Casi siempre eran sistemas grandes, voluminosos,
con el propósito de serlo todo para toda la gente. Eran sistemas de modos
múltiples, algunos de ellos soportaban simultáneamente procesos por lotes,
tiempo compartido, procesamiento de tiempo real y multiprocesamiento. Eran
grandes y costosos, nunca antes se había construido algo similar, y muchos de los
esfuerzos de desarrollo terminaron muy por arriba del presupuesto y mucho
después de lo que el planificador marcaba como fecha de terminación.
Estos sistemas introdujeron mayor complejidad a los ambientes
computacionales; una complejidad a la cual, en un principio, no estaban
acostumbrados los usuarios.
Cuarta Generación (mitad de década de 1970 en adelante)
Los sistemas de la cuarta generación constituyen el estado actual de la
tecnología. Muchos diseñadores y usuarios se sienten aun incómodos, después de
sus experiencias con los sistemas operativos de la tercera generación.
Con la ampliación del uso de redes de computadores y del procesamiento
en línea los usuarios obtienen acceso a computadores alejados geográficamente a
través de varios tipos de terminales.
Los sistemas de seguridad se ha incrementado mucho ahora que la
información pasa a través de varios tipos vulnerables de líneas de
comunicación. La clave de cifrado esta recibiendo mucha atención; han sido
necesario codificar los datos personales o de gran intimidad para que; aun si
los datos son expuestos, no sean de utilidad a nadie mas que a los receptores
adecuados.
El porcentaje de la población que tiene acceso a un computador en la
década de los ochenta es mucho mayor que nunca y aumenta rápidamente.
El concepto de maquinas virtuales es utilizado. El usuario ya no se
encuentra interesado en los detalles físicos de; sistema de computación que
esta siendo accedida. En su lugar, el usuario ve un panorama llamado maquina
virtual creado por el sistema operativo.
Los sistemas de bases de datos han adquirido gran importancia. Nuestro
mundo es una sociedad orientada hacia la información, y el trabajo de las bases
de datos es hacer que esta información sea conveniente accesible de una manera
controlada para aquellos que tienen derechos de acceso.
02 Administración de Memoria
Administración de Memoria
La memoria es uno de los
principales recursos de la computadora, la cual debe de administrarse con mucho
cuidado. Aunque actualmente la mayoría de los sistemas de cómputo cuentan con
una alta capacidad de memoria, de igual manera las aplicaciones actuales tienen
también altos requerimientos de memoria, lo que sigue generando escasez de
memoria en los sistemas multitarea y/o multiusuario.
La parte del sistema operativo
que administra la memoria se llama administrador de memoria y su labor consiste
en llevar un registro de las partes de memoria que se estén utilizando y
aquellas que no, con el fin de asignar espacio en memoria a los procesos cuando
éstos la necesiten y liberándola cuando terminen, así como administrar el
intercambio entre la memoria principal y el disco en los casos en los que la
memoria principal no le pueda dar capacidad a todos los procesos que tienen
necesidad de ella.
Los sistemas de administración
de memoria se pueden clasificar en dos tipos: los que desplazan los procesos de
la memoria principal al disco y viceversa durante la ejecución y los que no.
El propósito principal de una
computadora es el de ejecutar programas, estos programas, junto con la
información que accesan deben de estar en la memoria principal (al menos
parcialmente) durante la ejecución.
Para optimizar el uso del CPU
y de la memoria, el sistema operativo debe de tener varios procesos a la vez en
la memoria principal, para lo cual dispone de varias opciones de administración
tanto del procesador como de la memoria. La selección de uno de ellos depende
principalmente del diseño del hardware para el sistema. A continuación se
observarán los puntos correspondientes a la administración de la memoria.
La memoria real o principal es
en donde son ejecutados los programas y procesos de una computadora y es el
espacio real que existe en memoria para que se ejecuten los procesos. Por lo
general esta memoria es de mayor costo que la memoria secundaria, pero el
acceso a la información contenida en ella es de más rápido acceso. Solo la
memoria cache es más rápida que la principal, pero su costo es a su vez mayor.
Sin intercambio
Monoprogramación sin
intercambio o paginación
Cuando solo se tiene un
proceso que ocupe la memoria a la vez, el esquema de la administración de la memoria
es el más sencillo que hay. Sin embargo, éste método ya no tiene aplicación en
la actualidad, ya que era visto en las computadoras con sistemas operativos de
un solo usuario y una sola tarea. El usuario introducía su disco a la
computadora (por lo general, la máquina no contaba con disco duro) y ejecutaba
su aplicación, la cual acaparaba toda la máquina.
Multiprogramación y uso de
memoria
Esta organización facilita la
programación de una aplicación al dividirla en dos o más procesos. Además
ofrece la capacidad de tener más de un proceso a la vez en memoria así puede
ofrecer servicios a varios usuarios a la vez.
El esquema de
multiprogramación incrementa el aprovechamiento del CPU, dado que a diferencia
de la monoprogramación en donde solo un proceso reside en memoria a la vez
limitando el uso del procesador a las llamadas que requiera dicho proceso,
desperdiciando un promedio del 80% del tiempo del procesador. En cambio la
multiprogramación, al tener varios procesos en la memoria principal y
dividiéndose el tiempo de uso del procesador, logra reducir drásticamente el
desperdicio del procesador.
Multiprogramación con
particiones fijas
Para poder implementar la
multiprogramación, se puede hacer uso de particiones fijas o variables en la
memoria. En el caso de las particiones fijas, la memoria se puede organizar
dividiéndose en diversas partes, las cuales pueden variar en tamaño. Esta
partición la puede hacer el usuario en forma manual, al iniciar una sesión con
la máquina.
Una vez implementada la
partición, hay dos maneras de asignar los procesos a ella. La primera es
mediante el uso de una cola única (figura 2a) que asigna los procesos a los
espacios disponibles de la memoria conforme se vayan desocupando. El tamaño del
hueco de memoria disponible es usado para localizar en la cola el primer
proceso que quepa en él. Otra forma de asignación es buscar en la cola el
proceso de tamaño mayor que se ajuste al hueco, sin embargo hay que tomar en
cuenta que tal método discrimina a los procesos más pequeños. Dicho problema
podría tener solución si se asigna una partición pequeña en la memoria al
momento de hacer la partición inicial, el cual sería exclusivo para procesos
pequeños.
Multiprogramación con
particiones variables
Este esquema fue originalmente
usado por el sistema operativo IBM OS/360 (llamado MFT), el cual ya no está en
uso.
El sistema operativo lleva una
tabla indicando cuáles partes de la memoria están disponibles y cuáles están
ocupadas. Inicialmente, toda la memoria está disponible para los procesos de
usuario y es considerado como un gran bloque o hueco único de memoria. Cuando
llega un proceso que necesita memoria, buscamos un hueco lo suficientemente
grande para el proceso. Si encontramos uno, se asigna únicamente el espacio
requerido, manteniendo el resto disponible para futuros procesos que requieran
de espacio.
Consideremos el ejemplo de la
figura 3, en donde se cuenta un espacio reservado para el sistema operativo en
la memoria baja de 400K y un espacio disponible para procesos de usuario de
2160K, siendo un total de memoria del sistema de 2560K. Dada la secuencia de
procesos de la figura y usando un algoritmo de First Come – First Served
(FCFS) se puede asignar de inmediato memoria a los procesos P1, P2 y P3,
creando el mapa de memoria de la figura 4(a) en el cual queda un hueco de 260K
que ya no puede ser utilizado por el siguiente proceso dado que no es
suficiente para abarcarlo.
Compactación de memoria
Cuando un proceso llega y
necesita memoria, el sistema operativo busca en la tabla de huecos alguno lo
suficientemente grande para el proceso. Si el hueco es muy grande, lo parte en
dos. Una parte es asignada al proceso y la otra se identifica como hueco.
Cuando el proceso termina y la memoria es liberada, el espacio es identificado
como un hueco más en la tabla y si el nuevo hueco es adyacente con otro, ambos
huecos se unen formando un solo hueco más grande. En ese momento se debe de
checar si no existen procesos a los que este nuevo hueco pueda darles cabida.
Asignación dinámica
El proceso de compactación del
punto anterior es una instancia particular del problema de asignación de
memoria dinámica, el cual es el cómo satisfacer una necesidad de tamaño n
con una lista de huecos libres. Existen muchas soluciones para el problema. El
conjunto de huecos es analizado para determinar cuál hueco es el más indicado
para asignarse. Las estrategias más comunes para asignar algún hueco de la
tabla son:
- Primer ajuste: Consiste en asignar el primer hueco con capacidad
suficiente. La búsqueda puede iniciar ya sea al inicio o al final del
conjunto de huecos o en donde terminó la última búsqueda. La búsqueda
termina al encontrar un hueco lo suficientemente grande.
- Mejor ajuste: Busca asignar el espacio más pequeño de los espacios
con capacidad suficiente. La búsqueda se debe de realizar en toda la
tabla, a menos que la tabla esté ordenada por tamaño. Esta estrategia
produce el menor desperdicio de memoria posible.
- Peor ajuste: Asigna el hueco más grande. Una vez más, se debe de
buscar en toda la tabla de huecos a menos que esté organizada por tamaño.
Esta estrategia produce los huecos de sobra más grandes, los cuales
pudieran ser de más uso si llegan procesos de tamaño mediano que quepan en
ellos.
Se ha demostrado mediante
simulacros que tanto el primer y el mejor ajuste son mejores que el peor ajuste
en cuanto a minimizar tanto el tiempo del almacenamiento. Ni el primer o el
mejor ajuste es claramente el mejor en términos de uso de espacio, pero por lo
general el primer ajuste es más rápido.
Algoritmo de reemplazo "Primero en entrar, primero en salir" (FIFO)
Memoria virtual
Paginación
Hasta ahora, los métodos que
hemos visto de la administración de la memoria principal, nos han dejado con un
problema: fragmentación, (huecos en la memoria que no pueden usarse debido a lo
pequeño de su espacio) lo que nos provoca un desperdicio de memoria principal.
Una posible solución para la
fragmentación externa es permitir que espacio de direcciones lógicas lleve a
cabo un proceso en direcciones no contiguas, así permitiendo al proceso
ubicarse en cualquier espacio de memoria física que esté disponible, aunque
esté dividida. Una forma de implementar esta solución es a través del uso de un
esquema de paginación. La paginación evita el considerable problema de ajustar
los pedazos de memoria de tamaños variables que han sufrido los esquemas de
manejo de memoria anteriores. Dado a sus ventajas sobre los métodos previos, la
paginación, en sus diversas formas, es usada en muchos sistemas operativos.
Al utilizar la memoria
virtual, las direcciones no pasan en forma directa al bus de memoria, sino que
van a una unidad administradora de la memoria (MMU –Memory Management Unit).
Estas direcciones generadas por los programas se llaman direcciones virtuales y
conforman el hueco de direcciones virtuales. Este hueco se divide en unidades
llamadas páginas. Las unidades correspondientes en la memoria física se llaman
marcos para página o frames. Las páginas y los frames tienen siempre el
mismo tamaño.
Tablas de páginas
Cada página tiene un número
que se utiliza como índice en la tabla de páginas, lo que da por resultado el
número del marco correspondiente a esa página virtual. Si el bit presente /
ausente es 0, se provoca un señalamiento (trap) hacia el sistema
operativo. Si el bit es 1, el número de marco que aparece en la tabla de
páginas se copia en los bits de mayor orden del registro de salida, junto con
el ajuste (offset) de 12 bits, el cual se copia sin modificaciones de la
dirección virtual de entrada. Juntos forman una dirección física de 15 bits. El
registro de salida se coloca entonces en el bus de la memoria como la dirección
en la memoria física.
Algoritmos de reemplazo de
páginas
Con el uso del método de
paginación se puede llegar a saturar la memoria si se incrementa demasiado el
nivel de multiprogramación. Por ejemplo, si se corren seis procesos, cada uno
con un tamaño de diez páginas de las cuales en realidad sólo utiliza cinco, se
tiene un mayor uso del CPU y con marcos de sobra. Pero pudiera suceder que cada
uno de esos procesos quiera usar las diez páginas resultando en una necesidad
de 60 marcos, cuando solo hay 40 disponibles.
Esto provoca sobre-asignación
y mientras un proceso de usuario se está ejecutando, ocurre un fallo de página.
El hardware se bloquea con el sistema operativo, el cual checa en sus tablas
internas y se da cuenta que es un fallo de página y no un acceso ilegal de
memoria. El sistema operativo determina si la página está residiendo en disco,
pero también determina que no hay marcos de memoria disponibles en la lista de
marcos libres.
Al ocurrir el fallo de página, el sistema operativo debe elegir una página para retirarla de la memoria y usar el espacio para la página que se necesita para desbloquear el sistema y que el hardware pueda seguir trabajando. Si la página por eliminar de la memoria fue modificada, se debe volver a escribir al disco para mantener la información actualizada; de lo contrario, si la página no fue modificada no es necesario rescribir la información a disco y la página que se carga simplemente se escribe sobre la página a borrar en memoria. La figura 8 muestra gráficamente un intercambio de páginas entre la memoria principal y el disco (memoria secundaria).
Al ocurrir el fallo de página, el sistema operativo debe elegir una página para retirarla de la memoria y usar el espacio para la página que se necesita para desbloquear el sistema y que el hardware pueda seguir trabajando. Si la página por eliminar de la memoria fue modificada, se debe volver a escribir al disco para mantener la información actualizada; de lo contrario, si la página no fue modificada no es necesario rescribir la información a disco y la página que se carga simplemente se escribe sobre la página a borrar en memoria. La figura 8 muestra gráficamente un intercambio de páginas entre la memoria principal y el disco (memoria secundaria).
Algoritmo de reemplazo "Primero en entrar, primero en salir" (FIFO)
El algoritmo más sencillo para
remplazo de páginas es el FIFO (First In – First Out). Este algoritmo asocia a
cada página el momento en que ésta fue traída a memoria. Cuando una página debe
ser reemplazada se selecciona a la más antigua.
No es estrictamente necesario registrar el momento
de entrada de la página a memoria, sino que se puede crear una cola en la que
se van agregando las páginas conforme van llegando a la memoria. Cuando se debe
eliminar una página, se selecciona la que está al frente de la lista (o sea, la
más antigua de la lista). Cuando llega una página nueva, se inserta en la parte
trasera de la cola. 03 Sistema de Archivo
Sistema de Archivo
El servidor de archivos es la
parte del sistema operativo que cubre una de las cuatro clases de funciones que
tiene este en su faceta de máquina extendida. Los Objetivos fundamentales del
servidor de archivos son los dos siguientes:
- Facilitar el manejo de los
dispositivos periféricos. Para ello ofrece una visión lógica simplificada
de los mismos en forma de archivos.
- Proteger a los usuarios, poniendo limitaciones a los archivos que
es capaz de manipular cada usuario.
Los servicios que se engloban
en el servidor de archivos son de dos tipos:
- Los servicios dirigidos al manejo de datos, o archivos.
- Los dirigidos al manejo de los nombres o directorios.
Un sistema de archivos ( file
system ) es una estructura de directorios con algún tipo de organización el
cual nos permite almacenar, crear y borrar archivos en diferenctes formatos. En
esta sección se revisarán conceptos importantes relacionados a los sistemas de
archivos.
Almacenamiento Físico de Datos
En un sistema de cómputo es
evidente que existe la necesidad por parte de los usuarios y aplicaciones de
almacenar datos en algún medio, a veces por periodos largos y a veces por
instantes. cada aplicación y cada usuario debe tener ciertos derechos con sus
datos, como son el poder crearlos y borrarlos, o cambialos de lugar; así como
tener privacidad contra otros usuarios o aplicaciones. El subsistema de
archivos del sistema operativo se debe encargar de estos detalles, además de
establecer el formato físico en el cual almacenará los datos en discos duros,
cintas o discos flexibles. Debe ser conocido por todos que tradicionalmente la
información en los sistemas modernos se almacena en discos duros, flexibles y
unidades de disco óptico, y en todos ellos se comparten algunos esquemas
básicos para darles formato físico: las superficies de almacenamiento son
divididas en círculos concéntricos llamados "pistas" y cada pista se
divide en "sectores". A la unión lógica de varias pistas a través de
varias superficies "paralelas" de almacenamiento se les llama
"cilindros", los cuales son inspeccionados al momento de lectura o
escritura de datos por las respectivas unidades fisicas llamadas
"cabezas". Las superficies de almacenamiento reciben el nombre de
"platos" y generalmente están en movimiento rotatorio para que las
cabezas accesen a las pistas que los componen. Los datos se escriben a través de
los sectores en las pistas y cilindros modificando las superficies por medio de
las cabezas.
El tiempo que una cabeza se
tarda en ir de una pista a otra se le llama "tiempo de búsqueda" y
dependerá de la distancia entre la posición actual y la distancia a la pista
buscada. El tiempo que tarda una cabeza en ir del sector actual al sector
deseado se le llama tiempo de latencia y depende de la distancia entre sectores
y la velocidad de rotación del disco. El impacto que tiene las lecturas y
escrituras sobre el sistema está determinado por la tecnología usada en los
platos y cabezas y por la forma de resolver las peticiones de lectura y
escritura, es decir, los algoritmos de planificación.
Algoritmos de planificación de
peticiones
Los algoritmos de planificación
de peticiones de lectura y escritura a discos se encargan de registrar dichas
peticiones y de responderlas en un tiempo razonable. Los algoritmos más comunes
para esta tarea son:
- Primero en llegar, primero en ser servido ( FIFO ): Las peticiones
son encoladas de acuerdo al orden en que llegaron y de esa misma forma se
van leyendo o escribiendo las mismas. La ventaja de este algoritmo es su
simplicidad y no causa sobrecarga, su desventaja principal es que no
aprovecha para nada ninguna característica de las peticiones, de manera
que es muy factible que el brazo del disco se mueva muy ineficientemente,
ya que las peticiones pueden tener direcciones en el disco unas muy
alejadas de otras. Por ejemplo, si se están haciendo peticiones a los
sectores 6,10,8,21 y 4, las mismas serán resueltas en el mismo orden. _
Primero el más cercano a la posición actual: En este algoritmo las
peticiones se ordenan de acuerdo a la posición actual de la cabeza
lectora, sirviendo primero a aquellas peticiones más cercanas y reduciendo,
así, el movimiento del brazo, lo cual constituye la ventaja principal de
este algoritmo. Su desventaja consiste en que puede haber solicitudes que
se queden esperando para siempre, en el infortunado caso de que existan
peticiones muy alejadas y en todo momento estén entrando peticiones que
estén más cercanas. Para las peticiones 6,10,8,21 y 4, las mismas serán
resueltas en el orden 4,6,8,10 y 21.
- Por exploración ( algoritmo del elevador ): En este algoritmo el
brazo se estará moviendo en todo momento desde el perímetro del disco
hacia su centro y viceversa, resolviendo las peticiones que existan en la
dirección que tenga en turno. En este caso las peticiones 6,10,8,21 y 4
serán resueltas en el orden 6,10,21,8 y 4; es decir, la posición actual es
6 y como va hacia los sectores de mayor numeración (hacia el centro, por
ejemplo), en el camino sigue el sector 10, luego el 21 y ese fue el más
central, así que ahora el brazo resolverá las peticiones en su camino
hacia afuera y la primera que se encuentra es la del sector 8 y luego la
4. La ventaja de este algoritmo es que el brazo se moverá mucho menos que
en FIFO y evita la espera indefinida; su desventaja es que no es justo, ya
que no sirve las peticiones en el orden en que llegaron, además de que las
peticiones en los extremos interior y exterior tendrán un tiempo de
respuesta un poco mayor.
- Por exploración circular: Es una variación del algoritmo anterior,
con la única diferencia que al llegar a la parte central, el brazo regresa
al exterior sin resolver ninguna petición, lo cual proveerá un tiempo de
respuesta más cercana al promedio para todas las peticiones, sin importar
si están cercas del centro o del exterior.
Asignación del espacio de
almacenamiento
El subsistema de archivos se
debe encargar de localizar espacio libre en los medios de almacenamiento para
guardar archivos y para después borrarlos, renombrarlos o agrandarlos. Para
ello se vale de localidades especiales que contienen la lista de archivos
creados y por cada archivo una serie de direcciones que contienen los datos de
los mismos. Esas localidades especiales se llaman directorios. Para asignarle
espacio a los archivos existen tres criterios generales que se describen
enseguida.
- Asignación contigua: Cada directorio contiene la los nombres de archivos
y la dirección del bloque inicial de cada archivo, así como el tamaño
total de los mismos. Por ejemplo, si un archivo comienza en el sector 17 y
mide 10 bloques, cuando el archivo sea accesado, el brazo se moverá
inicialmente al bloque 17 y de ahí hasta el 27. Si el archivo es borrado y
luego creado otro más pequeño, quedarán huecos inútiles entre archivos
útiles, lo cual se llama fragmentación externa.
- Asignación encadenada: Con este criterio los directorios contienen
los nombres de archivos y por cada uno de ellos la dirección del bloque
inicial que compone al archivo. Cuando un archivo es leído, el brazo va a
esa dirección inicial y encuentra los datos iniciales junto con la
dirección del siguiente bloque y así sucesivamente. Con este criterio no es
necesario que los bloques estén contiguos y no existe la fragmentación
externa, pero en cada "eslabón" de la cadena se desperdicia
espacio con las direcciones mismas. En otras palabras, lo que se crea en
el disco es una lista ligada.
- Asignación con índices ( indexada ): En este esquema se guarda en
el directorio un bloque de índices para cada archivo, con apuntadores
hacia todos sus bloques constituyentes, de manera que el acceso directo se
agiliza notablemente, a cambio de sacrificar varios bloques para almacenar
dichos apuntadores. Cuando se quiere leer un archivo o cualquiera de sus
partes, se hacen dos accesos: uno al bloque de índices y otro a la
dirección deseada. Este es un esquema excelente para archivos grandes pero
no para pequeños, porque la relación entre bloques destinados para índices
respecto a los asignados para datos es incosteable.
Métodos de acceso en los
sistemas de archivos.
Los métodos de acceso se
refieren a las capacidades que el subsistema de archivos provee para accesar
datos dentro de los directorios y medios de almacenamiento en general. Se
ubican tres formas generales: acceso secuencial, acceso directo y acceso
directo indexado.
- Acceso secuencial: Es el método más lento y consiste en recorrer
los componentes de un archivo uno en uno hasta llegar al registro deseado.
Se necesita que el orden lógico de los registros sea igual al orden físico
en el medio de almacenamiento. Este tipo de acceso se usa comúnmente en
cintas y cartuchos.
- Acceso directo: Permite accesar cualquier sector o registro
inmediatamente, por medio de llamadas al sistema como la de seek. Este
tipo de acceso es rápido y se usa comúnmente en discos duros y discos o
archivos manejados en memoria de acceso aleatorio. _ Acceso directo
indexado: Este tipo de acceso es útil para grandes volúmenes de
información o datos. Consiste en que cada archivo tiene una tabla de
apuntadores, donde cada apuntador va a la dirección de un bloque de
índices, lo cual permite que el archivo se expanda a través de un espacio
enorme. Consume una cantidad importante de recursos en las tablas de
índices pero es muy rápido.
Operaciones soportadas por el
subsistema de archivos
Independientemente de los
algoritmos de asignación de espacio, de los métodos de acceso y de la forma de
resolver las peticiones de lectura y escritura, el subsistema de archivos debe
proveer un conjunto de llamadas al sistema para operar con los datos y de
proveer mecanismos de protección y seguridad. Las operaciones básicas que la
mayoría de los sistemas de archivos soportan son:
- Crear ( create ) : Permite crear un archivo sin datos, con el
propósito de indicar que ese nombre ya está usado y se deben crear las
estructuras básicas para soportarlo.
- Borrar ( delete ): Eliminar el archivo y liberar los bloques para
su uso posterior.
- Abrir ( open ): Antes de usar un archivo se debe abrir para que el
sistema conozca sus atributos, tales como el dueño, la fecha de
modificación, etc. _ Cerrar ( close ): Después de realizar todas las
operaciones deseadas, el archivo debe cerrarse para asegurar su integridad
y para liberar recursos de su control en la memoria.
- Leer o Escribir ( read, write ): Añadir información al archivo o
leer el caracter o una cadena de caracteres a partir de la posición
actual. _ Concatenar ( append ): Es una forma restringida de la llamada
`write', en la cual sólo se permite añadir información al final del
archivo. _ Localizar ( seek ): Para los archivos de acceso directo se
permite posicionar el apuntador de lectura o escritura en un registro
aleatorio, a veces a partir del inicio o final del archivo.
- Leer atributos: Permite obtener una estructura con todos los
atributos del archivo especificado, tales como permisos de escritura, de
borrado, ejecución, etc.
- Poner atributos: Permite cambiar los atributos de un archivo, por
ejemplo en UNIX, donde todos los dispositivos se manejan como si fueran
archivos, es posible cambiar el comportamiento de una terminal con una de
estas llamadas.
- Renombrar ( rename ): Permite cambiarle el nombre e incluso a veces
la posición en la organización de directorios del archivo especificado.
Los subsistemas de archivos también proveen un conjunto de llamadas para
operar sobre directorios, las más comunes son crear, borrar, abrir,
cerrar, renombrar y leer. Sus funcionalidades son obvias, pero existen
también otras dos operaciones no tan comunes que son la de `crear una
liga' y la de `destruir la liga'. La operación de crear una liga sirve
para que desde diferentes puntos de la organización de directorios se
pueda accesar un mismo directorio sin necesidad de copiarlo o duplicarlo.
La llamada a `destruir la liga' lo que hace es eliminar esas referencias,
siendo su efecto la de eliminar las ligas y no el directorio real. El
directorio real es eliminado hasta que la llamada a `destruir liga' se realiza
sobre él.
Algunas facilidades extras de
los sistemas de archivos
Algunos sistemas de archivos
proveen herramientas al administrador del sistema para facilitarle la vida. Las
más notables es la facilidad de compartir archivos y los sistemas de `cotas'.
La facilidad de compartir
archivos se refiere a la posibilidad de que los permisos de los archivos o
directorios dejen que un grupo de usuarios puedan accesarlos para diferentes
operaciones" leer, escribir, borrar, crear, etc. El dueño verdadero es quien
decide qué permisos se aplicarán al grupo e, incluso, a otros usuarios que no
formen parte de su grupo. La facilidad de `cotas' se refiere a que el sistema
de archivos es capaz de llevar un control para que cada usuario pueda usar un
máximo de espacio en disco duro. Cuando el usuario excede ese límite, el
sistema le envía un mensaje y le niega el permiso de seguir escribiendo,
obligándolo a borrar algunos archivos si es que quiere almacenar otros o que
crezcan. La versión de UNIX SunOS contiene esa facilidad.
Sistemas de Archivos Aislados
Los sistemas de archivos
aislados son aquellos que residen en una sola computadora y no existe la
posibilidad de que, aún estando en una red, otros sistemas puedan usar sus
directorios y archivos. Por ejemplo, los archivos en discos duros en el sistema
MS-DOS clásico se puede ver en esta categoría.
Sistemas de Archivos
Compartidos o de Red
Estos sistemas de archivos es
factible accesarlos y usarlos desde otros nodos en una red. Generalmente existe
un `servidor' que es la computadora en donde reside el sistema de archivos
físicamente, y por otro lado están los `clientes', que se valen del servidor
para ver sus archivos y directorios de manera como si estuvieran localmente en
el cliente. Algunos autores les llaman a estos sistemas de archivos `sistemas
de archivos distribuidos' lo cual no se va a discutir en este trabajo.
Los sistemas de archivos
compartidos en red más populares son los provistos por Netware, el Remote Filke
Sharing ( RFS en UNIX ), Network File System ( NFS de Sun Microsystems ) y el
Andrew File System ( AFS ). En general, lo que proveen los servidores es un
medio de que los clientes, localmente, realicen peticiones de operaciones sobre
archivos los cuales con `atrapadas' por un `driver' o un `módulo' en el núcleo
del sistema operativo, el cual se comunica con el servidor a través de la red y
la operación se ejecuta en el servidor. Existen servidores de tipo
"stateless y no-stateless". Un servidor "stateless" no
registra el estado de las operaciones sobre los archivos, de manera que el
cliente se encarga de todo ese trabajo. La ventaja de este esquema es que si el
servidor falla, el cliente no perderá información ya que ésta se guarda en
memoria localmente, de manera que cuando el servidor reanude su servicio el cliente
proseguirá como si nada hubiese sucedido. Con un servidor
"no-stateless", esto no es posible.
La protección sobre las
operaciones se lleva a cabo tanto el los clientes como en el servidor: si el
usuario quiere ejecutar una operación indebida sobre un archivo, recibirá un
mensaje de error y posiblemente se envíe un registro al subsistema de
`seguridad' para informar al administrador del sistema de dicho intento de
violación.
En la práctica, el conjunto de
permisos que cada usuario tiene sobre el total de archivos se almacena en
estructuras llamadas `listas de acceso' ( access lists ).
Tendencias actuales
Con el gran auge de las redes
de comunicaciones y su incremento en el ancho de banda, la proliferación de
paquetes que ofrecen la comparición de archivos es común. Los esquemas más
solicitados en la industria es el poder accesar los grandes volúmenes de
información que residen en grandes servidores desde las computadoras personales
y desde otros servidores también. Es una realidad que la solución más socorrida
en las empresas pequeñas es usar Novell Netware en un servidor 486 o superior y
accesar los archivos desde máquinas similares.
A veces se requieren
soluciones más complejas con ambientes heterogéneos:
diferentes sistemas operativos
y diferentes arquitecturas. Uno de los sistemas de archivos más expandidos en
estaciones de trabajo es el NFS, y prácticamente todas las versiones de UNIX
traen instalado un cliente y hasta un servidor de este servicio. Es posible así
que una gran cantidad de computadoras personales (de 10 a 80 ) accesen grandes
volúmenes de información o paquetería (desde 1 a 8 Giga bites ) desde una sola
estación de trabajo, e incluso tener la flexibilidad de usar al mismo tiempo
servidores de Novell y NFS. Soluciones similares se dan con algunos otros
paquetes comerciales, pero basta ya de `goles'. Lo importante aquí es observar
que el mundo se va moviendo poco a poco hacia soluciones distribuidas, y hacia
la estandarización que, muchas veces, es `de facto'.
Suscribirse a:
Entradas (Atom)
