Sistemas Operativos - Estructuras y Programacion
Sistemas Operativos - Estructuras y Programacion
Sistemas Operativos - Estructuras y Programacion
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Sistemas</strong><br />
<strong>Operativos</strong>
[SISTEMAS OPERATIVOS]<br />
1. Introducción a los sistemas operativos<br />
1.1 Definición y concepto de sistemas operativos<br />
Un Sistema Operativo (SO frecuentemente<br />
OS, del inglés Operating System) es el<br />
software básico de una computadora que<br />
provee una interfaz entre el resto de<br />
programas de la computadora, los dispositivos<br />
(hardware) y el usuario.<br />
Las funciones básicas del Sistema Operativo<br />
son administrar los recursos de la máquina,<br />
coordinar el hardware y organizar archivos y directorios en dispositivos de<br />
almacenamiento.<br />
Los <strong>Sistemas</strong> <strong>Operativos</strong> más utilizados son Dos, Windows, Linux y Mac. Algunos SO<br />
ya vienen con un navegador integrado, como<br />
Windows que trae el navegador Internet Explorer.<br />
Uno de los propósitos del sistema operativo que<br />
gestiona el núcleo intermediario consiste en<br />
gestionar los recursos de localización y protección<br />
de acceso del hardware, hecho que alivia a los<br />
programadores de aplicaciones de tener que tratar<br />
con estos detalles. La mayoría de aparatos<br />
electrónicos que utilizan microprocesadores para<br />
funcionar, llevan incorporado un sistema operativo<br />
(teléfonos móviles, reproductores de DVD,<br />
computadoras, radios, enrutadores, etc.). En cuyo<br />
caso, son manejados mediante una Interfaz Gráfica<br />
de Usuario, un gestor de ventanas o un entorno de escritorio, si es un celular,<br />
mediante una consola o control remoto si es un DVD y, mediante una línea de<br />
comandos o navegador web si es un enrutador.<br />
1
[SISTEMAS OPERATIVOS]<br />
1.2 Funciones y características de los sistemas operativos<br />
Los sistemas operativos<br />
proporcionan una<br />
plataforma de software<br />
encima de la cual otros<br />
programas, llamados<br />
aplicaciones, puedan<br />
funcionar. Las aplicaciones<br />
se programan para que<br />
funcionen encima de un<br />
sistema operativo particular,<br />
por tanto, la elección del<br />
sistema operativo<br />
determina en gran medida las aplicaciones que puedes utilizar.<br />
El sistema operativo cumple varias funciones:<br />
Administración del procesador: el sistema operativo administra la distribución del<br />
procesador entre los distintos programas por medio de un algoritmo de programación.<br />
El tipo de programador depende completamente del sistema operativo, según el<br />
objetivo deseado.<br />
Gestión de la memoria de acceso aleatorio: el sistema operativo se encarga de<br />
gestionar el espacio de memoria asignado para cada aplicación y para cada usuario,<br />
si resulta pertinente. Cuando la memoria física es insuficiente, el sistema operativo<br />
puede crear una zona de memoria en el disco duro, denominada "memoria virtual". La<br />
memoria virtual permite ejecutar aplicaciones que requieren una memoria superior a la<br />
memoria RAM disponible en el sistema. Sin embargo, esta memoria es mucho más<br />
lenta.<br />
Gestión de entradas/salidas: el sistema operativo permite unificar y controlar el<br />
acceso de los programas a los recursos materiales a través de los drivers (también<br />
conocidos como administradores periféricos o de entrada/salida).<br />
2
[SISTEMAS OPERATIVOS]<br />
Gestión de ejecución de aplicaciones: el sistema operativo se encarga de que las<br />
aplicaciones se ejecuten sin problemas asignándoles los recursos que éstas necesitan<br />
para funcionar. Esto significa que si una aplicación no responde correctamente puede<br />
"sucumbir".<br />
Administración de autorizaciones: el sistema operativo se encarga de la seguridad<br />
en relación con la ejecución de programas garantizando que los recursos sean<br />
utilizados sólo por programas y usuarios que posean las autorizaciones<br />
correspondientes.<br />
Gestión de archivos: el sistema operativo gestiona la lectura y escritura en el sistema<br />
de archivos, y las autorizaciones de acceso a archivos de aplicaciones y usuarios.<br />
Gestión de la información: el sistema operativo proporciona cierta cantidad de<br />
indicadores que pueden utilizarse para diagnosticar el funcionamiento correcto del<br />
equipo.<br />
1.3 Evolución histórica del sistema operativo<br />
1969: Tres programadores de los laboratorios Bell (Ken Thompson, Dennis Ritchie y<br />
Douglas MCIlroy) crean el sistema operativo UNIX, aún en tiempos de terminal y sin<br />
entornos gráficos existentes.<br />
3
[SISTEMAS OPERATIVOS]<br />
1973: Xerox crea lo que podemos llamar la “primera computadora personal más o<br />
menos decente”, la Xerox Alto con su sistema operativo propio.<br />
1974: Empieza la creación de BSD 1.0, que es rápidamente sucedida por BSD 2.0 en<br />
1978.<br />
4
[SISTEMAS OPERATIVOS]<br />
1979: Tim Paterson crea su sistema operativo 86-DOS, que posteriormente pasó a<br />
llamarse QDOS (Quick and Dirty Operative System). Dos años después Bill Gates<br />
compra QDOS por una suma entre 25 y 50 mil dólares y rebautiza dos veces, en<br />
primer lugar como PC-DOS, el cual vende como sistema operativo a IBM para que<br />
estos lo usen en sus PCs (IBM-PC), y en segundo lugar (un año más tarde) como MS-<br />
DOS, el cual, siendo una copia casi identica a PC-DOS, vende como sistema propio<br />
(el sistema operativo sólo, en disketes).<br />
1981: Nace Xerox Star, el sucesor de Xerox Alto.<br />
5
[SISTEMAS OPERATIVOS]<br />
1983: Apple muestra su primera gran obra, la Apple Lisa System 1.<br />
1983: VisiCorp crea Visi On.<br />
6
[SISTEMAS OPERATIVOS]<br />
1984: Mac OS System de la mano de Apple.<br />
1985: Las PC Amiga salen a la luz, y con ellas su flamante sistema operativo,<br />
Workbench 1.0, quien posteriormente sería rebautizado como AmigaOS.<br />
7
[SISTEMAS OPERATIVOS]<br />
1985: Microsoft Windows 1.0 ve la luz, aunque tras un grave fracaso debido a los<br />
errores que tenía, se ve rápidamente sucedido por Windows 1.01.<br />
1986: Irix es concebido, una poderosa arma para la manipulación 3D habitualmente<br />
usada para fines de diseño (la imágen es de Irix3.3).<br />
8
[SISTEMAS OPERATIVOS]<br />
1987: Andrew S. Tanenbaum crea MINIX, un sistema operativo basado en Unix y<br />
escrito en lenguaje C, cuyo principal objetivo era el aprendizaje informático (aprender<br />
cómo funciona un sistema operativo por dentro). Este sistema inspiró a Linus Torvalds<br />
para la creación del Núcleo Linux. Imagen de MINIX3.<br />
9
1987: Windows 2.0 aparece.<br />
[SISTEMAS OPERATIVOS]<br />
10
[SISTEMAS OPERATIVOS]<br />
1989: NeXTSTEP / OPENSTEP<br />
1990: BeOS de la mano de Be Incorporated. Imagen moderna.<br />
11
[SISTEMAS OPERATIVOS]<br />
1990: Windows 3.0. Cuya famosa actualización gratuita a 3.11 (para Windows 3.1)<br />
salió 2 años después.<br />
12
[SISTEMAS OPERATIVOS]<br />
1990: Richard Stallman crea el sistema GNU de software libre y el Núcleo Hurd, el<br />
cual no parece ser tan bueno para el sistema GNU como lo que Linus Torvalds crearía<br />
un año después, el Núcleo Linux. En 1992, el sistema GNU y el Núcleo Linux se unen<br />
formalmente para crear GNU/Linux, un sistema con docenas de distribuciones<br />
(“versiones” que son creadas en paralelo por diversos grupos independientes de<br />
programadores)<br />
13
1995: Windows 95.<br />
[SISTEMAS OPERATIVOS]<br />
14
[SISTEMAS OPERATIVOS]<br />
1996: IBM saca la nueva versión de su sistema operativo: OS/2 Warp 4.<br />
15
1997: Mac OS System 8<br />
[SISTEMAS OPERATIVOS]<br />
16
1998: Windows 98.<br />
[SISTEMAS OPERATIVOS]<br />
17
[SISTEMAS OPERATIVOS]<br />
1998: GNU/Linux sigue avanzando y una de sus más famosas distribuciones,<br />
Mandrake Linux, saca su primera versión (5.1).<br />
18
2001: Mac OS X.<br />
[SISTEMAS OPERATIVOS]<br />
19
2001: Windows XP.<br />
[SISTEMAS OPERATIVOS]<br />
20
2006: Amiga Workbench 4.0<br />
[SISTEMAS OPERATIVOS]<br />
21
[SISTEMAS OPERATIVOS]<br />
2006: Ubuntu, la más famosa distribución de GNU/Linux de la actualidad, nace (en<br />
varios idiomas).<br />
22
[SISTEMAS OPERATIVOS]<br />
2006: Empiezan a aparecer los sistemas operativos en la Nube (Internet), como es el<br />
caso de EyeOS.<br />
23
2007: Windows Vista.<br />
[SISTEMAS OPERATIVOS]<br />
24
2007: Mac OS X Leopard<br />
[SISTEMAS OPERATIVOS]<br />
25
2009: Windows 7 aparece<br />
[SISTEMAS OPERATIVOS]<br />
26
[SISTEMAS OPERATIVOS]<br />
2011: Ubuntu saca su versión 11.04, cambiando de interfáz Gnome a Unity.<br />
2011: Google saca una beta de su sistema operativo ChromeOS, otro más que se<br />
aloja en la nube.<br />
27
2012. Aparece Windows 8<br />
[SISTEMAS OPERATIVOS]<br />
28
[SISTEMAS OPERATIVOS]<br />
1.4 Clasificación del sistema operativo<br />
Con el paso del tiempo, los <strong>Sistemas</strong> <strong>Operativos</strong> fueron clasificándose de diferentes<br />
maneras, dependiendo del uso o de la aplicación que se les daba. A continuación se<br />
mostrarán diversos tipos de <strong>Sistemas</strong> <strong>Operativos</strong> que existen en la actualidad, con<br />
algunas de sus características:<br />
<strong>Sistemas</strong> <strong>Operativos</strong> de multiprogramación (o <strong>Sistemas</strong> <strong>Operativos</strong> de<br />
multitarea).<br />
Es el modo de funcionamiento disponible en algunos sistemas operativos, mediante el<br />
cual una computadora procesa varias tareas al mismo tiempo. Existen varios tipos de<br />
multitareas. La conmutación de contextos (context Switching) es un tipo muy simple<br />
de multitarea en el que dos o más aplicaciones se cargan al mismo tiempo, pero en el<br />
que solo se está procesando la aplicación que se encuentra en primer plano (la que ve<br />
el usuario). Para activar otra tarea que se encuentre en segundo plano, el usuario<br />
debe traer al primer plano la ventana o pantalla que contenga esa aplicación. En la<br />
multitarea cooperativa, la que se utiliza en el sistema operativo Macintosh, las tareas<br />
en segundo plano reciben tiempo de procesado durante los tiempos muertos de la<br />
tarea que se encuentra en primer plano (por ejemplo, cuando esta aplicación esta<br />
esperando información del usuario), y siempre que esta aplicación lo permita. En los<br />
sistemas multitarea de tiempo compartido, como OS/2, cada tarea recibe la atención<br />
del microprocesador durante una fracción de segundo. Para mantener el sistema en<br />
orden, cada tarea recibe un nivel de prioridad o se procesa en orden secuencial. Dado<br />
que el sentido temporal del usuario es mucho más lento que la velocidad de<br />
procesamiento del ordenador, las operaciones de multitarea en tiempo compartido<br />
parecen ser simultáneas.<br />
Se distinguen por sus habilidades para poder soportar la ejecución de dos o más<br />
trabajos activos (que se están ejecutado) al mismo tiempo. Esto trae como resultado<br />
que la Unidad Central de Procesamiento (UCP) siempre tenga alguna tarea que<br />
ejecutar, aprovechando al máximo su utilización.<br />
Su objetivo es tener a varias tareas en la memoria principal, de manera que cada uno<br />
está usando el procesador, o un procesador distinto, es decir, involucra máquinas con<br />
más de una UCP.<br />
<strong>Sistemas</strong> <strong>Operativos</strong> como UNIX, Windows 95, Windows 98, Windows NT, MAC-OS,<br />
OS/2, soportan la multitarea.<br />
Las características de un Sistema Operativo de multiprogramación o multitarea son las<br />
siguientes:<br />
29
[SISTEMAS OPERATIVOS]<br />
Mejora productividad del sistema y utilización de recursos.<br />
Multiplexa recursos entre varios programas.<br />
Generalmente soportan múltiples usuarios (multiusuarios).<br />
Proporcionan facilidades para mantener el entorno de usuarios individuales.<br />
Requieren validación de usuario para seguridad y protección.<br />
Proporcionan contabilidad del uso de los recursos por parte de los usuarios.<br />
Multitarea sin soporte multiusuario se encuentra en algunas computadoras<br />
personales o en sistemas de tiempo real.<br />
<strong>Sistemas</strong> multiprocesadores son sistemas multitareas por definición ya que<br />
soportan la ejecución simultánea de múltiples tareas sobre diferentes<br />
procesadores.<br />
En general, los sistemas de multiprogramación se caracterizan por tener múltiples<br />
programas activos compitiendo por los recursos del sistema: procesador, memoria,<br />
dispositivos periféricos.<br />
Sistema Operativo Monotareas.<br />
Los sistemas operativos monotareas son más primitivos y es todo lo contrario al visto<br />
anteriormente, es decir, solo pueden manejar un proceso en cada momento o que<br />
solo puede ejecutar las tareas de una en una. Por ejemplo cuando la computadora<br />
está imprimiendo un documento, no puede iniciar otro proceso ni responder a nuevas<br />
instrucciones hasta que se termine la impresión.<br />
Sistema Operativo Monousuario.<br />
Los sistemas monousuarios son aquellos que nada más puede atender a un solo<br />
usuario, gracias a las limitaciones creadas por el hardware, los programas o el tipo de<br />
aplicación que se esté ejecutando.<br />
Estos tipos de sistemas son muy simples, porque todos los dispositivos de entrada,<br />
salida y control dependen de la tarea que se está utilizando, esto quiere decir, que las<br />
instrucciones que se dan, son procesadas de inmediato; ya que existe un solo usuario.<br />
Y están orientados principalmente por los microcomputadoras.<br />
Sistema Operativo Multiusuario.<br />
Es todo lo contrario a monousuario; y en esta categoría se encuentran todos los<br />
sistemas que cumplen simultáneamente las necesidades de dos o más usuarios, que<br />
30
[SISTEMAS OPERATIVOS]<br />
comparten mismos recursos. Este tipo de sistemas se emplean especialmente en<br />
redes.<br />
En otras palabras consiste en el fraccionamiento del tiempo (timesharing).<br />
<strong>Sistemas</strong> <strong>Operativos</strong> por lotes.<br />
Los <strong>Sistemas</strong> <strong>Operativos</strong> por lotes, procesan una gran cantidad de trabajos con poca<br />
o ninguna interacción entre los usuarios y los programas en ejecución. Se reúnen<br />
todos los trabajos comunes para realizarlos al mismo tiempo, evitando la espera de<br />
dos o más trabajos como sucede en el procesamiento en serie. Estos sistemas son de<br />
los más tradicionales y antiguos, y fueron introducidos alrededor de 1956 para<br />
aumentar la capacidad de procesamiento de los programas.<br />
Cuando estos sistemas son bien planeados, pueden tener un tiempo de ejecución<br />
muy alto, porque el procesador es mejor utilizado y los <strong>Sistemas</strong> <strong>Operativos</strong> pueden<br />
ser simples, debido a la secuenciabilidad de la ejecución de los trabajos.<br />
Algunos ejemplos de <strong>Sistemas</strong> <strong>Operativos</strong> por lotes exitosos son el SCOPE, del<br />
DC6600, el cual está orientado a procesamiento científico pesado, y el EXEC II para el<br />
UNIVAC 1107, orientado a procesamiento académico.<br />
Algunas otras características con que cuentan los <strong>Sistemas</strong> <strong>Operativos</strong> por lotes son:<br />
Requiere que el programa, datos y órdenes al sistema sean remitidos todos juntos<br />
en forma de lote.<br />
Permiten poca o ninguna interacción usuario/programa en ejecución.<br />
Mayor potencial de utilización de recursos que procesamiento serial simple en<br />
sistemas multiusuarios.<br />
No conveniente para desarrollo de programas por bajo tiempo de retorno y<br />
depuración fuera de línea.<br />
Conveniente para programas de largos tiempos de ejecución (ej, análisis<br />
estadísticos, nóminas de personal, etc.).<br />
Se encuentra en muchas computadoras personales combinados con<br />
procesamiento serial.<br />
Planificación del procesador sencilla, típicamente procesados en orden de llegada.<br />
Planificación de memoria sencilla, generalmente se divide en dos: parte residente<br />
del S.O. y programas transitorios.<br />
No requieren gestión crítica de dispositivos en el tiempo.<br />
31
[SISTEMAS OPERATIVOS]<br />
Suelen proporcionar gestión sencilla de manejo de archivos: se requiere poca<br />
protección y ningún control de concurrencia para el acceso.<br />
<strong>Sistemas</strong> <strong>Operativos</strong> de tiempo real.<br />
Los <strong>Sistemas</strong> <strong>Operativos</strong> de tiempo real son aquellos en los cuales no tiene<br />
importancia el usuario, sino los procesos. Por lo general, están subutilizados sus<br />
recursos con la finalidad de prestar atención a los procesos en el momento que lo<br />
requieran. Se utilizan en entornos donde son procesados un gran número de sucesos<br />
o eventos.<br />
Muchos <strong>Sistemas</strong> <strong>Operativos</strong> de tiempo real son construidos para aplicaciones muy<br />
específicas como control de tráfico aéreo, bolsas de valores, control de refinerías,<br />
control de laminadores. También en el ramo automovilístico y de la electrónica de<br />
consumo, las aplicaciones de tiempo real están creciendo muy rápidamente. Otros<br />
campos de aplicación de los <strong>Sistemas</strong> <strong>Operativos</strong> de tiempo real son los siguientes:<br />
Control de trenes.<br />
Telecomunicaciones.<br />
<strong>Sistemas</strong> de fabricación integrada.<br />
Producción y distribución de energía eléctrica.<br />
Control de edificios.<br />
<strong>Sistemas</strong> multimedia.<br />
Algunos ejemplos de <strong>Sistemas</strong> <strong>Operativos</strong> de tiempo real son: VxWorks, Solaris,<br />
Lyns OS y Spectra. Los <strong>Sistemas</strong> <strong>Operativos</strong> de tiempo real, cuentan con las<br />
siguientes características:<br />
Se dan en entornos en donde deben ser aceptados y procesados gran cantidad de<br />
sucesos, la mayoría externos al sistema computacional, en breve tiempo o dentro<br />
de ciertos plazos.<br />
Se utilizan en control industrial, conmutación telefónica, control de vuelo,<br />
simulaciones en tiempo real., aplicaciones militares, etc.<br />
Objetivo es proporcionar rápidos tiempos de respuesta.<br />
Procesa ráfagas de miles de interrupciones por segundo sin perder un solo<br />
suceso.<br />
Proceso se activa tras ocurrencia de suceso, mediante interrupción.<br />
Proceso de mayor prioridad expropia recursos.<br />
32
[SISTEMAS OPERATIVOS]<br />
Por tanto generalmente se utiliza planificación expropiativa basada en prioridades.<br />
Gestión de memoria menos exigente que tiempo compartido, usualmente procesos<br />
son residentes permanentes en memoria.<br />
Población de procesos estática en gran medida.<br />
Poco movimiento de programas entre almacenamiento secundario y memoria.<br />
Gestión de archivos se orienta más a velocidad de acceso que a utilización<br />
eficiente del recurso.<br />
<strong>Sistemas</strong> <strong>Operativos</strong> de tiempo compartido.<br />
Permiten la simulación de que el sistema y sus recursos son todos para cada usuario.<br />
El usuario hace una petición a la computadora, está la procesa tan pronto como le es<br />
posible, y la respuesta aparecerá en la terminal del usuario.<br />
Los principales recursos del sistema, el procesador, la memoria, dispositivos de E/S,<br />
son continuamente utilizados entre los diversos usuarios, dando a cada usuario la<br />
ilusión de que tiene el sistema dedicado para sí mismo. Esto trae como consecuencia<br />
una gran carga de trabajo al Sistema Operativo, principalmente en la administración<br />
de memoria principal y secundaria.<br />
Ejemplos de <strong>Sistemas</strong> <strong>Operativos</strong> de tiempo compartido son Multics, OS/360 y DEC-<br />
10.<br />
Características de los <strong>Sistemas</strong> <strong>Operativos</strong> de tiempo compartido:<br />
Populares representantes de sistemas multiprogramados multiusuario, ej: sistemas<br />
de diseño asistido por computadora, procesamiento de texto, etc.<br />
Dan la ilusión de que cada usuario tiene una máquina para sí.<br />
Mayoría utilizan algoritmo de reparto circular.<br />
Programas se ejecutan con prioridad rotatoria que se incrementa con la espera y<br />
disminuye después de concedido el servicio.<br />
Evitan monopolización del sistema asignando tiempos de procesador (time slot).<br />
Gestión de memoria proporciona protección a programas residentes.<br />
Gestión de archivo debe proporcionar protección y control de acceso debido a que<br />
pueden existir múltiples usuarios accesando un mismo archivo.<br />
33
<strong>Sistemas</strong> <strong>Operativos</strong> distribuidos.<br />
[SISTEMAS OPERATIVOS]<br />
Permiten distribuir trabajos, tareas o procesos, entre un conjunto de procesadores.<br />
Puede ser que este conjunto de procesadores esté en un equipo o en diferentes, en<br />
este caso es trasparente para el usuario. Existen dos esquemas básicos de éstos. Un<br />
sistema fuertemente acoplado es aquel que comparte la memoria y un reloj global,<br />
cuyos tiempos de acceso son similares para todos los procesadores. En un sistema<br />
débilmente acoplado los procesadores no comparten ni memoria ni reloj, ya que cada<br />
uno cuenta con su memoria local.<br />
Los sistemas distribuidos deben de ser muy confiables, ya que si un componente del<br />
sistema se compone otro componente debe de ser capaz de reemplazarlo.<br />
Entre los diferentes <strong>Sistemas</strong> <strong>Operativos</strong> distribuidos que existen tenemos los<br />
siguientes: Sprite, Solaris-MC, Mach, Chorus, Spring, Amoeba, Taos, etc.<br />
Características de los <strong>Sistemas</strong> <strong>Operativos</strong> distribuidos:<br />
Colección de sistemas autónomos capaces de comunicación y cooperación<br />
mediante interconexiones hardware y software .<br />
Gobierna operación de un S.C. y proporciona abstracción de máquina virtual a los<br />
usuarios.<br />
Objetivo clave es la transparencia.<br />
Generalmente proporcionan medios para la compartición global de recursos.<br />
Servicios añadidos: denominación global, sistemas de archivos distribuidos,<br />
facilidades para distribución de cálculos (a través de comunicación de procesos<br />
internodos, llamadas a procedimientos remotos, etc.).<br />
<strong>Sistemas</strong> <strong>Operativos</strong> de red.<br />
Son aquellos sistemas que mantienen a dos o más computadoras unidas através de<br />
algún medio de comunicación (físico o no), con el objetivo primordial de poder<br />
compartir los diferentes recursos y la información del sistema.<br />
El primer Sistema Operativo de red estaba enfocado a equipos con un procesador<br />
Motorola 68000, pasando posteriormente a procesadores Intel como Novell Netware.<br />
Los <strong>Sistemas</strong> <strong>Operativos</strong> de red mas ampliamente usados son: Novell Netware,<br />
Personal Netware, LAN Manager, Windows NT Server, UNIX, LANtastic.<br />
34
<strong>Sistemas</strong> <strong>Operativos</strong> paralelos.<br />
[SISTEMAS OPERATIVOS]<br />
En estos tipos de <strong>Sistemas</strong> <strong>Operativos</strong> se pretende que cuando existan dos o más<br />
procesos que compitan por algún recurso se puedan realizar o ejecutar al mismo<br />
tiempo.<br />
En UNIX existe también la posibilidad de ejecutar programas sin tener que atenderlos<br />
en forma interactiva, simulando paralelismo (es decir, atender de manera concurrente<br />
varios procesos de un mismo usuario). Así, en lugar de esperar a que el proceso<br />
termine de ejecutarse (como lo haría normalmente), regresa a atender al usuario<br />
inmediatamente después de haber creado el proceso.<br />
Ejemplos de estos tipos de <strong>Sistemas</strong> <strong>Operativos</strong> están: Alpha, PVM, la serie AIX, que<br />
es utilizado en los sistemas RS/6000 de IBM.<br />
1.5 Estructura niveles o estratos de diseño<br />
El núcleo o kernel se divide en 5 capas o niveles:<br />
Nivel 1. Gestión de Memoria: Proporciona las facilidades de bajo nivel para la<br />
gestión de memoria secundaria necesaria para la ejecución de procesos.<br />
Nivel 2. Procesador: Se encarga de activar los cuantums de tiempo para cada uno<br />
de los procesos, creando interrupciones de hardware cuando no son respetadas.<br />
Nivel 3. Entrada/Salida: Proporciona las facilidades para poder utilizar los<br />
dispositivos de E/S requeridos por los procesos.<br />
Nivel 4. Información o Aplicación o Intérprete de Lenguajes: Facilita la<br />
comunicación con los lenguajes y el sistema operativo para aceptar las órdenes en<br />
cada una de las aplicaciones. Ejecutando un programa el software de este nivel crea<br />
el ambiente de trabajo e invoca a los procesos correspondientes.<br />
Nivel 5. Control de Archivos: Proporciona la facilidad para el almacenamiento a<br />
largo plazo y manipulación de archivos con nombre, va asignando espacio y acceso<br />
de datos en memoria.<br />
El núcleo o kernel realiza diferentes funciones tales como:<br />
Manejo de interrupciones.<br />
Creación y destrucción de procesos.<br />
35
[SISTEMAS OPERATIVOS]<br />
Cambio de estado de los procesos.<br />
Despacho<br />
Suspensión y reanudación de procesos.<br />
Sincronización de procesos.<br />
Comunicación entre procesos.<br />
Manipulación de los bloques de control de procesos.<br />
Apoyo para las actividades de entrada/salida.<br />
Apoyo para asignación y liberación de memoria.<br />
Apoyo para el sistema de archivos.<br />
Apoyo para el mecanismo de llamada y retorno de un procedimiento.<br />
Apoyo para ciertas funciones de contabilidad del sistema.<br />
El núcleo y los procesos<br />
Una definición más específica de lo que es el núcleo (Kernel) de un sistema operativo<br />
es: un conjunto de rutinas cuya misión es la de gestionar el procesador, la memoria, la<br />
entrada/salida y el resto de procesos disponibles en la instalación. Toda esta gestión<br />
la realiza para atender al funcionamiento y peticiones de los trabajos que se ejecutan<br />
en el sistema.<br />
El esquema general de la gestión del procesador, es el siguiente:<br />
Definición y concepto de proceso.<br />
El Bloque de Control de Proceso (PCB) como imagen donde el sistema<br />
operativo ve el estado del proceso.<br />
Estados por los que pasa un proceso a lo largo de su existencia en la<br />
computadora.<br />
Operaciones que se pueden realizar sobre un proceso.<br />
Clasificación de los procesos según su forma de ejecución, de carga, etc.<br />
Por proceso debe entenderse: un programa en ejecución junto con el entorno<br />
asociado (registros, variables, etc.).<br />
36
1.6 Núcleo<br />
[SISTEMAS OPERATIVOS]<br />
El Núcleo o Kernel consiste en la parte<br />
principal del código del sistema operativo, el<br />
cual se encargan de controlar y administrar los<br />
servicios y peticiones de recursos y de<br />
hardware con respecto a uno o varios<br />
procesos, en otras palabras, el kernel es el<br />
corazón del sistema operativo.<br />
Parte esencial de un sistema operativo que<br />
provee los servicios más básicos del sistema.<br />
Se encarga de gestionar los recursos como el<br />
acceso seguro al hardware de la computadora. Se encarga también del multiplexado,<br />
determinando qué programa accederá a un determinado hardware si dos o más<br />
quieren usarlo al mismo tiempo.<br />
El kernel también ofrece una serie de abstracciones del hardware para que los<br />
programadores no tengan que acceder directamente al hardware, proceso que puede<br />
ser complicado.<br />
Entre las funciones principales del kernel se encuentran:<br />
La gestión de memoria.<br />
La administración del sistema de archivos.<br />
La administración de servicios de entrada/salida.<br />
La asignación de recursos entre los usuarios.<br />
La manipulación del hardware se realiza por medio de controladores de dispositivo,<br />
que conocen la forma de comunicarse directamente con el hardware de la máquina.<br />
El software por su parte puede comunicarse con el kernel por medio de llamadas al<br />
sistema, las cuales le indican al kernel que realice tareas como abrir y escribir un<br />
archivo, ejecutar un programa, finalizar un proceso u obtener la fecha y hora del<br />
sistema.<br />
37
[SISTEMAS OPERATIVOS]<br />
Unidad 2. Administración de Procesos y del procesador<br />
2.1 Concepto de proceso<br />
Un proceso puede informalmente entenderse como<br />
un programa en ejecución. Formalmente un proceso<br />
es "Una unidad de actividad que se caracteriza por la<br />
ejecución de una secuencia de instrucciones, un<br />
estado actual, y un conjunto de recursos del sistema<br />
asociados".1<br />
Para entender lo que es un proceso y la diferencia<br />
entre un programa y un proceso, A. S. Tanenbaum<br />
propone la analogía "Un científico computacional con<br />
mente culinaria hornea un pastel de cumpleaños para su hija; tiene la receta para un<br />
pastel de cumpleaños y una cocina bien equipada con todos los ingredientes<br />
necesarios, harina, huevo, azúcar, leche, etcétera." Situando cada parte de la<br />
analogía se puede decir que la receta representa el programa (el algoritmo), el<br />
científico computacional es el procesador y los ingredientes son las entradas del<br />
programa. El proceso es la actividad que consiste en que el científico computacional<br />
vaya leyendo la receta, obteniendo los ingredientes y horneando el pastel.<br />
Cada proceso tiene su contador de programa, registros y variables, aislados de otros<br />
procesos, incluso siendo el mismo programa en ejecución 2 veces. Cuándo este<br />
último caso sucede, el sistema operativo usa la misma región de memoria de código,<br />
debido a que dicho código no cambiará, a menos que se ejecute una versión distinta<br />
del programa.<br />
Los procesos son gestionados por el sistema operativo y están formados por:<br />
Las instrucciones de un programa destinadas a ser ejecutadas por el<br />
microprocesador.<br />
Su estado de ejecución en un momento dado, esto es, los valores de los registros de<br />
la unidad central de procesamiento para dicho programa.<br />
38
[SISTEMAS OPERATIVOS]<br />
Su memoria de trabajo (memoria crítica), es decir, la memoria que ha reservado y sus<br />
contenidos.<br />
Otra información que permite al sistema operativo su planificación.<br />
Un proceso se rige en pequeñas porciones, conocidas como páginas, y cada proceso<br />
tiene su propia tabla de paginación, fungiendo como una optimización del sistema<br />
operativo ante los fallo de página.<br />
Esta definición varía ligeramente en el caso de sistemas operativos multihilo, donde<br />
un proceso consta de uno o más hilos, la memoria de trabajo (compartida por todos<br />
los hilos) y la información de planificación. Cada hilo consta de instrucciones y estado<br />
de ejecución.<br />
Los procesos son creados y eliminados por el sistema operativo, así como también<br />
éste se debe hacer cargo de la comunicación entre procesos, pero lo hace a petición<br />
de otros procesos (interrupción o tiempo de reloj). El mecanismo por el cual un<br />
proceso crea otro proceso se denomina bifurcación (fork). El proceso de arranque de<br />
GNU/Linux inicia con un sólo proceso (init) y después comienza a crear los hilos<br />
necesarios para tener el sistema listo para su uso. Los nuevos procesos pueden ser<br />
independientes y no compartir el espacio de memoria con el proceso que los ha<br />
creado o ser creados en el mismo espacio de memoria.<br />
En los sistemas operativos multihilo es posible crear tanto hilos como procesos. La<br />
diferencia estriba en que un proceso solamente puede crear hilos para sí mismo y en<br />
que dichos hilos comparten toda la memoria reservada para el proceso.<br />
Los procesos pueden ser cooperativos o independientes. Dos o más procesos pueden<br />
cooperar mediante señales de forma que uno obliga a detenerse a los otros hasta que<br />
reciban una señal para continuar.<br />
Se usa una variable de tipo semáforo para sincronizar los procesos.<br />
Si un proceso está esperando una señal, se suspende hasta que la señal se envíe.<br />
Se mantiene una cola de procesos en espera en el semáforo.<br />
La forma de elegir los procesos de la cola en espera es mediante una política first in<br />
first out.<br />
39
[SISTEMAS OPERATIVOS]<br />
La sincronización explícita entre procesos es un caso particular del estado<br />
"bloqueado". En este caso, el suceso que permite desbloquear un proceso no es una<br />
operación de entrada/salida, sino una señal generada a propósito por el programador<br />
desde otro proceso.<br />
Hay cuatro eventos principales que provocan la creación de procesos:<br />
El arranque del sistema.<br />
La ejecución, desde un proceso, de una llamada al sistema para la creación de otro<br />
proceso.<br />
Una petición de usuario para crear un proceso.<br />
El inicio de un trabajo por lotes.<br />
Los procesos pueden contener uno o más hilos, haciendo más eficiente las tareas,<br />
asimismo la complejidad de los algoritmos de sincronización, ya que podría ocurrir la<br />
condición de carrera muy a menudo, inclusive los indeseados interbloqueos.<br />
2.2 Estados y transiciones de los procesos<br />
El principal trabajo del procesador es ejecutar las<br />
instrucciones de máquina que se encuentran en<br />
memoria principal. Estas instrucciones se encuentran<br />
en forma de programas. Para que un programa<br />
pueda ser ejecutado, el sistema operativo crea un<br />
nuevo proceso, y el procesador ejecuta una tras otra<br />
las instrucciones del mismo. En un entorno de<br />
multiprogramación, el procesador intercalará la<br />
ejecución de instrucciones de varios programas que<br />
se encuentran en memoria. El sistema operativo es<br />
el responsable de determinar las pautas de intercalado y asignación de recursos a<br />
cada proceso.<br />
Aunque cada proceso se una entidad independiente, con su propio contador de<br />
programa y estado interno, los procesos a menudo necesitan interactuar con otros<br />
40
[SISTEMAS OPERATIVOS]<br />
procesos. Un proceso podría generar ciertas salidas que otro proceso utilizan como<br />
entradas, en el comando de Shell.<br />
Cuando un proceso se bloquea, lo que hace porque le es imposible continuar<br />
lógicamente, casi siempre porque está separando entradas que todavía no están<br />
disponibles, también puede ser que un programa que conceptualmente esta listo y en<br />
condiciones de ejecutarse sea detenido porque el sistema operativo ha decidido<br />
asignar la CPU a otro proceso durante un tiempo. Estas dos condiciones son<br />
totalmente distintas, en el primer caso, la suspensión es inherente al problema (no es<br />
posible procesar la línea de comandos del usuarios antes de que este la teclee). En el<br />
segundo caso, se trata de un tecnicismo del sistema (no hay suficiente: CPU para<br />
darle a cada proceso su propio procesador privado).<br />
1.- Ejecutándose (usando realmente la CPU en este instante).<br />
2.- Listo (se puede ejecutar, pero se suspendió temporalmente para dejar que<br />
otro proceso se ejecute).<br />
3.- Bloqueo (no puede ejecutarse en tanto no ocurra algún evento externo).<br />
Puede haber cuánto transiciones entre estos tres estados, como se muestra:<br />
La transacción 1 ocurre cuando un proceso descubre que no puede continuar. En<br />
algunos sistemas el proceso debe ejecutar una llamada al sistema, block, para pasar<br />
al estado bloqueado. En otros sistemas, incluido MINIX, cuando un proceso lee de un<br />
conducto o de un archivo especial, (p.ej., una terminal) y no hay entradas disponibles,<br />
se bloquea automáticamente.<br />
Las transiciones 2 y 3 son causadas por el planificador de procesos, un parte del<br />
sistema operativo, sin que el proceso se entere siquiera de ellas.<br />
La transición 2 ocurre cuando el planificador decide que el proceso en ejecución ya se<br />
ejecutó durante suficiente tiempo y es ahora de dejar que otros procesos tengan algo<br />
de tiempo de CPU.<br />
41
[SISTEMAS OPERATIVOS]<br />
La transacción 3 ocurre cuando todos los demás procesos han disfrutado de una<br />
porción justa y es hora de que el primer proceso reciba otra vez la CPU para<br />
ejecutarse.<br />
La transacción 4 ocurre cuando acontece el suceso externo que un proceso estaba<br />
esperando (como la llegada de entrada). Sin ningún otro proceso se está ejecutando<br />
en ese instante, se dispara de inmediato la transacción 3 y el proceso comienza a<br />
ejecutarse.<br />
En caso contrario, el proceso tal vez tenga que esperar en el estado listo durante<br />
cierto tiempo hasta que la CPU esté disponible. Usando el modelo de procesos, es<br />
mucho más fácil visualizar lo que está sucediendo dentro del sistema.<br />
2.3 Procesos ligeros Hilos o hebras<br />
El concepto de proceso engloba dos conceptos separados y potencialmente<br />
independientes: uno relativo a la propiedad de recursos y otro que hace referencia a la<br />
ejecución.<br />
Unidad que posee recursos: A un proceso se le asigna un espacio de memoria y, de<br />
tanto en tanto, se le puede asignar otros recursos como dispositivos de E/S o ficheros.<br />
Unidad a la que se le asigna el procesador: Un proceso es un flujo de ejecución<br />
(una traza) a través de uno o más programas. Esta ejecución se entremezcla con la<br />
de otros procesos. De tal forma, que un proceso tiene un estado (en ejecución, listo,<br />
etc) y una prioridad de expedición u origen. La unidad planificada y expedida por el<br />
sistema operativo es el proceso.<br />
En la mayoría de los sistemas operativos, estas dos características son, de hecho, la<br />
esencia de un proceso. Sin embargo, son independientes, y pueden ser tratadas como<br />
tales por el sistema operativo. Esta distinción ha conducido en los sistemas operativos<br />
actuales a desarrollar la construcción conocida como thread, cuyas traducciones más<br />
frecuentes son hilo, hebra y proceso ligero. Si se tiene esta división de características,<br />
la unidad de asignación de la CPU se conoce como hilo, mientras que a la unidad que<br />
posee recursos se le llama proceso.<br />
42
[SISTEMAS OPERATIVOS]<br />
Dentro de un proceso puede haber uno o más hilos de control cada uno con:<br />
Un estado de ejecución (en ejecución, listo, bloqueado)<br />
Un contexto de procesador, que se salva cuando no esté ejecutándose.<br />
Una pila de ejecución.<br />
Algún almacenamiento estático para variables locales.<br />
Acceso a la memoria y a los recursos de ese trabajo que comparte con los<br />
otros hilos.<br />
Los beneficios clave de los hilos se derivan de las implicaciones del rendimiento: se<br />
tarda menos tiempo en crear un nuevo hilo de un proceso que ya existe, en terminarlo,<br />
y en hacer un cambio de contexto entre hilos de un mismo proceso. Al someter a un<br />
mismo proceso a varios flujos de ejecución se mantiene una única copia en memoria<br />
del código, y no varias.<br />
Un ejemplo de aplicación que podría hacer uso de los hilos es un servidor de ficheros<br />
de una red de área local. Cada vez que llega una solicitud de una operación sobre un<br />
fichero, se puede generar un nuevo hilo para su gestión. El servidor gestiona multitud<br />
de solicitudes, por tanto, se pueden crear y destruir muchos hilos en poco tiempo para<br />
dar servicio a estas peticiones. Si el servidor es un multiprocesador, se pueden<br />
ejecutar varios hilos de un mismo proceso simultáneamente y en diferentes<br />
procesadores.[2]<br />
Un proceso ligero (thread o hebra) es un programa en ejecución que comparte la<br />
imagen de la memoria y otras informaciones con otros procesos ligeros.<br />
43
[SISTEMAS OPERATIVOS]<br />
Es una unidad básica de utilización de la CPU consistente en un juego de registros y<br />
un espacio de pila. Comparte el código, los datos y los recursos con sus hebras pares<br />
Una tarea (o proceso pesado) está formada ahora por una o más hebras<br />
Una hebra sólo puede pertenecer a una tarea<br />
CARACTERISTICAS<br />
Se comparten recursos. La compartición de la memoria permite a las hebras<br />
pares comunicarse sin usar ningún mecanismo de comunicación inter-proceso<br />
del SO.<br />
La conmutación de contexto es más rápida gracias al extenso compartir de<br />
recursos<br />
No hay protección entre las hebras. Una hebra puede escribir en la pila de otra<br />
hebra del mismo proceso.<br />
44
[SISTEMAS OPERATIVOS]<br />
ESTADOS DE LOS PROCESOS LIGEROS<br />
Un proceso ligero puede estar ejecutando, listo o bloqueado.<br />
PARALELISMO<br />
Los procesos ligeros permiten paralelizar una aplicación.[3]<br />
2.4 Concurrencia y secuenciabilidad<br />
La concurrencia comprende un gran número de cuestiones de diseño, incluyendo la<br />
comunicación entre procesos, comparición y competencia por los recursos,<br />
sincronización de la ejecución de varios procesos y asignación del tiempo de<br />
procesador a los procesos y es fundamental para que existan diseños como<br />
Multiprogramación, Multiproceso y Proceso distribuido<br />
Los procesos son concurrentes si existen simultáneamente. Cuando dos o más<br />
procesos llegan al mismo tiempo a ejecutarse, se dice que se ha presentado una<br />
45
[SISTEMAS OPERATIVOS]<br />
concurrencia de procesos. Es importante mencionar que para que dos o más<br />
procesos sean concurrentes, es necesario que tengan alguna relación entre ellos.<br />
La concurrencia puede presentarse en tres contextos diferentes:<br />
• Varias aplicaciones: La multiprogramación se creó para permitir que el tiempo<br />
de procesador de la máquina fuese compartido dinámicamente entre varios<br />
trabajos o aplicaciones activas.<br />
• Aplicaciones estructuradas: Como ampliación de los principios del diseño<br />
modular y la programación estructurada, algunas aplicaciones pueden<br />
implementarse eficazmente como un conjunto de procesos concurrentes.<br />
• Estructura del sistema operativo: Las mismas ventajas de estructuración son<br />
aplicables a los programadores de sistemas y se ha comprobado que algunos<br />
sistemas operativos están implementados como un conjunto de procesos.<br />
Existen tres modelos de computadora en los que se pueden ejecutar procesos<br />
concurrentes:<br />
• Multiprogramación con un único procesador. El sistema operativo se encarga<br />
de ir repartiendo el tiempo del procesador entre los distintos procesos,<br />
intercalando la ejecución de los mismos para dar así una apariencia de<br />
ejecución simultánea.<br />
• Multiprocesador. Es una maquina formada por un conjunto de procesadores<br />
que comparten memoria principal. En este tipo de arquitecturas, los procesos<br />
concurrentes no sólo pueden intercalar su ejecución sino también<br />
superponerla.<br />
• Multicomputadora. Es una máquina de memoria distribuida, que está formada<br />
por una serie de computadoras. En este tipo de arquitecturas también es<br />
posible la ejecución simultánea de los procesos sobre los diferentes<br />
procesadores.<br />
En general, la concurrencia será aparente siempre que el número de procesos sea<br />
mayor que el de procesadores disponibles, es decir, cuando haya más de un proceso<br />
por procesador. La concurrencia será real cuando haya un proceso por procesador.<br />
46
[SISTEMAS OPERATIVOS]<br />
Aunque puede parecer que la intercalación y la superposición de la ejecución de<br />
procesos presentan formas de ejecución distintas, se verá que ambas pueden<br />
contemplase como ejemplos de procesos concurrentes.<br />
Existen diversas razones que motivan la ejecución de procesos concurrentes en un<br />
sistema:<br />
• Acelera los cálculos. Si se quiere que una tarea se ejecute con mayor rapidez,<br />
lo que se puede hacer es dividirla en procesos, cada uno de los cuales se<br />
ejecuta en paralelo con los demás.<br />
• Posibilita el uso interactivo a múltiples usuarios que trabajan de forma<br />
simultánea.<br />
• Permite un mejor aprovechamiento de los recursos, en especial de la CPU, ya<br />
que pueden aprovechar las fases de entrada-salida de unos procesos para<br />
realizar las fases de procesamiento de otros.<br />
Así como existen las razones que motivan la ejecución de procesos concurrentes,<br />
también existen sus contras:<br />
.<br />
• Inanición e interrupción de procesos<br />
• Ocurrencia de bloqueos<br />
• Que dos o más procesos requieran el mismo recurso (No apropiativo).<br />
TIPOS DE PROCESOS CONCURRENTES.<br />
Los procesos que ejecutan de forma concurrente en un sistema se pueden clasificar<br />
como:<br />
Proceso independiente: Es aquel que ejecuta sin requerir la ayuda o cooperación de<br />
otros procesos. Un claro ejemplo de procesos independientes son los diferentes shells<br />
que se ejecutan de forma simultánea en un sistema.<br />
47
[SISTEMAS OPERATIVOS]<br />
Procesos cooperantes: Son aquellos que están diseñados para trabajar<br />
conjuntamente en alguna actividad, para lo que deben ser capaces de comunicarse e<br />
interactuar entre ellos.<br />
En ambos tipos de procesos (independientes y cooperantes), puede producirse una<br />
serie de interacciones entre ellos y pueden ser de dos tipos:<br />
• Interacciones motivadas porque los procesos comparten o compiten por el<br />
acceso a recursos físicos o lógicos. Por ejemplo, dos procesos independientes<br />
compiten por el acceso a disco o para modificar una base de datos.<br />
• Interacción motivada porque los procesos se comunican y sincronizan entre sí<br />
para alcanzar un objetivo común, Por ejemplo, un compilador que tiene varios<br />
procesos que trabajan conjuntamente para obtener un solo archivo de salida.<br />
ELEMENTOS A GESTIONAR Y DISEÑAR A CAUSA DE LA CONCURRENCIA<br />
Se pueden enumerar los siguientes:<br />
1. El sistema operativo debe ser capaz de seguir la pista de los distintos procesos<br />
activos. Esto lo hace por medio de PBC’s (Bloque de Control de Procesos)<br />
2. El sistema operativo debe asignar y quitar los distintos recursos a cada proceso<br />
activo. Entre estos recursos se incluyen:<br />
• Tiempo de procesador: Es función de la planificación.<br />
• Memoria.<br />
• Archivos.<br />
• Dispositivos de E/S:<br />
3. El sistema operativo debe proteger los datos y los recursos físicos de cada proceso<br />
contra injerencias no intencionadas de otros procesos.<br />
4. Los resultados de un proceso deben ser independientes de la velocidad relativa a la<br />
que se realiza la ejecución con respecto a otros procesos concurrentes<br />
48
[SISTEMAS OPERATIVOS]<br />
2.5 Niveles objetivos y criterios de planificación<br />
NIVELES DE PLANIFICACIÓN<br />
.<br />
La planificación es el proceso por el cual el sistema operativo selecciona que proceso<br />
ejecutar. La selección del proceso se basa en alguno de los algoritmos de<br />
planificación.<br />
La planificación de la CPU, en el sentido de conmutarla entre los distintos procesos,<br />
es una de las funciones del sistema operativo. Este despacho es llevado a cabo por<br />
un pequeño programa llamado planificador a corto plazo o dispatcher (despachador).<br />
La misión del dispatcher consiste en asignar la CPU a uno de los procesos<br />
ejecutables del sistema, para ello sigue un determinado algoritmo.<br />
Los acontecimientos que pueden provocar la llamada al dispatcher dependen del<br />
sistema (son un subconjunto de las interrupciones), pero son alguno de estos:<br />
El proceso en ejecución acaba su ejecución o no puede seguir ejecutándose<br />
(por una E/S, operación WAIT, etc).<br />
Un elemento del sistema operativo ordena el bloqueo del proceso en ejecución<br />
El proceso en ejecución agota su cuantum o cuanto de estancia en la CPU.<br />
Un proceso pasa a estado listo.<br />
Hay que destacar el hecho de que cuanto menos se llame al dispatcher menos tiempo<br />
ocupa la CPU un programa del sistema operativo, y, por tanto, se dedica más tiempo<br />
a los procesos del usuario (un cambio de proceso lleva bastante tiempo).<br />
Así, si sólo se activa el dispatcher como consecuencia de los 2 primeros<br />
acontecimientos se estará haciendo un buen uso del procesador. Este criterio es<br />
acertado en sistemas por lotes en los que los programas no son interactivos. Sin<br />
embargo, en un sistema de tiempo compartido no es adecuado, pues un proceso que<br />
se dedicara a realizar cálculos, y no realizara E/S, monopolizaría el uso de la CPU. En<br />
estos sistemas hay que tener en cuenta el conjunto de todos los procesos,<br />
activándose el dispatcher con la circunstancia tercera y, posiblemente, la cuarta. Los<br />
sistema operativos en que las dos siguientes circunstancias no provocan la activación<br />
del dispatcher muestran preferencia por el proceso en ejecución, si no ocurre esto se<br />
tiene más en cuenta el conjunto de todos los procesos.<br />
49
[SISTEMAS OPERATIVOS]<br />
Se puede definir el scheduling -algunas veces traducido como -planificación- como el<br />
conjunto de políticas y mecanismos construidos dentro del sistema operativo que<br />
gobiernan la forma de conseguir que los procesos a ejecutar lleguen a ejecutarse.<br />
El scheduling está asociado a las cuestiones de:<br />
Cuándo introducir un nuevo proceso en el Sistema.<br />
Determinar el orden de ejecución de los procesos del sistema.<br />
El scheduling está muy relacionado con la gestión de los recursos. Existen tres niveles<br />
de scheduling, estos niveles son:<br />
Planificador de la CPU o a corto plazo.<br />
Planificador a medio plazo.<br />
Planificador a largo plazo.<br />
En la planificación de procesos se suelen incluir varios niveles, en función del periodo<br />
temporal que cubren:<br />
- PLANIFICACIÓN A LARGO PLAZO<br />
Este planificador está presente en algunos sistemas que admiten además de procesos<br />
interactivos trabajos por lotes. Usualmente, se les asigna una prioridad baja a los<br />
trabajos por lotes, utilizándose estos para mantener ocupados a los recursos del<br />
sistema durante períodos de baja actividad de los procesos interactivos.<br />
Normalmente, los trabajos por lotes realizan tareas rutinarias como el cálculo de<br />
nóminas; en este tipo de tareas el programador puede estimar su gasto en recursos,<br />
indicándoselo al sistema. Esto facilita el funcionamiento del planificador a largo plazo<br />
El objetivo primordial del planificador a largo plazo es el de dar al planificador de la<br />
CPU una mezcla equilibrada de trabajos, tales como los limitados por la CPU (utilizan<br />
mucho la CPU) o la E/S. Así, por ejemplo, cuando la utilización de la CPU es baja, el<br />
planificador puede admitir más trabajos para aumentar el número de procesos listos y,<br />
con ello, la probabilidad de tener algún trabajo útil en espera de que se le asigne la<br />
CPU. A la inversa, cuando la utilización de la CPU llega a ser alta, y el tiempo de<br />
respuesta comienza a reflejarlo, el planificador a largo plazo puede optar por reducir la<br />
frecuencia de admisión de trabajos.<br />
50
[SISTEMAS OPERATIVOS]<br />
Normalmente, se invoca al planificador a largo plazo siempre que un proceso termina.<br />
La frecuencia de invocación depende, pues, de la carga del sistema, pero<br />
generalmente es mucho menor que la de los otros dos planificadores. Esta baja<br />
frecuencia de uso hace que este planificador pueda permitirse utilizar algoritmos<br />
complejos, basados en las estimaciones de los nuevos trabajos.<br />
- PLANIFICACIÓN A MEDIANO PLAZO<br />
En los sistemas de multiprogramación y tiempo compartido varios procesos residen en<br />
la memoria principal. El tamaño limitado de ésta hace que el número de procesos que<br />
residen en ella sea finito. Puede ocurrir que todos los procesos en memoria estén<br />
bloqueados, desperdiciándose así la CPU. En algunos sistemas se intercambian<br />
procesos enteros (swap) entre memoria principal y memoria secundaria (normalmente<br />
discos), con esto se aumenta el número de procesos, y, por tanto, la probabilidad de<br />
una mayor utilización de la CPU.<br />
El planificador a medio plazo es el encargado de regir las transiciones de procesos<br />
entre memoria principal y secundaria, actúa intentando maximizar la utilización de los<br />
recursos. Por ejemplo, transfiriendo siempre a memoria secundaria procesos<br />
bloqueados, o transfiriendo a memoria principal procesos bloqueados únicamente por<br />
no tener memoria.<br />
- PLANIFICACIÓN A CORTO PLAZO<br />
Qué proceso será el que se ejecutará en el procesador en el instante siguiente.<br />
51
[SISTEMAS OPERATIVOS]<br />
Expulsión denota si un proceso acapara el procesador cuando está ejecutándose.<br />
Existen sistemas con y sin expulsión:<br />
a) Sin expulsión: un proceso conserva el uso del procesador mientras lo desee; es<br />
decir, mientras no solicite del SO un servicio que lo bloquee. Ventajas: minimiza<br />
tiempo de planificación. Inconvenientes: un proceso podría monopolizar el uso del<br />
procesador<br />
b) Con expulsión: el SO puede desalojar a un proceso del uso del procesador (sin<br />
que el proceso lo haya solicitado). Ventaja: control sobre el tiempo de ejecución de<br />
cada proceso. Inconveniente: gasto de tiempo.<br />
OBJETIVOS Y CRITERIOS DE PLANIFICACIÓN<br />
Los objetivos del planificador se resumen en:<br />
a) Reparto equitativo del tiempo de procesador<br />
b) Eficiencia en el uso del procesador<br />
c) Menor tiempo de respuesta en uso interactivo<br />
d) Cumplir plazos de ejecución de los sistemas de tiempo real<br />
El principal objetivo de la planificación a corto plazo es repartir el tiempo del<br />
procesador de forma que se optimicen algunos puntos del comportamiento del<br />
sistema. Generalmente se fija un conjunto de criterios con los que evaluar las diversas<br />
estrategias de planificación. El criterio más empleado establece dos clasificaciones.<br />
En primer lugar, se puede hacer una distinción entre los criterios orientados a los<br />
usuarios y los orientados al sistema. Los criterios orientados al usuario se refieren al<br />
comportamiento del sistema tal y como lo perciben los usuarios o los procesos.<br />
Uno de los parámetros es el tiempo de respuesta. El tiempo de respuesta es el<br />
periodo de tiempo transcurrido desde que se emite una solicitud hasta que la<br />
respuesta aparece en la salida. Sería conveniente disponer de una política de<br />
planificación que ofrezca un buen servicio a diversos usuarios.<br />
52
[SISTEMAS OPERATIVOS]<br />
Otros criterios están orientados al sistema, esto es, se centran en el uso efectivo y<br />
eficiente del procesador. Un ejemplo puede ser la productividad, es decir, el ritmo con<br />
el que los procesos terminan. La productividad es una medida muy válida del<br />
rendimiento de un sistema y que sería deseable maximizar.<br />
Otra forma de clasificación es considerar los criterios relativos al rendimiento del<br />
sistema y los que no lo son. Los criterios relativos al rendimiento son cuantitativos y,<br />
en general, pueden evaluarse o ser analizados fácilmente. Algunos ejemplos son el<br />
tiempo de respuesta y la productividad.<br />
Los criterios no relativos al rendimiento son, en cambio cualitativos y no pueden ser<br />
evaluados fácilmente. Un ejemplo de estos criterios es la previsibilidad. Sería<br />
conveniente que el servicio ofrecido a los usuarios tenga las mismas características<br />
en todo momento, independientemente de la existencia de otros trabajos ejecutados<br />
por el sistema.<br />
En particular, una disciplina de planificación debe:<br />
Ser equitativa: debe intentar hacer una planificación justa, esto es, se debe tratar a<br />
todos los procesos de la misma forma y no aplazar indefinidamente ningún proceso.<br />
La mejor forma de evitarlo es emplear alguna técnica de envejecimiento; es decir,<br />
mientras un proceso espera un recurso, su prioridad debe crecer.<br />
Ser eficiente: debe maximizar el uso de los recursos tales como intentar que la<br />
ocupación de la CPU sea máxima. Al mismo tiempo se debe intentar reducir el gasto<br />
extra por considerar que es trabajo no productivo. Normalmente el idear algoritmos<br />
eficientes supone invertir recursos en gestión del propio sistema.<br />
Lograr un tiempo bueno de respuesta, es decir, que los usuarios interactivos reciban<br />
respuesta en tiempos aceptables.<br />
Lograr un tiempo de proceso global predecible. Esto quiere decir que un proceso debe<br />
ejecutarse aproximadamente en el mismo tiempo y casi al mismo costo con<br />
independencia de la carga del sistema.<br />
Elevar al máximo la productividad o el rendimiento, esto es, maximizar el número de<br />
trabajos procesados por unidad de tiempo. Eso supone, por un lado, dar preferencia a<br />
los procesos que ocupan recursos decisivos y, por otro, favorecer a los procesos que<br />
53
[SISTEMAS OPERATIVOS]<br />
muestran un comportamiento deseable. En el primer caso conseguimos liberar el<br />
recurso cuanto antes para que esté disponible para un proceso de mayor prioridad.<br />
Con el segundo criterio escogemos a los procesos que no consumen muchos<br />
recursos dejándole al sistema mayor capacidad de actuación.<br />
Estos criterios son dependientes entre sí y es imposible optimizar todos de forma<br />
simultánea. Por ejemplo, obtener un buen tiempo de respuesta puede exigir un<br />
algoritmo de planificación que alterne entre los procesos con frecuencia, lo que<br />
incrementa la sobrecarga del sistema y reduce la productividad. Por tanto, en el<br />
diseño de una política de planificación entran en juego compromisos entre requisitos<br />
opuestos; el peso relativo que reciben los distintos requisitos dependerá de la<br />
naturaleza y empleo del sistema<br />
2.6 Técnicas de administración del planificador<br />
Las disciplinas de planificación pueden ser:<br />
• Expropiativas<br />
• No expropiativas<br />
Se denomina planificador al software del sistema operativo encargado de asignar los<br />
recursos de un sistema entre los procesos que los solicitan. Siempre que haya tomar<br />
una decisión, el planificador debe decidir cuál de los procesos que compiten por la<br />
posesión de un determinado recursos lo recibirá.<br />
Los algoritmos (técnicas) tienen distintas propiedades según los criterios en los que se<br />
basen para su construcción, lo cual se refleja en qué tipo de procesos se puede ver<br />
favorecido frente a otro en la disputa del procesador. Antes de realizar la elección de<br />
un algoritmo se debe considerar las propiedades de estos frente al criterio de diseño<br />
elegido. Algunos de estos son:<br />
a) Eficacia: Se expresa como un porcentaje del tiempo medio de utilización. Aunque<br />
puede parecer lógico intentar mantener este parámetro próximo al 100%, con un valor<br />
tan elevado otros aspectos importantes de medida del comportamiento del sistema<br />
pueden verse deteriorados, como por ejemplo el tiempo medio de espera.<br />
54
[SISTEMAS OPERATIVOS]<br />
b) Rendimiento: Es una medida del número de procesos completados por unidad de<br />
tiempo. Por ejemplo 10 procesos por segundo.<br />
c) Tiempo de retorno o regreso: Es el intervalo de tiempo que transcurre desde que un<br />
proceso se crea o presenta hasta que completa por el sistema.<br />
d) Tiempo de espera: Es el tiempo que el proceso espera hasta que se le concede el<br />
procesador. Puede resultar una medida más adecuada de la eficiencia del sistema, ya<br />
que se elimina de la media el tiempo que tarda en ejecutarse el mismo.<br />
e) Tiempo de respuesta a un evento: Se denomina así el intervalo de tiempo que<br />
transcurre desde que se señala un evento hasta que se ejecuta la primera instrucción<br />
de la rutina de servicio de dicho evento. El criterio de selección de un algoritmo se<br />
suele basar en la maximización o minimización de una función de los parámetros<br />
anteriores.<br />
55
[SISTEMAS OPERATIVOS]<br />
Unidad 3 Administración de memoria<br />
3.1 Política y filosofía<br />
Filosofía<br />
La memoria principal puede ser considerada como un arreglo lineal de localidades de<br />
almacenamiento de un byte de tamaño. Cada localidad de almacenamiento tiene<br />
asignada una dirección que la identifica.<br />
Una de las funciones básicas que debe implementar un SO es la Administración de la<br />
Memoria para tener un control sobre los lugares donde están almacenados los datos y<br />
procesos que actualmente se están utilizando.<br />
Sea cual sea el esquema de organización del almacenamiento que se adopte para un<br />
sistema específico es necesario decidir que estrategias se deben utilizar para obtener<br />
un rendimiento óptimo.<br />
Políticas<br />
FIFO: Los procesos se despachan de acuerdo a su tiempo de llega a la cola de<br />
procesos listos, si un proceso llega al procesador sale hasta que termine. La política<br />
FIFO actualmente no se usa como el esquema principal de un sistema, pero si por<br />
ejemplo cuando se usa una política de prioridades y hay procesos con la misma<br />
prioridad, a estos se les podría aplicar FIFO.<br />
Round Robin: Los procesos se despachan en la forma que lo hace el FIFO, pero se<br />
les asigna una cantidad limitada de tiempo (CUANTUM) en el procesador, si no<br />
termina en ese lapso se manda al final de la lista de procesos listos.<br />
56
[SISTEMAS OPERATIVOS]<br />
SJF (Shortest job first - Prioridad del trabajo más corto): Se ejecuta primero el proceso<br />
en espera que tiene el menor tiempo estimado. SJF favorece a los procesos cortos, ya<br />
que los largos podrían llegar a rezagarse mucho tiempo e incluso nunca ejecutarse.<br />
SRT (Sortest remaining time scheduling ? Tiempo restante más corto. En SJF una vez<br />
que un proceso comienza su ejecución continúa hasta terminar. En SRT, un proceso<br />
en ejecución puede ser desposeído por uno nuevo de menor tiempo de ejecución.<br />
HRN: (highest response ratio next - Prioridad de la tasa de respuesta más alta):<br />
Política no apropiatíva que corrige el retraso excesivo de procesos grandes que<br />
produce el SJF, para así no caer en un favoritismo excesivo por los procesos cortos,<br />
lo logra usando una formula basada en el tiempo de espera y el tiempo de servicio,<br />
con lo cual la prioridad de cada trabajo no solo está en función del tiempo de servicio<br />
sino también del tiempo que ha esperado para ser atendido.(Ver Figura(5))<br />
57
3.2 Memoria real<br />
[SISTEMAS OPERATIVOS]<br />
La memoria real o principal es en donde son ejecutados los programas y procesos de<br />
una computadora y es el espacio real que existe en memoria para que se ejecuten los<br />
procesos.<br />
Por lo general esta memoria es de mayor costo que la memoria secundaria, pero el<br />
acceso a la información contenida en ella es de más rápido acceso.<br />
Solo la memoria cache es más rápida que la principal, pero su costo es a su vez<br />
mayor.<br />
Cuando no existe memoria virtual no hay diferenciación entre el espacio de<br />
direcciones y la memoria real; el espacio de direcciones que puede ser usado en los<br />
programas tiene idéntico tamaño al espacio de memoria real posible. Si se utiliza<br />
memoria virtual, el espacio de direcciones disponibles para los programas es aquel<br />
determinado por el tamaño de la memoria virtual implementada y no el espacio de<br />
direcciones provisto por la memoria real disponible (el espacio de la memoria virtual<br />
será mayor que el de la memoria real).<br />
La organización y administración de la “memoria principal”, “memoria primaria” o<br />
“memoria real” de un sistema ha sido y es uno de los factores más importantes en el<br />
diseño de los S. O. (Ver la figura 3.2.1)<br />
Los términos “memoria” y “almacenamiento” se consideran equivalentes.<br />
Los programas y datos deben estar en el almacenamiento principal para:<br />
Poderlos ejecutar. Referenciarlos directamente<br />
58
[SISTEMAS OPERATIVOS]<br />
3.3 Organización de memoria virtual<br />
La memoria virtual es una técnica para proporcionar la simulación de un espacio de<br />
memoria mucho mayor que la memoria física de una máquina. Esta ilusión permite<br />
que los programas se hagan sin tener en cuenta el tamaño exacto de la memoria<br />
física.<br />
La memoria virtual ha llegado a ser un componente esencial de la mayoría de los S.O<br />
actuales. Y como en un instante dado, en la memoria solo se tienen unos pocos<br />
fragmentos de un proceso dado, se pueden mantener más procesos en la memoria.<br />
La memoria virtual también simplifica la carga del programa para su ejecución llamado<br />
reubicación, este procedimiento permite que el mismo programa se ejecute en<br />
cualquier posición de la memoria física.<br />
3.4 Administración de memoria virtual<br />
La clave del concepto de memoria (almacenamiento) virtual está en la disociación:<br />
De las direcciones a las que hace referencia un programa.<br />
De las direcciones disponibles en la memoria real (almacenamiento primario).<br />
59
[SISTEMAS OPERATIVOS]<br />
Unidad 4 Administración de entrada salida<br />
4.1 Dispositivos y manejadores de dispositivos: device drivers<br />
Dispositivos de entrada/salida<br />
Se pueden clasificar en dos grandes categorías:<br />
1. Dispositivos de bloque<br />
2. Dispositivos de carácter<br />
Las principales características de los dispositivos de bloque son:<br />
- La información se almacena en bloques de tamaño fijo.<br />
- Cada bloque tiene su propia dirección.<br />
- Los tamaños más comunes de los bloques van desde los 128 bytes hasta los<br />
1.024 bytes.<br />
- Se puede leer o escribir en un bloque de forma independiente de los demás, en<br />
cualquier momento.<br />
- Un ejemplo típico de dispositivos de bloque son los discos.<br />
Las principales características de los dispositivos de carácter son:<br />
- La información se transfiere como un flujo de caracteres, sin sujetarse a una<br />
estructura de bloques.<br />
- No se pueden utilizar direcciones.<br />
- No tienen una operación de búsqueda.<br />
- Unos ejemplos típicos de dispositivos de carácter son las impresoras de línea,<br />
terminales, interfaces de una red, ratones, etc.<br />
Manejadores de Dispositivos<br />
Todo el código que depende de los dispositivos aparece en los manejadores de<br />
dispositivos<br />
60
[SISTEMAS OPERATIVOS]<br />
Cada controlador posee uno o más registros de dispositivos:<br />
- Se utilizan para darle los comandos.<br />
- Los manejadores de dispositivos proveen estos comandos y verifican su<br />
ejecución adecuada.<br />
La labor de un manejador de dispositivos es la de:<br />
- Aceptar las solicitudes abstractas que le hace el software independiente del<br />
dispositivo.<br />
- Verificar la ejecución de dichas solicitudes.<br />
Si al recibir una solicitud el manejador está ocupado con otra solicitud, agregara la<br />
nueva solicitud a una cola de solicitudes pendientes.<br />
La solicitud de e / s, por ej. Para un disco, se debe traducir de términos abstractos a<br />
términos concretos:<br />
El manejador de disco debe:<br />
Estimar el lugar donde se encuentra en realidad el bloque solicitado.<br />
Verificar si el motor de la unidad funciona.<br />
Verificar si el brazo está colocado en el cilindro adecuado, etc.<br />
Resumiendo: debe decidir cuáles son las operaciones necesarias del<br />
controlador y su orden.<br />
61
[SISTEMAS OPERATIVOS]<br />
Envía los comandos al controlador al escribir en los registros de dispositivo del<br />
mismo.<br />
Frecuentemente el manejador del dispositivo se bloquea hasta que el<br />
controlador realiza cierto trabajo; una interrupción lo libera de este bloqueo.<br />
Al finalizar la operación debe verificar los errores.<br />
Si todo esta o.k. transferirá los datos al software independiente del dispositivo.<br />
Regresa información de estado sobre los errores a quien lo llamo.<br />
Inicia otra solicitud pendiente o queda en espera.<br />
4.2 Mecanismos y funciones de los manejadores de dispositivos:<br />
device drivers<br />
Funciones generalmente realizadas por el software independiente del dispositivo:<br />
Interfaz uniforme para los manejadores de dispositivos.<br />
Nombres de los dispositivos.<br />
Protección del dispositivo.<br />
Proporcionar un tamaño de bloque independiente del dispositivo.<br />
Uso de buffer.<br />
Asignación de espacio en los dispositivos por bloques.<br />
Asignación y liberación de los dispositivos de uso exclusivo.<br />
Informe de errores.<br />
Las funciones básicas del software independiente del dispositivo son:<br />
Efectuar las funciones de e / s comunes a todos los dispositivos.<br />
Proporcionar una interfaz uniforme del software a nivel usuario.<br />
El software independiente del dispositivo asocia los nombres simbólicos de los<br />
dispositivos con el nombre adecuado.<br />
Un nombre de dispositivo determina de manera única el nodo-i de un archivo especial:<br />
Este nodo-i contiene el número principal del dispositivo, que se utiliza para<br />
localizar el manejador apropiado.<br />
62
[SISTEMAS OPERATIVOS]<br />
El nodo-i contiene también el número secundario de dispositivo, que se<br />
transfiere como parámetro al manejador para determinar la unidad por leer o<br />
escribir.<br />
El software independiente del dispositivo debe:<br />
Ocultar a los niveles superiores los diferentes tamaños de sector de los<br />
distintos discos.<br />
Proporcionar un tamaño uniforme de los bloques, por ej.: considerar varios<br />
sectores físicos como un solo bloque lógico.<br />
4.3 <strong>Estructuras</strong> de datos para manejo de dispositivos<br />
¿Qué es una estructura?<br />
Los sistemas operativos actuales son grandes y complejos, estos deben poseer una<br />
ingeniería correcta para su fácil actualización y para que puedan cumplir su función<br />
correctamente. La estructura es generalmente modular, cada modulo cumple una<br />
función determinada e interactúa con los demás módulos.<br />
Estructura simple<br />
El sistema MS-DOS es, sin duda, el mejor sistema operativo para microcomputadoras.<br />
Sin embargo, sus interfaces y niveles de funcionalidad no están bien definidos. Los<br />
programas de aplicación pueden acceder a operaciones básicas de entrada / salida<br />
para escribir directamente en pantalla o discos. Este libre acceso, hace que el sistema<br />
sea vulnerable, ya que un programa de aplicación puede eliminar por completo un<br />
disco rígido por alguna falla. Además este sistema, también está limitado al hardware<br />
sobre el que corre.<br />
Otra estructura simple es la utilizada por la versión original de UNIX, esta consiste de<br />
dos partes separadas, el kernel y los programas de sistemas. El kernel fue<br />
posteriormente separado en manejadores (drivers) de dispositivos y una serie de<br />
interfaces. El kernel provee el sistema de archivos, la programación de CPU, el<br />
administrador de memoria y otras funciones del sistema operativo que responden a<br />
las llamadas del sistema enunciadas anteriormente.<br />
63
Estructura por capas (layers)<br />
[SISTEMAS OPERATIVOS]<br />
Las nuevas versiones de UNIX se diseñaron para hardware mas avanzado. Para dar<br />
mayor soporte al hardware, los sistemas operativos se dividieron en pequeñas partes.<br />
Ahora los sistemas operativos tienen mayor control sobre el hardware y las<br />
aplicaciones que se ejecutan sobre este.<br />
La modularización de un sistema se puede presentar de varias formas, la mas<br />
utilizada es la de capas, la cual consiste en dividir al sistema operativo en un numero<br />
de capas. La capa de menor nivel es el hardware y la de mayor nivel es la interfaz con<br />
el usuario.<br />
La principal ventaja es que cada capa cumple con una serie de funciones y servicios<br />
que brinda a las otras capas, esto permite una mejor organización del sistema<br />
operativo y una depuración más fácil de este.<br />
Cada capa se implementa solo utilizando las operaciones provistas por la capa de<br />
nivel inferior. Una capa no necesita saber cómo se implementan estas funciones, solo<br />
necesita saber que operaciones puede realizar.<br />
4.4 Operaciones de Entrada salida<br />
Funciones que realizan<br />
Vamos a señalar las funciones que debe realizar una computadora para ejecutar<br />
trabajos de entrada/salida:<br />
- Direccionamiento o selección del dispositivo que debe llevar a cabo la operación<br />
de E/S.<br />
- Transferencia de los datos entre el procesador y el dispositivo (en uno u otro<br />
sentido).<br />
- Sincronización y coordinación de las operaciones.<br />
Esta última función es necesaria debido a la deferencia de velocidades entre los<br />
dispositivos y la CPU y a la independencia que debe existir entre los periféricos y la<br />
CPU (por ejemplo, suelen tener relojes diferentes).<br />
64
[SISTEMAS OPERATIVOS]<br />
Se define una transferencia elemental de información como la transmisión de una sola<br />
unidad de información (normalmente un byte) entre el procesador y el periférico o<br />
viceversa. Para efectuar una transferencia elemental de información son precisas las<br />
siguientes funciones:<br />
- Establecimiento de una comunicación física entre el procesador y el periférico<br />
para la transmisión de la unidad de información.<br />
- Control de los periféricos, en que se incluyen operaciones como prueba y<br />
modificación del estado del periférico. Para realizar estas funciones la CPU<br />
gestionara las líneas de control necesarias.<br />
Definiremos una operación de E/S como el conjunto de acciones necesarias para la<br />
transferencia de un conjunto de datos (es decir, una transferencia completa de datos).<br />
Para la realización de una operación de E/S se deben efectuar las siguientes<br />
funciones:<br />
- Recuento de las unidades de información transferidas (normalmente bytes) para<br />
reconocer el fin de operación.<br />
- Sincronización de velocidad entre la CPU y el periférico.<br />
- Detección de errores (e incluso corrección) mediante la utilización de los códigos<br />
necesarios (bits de paridad, códigos de redundancia cíclica, etc.)<br />
- Almacenamiento temporal de la información. Es más eficiente utilizar un buffer<br />
temporal específico para las operaciones de E/S que utilizan el área de datos del<br />
programa.<br />
- Conversión de códigos, conversión serie/paralelo, etc.<br />
65
[SISTEMAS OPERATIVOS]<br />
Unidad 5 <strong>Sistemas</strong> de archivos<br />
5.1 Concepto de <strong>Sistemas</strong> de archivos<br />
Son los algoritmos y estructuras lógicas utilizadas para poder acceder a la información<br />
que tenemos en el disco. Cada uno de los sistemas operativos crea estas estructuras<br />
y logaritmos de diferente manera independientemente del hardware.<br />
El desempeño de nuestro disco duro, la confiabilidad, seguridad, capacidad de<br />
expansión y la compatibilidad, estará en función de estas estructuras lógicas.<br />
Fat 12: Es el sistema de archivos de DOS, y es con el que formateamos los<br />
disquetes. Fue muy utilizado en las primeras PCs.<br />
Fat 16: Este sistema de archivos tenía muchas limitaciones, por ejemplo si el disco<br />
duro era mayor de 2 GB, era imposible particionarlos y no usaba nombre largos en los<br />
archivos, solo 8 caracteres.<br />
Fat 32: Fue utilizado a partir de 1997, y pudo ser utilizado en Windows 98, pero a<br />
medida que el tamaño de los discos duros se incrementaba, surgieron nuevas<br />
limitaciones. Se llamó Fat32, por que utiliza números de 32 bits para representar a los<br />
clusters en lugar de los 16 en los sistemas anteriores.<br />
NTFS<br />
Especialmente creado para usarlo en Windows NT, es<br />
más complejo que los FAT. El propósito era satisfacer la<br />
demanda y necesidades de seguridad y eficacia para<br />
servidores y otras aplicaciones en red. No tiene<br />
limitaciones de tamaño clusters y en general en el disco.<br />
Una ventaja de este sistema de archivos es que tiene un sistema anti fragmentación.<br />
Especialmente creado para usarlo en Windows NT, es mas complejo que los FAT. El<br />
propósito era satisfacer la demanda y necesidades de de seguridad y eficacia para<br />
servidores y otras aplicaciones en red. No tiene limitaciones de tamaño clusters y en<br />
general en el disco. Una ventaja de este sistema de archivos es que tiene un sistema<br />
antifragmentación.<br />
66
LINUX<br />
[SISTEMAS OPERATIVOS]<br />
Este sistema de archivos trabaja de manera totalmente distinta,<br />
las particiones del disco se colocan en el directorio raíz. Podemos<br />
incluso tener diferentes particiones y cada una de ellas tener su<br />
propio sistema de archivos.<br />
Este sistema de archivos trabaja de manera totalmente distinta,<br />
las particiones del disco se colocan en el directorio raíz. Podemos<br />
incluso tener diferentes particiones y cada una de ellas tener su propio sistema de<br />
archivos.<br />
En computación, un sistema de archivos es un método para el almacenamiento y<br />
organización de archivos de computadora y los datos que estos contienen, para hacer<br />
más fácil la tarea encontrarlos y accederlos. Los sistemas de archivos son usados en<br />
dispositivos de almacenamiento como discos duros y CD-ROM e involucran el<br />
mantenimiento de la localización física de los archivos.<br />
Más formalmente, un sistema de archivos es un conjunto de tipo de datos abstractos<br />
que son implementados para el almacenamiento, la organización jerárquica, la<br />
manipulación, el acceso, el direccionamiento y la recuperación de datos. Los sistemas<br />
de archivos comparten mucho en común con la tecnología de las bases de datos.<br />
Los sistemas de archivos pueden ser representados de forma textual (ej.: el shell de<br />
DOS) o gráficamente (ej.: Explorador de archivos en Windows) utilizando un gestor de<br />
archivos.<br />
El software del sistema de archivos se encarga de organizar los archivos (que suelen<br />
estar segmentados físicamente en pequeños bloques de pocos bytes) y directorios,<br />
manteniendo un registro de qué bloques pertenecen a qué archivos, qué bloques no<br />
se han utilizado y las direcciones físicas de cada bloque.<br />
Los sistemas de archivos pueden ser clasificados en tres categorías: sistemas de<br />
archivo de disco, sistemas de archivos de red y sistemas de archivos de propósito<br />
especial.<br />
67
[SISTEMAS OPERATIVOS]<br />
Ejemplos de sistemas de archivos son: FAT, UMSDOS, NTFS, UDF, ext2, ext3, ext 4,<br />
ReiserFS, XFS, etc.<br />
5.2 Noción de archivo real y virtual<br />
Un archivo virtual, es un archivo de uso temporal que es<br />
utilizado por los procesos del sistema mientras se están<br />
ejecutando dichos procesos.<br />
Estos archivos se crean durante la ejecución de un sistema y los utiliza para el<br />
almacenamiento de información, intercambio y organización mientras se ejecuta el<br />
sistema, su tamaño es muy variable y terminan al detener la ejecución del sistema,<br />
muchos de ellos son borrados, por ejemplo, los archivos *.tmp<br />
Se le conoce como archivo virtual, aquel que contiene los datos generados por el<br />
usuario.<br />
tamaño en bytes.<br />
Archivo Real: Es un objeto que contiene programas,<br />
datos o cualquier otro elemento.<br />
Un archivo se muestra de manera real, en la<br />
información del espacio que ocupa en un disco duro o<br />
sistema de almacenamiento, en otras palabras su<br />
68
[SISTEMAS OPERATIVOS]<br />
5.3 Componentes de un sistema de archivos<br />
Lo conforman todas aquellas rutinas encargadas de administrar todos los aspectos<br />
relacionados con el manejo de Archivos.<br />
En UNIX se define un File System como un sistema de software dedicado a la<br />
creación, destrucción, organización y lectura, escritura y control de acceso de los<br />
archivos, funcionalmente los componentes de un sistema de archivos son lenguajes<br />
de comandos, interpretador de comandos, manejador del almacenamiento secundario,<br />
sistema de entrada y salida y mecanismos de respaldo y recuperación.<br />
En general, un Sistema de Archivos está compuesto por: Métodos De Acceso,<br />
Administración De Archivos, Administración De Almacenamiento Secundario,<br />
Mecanismos De Integridad.<br />
Métodos De Acceso. Se ocupan de la manera en que se tendrá acceso a la<br />
información almacenada en el archivo. Ejemplo: Secuencial, Directo, indexado, etc.<br />
Administración De Archivos. Se ocupa de ofrecer los mecanismos para almacenar,<br />
compartir y asegurar archivos, así como para hacer referencia a ellos.<br />
Administración De Almacenamiento Secundario. Se ocupa de asignar espacio<br />
para los archivos en los dispositivos de almacenamiento secundario. En la siguiente<br />
figura se muestra un ejemplo de la administración de espacio en un disco duro.<br />
69
[SISTEMAS OPERATIVOS]<br />
Mecanismos De Integridad. Se ocupan de garantizar que no se corrompa la<br />
información de un archivo, de tal manera que solo la información que deba estar en el,<br />
se encuentre ahí.<br />
Mecanismos de Organización Lógica. Contiene las diferentes rutinas y comandos a<br />
través de los cuales el usuario podrá estructurar sus archivos virtuales.<br />
Directorio de Identificadores. Convierte los identificadores simbólicos de los<br />
archivos en identificadores internos, los cuales apuntarán a su descriptor o a una<br />
estructura que permite encontrar el archivo.<br />
<strong>Sistemas</strong> Teóricos de Archivos. Su objetivo es el de activar y desactivar a través de<br />
las rutinas de abrir y cerrar archivos y verifica el modo de acceso.<br />
Mecanismos de Organización Física. Traslada las direcciones lógicas en<br />
direcciones físicas correspondientes a las estructuras de memoria secundaria y los<br />
buffers en memoria principal necesarios para la transferencia de datos.<br />
Mecanismos de E/S. Por cada petición de acceso al archivo real, este mecanismo<br />
genera la secuencia de operaciones elementales de entrada y salida que se necesita.<br />
SCHEDULING E/S. En este nivel<br />
es donde se tiene el número de<br />
peticiones pendientes así como de<br />
las que se están realizando y lleva<br />
el control y asignación de tiempo<br />
de CPU a las diferentes peticiones<br />
de E/S.<br />
70
5.4 Organización lógica y física<br />
[SISTEMAS OPERATIVOS]<br />
Organización de Archivos: Se refiere a las diferentes maneras en las que puede ser<br />
organizada la información de los archivos, así como las diferentes maneras en que<br />
ésta puede ser accesada. Dado que hay 2 niveles de visión de los archivos (físico y<br />
lógico), se puede hablar también de 2 aspectos de organización de archivos:<br />
Organización de archivos lógicos y de archivos físicos.<br />
El sistema de archivos está relacionado especialmente con la administración del<br />
espacio de almacenamiento secundario, fundamentalmente con el almacenamiento de<br />
disco.<br />
Una forma de organización de un sistema de archivos puede ser la siguiente:<br />
Se utiliza una “raíz” para indicar en qué parte del disco comienza el “directorio raíz ” .<br />
El “directorio raíz” apunta a los “directorios de usuarios”.<br />
Un “directorio de usuario” contiene una entrada para cada uno de los archivos del<br />
usuario.<br />
Cada entrada de archivo apunta al lugar del disco donde está almacenado el archivo<br />
referenciado.<br />
Esta forma de organización se muestra en la Figura anterior.<br />
71
[SISTEMAS OPERATIVOS]<br />
Los nombres de archivos solo necesitan ser únicos dentro de un directorio de usuario<br />
dado.<br />
El nombre del sistema para un archivo dado debe ser único para el sistema de<br />
archivos.<br />
En sistemas de archivo “jerárquicos” el nombre del sistema para un archivo suele<br />
estar formado como el “nombre de la trayectoria” del directorio raíz al archivo.<br />
Organización lógica.<br />
La mayoría de las computadoras organizan los archivos en jerarquías llamadas<br />
carpetas, directorios o catálogos. (El concepto es el mismo independientemente de la<br />
terminología usada.) Cada carpeta puede contener un número arbitrario de archivos, y<br />
también puede contener otras carpetas. Las otras carpetas pueden contener todavía<br />
más archivos y carpetas, y así sucesivamente, construyéndose un estructura en árbol<br />
en la que una «carpeta raíz» (el nombre varía de una computadora a otra) puede<br />
contener cualquier número de niveles de otras carpetas y archivos. A las carpetas se<br />
les puede dar nombre exactamente igual que a los archivos (excepto para la carpeta<br />
raíz, que a menudo no tiene nombre). El uso de carpetas hace más fácil organizar los<br />
archivos de una manera lógica.<br />
La mayor parte de las estructuras de organizaciones alternativas de archivos se<br />
encuentran dentro de estas cinco categorías:<br />
Pilas<br />
Es la forma más fácil de organizar un archivo. Los<br />
datos se recogen en el orden en que llegan.<br />
Su objetivo es simplemente acumular una masa de<br />
datos y guardarla.<br />
Los registros pueden tener campos diferentes o<br />
similares en un orden distinto. Cada campo debe ser autodescriptivo, incluyendo tanto<br />
un campo de nombre como el valor. La longitud de cada campo debe indicarse<br />
implícitamente con delimitadores, explícitamente incluidos como un subcampo más.<br />
72
[SISTEMAS OPERATIVOS]<br />
El acceso a los registros se hace por búsquedas exhaustiva y son fáciles de<br />
actualizar. Si se quiere encontrar un registro que contiene un campo particular y un<br />
valor determinado, es necesario examinar cada registro de la pila hasta encontrar el<br />
registro deseado. Si se quieren encontrar todos los registros que contienen un campo<br />
particular o que tienen un valor determinado para ese campo, debe buscarse el<br />
archivo entero.<br />
Se aplica cuando los datos se recogen o almacenan antes de procesarlos o cuando<br />
no son fáciles de organizar. Esta clase de archivo aprovecha bien el espacio cuando<br />
los datos almacenados varían en tamaño y estructura. Fuera de estos usos limitados,<br />
este tipo de archivos no se adapta a la mayoría de las aplicaciones.<br />
Archivos secuenciales<br />
Es la forma más común de estructura de archivos. Se emplea<br />
un formato fijo para los registros, son de la misma longitud y<br />
constan del mismo número de campos de tamaño fijo con un<br />
orden determinado.<br />
Se necesita almacenar los valores de cada campo; el nombre<br />
del campo y la longitud de cada uno son atributos de la<br />
estructura del archivo. Cada registro tiene un campo clave que lo identifica<br />
(generalmente es el primero de cada registro). Los registros se almacenan en<br />
secuencia por la clave.<br />
Se utilizan normalmente en aplicaciones de procesos por lotes, ya que es la única<br />
organización de archivos que se puede guardar tanto en cintas como en discos.<br />
Para las aplicaciones interactivas que incluyen peticiones o actualizaciones de<br />
registros individuales, los archivos secuenciales no son óptimos. El acceso requiere<br />
una búsqueda secuencial de correspondencias con la clave. Si el archivo entero o<br />
gran parte de él pueden traerse a la memoria principal de una sola vez, se podrán<br />
aplicar técnicas de búsquedas más eficientes. Al acceder un registro de un archivo<br />
secuencial grande, se produce un procesamiento extra y un retardo considerable.<br />
73
[SISTEMAS OPERATIVOS]<br />
La organización física del archivo en una cinta o disco se corresponde exactamente<br />
con la organización lógica del archivo, por lo tanto el procedimiento habitual es ubicar<br />
los nuevos registros en un archivo de pila separado, es llamado archivo de registro o<br />
archivo de transacciones.<br />
Una alternativa es organizar físicamente el archivo secuencial como una lista<br />
enlazada, en cada bloque físico se almacena uno o más registros y cada bloque del<br />
disco contienen un puntero al bloque siguiente. La inserción de un nuevo registro<br />
implica la manipulación de puntero, pero no requiere que el nuevo registro ocupe una<br />
posición particular del bloque físico.<br />
Archivos secuenciales indexados<br />
Los registros se organizan en una secuencia<br />
basada en un campo clave presentando dos<br />
características, un índice del archivo para<br />
soportar los accesos aleatorios y un archivo de<br />
desbordamiento. El índice proporciona una<br />
capacidad de búsqueda para llagar rápidamente<br />
al registro deseado y el archivo de<br />
desbordamiento es similar al archivo de<br />
registros usado en un archivo secuencial, pero está integrado de forma que los<br />
archivos de desbordamiento se ubiquen siguiendo un puntero desde su registro<br />
predecesor.<br />
La estructura más simple tiene como índice un archivo secuencial simple, cada<br />
registro del archivo índice tiene dos campos, un campo clave igual al del archivo<br />
principal y un puntero al archivo principal. Para encontrar un campo especifico se<br />
busca en el índice hasta encontrar el valor mayor de la clave que es iguale o precede<br />
al valor deseado de la clave, la búsqueda continua en el archivo principal a partir de la<br />
posición que indique el puntero.<br />
Cada registro del archivo principal tiene un campo adicional que es un puntero al<br />
archivo de desbordamiento. Cuando se inserta un nuevo registro al archivo, también<br />
se añade al archivo de desbordamiento. El registro del archivo principal que precede<br />
inmediatamente al nuevo registro según la secuencia lógica se actualiza con un<br />
puntero del registro nuevo en el archivo de desbordamiento, si el registro<br />
74
[SISTEMAS OPERATIVOS]<br />
inmediatamente anterior está también en el archivo de desbordamiento se actualizará<br />
el puntero en el registro.<br />
Para procesar secuencialmente un archivo completo los registros del archivo principal<br />
se procesarán en secuencia hasta encontrar un puntero al archivo de desbordamiento,<br />
el acceso continúa en el archivo de desbordamiento hasta que encuentra un puntero<br />
nulo, entonces renueva el acceso donde se abandonó en el archivo principal.<br />
Archivos indexados<br />
A los registros se accede solo a través de<br />
sus índices. No hay resticción en la<br />
ubicación de los registros, al menos un<br />
índice contiene un puntero a cada<br />
registro y pueden emplearse registros de<br />
longitud variable.<br />
Se suelen utilizar dos tipos de índices,<br />
uno exhaustivo que contiene una entrada<br />
para cada registro del archivo principal y<br />
se organiza como un archivo secuencial<br />
para facilitar la búsqueda, el otro índice es parcial que contiene entrada a los registros<br />
donde esté el campo de interés.<br />
Con registro de longitud variable, algunos registros no contendrán todos los campos y<br />
cuando se añade un registro al archivo principal, todos los archivos de índices deben<br />
actualizarse.<br />
Archivos directos o de dispersión<br />
Explotan la capacidad de los discos para acceder directamente a cualquier bloque de<br />
dirección conocida.<br />
Se requiere un campo clave en cada registro.<br />
75
[SISTEMAS OPERATIVOS]<br />
Los archivos directos son muy usados donde se necesita un acceso muy rápido,<br />
donde se usan registros de longitud fija y donde siempre se accede a los registros de<br />
una vez.<br />
Organización física.<br />
Los datos son arreglados por su adyacencia física, es decir, de acuerdo con el<br />
dispositivo de almacenamiento secundario. Los registros son de tamaño fijo o de<br />
tamaño variable y pueden organizarse de varias formas para constituir archivos<br />
físicos.<br />
Cinta magnética.<br />
En este dispositivo el archivo físico está formado por un conjunto de registros físicos, y<br />
los bloques están organizados en forma consecutiva, ya que se asigna en igual forma.<br />
Además tales registros puede contener etiquetas que permitan un mayor control sobre<br />
los datos almacenados, y son las siguientes:<br />
- Etiqueta de volumen.- Contiene información que permite identificar la cinta, el<br />
nombre del propietario y cualquier información general requerida.<br />
- Etiqueta de archivo.- Se utilizan por pares para indicar el inicio y fin del archivo,<br />
contiene información acerca del nombre del archivo, fecha de creación.<br />
- Etiqueta de usuario.- Sirven para guardar información adicional de importancia para<br />
el usuario; no son procesados por el sistema operativo.<br />
Discos Magnéticos.<br />
El archivo físico en un disco es una colección de registros físicos de igual tamaño, los<br />
cuales pueden estar organizados en forma consecutiva, ligada o con una tabla de<br />
mapeo.<br />
En la organización contigua, el archivo utiliza registros físicos contiguos, siguiendo la<br />
secuencia normal de direcciones.<br />
76
[SISTEMAS OPERATIVOS]<br />
La organización encadenada consiste un conjunto de bloques, cada uno de los cuales<br />
tiene un campo destinado para indicar la dirección del siguiente registro, o sea, para lo<br />
que se ha llamado enlace o liga.<br />
Otra forma de organización es la tabla de mapeo que consiste en una tabla de<br />
apuntadores a los registros físicos que forman el archivo.<br />
La organización física de un archivo en el almacenamiento secundario depende de la<br />
estrategia de agrupación y de la estrategia de asignación de archivos.<br />
Para elegir una organización de archivos se deben tener en cuenta ciertos criterios:<br />
Si un archivo va a procesar solamente por lotes, accediendo cada vez a todos los<br />
registros, entonces el acceso rápido para la recuperación de un único registro es una<br />
preocupación mínima. Un archivo almacenado en CD-ROM nunca será actualizado,<br />
por lo que la facilidad de actualización no se considera. Para la economía de<br />
almacenamiento, debería existir una mínima redundancia de los datos, ésta<br />
redundancia es el medio fundamental para incrementar la velocidad de acceso a los<br />
datos.<br />
Este tipo de organización muestra a su vez, 2 aspectos importantes: Métodos De<br />
Asignación De Espacio Libre y Asignación De Espacio De Almacenamiento Del<br />
Archivo.<br />
METODOS DE ASIGNACION DE ESPACIO LIBRE<br />
Un método de asignación de espacio libre determina la manera en que un Sistema<br />
Operativo controla los lugares del disco que no están siendo ocupados.<br />
Para el control del espacio libre se puede utilizar como base alguno de los métodos<br />
teóricos: Vector de Bits, Lista Ligada, Por Agrupación y por Contador.<br />
VECTOR DE BITS<br />
Se tiene un arreglo de bits, el número de bits que tiene, representa cada sector del<br />
disco, o sea que si los sectores 10 y 11 están ocupados su representación será:<br />
77
LISTA LIGADA<br />
[SISTEMAS OPERATIVOS]<br />
Existe una cabecera en la que se tiene la dirección del primer sector vacío, ese sector<br />
a su vez, tiene un apuntador al siguiente bloque, y así sucesivamente hasta que se<br />
encuentre una marca indicando que ya no hay espacio libre, tal y como se muestra en<br />
la siguiente figura.<br />
POR AGRUPACION<br />
Es similar a la lista ligada, solo que en este se tiene por cada sector, un grupo de<br />
apuntadores a varios espacios vacíos, al final de cada bloque se tiene un apuntador a<br />
otro grupo de apuntadores, observe la figura.<br />
78
POR CONTADOR<br />
[SISTEMAS OPERATIVOS]<br />
Aquí, por cada conjunto de bloques contiguos que estén vacíos, se tiene por cada<br />
apuntador, un número de inicio y el tamaño del grupo de sectores vacíos.<br />
79
[SISTEMAS OPERATIVOS]<br />
MÉTODOS DE ASIGNACIÓN DE ESPACIO EN DISCO.<br />
Un método de asignación de espacio en disco determina la manera en que un<br />
Sistema Operativo controla los lugares del disco ocupados por cada archivo de datos.<br />
Se debe controlar básicamente la identificación del archivo, sector de inicio y sector<br />
final.<br />
Para el control del espacio ocupado en disco se puede utilizar como base alguno de<br />
los métodos teóricos: Asignación Contigua, Asignación Ligada, Asignación Indexada.<br />
ASIGNACIÓN CONTIGUA.<br />
Este método consiste en asignar el espacio en disco de tal manera que las<br />
direcciones de todos los bloques correspondientes a un archivo definen un orden<br />
lineal. Por ejemplo:<br />
VENTAJAS - La cabeza de lectura no se mueve demasiado en la lectura de un<br />
archivo.<br />
DESVENTAJAS - Produce fragmentación externa.<br />
80
ASIGNACIÓN LIGADA<br />
[SISTEMAS OPERATIVOS]<br />
En este método, cada archivo es una lista ligada de bloques de disco. En el directorio<br />
hay un apuntador al bloque de inicio y un apuntador al bloque final para cada archivo.<br />
En cada uno de los bloques donde se encuentra un archivo hay un apuntador al<br />
siguiente bloque de la lista. Por ejemplo:<br />
VENTAJAS - No produce fragmentación externa.<br />
DESVENTAJAS - La cabeza de lectura se puede mover demasiado en la lectura de<br />
un archivo. - Si una liga se pierde, se perderá el archivo completo. Es ineficiente para<br />
la implementación de archivos directos. Se necesita un campo extra para el<br />
apuntador.<br />
ASIGNACIÓN INDEXADA<br />
Como ya se vio, la asignación ligada resuelve problemas de fragmentación externa,<br />
sin embargo, la asignación ligada no soporta eficientemente el acceso directo a los<br />
81
[SISTEMAS OPERATIVOS]<br />
archivos. La asignación indexada resuelve este problema poniendo todos los<br />
apuntadores en una sola localidad: El bloque índice.<br />
Cada archivo tiene su bloque índice, El cual es un arreglo de direcciones de bloques<br />
de disco.<br />
La i-ésima entrada en el bloque índice apunta al i-ésimo bloque que conforma el<br />
archivo. En el directorio se controla la dirección del bloque índice de cada archivo, por<br />
ejemplo:<br />
VENTAJAS - No produce fragmentación externa. Eficiente para la implementación de<br />
archivos directos.<br />
DESVENTAJAS - Existe desperdicio cuando hay archivos muy chicos.<br />
Desbordamiento de bloque índice. (Solución: creación de un esquema ligado; el último<br />
bloque índice apunta a otro índice).<br />
82
[SISTEMAS OPERATIVOS]<br />
5.5 Mecanismos de acceso a los archivos<br />
Existen varios mecanismos para<br />
acceder los archivos: Directorios,<br />
descriptores de archivos,<br />
mecanismos de control de acceso<br />
y procedimientos para abrir y<br />
cerrar archivos.<br />
Descriptores de archivos. El descriptor de archivos o bloque de control de archivos<br />
es un bloque de control que contiene información que el sistema necesita para<br />
administrar un archivo. Es una estructura muy dependiente del sistema.<br />
Puede incluir la siguiente información:<br />
Nombre simbólico del archivo.<br />
Localización del archivo en el almacenamiento secundario.<br />
Organización del archivo (método de organización y acceso).<br />
Tipo de dispositivo.<br />
Datos de control de acceso.<br />
Tipo (archivo de datos, programa objeto, programa fuente, etc.).<br />
Disposición (permanente contra temporal).<br />
Fecha y tiempo de creación.<br />
Fecha de destrucción.<br />
Fecha de la última modificación.<br />
Suma de las actividades de acceso (número de lecturas, por ejemplo).<br />
Los descriptores de archivos suelen mantenerse en el almacenamiento secundario; se<br />
pasan al almacenamiento primario al abrir el archivo.<br />
El descriptor de archivos es controlado por el sistema de archivos; el usuario puede no<br />
hacer referencia directa a él.<br />
A cada uno de los archivos se le asigna un descriptor el cual contendrá toda la<br />
información que necesitará el sistema de archivos para ejecutar con él los comandos<br />
que se le soliciten. El descriptor se mantendrá en memoria principal desde que el<br />
83
[SISTEMAS OPERATIVOS]<br />
archivo es abierto hasta que sea cerrado, y debe tener al menos la siguiente<br />
información, identificación del archivo, lugar de almacenamiento, información del<br />
modo de acceso.<br />
Identificación del archivo. Consiste de dos partes que es el nombre simbólico que es<br />
el que le da el usuario y un identificador interno que es asignado por el sistema<br />
operativo (número). Lugar de almacenamiento así como el tamaño del archivo. Modo<br />
de acceso. Se debe indicar en forma explícita quien puede accesar el archivo y<br />
conque derecho.<br />
Mecanismo de control de acceso.<br />
Control de un sistema de información especializado en<br />
detectar los intectos de acceso, permitiendo el paso de<br />
las entidades autorizadas, y denegando el paso a todas<br />
las demás. Involucra medios técnicos y procedimientos<br />
operativos.<br />
Mecanismo que en función de la identificación ya<br />
autenticada permite acceder a datos o recursos.<br />
Los Directorios son utilizados por el sistema operativo para llevar un registro de los<br />
archivos que incluye el nombre, los atributos y las direcciones en disco donde se<br />
almacenan los datos del archivo referenciado.<br />
Open (abrir): antes de utilizar un archivo, un proceso debe abrirlo. La finalidad es<br />
permitir que el sistema traslade los atributos y la lista de direcciones en disco a la<br />
memoria principal para un rápido acceso en llamadas posteriores.<br />
Close (cerrar): cuando concluyen los accesos, los atributos y direcciones del disco ya<br />
no son necesarios, por lo que el archivo debe cerrarse y liberar la tabla de espacio<br />
interno.<br />
84
[SISTEMAS OPERATIVOS]<br />
5.6 Manejo de espacio en memoria secundaria<br />
A diferencia de la Memoria Principal la Memoria Secundaria, auxiliar, masiva, externa<br />
no es tan veloz pero tiene gran capacidad para almacenar información en dispositivos<br />
tales como discos, cintas magnéticas, discos ópticos. Frecuentemente los datos y<br />
programas se graban en la Memoria Secundaria, de esta forma, cuando se ejecuta<br />
varias veces un programa o se utilicen repetidamente unos datos, no es necesario<br />
darlos de nuevo a través del dispositivo de entrada.<br />
En la Memoria Secundaria un archivo consta de un conjunto de bloques<br />
(correspondiente a la cantidad de información que se transfiere físicamente en cada<br />
operación de acceso (lectura o escritura).<br />
El Sistema Operativo o Sistema de Gestión de Archivos es el encargado de la<br />
asignación de bloques a archivos, de lo que surgen dos cuestiones, en primer lugar,<br />
debe asignarle el espacio de Memoria Secundaria a los archivos y, en segundo lugar,<br />
es necesario guardar constancia del espacio disponible para asignar.<br />
El sistema de archivos se ocupa primordialmente de administrar el espacio de<br />
almacenamiento secundario, sobre todo el espacio en disco. El manejo del espacio<br />
libre en disco se lleva a cabo de la siguiente manera:<br />
· Vector de bits<br />
· Lista ligada (lista libre)<br />
· Por conteo (agrupación)<br />
85
[SISTEMAS OPERATIVOS]<br />
Vector de bits. El espacio libre en disco es frecuentemente implementado como un<br />
mapa de bits, donde cada block es representado por un bit y si el bloc es libre el bit es<br />
cero de lo contrario está asignado.11000111<br />
Lista ligada. Una lista ligada de todos los blocks libres. Otra implantación se consigue<br />
guardando la dirección del primer block libre y el número de los blocks libres contiguos<br />
que le siguen. Cada entrada de la lista de espacio libre consiste de una dirección de<br />
disco y un contador (por conteo).<br />
86
[SISTEMAS OPERATIVOS]<br />
Por agrupación. Se almacena la dirección en n blocks libres en el primer block libre y<br />
el último contiene la dirección de otro block que contiene la dirección de otros blocks<br />
libres.<br />
Para manejar los espacios en disco existen los siguientes métodos:<br />
Contiguos<br />
Ligados<br />
Indexados<br />
Contiguos. Esta asignación requiere que cada archivo ocupe un conjunto de<br />
direcciones contiguas en el disco, su asignación es definida por la dirección del primer<br />
bloc y la longitud del archivo.<br />
Cuando se crea un archivo se le asigna un único conjunto contiguo de bloques, esta<br />
es una estrategia de asignación previa que emplea secciones de tamaño variable. La<br />
tabla de asignación de archivos necesita solo una entrada por cada archivo y que<br />
muestre el bloque de comienzo y la longitud del archivo. La asignación contigua es la<br />
mejor para un archivo secuencial.<br />
La asignación contigua presenta algunos problemas, como la fragmentación externa.<br />
Lo que hace difícil encontrar bloques contiguos de espacio de tamaño suficiente., lo<br />
que lleva a ejecutar un algoritmo de compactación para libera el espacio adicional en<br />
el disco.<br />
Asignación ligada o encadenada. Cada archivo es una lista ligada de blocks y el<br />
directorio contiene un apuntador al primer bloc y al último.<br />
La asignación se hace con bloques individuales, cada bloque contendrá un puntero al<br />
siguiente bloque de la cadena. La tabla de asignación de archivos necesita una sola<br />
entrada por cada archivo que muestre el bloque de comienzo y la longitud del mismo,<br />
cualquier bloque puede añadirse a la cadena. No hay que preocuparse por la<br />
fragmentación externa porque solo se necesita un bloque cada vez.<br />
Una consecuencia del encadenamiento es que no hay cabida para el principio de<br />
cercanía, si es necesario traer varios bloques de un archivo al mismo tiempo, se<br />
necesita una serie de accesos a partes diferentes del disco por lo que se debe<br />
ejecutar un algoritmo de compactación para liberar el espacio adicional en el disco.<br />
87
[SISTEMAS OPERATIVOS]<br />
Asignación Indexada. Cada archivo tiene su propio bloc de índice el cual es un<br />
arreglo de direcciones de bloc.<br />
En esta asignación la tabla de asignación de archivos contiene un índice separado de<br />
un nivel para cada archivo: el índice posee una entrada para cada sección asignada al<br />
archivo. Normalmente, los índices no están almacenados físicamente como parte de<br />
la tabla de asignación de archivos. Más exactamente el índice de archivo se guardara<br />
en un bloque aparte y la entrada del archivo en la entrada de asignación apuntara a<br />
dicho bloque.<br />
La asignación puede hacerse por bloques de tamaño fijo, O en secciones de tamaño<br />
variable. La asignación por bloques elimina la fragmentación externa, mientras que la<br />
asignación por secciones de tamaño variable mejora la cercanía. En cualquier caso,<br />
los archivos pueden concentrarse en zonas cercanas de cuando en cuando. La<br />
concentración reduce el tamaño del índice en el caso de secciones de tamaño<br />
variable, pero no en el caso de asignación por bloques.<br />
La asignación indexada soporta tanto el acceso secuencial como el acceso directo a<br />
los archivos y por ello se ha convertido en la forma más popular de asignación de<br />
archivos.<br />
En un sistema de cómputo, los elementos que se declaran para almacenamiento son<br />
los Fyle System. Cuándo existe una solicitud de almacenamiento o manejo de bloc<br />
libres en un file system surge una interrogante ¿cómo atenderlas? esto se lleva a cabo<br />
mediante una planificación de discos y para esto existen las siguientes políticas de<br />
planificación.<br />
a) FCFS<br />
b) SSTF<br />
c) SCAN<br />
d) SCAN de n-pasos<br />
e) C-SCAN<br />
f) Esquema Eschenbach<br />
88
5.7 Modelo jerárquico<br />
[SISTEMAS OPERATIVOS]<br />
El directorio contiene un conjunto de datos por cada archivo referenciado.<br />
Fig. 5.7.1 Ejemplo de directorio jerárquico<br />
Una posibilidad es que el directorio contenga por cada archivo referenciado:<br />
El nombre.<br />
Sus atributos.<br />
Las direcciones en disco donde se almacenan los datos.<br />
Otra posibilidad es que cada entrada del directorio contenga:<br />
El nombre del archivo.<br />
Un apuntador a otra estructura de datos donde se encuentran los atributos y<br />
las ,direcciones en disco.<br />
89
[SISTEMAS OPERATIVOS]<br />
Fig. 5.7.2 Representación gráfica de un directorio jerárquico.<br />
Al abrir un archivo el S. O.:<br />
Busca en su directorio el nombre del archivo.<br />
Extrae los atributos y direcciones en disco.<br />
Graba esta información en una tabla de memoria real.<br />
Todas las referencias subsecuentes al archivo utilizarán la información de la<br />
memoria principal.<br />
El número y organización de directorios varía de sistema en sistema:<br />
Directorio único: el sistema tiene un solo directorio con todos los archivos de<br />
todos los usuarios (ver Figura 5.7.3).<br />
Un directorio por usuario: el sistema habilita un solo directorio por cada<br />
usuario (ver Figura 5.7.4).<br />
Un árbol de directorios por usuario: el sistema permite que cada usuario<br />
tenga tantos directorios como necesite, respetando una jerarquía general (ver<br />
Figura 5.7.5).<br />
Fig. 5.7.3 Un solo directorio compartido por todos los usuarios<br />
90
[SISTEMAS OPERATIVOS]<br />
Fig. 5.7.4 Un directorio por usuario<br />
Fig. 5.7.5 Un árbol arbitrario por usuario<br />
91
[SISTEMAS OPERATIVOS]<br />
5.8 Mecanismos de recuperación en caso de falla<br />
Recuperación<br />
Los archivos y directorios se mantienen tanto en memoria principal como en disco, y<br />
debe tener. Se cuidado para que los fallos del sistema no provoquen una pérdida de<br />
datos o una incoherencia en los mismos.<br />
Comprobación de coherencia.<br />
Como hemos explicado en la Sección 11.3, parte de la información de directorios se<br />
almacena en la memoria principal (o en caché) para acelerar el acceso. La<br />
información de directorios en11a memoria principal está, generalmente, más<br />
actualizada que la correspondiente información en el disco, porque la información de<br />
directorios almacenada en caché no se escribe necesariamente en el disco nada más<br />
producirse la actualización.<br />
Considere, entonces, el posible ejemplo de un fallo de la computadora. El contenido<br />
de la caché y de los búferes, así como de las operaciones de E/S que se estuvieran<br />
realizando en ese momento, pueden perderse, y con él se perderán los cambios<br />
realizados en los directorios correspondientes a los archivos abiertos. Dicho suceso<br />
puede dejar el sistema de archivos en un estado incoherente. El estado real de<br />
algunos archivos no será el que se describe en la estructura de directorios.<br />
Con frecuencia, suele ejecutarse un programa especial durante el reinicio para<br />
comprobar las posibles incoherencias del disco y corregidas.<br />
El comprobador de coherencia (un programa del sistema tal como fsck en UNIX o<br />
chkdsk en MS-DOS), compara los datos de la estructura de directorios con los<br />
bloques de datos del disco y trata de corregir todas las incoherencias que detecte. Los<br />
algoritmos de asignación y de gestión del espacio libre dictan los tipos de problemas<br />
que el comprobador puede tratar de detectar y dictan también el grado de éxito que el<br />
comprobador puede tener en esta tarea. Por ejemplo, si se utiliza un sistema de<br />
asignación enlazada y existe un enlace entre cada bloque y el siguiente, puede<br />
reconstruirse el archivo completo a partir de los bloques de datos y volver a crear la<br />
estructura de directorios. Por el contrario, la pérdida de una entrada de directorio en<br />
un sistema de asignación indexada puede ser desastrosa, porque los bloques de<br />
datos no tienen ningún conocimiento acerca de los demás bloques de datos del<br />
archivo. Por esta razón, UNIX almacena en caché las entradas de directorio para las<br />
lecturas, pero todas las escrituras de datos que provoquen algún cambio en la<br />
92
[SISTEMAS OPERATIVOS]<br />
asignación de espacio o en algún otro tipo de metadato se realizan síncronamente,<br />
antes de escribir los correspondientes bloques de datos. Por supuesto, también<br />
pueden aparecer problemas si se interrumpe una escritura síncrona debido a un fallo<br />
catastrófico.<br />
Fig. 5.8.1 Errores<br />
La pérdida de la información es uno de los factores que se le debe de dar mayor<br />
importancia, por la sencilla razón de que al perder información se puede perder lo que<br />
no nos podemos imaginar en cuanto a la misma y ocasionar perdidas hasta hablar de<br />
una gran cantidad de dinero. Para solucionar este o estos problemas todo sistema<br />
operativo cuenta con al menos una herramienta de software que nos permite<br />
recuperar información perdida hasta cierta medida, esto obedece de acuerdo al daño<br />
causado o los daños. Si el sistema no cuenta con la herramienta necesaria, deberá<br />
adquirirse el software apropiado de algún fabricante especializado en el ramo, por<br />
ejemplo Norton.<br />
Es necesario proteger la información alojada en el sistema de archivos, efectuando los<br />
resguardos correspondientes.<br />
De esta manera se evitan las consecuencias generalmente catastróficas de la pérdida<br />
de los sistemas de archivos.<br />
Las pérdidas se pueden deber a problemas de hardware, software, hechos externos,<br />
etc.<br />
Manejo de un bloque defectuoso:<br />
Se utilizan soluciones por hardware y por software.<br />
La solución en hardware:<br />
Consiste en dedicar un sector del disco a la lista de bloques defectuosos.<br />
93
[SISTEMAS OPERATIVOS]<br />
Al inicializar el controlador por primera vez:<br />
o Lee la “lista de bloques defectuosos”.<br />
o Elige un bloque (o pista) de reserva para reemplazar los defectuosos.<br />
o Registra la asociación en la lista de bloques defectuosos.<br />
o En lo sucesivo, las solicitudes del bloque defectuoso utilizarán el de<br />
repuesto.<br />
La solución en software:<br />
Requiere que el usuario o el sistema de archivos construyan un archivo con<br />
todos los bloques defectuosos.<br />
Se los elimina de la “lista de bloques libres”.<br />
Se crea un “archivo de bloques defectuosos”:<br />
o Está constituido por los bloques defectuosos.<br />
o No debe ser leído ni escrito.<br />
o No se debe intentar obtener copias de respaldo de este archivo.<br />
Respaldos (copias de seguridad o de back-up):<br />
Fig. 5.8.2 Es necesario realizar respaldos para asegurar información<br />
Es muy importante respaldar los archivos con frecuencia.<br />
Los discos magnéticos fallan en ocasiones y es necesario tener cuidado para<br />
garantizar que los datos perdidos debido a esos fallos no se pierdan para siempre.<br />
Con este fin, pueden utilizarse programas del sistema para realizar una copia de<br />
seguridad de los datos del disco en otro dispositivo de almacenamiento, como por<br />
ejemplo un disquete, una cinta magnética, un disco óptico incluso otro disco duro. La<br />
recuperación de la pérdida de un archivo individual o de un disco completo puede ser<br />
entonces, simplemente, una cuestión de restaurar los datos a partir de la copia de<br />
seguridad.<br />
94
[SISTEMAS OPERATIVOS]<br />
Los respaldos pueden consistir en efectuar copias completas del contenido de los<br />
discos (flexibles o rígidos).<br />
Una estrategia de respaldo consiste en dividir los discos en áreas de datos y áreas de<br />
respaldo, utilizándolas de a pares:<br />
Se desperdicia la mitad del almacenamiento de datos en disco para respaldo.<br />
Cada noche (o en el momento que se establezca), la parte de datos de la<br />
unidad 0 se copia a la parte de respaldo de la unidad 1 y viceversa.<br />
Otra estrategia es el vaciado por incrementos o respaldo incremental:<br />
Se obtiene una copia de respaldo periódicamente (por ej.: una vez por mes o<br />
por semana), llamada copia total.<br />
Se obtiene una copia diaria solo de aquellos archivos modificados desde la<br />
última copia total; en estrategias mejoradas, se copian solo aquellos archivos<br />
modificados desde la última vez que dichos archivos fueron copiados.<br />
Se debe mantener en el disco información de control como una “lista de los<br />
tiempos de copiado” de cada archivo, la que debe ser actualizada cada vez<br />
que se obtienen copias de los archivos y cada vez que los archivos son<br />
modificados.<br />
Puede requerir una gran cantidad de cintas de respaldo dedicadas a los<br />
respaldos diarios entre respaldos completos.<br />
Para minimizar la cantidad de datos que haya que copiar, podemos utilizar la<br />
información contenida en la entrada de directorio de cada archivo. Por ejemplo, si el<br />
programa de copia de seguridad sabe cuándo se realizó la última copia de seguridad<br />
de un archivo y la fecha de última modificación del archivo contenida en el directorio<br />
indica que el archivo no ha cambiado desde esa fecha, no será necesario volver a<br />
copiar el archivo. Así un plan típico de copia de seguridad podría ser el siguiente:<br />
• Día 1. Copiar en el soporte de copia de seguridad todos los archivos del disco. Esto<br />
se denomina copia de seguridad completa.<br />
• Día 2. Copiar en otro soporte físico todos los archivos que se hayan modificado<br />
desde el día 1. Esta es una copia de seguridad incremental.<br />
• Día 3. Copiar en otro soporte físico todos los archivos que se hayan modificado<br />
desde el día 2.<br />
95
[SISTEMAS OPERATIVOS]<br />
• Día N. Copiar en otro soporte físico todos los archivos que se hayan modificado<br />
desde el día N - 1. Después, volver al día 1.<br />
Podemos escribir las copias de seguridad correspondientes al nuevo ciclo sobre el<br />
conjunto anterior de soportes físicos o en un nuevo conjunto de soportes de copia de<br />
seguridad. De esta forma, podemos restaurar un disco completo comenzando la<br />
restauración con la copia de seguridad completa y continuando con cada una de las<br />
copias de seguridad incrementales. Por supuesto, cuanto mayor sea el valor de N,<br />
más cintas o discos habrá que leer para efectuar una restauración completa. Una<br />
ventaja adicional de este ciclo de copia de seguridad es que podemos restaurar<br />
cualquier archivo que haya sido borrado accidentalmente durante ese ciclo,<br />
extrayendo el archivo borrado de la copia de seguridad del día anterior. La longitud del<br />
ciclo será un compromiso entre la cantidad de soportes físicos de copia de seguridad<br />
requeridos y el número de días pasados a partir de los cuales podamos realizar una<br />
restauración. Para reducir el número de cintas que haya que leer para efectuar una<br />
restauración, una opción consiste en realizar una copia de seguridad completa y luego<br />
copiar cada día todos los archivos que hayan cambiado desde la última copia de<br />
seguridad completa. De esta forma, puede realizarse la restauración utilizando sólo la<br />
copia de seguridad incremental más reciente y la copia de seguridad completa, no<br />
necesitándose ninguna otra copia de seguridad incremental. El compromiso inherente<br />
a este sistema es que el número de archivos modificado se incrementa a diario, por lo<br />
que cada copia de seguridad incremental sucesiva contiene más archivos y requiere<br />
más espacio en el soporte de copia de seguridad.<br />
Consistencia del sistema de archivos:<br />
Muchos sistemas de archivos leen bloques, los modifican y escriben en ellos después.<br />
Si el sistema falla antes de escribir en los bloques modificados, el sistema de archivos<br />
puede quedar en un “estado inconsistente”.<br />
La inconsistencia es particularmente crítica si alguno de los bloques afectados son:<br />
Bloques de nodos-i.<br />
Bloques de directorios.<br />
Bloques de la lista de bloques libres.<br />
La mayoría de los sistemas dispone de un programa utilitario que verifica<br />
la consistencia del sistema de archivos:<br />
96
[SISTEMAS OPERATIVOS]<br />
Se pueden ejecutar al arrancar el sistema o a pedido.<br />
Pueden actuar sobre todos o algunos de los discos.<br />
Pueden efectuar verificaciones a nivel de bloques y a nivel de archivos.<br />
La consistencia del sistema de archivos no asegura la consistencia interna de<br />
cada archivo, respecto de su contenido.<br />
Generalmente pueden verificar también el sistema de directorios y / o de<br />
bibliotecas.<br />
Generalmente los utilitarios utilizan dos tablas:<br />
Tabla de bloques en uso.<br />
Tabla de bloques libres.<br />
Cada bloque debe estar referenciado en una de ellas.<br />
Si un bloque no aparece en ninguna de las tablas se trata de una falla llamada bloque<br />
faltante:<br />
No produce daños pero desperdicia espacio en disco.<br />
Se soluciona añadiendo el bloque a la tabla de bloques libres.<br />
También podría detectarse la situación de falla debida a un bloque referenciado dos<br />
veces en la tabla de bloques libres:<br />
Esta falla no se produce en los sistemas de archivos basados en mapas de<br />
bits, sí en los basados en tablas o listas.<br />
La solución consiste en depurar la tabla de bloques libres.<br />
Una falla muy grave es que el mismo bloque de datos aparezca referenciado dos o<br />
más veces en la tabla de bloques en uso:<br />
Como parte del mismo o de distintos archivos.<br />
Si uno de los archivos se borra, el bloque aparecería en la tabla de bloques<br />
libres y también en la de bloques en uso.<br />
Una solución es que el verificador del sistema de archivos:<br />
o Asigne un bloque libre.<br />
o Copie en el bloque libre el contenido del bloque conflictivo.<br />
o Actualice las tablas afectando el bloque copia a alguno de los archivos.<br />
o Agregue el bloque conflictivo a la tabla de bloques libres.<br />
o Informe al usuario para que verifique el daño detectado y la solución<br />
dada.<br />
97
[SISTEMAS OPERATIVOS]<br />
Otro error posible es que un bloque esté en la tabla de bloques en uso y en la tabla de<br />
bloques libres:<br />
Se soluciona eliminándolo de la tabla de bloques libres.<br />
Las verificaciones de directorios incluyen controles como:<br />
Número de directorios que apuntan a un nodo-i con los contadores de enlaces<br />
almacenados en los propios nodos-i; en un sistema consistente de archivos<br />
deben coincidir.<br />
Una posible falla es que el contador de enlaces sea mayor que el número de entradas<br />
del directorio:<br />
Aunque se eliminaran todos los archivos de los directorios el contador sería<br />
distinto de cero y no se podría eliminar el nodo-i.<br />
No se trata de un error serio pero produce desperdicio de espacio en disco con<br />
archivos que no se encuentran en ningún directorio.<br />
Se soluciona haciendo que el contador de enlaces en el nodo-i tome el valor<br />
correcto; si el valor correcto es 0, el archivo debe eliminarse.<br />
Otro tipo de error es potencialmente catastrófico:<br />
Si dos entradas de un directorio se enlazan a un archivo, pero el nodo-i indica<br />
que solo existe un enlace, entonces, al eliminar cualquiera de estas entradas<br />
de directorio, el contador del nodo-i tomará el valor 0.<br />
Debido al valor 0 el sistema de archivos lo señala como no utilizado y libera<br />
todos sus bloques.<br />
Uno de los directorios apunta hacia un nodo-i no utilizado, cuyos bloques se<br />
podrían asignar entonces a otros archivos.<br />
La solución es forzar que el contador de enlaces del nodo-i sea igual al número<br />
de entradas del directorio.<br />
También se pueden hacer verificaciones heurísticas , por ej.:<br />
98
[SISTEMAS OPERATIVOS]<br />
Cada nodo-i tiene un modo, pero algunos modos son válidos aunque extraños:<br />
o Ej.: Se prohíbe el acceso al propietario y todo su grupo, pero se permite<br />
a los extraños leer, escribir y ejecutar el archivo.<br />
o La verificación debería detectar e informar de estas situaciones.<br />
Se debería informar como sospechosos aquellos directorios con excesivas entradas,<br />
por ej., más de mil.<br />
99
[SISTEMAS OPERATIVOS]<br />
Unidad 6 Protección y seguridad<br />
6.1 Concepto y objetivos de protección<br />
La protección es un mecanismo control de<br />
acceso de los programas, procesos o usuarios<br />
al sistema o recursos.<br />
Hay importantes razones para proveer<br />
protección. La más obvia es la necesidad de<br />
prevenirse de violaciones intencionales de<br />
acceso por un usuario. Otras de importancia<br />
son, la necesidad de asegurar que cada<br />
componente de un programa, use solo los recursos del sistema de acuerdo con las<br />
políticas fijadas para el uso de esos recursos.<br />
Un recurso desprotegido no puede defenderse contra el uso no autorizado o de un<br />
usuario incompetente. Los sistemas orientados a la protección proveen maneras de<br />
distinguir entre uso autorizado y desautorizado.<br />
Objetivos<br />
• Inicialmente protección del SO frente a usuarios poco confiables.<br />
• Protección: control para que cada componente activo de un proceso<br />
solo pueda acceder a los recursos especificados, y solo en forma<br />
congruente con la política establecida.<br />
• La mejora de la protección implica también una mejora de la seguridad.<br />
• Las políticas de uso se establecen:<br />
- Por el hardware.<br />
- Por el administrador / SO.<br />
- Por el usuario propietario del recurso.<br />
• Principio de separación entre mecanismo y política:<br />
- Mecanismo → con que elementos (hardware y/o software) se<br />
realiza la protección.<br />
- Política → es el conjunto de decisiones que se toman para<br />
especificar como se usan esos elementos de protección.<br />
100
• La política puede variar<br />
[SISTEMAS OPERATIVOS]<br />
- dependiendo de la aplicación, a lo largo del tiempo.<br />
• La protección no solo es cuestión del administrador, sino también del<br />
usuario.<br />
• El sistema de protección debe:<br />
- distinguir entre usos autorizados y no-autorizados.<br />
- especificar el tipo de control de acceso impuesto.<br />
- proveer medios para el aseguramiento de la protección.<br />
6.2 Funciones del sistema de protección<br />
Control de acceso que hace referencia a las características de seguridad que<br />
controlan quien puede obtener acceso a los recursos de un sistema operativo. Las<br />
aplicaciones llaman a las funciones de control de acceso para establecer quien puede<br />
obtener acceso a los recursos específicos o controlar el acceso a los recursos<br />
proporcionados por la aplicación.<br />
Un sistema de protección deberá tener la flexibilidad suficiente para poder imponer<br />
una diversidad de políticas y mecanismos.<br />
Existen varios mecanismos que pueden usarse para asegurar los archivos, segmentos<br />
de memoria, CPU, y otros recursos administrados por el Sistema Operativo.<br />
Por ejemplo, el direccionamiento de memoria asegura que unos procesos puedan<br />
ejecutarse solo dentro de sus propios espacios de dirección. El timer asegura que los<br />
procesos no obtengan el control de la CPU en forma indefinida.<br />
La protección se refiere a los mecanismos para controlar el acceso de programas,<br />
procesos, o usuarios a los recursos definidos por un sistema de computación.<br />
Seguridad es la serie de problemas relativos a asegurar la integridad del sistema y sus<br />
datos.<br />
Hay importantes razones para proveer protección. La más obvia es la necesidad de<br />
prevenirse de violaciones intencionales de acceso por un usuario. Otras de<br />
importancia son, la necesidad de asegurar que cada componente de un programa,<br />
101
[SISTEMAS OPERATIVOS]<br />
use solo los recursos del sistema de acuerdo con las políticas fijadas para el uso de<br />
esos recursos.<br />
Un recurso desprotegido no puede defenderse contra el uso no autorizado o de un<br />
usuario incompetente. Los sistemas orientados a la protección proveen maneras de<br />
distinguir entre uso autorizado y desautorizado.<br />
Mecanismos y Políticas<br />
El sistema de protección tiene la función de proveer un mecanismo para el<br />
fortalecimiento de las políticas que gobiernan el uso de recursos. Tales políticas se<br />
pueden establecer de varias maneras, algunas en el diseño del sistema y otras son<br />
formuladas por el administrador del sistema. Otras pueden ser definidas por los<br />
usuarios individuales para proteger sus propios archivos y programas.<br />
Las políticas son diversas, dependen de la aplicación y pueden estar sujetas a<br />
cambios a lo largo del tiempo.<br />
Un principio importante es la separación de políticas de los mecanismos. ‘Los<br />
mecanismos determinan como algo se hará. Las políticas deciden que se hará'.<br />
La separación es importante para la flexibilidad del sistema.<br />
Dentro de las funciones del sistema de protección del sistema operativo encontramos:<br />
• Controlar el acceso a los recursos<br />
• Asegurarse que todos los accesos a los recursos del sistema están controlados<br />
6.3 Implantación de matrices de acceso<br />
Los derechos de acceso definen que acceso tienen varios sujetos sobre varios<br />
objetos.<br />
Los sujetos acceden a los objetos.<br />
102
[SISTEMAS OPERATIVOS]<br />
Los objetos son entidades que contienen información.<br />
Los objetos pueden ser:<br />
Concretos:<br />
o Ej.: discos, cintas, procesadores, almacenamiento, etc.<br />
Abstractos:<br />
o Ej.: estructuras de datos, de procesos, etc.<br />
Los objetos están protegidos contra los sujetos.<br />
Las autorizaciones a un sistema se conceden a los sujetos.<br />
Los sujetos pueden ser varios tipos de entidades:<br />
Ej.: usuarios, procesos, programas, otras entidades, etc.<br />
Los derechos de acceso más comunes son:<br />
Acceso de lectura.<br />
Acceso de escritura.<br />
Acceso de ejecución.<br />
Una forma de implementación es mediante una matriz de control de acceso con:<br />
Filas para los sujetos.<br />
Columnas para los objetos.<br />
Celdas de la matriz para los derechos de acceso que un usuario tiene a un<br />
objeto.<br />
Una matriz de control de acceso debe ser muy celosamente protegida por el S. O.<br />
Dominios de protección<br />
Un sistema de cómputos contiene muchos objetos que necesitan protección. Estos<br />
objetos pueden ser el hardware, la CPU, los segmentos de memoria, terminales,<br />
unidades de disco o impresoras; o bien ser del software, como los proceso, archivos,<br />
bases de datos o semáforos.<br />
103
[SISTEMAS OPERATIVOS]<br />
Cada objeto tiene un único nombre mediante el cual se la hace referencia y un<br />
conjunto de operaciones que se pueden realizar en él. READ y WRITE son<br />
operaciones adecuadas para un archivo; UP y DOWN tiene sentido en un semáforo.<br />
Es evidente que se necesita una vía para prohibir el acceso de los procesos a los<br />
objetos a los que no tiene permitido dicho acceso. Además, este mecanismo debe<br />
posibilitar la restricción de los procesos a un subconjunto de operaciones legales en<br />
caso necesario. Por ejemplo, puede permitirse que el proceso A lea el archivo F, pero<br />
no escriba en él.<br />
Para tener una forma de analizar los distintos mecanismos de protección, es<br />
conveniente presentar el concepto de dominio. Un dominio es un conjunto de parejas<br />
(objeto, derechos). Cada pareja determina un objeto y cierto subconjunto de las<br />
operaciones que se pueden llevar a cabo en él. Un derecho es, en este contexto, el<br />
permiso para realizar alguna de las operaciones.<br />
Una pregunta importante es la forma en que el sistema lleva un registro de los objetos<br />
que pertenecen a un dominio dado. Al menos una teoría, uno puede imaginar una<br />
enorme matriz, en la que los renglones son los dominio y las columnas son los<br />
objetos. Cada cuadro contiene los derechos correspondientes al objeto en ese<br />
dominio. Con esta matriz y el número de dominio activo, el sistema puede determinar<br />
si se permite el acceso de cierta forma a un objeto dado desde un domino especifico.<br />
Un dominio es un conjunto de parejas (objeto, derechos):<br />
Cada pareja determina:<br />
o Un objeto.<br />
o Un subconjunto de las operaciones que se pueden llevar a cabo en el.<br />
Un derecho es el permiso para realizar alguna de las operaciones.<br />
Es posible que un objeto se encuentre en varios dominios con “distintos” derechos en<br />
cada dominio.<br />
Un proceso se ejecuta en alguno de los dominios de protección:<br />
Existe una colección de objetos a los que puede tener acceso.<br />
Cada objeto tiene cierto conjunto de derechos.<br />
Los procesos pueden alternar entre los dominios durante la ejecución.<br />
104
[SISTEMAS OPERATIVOS]<br />
Una llamada al S. O. provoca una alternancia de dominio.<br />
En algunos S. O. los dominios se llaman anillos.<br />
Una forma en la que el S. O. lleva un registro de los objetos que pertenecen a cada<br />
dominio es mediante una matriz:<br />
Los renglones son los dominios.<br />
Las columnas son los objetos.<br />
Cada elemento de la matriz contiene los derechos correspondientes al objeto<br />
en ese dominio, por ej.: leer, escribir, ejecutar.<br />
Ver Figura 6.3.1<br />
Fig. 6.3.1 Dominio de protección<br />
Matriz de acceso<br />
El modelo de protección del sistema se puede ver en forma abstracta como una<br />
matriz, la matriz de acceso.<br />
Una matriz de acceso es una representación abstracta del concepto de dominio de<br />
protección.<br />
105
[SISTEMAS OPERATIVOS]<br />
Este modelo fue propuesto por Lampson [4] como una descripción generalizada de<br />
mecanismos de protección en sistemas operativos. Es el modelo más utilizado, del<br />
que existen numerosas variaciones, especialmente en su implementación.<br />
Los elementos básicos del modelo son los siguientes:<br />
• Sujeto: Una entidad capaz de acceder a los objetos. En general, el concepto de<br />
sujeto es equiparable con el de proceso. Cualquier usuario o aplicación consigue<br />
acceder en realidad a un objeto por medio de un proceso que representa al usuario o<br />
a la aplicación.<br />
• Objeto: Cualquier cosa cuyo acceso debe controlarse. Como ejemplo se incluyen<br />
los archivos, partes de archivos, programas y segmentos de memoria.<br />
• Derecho de acceso: la manera en que un sujeto accede a un objeto. Como ejemplo<br />
están Leer, Escribir y Ejecutar.<br />
El modelo considera un conjunto de recursos, denominados objetos, cuyo acceso<br />
debe ser controlado y un conjunto de sujetos que acceden a dichos objetos. Existe<br />
también un conjunto de permisos de acceso que especifica los diferentes permisos<br />
que los sujetos pueden tener sobre los objetos (normalmente lectura, escritura, etc.,<br />
aunque pueden ser diferentes, en general, dependiendo de las operaciones que<br />
puedan realizarse con el objeto).<br />
Se trata de especificar para cada pareja (sujeto, objeto), los permisos de acceso que<br />
el sujeto tiene sobre el objeto. Esto se representa mediante una matriz de acceso M<br />
que enfrenta todos los sujetos con todos los objetos. En cada celda M[i, j] se indican<br />
los permisos de acceso concretos que tiene el sujeto i sobre el objeto j.<br />
La figura 6.3.2 representa una matriz de acceso, y la figura 6.3.3 es una matriz de<br />
acceso derivada de la figura 6.3.1 de dominios de protección.<br />
106
[SISTEMAS OPERATIVOS]<br />
Fig. 6.3.2 Representación de una matriz de acceso<br />
Figura 6.3.3 Ejemplo de una matriz de acceso<br />
El mecanismo de protección es la matriz, junto con todos los elementos que se han<br />
de añadir para que se cumplan de manera efectiva todas las restricciones de acceso a<br />
los objetos.<br />
107
[SISTEMAS OPERATIVOS]<br />
• La política consiste en decidir cómo rellenar las distintas celdas de la matriz.<br />
• La MA permite implementar operaciones de cambio de domino.<br />
• El objeto sobre el que trabajamos es el Dominio → aparecen tantas columnas como<br />
dominios haya en el sistema.<br />
• La operación es la conmutación de un dominio a otro.<br />
• También la MA es un objeto que se puede modificar. De este modo podemos definir<br />
tres operaciones:<br />
• Copiar derechos de acceso de una celda a otra dentro de la misma columna.<br />
Consiste en pasar el derecho de acceso a un objeto de un Dominio que lo tiene, a otro<br />
donde originalmente no lo tenía. Se señala con un asterisco (*).<br />
• Copia ilimitada con propagación del propio derecho de copia.<br />
• Copia limitada sin propagación.<br />
• Movimiento de derecho.<br />
• Dueño. Un proceso ejecutándose en un dominio que tiene derecho de “dueño”<br />
sobre un objeto, puede repartir cualquier derecho de acceso sobre cualquier dominio<br />
para dicho objeto.<br />
• Control. Opera solo sobre dominios. Ejercer el control sobre un dominio implica que<br />
se puede quitar cualquier derecho sobre una fila de dominio.<br />
• La MA también ha de ser protegida.<br />
Implementación de la Matriz de Acceso<br />
Tabla Global<br />
Sencilla. Se almacena una lista de ternas {...}.<br />
Como el número de objetos y dominios es posiblemente muy grande, se debería<br />
guardar en memoria virtual → lento. Ver fig. 6.3.4<br />
108
Fig. 6.3.4 Ejemplo de una tabla global<br />
Lista de acceso para objetos (ACL)<br />
[SISTEMAS OPERATIVOS]<br />
Se expresa la MA por columnas {, ...}. Se descartan las entradas<br />
vacías.<br />
Se puede crear una lista de permisos por defecto para hacer más fácil su uso.<br />
Dado que cada vez que se va a usar un objeto hay que comprobar si hay o no<br />
permiso para hacerlo, es lógico poner la ACL allí donde estén descritos los atributos<br />
del objeto.<br />
Asocia a cada objeto una lista ordenada con:<br />
o Todos los dominios que pueden tener acceso al objeto.<br />
o La forma de dicho acceso (ej: lectura (r), grabación (w), ejecución (x)).<br />
Una forma de implementar las ACL consiste en:<br />
Asignar tres bits (r, w, x) para cada archivo, para:<br />
o El propietario, el grupo del propietario y los demás usuarios.<br />
Permitir que el propietario de cada objeto pueda modificar su ACL en cualquier<br />
momento:<br />
o Permite prohibir accesos antes permitidos.<br />
Lista de Capacidades<br />
Se expresa la MA por filas. Cada dominio tiene una lista de la forma {, ...}<br />
Para identificar el objeto se usa o bien su nombre lógico, o un puntero a él (la<br />
estructura de datos que le describe); a esta dirección se la llama capacidad.<br />
109
[SISTEMAS OPERATIVOS]<br />
Solo se podrá realizar la operación M sobre el objeto O si se dispone de la capacidad<br />
(puntero) al objeto. Ver figura 6.3.6<br />
Fig. 6.3.6 Ejemplo de una lista de capacidades<br />
Mecanismo de Cerradura-Llave<br />
Cada objeto tiene una lista de patrones llamados cerradura.<br />
Cada dominio tiene una lista de patrones llamados claves.<br />
Un proceso que se ejecuta en un dominio solo tendrá acceso a un objeto si el dominio<br />
contiene una llave que coincida con una de las cerraduras.<br />
Comparación<br />
La tabla global es una matriz dispersa, es ineficiente para su almacenamiento.<br />
ACL → Cuando se accede a un objeto es fácil determinar si hay o no permiso para<br />
usarlo.<br />
Capacidades → Las ACL están distribuidas, es difícil saber cuáles son los derechos<br />
de acceso para un proceso, cosa que si se puede hacer con la lista de capacidades.<br />
Los sistemas reales suelen usar una mezcla de todos.<br />
110
[SISTEMAS OPERATIVOS]<br />
Ej. UNIX: Se abre un fichero, se verifica en la ACL si tiene permiso o no. Si lo tiene, se<br />
consigue un descriptor de fichero, es decir una capacidad que será lo que se use a<br />
partir de entonces.<br />
6.4 Protección basada en el lenguaje<br />
El grado de protección que se proporciona en los<br />
sistemas informáticos existentes suele conseguirse<br />
inmediatamente en kernel del sistema operativo que<br />
actúa como agente de seguridad para inspeccionar<br />
y validar cada intento de acceder a un recurso<br />
protegido.<br />
La protección la maneja la máquina virtual (JVM)<br />
La JVM asigna un dominio de protección a una<br />
clase cuando la carga. El dominio de protección<br />
indica qué operaciones puede (y no puede) realizar la clase.<br />
Si se invoca un método de biblioteca y éste realiza una operación privilegiada, se<br />
examina el stack para asegurar que la biblioteca pueda realizar la operación.<br />
La seguridad en los sistemas de una computadora es un elemento muy importante en<br />
diseño delos sistemas operativos ya que manejan información muy valiosa para sus<br />
propietarios.<br />
La seguridad de un sistema tiene múltiples facetas, desde la protección ante posibles<br />
daños físicos de los datos (fuego, terremotos, etc.) hasta el acceso indebido a los<br />
mismos (intrusos, fallos de confidencialidad, etc.).Los ataques contra la<br />
confidencialidad, la integridad o la disponibilidad de recursos en un sistema deben<br />
prevenirse y solventarse mediante la política y los mecanismos de seguridad de un<br />
sistema. La seguridad debe tener en cuenta eventos tanto internos como externos<br />
(provenientes del entorno en que opera el sistema), de nada sirve tener mecanismos<br />
de protección interna muy buenos, si el sistema operativo no es capaz de identificar a<br />
los usuarios que acceden al sistema o si no existe una política de salvaguarda de<br />
datos antes la rotura de un disco. La protección, consiste en evitar que se haga un uso<br />
indebido de los recursos que están dentro del ámbito del sistema operativo. Es<br />
111
[SISTEMAS OPERATIVOS]<br />
necesario comprobar que los recursos (archivos, zonas de memoria, etc.) solo se<br />
usan por aquellos usuarios que tienen derechos de acceso. El sistema operativo debe<br />
proporcionar los medios para implementar políticas de protección deseadas por el<br />
usuario.<br />
6.5 Concepto de seguridad<br />
Los términos seguridad y protección se utilizan<br />
en forma indistinta. Sin embargo, es útil hacer<br />
una distinción entre los problemas generales<br />
relativos a la garantía de que los archivos no<br />
sea leídos o modificados por personal no<br />
autorizado, lo que incluye aspectos técnicos,<br />
de administración, legales y políticos, por un<br />
lado y los sistemas específicos del sistema<br />
operativo utilizados para proporcionar la<br />
seguridad, por el otro. Para evitar la confusión,<br />
utilizaremos el término seguridad para referirnos al problema general y el término<br />
mecanismo de protección para referirnos a los mecanismos específicos del sistema<br />
operativo utilizado para resguardar la información de la computadora. Sin embargo, la<br />
frontera entre ellos no está bien definida. Primero nos fijaremos en la seguridad; más<br />
adelante analizaremos la protección.<br />
La seguridad tiene muchas facetas. Dos de las más importantes son la perdida de<br />
datos y los intrusos. Algunas de las causas más comunes de la perdida de datos son:<br />
• Actos divinos: Incendios, inundaciones, terremotos, guerras, revoluciones o ratas<br />
que roen las cintas o discos flexibles.<br />
• Errores de Hardware o Software: Mal funcionamiento de la CPU, discos o cintas<br />
ilegibles, errores de telecomunicación o errores en el programa.<br />
• Errores Humanos: Entrada incorrecta de datos, mal montaje de las cintas o el disco,<br />
ejecución incorrecta del programa, perdida de cintas o discos.<br />
La mayoría de estas causas se pueden enfrentar con el mantenimiento de los<br />
respaldos adecuados; de preferencia, en un lugar alejado de los datos originales.<br />
112
[SISTEMAS OPERATIVOS]<br />
Un problema más interesante es que hacer con los intrusos. Estos tienen dos<br />
variedades. Los intrusos pasivos solo desean leer archivos que no están autorizados a<br />
leer. Los intrusos activos son más crueles: Desean hacer cambios no autorizados a<br />
los datos. Si se desea diseñar un sistema seguro contra los intrusos, es importante<br />
tener en cuenta el tipo de intruso con el que se desea tener protección. Algunas de las<br />
categorías comunes son:<br />
• Curiosidad casual de usuarios no técnicos. Muchas personas tienen en sus<br />
escritorios terminales para sistemas con tiempo compartido y, por la naturaleza<br />
humana, algunos de ellos leerán el correo electrónico de los demás u otros archivos,<br />
si no existen barreras en frente de ellos. Por ejemplo la mayoría de los sistemas UNIS<br />
tienen pre definido que todos los archivos se pueden leer de manera pública.<br />
• Conocidos husmeando. Algunos estudiantes, programadores de sistemas,<br />
operadores y demás personal técnico consideran como un reto personal romper la<br />
seguridad del sistema de cómputo local. A menudo son muy calificados y están<br />
dispuestos a invertir una cantidad sustancial de su tiempo en este esfuerzo.<br />
• Un intento deliberado de hacer dinero. Algunos programadores en banco han<br />
intentado penetrar un sistema bancario con el fin de robarle al banco. Los esquemas<br />
han variado desde cambiar el software para truncar y no redondear el interés, para<br />
quedarse con una pequeña fracción de dinero, hasta sacar dinero de las cuentas que<br />
no se han utilizado en anos o el "correo negro”.<br />
• Espionaje comercias o militar. El espionaje indica un intento serio y fundamentado<br />
por parte de un competidor u otro país para robar programas, secretos comerciales,<br />
patentes, tecnología, diseño de circuitos, planes de comercialización, etc. A menudo,<br />
este intento implica la cobertura de cables o el levantamiento de antenas hacia la<br />
computadora con el fin de recoger su radiación electromagnética.<br />
Debe quedar claro que el intento por mantener la KGB lejos de los secretos militares<br />
es un poco distinto del intento por evitar que los estudiantes inserten un mensaje<br />
gracioso en el sistema. La cantidad de esfuerzo que alguien pone en la seguridad y la<br />
protección depende claramente de quien se piensa sea el enemigo.<br />
Otro aspecto del problema de la seguridad es la privacía: la protección de las<br />
personas respecto del mal uso de la información en contra de uno mismo. Esto implica<br />
en forma casi inmediata muchos aspectos morales y legales.<br />
113
[SISTEMAS OPERATIVOS]<br />
Para proteger un sistema, debemos optar las necesarias medidas de seguridad en<br />
cuatro niveles distintos:<br />
1. Físico. El nodo o nodos que contengan los sistemas informáticos deben<br />
dotarse de medidas de seguridad físicas frente a posibles intrusiones armadas<br />
o subrepticias por parte de potenciales intrusos. Hay que dotar de seguridad<br />
tanto a las habitaciones donde las maquinas residan como a los terminales o<br />
estaciones de trabajo que tengan acceso a dichas maquinas.<br />
2. Humano. La autorización de los usuarios debe llevarse a cabo con cuidado,<br />
para garantizar que solo los usuarios apropiados tengan acceso al sistema. Sin<br />
embargo, incluso los usuarios autorizados pueden verse “motivados” para<br />
permitir que otros usen su acceso (por ejemplo, a cambio de un soborno).<br />
También pueden ser engañados para permitir el acceso de otros, mediante<br />
técnicas de ingeniería social. Uno de los tipos de ataque basado en las<br />
técnicas de ingeniería social es el denominado phishing; con este tipo de<br />
ataque, un correo electrónico o página web de aspecto autentico llevan a<br />
engaño a un usuario para que introduzca información confidencial. Otra técnica<br />
comúnmente utilizada es el análisis de desperdicios, un término autorizado a<br />
la computadora (por ejemplo, examinando el contenido de las papeleras,<br />
localizando listines de teléfonos encontrando notas con contraseñas). Estos<br />
problemas de seguridad son cuestiones relacionadas con la gestión y con el<br />
personal, más que problemas relativos a los sistemas operativos.<br />
3. Sistema operativo. El sistema debe auto protegerse frente a los diversos<br />
fallos de seguridad accidentales o premeditados. Un problema que este fuera<br />
de control puede llegar a constituir un ataque accidental de denegación de<br />
servicio. Asimismo, una cierta consulta a un servicio podría conducir a la<br />
revelación de contraseñas o un desbordamiento de la pila podría permitir que<br />
se iniciara un proceso no autorizado. La lista de posibles fallos es casi infinita.<br />
4. Red. Son muchos los datos en los modernos sistemas informáticos que viajen<br />
a través de líneas arrendadas privadas, de líneas compartidas como Internet,<br />
de conexiones inalámbricas o de líneas de acceso telefónico. La interceptación<br />
de estos datos podría ser tan dañina como el acceso a un computador, y la<br />
interrupción en la comunicación podría constituir un ataque remoto de<br />
denegación de servicio, disminuyendo la capacidad de uso del sistema y la<br />
confianza en el mismo por parte de los usuarios.<br />
Si queremos poder garantizar la seguridad del sistema operativo, es necesario<br />
garantizar la seguridad en los primeros dos niveles. Cualquier debilidad en uno de los<br />
niveles altos de seguridad (físico o humano) podría puentear las medidas de<br />
seguridad que son estrictamente de bajo nivel (del nivel del sistema operativo). Así, la<br />
114
[SISTEMAS OPERATIVOS]<br />
frase que afirma que una cadena es tan fuerte como el más débil de sus eslabones es<br />
especialmente cierta cuando hablamos de seguridad de los sistemas. Para poder<br />
mantener la seguridad, debemos contemplar todos estos aspectos.<br />
Además, el sistema debe proporcionar mecanismos de protección para permitir la<br />
implementación de las características de seguridad. Sin la capacidad de autorizar a<br />
los usuarios y procesos, de controlar su acceso y de registrar sus actividades, sería<br />
imposible que un sistema operativo implementara medidas de seguridad o se<br />
ejecutara de forma segura. Para soportar un esquema global de protección hacen falta<br />
mecanismos de protección hardware. Por ejemplo, un sistema donde la memoria no<br />
está protegida no puede nunca estar seguro.<br />
6.6 Clasificaciones de la seguridad<br />
La seguridad interna está relacionada a los<br />
controles incorporados al hardware y al Sistema<br />
Operativo para asegurar los recursos del sistema.<br />
La seguridad externa consiste en:<br />
Seguridad física.<br />
Seguridad operacional.<br />
La seguridad física incluye:<br />
Protección contra desastres (como inundaciones, incendios, etc.).<br />
Protección contra intrusos.<br />
En la seguridad física son importantes los mecanismos de detección, algunos<br />
ejemplos son:<br />
Detectores de humo.<br />
Sensores de calor.<br />
Detectores de movimiento.<br />
115
[SISTEMAS OPERATIVOS]<br />
La protección contra desastres puede ser costosa y frecuentemente no se analiza en<br />
detalle; depende en gran medida de las consecuencias de la perdida.<br />
La seguridad física trata especialmente de impedir la entrada de intrusos:<br />
Se utilizan sistemas de identificación física:<br />
Tarjetas de identificación.<br />
<strong>Sistemas</strong> de huellas digitales.<br />
Identificación por medio de la voz.<br />
Seguridad Operacional<br />
Consiste en las diferentes políticas y procedimientos implementados por la<br />
administración de la instalación computacional.<br />
La autorización determina que acceso se permite y a quien.<br />
La clasificación divide el problema en subproblemas:<br />
Los datos del sistema y los usuarios se dividen en clases:<br />
A las clases se conceden diferentes derechos de acceso.<br />
Un aspecto crítico es la selección y asignación de personal:<br />
La pregunta es si se puede confiar en la gente.<br />
El tratamiento que generalmente se da al problema es la división de<br />
responsabilidades:<br />
Se otorgan distintos conjuntos de responsabilidades.<br />
No es necesario que se conozca la totalidad del sistema para cumplir<br />
con esas responsabilidades.<br />
Para poder comprometer al sistema puede ser necesaria la cooperación<br />
entre muchas personas:<br />
Se reduce la probabilidad de violar la seguridad.<br />
116
[SISTEMAS OPERATIVOS]<br />
Debe instrumentarse un gran número de verificaciones y balances en el<br />
sistema para ayudar a la detección de brechas en la seguridad.<br />
El personal debe estar al tanto de que el sistema dispone de controles,<br />
pero:<br />
Debe desconocer cuales son esos controles:<br />
Se reduce la probabilidad de poder evitarlos.<br />
Debe producirse un efecto disuasivo respecto de posibles<br />
intentos de violar la seguridad.<br />
Para diseñar medidas efectivas de seguridad se debe primero:<br />
Enumerar y comprender las amenazas potenciales.<br />
Definir qué grado de seguridad se desea (y cuanto se está dispuesto a gastar<br />
en seguridad).<br />
Analizar las contramedidas disponibles.<br />
6.7 Validación y amenazas al sistema<br />
Los tipos de amenazas a la seguridad de un sistema informático los podemos<br />
caracterizar teniendo en cuenta como esta información es suministrada por el sistema.<br />
En general, hay un flujo de información de una fuente a un destino.<br />
El flujo normal es:<br />
Dentro de las amenazas que existen podemos mencionar las siguientes:<br />
117
[SISTEMAS OPERATIVOS]<br />
*Interrupción: Un elemento del sistema es destruido o se hace inservible. Es una<br />
amenaza a la disponibilidad. Ejemplos son la destrucción de algún elemento<br />
hardware y la desactivación del sistema de gestión de ficheros.<br />
* Intercepción: Una parte no autorizada obtiene acceso a un elemento relacionado<br />
con la seguridad. Es una amenaza a la privacidad. Ejemplos son la copia ilícita de<br />
programas y la visualización de ficheros que han de permanecer ocultos.<br />
* Modificación: Una parte no autorizada no sólo obtiene acceso sino que puede<br />
modificar un elemento relacionado con la seguridad. Es una amenaza a la integridad.<br />
Ejemplos son la alteración del contenido de un fichero y modificar un programa para<br />
que funcione de forma diferente.<br />
118
[SISTEMAS OPERATIVOS]<br />
* Fabricación: Una parte no autorizada inserta nuevos elementos en el sistema. Es<br />
una amenaza a la integridad. Ejemplos son adición de registros a un fichero y la<br />
inclusión de mensajes ilegítimos en una red.<br />
*Intrusos: dentro de ellos tenemos lo que son los piratas o hackers: que son los<br />
individuos que acceden al sistema sin autorización y hacen que los sistemas<br />
presenten agujeros que es el lugar por donde consiguen colarse.<br />
Amenazas de tipo software<br />
· Bomba Lógica: Es un código incrustado en un programa que comprueba si ciertas<br />
condiciones se cumplen, en cuyo caso ejecuta alguna acción no autorizada. Un<br />
ejemplo de uso de bomba lógica es el caso de un programador que vende un<br />
programa a una empresa. Si transcurrido un cierto tiempo la empresa no ha pagado,<br />
el programador revela la existencia de la bomba lógica con el fin de obtener su dinero.<br />
· Puerta Falsa (Trapdoor): Es un punto de entrada secreto en un programa, de forma<br />
que alguien que conozca la existencia de dicha puerta puede obtener permisos de<br />
acceso sin tener que pasar por los mecanismos normales de autentificación.<br />
· Caballo de Troya (Trojan Horse): Es una rutina oculta en un programa de utilidad.<br />
Cuando el programa se ejecuta, se ejecuta la rutina y ésta realiza acciones no<br />
autorizadas. Estos programas permiten realizar de forma indirecta acciones que no<br />
puede realizar de forma directa. Por ejemplo, puede ser un editor que cuando es<br />
ejecutado modifica los permisos de los ficheros que edita de forma que éstos puedan<br />
ser accedidos por cualquier usuario.<br />
· Virus: Es código introducido en un programa que puede infectar otros programas<br />
mediante la copia de sí mismo en dichos programas.<br />
· Bacteria: Programa que consume recursos del sistema replicándose asimismo, pero<br />
no daña explícitamente ningún fichero. Se suele reproducir exponencialmente, por lo<br />
que puede acaparar recursos como CPU, memoria y disco.<br />
· Gusano (Worm): Es un programa que usa las redes de computadores para pasar de<br />
unos sistemas a otros. Una vez que llega a un sistema, el gusano se puede comportar<br />
como un virus o una bacteria, puede implantar programas caballo de troya, o puede<br />
realizar acciones no autorizadas.<br />
119
[SISTEMAS OPERATIVOS]<br />
Ataques genéricos a sistemas operativos<br />
Asincronismo:<br />
Se tienen procesos múltiples que progresan asincrónicamente.<br />
Un proceso podría modificar los parámetros ya validados por otro proceso pero<br />
aún no utilizados.<br />
Rastreo:<br />
Un usuario revisa el sistema intentando localizar información privilegiada.<br />
Entre líneas:<br />
Se utiliza una línea de comunicaciones mantenida por un usuario habilitado<br />
que está inactivo.<br />
Código clandestino:<br />
Se modifica el S. O. bajo una presunta depuración pero se incorpora código<br />
que permite ingresos no autorizados.<br />
Procesos sincronizados interactivos:<br />
Se utilizan las primitivas de sincronización del sistema para compartir y pasarse<br />
información entre sí.<br />
Disfraz:<br />
El intruso asume la identidad de un usuario legítimo luego de haber obtenido la<br />
identificación apropiada por medios clandestinos.<br />
Ataque “nak”:<br />
Si el S. O. permite a un usuario:<br />
Interrumpir un proceso en ejecución mediante una “tecla” de<br />
“reconocimiento negativo”.<br />
Realizar otra operación.<br />
Reanudar el proceso interrumpido.<br />
Un intruso podría “encontrar” al sistema en un estado no protegido y hacerse<br />
con el control.<br />
Engaño al operador:<br />
Con un engaño se hace realizar al operador una acción que comprometa la<br />
seguridad del sistema.<br />
Parámetros inesperados:<br />
El intruso suministra valores inesperados a una llamada al núcleo.<br />
Intenta aprovechar una debilidad de los mecanismos de verificación de la<br />
legalidad del S. O.<br />
120
6.8 Cifrado<br />
[SISTEMAS OPERATIVOS]<br />
Deitel (1987) nos menciona que una<br />
rama de la criptología es la criptografía,<br />
que se ocupa del cifrado de mensajes.<br />
Esta se basa en que el emisor emite un<br />
mensaje en claro, que es tratado<br />
mediante un cifrador con la ayuda de<br />
una clave, para crear un texto cifrado.<br />
Este texto cifrado, por medio del canal<br />
de comunicación establecido, llega al<br />
descifrador que convierte el texto<br />
cifrado, apoyándose en otra clave, para<br />
obtener el texto en claro original. Las dos claves implicadas en el proceso de<br />
cifrado/descifrado pueden ser o no iguales dependiendo del sistema de cifrado<br />
utilizado.<br />
<strong>Sistemas</strong> de cifrado simétrico.<br />
Deitel (1987) nos comenta que los sistemas de cifrado simétrico son aquellos que<br />
utilizan la misma clave para cifrar y descrifrar un documento. El principal problema de<br />
seguridad reside en el intercambio de claves entre el emisor y el receptor ya que<br />
ambos deben usar la misma clave.<br />
<strong>Sistemas</strong> de cifrado asimétrico.<br />
Deitel (1987) menciona que También son llamados sistemas de cifrado de clave<br />
pública. Este sistema de cifrado usa dos claves diferentes. Una es la clave pública y<br />
se puede enviar a cualquier persona y otra que se llama clave privada, que debe<br />
guardarse para que nadie tenga acceso a ella. Para enviar un mensaje, el remitente<br />
usa la clave pública del destinatario para cifrar el mensaje.<br />
Una vez que lo ha cifrado, solamente con la clave privada del destinatario se puede<br />
descifrar, ni siquiera el que ha cifrado el mensaje puede volver a descifrarlo.<br />
121
<strong>Sistemas</strong> de cifrado híbridos.<br />
[SISTEMAS OPERATIVOS]<br />
Deitel (1987) nos comenta que es el sistema de cifrado que usa tanto los sistemas de<br />
clave simétrica como el de clave asimétrica. Funciona mediante el cifrado de clave<br />
pública para compartir una clave para el cifrado simetrico. En cada mensaje, la clave<br />
simétrica utilizada es diferente por lo que si un atacante pudiera descubrir la clave<br />
simétrica, solo le valdría para ese mensaje y no para los restantes.<br />
122