INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA UNIDAD CULHUACAN INGENIERÍA EN COMPUTACIÓN APUNTES DE LA MATERIA: SISTEMAS OPERATIVOS ACADEMIA: COMPUTACION SEXTO SEMESTRE PROFESORA: M. en C. MARISOL HERNANDEZ LOPEZ Fecha de entrega: 10 de septiembre de 2008 M. en C. Marisol Hernández López INDICE TEMATICO UNIDAD I. INTRODUCCIÓN 1.1 Funciones de un sistema operativo. 1.1.1 Administradores de un sistema operativo. 1.2 Evolución de los sistemas operativos. 1.3 Tipos de sistemas operativos. 1.4 Estructuras de los sistemas operativos. UNIDAD II. ADMINISTRACIÓN DE LA MEMORIA. 2.1 Jerarquía de la memoria. 2.1.1 Memoria secundaria. 2.1.2 Memoria principal. 2.1.3 Memoria cache. 2.2 Asignación de memoria. 2.2.1 Contigua simple. 2.2.2 Particionada. 2.2.3 Algoritmos de asignación de procesos. 2.2.4 Paginación simple. 2.2.5 Segmentación simple. 2.2.6 Paginación por demanda. 2.2.7 Segmentación por demanda. 2.3 Servicios de gestión de memoria. 2.3.1 Servicios POSIX. 2.3.2 Servicios Win32. UNIDAD III. ADMINISTRADOR DE PROCESADOR. 3.1 Introducción a los procesos. 3.1.1 Diferencia entre proceso y programa. 3.1.2 Modelo de un proceso. 3.1.3 Estados de un proceso. 3.1.3 Bloque de control de procesos. 3.1.5 Niveles de Planificación. 3.1.6 Políticas de Planificación. 3.1.7 Información de un proceso: estado del procesador, imagen de memoria del proceso, tablas del sistema operativo. 3.2 Despacho de procesos. 3.2.1 Algoritmos de planificación de procesos. 3.2.2 Prioridades. 3.3 Concurrencia. 3.3.1 Multitareas. 3.3.2 Multiprocesos. M. en C. Marisol Hernández López 3.4 Comunicación entre procesos. 3.4.1 Subprocesos. 3.4.2 Modelo de subprocesos. 3.4.3 Secciones críticas. 3.4.4 Exclusión mutua con espera ocupada. 3.4.5 Bloqueo y Desbloqueo (Sleep y Wakeup). 3.4.6 Semáforos. 3.4.6.1 Binarios. 3.4.6.2 De conteo. 3.4.7 Monitores. 3.4.8 Transmisión de mensajes. 3.5 Problemas de comunicación entre procesos. 3.5.1 Los cinco filósofos comensales. 3.5.2 Lectores y Escritores. 3.6 Servicios POSIX para la gestión de procesos. 3.7 Servicios WIN32 par ala gestión de procesos. UNIDAD IV. DISPOSITIVOS DE ENTRADA / SALIDA. 4.1 Dispositivos E/S. 4.1.1 Interrupción del CPU. 4.1.2 Definición y manejo de interrupciones. 4.1.3 E/S programada. 4.1.4 E/S controlada por interrupciones. 4.1.5 Clasificación. 4.1.6 Manejador de interrupciones. 4.1.7 Vector de interrupciones. 4.2 Canales de E/S. 4.2.1 Tipos de canales. 4.2.2 Interfaces. 4.2.3 Controladores. 4.3 Memorias Transitorias (Buffers). 4.3.1 Tipos de memorias transitorias. 4.3.2 Manejo de memorias transitorias. 4.3.3 Implementación. 4.3.4 Terminales de red. 4.3.5 Interfaces graficas de usuario. 4.4 Servicios de E/S: genéricos para POSIX y WIN32. UNIDAD V. SISTEMA DE ARCHIVOS. 5.1 Manejo de archivos y directorios. 5.1.1 Aspectos básicos de los archivos. 5.1.2 Directorios. 5.2 Sistemas de archivos. 5.2.1 Manejo del espacio en disco. 5.2.2 Almacenamiento de archivos. M. en C. Marisol Hernández López 5.2.3 Estructura de directorios. 5.2.4 Archivos compartidos. 5.2.5 Rendimiento del sistema de archivos. 5.3 Seguridad. 5.3.1 Fallas de seguridad. 5.3.2 Principios de diseño para seguridad. 5.3.3 Virus. 5.3.4 Mecanismos de protección. 5.4 Ejemplos de sistemas de archivos. 5.4.1 CP/M. 5.4.2 MS-DOS. 5.4.3 Win 98. 5.4.4 UNIX V7. M. en C. Marisol Hernández López UNIDAD I 1. DEFINICION SISTEMA OPERATIVO: Programa que actúa como intermediario entre el usuario y el hardware de una computadora. Su propósito es ofrecer un ambiente en el cual el usuario pueda ejecutar programas y su objetivo principal es hacer que el sistema de cómputo se pueda utilizar de manera cómoda, su objetivo secundario es que el hardware de la computadora sea usado de una forma eficiente. ESTRUCTURA DE UN SISTEMA OPERATIVO PROGRAMAS PROGRAMAS APLICACIONES PERSONALIZADOS JUEGOS COMPILADORES EDITORES INTERPRETE DE COMANDOS PROGRAMAS DE APLICACIÓN PROGRAMAS DE SISTEMA SISTEMA OPERATIVO LENGUAJE MAQUINA HARDWARE BIOS (MULTIPROGRAMA) HARDWARE (DISPOSITIVOS FISICOS) 1.1 FUNCIONES PRINCIPALES DE UN SISTEMA OPERATIVO: Un Sistema Operativo realiza 2 funciones principales que se basan en dos puntos de vista: 1) del usuario y 2) del programador. • MAQUINA EXTENDIDA: Es el programa que oculta la complejidad del hardware que el programador utilice, es decir, presenta una visión agradable y más fácil de manejar de todos los recursos del sistema (Hardware y Software). Muestra al usuario el equivalente de una maquina extendida o maquina virtual que sea mas fácil de programar que el hardware subyacente. M. en C. Marisol Hernández López • CONTROLADOR DE RECURSOS: Es el conjunto de programas que llevan un registro de la utilización de los recursos, da el paso a solicitudes de recursos y controla su uso, además tiene que mediar entre aquellas solicitudes que se encuentran en conflicto. 1.1.1 ADMINISTRADORES DEL SISTEMA OPERATIVO • ADMINISTRADOR DE MEMORIA: Esta a cargo de la memoria RAM, comprueba la validez de cada solicitud de espacio de memoria, su tarea principal es proteger el espacio reservado para el sistema operativo, no puede permitir que parte alguna de ese espacio sea alterado de forma accidental o propositiva y finalmente en entornos multiusuarios lleva el control del uso de cada sección de la memoria mediante una tabla conocida como Tabla de Memoria. • ADMINISTRADOR DE LA CPU: Se encarga de asignar la Unidad Central de Procesamiento así como controlarla, monitorearla y manejarla para que todos los procesos puedan ser atendidos. Contiene algoritmos para la planificación de la CPU por lo que trabaja con dos niveles de planificación: o PLANIFICADOR DE TAREAS (alto nivel): Se encarga de aceptar o rechazar las tareas que se generan durante la aplicación. o PLANIFICADOR DE PROCESOS (bajo nivel): Una vez que las tareas son aceptadas decide cuales de ellas obtienen la CPU y durante cuanto tiempo. • ADMINISTRADOR DE DISPOSITIVOS ENTRADA/SALIDA: Se encarga de controlar y vigilar todos los dispositivos, así como las unidades de control, canales, buffers y buses que forman el sistema de E/S. Su tarea fundamental es definir la manera más eficiente de asignar los recursos de E/S en base a políticas de programación descritas por los diseñadores del sistema. • ADMINISTRADOR DE ARCHIVOS: Administra y lleva el control de todos los archivos que se encuentran en el sistema. Controla la flexibilidad de acceso que se tiene para cada uno de ellos, se encarga de la creación de cada archivo así como de estipular sus características, además contiene políticas de acceso, almacenamiento y búsqueda para cada archivo. • ADMINSTRADOR DE RED: Proporciona la forma más conveniente de compartir recursos (Hardware y Software) y al mismo tiempo controla el acceso a los mismos, mediante protocolos de comunicación. 1.2 EVOLUCION DE LOS SISTEMAS OPERATIVOS. Los sistemas operativos han evolucionado a través de los años y se han apegado íntimamente a la arquitectura de las computadoras en las cuales se ejecutan. La primera computadora digital real fue diseñada por el matemático inglés Charles Babbage, la máquina analítica nunca la hizo funcionar adecuadamente por que era un diseño puramente mecánico; sin tener que decirlo la maquina analítica no tuvo un sistema operativo. M. en C. Marisol Hernández López Primera Generación 1940 (Bulbos y tableros de conexiones). Debido a la tecnología de bulbos y conexiones que existía en las computadoras de esa generación la necesidad de un Software que controlara estos recursos no existía, ya que estas conexiones eran realizadas por personas que tenían el conocimiento de la computación. Estas maquinas eran enormes y llenaban cuartos enteros con decenas de miles de tubos de vacío, pero eran mucho mas lentas que aún la computadora doméstica más barata que existe hoy en el mercado. Toda la programación se realizaba en lenguaje maquina absoluto, a menudo alambrando tableros de conexiones para controlar las funciones básicas de la maquina. Los lenguajes de programación se desconocían (todavía no existía el lenguaje ensamblador). El modo usual de operación consistía en que el programador firmaba para tener acceso a un bloque de tiempo en la hoja de registros situada en la pared, después bajaba al cuarto de máquina, insertaba un tablero de conexiones en la computadora y pasaba las siguientes horas esperando que ninguno de los 20 000 bulbos (mas o menos) se fundiera durante la ejecución de su programa; virtualmente todos los problemas eran los cálculos numéricos directos, como la elaboración de tablas de senos y cosenos. Al inicio de la década de 1950, la rutina había mejorado un poco con la introducción de las tarjetas perforadas, ahora era posible escribir programas en tarjetas y leerlos, en vez de utilizar tableros de conexiones. Segunda Generación 1950 (Transistores y sistemas de procesamiento por lotes). Por primera vez hubo una separación entre los diseñadores, constructores, operadores, programadores y personal de mantenimiento dedicado a los sistemas de cómputo. Se diseña un programa típico y primitivo en una tarjeta perforada el cual tenía las instrucciones básicas para la operación de la computadora, a finales de la segunda generación y principios de la tercera generación se introducen los primeros conceptos de sistemas operativos de procesamiento por lotes. La introducción del transistor a mediados de la década de 1950 cambio la imagen radicalmente. Las computadoras se volvieron lo suficientemente confiables que podían fabricarse y venderse a clientes con la esperanza de que continuaran funcionando el tiempo suficiente para realizar algún trabajo útil. Para ejecutar un trabajo (un programa o conjunto de programas), un programador primero escribía el programa en papel (en Fortran o lenguaje Ensamblador) y después lo perforaba en tarjetas, luego llevaría la pila de tarjetas al cuarto de introducción al sistema y la entregaría a unos de los operadores; que al finalizar la ejecución imprimía los resultados para su análisis. Debido al alto costo y desperdicio de tiempo del equipo, se buscaron maneras para solucionarlo por lo que se adoptó el procesamiento por lotes; la idea implícita en este sistema era la de conjuntar un cajón lleno de trabajos en el cuarto de introducción al sistema y después leerlos en una cinta magnética mediante el uso de una computadora pequeña y poco costosa, como la IBM 1401, que era muy eficiente en la lectura de tarjetas, en el copiado de cintas y en la impresión de la salida, pero no muy eficiente en los cálculos numéricos, otras maquinas muchos más costosas como la IBM 7094, se utilizaron para realizar los cálculos reales. Las grandes computadoras de la segunda generación se utilizaban en su mayor parte para realizar cálculos científicos y de ingeniería, como la solución de ecuaciones diferenciales parciales. Se programaban principalmente en FORTRAN y en lenguaje ENSAMBLADOR, los sistemas operativos comunes eran FMS (Fortran Monitor System) e IBSYS, sistema operativo de IBM para la computadora 7094. M. en C. Marisol Hernández López Tercera Generación 1960 (Circuitos Integrados y Multiprogramación) Se utilizan los primeros circuitos integrados y el concepto de multiprogramación, IBM diseña los primeros sistemas operativos, así como el hardware que tiene que administrar. Al inicio de la década de 1960 muchos fabricantes de computadoras tenían dos líneas de productos distinta y totalmente incompatibles. Por un lado existían las computadoras científicas de gran escala orientadas a las palabras, como la 7094 que se utilizaba para realizar cálculos numéricos de ciencias e ingeniería, por el otro lado, estaban las computadoras comerciales orientadas a los caracteres, como la 1401, que se utilizaban ampliamente para el ordenamiento de cintas e impresión por parte del banco y compañías de seguros; el desarrollo y mantenimiento de dos líneas de productos completamente diferentes era una proposición costosa para los fabricantes. IBM intento resolver estos dos problemas introduciendo en el mercado el Sistema 360, el cual era una serie de maquinas de software compatible que iba desde computadoras del tamaño de la 1401, hasta otras mucho más potentes que la 7094. Además, el sistema 360 estaba diseñado para realizar cálculos tanto científicos como comerciales. El sistema 360 fue la primera línea importante de computadoras que utilizó circuitos integrados, lo cual ofreció una mayor ventaja de precio/rendimiento sobre las maquinas de la segunda generación que se construían a partir de transistores individuales. La intención era que todo el software como sistema operativo tenía que funcionar en todos los modelos, correr en sistemas pequeños que a menudo sustituía a las unidades 1401 para copiar o reproducir tarjetas en cinta, y en sistemas muy grandes, que con frecuencia reemplazaban la 7094 para realizar predicciones climatológicas y otras operaciones complejas además de funcionar adecuadamente en sistemas con pocos periféricos y en sistemas con muchos periféricos y finalmente, funcionar en medios comerciales y científicos. Por todo esto no había manera de que IBM escribiera una pieza de software que cumpliera todos esos requisitos conflictivos y el resultado fue un sistema operativo enorme y extraordinariamente complejo llamado OS/360, quizá de dos a tres órdenes de magnitud mayor que FMS, constaba de millones de líneas de lenguaje ensamblador escritas por miles de programadores y contenía miles y miles de errores ocultos que necesitaban un flujo continuo de nuevas liberaciones en un intento por corregirlos. A pesar de su tamaño y problemas enormes el OS/360 y los sistemas operativos similares de la tercera generación producidos por otros fabricantes de computadoras satisfacían a muchos de sus clientes, también popularizaron varias técnicas importantes ausentes en los sistemas operativos de la segunda generación, probablemente la más importante sea la multiprogramación. Cuarta Generación 1980 (Computadoras Personales). Existen los primeros sistemas operativos multiprogramados de tiempo compartido. Microsoft diseña el sistema operativo DOS para las IBM PC, las 8088 de Intel y sucesores; Se realiza una división sobre la funcionalidad de las computadoras: IBM dedicada a funciones comerciales y científicas e INTEL dedicada a computadoras personales, por lo que existen dos principales empresas en el diseño de sistemas operativos: Microsoft y Multics. Dos sistemas operativos han dominado la escena de la computación: MS-DOS, escrito por Microsoft, Inc. para la IBM PC y otras maquinas que utilizan la CPU INTEL 8088 y sucesores; y UNIX que domina en las computadoras mayores que hacen uso de la familia de CPU MOTOROLA 68000 y sucesores. Quizás sea irónico que descendiente directo de MULTICS, diseñado para proporcionar un servicio de computación gigantesco, se haya vuelto tan popular en las computadoras personales, pero muestra principalmente lo bien pensadas que fueron las ideas de MULTICS y UNIX. M. en C. Marisol Hernández López Aunque la versión inicial de MS-DOS era relativamente primitiva, versiones subsiguientes han incluido más y más características de UNIX, lo que no es totalmente sorprendente dado que Microsoft es un proveedor importante de UNIX, que usa el nombre comercial de XENIX. Un avance interesante que empezó a tomar sitio a mediados de la década de 1980 es el desarrollo de las redes de computadoras que corren en un sistema operativo centralizado y en sistemas operativos distribuidos. En un sistema operativo centralizado, los usuarios tienen conocimiento de la existencia de múltiples computadoras y pueden ingresar en maquinas remotas y reproducir archivos de una maquina a la otra, cada maquina ejecuta su sistema operativo local y tiene un usuario propio (o usuarios). Un sistema operativo distribuido es aquel que se presenta ante sus usuarios como un sistema uniprocesador tradicional, aunque en realidad este compuesto de múltiples procesadores. 1.3 TIPOS DE SISTEMAS OPERATIVOS Se clasifican por la forma en que se introducen los datos al sistema, por su tiempo de respuesta y por tipo de procesamiento: • Por tipo de introducción y aceptación de datos: o Sistemas Operativos en Serie: Los mecanismos de desarrollo y ejecución de programas en estos sistemas son bastante lentos debido a la secuencia que sigue la operación como la carga del programa editor, el traductor del lenguaje, etc. o Sistemas Operativos por Lotes o Batch (FMS e IBSYS): Se introducía una tarea mediante la agrupación de tarjetas en un paquete y se corría todo el paquete a través de un lector como un grupo (LOTE). En la actualidad no existen ni tarjetas ni cintas, pero todavía se procesa en lotes, sin la interacción del usuario. La eficiencia de estos sistemas se mide en producción, esto es la cantidad de tareas completadas en un lapso de tiempo. o Sistemas Operativos multiprogramados o multitarea (OS/360): Son Sistemas Operativos que alternan con diferentes procesos a la vez, debido a que se tiene el concepto de memoria particionada, por lo cual son capaces de aceptar mas de un trabajo a la vez. • Los Sistemas Operativos multiprogramados se subdividen por sus tiempos de respuesta: o Interactivos (DOS, UNIX): También conocidos como sistemas de Tiempo Compartido, se crearon para satisfacer las demandas de los usuarios que necesitaban un tiempo de retorno rápido al eliminar los errores de sus programas. Permite a cada usuario interactuar directamente con el sistema de computo mediante introducción de comandos a partir de una terminal tipo maquina de escribir, proporciona una retroalimentación inmediata al usuario y el tiempo de respuesta se puede medir en minutos o segundos, según el numero de usuarios activos. o De tiempo real (trafico aéreo, vuelos espaciales, aeronaves de alta velocidad, equipo medico): Son los mas rápidos, se utilizan en entornos donde el tiempo es crítico, debido a que los datos se procesan con rapidez ya que la salida afecta a decisiones inmediatas. El sistema debe ser 100% sensible el 100% de las veces por lo que el tiempo de respuesta se mide en fracciones de segundos. o Híbridos: Son una combinación de sistemas por lotes e interactivos, parecen interactivos porque los usuarios pueden tener acceso al sistema mediante terminales y obtener respuesta rápida; pero cuando la carga interactiva es ligera este sistema acepta y opera programas por lotes en un segundo plano. Aprovecha el tiempo libre entre demandas de procesamiento para ejecutar programas que M. en C. Marisol Hernández López no necesitan ayuda significativa del operador, muchos de los sistemas de cómputo grandes son híbridos. • Por el tipo de usuario: o Monousuario: Dedica todos los recursos del sistema a un solo usuario, sus operaciones en red son mínimas o casi nulas debido a que en estos Sistemas Operativos se implementaron en las primeras computadoras personales. o Multiusuario: Aceptan la interacción con varios usuarios a través de terminales, manejando el concepto de red. • Los sistemas multiusuarios se dividen en dos tipos de acuerdo al procesamiento que llevan a cabo. o Centralizado: Son aquellos que ejecutan todos los procesos en una sola computadora, y consideran como terminales tontas a todas aquellas computadoras conectadas a la red (UNIX). o Distribuidos: Son aquellos que ejecutan las tareas en diferentes computadoras, cada computadora contiene su propio Hardware y Software de ejecución. Permiten que los programas corran en varios procesadores al mismo tiempo, con lo cual se requieren algoritmos de planificación del procesador más complejos a fin de optimizar la cantidad de paralelismo lograda. 1.4 ESTRUCTURAS DE LOS SISTEMAS OPERATIVOS. ESTRUCTURA MONOLITICA Este tipo de organización es en mucho la más común, la estructura consiste en que no existe estructura alguna. El sistema operativo se escribe como una colección de procedimientos, cada uno de los cuales puede llamar a los demás cada vez que así lo requiera; cada procedimiento del sistema tiene una interfaz bien definida en términos de parámetros y resultados y cada uno de ellos es libre de llamar a cualquier otro si este proporciona cierto calculo útil para el primero. Para construir el programa objeto real del sistema operativo, se compilan en forma individual los procedimientos o los archivos que contienen los procedimientos y después se enlazan en un solo archivo objeto con el ligador. En términos de ocultamiento de la información es prácticamente nula, cada procedimiento es visible a los demás. Los servicios (llamadas al sistema) que proporciona el sistema operativo se solicitan colocando los parámetros en lugares bien definidos, como en los registros o en la pila, para después ejecutar una instrucción especial de trampa conocida como llamada al núcleo o llamada al supervisor, esta instrucción cambia la maquina del modo usuario al modo núcleo y transfiere el control al sistema operativo. M. en C. Marisol Hernández López Programa 2 del usuario Programa 1 del usuario : • Llamada al núcleo Programas del usuario (ejecución en modo usuario) (4) (1) Proc. del (3) Servicio El sistema operativo se ejecuta en modo núcleo (2) Tabla de despacho • Núcleo Memoria Principal (1) (2) (3) (4) El programa del usuario es atraído hacia el núcleo. El sistema operativo determina el número del servicio solicitado. El sistema operativo localiza y llama al procedimiento correspondiente al servicio. El control regresa al programa del usuario. Esta organización sugiere el siguiente funcionamiento básico del sistema operativo: • Un programa principal que llama al procedimiento del servicio solicitado. • Un conjunto de procedimientos de servicio que llevan a cabo las llamadas al sistema. • Un conjunto de procedimientos utilitarios que ayudan al procedimiento de servicio. ESTRUCTURA POR CAPAS Consiste en organizar el Sistema Operativo como una jerarquía de capas, cada una construida sobre la inmediata inferior, donde la información y los datos son privados para cada capa. Este tipo de estructura sugiere una orientación modular lo cual conlleva la ventaja de mantenibilidad. El primer sistema construido bajo este esquema fue el sistema THE (Technische Hogeschool Eindhoven), el sistema tenia seis capas: la capa 0 se encargaba de la asignación del procesador y la alternancia entre los proceso cuando ocurren las interrupciones o expiran los cronómetros, esta capa proporcionaba la multiprogramación básica de la CPU, la capa 1 realizaba la administración de la memoria principal asignando el espacio solicitado por los procesos, así como la organización de las paginas de dichos procesos en el caso de que no se pudieran cargar en memoria garantizando la asignación cuando estas fueran necesarias, la capa 2 permitía la comunicación entre cada proceso y la consola del operador, la capa 3 controlaba los dispositivos de E/S y guardaba en almacenes (buffer) los flujos de información entre ellos, la capa 4 en esta se encontraban los programas del usuario y en la capa 5 se ubicaba el proceso del operador del sistema. M. en C. Marisol Hernández López Capa 5 4 3 2 1 0 Función El operador Programas del usuario Control de E/S Comunicación Proceso-Operador Administración memoria y disco Asignación de la CPU y Multiprog. Capa 5 4 3 2 1 1) Estructura del Sistema “THE” (1968). Función Interprete del lenguaje de órdenes Sistema de Archivos Gestión de Memoria (segmentos, páginas) E/S Básica Núcleo (procesos, semáforos) 2) Estructura por capas de los Sistemas Operativos actuales. ESTRUCTURA DE MAQUINA VIRTUAL Esta estructura esta orientada a los sistemas operativos híbridos sobre hardware de estilo “mainframe”. Los programas que forman el Sistema Operativo se crean de acuerdo al hardware simple de la computadora como lo es la E/S, interrupciones, modo núcleo y multiprogramación. El primer Sistema Operativo que propuso esta estructura fue el TSS/360 (actualmente conocido como VM/370). Son sistemas de tiempo compartido que proporcionan 1) multiprogramación y 2) una máquina extendida con una interfaz más cómoda que el hardware desnudo, lo cual en esencia es separar por completo estas dos funciones. El núcleo del sistema, llamado monitor de la máquina virtual, se ejecuta directamente en el hardware y realiza la multiprogramación, proporcionando varias máquinas virtuales a la capa inmediata superior; sin embargo estas máquinas virtuales no son máquinas extendidas, sino copias exactas del hardware desnudo que incluyen modo de kernel/usuario, E/S, interrupciones y todo lo que contiene una máquina real, por lo tanto cada una puede ejecutar cualquier sistema operativo ejecutable directamente en el hardware. Algunas ejecutan uno de los descendientes de OS/360 para el procesamiento de transacciones por lotes, mientras que otras ejecutan un sistema interactivo monousuario llamado CMS (Conversational Monitor System) para usuarios interactivos de tiempo compartido. 370 virtuales Llamadas al sistema aquí Instrucciones de E/S Salto aquí CMS CMS CMS Salto aquí VM/370 Hardware desnudo de la 370 Estructura del VM\370 con CMS • • El sistema OS/360 utilizado para procesamiento por lotes. El sistema CMS utilizado para tiempo compartido. M. en C. Marisol Hernández López ESTRUCTURA DE CLIENTE SERVIDOR La tendencia en los sistemas operativos modernos consiste en llevar mas lejos la idea de subir código a capas superiores y quitar lo más que se pueda del modo de kernel, dejando un microkernel mínimo. Esto es, implementando casi todo el sistema operativo en procesos de usuario, para solicitar un servicio, un proceso del usuario (proceso-cliente) envía la solicitud a un proceso servidor que realiza el trabajo y regresa la respuesta. El núcleo del Sistema Operativo, ahora es el encargado de controlar la comunicación entre los clientes y los servidores. Una gran ventaja de esta estructura es que todos los procesos servidores se ejecutan como proceso en modo usuario y no en modo kernel, de esta manera no tienen acceso directo al hardware, por lo tanto, si se activa un error en el servidor de archivos, el servicio de archivos podría fallar, pero eso no hará que se detengan todos los demás procesos servidores, es decir, toda la maquina. Otra ventaja del modelo cliente-servidor es su adaptabilidad para usarse en sistemas distribuidos. Proceso Proceso Cliente Cliente Servidor de Procesos Servidor de Terminales ….. Microkernel Servidor de Archivos Servidor de Memoria El cliente obtiene servicio enviando mensajes a los procesos servidores Modo de Usuario Modo de kernel El modelo Cliente-Servidor M. en C. Marisol Hernández López UNIDAD II. 2. ADMINISTRACION DE MEMORIA El desempeño de todo sistema ha dependido de dos cosas: cuanta memoria está disponible y de qué manera se utiliza mientras se procesan los trabajos. La parte del sistema operativo que administra la memoria principal se denomina administrador de memoria, su responsabilidad es mantenerse al tanto de qué partes de la memoria están en uso y cuales no, asignar memoria a los procesos cuando la necesitan y liberarla cuando terminan, además de administrar los intercambios entre la memoria principal y el disco. La administración de la memoria principal es vital debido a que es el único espacio físico disponible en el cual se almacenan las instrucciones que forman un proceso para que sean ejecutadas. El ciclo típico de ejecución de instrucciones incluye la transferencia de instrucciones de memoria a CPU, decodificación de instrucciones, búsqueda de operandos y ejecución efectiva de las instrucciones, posteriormente los resultados también pueden ser almacenados en memoria. 2.1 JERARQUIA DE MEMORIA La jerarquía de memoria se refiere a los diferentes tipos de memoria disponibles en un sistema. Estos diferentes tipos de memoria se colocan en una pirámide mientras más abajo en la jerarquía de memoria se encuentra el tipo de memoria, más lenta y barata es, pero hay mayor cantidad de ella en un sistema. El éxito o fracaso de un acceso a un nivel superior se designa como acierto o fallo: un acierto (hit) es un acceso a memoria que se encuentra en nivel superior, mientras que un fallo (miss) significa que no se encuentra en ese nivel. La frecuencia de aciertos es la fracción de accesos a memoria encontrados en el nivel superior. La frecuencia de fallos es la fracción de accesos a memoria no encontrados en el nivel superior. En la jerarquía de memoria podemos ver que se cumplen una seria de condiciones: • • • • • Al bajar de nivel aumenta la capacidad de la memoria. Al bajar de nivel disminuye el coste por bit. El registro es el más caro, luego la cache. Al bajar de nivel se observa que el tiempo de acceso aumenta. Acceder a un disco óptico es más lento que a un disco magnético. Si seguimos bajando de nivel, disminuye la frecuencia de acceso: no es lo mismo que el tiempo que es el tiempo que trae el dato, es el nº de veces que accede a esa memoria. Esta es la clave del funcionamiento de la jerarquía de memoria, esa disminución de frecuencia se debe sobre todo a lo que se conoce como principio de localidad o cercanía de referencia. M. en C. Marisol Hernández López Jerarquía de Memoria 2.1.1 MEMORIA SECUNDARIA Son una extensión de la memoria principal, el requerimiento fundamental para la memoria secundaria es que sea capaz de retener grandes cantidades de datos y de manera permanente. El dispositivo más común es el disco magnético, el cual almacena tanto programas como datos, los cuales permanecen en el disco hasta que son cargados en memoria principal. Muchos programas utilizan el disco duro como fuente y como destino de la información para su procesamiento. 2.1.2 MEMORIA PRINCIPAL Para la ejecución de los procesos, estos deben estar almacenados en la memoria principal (RAM). La RAM es el único espacio de almacenamiento a la que el procesador tiene acceso. La interacción entre el procesador y la memoria se lleva a cabo mediante dos opciones orientadas a direccionamiento de memoria: • • LOAD: Mueve una palabra de la memoria a un registro del CPU. STORE: Mueve el contenido de un registro a la memoria. Se implementa con una tecnología de semiconductores llamada memoria dinámica de acceso aleatorio (DRAM), que forma un arreglo de palabras de memoria. La CPU carga en automático instrucciones desde la memoria principal para su ejecución. Se desearía que los programas y los datos residieran en memoria de manera permanente, sin embargo esto no es posible por dos principales desventajas: 1) la memoria principal es demasiado pequeña para que pueda almacenar todos lo programas y datos de manera permanente y 2) la memoria principal es un dispositivo de almacenamiento volátil. 2.1.3 MEMORIA CACHE Es un espacio muy pequeño de memoria que almacena los datos más usados, por lo que tiene las mismas características de la RAM. La memoria cache es una versión de rápido acceso, diseñada para resolver las diferencias de velocidad entre un CPU muy rápido y una memoria principal mas lenta, lo hace almacenando una copia de los datos de uso frecuente en una memoria de fácil acceso en vez de la memoria principal, cuyo acceso M. en C. Marisol Hernández López es mas lento; un tamaño de cache razonablemente pequeño puede generar mejorías significativas en el rendimiento. Su propósito principal es aproximar la velocidad de la memoria (acceso) a la de aquellas más rápidas que existen, cada vez que se realiza una carga de datos a los registros del CPU se hace una prueba de cache que consiste en la búsqueda de estos datos dentro de la cache antes de llegar a la RAM. Dado que la memoria cache es un pequeño espacio que contiene relativamente pocos datos, el procesador tiene acceso a sus datos e instrucciones con mucha mayor rapidez que si tuviera que recuperarlos de la memoria principal, la memoria cache se localiza entre el procesador y la memoria principal. Memoria Principal CPU Controlador de cache Acierto Memoria Cache Falla Un controlador de cache determina la frecuencia con que se utilizan los datos, transfiere los que se usan a menudo a la memoria cache y los elimina cuando identifica datos de uso aun mas constante, los datos en la memoria cache se deben considerar como temporales, en el caso de una falla de energía, estos se pierden y no pueden recuperarse, exactamente igual que la memoria RAM. 2.2 ASIGNACION DE MEMORIA Los primeros esquemas de administración de memoria introdujeron conceptos fundamentales que ayudaron a la evolución de la administración de memoria, haciendo eficiente su uso en los sistemas actuales. La elección de un método de administración de la memoria para un sistema específico depende de muchos factores, fundamentalmente del diseño del hardware del sistema. 2.2.1 CONTIGUA SIMPLE También conocida como “monoproceso”, el tamaño de la memoria era muy pequeño por lo que solo existían dos particiones contiguas, una definida para el S. O. y otra para los llamados “procesos transitorios” o “procesos de usuario”. La designación del espacio para el sistema operativo se llevaba a cabo mediante hardware, por lo que el espacio designado para los procesos transitorios se define por el propio sistema operativo, es decir, la primera localidad disponible era la inmediata después del sistema operativo y la última estaba definida por la capacidad máxima de la memoria. M. en C. Marisol Hernández López Para que el sistema pudiera proteger las localidades designadas tanto para el sistema operativo como para los otros procesos, requería de algún tipo de asistencia de hardware, como por ejemplo la utilización de los “registros valla”, los cuales delimitan una frontera entre el área del sistema operativo y el área de procesos. 0 SISTEMA OPERATIVO (MONITOR) AREA DE PROCESOS TRANSITORIOS Máxima Localidad de Memoria 2.2.2 MEMORIA PARTICIONADA (MULTIPROGRAMACION) La multiprogramación consiste en que el espacio de memoria de usuario es compartido por múltiples procesos, es decir, un conjunto de procesos pueden ser almacenados en memoria de forma simultáneamente. La utilización de multiprogramación trae consigo varias ventajas entre las cuales se cuenta el mejor aprovechamiento de la CPU, pues cuando un proceso está realizando E/S, la CPU podría ser utilizada por otro proceso; por otro lado la multiprogramación es atractiva para los sistemas multiusuarios y procesos interactivos. PARTICIONES FIJAS El primer intento para posibilitar la multiprogramación fue la creación de particiones fijas (estáticas) en la memoria principal: una partición para cada tarea. La memoria es dividida en varios bloques de tipo fijo, los cuales se definen en cuanto se inicia el arranque del sistema, posteriormente esas particiones permanecen fijas; en caso de que se deseara reconfigurar estos bloques se tenía que reiniciar el sistema nuevamente y configurar. Este esquema introdujo un factor esencial: la protección del espacio de memoria para los procesos. La protección de cada uno de estos bloques estaba a cargo del sistema operativo, el cual contenía una tabla en la que se mostraba el tamaño de la partición, así como su dirección de inicio y fin de la partición y el estado de libre u ocupado. Las desventajas de esta asignación surgen debido a que es necesario que el programa se almacene completo y contiguo en la memoria desde el principio hasta el fin de su ejecución, por lo que si el tamaño de la partición es demasiado pequeño las tareas grandes serán rechazadas o por el contrario si el tamaño de la partición es demasiado grande, se desperdicia memoria lo que se conoce como fragmentación interna. M. en C. Marisol Hernández López Lista de tareas: J1 30K J2 50K J3 30K J4 25K SISTEMA OPERATIVO SISTEMA OPERATIVO PARTICION 1 100K Tarea 1 (30K) Partición 1 PARTICION 2 25K Tarea 4 (25K) PARTICION 3 25K Partición 2 Partición 3 Tarea 2 (50K) PARTICION 4 50K MEMORIA PRINCIPAL Partición 4 MEMORIA PRINCIPAL TABLA DE MEMORIA: Tamaño de Dirección en Partición Memoria 100K 200K 25K 300K 25K 325K 50K 350K Acceso Tarea 1 Tarea 4 Tarea 2 Estado de Partición Ocupado Ocupado Libre Ocupado 2.2.3 ALGORITMOS DE ASIGNACION DE PROCESOS Los tres tipos de algoritmos para la asignación de procesos en la memoria son: • PRIMER AJUSTE: Tiene que asignar la primera partición disponible y suficiente para la tarea que la solicita de acuerdo a la prioridad FIFO. • MEJOR AJUSTE: Asigna la partición más pequeña pero suficiente para la tarea que la solicita, la búsqueda la realiza en toda la tabla de memoria hasta encontrar la adecuada. • PEOR AJUSTE: Asigna la partición más grande disponible y suficiente para almacenar la tarea que la solicita, la búsqueda se realiza en toda la tabla de memoria. 2.2.4 PAGINACION SIMPLE Se basa en el concepto principal de dividir cada tarea de llegada en páginas de igual tamaño, donde el tamaño de página es fijo y depende del tamaño de los sectores del disco duro (y los sectores de memoria). Los M. en C. Marisol Hernández López sectores en que se divide la memoria principal se denominan marcos de página y en ellos se almacena las páginas de cada tarea. El tamaño usual de cada marco de página va desde los 512 bytes hasta 64 Kbytes. La principal ventaja de la paginación simple es el almacenamiento no continuo de las páginas dentro de la memoria principal, sin embargo es necesario que la tarea se almacene completa hasta el termino de su ejecución. El administrador de memoria debe realizar las siguientes tareas: 1. Determinar el número de páginas de cada programa. 2. Ubicar los marcos de página vacíos en la memoria principal. 3. Cargar todas las páginas del programa en los marcos de página. Por lo que requiere el manejo de tres tablas importantes: • TABLA DE MAPAS DE PAGINAS (TMP): Contiene la información de los marcos de página, su dirección y número de página. • TABLA DE MAPA DE MEMORIA (TMM): Contiene la dirección de los marcos de página y su estado libre u ocupado. • TABLA DE TAREAS (TT): Contiene el tamaño de la tarea en números de página y la localidad de memoria donde se encuentra almacenada. 2.2.5 SEGMENTACION SIMPLE SEGMENTO: Modulo independiente del programa que realiza una tarea en especifico pero en conjunción con los demás módulos. Es un método de asignación de memoria que se realiza a nivel lógico, debido a que divide cada proceso de llegada en segmentos o módulos de distintos tamaños cada uno independiente de los demás. La carga de los procesos en la memoria principal debe ser completa y de manera no contigua, por lo que la asignación se define como “Dinámica”. Una vez que quedan asignados los segmentos y terminan su ejecución, la memoria permanece con las particiones que se crearon al asignar estos segmentos, por lo que la asignación de nuevos segmentos tendrá que ser en las particiones que se encuentren vacías y que sean suficientes para la asignación. La asignación por segmentación simple es un proceso complejo que requiere del uso de tres tablas que le permitan un buen manejo tanto de los bloques en memoria como de los segmentos que solicitan ser asignados. • TABLA DE TAREAS: Lista todas las tareas en proceso. • TABLA DE MAPA DE SEGMENTOS: Lista detalles sobre cada segmento. • TABLA DE MAPA DE MEMORIA: Vigila la asignación de la memoria principal. 2.2.6 PAGINACION POR DEMANDA Es similar a lo visto para la paginación simple, con la diferencia que este esquema introdujo la idea de cargar solo una porción del programa para su procesamiento. Los paginas de los procesos residen en el disco duro y solo cuando van a ser ejecutados deben ser cargados en memoria. M. en C. Marisol Hernández López Una de las innovaciones de mayor importancia en la paginación por demanda es que hizo posible el amplio uso de la memoria virtual, lo que permite al usuario ejecutar tareas con menos memoria principal de lo que requeriría si utilizara la paginación simple. El sistema operativo se sigue apoyando en las mismas tablas que se utilizan en la paginación simple, pero con la adición de tres nuevos campos para cada página en la Tabla de Mapa de Paginas: Campo #1, establece si la pagina solicitada esta o no en la memoria. Campo #2, determina si el contenido de la página se ha modificado. Campo #3, define si la página ha sido referenciada recientemente. La ventaja principal de la paginación por demanda es que pueda ejecutar procesos con números de páginas mayores a la memoria físicamente disponible debido al reemplazo de páginas, haciendo creer al usuario que tiene una memoria casi infinita. Las desventajas principales es que sigue existiendo fragmentación interna en la última página de cada proceso y además un reemplazo continuo de páginas lo que se conoce como hiperpaginación. 2.2.7 SEGMENTACION POR DEMANDA Un proceso no necesita tener todos los segmentos cargados en memoria para ser ejecutado, este esquema se basa en la idea de que solamente se deben cargar en memoria aquellos segmentos que estén siendo activamente utilizados. La ventaja principal de este esquema es el uso de la Memoria virtual (parecido a la paginación por demanda), la principal desventaja es que debido a una asignación dinámica existe la fragmentación externa y el reemplazo continuo de segmentos a los que llamamos hipersegmentación. 2.3 SERVICIOS DE GESTION DE MEMORIA Las labores que lleva a cabo el sistema de gestión de memoria son más bien de carácter interno, los principales servicios están relacionados con la proyección de archivos. Típicamente existirán dos: • • Proyectar un archivo. Permite incluir en el mapa de memoria de un proceso un archivo o parte del mismo, con esta operación, se crea una región asociada al objeto de memoria almacenado en el archivo. Normalmente, se pueden especificar algunas propiedades de esta nueva región, por ejemplo, protección. Desproyectar un archivo. Eliminar una proyección previa o parte de la misma. 2.3.1 SERVICIOS POSIX El estándar POSIX (Portable Operating System) define un conjunto de servicios de gestión de memoria y los mas frecuentemente utilizados son los que corresponden con la proyección y desproyección de archivos (mmap,munmap). El servicio mmap tiene el siguiente prototipo: caddr_t mmap (caddr_t direc, size_t longitud, int protect, int indicador, int descriptor, off_t despl); El primer parámetro indica la dirección del mapa donde se quiere que se proyecte el archivo, la función devolverá la dirección de proyección utilizada. M. en C. Marisol Hernández López El parámetro descriptor se corresponde con el descriptor del archivo que se pretende proyectar y los parámetros despl y longitud establecen que zona del archivo se proyecta: desde la posición despl hasta desp+longitud. El argumento protect establece la protección sobre la región que puede ser de lectura (PROT_READ), de escritura (PROT_WRITE), de ejecución (PROT_EXEC). El parámetro indicador permite establecer ciertas propiedades en la región: • MAP_SHARED. La región es compartida. Las modificaciones sobre la región afectaran al archivo. Un proceso hijo compartirá esta región con el padre. • MAP_PRIVATE. La región privada. Las modificaciones sobre la región no afectaran al archivo. Un proceso hijo no compartirá esta región con el padre, sino que obtendrá un duplicado de la misma. • MAP_FIXED. El archivo debe proyectarse justo en la dirección especificada en el primer parámetro, siempre que éste sea distinto de cero. Cuando se quiere eliminar una proyección previa o parte de la misma, se usa el servicio munmap cuyo prototipo es: int munmap (caddr_t direc, size_t longitud); 2.3.2 SERVICIOS WIN32 La API Win32 incluye varias funciones que permiten a un proceso administrar en forma explicita su memoria virtual. Las más importantes de esas funciones son: Función API Win32 VirtualAlloc VirtualFree VirtualProtect VirtualQuery VirtualLock Descripción Reserva o compromete una región Libera o descompromete una región Modifica la protección de leer/escribir/ejecutar una región Pregunta por la situación de una región Hace residente en memoria una región (Inhabilita su paginación) VirtualUnlock CreateFileMapping MapViewOfFile Hace paginable una región Crea un objeto de correspondencia de archivo y lo nombra Establece correspondencia con un archivo y el espacio de direcciones UnmapViewOfFile OpenFileMapping Elimina la correspondencia entre un archivo y el espacio de direcciones Abre un objeto de correspondencia de archivo creado con anterioridad M. en C. Marisol Hernández López UNIDAD III. 3. ADMINISTRADOR DEL PROCESADOR El administrador del procesador trabaja con tres niveles de planificación: Planificador de nivel alto (Tareas): Acepta o rechaza tareas de acuerdo a políticas establecidas que generan una jerarquía de tareas para la asignación del recurso. • Planificador de nivel bajo (Procesos): Decide la toma más adecuada para asignar la CPU, cuanto tiempo y bajo que condiciones la van a utilizar. • Planificador de nivel medio: En un entorno muy interactivo, cuando el sistema esta sobrecargado el planificador de nivel medio encuentra ventajoso retirar trabajos activos de la memoria para reducir el grado de multiprogramación con el objetivo de que los trabajos en memoria se completen más rápido. • 3.1.1 INTRODUCCION A LOS PROCESOS Un proceso, puede definirse como una entidad activa (programa en ejecución), que requiere un conjunto de recursos para llevar a cabo su función, tales como procesador, memoria, dispositivos E/S, registros especiales, etc., en conclusión un proceso es una instancia de un programa ejecutable. 3.1.2 DIFERENCIA ENTRE PROCESO Y PROGRAMA La diferencia fundamental entre un proceso y un programa se da cuando existe actividad en las tareas que mantienen un código o conjunto de instrucciones, por lo tanto se puede decir que un programa es una unidad inactiva almacenada en un dispositivo de almacenamiento secundario y que al momento de ser llamado a memoria principal para su ejecución se convierte en un proceso. 3.1.3 MODELO DE UN PROCESO Todo software ejecutable de la computadora, incluso el sistema operativo se organiza en varios procesos secuenciales o simplemente procesos. De manera conceptual cada proceso tiene su propia CPU virtual, por supuesto que la realidad es que una verdadera CPU alterna entre los procesos en ejecución. Esta rápida conmutación se denomina multiprogramación. Modelos distintos de los procesos en su ejecución: a) Conmutación de procesos b) Proceso Secuencial A B C A D B C D c) Un solo programa esta activo a la vez D C B A Tiempo M. en C. Marisol Hernández López 3.1.3 ESTADOS DE UN PROCESO A medida que un proceso se ejecuta, cambia de estado. El estado de un proceso está definido en parte por la actividad actual de ese proceso. En el estado de ejecución solo puede haber un proceso, sin embargo, varios pueden estar listos o bloqueados. Cada proceso puede estar en uno de los siguientes estados: • • • • • Nuevo (New): El proceso se está creando. Listo (Ready): El proceso está esperando que se le asigne a un procesador. En ejecución (Running): Se están ejecutando instrucciones. En espera (Waiting): El proceso está esperando que ocurra algún suceso (como la terminación de una operación de E/S o la recepción de una señal). Terminado (Terminated): El proceso terminó su ejecución. 3.1.4 BLOQUE DE CONTROL DE PROCESOS El bloque de control de procesos (PCB) de un trabajo se crea cuando el planificador de trabajos lo acepta y se actualiza conforme este avanza desde el principio hasta el final de su ejecución. El PCB es una estructura de datos que contiene los datos del trabajo necesarios para que el sistema operativo administre el procesamiento de este. El PCB contiene entre otros los siguientes campos: • Identificación del proceso. • Estados del proceso. • Condición del proceso. • Contabilidad. 3.1.5 NIVELES DE PLANIFICACION El administrador del procesador trabaja con tres niveles de planificación: • • • Planificador de nivel alto (Tareas): Acepta o rechaza tareas de acuerdo a políticas establecidas que generan una jerarquía de tareas para la asignación del recurso. Planificador de nivel bajo (Procesos): Decide la toma más adecuada para asignar la CPU, cuanto tiempo y bajo que condiciones la van a utilizar. Planificador de nivel medio: En un entorno muy interactivo, cuando el sistema esta sobrecargado el planificador de nivel medio encuentra ventajoso retirar trabajos activos de la memoria para reducir el grado de multiprogramación con el objetivo de que los trabajos en memoria se completen más rápido. 3.1.6 POLITICAS DE PLANIFICACION Define específicamente una prioridad de los algoritmos de planificación que resuelven los problemas de ejecución de acuerdo a una o más políticas: 1. Maximización de la producción: Significa el poder ejecutar tantos trabajos de la cola de listos como le sea posible al sistema. M. en C. Marisol Hernández López 2. Minimizar los tiempos de respuesta: Se trata de que el sistema sea capaz de atender solicitudes de la manera más rápida posible. 3. Minimizar los tiempos de de retorno del sistema: El sistema debe ser capaz de aceptar procesos y sacarlos con la mayor rapidez. 4. Minimizar los tiempos de espera: Que los trabajos que se encuentran en la cola de listos sean sacados con mayor rapidez. 5. Minimizar la eficiencia del procesador: Que el sistema sea capaz de mantener ocupada la CPU el 100% de las veces, el 100% del tiempo. 6. Asegurar justicia para todos los procesadores: El sistema garantiza que todos los procesos deben tener lo que quieren en el tiempo que lo requieren. 3.1.7 INFORMACION DE UN PROCESO Las colas utilizan los PCB para llevar el control de los trabajos de la misma manera que los funcionarios las aduanas usan los pasaportes para llevar el control de los visitantes. 3.2 DESPACHO DE PROCESOS El planificador de procesos se apoya en un algoritmo de planificación de procesos, basado en una política especifica para asignar al CPU y mover los trabajos por el sistema. Los primeros sistemas operativos utilizaban políticas no apropiativas, diseñadas para mover los trabajos por lotes a través del sistema con tanta eficiencia como era posible. La mayor parte de los sistemas actuales, con su énfasis en el uso interactivo del tiempo de respuesta, utiliza un algoritmo que se ocupa de las solicitudes inmediatas de usuarios interactivos. 3.2.1 ALGORITMOS DE PLANIFICACION DE PROCESOS ALGORITMO FCFS Primero en entrar, primero en servirse, es un algoritmo de planificación no apropiativa que maneja los trabajos de acuerdo con tu tiempo de llegada: conforme entran son servidos. Los tiempos que maneja son: tiempos de retorno de proceso, tiempo de retorno promedio de sistema. • El tiempo de retorno de proceso: Es el tiempo en que el proceso termina su ejecución y devuelve el control al sistema operativo para que alterne con otro proceso. • El tiempo de retorno promedio de sistema: Este se calcula sumando todos los tiempos de retorno de los procesos ejecutados y dividendo entre el número de procesos. ALGORITMO SJF Este algoritmo asocia a cada trabajo en la cola de listos, el tiempo de CPU de cada proceso de tal manera que cuando la UCP está disponible se asigna al trabajo con el tiempo de CPU más corto. SJF es probablemente óptimo, ya que reduce el tiempo de espera promedio de cada trabajo. Sin embargo, la dificultad principal para la implementación de este algoritmo es que no se conoce ni es posible conocer el tiempo de CPU real de cada proceso. Los tiempos que maneja son: • Tiempo de espera: Tiempo que espera un proceso para ser obtenido. • Tiempo de retorno de proceso: Tiempo de terminación de proceso, tiempo en que devuelve el control al sistema operativo. M. en C. Marisol Hernández López • Tiempo de retorno promedio del sistema: Tiempo promedio de trabajo del sistema. PLANIFICACION ROUND ROBIN Es un tipo de algoritmo aplicado en sistemas multiprogramados. Se basa en la justicia de asignación del procesador para todos los procesos de llegada. Utiliza la prioridad FIFO y se basa en un QUANTUM de tiempo que varia de 100ms hasta 1 o 2 segundos, para asegurar justicia entre los trabajos. Los tiempos que calcula son: • El tiempo de retorno de proceso: Este tiempo se calcula restando el tiempo en que realmente termina el proceso menos el tiempo de llegada. • El tiempo de retorno promedio de sistema: Este se calcula sumando todos los tiempos de retorno de los procesos ejecutados y dividendo entre el número de procesos. Existen dos condiciones principales para la terminación del QUANTUM: 1. Interrupción de E/S por parte del proceso. 2. Cuando el proceso utiliza ciclos de CPU menores al QUANTUM del tiempo. 3.2.2 PRIORIDADES Es un algoritmo que se basa en un conjunto de prioridades para la ejecución de los procesos, donde cada prioridad no es más que un criterio que permita menor complejidad de ejecución. La jerarquía de prioridades se establece de la siguiente manera: “Menor prioridad aquellos procesos que por su complejidad reclaman mayor esfuerzo del procesador y mayor prioridad aquellos que requieren menos del procesador”. Dentro de las prioridades que se manejan están: • Tiempo de llegada. • Ciclo de CPU. • Tamaño de memoria. • Tipo proceso (sistema, programa). • No. Archivos. • No. E/S. 3.3 CONCURRENCIA La concurrencia es la propiedad de los sistemas que permiten que múltiples procesos sean ejecutados al mismo tiempo, y que potencialmente puedan interactuar entre sí. Los procesos concurrentes pueden ser ejecutados realmente de forma simultánea, sólo cuando cada uno es ejecutado en diferentes procesadores. En cambio, la concurrencia es simulada si sólo existe un procesador encargado de ejecutar los procesos concurrentes, simulando la concurrencia, ocupándose de forma alternada en uno y otro proceso a pequeñísimos intervalos de tiempo. Debido a que los procesos concurrentes en un sistema pueden interactuar entre otros también en ejecución, el número de caminos de ejecución puede ser extremadamente grande, resultando en un comportamiento sumamente complejo. Las dificultades asociadas a la concurrencia han sido pensadas para el desarrollo de lenguajes de programación y conceptos que permitan hacer la concurrencia más manejable. M. en C. Marisol Hernández López 3.3.1 MULTITAREAS Características de un sistema operativo que permite ejecutar varios procesos al mismo tiempo usando uno o más microprocesadores. Existen diferentes tipos de multitarea: MULTITAREA NULA: Aquel sistema operativo que carece de multitarea. Aún así puede simularla implementándola en un espacio de usuario o usando trucos como los TSR en MS-DOS. Justamente la familia DOS son ejemplos de sistemas operativos de multitarea nula. MULTITAREA COOPERATIVA: Tipo de multitarea en donde los procesos de usuario son quieres ceden la CPU al sistema operativo a intervalos regulares. Es sumamente problemático porque si por algún motivo el proceso de usuario es interrumpido, no cede la CPU al sistema operativo que lo ejecuta y, por lo tanto, quedará trabado (tildado). Los sistemas operativos Windows antes de la versión 1995 implementaban este tipo de multitarea. MULTITAREA PREFERENTE: Tipo de multitarea en donde el sistema operativo se encarga de administrar uno o más procesadores, repartiendo el tiempo de uso del mismo entre los distintos procesos que esperan utilizarlo. En el caso de un solo procesador, cada proceso o tarea lo utiliza en períodos cortos de tiempo, lo que, en la práctica, da la sensación de que estuviesen ejecutándose al mismo tiempo. Los sistemas operativos que utilizan este tipo de multitareas son los UNIX, VMS, Windows NT, etc. MULTITAREA REAL: Tipo de multitarea en donde el sistema operativo ejecuta los procesos realmente al mismo tiempo haciendo uso de múltiples procesadores. La ejecución realmente se realiza en distintos procesadores para cada proceso o tarea. Obviamente en el caso de que los procesos o tareas sean más que la cantidad de procesadores, éstos comienzan a ejecutarse en procesadores "en uso" en la forma de multitareas preferente. Todos los sistemas operativos modernos soportan esta capacidad. 3.3.2 MULTIPROCESOS Es una situación en la cual dos o más procesadores operan al unísono. Esto quiere decir que dos o más CPU ejecutan instrucciones de manera simultánea. Por lo tanto, con más de un proceso activo a la vez, cada CPU puede tener al mismo tiempo un proceso en estado de ejecución. Para los sistemas multiprocesamiento, el administrador del procesador tiene que coordinar la actividad de cada procesador, así como sincronizar la interacción entre los CPU. La complejidad de la tarea del administrador del procesador cuando se ocupa de varios procesadores o de múltiples procesos, hace que su prioridad sea la sincronización, lo cual es la clave del éxito de todo sistema multiproceso. 3.4 COMUNICACIÓN ENTRE PROCESOS. Se basa en dos conceptos fundamentales que son competencia y cooperación, la competencia se da en la situación en que dos o más procesos necesitan un mismo recurso, por lo que el sistema debe ser capaz de atender M. en C. Marisol Hernández López a estos procesos sin afectar la integridad del sistema; la cooperación existe cuando hay procesos relacionados que de manera colectiva presentan una sola aplicación. 3.4.1 SUBPROCESOS En los sistemas operativos tradicionales cada proceso tiene un espacio de direcciones y un solo subproceso de control. Sin embargo existen situaciones en las que es deseable tener varios subprocesos de control en el mismo espacio de direcciones, operando de forma pseudoparalela. 3.4.2 MODELO DE SUBPROCESOS Un subproceso tiene un contador de programa que indica cual instrucción se ejecutara a continuación, tiene registros que contienen sus variables de trabajo actúales y tiene una pila, que contiene el historial de ejecución. Aunque un subproceso debe ejecutarse en algún proceso, el subproceso y su proceso son conceptos distintos que pueden tratarse aparte, los subprocesos son las entidades que se calendarizan para ejecutarse en la CPU. Los subprocesos aportan al modelo de procesos la posibilidad de que haya varias ejecuciones en el mismo entorno de un proceso, en gran medida independientes una de otra, tener múltiples subprocesos ejecutándose en paralelo en un proceso es análogo a tener múltiples procesos ejecutándose en paralelo en una computadora. 3.4.3 SECCIONES CRITICAS Es una secuencia de instrucciones con un comienzo y un fin claramente especificado que delimita la entrada a un recurso compartido, es decir, actualiza una o más variables compartidas. Cuando un proceso entra a una sección critica, debe completar todas las instrucciones incluidas en ella antes de que se permita que otro proceso entre a la misma sección crítica. 3.4.4 EXCLUSION MUTUA CON ESPERA OCUPADA Debido a los problemas de competencia existe una forma de garantizar que si un proceso utiliza un recurso compartido los demás procesos no pueden utilizarlo, la exclusión mutua. Esta se define como sigue: “Un proceso puede excluir temporalmente a todos los demás procesos de utilizar un recurso compartido que tiene este proceso”. La espera ocupada sucede cuando un proceso hace una prueba continua de una variable, en espera de que aparezca cierto valor y este no aparece, esta situación en algún momento puede también ser garantía de una exclusión mutua. M. en C. Marisol Hernández López 3.4.5 BLOQUEO Y DESBLOQUEO (SLEEP Y WAKEUP) SLEEP y WAKEUP, se define como una solución para lograr exclusión mutua, utiliza variables de cerradura y funciona como su nombre lo dice: una función manda a dormir procesos y otra función los despierta. Es el método que soluciona los problemas de las variables de cerradura. Cuando un proceso entra a su región critica hace una llamada al sistema mediante la variable SLEEP (S), si el recurso esta desocupado se asigna al proceso y omite la llamada a SLEEP, una vez que el recurso se asigna al proceso las siguientes llamadas a SLEEP hacen que el sistema suspenda a los procesos que las hicieron, hasta que el recurso sea liberado. La llamada WAKEUP (W), contiene un parámetro que indica el proceso que hay que despertar y es el primer proceso de la cola que hizo la llamada a SLEEP. 3.4.6 SEMAFOROS Los semáforos son otra solución de software para lograr exclusión mutua, existen dos tipos de variables semáforos: binarios y de conteo. 3.4.6.1 SEMAFOROS BINARIOS Es una variable definida como Semáforo que puede contener dos valores, 0 que indica ocupado y 1 que indica libre. Los semáforos binarios utilizan dos funciones Signal y Wait, para manipular la variable semáforo. SIGNAL indica una llamada al sistema que cambia el valor de la variable semáforo a libre (+1) y WAIT es una llamada al sistema que indica una espera hasta que la variable semáforo indique libre (-1). 3.4.6.2 SEMAFOROS DE CONTEO Los semáforos de conteo se inicializan con el número de recursos disponibles. Cada proceso que desea usar un recurso realiza una operación DOWN, la cual decrementa el contador y cuando es liberado un recurso, es decir, un proceso ha salido de su región y critica, realiza una operación UP, la cual incrementa el contador. Cuando el contador llega a cero significa que todos los recursos están siendo utilizados, por lo que los procesos subsecuentes que deseen utilizar un recurso se bloquearan hasta que el contador sea mayor que cero. 3.4.7 MONITORES Un monitor es un conjunto de procedimientos que proporciona el acceso con exclusión mutua a un recurso o conjunto de recursos (datos o dispositivos) compartidos por un grupo de procesos. Los procedimientos van encapsulados dentro de un módulo que tiene la propiedad especial de que sólo un proceso puede estar activo cada vez para ejecutar un procedimiento del monitor. El monitor se puede ver como una valla alrededor del recurso (o recursos), de modo que los procesos que quieran utilizarlo deben entrar dentro de la valla, pero en la forma que impone el monitor. Muchos procesos M. en C. Marisol Hernández López pueden querer entrar en distintos instantes de tiempo, pero sólo se permite que entre un proceso cada vez, debiéndose esperar a que salga el que está dentro antes de que otro pueda entrar. La ventaja para la exclusión mutua que presenta un monitor frente a los semáforos u otro mecanismo es que ésta está implícita: la única acción que debe realizar el programador del proceso que usa un recurso es invocar una entrada del monitor. Si el monitor se ha codificado correctamente no puede ser utilizado incorrectamente por un programa de aplicación que desee usar el recurso. Cosa que no ocurre con los semáforos, donde el programador debe proporcionar la correcta secuencia de operaciones espera y señal para no bloquear al sistema. Los monitores no proporcionan por si mismos un mecanismo para la sincronización de tareas y por ello su construcción debe completarse permitiendo, por ejemplo, que se puedan usar señales para sincronizar los procesos. Así, para impedir que se pueda producir un bloqueo, un proceso que gane el acceso a un procedimiento del monitor y necesite esperar a una señal, se suspende y se coloca fuera del monitor para permitir que entre otro proceso. 3.4.8 TRANSMISION DE MENSAJES Este método de comunicación entre procesos utiliza dos primitivas, send y relieve, que al igual que los semáforos y a diferencia de los monitores, son llamadas al sistema, no construcciones del lenguaje. De tal manera pueden incluirse con facilidad en procedimientos de biblioteca como: send(destino, &mensaje); y relieve(origen, &mensaje); La primera llamada envía un mensaje a un destino dado y la segunda recibe un mensaje de un origen dado. Si no hay mensajes disponibles, el receptor puede bloquearse hasta que llegue uno, o bien, regresar de inmediato cono un código de error. 3.5 PROBLEMAS DE COMUNICACION ENTRE PROCESOS INANICION Sucede cuando un proceso esta en espera de un recurso que nunca va a ser liberado, esto es el resultado de una asignación conservadora de recursos, donde una tarea no puede ejecutarse por que permanece en espera de recursos que nunca quedan disponibles, lo que afecta directamente y exclusivamente a los procesos. Debido a que esta situación conservadora de recursos se da por prioridad, una posible solución es aplicar la prioridad por antigüedad del proceso. DEADLOCK (Abrazo mortal) Se trata de bloqueos mutuos entre procesos y recursos, es un problema de sincronización de procesos que afectan exclusivamente a los recursos, debido a que un proceso se vuelve propietario de un recurso que ya no necesita y no lo puede liberar por que esta en espera de otro recurso que se encuentra en la misma situación, provocando un bloqueo mutuo de recursos y procesos. M. en C. Marisol Hernández López 3.5.1 LOS CINCO FILOSOFOS COMENSALES Cinco filósofos están sentados en torno a una mesa circular, cada uno tiene un plato de espagueti y requiere de dos tenedores para comerlo, entre cada par de platos hay un tenedor. La vida de un filósofo consiste en periodos alternados de comer y pensar, cuando un filósofo tiene hambre, trata de tomar los tenedores que están a su izquierda y a su derecha, uno a la vez, en cualquier orden. Si logra tomar los tenedores, come durante un tiempo, luego los deja en la mesa y sigue pensando. El problema sucede cuando los filósofos tratan de comer al mismo tiempo y entonces cada uno tomara su tenedor derecho o bien izquierdo y por lógica ninguno podrá tener ambos tenedores para comer, si tuvieran que verificar que ambos tenedores estén disponibles (uno a la vez) para comer, debería existir una eficiente sincronización para que esto sucediera, sino tendrían que hacer la revisión indefinidamente lo que provocaría inanición. Este problema suele suceder en los sistemas operativos cuando se trata de atender solicitudes para el uso de recursos, una posible solución es detectar trabajos con inanición, esto es controlando el tiempo que cada trabajo permanece en espera de recursos, una vez detectada la inanición el sistema puede bloquear nuevos trabajos hasta que los trabajos hambrientos queden satisfechos. 3.5.2 LECTORES Y ESCRITORES El sistema categoriza los procesos dependiendo del modo como utilizan el recursos, por lo que maneja dos tipos de procesos: procesos lectores (R) y procesos escritores (W). • • LECTOR: No modifica la estructura de los datos, por lo que son capaces de compartir archivos al mismo tiempo con otros procesos lectores. ESCRITOR: Debido a que es capaz de leer y modificar la estructura tienen acceso exclusivo a los datos, solo puede entrar un proceso lector a la vez. SOLUCIONES DEL PROBLEMA 1er SOLUCION: El sistema debe mantener un alto grado de concurrencia entre los lectores, aceptar tantos lectores como le sea posible. Un escritor no va a ser capaz de hacer uso de la variable hasta que salga o termine el último lector que entro. Sin embargo, tiene una desventaja: en esta situación el sistema no permite ninguna actualización. 2ª SOLUCION: Una estrategia propone que tanto lectores como escritores puedan completar sus operaciones en tiempos finitos. De esta manera, un nuevo lector no debería comenzar si hay un escritor esperando, esto evita la postergación de escritores y todos los lectores que esperan el final de una escritura deberían tener prioridad sobre el siguiente escritor, esto evita la postergación de lectores. 3.6 SERVICIOS POSIX PARA LA GESTION DE PROCESOS Las primeras versiones de UNIX no tenían subprocesos. En un principio se usaban muchos paquetes de subprocesos, pero la proliferación de tales paquetes dificulto mucho la escritura de código portátil, de ahí que se haya creado un proyecto que tenia como objetivo lograr la portabilidad de estas aplicaciones en la diferentes M. en C. Marisol Hernández López versiones de UNIX (tal como con MS-DOS), POSIX, de las iniciales de Portable Operating System, por lo tanto las llamadas empleadas para administrar subprocesos se estandarizaron como parte de esta. La especificación POSIX no adopto una postura en cuanto a si los subprocesos debían implementarse en el kernel o en el espacio de usuario, la ventaja de tener subprocesos en el espacio de usuario es que se les puede implementar sin tener que modificar el kernel y la conmutación de subprocesos es muy eficiente, la desventaja esta en que si un subproceso se bloquea, todos los subprocesos del proceso se bloquearan. Las llamadas de subprocesos mas usadas son las siguientes: Llamada de subprocesos Descripción pthread_create Crea un subproceso nuevo en el espacio de direcciones del invocador pthread_exit Termina el subproceso invocador pthread_join Espera a que un subproceso termine pthread_mutex_init Crea un nuevo mutex pthread_mutex_destroy Destruye un mutex pthread_mutex_lock Cierra el bloqueo de un mutex pthread_mutex_unlock Abre el bloqueo de un mutex pthread_cond_init Crea una variable de condición pthread_cond_destroy Destruye una variable de condición pthread_cond_wait Espera a una variable de condición pthread_cond_signal Libera un subproceso que espera a una variable de condición 3.6.1 SERVICIOS WIN32 PARA LA GESTION DE PROCESOS Win32 dispone de dos mecanismos de comunicación, que también se pueden utilizar para sincronizar. Estos mecanismos son las tuberías y los mailslots, como mecanismos de sincronización puros, Win32 dispone de secciones críticas, semáforos, mutex y eventos. Los objetos de sincronización en Win32 tienen asociados un manejador que se puede utilizar en funciones de espera (wait), que permiten a un proceso ligero (subproceso) bloquear su ejecución. Las características de los mecanismos de sincronización, son: Mecanismos Identificador Tuberías Descriptor de archivos Semáforos Variable de tipo semáforo Mutex y variables condicionales Variable de tipo mutex y condicional Cola de mensajes Descriptor propio M. en C. Marisol Hernández López UNIDAD IV. 4.1 DISPOSITIVOS DE ENTRADA/SALIDA Existe un administrador de dispositivos entrada/salida que se encarga de vigilar y controlar cada uno de los dispositivos de E/S así como los canales, unidades de control, buffers y todo aquel componente que permita la comunicación entre el sistema operativo y el hardware. Debido a que el administrador E/S maneja políticas de asignación y liberación de los recursos tiene una relación estrecha con el BIOS del sistema, el cual contiene información sobre el manejo y control de cada uno de ellos. Mantener el equilibrio entre la oferta y la demanda de recursos, además tiene la capacidad para controlar muchas facetas de las E/S automáticamente sin la implicación del procesador. 4.1.1 INTERRUPCION DEL CPU Las interrupciones se dividen en dos tipos las cuales son: Externas e Internas. Una interrupción externa es provocada por un dispositivo externo al procesador. Las dos líneas que pueden señalar interrupciones externas son la línea de interrupción no enmascarable (NMI) y la línea de petición de interrupción (INTR). La línea NMI reporta la memoria y errores de paridad de E/S. El procesador siempre actúa sobre esta interrupción, aun si emite un CLI para limpiar la bandera de interrupción en un intento por deshabilitar las interrupciones externas. La línea INTR reporta las peticiones desde los dispositivos externos, en realidad, las interrupciones 05H a la 0FH, para cronometro, el teclado, los puertos seriales, el disco duro, las unidades de disco flexibles y los puertos paralelos. Una interrupción interna ocurre como resultado de la ejecución de una instrucción INT o una operación de división que cause desbordamiento, ejecución en modo de un paso o una petición para una interrupción externa, tal como E/S de disco. Los programas por lo común utilizan interrupciones internas, que no son enmascarables, para accesar los procedimientos del BIOS y del DOS. 4.1.2 DEFINICION Y MANEJO DE INTERRUPCIONES INTERRUPCIÓN Es una llamada al sistema, generada por el propio proceso, las interrupciones son tomadas siempre por el sistema operativo que a su vez analiza la petición y lleva a cabo un proceso específico que direcciona la interrupción a una tabla que indica la prioridad y los procesos necesarios para ejecutarla. Es la indicación al sistema de que hay otra actividad pendiente y cambio de contexto, se tiene que estar ejecutando un programa y producir una interrupción, consiste en que el procesador atiende una interrupción y decide en función de unos criterios preestablecidos cambiar de proceso. Las interrupciones se pueden dividir en 2 grupos: • Interrupciones de Software. También son conocidas como "falsas interrupciones" ya que se producen como consecuencia de la ejecución de otra instrucción al no ser el hardware las que las produce. Otra forma de entender estas interrupciones, es verlas desde el punto de vista de llamadas M. en C. Marisol Hernández López • a subrutinas, lógicamente, la gracia está en que esas subrutinas no son nuestras, sino que son las propias de cada sistema operativo, driver o similar tiene. Quedaros pues, con que somos nosotros los que hacemos invocamos a la interrupción. Este tipo de interrupción es el más habitual en la programación. Interrupciones de Hardware. Este tipo de interrupción es invocado directamente por los dispositivos hardware de nuestro ordenador, por lo que "son bastante más auténticas" que las anteriores. Al producir algún dispositivo hardware la interrupción el controlador de interrupciones o PIC se encarga de gestionarla determinando, en el caso de producirse más de una interrupción a la vez, cual de ellas tiene más prioridad y debe de ser gestionada por la CPU. El funcionamiento de este tipo de interrupciones es bastante similar y se suele utilizar mucho para la programación de sistemas de comunicaciones. 4.1.3 ENTRADA / SALIDA PROGRAMADA Un controlador de dispositivos o unidades de E/S se encargan de controlar uno o más dispositivos del mismo tipo, de intercambiar información entre ellos y al memoria principal de ellos o la CPU. SPOOL: Concepto basado en evitar tiempos de óseo por parte del procesador, debido a que permite llevar a cabo instrucciones de entrada/salida fuera de línea de ejecución. La entrada/salida programada permite que se transfiera información entre las unidades de control y la CPU, a través de un programa que se ejecuta continuamente. 4.1.4 ENTRADA/ SALIDA CONTROLADA POR INTERRUPCIONES Permite que el procesador envié la orden de E/S al controlador de dispositivos específicos sin esperar a que la orden se lleve a cabo, por lo que el procesador puede dedicarse a otras tareas mientras que la instrucción de E/S inicia su ejecución. 4.1.5 CLASIFICACION Interrupción enmascarable: Significa que, bajo control del software, el procesador puede aceptar o ignorar (enmascarar) la señal de interrupción. Para ello se envía una señal a la terminal INTR, y el procesador la atiende o la ignora en función del contenido de un bit (IF) en un registro (FLAGS) que puede estar habilitado o deshabilitado. En el primer caso, cuando se recibe la señal, el procesador concluye la instrucción que estuviese en proceso y a continuación responde con una combinación de señales en algunas de sus patillas componiendo una sucesión de dos señales INTA ("Interrupt Acknowledge"). Interrupción no enmascarable: Significa que la interrupción no puede ser deshabilitada por software. Este tipo de interrupciones ocurren cuando se recibe una señal en la terminal NMI ("Nonmaskable Interrupt") del procesador. Se reservan para casos en que es crítica la respuesta, por ejemplo que se detecte un error de paridad en la memoria. Además son de prioridad más alta que las enmascarables. La única forma de enmascarar estas interrupciones es a través de circuitos externos al procesador, por ejemplo a nivel del PIC. M. en C. Marisol Hernández López 4.1.6 MANEJADOR DE INTERRUPCIONES El manejador de interrupciones es un programa de control que se encarga de guiar la secuencia de interrupción por la cual se hizo la llamada. Cuando sucede una interrupción el manejador tiene que llevar a cabo la siguiente secuencia de instrucciones: 1. Describir y almacenar la interrupción: Debe conocer el tipo de interrupción que se dio para enviarlo al usuario mediante un mensaje (mensaje de error o avisos). 2. Guardar el estado del procesador que hizo la interrupción: El manejador debe almacenar el estado actual de los procesos que se encontraban activos y del proceso que hizo la llamada, los datos que se guardan son: contador de programa, contenidos de los registros, pilas y atributos de los procesos. 3. Procesar la interrupción: • Cuando se trata de una E/S se detiene al proceso y se envía a la cola apropiada del dispositivo de E/S, cuando se atiende a la solicitud de E/S y una vez que acaba el proceso es devuelto a la cola de listos para que continúe su ejecución. • Cuando se trata de un error el mensaje de error y el estado del proceso se envía al usuario, la ejecución de los procesos se detiene y el sistema debe ser capaz de restaurarse o reiniciarse. 4.1.7 VECTOR DE INTERRUPCIONES Es el mecanismo de interrupción que acepta una dirección, que es un número que selecciona una rutina específica para manejo de interrupciones. Esta dirección es un desplazamiento en una tabla la cual se denomina “Vector de Interrupciones”, este contiene las direcciones de memoria de los manejadores de interrupción especializados. En muchas arquitecturas de computación típicas, los vectores de interrupción se almacenan en una tabla en una zona de memoria, la llamada tabla de vectores de interrupción, de modo que cuando se atiende una petición de interrupción de número n, el sistema, tras realizar eventualmente algunas tareas previas ( tales como salvar el valor de ciertos registros) transfiere el control a la dirección indicada por el elemento n-ésimo de dicha tabla. Usualmente, en las arquitecturas más típicas, la transferencia de control se efectuará de modo análogo a una llamada a función a nivel de máquina, almacenándose en una pila el estado actual del registro contador de programa, que será recuperado por una instrucción máquina de retorno de interrupción, que restaurará el estado correspondiente a la ejecución normal de programa forzando la ejecución de la siguiente instrucción. 4.2 CANAL DE E/S Son unidades programables que se encargan de las entradas y salidas provenientes de la CPU y las llevan a la unidad de control apropiada. Sincronizan la velocidad rápida del CPU con la lenta del dispositivo de E/S y permite la superposición de operaciones de E/S con las operaciones del procesador, de tal forma que la CPU y al E/S puedan procesarse de manera concurrente, a este concepto se le denomina spool. M. en C. Marisol Hernández López CANAL 1 UNIDAD DE CONTROL 1. UNIDAD DE CONTROL 2. Disco 1. Disco 2. Disco 3. Disco 1. Disco 2. Disco 3. CPU. UNIDAD DE CONTROL 3. CANAL 2 UNIDAD DE CONTROL 4. UNIDAD DE CONTROL 5. Disco 4. Disco 5. Disco 6. Teclado. Mouse. 4.2.1 TIPOS DE CANALES Los canales son tan rápidos como la CPU, que cada canal puede dirigir varias unidades de control, así mismo cada unidad de control puede dirigir varios dispositivos. La configuración típica de un canal es que un canal y hasta ocho unidades de control, cada una de las cuales se comunica con hasta ocho dispositivos de E/S. Al inicio de un comando E/S, la información que pasa de la CPU al canal es: 1. 2. 3. 4. Comando E/S (read, write, rewind, etc) Numero del canal. Dirección del registro físico que se va a transferir (desde el almacenamiento secundario). Dirección de inicio del buffer a partir del cual se va a transferir el registro o hacia el cual se va a mandar. 4.2.2 INTERFACES La mayor parte de los sistemas utilizan uno de dos estándares de interfaz de alto rendimiento: IDE o SCSI. IDE, ofrece un buen rendimiento, son poco costosas y se entran en las PC, SCSI, son más caras y transfieren datos a una tasa más rápida que las IDE, servidores y estaciones de trabajo. 4.2.3 CONTROLADORES CONTROLADORES DE DISPOSITIVOS (Unidades de E/S). Es un conjunto de componentes electrónicos que operan un puerto, un bus o un dispositivo mediante un modo de programa específico que maneja las interrupciones particulares del dispositivo. Se encargan de interpretar la señal enviada por el canal que corresponde a una instrucción específica para un dispositivo específico. M. en C. Marisol Hernández López Las unidades de E/S por lo regular constan de un componente mecánico y uno electrónico, en muchos casos es posible separar las dos partes para tener un diseño más modular y general. El componente electrónico se denomina controladora o adaptador de dispositivo. 4.3 MEMORIAS TRASITORIAS (BUFFERS) Los buffers son áreas de almacenamiento temporal que residen en la memoria principal, en los canales y en las unidades de control. Sirven para almacenar datos leídos de un dispositivo de entrada antes que los necesite el procesador y para almacenar datos que se escribirán en un dispositivo de salida. 4.3.1 TIPOS DE MEMORIAS TRANSITORIAS Buffers de una única fila Un buffer de una única fila no es en realidad un cursor, aunque aquí se apliquen las mismas reglas de pertenencia que se aplican a un cursor de conjunto de claves de sólo avance. Con un buffer de una única fila sólo es posible examinar los datos de la fila del conjunto de resultados. Las filas anteriores no están disponibles y la fila actual no estará accesible después de pasar a la siguiente fila del conjunto de resultados. Buffers de n filas Un buffer de n filas amplía el ámbito y la capacidad de desplazamiento del buffer de una única fila. En este caso, a la estación de trabajo se le expone un número determinado de filas del conjunto de resultados y a la aplicación se le permite que se desplace libremente por esas filas. 4.3.2 MANEJO DE MEMORIAS TRANSITORIAS El uso de búferes también es un problema, tanto para los dispositivos de caracteres como para los de bloques. Para entender mejor el problema, consideremos un proceso que quiere leer datos de un módem, una posible estrategia para manejar los caracteres que llegan es hacer que el proceso de usuario emita una llamada al sistema read y se bloquee en espera de un carácter. La llegada de cada carácter causa una interrupción, el procedimiento de servicio de interrupciones entrega el carácter al proceso de usuario y lo desbloquea; después de colocar el carácter en algún lado, el proceso lee otro carácter y vuelve a bloquearse. Esta posible solución no es recomendable debido a que un proceso se ejecutara muchas veces durante lapsos de tiempo muy cortos. Los búferes son muy importantes en las operaciones de salida. Por ejemplo, considere la forma en que se envían salidas al módem siguiendo el modelo descrito anteriormente, el proceso de usuario ejecuta una llamada write al sistema para enviar a la salida n caracteres. 4.3.3 IMPLEMENTACION La implementación mas adecuada para el uso de memorias transitorias es que el kernel copie los datos en un búfer kernel y desbloqueando de inmediato el invocador. Ahora no importa cuando termine la E/S real; el usuario podrá volver a utilizar el búfer en el instante en que se le desbloquee. M. en C. Marisol Hernández López El uso de búferes es una técnica ampliamente utilizada, pero tiene sus desventajas, si los datos se colocan en demasiados búferes sucesivos, hay una merma en el desempeño. 4.3.4 TERMINALES DE RED Se denominan dispositivos de comunicación y son aquellos que permiten conectar a la computadora con otras a través de una red, los dos tipos de dispositivos mas importantes son: Tarjeta red y el módem. El administrador de red proporciona una forma conveniente para los usuarios de compartir recursos y al mismo tiempo controlar sus acceso a los mismos, mediante la implementación de protocolos y comunicaciones de red; estos recursos incluyen hardware como la CPU, áreas de memoria, impresoras, unidades de almacenamiento secundario, módem; y recursos de software como compiladores, programas de aplicación y archivos de datos. 4.3.5 INTERFACES GRAFICAS DE USUARIO Una interfaz gráfica de usuario, definida por sus siglas en inglés GUI, es la interfaz de usuario que le permite activar los comandos de sistema operativo con un clic sobre un icono de escritorio mediante un dispositivo apuntador como un ratón o una pantalla táctil. El GUI evolucionó a partir de las interfaces de usuario impulsadas por comandos. Muchas interfaces gráficas de usuario comparten muchas similitudes, tanto en apariencia como en operación. Ejemplo de ello, se puede mencionar a sistemas operativos populares como Windows (todas sus versiones hasta las actuales), UNIX, Macintosh (diferentes versiones) y Linux. 4.4 SERVICIOS DE E/S: GENERICOS PARA POSIX Y WIN32 Debido al tratamiento diferenciado que se da el reloj, se presentan separadamente los servicios relacionados con el mismo de los correspondientes a los dispositivos de entrada/salida convencionales. En cuanto a los servicios del reloj, se van a especificar de acuerdo a las tres categorías: fecha y hora, temporizaciones y contabilidad. SERVICIO DE FECHA Y HORA: El servicio para obtener fecha y hora es time, y su prototipo es: time_t time(time_t *t); SERVICIO DE TEMPORIZACION: El servicio esta definido por alarm, y su prototipo es: unsigned int alarm (unsigned int segundos); SERVICIO DE CONTABILIDAD: Existen diversas funciones que se pueden englobar en esta categoria, por ejemplo la mas usada times, que devuelve información sobre el tiempo de ejecución de un proceso y sus hijos. clock_t times (struct tms *info); M. en C. Marisol Hernández López UNIDAD V. 5. SISTEMA DE ARCHIVOS Es el software que se encarga de crear, eliminar, modificar y controlar el acceso a cada uno de los archivos del sistema, además de administrar los recursos utilizados por los archivos. La función principal del administrador de archivos es una de las funciones principales es estar a cargo de los componentes físicos del sistema, los recursos de información y las políticas que se utilizan para almacenar y distribuir los archivos. 5.1 MANEJO DE ARCHIVOS Y DIRECTORIOS El administrador de archivos controla la información mediante la utilización de archivos y directorios. Por lo tanto realiza cuatro tareas fundamentales: 1. 2. 3. 4. Controlar el almacenamiento de los archivos. Utilizar políticas de almacenamiento (donde, como). Asignación del archivo. Desasignar el archivo. 5.1.1 ASPECTOS BASICOS DE LOS ARCHIVOS Los archivos son un mecanismo de abstracción. Son una forma de almacenar información en un disco y volver a leerla mas adelante. Esto debe hacerse de forma que el usuario quede protegido contra los detalles de forma y lugar de almacenamiento de la información, así como el funcionamiento real de los discos. Cuando un proceso crea un archivo, le da a éste un nombre. Cuando el proceso concluye el archivo sigue existiendo y otros procesos pueden tener acceso a él mediante su nombre. La extensión determina con que programa se ejecuta ese archivo. ESTRUCTURA DE UN ARCHIVO Los archivos se pueden estructurar de varias maneras: puede ser una serie estructurada de bytes, o una secuencia de archivos de longitud fija, cada uno con su propia estructura interna. También esta la estructura de árbol en los archivos donde hablamos de jerarquías y ramificaciones y llaves. TIPOS DE ARCHIVOS Los sistemas operativos soportan varios tipos de archivos, archivos regulares, directorios, archivos especiales de caracteres y archivos especiales de bloques. 1. Archivos regulares: son aquellos que contienen información del usuario (generalmente son binarios o en ASCII). 2. Los directorios: son archivos del sistema para el mantenimiento de una estructura del sistema de archivos. 3. Los archivos especiales de caracteres: Tienen relación con entrada/salida y se usan para modelar dispositivos seriales de E/S, tales como las impresoras, terminales y redes. M. en C. Marisol Hernández López 4. Los archivos especiales de bloques: se usan para modelar discos. 5.1.2 DIRECTORIOS En sistemas de archivos jerárquicos, en lo usual, se declara la ubicación precisa de un archivo con una cadena de texto llamada "ruta". La nomenclatura para rutas varía ligeramente de sistema en sistema, pero mantienen por lo general una misma estructura. Una ruta viene dada por una sucesión de nombres de directorios y subdirectorios, ordenados jerárquicamente de izquierda a derecha y separados por algún carácter especial que suele ser una barra ('/') o barra invertida ('\') y puede terminar en el nombre de un archivo presente en la última rama de directorios especificada. Un directorio tiene por lo menos varios datos, uno por archivo 5.2 SISTEMAS DE ARCHIVOS El administrador de archivos tiene que controlar esta información mediante el sistema de archivos, que esta compuesto principalmente por una estructura de directorios y una colección de archivos correspondiente a cada directorio. C: Invoca siempre a “FAT”. La tabla de asignación de archivos contiene un índice separado de un nivel para cada archivo; el índice posee una entrada para cada sección asignada al archivo. El índice del archivo se guardará en un bloque aparte y la entrada del archivo en la tabla de asignación, apuntará a dicho bloque. Cuando se crea un sistema de archivos, se almacena en una parte especial del mismo una tabla que contiene una entrada por cada bloque de disco y que está indexada por número de bloque. A medida que se asignan nuevos bloques al archivo, se apunta a ellos desde la última entrada de la tabla asociada al archivo. 5.2.1 MANEJO DEL ESPACIO EN DISCO Los sistemas de archivos se almacenan en discos. Casi todos los discos pueden dividirse en una o mas particiones, con sistemas de archivos independientes en cada partición. El sector 0 del disco se llama registro maestro de arranque (MBR; Master Boot Record) y sirve para arrancar la computadora. El final del MBR contiene la tabla de particiones, esta tabla contiene las direcciones inicial y final de cada partición. Una de las particiones de la tabla esta marcada como activa, cuando se enciende la computadora el BIOS lee el MBR del disco y lo ejecuta. Lo primero que hace el programa MBR es localizar la partición activa, leer su primer bloque, llamado bloque de arranque y ejecutarlo. El programa del bloque de arranque carga el sistema operativo contenido en esa partición. 5.2.2 ALMACENAMIENTO DE ARCHIVOS ASIGNACIÓN ADYACENTE El aspecto más importante en la implantación del sistema de archivos es cómo se realiza el registro de los bloques asociados a cada archivo. El espacio en disco se divide en unidades de asignación denominadas bloques, M. en C. Marisol Hernández López de tal manera que cuando un proceso solicita espacio en disco se entregará una cantidad de bloques que satisfaga las necesidades. Los tamaños típicos de bloques fluctúan entre 512 bytes hasta 2 Kb. Para guardar constancia de las secciones asignadas a un archivo se utiliza una estructura denominada normalmente como Tabla de Asignación de Archivos (FAT). Cuando se crea un archivo se le asigna un único conjunto contiguo de bloques; por tanto esta es una estrategia de asignación previa denominada asignación adyacente. En la asignación adyacente se almacena cada archivo como un solo bloques de datos en el disco. ASIGNACIÓN POR LISTAS LIGADAS Para almacenar archivos se mantiene a cada uno de ellos como una lista ligada de bloques en disco. Donde en cada bloque de un archivo existe un apuntador al siguiente bloque del mismo. La primera palabra de cada bloque guarda la dirección del siguiente. Cada bloque contendrá un puntero al siguiente bloque de la cadena. ASIGNACIÓN POR LISTAS LIGADAS CON ÍNDICE En esta asignación se toma el apuntador que se encuentra en la primera palabra del bloque de disco y lo colocamos en una tabla o índice de la memoria, estaríamos hablando de una asignación por listas ligadas con índice. En la asignación indexada, todo el bloque está disponible para almacenar datos. La asignación puede hacerse por bloques de tamaño fijo o en secciones de tamaño variable. La tabla de asignación de archivos contiene un índice separado de un nivel para cada archivo; el índice posee una entrada para cada sección asignada al archivo. El índice del archivo se guardará en un bloque aparte y la entrada del archivo en la tabla de asignación, apuntará a dicho bloque. 5.2.3 ESTRUCTURA DE DIRECTORIOS Antes de poder leer un archivo éste debe ser abierto, al abrir un archivo, el So usa el nombre de la ruta de acceso dado por el usuario para localizar el dato en el directorio. • • • Directorios en CP/M: en este sistema solo existe un directorio, por lo que todo lo debe hacer el sistema de archivos para encontrar el nombre es que tiene que buscar en un solo directorio. Directorios en MS/DOS: los directorios pueden contener otros directorios, lo que conduce a un sistema jerárquico de archivos. Directorios en UNIX: es en extremo su estructura sencilla, cada entrada contiene un nombre de archivo y su número de nodo-i. toda la información relativa al tipo, tamaño, tiempos, propiedad y bloques en disco esta contenida en ese nodo. 5.2.4 ARCHIVOS COMPARTIDOS Cuando varios usuarios colaboran en un proyecto, es común que necesiten compartir archivos, por ello es en muchos casos conveniente que un archivo compartido aparezca al mismo tiempo en diferentes directorios que pertenecen a distintos usuarios. El archivo compartido se llama enlace (link), por lo que ahora el sistema de archivos es mas bien una gráfica cíclica dirigida, no un árbol. M. en C. Marisol Hernández López Compartir archivos es conveniente, pero también presenta problemas, por principio, si los directorios contienen en verdad direcciones de disco, tendrá que crearse una copia de ellas en cada uno cuando se enlace el archivo, además de que la actualización correcta no puede mantenerse a tiempo. 5.2.5 RENDIMIENTO DEL SISTEMA DE ARCHIVOS El acceso al disco es mucho más lento que el acceso a memoria. La lectura de una palabra de memoria tarda un máximo de unas cuantas centenas de nano segundos. La lectura de un bloque de disco tarda decenas de milisegundos, 100 000 veces mas lento. La técnica más común para reducir los accesos a disco es el bloque de cache o búfer caché. Una caché es una colección de bloques que pertenecen desde el punto de vista lógico al disco, pero que se mantienen en la memoria por razones de rendimiento. 5.3 SEGURIDAD Los términos seguridad y protección se utilizan en forma indistinta. Sin embargo, es útil hacer una distinción entre los problemas generales relativos a la garantía de que los archivos no sea leídos o modificados por personal no autorizado, lo que incluye aspectos técnicos, de administración, legales y políticos, por un lado y los sistemas específicos del sistema operativo utilizados para proporcionar la seguridad, por el otro. Para evitar la confusión, se utilizará el término seguridad para referirnos al problema general y el término mecanismo de protección para referirnos a los mecanismos específicos del sistema operativo utilizado para resguardar la información de la computadora. Sin embargo, la frontera entre ellos no está bien definida. 5.3.1 FALLAS DE SEGURIDAD Al igual que la industria del transporte tiene el Titanic y el Hindenburg, los expertos en seguridad de las computadoras tienen algo que quisieran poder olvidar. En esta sección se analizaran algunos problemas de seguridad que surgieron en cuatro sistemas operativos: Unix, Multics, Tenex, y el OS/360. La utilería LPR de Unix imprime un archivo en la impresora de líneas tiene una opción para eliminar el archivo después de ser impreso. En las primeras versiones de Unix, era posible que cualquiera utilizara LPR para imprimir, para que después el sistema eliminara el archivo con la contraseña. El problema de seguridad de Multics se relacionaba con el hecho de que los diseñadores de sistema siempre pensaron en Multics como un sistema de tiempo compartido, cuyas facilidades para el procesamiento por lotes surgieron como una idea tardía, para pacificar ciertas viejas intransigencias de los lotes. La seguridad en el tiempo compartido era excelente; la seguridad en los lotes era inexistente. Cualquier persona podía introducir un trabajo por lotes que leyera un paquete de naipes en el directorio de cualquier otro usuario. El sistema operativo Tenex era muy popular en las computadoras DEC-10 ya no se utiliza mucho pero su nombre quedará grabado para siempre en los anales de la seguridad de las computadoras, debido al siguiente error del diseño. Tenex permitía la paginación. Para que los usuarios supervisaran el comportamiento de sus programas, era posible indicar al sistema que llamara una función del usuario si ocurría un fallo de página. M. en C. Marisol Hernández López En el sistema OS/360 era posible iniciar una lectura de cinta y continuar después el cálculo mientras que la unidad de cinta transferiría datos al espacio el usuario. El truco aquí consistía en iniciar con cuidado una lectura de cinta y después hacer una llamada al sistema que necesitará una estructura de datos del usuario; por ejemplo, un archivo que leer y su contraseña. 5.3.2 PRINCIPIOS DE DISEÑO PARA SEGURIDAD Al diseñar sistemas se debe asegurar que pueden resistir ataques de estos tipos: 1. Solicitar páginas de memoria, espacio en disco y solo leerlas. Muchos sistemas no las borran antes de asignarlas y podrían contener interesante información escrita por el anterior usuario. 2. Intentar llamadas al sistema no válidas, o bien llamadas válidas con parámetros no válidos, o incluso llamadas válidas con parámetros válidos pero no razonables. Muchos sistemas pueden ser confundidos con facilidad. 3. Iniciar la conexión al sistema y oprimir entonces DEL, RUBOUT o BREAK a la mitad de la secuencia de acceso. En ciertos sistemas el programa de verificación de la contraseña quedará eliminado y se considerará un acceso exitoso. 4. Intentar modificar las complejas estructuras del sistema operativo que está en el espacio del usuario. En muchos sistemas, para abrir un archivo, el programa construye una enorme estructura de datos, la cual contiene el nombre del archivo y muchos otros parámetros, lo cual se transfiere al sistema. Al leer o escribir en un archivo, el sistema puede actualizar a veces la propia estructura. La modificación de estos campos puede causar estragos a la seguridad. 5. Engañar al usuario, escribiendo un programa que haga aparecer "login": En la pantalla y que después desaparezca. Muchos usuarios irán hacia la Terminal y le indicarán su nombre y su contraseña de acceso, la cual registrará el programa para su diabólica maestro. 6. Buscar manuales que digan "no lleve a cabo X" he intentar tantas variaciones de X como sea posible. 7. Convencer a un programador del sistema para que modifique el sistema, con el fin de evitar ciertas verificaciones vitales de seguridad para cualquier usuario con su nombre de acceso. Este ataque se conoce como una trampa (trap door). 5.3.3 VIRUS Una categoría especial de ataque es el virus computacional, el cual se ha convertido en un enorme problema para muchos usuarios de computadoras. Un virus es un fragmento de programa que se añade a un programa legítimo con la intención de infectar a otros. Difiere de un gusano solo en el echo en que un virus está a cuesta de un programa existente, mientras que un gusano es un programa completo en si mismo. Un virus típico funciona de la manera siguiente. En primer lugar, la persona que escribe el virus produce un nuevo programa útil, que ha menudo es un juego para MS-DOS. Este programa contiene el código del virus oculto en él. El juego se envía a un sistema de boletines públicos, o bien se le ofrece gratis o a un módico precio en discos flexibles. Se anuncia el programa y las personas empiezan a cargarlo y usarlo. La construcción de un virus no es fácil, por lo que las personal que los realizan son brillantes en general y la calidad del juego o programa es con frecuencia excelente. M. en C. Marisol Hernández López Al iniciar el programa, este comienza a examinar de inmediato todos los programas en binario del disco duro, para ver si ya están infectados. Si encuentra un programa no infectado, lo infecta al añadir el código del virus al final del archivo y re emplaza la primera instrucción con un salto al virus. Cuando el código del virus termina su ejecución, ejecuta las instrucciones que estaban antes en primer lugar y después salta a la segunda instrucción. De esta forma, cada vez que se ejecuta un programa infectado, este intenta infectar más programas. 5.3.4 MECANISMO DE PROTECCION DOMINIOS DE PROTECCIÓN Un sistema de cómputos contiene muchos objetos que necesitan protección. Estos objetos pueden ser el hardware, la CPU, los segmentos de memoria, terminales, unidades de disco o impresoras; o bien ser del software, como los proceso, archivos, bases de datos o semáforos. Cada objeto tiene un único nombre mediante el cual se la hace referencia y un conjunto de operaciones que se pueden realizar en él. READ y WRITE son operaciones adecuadas para un archivo; UP y DOWN tiene sentido en un semáforo. Es evidente que se necesita una vía para prohibir el acceso de los procesos a los objetos a los que no tiene permitido dicho acceso. Además, este mecanismo debe posibilitar la restricción de los procesos a un subconjunto de operaciones legales en caso necesario. Por ejemplo, puede permitirse que el proceso A lea el archivo F, pero no escriba en él. LISTAS PARA CONTROL DE ACCESO En la práctica, rara vez se almacena la matriz puesto que es grande y rala. La mayoría de los dominios no tienen acceso alguno a la mayoría de los objetos, por lo que el almacenamiento de una enorme matriz casi vacía es un desperdicio de espacio en disco. Sin embargo, existen dos métodos prácticos, que guardan la matriz por renglones o por columnas, pero sólo los elementos no vacíos. Los dos puntos de vista son distintos, aunque no lo parezcan. La primera técnica asocia a cada objeto una lista (ordenada) con todos los dominios que pueden tener acceso al objeto y la forma de dicho acceso. Esta lista se llama Lista de Control de Acceso (ACL). El propietario de un objeto puede modificar su ACL en cualquier momento, lo que hace fácil prohibir accesos antes permitidos. El único problema es que probable que la modificación de la ACL no afecte a los usuarios que utilicen en ese momento al objeto (por ej. alguien que tenga abierto el archivo). MODELOS DE PROTECCIÓN Las matrices de protección, no son estáticas. Estas cambian con frecuencia cuando se crean los objetos, se destruyen objetos anteriores o bien cuando los propietarios deciden agrandar o restringir el conjunto de usuarios de sus objetos. Se ha prestado gran atención al modelado de sistemas de protección en los que la matriz de protección cambia de manera constante. 5.4 EJEMPLOS DE SISTEMAS DE ARCHIVOS Existen diversos sistemas operativos y por consecuencia cada uno con una estructura especifica de su sistema de archivos, sin embargo lo que si tienen en común, es el hecho de que el uso de sus sistemas de archivos es con el objetivo de mantener una estructura ordenada de la información y sobre todo el hecho de tener el control de la misma. M. en C. Marisol Hernández López 5.4.1 CP/M Un sistema CP/M solo tiene un directorio, que contiene entradas de tamaño fijo de 32 bytes, el tamaño del directorio, aunque fijo para una implementación dada, podría ser distinto en otras implementaciones de CP/M. Todos los archivos del sistema aparecen en este directorio. Después de que CP/M arranca, lee el directorio y calcula un mapa de bits que contiene lo bloques de disco libres, viendo cuales bloques no están en ningún archivo. Este mapa de bits, que solo ocupa 32 bytes par aun disco de 180 Kb, se mantiene en memoria durante la ejecución. En el momento de apagar el sistema el mapa se desecha, es decir no se escribe en el disco. 5.4.2 MS-DOS El sistema de archivos de MS-DOS sigue de cerca el patrón del sistema CP/M, incluyendo el uso de nombres de archivo de 8 + 3 caracteres. La primera versión de MS-DOS hasta la limitada a un solo directorio, sin embargo a partir de la segunda versión se expandió de manera considerable la funcionalidad del sistema de archivos. La principal mejora fue la inclusión de un sistema de archivos jerárquico en el que los directorios podían anidarse hasta una profundidad arbitraria. Esto implicaba que el directorio raíz podía contener subdirectorios y estos contener otros subdirectorios. 5.4.3 WIN 98 La estructura de directorios de Windows 98 tenía que ser compatible con MS-DOS, sin embargo utilizaba los 10 bytes reservados de las entradas. El sistema de archivos representa los nombres de archivos largos de modo que sean compatibles con MS-DOS. Ahora se puede tener acceso a los archivos con cualquiera de los dos nombres. Desde el punto de vista conceptual, la implementación del sistema de archivos FAT-32 es similar a la del sistema de archivos FAT-16, sin embargo en lugar de un arreglo de 65,536 entradas, hay tantas entradas como se necesiten para cubrir la parte del disco que contiene datos. 5.4.4 UNIX V7 UNIX tiene tres tipos de archivos: directorios, archivos ordinarios y archivos especiales. UNIX almacena los archivos como secuencias de bytes y no les impone estructura alguna. Por lo tanto los archivos de texto son cadenas de caracteres y los archivos binarios son secuencias de dígitos binarios agrupados en palabras. El sistema de archivos de UNIX organiza al disco en bloques de 512 bytes cada uno y lo divide en cuatro regiones: la primera, se reserva para el arranque (dirección 0), la segunda contiene el tamaño del disco y las fronteras con las demás regiones, la tercera, incluye una lista de definiciones de archivo, conocida como “lista i” que utiliza una combinación de números primarios de dispositivo mayores y menores y numero i que singularizan el archivo y la cuarta región contiene los bloques libres disponibles para almacenamiento de archivos. M. en C. Marisol Hernández López BIBLIOGRAFIA: 1) A. Tanenbaum Sistemas Operativos Modernos Prentice Hall, 5ª Edición 2) W. Stallings Sistemas Operativos Pearson-Prentice Hall 5ª Edición 3) I. Flynn, A. Mchoes Sistemas Operativos Thomson Learning 3ª Edición 4) Carretero, García Sistemas Operativos: Una visión aplicada Mc-Graw Hill 6ª Edición 5) Milenkovic Sistemas Operativos: Conceptos y Diseño Mc-Graw Hill 2ª Edición M. en C. Marisol Hernández López