Sistemas Operativos
Por Martín Silva
1/5
()
Información de este libro electrónico
Martín Silva
Licenciado en Sistemas de Información. Facultad de Ciencias Económicas “San Francisco” (anexa a la Universidad Católica Argentina). Analista de Sistemas. Pontificia Universidad Católica Argentina. Técnico en programación y operación de computadoras. Pontificia Universidad Católica Argentina. Postgrado en Ingeniería de Sistemas en la Universidad Tecnológica Nacional. Cursando actualmente el Máster en Redes de Datos en la Universidad Nacional de La Plata.
Relacionado con Sistemas Operativos
Libros electrónicos relacionados
Ingeniería de Software Calificación: 5 de 5 estrellas5/5Arquitectura de computadoras Calificación: 0 de 5 estrellas0 calificacionesAlgoritmos a Fondo - Con implementaciones en c y java Calificación: 5 de 5 estrellas5/5Estructuras de datos orientadas a objetos Calificación: 0 de 5 estrellas0 calificacionesComunicaciones - una introducción a las redes digitales de transmisión de datos y señales isócronas Calificación: 0 de 5 estrellas0 calificacionesProgramación estructurada y orientada a objetos Calificación: 0 de 5 estrellas0 calificacionesRedes convergentes: Diseño e implementación Calificación: 0 de 5 estrellas0 calificacionesLENGUAJES FORMALES Y TEORÃA DE AUTÓMATAS Calificación: 5 de 5 estrellas5/5Tecnologías de la Información: Un enfoque interdisciplinario Calificación: 0 de 5 estrellas0 calificacionesDesarrollo y programación en entornos web Calificación: 0 de 5 estrellas0 calificacionesJava a fondo - estudio del lenguaje y desarrollo de aplicaciones - 2a ed. Calificación: 5 de 5 estrellas5/5Programacion Orientada a Objetos y Estructura de Datos a Fondo Calificación: 0 de 5 estrellas0 calificacionesFundamentos de Programación: Diagramas de flujo, Diagramas N-S, Pseudocódigo y Java Calificación: 0 de 5 estrellas0 calificacionesFundamentos de Programación y Bases de Datos Calificación: 0 de 5 estrellas0 calificacionesProgramación estructurada a fondo: Implementación de algoritmos en C Calificación: 0 de 5 estrellas0 calificacionesSistemas informáticos y redes locales (GRADO SUPERIOR): REDES Y COMUNICACIONES INFORMÁTICAS Calificación: 5 de 5 estrellas5/5Matemáticas para la computación Calificación: 0 de 5 estrellas0 calificacionesMATLAB Aplicado a Robótica y Mecatrónica Calificación: 0 de 5 estrellas0 calificacionesTodo sobre sistemas embebidos: Arquitectura, programación y diseño de aplicaciones prácticas con el PIC18F Calificación: 4 de 5 estrellas4/5Operaciones auxiliares con Tecnologías de la Información y la Comunicación. IFCT0108 Calificación: 0 de 5 estrellas0 calificacionesTeoría de control para informáticos Calificación: 0 de 5 estrellas0 calificacionesComunicaciones y Redes: Para profesionales en sistemas de información Calificación: 0 de 5 estrellas0 calificacionesJava a fondo: Curso de programación Calificación: 0 de 5 estrellas0 calificacionesARDUINO - Aplicaciones en Robótica, Mecatrónica e Ingenierías Calificación: 5 de 5 estrellas5/5Circuitos Integrados Digitales CMOS - Análisis y Diseño Calificación: 0 de 5 estrellas0 calificacionesSistemas Telemáticos.: Gestión de redes Calificación: 5 de 5 estrellas5/5Aprende programación de computadoras Calificación: 5 de 5 estrellas5/5Introducción a la ingeniería Calificación: 0 de 5 estrellas0 calificacionesSeguridad Informática: Para No Informáticos Calificación: 0 de 5 estrellas0 calificacionesFundamentos de programación: un enfoque práctico Calificación: 5 de 5 estrellas5/5
Tecnología e ingeniería para usted
Scrum: Lo que necesita saber sobre esta metodología ágil para la gestión de proyectos Calificación: 5 de 5 estrellas5/5Inteligencia Artificial Calificación: 3 de 5 estrellas3/5Design Thinking para principiantes: La innovación como factor para el éxito empresarial Calificación: 4 de 5 estrellas4/5Guía práctica en gestión de proyectos + plantillas editables Calificación: 4 de 5 estrellas4/5Manual Técnico del Automóvil - Diccionario Ilustrado de las Nuevas Tecnologías Calificación: 5 de 5 estrellas5/5Curso de dibujo para niños de 5 a 10 años Calificación: 4 de 5 estrellas4/5Recablea tu cerebro Calificación: 5 de 5 estrellas5/5Mecatrónica - Control y automatización Calificación: 5 de 5 estrellas5/5El Método Agile: Lo que Necesita Saber Sobre Gestión de Proyectos Agile, el Proceso Kanban, Pensamiento Lean, y Scrum Calificación: 5 de 5 estrellas5/5INGENIERÍA INDUSTRIAL - Métodos y tiempos con manufactura ágil Calificación: 3 de 5 estrellas3/5Gestión de proyectos aplicada al PMBOK 6ED Calificación: 5 de 5 estrellas5/5Manual práctico de investigación de operaciones I. 4ed Calificación: 2 de 5 estrellas2/5PANADERÍA Y PASTELERÍA COMERCIAL Calificación: 5 de 5 estrellas5/5Postproducción de Audio Digital: Edición, Mezcla y Masterización Calificación: 4 de 5 estrellas4/5Mecatrónica - sistemas de control electrónico en la ingeniería mecánica y eléctrica Calificación: 5 de 5 estrellas5/5Juegos para viajes Calificación: 0 de 5 estrellas0 calificacionesConfección de cojines y ropa de hogar. TCPF0309 Calificación: 0 de 5 estrellas0 calificacionesIngeniería de Sonido. Conceptos, fundamentos y casos prácticos: CINE, TELEVISIÓN Y RADIO Calificación: 4 de 5 estrellas4/5Guía de aplicacion de la ISO 9001:2015 Calificación: 5 de 5 estrellas5/5Kanban: La guía definitiva de la metodología Kanban para el desarrollo de software ágil (Libro en Español/Kanban Spanish Book) Calificación: 5 de 5 estrellas5/5Scrum Las Estrategias del Juego: Es Póker, No Ajedrez Calificación: 5 de 5 estrellas5/5Café: Un recorrido de la semilla a la taza Calificación: 3 de 5 estrellas3/5Qué haremos cuando las máquinas lo hagan todo: Artificial intelligence, bots & big data Calificación: 5 de 5 estrellas5/5Python 3 al descubierto - 2a ed. Calificación: 5 de 5 estrellas5/5Copywriting: Cómo escribir textos Publicitarios paso a paso. Calificación: 0 de 5 estrellas0 calificacionesProgramación de controladores avanzados SIMATIC S7 1500 con TIA Portal, AWL/KOP y SCL Calificación: 3 de 5 estrellas3/5Mecánica de fluidos Calificación: 0 de 5 estrellas0 calificacionesProcesos y técnicas de construcción: Septima edición Calificación: 3 de 5 estrellas3/5
Categorías relacionadas
Comentarios para Sistemas Operativos
1 clasificación0 comentarios
Vista previa del libro
Sistemas Operativos - Martín Silva
Sistemas Operativos
Sistemas Operativos
Martín Silva
fig_p_01Martín Silva
Sistemas Operativos. 1a ed. Ciudad Autónoma de Buenos Aires : Alfaomega Grupo Editor Argentino, 2015.
364 p.; 23x17 cm.
ISBN 978-987-3832-03-1 eISBN 978-607-622-577-6
1. Sistemas. 2. Programación. 3. Informática. I. Título
CDD 005.3
Queda prohibida la reproducción total o parcial de esta obra, su tratamiento informático y/o la transmisión por cualquier otra forma o medio sin autorización escrita de Alfaomega Grupo Editor Argentino S.A.
Edición: Héctor Germán Asenjo
Revisión de estilo: Juan Micán y Vanesa García
Diseño de tapa: Diego Linares
Ilustración de portada: Eduardo Paolini y Estevan Lindstrom
Diseño y armado de interior: Alberto Alejandro Moyano, hecho con LATEX 2ε
Internet: http://www.alfaomega.com.mx
Todos los derechos reservados © 2015, por Alfaomega Grupo Editor Argentino S.A.
Paraguay 1307, PB «11», Ciudad Autónoma de Buenos Aires.
Queda hecho el depósito que prevé la ley 11.723
ISBN 978-987-1609-36-9
La transformación a libro electrónico del presente título fue realizada por Sextil Online, S.A. de C.V./ Editorial Ink ® 2016.
+52 (55) 52 54 38 52
www.editorial-ink.com
NOTA IMPORTANTE: La información contenida en esta obra tiene un fin exclusivamente didáctico y, por lo tanto, no está previsto su aprovechamiento a nivel profesional o industrial. Las indicaciones técnicas y programas incluidos han sido elaborados con gran cuidado por el autor y reproducidos bajo estrictas normas de control. Alfaomega Grupo Editor Argentino S.A. no será jurídicamente responsable por: errores u omisiones; daños y perjuicios que se pudieran atribuir al uso de la información comprendida en este libro, ni por la utilización indebida que pudiera dársele.
Los nombres comerciales que aparecen en este libro son marcas registradas de sus propietarios y se mencionan únicamente con fines didácticos, por lo que Alfaomega Grupo Editor Argentino S.A. no asume ninguna responsabilidad por el uso que se dé a esta información, ya que no infringe ningún derecho de registro de marca. Los datos de los ejemplos y pantallas son ficticios, a no ser que se especifique lo contrario.
Los hipervínculos a los que se hace referencia no necesariamente son administrados por la editorial, por lo que no somos responsables de sus contenidos o de su disponibilidad en línea.
Empresas del grupo:
Argentina: Alfaomega Grupo Editor Argentino, S.A.
Paraguay 1307 P.B. 11
, Buenos Aires, Argentina, C.P. 1057
Tel.: (54-11) 4811-7183/0887
E-mail: [email protected]
México: Alfaomega Grupo Editor, S.A. de C.V.
Pitágoras 1139, Col. Del Valle, México, D.F., México, C.P. 03100
Tel.: (52-55) 5575-5022 - Fax: (52-55) 5575-2420 / 2490. Sin costo: 01-800-020-4396
E-mail: [email protected]
Colombia: Alfaomega Colombiana S.A.
Carrera 15 No. 64 A 29, Bogotá, Colombia
PBX (57-1) 2100122 - Fax: (57-1) 6068648 - E-mail: [email protected]
Chile: Alfaomega Grupo Editor, S.A.
General del Canto 370, Providencia, Santiago, Chile
Tel.: (56-2) 9 47-9 351 – Fax: (56-2) 235-5786 -E-mail: [email protected]
A mis hijos Martín y Diego, porque el esfuerzo y el trabajo pueden más.
A mi esposa Mónica, porque nuestro amor acompaña a nuestro andar.
Mensaje del editor
Los conocimientos son esenciales en el desempeño profesional, sin ellos es imposible lograr las habilidades para competir laboralmente. La universidad o las instituciones de formación para el trabajo ofrecen la oportunidad de adquirir conocimientos que serán aprovechados más adelante en beneficio propio y de la sociedad; el avance de la ciencia y de la técnica hace necesario actualizar continuamente esos conocimientos. Cuando se toma la decisión de embarcarse en una vida profesional, se adquiere un compromiso de por vida: mantenerse al día en los conocimientos del área u oficio que se ha decidido desempeñar.
Alfaomega tiene por misión ofrecerles a estudiantes y profesionales conocimientos actualizados dentro de lineamientos pedagógicos que faciliten su utilización y permitan desarrollar las competencias requeridas por una profesión determinada. Alfaomega espera ser su compañera profesional en este viaje de por vida por el mundo del conocimiento.
Alfaomega hace uso de los medios impresos tradicionales en combinación con las tecnologías de la información y las comunicaciones (TIC) para facilitar el aprendizaje. Libros como este tienen su complemento en una página Web, en donde el alumno y su profesor encontrarán materiales adicionales.
Esta obra contiene numerosos gráficos, cuadros y otros recursos para despertar el interés del estudiante, y facilitarle la comprensión y apropiación del conocimiento. Cada capítulo se desarrolla con argumentos presentados en forma sencilla y estructurada claramente hacia los objetivos y metas propuestas.
Los libros de Alfaomega están diseñados para ser utilizados dentro de los procesos de enseñanza-aprendizaje, y pueden ser usados como textos para diversos cursos o como apoyo para reforzar el desarrollo profesional.
Alfaomega espera contribuir así a la formación y el desarrollo de profesionales exitosos para beneficio de la sociedad.
Agradecimientos
En primer lugar, quisiera agradecer muy especialmente a Damián Fernández de la Editorial Alfaomega, no solo por haberme invitado a esta apasionante aventura sino también por animarme a seguir cuando sentía desfallecer.
A todos mis alumnos en la Universidad Tecnológica Nacional – Facultad Regional Mendoza – , pero especialmente a Fernando Manzano y Juan Manuel Aguilera, porque tuvieron la iniciativa de armar un sitio Web para la materia «Sistemas Operativos» y colocar allí el material de clase. Estos fueron descubiertos y evaluados por la Editorial Alfaomega, y se convirtieron en el germen de este libro.
A las autoridades de aquel momento: la Ing. Sandra Tagarelli y el AUS Oscar León por tener la valentía de apoyarme en el dictado de una experiencia piloto de esta materia.
A todas las personas que trabajaron en las Ciencias de la Computación y nos precedieron, a quienes he intentado reconocer citándolos, sin importar el tamaño del aporte.
A la Biblioteca Electrónica de Ciencia y Tecnología del Ministerio de Ciencia, Tecnología e Innovación Productiva de la Presidencia de la Nación, por brindar acceso a través de Internet al texto completo de miles de títulos de revistas científico-técnicas, libros y estándares de gran valor para la comunidad científica.
A quienes revisaron partes del libro: al Ing. ángel César Govantes Saldívar de la Facultad de Ingeniería de la UNAM, México; al Lic. Ricardo Felipe Díaz de Santiago y Prof. Jorge Cortés Galicia, del Instituto Politécnico Nacional de México; al Ing. Fernando Cladera de la Universidad Nacional de Cuyo, Argentina y de la École Nationale d’Ingénieurs de Brest, Francia.
A mi vieja y noble Dell Inspiron 6400 con openSUSE.
Sobre el autor
Profesor Titular de «Sistemas Operativos» en el Instituto Tecnológico Universitario de la Universidad Nacional de Cuyo, Argentina. Coordinador de la carrera «Redes y Telecomunicaciones» del Instituto Tecnológico Universitario de la Universidad Nacional de Cuyo, Argentina. Profesor Invitado del IUT de Bayonne et du Pays Basque - Universidad de Pau - Francia. Profesor Invitado de la Oficina del Software Libre de la Universidad de Granada, España. Ex profesor Adjunto de «Sistemas Operativos» en la Facultad Regional Mendoza, Universidad Tecnológica Nacional, Argentina. Profesional Principal del Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET), Argentina.
Convenciones utilizadas en el texto
palomComentarios o información extra: este ícono ayuda a comprender mejor o ampliar el texto principal.
Índice general
Mensaje del editor
Agradecimientos
Sobre el autor
Prólogo
1. Introducción
1.1 Funciones y objetivos de los sistemas operativos
1.1.1. Funciones
1.2 Estructuras de los sistemas operativos
1.2.1. Gestión de procesos
1.2.2. Gestión de la memoria principal
1.2.3. Gestión de archivos
1.2.4. Gestión de dispositivos de entrada y salida
1.2.5. Servicios
1.2.6. Tipos de sistemas operativos
1.2.6.1. El núcleo del sistema operativo
1.3 Estructura y funcionamiento de la computadora
1.3.1.Componentes de una computadora
1.3.1.1. Dinámica de una operación de entrada y salida
1.3.1.2. El vector de interrupciones
1.3.1.3. Hardware de las interrupciones
1.3.1.4. Tratamiento de la interrupción
1.3.1.5. Tratamiento diferido
1.3.1.6. Clock tick
1.3.1.7. Llamadas al sistema
1.3.2. El proceso de arranque
1.4 Evolución de los sistemas operativos
1.4.1. La API de Windows
1.5 Trabajos prácticos
1.5.1. Práctica con Linux
1.5.1.1. procfs
1.5.1.2. Llamadas a sistema
1.5.1.3. Apagando Linux
1.5.2. Práctica con Windows
1.5.2.1. ProcFeatures
1.5.2.1.1. Ejemplo 1
1.5.2.1.2. Ejemplo 2
1.5.2.2. CoreInfo
1.5.2.2.1. Ejemplo 1
1.5.2.2.2. Ejemplo 2
1.5.2.3. Llamadas a sistema
1.5.2.4. Administrador de tareas
1.5.3. Una analogía
2. Procesos
2.1 Estados de un proceso
2.1.1. Bloque de control de procesos
2.1.2. Creación y terminación de procesos
2.1.2.1. Jerarquía de procesos
2.1.3. Planificador y activador
2.1.4. Cambio de contexto
2.2 Procesos ligeros, hilos o threads
2.2.1. Motivaciones para el uso de hilos
2.2.2. Modelos de organización
2.2.3. Aspectos del diseño de hilos
2.2.3.1. Creación de los hilos
2.2.3.2. Terminación de los hilos
2.2.3.3. Sincronización de los hilos
2.2.3.4. Planificación de los hilos
2.2.3.5. Manejo de señales
2.2.4. Implementación
2.2.4.1. Ventajas y desventajas de los dos enfoques
2.2.5. Fibras
2.3 Comunicación
2.3.1. Procesos independientes
2.3.2. Procesos cooperantes
2.3.3. Procesos concurrentes
2.3.4. Paradigmas de comunicación entre procesos
2.3.4.1. Memoria compartida
2.3.4.2. Pase de mensajes
2.3.4.3. Puerto
2.3.4.4. Señales
2.3.4.5. Temporizadores
2.3.4.6. Socket
2.3.4.7. Tubería
2.3.4.8. Cola de mensajes
2.3.4.9. Archivos
2.3.4.10. Archivos proyectados en memoria
2.3.5. Excepciones
2.4 Trabajos prácticos
2.4.1. Práctica con Linux
2.4.1.1. Estados de los procesos
2.4.1.2. Obtener el PID
2.4.1.3. Crear procesos con fork()
2.4.2. Práctica con Windows
2.4.2.1. tlist
2.4.2.1.1. Ejemplo 1
2.4.2.1.2. Ejemplo 2
2.4.2.2. Información de los procesos con el Administrador de Tareas
3. Memoria
3.1 Funciones y operaciones del administrador de memoria
3.2 Modelo de memoria de un proceso
3.2.1. Fases en la generación de un ejecutable
3.2.2. Formato del ejecutable
3.2.2.1. El formato COFF
3.2.2.2. El formato ELF
3.2.2.3. El formato PE
3.2.3. Mapa de memoria de un proceso
3.3 Diferentes esquemas de administración
3.3.1. Mono programación
3.3.1.1. Partición absoluta única
3.3.1.2. Partición reubicable única
3.3.1.3. Superposiciones
3.3.2. Multiprogramación
3.3.2.1. Múltiples particiones fijas
3.3.2.2. Múltiples particiones variables
3.3.2.2.1. Algoritmos de selección de la partición:
3.3.2.2.2. Cola de procesos por partición:
3.3.2.2.3. Cola única:
3.3.2.3. Sistema de compañeras
3.3.2.3.1. SlabAllocator
3.3.2.4. Reubicación
3.3.3. Paginación simple
3.3.4. Segmentación simple
3.3.5. Segmentación con paginación
3.3.6. Tablas de páginas y de segmentos
3.3.7. Memoria asociativa
3.3.8. Tabla de páginas invertida
3.3.9. Ventaja adicional del paginado: las páginas compartidas
3.3.10.Intercambio
3.4 Memoria virtual
3.4.1. Paginación por demanda
3.4.1.0.1. Ejemplo
3.4.2. Localidad de referencia
3.4.3. Traba de páginas
3.4.4. Tamaño de la página
3.4.5. Algoritmos de reemplazo de páginas
3.4.6. El rendimiento de los algoritmos
3.4.7. Políticas de asignación
3.4.7.0.1. Ejemplo
3.4.7.1. Hiperpaginación
3.4.8. Conjunto de trabajo
3.4.9. Prepaginado
3.4.10. Segmentación
3.5 Trabajos prácticos
3.5.1. Práctica con Linux
3.5.1.1. Estadísticas de la memoria virtual en Linux
3.5.1.2. El programa mapa.c
3.5.1.3. La estructura de ELF
3.5.1.4. El archivo /proc/pid/maps
3.5.2. Práctica con Windows
3.5.2.1. Memoria virtual en Windows
3.5.2.2. La estructura de PE
3.5.2.3. PhysMem
3.5.2.4. CacheSet
4. Planificación
4.1 Conceptos
4.1.1. Supuestos subyacentes
4.1.2. Características
4.1.3. Contexto
4.1.4. Desalojo
4.1.5. Colas
4.1.6. Criterios
4.1.7. Notación de Landau
4.2 Tipos de planificación
4.3 Algoritmos de planificación
4.3.1. FCFS (First-Come, First-Serve)
4.3.1.1. El efecto convoy
4.3.2. SJF (Shortest-Job-First)
4.3.2.1. SRPT (Shortest-Remaining-Processing-Time)
4.3.3. Por prioridad
4.3.4. RR (Round-Robin)
4.3.5. Colas multiniveles
4.3.5.1. MLQ
4.3.5.2. MLFQ
4.4 Planificación en POSIX
4.5 Planificación en Linux
4.5.1. Primeras versiones
4.5.1.1. Version 0.96
4.5.1.2. Versión 1.2
4.5.1.3. Version 2.0.33
4.5.1.4. Versión 2.2
4.5.1.5. Versión 2.4
4.5.1.6. Versión 2.6.8.1
4.5.2. Versiones recientes
4.5.2.1. Versión 2.6.21
4.5.2.2. Versión 2.6.23
4.6 Planificación en Windows
4.6.1. Niveles de prioridad
4.6.2. Base de datos del activador
4.7 Práctica con Linux
4.7.1. Cambio de contexto
4.7.2. Una analogía
5. Sincronización
5.1 Antecedentes
5.2 Alternativas de sincronización
5.2.1. Sección crítica
5.2.2. Exclusión mutua
5.2.3. Soluciones hardware
5.2.3.1. Inhabilitación de las interrupciones
5.2.3.2. Instrucciones especiales de máquina
5.2.3.2.1. TSL
5.2.3.2.2. CAS
5.2.3.2.3. Fetch-and-add
5.2.3.2.4. Read-modify-write
5.2.3.2.5. Load-link/store-conditional
5.2.3.2.6. Soluciones libres de espera
5.2.4. Soluciones software
5.2.4.1. El problema de la sección crítica
5.2.4.1.1. Algoritmo de Dekker
5.2.4.1.2. Algoritmo de Peterson
5.2.4.1.3. Requisitos de una solución
5.2.4.2. Variables mutex
5.2.4.3. Variables de condición
5.2.4.4. Spinlock
5.3 Problemas clásicos
5.3.1. Los filósofos comensales
5.3.2. El peluquero dormilón
5.3.3. Problema del productor-consumidor
5.3.4. Problema de los lectores-escritores
5.3.5. Comunicación cliente-servidor
5.4 Semáforos
5.5 Monitores
5.5.1. Sintaxis de un monitor
5.6 Sincronización en pase de mensajes
5.6.1. Características de la sincronización
5.6.2. Memoria intermedia o buffer
5.6.2.1. Buffer nulo
5.6.2.2. Buffer de mensaje único
5.6.2.3. Buffer de capacidad ilimitada
5.6.2.4. Buffer de capacidad limitada
5.6.3. Sincronización en tuberías
5.6.4. Sincronización mediante señales
5.7 Bloqueo mutuo
5.7.1. Condiciones para que se cumpla el interbloqueo
5.7.2. Grafos de asignación de recursos
5.7.3. Métodos para el tratamiento del bloqueo mutuo
5.7.4. Prevención
5.7.5. Cómo evitar el bloqueo mutuo
5.7.5.1. El algoritmo del banquero
5.7.6. Detección del interbloqueo
5.7.7. Recuperación del interbloqueo
5.7.8. Algoritmo del avestruz
5.8 Sincronización en POSIX
5.8.1. Señales
5.8.2. Mutex
5.8.2.1. Mutex no bloqueante
5.8.3. Semáforos para hilos
5.8.4. Semáforos para procesos
5.8.5. Variables de condición
5.8.6. Memoria compartida
5.8.6.1. Proyectar un archivo compartido
5.8.6.2. Acceso compartido a un archivo
5.9 Sincronización en Linux
5.9.1. Operaciones atómicas
5.9.2. Spinlock
5.9.2.1. Full spinlock
5.9.2.2. Lectores y escritores
5.9.3. Mutex
5.10 Sincronización en Windows
5.10.1. Sincronización con IRQL alto
5.10.1.1. Spinlocks
5.10.2. Sincronización con IRQL bajo
5.10.3. Llamada a Procedimiento Local
5.10.4. Mailslots
5.11 Trabajos prácticos
5.11.1. Tuberías
5.11.2. Otro ejemplo:
5.12 Autoevaluación
6. Almacenamiento
6.1 Conceptos
6.1.1. Archivos
6.1.1.1. Tipos
6.1.1.2. Atributos
6.1.1.3. Operaciones
6.1.2. Particiones
6.1.3. Nombres
6.1.4. Sistema de archivos
6.1.4.1. Directorio
6.1.4.1.1. Directorio de un nivel
6.1.4.1.2. Directorio de dos niveles
6.1.4.1.3. Estructura de árbol
6.1.4.1.4. Estructura de grafo
6.1.4.1.5. Entradas de directorio
6.1.4.2. Designación de un archivo
6.1.4.2.1. Directorio raíz por proceso
6.1.4.2.2. Otros tipos de objetos
6.1.4.3. Journaling
6.1.5. Arquitectura del software
6.1.6. Estructuras asociadas
6.1.7. Organización de los archivos
6.1.7.1. Gestión del espacio libre en disco
6.1.7.2. Técnicas de asignación
6.2 Implementaciones
6.2.1. Sistemas de archivos en Windows
6.2.1.1. FAT-File Allocation Table
6.2.1.2. NTFS
6.2.2. Sistema de archivos de UNIX
6.2.3. Sistemas de archivos en Linux
6.2.3.1. Second Extended File System
6.2.3.2. Virtual File System
6.2.3.3. Third Extended File System
6.2.3.4. Reiser FS
6.2.3.5. Fourth Extended File System
6.2.3.6. Sistemas de archivos sin almacenamiento
6.2.3.6.1. procfs
6.2.3.6.2. debugfs
6.2.3.6.3. sysfs
6.2.3.6.4. ramfs
6.3 Trabajos prácticos
6.3.1. Particiones y sistemas de archivos
6.3.2. Directorios, archivos y enlaces
6.3.3. Permisos
7. Sistemas de entrada y salida
7.1 Dispositivos de entrada y salida
7.2 Organización de las funciones de entrada y salida
7.3 Aspectos del diseño
7.3.1. Objetivos
7.3.2. Mecanismo y política
7.3.3. Estructura lógica de las funciones
7.4 Subsistema de entrada y salida del núcleo
7.4.1. Planificación de la entrada y salida
7.4.2. Almacenamiento intermedio
7.4.2.1. Memoria intermedia nula
7.4.2.2. Memoria intermedia sencilla
7.4.2.3. Memoria intermedia doble
7.4.2.4. Memoria intermedia circular
7.4.3. Caché
7.4.4. Spool
7.4.5. Manejo de errores
7.4.6. Estructuras de datos
7.5 Planificación del acceso a discos
7.5.1. Estructura de un disco
7.5.2. Planificación del acceso al disco
7.5.3. Distintos tipos de algoritmos de planificación
7.5.3.1. FCFS
7.5.3.2. SSTF
7.5.3.3. SCAN
7.5.3.4. C-SCAN
7.5.3.5. LOOK
7.5.3.6. El ascensor Linus
7.5.3.7. El planificador con fecha límite
7.5.3.8. El planificador de entrada y salida anticipatorio
7.5.3.9. CFQ
7.5.4. Manejadores de dispositivos
7.6 Ventanas al núcleo
7.6.1. Desventajas
7.6.2. devfs
7.6.3. Conexión en caliente
7.6.4. El nuevo modelo de dispositivos de Linux
7.6.4.1. Colectores, dispositivos y clases
7.6.5. sysfs
7.6.6. udev
7.6.7. HAL en Linux
7.6.7.1. DeviceKit
7.6.8. D-Bus
7.6.8.1. Netlink sockets
7.6.9. Cómo funciona todo junto
7.7 Trabajos prácticos
7.7.1. ¿Cómo creamos archivos especiales?
7.8 Autoevaluación
8. Multiprocesamiento
8.1 Múltiples procesadores
8.2 Aplicaciones paralelas
8.3 Ley de Amdahl
8.4 Taxonomía de Flynn
8.5 Arquitecturas de múltiples procesadores
8.5.1. Procesamiento simétrico y asimétrico
8.6 Multiprocesadores simétricos
8.6.1. Ventajas
8.6.2. Organizaciones
8.6.3. Afinidad
8.6.4. Granularidad
8.6.5. Paralelismo
8.6.5.1. Independiente
8.6.5.2. De grano grueso y muy grueso
8.6.5.3. De grano medio
8.6.5.4. De grano fino
8.6.6. Serialización de datos
8.7 Diseño
8.7.1. Procesos o hilos simultáneos y concurrentes
8.7.2. Planificación
8.7.2.1. Asignación de hilos a procesadores
8.7.2.2. Uso de la multiprogramación en procesadores individuales
8.7.2.3. Expedición de un proceso
8.7.2.4. Planificación de procesos
8.7.2.5. Planificación de multiprocesadores
8.7.3. Sincronización
8.7.3.1. Estructuras de datos locales a la CPU
8.7.3.2. Spinlocks
8.7.3.3. Semáforos - mutexes
8.7.3.4. Traba de lectura rápida
8.7.3.5. Leer-Copiar-Actualizar
8.7.3.6. Barrera
8.7.4. Gestión de la memoria
8.7.4.1. Arquitectura de Acceso Uniforme a Memoria (UMA)
8.7.4.2. Arquitectura de Acceso No Uniforme a Memoria (NUMA)
8.7.4.3. Arquitectura de Memoria de Sólo Caché (COMA)
8.7.5. Coherencia y consistencia
8.7.5.1. Ordenamiento y consistencia de la memoria
8.7.5.2. Modelos de consistencia
8.7.5.3. Modelo de consistencia estricta
8.7.5.4. Modelo de consistencia secuencial
8.7.5.5. Modelo de consistencia causal
8.7.5.6. Modelo de consistencia PRAM
8.7.5.7. Modelo de consistencia de procesador
8.7.5.8. Modelo de orden de almacenamiento total
8.7.5.9. Modelo de consistencia débil
8.7.5.10. Modelo de consistencia de liberación
8.7.5.11. Modelo relajado de consistencia de liberación
8.7.5.12. Ordenamiento explícito en memoria
8.7.5.13. Las barreras de memoria del hardware
8.8 Multiprocesamiento en Windows
8.8.1. La base de datos del activador
8.8.2. Sincronización en el núcleo
8.8.3. Gestión de la memoria
8.9 Multiprocesamiento en Linux
8.9.1. Gestión de la memoria
Bibliografía
Prólogo
Este libro pretende llevarnos al fascinante mundo de los sistemas operativos, explicándonos lo qué es en realidad un sistema operativo, cuál es su interés, sus propiedades y funciones sin las cuales un ordenador solo nos serviría como objeto de decoración.
Después de presentarnos los objetivos de un sistema operativo, Martín nos propone una evolución de esos sistemas focalizándose en los mundos de Unix y Windows.
A continuación, el libro describe con detalle muchos ejemplos prácticos claros y esquemas, ilustrando cada función de los sistemas: procesos, memoria, planificación, sincronización, almacenamiento, entradas/salidas y define el tema de multiprocesos.
Este libro está destinado a estudiantes de informática o profesores que necesitan documentos y ayudas para preparar cursos.
Todos los aspectos de los sistemas operativos se abordan con detalles y de forma muy pedagógica.
No cabe duda de que este tipo de obra tendrá un lugar privilegiado en las bibliotecas de los informáticos profesionales, profesores y estudiantes.
Philippe ROOSE, PhD
Director del departamento de Informática
Responsable del Equipo de Investigación T2I/LIUPPA
IUT de Bayonne - Universidad de Pau - Francia
1
Introducción
El presente libro acerca de los sistemas operativos nació como una breve guía de estudios, para orientar a los alumnos en la lectura de los temas en la abundante bibliografía existente. Por ello, notará que tiene numerosas referencias y, aunque los temas le parezcan recurrentes, es bueno que los lea desde distintos enfoques. Es muy importante que no intente memorizarlos, sino que lea con espíritu crítico, analizando lo que lee y discutiendo los temas con sus compañeros y en clase.
Los sistemas operativos están en constante evolución, como también lo está el hardware; de manera que tal vez algunos conceptos desarrollados ahora caerán en desuso dentro de un tiempo. Si usted memoriza los conceptos actuales como algo definitivo, tal vez dentro de unos años, cuando esté recibido, lo que aprendió le parecerá obsoleto, pero si aprendió razonando sabrá que tiene las bases y verá en esos sistemas operativos una evolución de lo que aprendió. Y, por otra parte, cuando conozca la historia de los sistemas operativos, verá que muchas soluciones ingeniosas aportadas hace muchos años, aún hoy se utilizan.
Los usuarios no interactuamos de forma directa con el sistema operativo, sino con las aplicaciones que ejecutan sobre él. De hecho, es deseable que los usuarios no tengamos acceso a lo que denominamos el «núcleo» del sistema operativo.
Entonces nos surge la pregunta ¿cómo puede explicarse a un alumno el funcionamiento de algo a lo que no tiene acceso?. Es como intentar entender el funcionamiento de la mente sin poder tener acceso al cerebro de un ser humano vivo. A través de las distintas Prácticas se intenta mostrar cuál es el estado en un instante dado y cómo reacciona el sistema operativo, porque es una entidad de un dinamismo inimaginable, aún cuando nos da la impresión de estar ocioso.
1.1 Funciones y objetivos de los sistemas operativos
¿Qué es un sistema operativo? Genéricamente hablando, entendemos que un sistema es un conjunto de elementos relacionados entre sí, que funcionan con un fin determinado y, al ser operativo, entendemos que su fin es el de la operación o conducción del hardware. La evolución del hardware ha sido constante y parece no detenerse: del monoprocesador a los multiprocesadores, memorias cada vez más rápidas, incorporación de nuevos dispositivos, interconexión con otros sistemas, pero ¿qué ha pasado con los sistemas operativos? Los sistemas operativos deberían acompañar esta evolución y ya veremos más adelante que no siempre ha sido así.
Algunos conceptos comunes acerca de qué es un sistema operativo son los de manejador de recursos, programa de control o programa que se ejecuta constantemente en una computadora.
Tanenbaum y Woodhull (1998) lo expresan desde dos puntos de vista complementarios. Por una parte, como máquina extendida o virtual más fácil de entender y programar que el hardware puro¹ y, por otra, como administrador de recursos, entendiendo por «recursos» a los componentes tanto físicos como lógicos: el procesador, la memoria, los discos, los ratones o los archivos.
Un sistema operativo es un programa, o más bien un conjunto de programas o algoritmos, que actúa como intermediario entre el usuario (en su sentido amplio) de un computador y el hardware del computador. Según Silberschatz y Galvin (1997), el propósito de un sistema operativo es crear un entorno en el que el usuario pueda ejecutar programas de forma cómoda y eficiente.
fig_01_01Fig. 1.1 – Ubicación del Sistema Operativo.
Tal vez le sorprenda saber que lo que usted está usando en su computador personal no es un sistema operativo, sino las aplicaciones que sobre él ejecutan. En realidad, usted no usa al sistema operativo en forma directa; es más, en los sistemas modernos se podría llegar a modificar tanto el aspecto que tienen los escritorios y demás aplicaciones – hasta hacerlo parecer tanto a otro – , que sería difícil reconocer cuál es el sistema operativo subyacente.
1.1.1 Funciones
De modo que las funciones primordiales de los sistemas operativos son las de gestionar el hardware, brindando una interfaz con el usuario.
Pero con la evolución de los sistemas de cómputo y la de los sistemas operativos han surgido nuevos requerimientos. Dado que existe una gran diversidad de hardware, es necesario que brinden la capacidad de poder ejecutar sobre esta diversidad, lo que llamamos portabilidad. Pero también interoperabilidad e interconectividad (por el mismo motivo). Por otra parte, al haberse extendido tanto entre diversos tipos de usuarios, requerimos que nos provea de un ambiente multitareas y que sea multiusuario, pero esto conlleva requerimientos de seguridad y protección (entre usuarios y desde el exterior), fácil administración, independencia de dispositivo y abstracción del hardware.
Piense por un momento en la siguiente analogía: el sistema operativo es «El Gran Chofer» de un automóvil (hardware) que recibe las indicaciones del pasajero (aplicaciones). Un chofer puede manejar distintos tipos de vehículos (portabilidad) y un mismo vehículo puede ser manejado por distintos choferes, contrariamente a la creencia popular de que el sistema operativo «viene» con la computadora.
1.2 Estructuras de los sistemas operativos
El sistema operativo provee una máquina virtual a las aplicaciones, es decir, las aplicaciones no interactúan con el hardware real sino con una abstracción que les presenta el sistema operativo. Las llamadas a sistema (system call) son el mecanismo utilizado por las aplicaciones para solicitarle un servicio al sistema operativo, son la interfaz entre un proceso y el sistema operativo. La llamadas a sistema implementadas por el sistema operativo expanden las capacidades del conjunto de instrucciones provistas por el hardware puro. Las llamadas a sistema soportan nuevas abstracciones tales como «procesos» y «sistema de archivos».
Además de proveer la interfaz de llamadas al sistema, el sistema operativo tiene la responsabilidad de administrar los recursos de hardware. Las aplicaciones no pueden acceder a los dispositivos de entrada y salida o ejecutar instrucciones privilegiadas del procesador. Es el sistema operativo el que realiza estas operaciones en nombre de los programas de aplicación. Para hacerlo, intenta utilizar de forma eficiente los recursos que tiene disponibles y proteger la integridad de las aplicaciones que deben compartir estos recursos. Ampliaremos este tema en el apartado 1.3.1.7.
Las tareas realizadas por un sistema operativo se pueden dividir en distintas áreas que veremos a continuación.
1.2.1 Gestión de procesos
Un proceso es un programa en ejecución. Asociado con un proceso está su código, sus datos, un conjunto de recursos asignados a él y uno o más «flujos» de ejecución de su código.
El sistema operativo provee llamadas a sistema para la gestión de procesos y debe administrar la asignación de recursos a ellos. Si pueden existir múltiples procesos simultáneamente, el sistema operativo debe ser capaz de proveer a cada uno un ambiente de máquina virtual en el cual pueda ejecutar.
1.2.2 Gestión de la memoria principal
La memoria principal es crucial para el funcionamiento de un sistema de computación moderno; es una matriz grande de palabras o bytes, cuyo tamaño va desde cientos de miles hasta miles de millones. Cada palabra o byte tiene su propia dirección. La memoria principal es un depósito de datos a los que se puede acceder rápidamente y que son compartidos por la CPU y los dispositivos de entrada y salida. El procesador central lee instrucciones de la memoria principal, durante el ciclo de obtención de instrucciones, y lee y escribe datos de la misma durante el ciclo de obtención de datos. Como mínimo la memoria debe ser compartida por un programa de aplicación y por el sistema operativo. En sistemas más sofisticados, la memoria puede estar compartida por varios procesos. El sistema operativo debe gestionar la asignación de memoria a los procesos y controlar el hardware de administración de esta, que determina a qué ubicaciones de memoria puede tener acceso un proceso.
Según M. E. Russinovich y D. A. Solomon (2004), Windows implementa un sistema de memoria virtual basado en un espacio de direcciones plano, es decir lineal, que le da a cada proceso la ilusión de tener su propio espacio de direcciones, grande y privado. La memoria virtual provee una visión lógica de la memoria que puede no corresponderse con su distribución física. Al momento de la ejecución, el administrador de la memoria con ayuda del hardware se encarga de traducir o mapear las direcciones virtuales a direcciones físicas, donde están almacenados realmente los datos. Mediante el control de la protección y el mapeo el sistema operativo se asegura que los procesos no se estorben unos a otros o sobreescriban datos del sistema operativo. Dado que la mayoría de los sistemas tienen mucho menos memoria física que el total de memoria virtual en uso por el proceso en ejecución, el administrador de memoria transfiere o pagina parte del contenido de la memoria a disco. La paginación de datos al disco libera la memoria física de manera tal que pueda ser usada por otros procesos o por el propio sistema operativo.
1.2.3 Gestión de archivos
Un archivo es una colección de información relacionada entre sí, definida por su creador. Por lo general, los archivos representan programas (tanto fuentes como objetos) y datos. Los archivos de datos pueden ser numéricos, alfabéticos o alfanuméricos. Los archivos pueden ser de forma libre, como los de texto, o tener un formato rígido. Un archivo consiste en una secuencia de bits, líneas o registros, cuyos significados han sido definidos por su creador. El concepto de archivo es muy general. Las computadoras procesan información, la cual debe ser transmitida, procesada y almacenada. El objeto en un «sistema de archivos» es una entidad abstracta para el almacenamiento o la transmisión de un conjunto de información.
El sistema de archivos propiamente dicho es una colección organizada de tales objetos y el sistema operativo debe proveer primitivas para manipularlos.
1.2.4 Gestión de dispositivos de entrada y salida
Uno de los objetivos de un sistema operativo es ocultar las peculiaridades de dispositivos de hardware específicos, de modo que el usuario no las perciba. Por ejemplo, en UNIX, el subsistema de entrada y salida oculta las peculiaridades de los dispositivos del resto del sistema operativo. Una computadora comunica información a través de sus dispositivos de entrada y salida. Los procesos acceden a estos dispositivos a través de las llamadas a sistema del sistema operativo, provistas para este propósito. El sistema operativo intenta manejar estos dispositivos de una manera tal que puedan ser compartidos de forma eficiente por los procesos que los solicitan.
1.2.5 Servicios
Un sistema operativo crea un entorno para la ejecución de programas; proporciona ciertos servicios a los programas y a sus usuarios. Desde luego, los servicios específicos varían de un sistema operativo a otro, pero podemos identificar algunas clases comunes. Es posible describir un sistema operativo a partir de los servicios que presta, tales como:
Controlar la ejecución de procesos (creación, terminación, suspensión y comunicación).
Planificar el uso de la CPU.
Asignar memoria principal en ejecución.
Asignar memoria secundaria.
Permitir acceso controlado desde los procesos a los dispositivos.
Todo esto de manera eficiente y «transparente» al usuario.
1.2.6 Tipos de sistemas operativos
Dada la diversidad surgida en esta evolución, se han hecho distintos esfuerzos por clasificarlos de alguna manera. Podemos hablar de sistemas por lotes o batch, interactivos, monousuarios, de tiempo compartido (time sharing), multiusuarios, paralelos, distribuidos, de red, de tiempo real y cliente-servidor.
El término lote o batch proviene de la época de los sistemas que utilizaban tarjetas perforadas. En esa época se preparaba un conjunto o lote de tarjetas que contenían tanto las instrucciones para lanzar la ejecución del programa, como los datos de entrada que precisaba. Esta tarea normalmente la realizaba un operador, quien no necesariamente sabía lo que el programa hacía, simplemente disponía el trabajo (job) y verificaba que se ejecutara sin problemas y, en caso de haberlos, notificaba al usuario quien, a su vez, se había desentendido de la ejecución. Es decir, el usuario no interactuaba directamente con su programa. Generalmente se trataba de procesos que demoraban varios minutos, tal vez horas, y leían sus datos de entrada a partir de archivos – generalmente almacenados en cinta magnética – , volcando su salida a impresoras o a archivos. En la actualidad hay más procesos interactivos, no obstante todavía existen procesos no interactivos o batch².
En un comienzo, esos sistemas sólo ejecutaban un trabajo por vez, luego se desarrolló la técnica que permitió que dos o más procesos ocuparan la misma unidad de memoria principal a la vez, y se la llamó multiprogramación.
La multiprogramación es la técnica que permite que dos o más procesos ocupen la misma unidad de memoria principal a la vez. El grado de multiprogramación es la cantidad de procesos que se tienen en memoria. En un sistema con un único procesador, habrá varios programas en memoria pero sólo uno en ejecución, en un momento específico³. Los sistemas de tiempo compartido son una consecuencia lógica de la multiprogramación.
En los sistemas por lotes multiprogramados (multiprogrammed batch) los trabajos residían en un grupo almacenado en disco; cuando un trabajo era incapaz de ejecutar, porque estaba esperando la finalización de una operación de entrada o salida, otro trabajo comenzaba a hacerlo. El compartir los recursos de computación entre los procesos que ejecutaban de manera concurrente⁴ incrementó significativamente la complejidad del sistema operativo.
Los sistemas de tiempo compartido se desarrollaron con el objetivo de compartir los recursos computacionales – principalmente la CPU – entre muchos usuarios, de manera interactiva, cada uno de ellos trabajando desde su terminal. Para estos sistemas se debe proveer multiprogramación. Dado que las computadoras actuales no se usan de la misma manera, el término en cierta medida ha caído en desuso.
Los sistemas de tiempo real tienen restricciones de tiempo bien definidas; se usan para una aplicación dedicada, tienen una memoria primaria amplia y el almacenamiento secundario es limitado. En los sistemas de tiempo compartido, los usuarios esperan que su proceso termine rápido, es decir, esperan una respuesta rápida del sistema. Los sistemas de tiempo real, en cambio, se caracterizan por el hecho de que habrá consecuencias severas si no se alcanzan propiedades de exactitud, tanto lógicas como de tiempo. Hay dos tipos de sistemas de tiempo real: blando y duro. En un sistema de tiempo real blando, las tareas son realizadas por el sistema tan rápido como sea posible (tienen requerimientos estrictos de tiempo), pero no tienen que finalizar en tiempos específicos – por ejemplo, en la grabación de un CD o en la reproducción de audio y video en los sistemas operativos modernos. En los sistemas de tiempo real duros, las tareas se deben realizar no sólo de manera correcta sino también deben garantizar que se harán en un tiempo determinado – por ejemplo, un sistema de control de vuelo dentro de un avión de pasajeros. Las aplicaciones de tiempo real cubren un rango amplio. Muchas de estas aplicaciones son «embutidas» o «embebidas» (embedded). Esto significa que la computadora que se está usando está metida dentro de un sistema de manera tal que el usuario no la percibe como tal. Por ejemplo, ciertas impresoras, llamadas «impresoras de red», para grandes volúmenes de impresión – que sean embebidas no implica que sean de tiempo real – (cf. Labrose 1992).
Los sistemas paralelos son sistemas multiprocesadores; los procesadores comparten el colector o bus y el reloj (clock). Si comparten memoria y periféricos, son fuertemente acoplados (tightly coupled). El multiprocesamiento puede ser simétrico o asimétrico. Las ventajas de los sistemas paralelos es que mejoran el throughput o rendimiento (resolución de mayor cantidad de procesos en un momento dado), permiten compartir periféricos (puede haber varios procesadores accediendo al mismo disco) y suelen tener la capacidad para seguir dando un servicio proporcional al nivel de hardware que sobrevive a fallos, lo que se denomina degradación gradual (graceful degradation). Los sistemas diseñados para degradarse gradualmente también se conocen como tolerantes a fallas (fault tolerant); esto significa que ante la caída de un procesador, continúa trabajando el resto, absorbiendo su trabajo.
fig_01_02Fig. 1.2 – Sistema SMP.
Hay distintos tipos de sistemas paralelos. Por una parte están los simétricos (SMP, de Symmetric MultiProcessing, por sus siglas en inglés), como vemos en la figura 1.2, en los que todos los procesadores comparten un único espacio de direcciones y acceso a todos los recursos, cada procesador tiene una copia idéntica del sistema operativo y esas copias se comunican entre sí, si es necesario. Por otra parte están los asimétricos, en los que uno de los procesadores distribuye y dirige la actividad de los otros. También existen los llamados equipos tándem, que duplican el hardware y el software para asegurar continuidad ante fallas.
De manera similar, existen los sistemas de múltiples hilos simétricos (SMT, de Symmetric Multi-Threading, por sus siglas en inglés), por ejemplo los procesadores con tecnología Hyper-Threading (HT) de Intel. Se caracterizan porque cada chip SMT físico puede tener más de un procesador virtual, con la salvedad de que los procesadores virtuales comparten ciertos recursos (algunos tipos de caché). Y dado que comparten ciertos recursos, los procesadores virtuales no deberían ser tratados de la misma forma que los procesadores corrientes.
En los sistemas distribuidos se dispone el trabajo entre varios procesadores, pero estos no comparten memoria (física) ni reloj. Las ventajas de un sistema distribuido son varias: compartir recursos, mejorar el procesamiento (por división de un proceso en subprocesos), confiabilidad y comunicación.
En los sistemas operativos de red, los usuarios saben que hay varias máquinas y necesitan acceder a los recursos iniciando una sesión en la máquina remota apropiada, o bien transfiriendo datos de la máquina remota a su propia máquina. El sistema operativo de red es una capa que se agrega a cada sistema operativo para interactuar con la máquina de servicios. En Windows 95 ó 98, usted accede a «Entorno de red» para ver a sus vecinos y va haciendo clic para acceder a la computadora y luego al recurso compartido (por ejemplo, el disco). Es decir, el acceso a los recursos es explícito. En los sistemas operativos distribuidos (por ejemplo, Amoeba), los usuarios no tienen que saber que hay varias máquinas; acceden a los recursos remotos de la misma manera que a los locales. Hay transparencia de acceso a los recursos, no saben si el recurso al cual están accediendo es local o remoto.
En los sistemas cliente-servidor se utiliza el modelo del mismo nombre. Este modelo se caracteriza porque existen dos entidades de software que requieren de un servicio: por una parte está el software cliente, que es un proceso que solicita del servicio a través de un conjunto de operaciones bien definidas que forman la interfaz cliente y, por otra parte, está el software servidor, que es el que administra el servicio y se lo entrega a los clientes que se lo soliciten. Este es un modelo muy comúnmente usado con una red de comunicaciones; es el que mejor se adapta cuando tenemos una red, ya que los recursos no son locales, pero no necesariamente deben residir en máquinas distintas. A lo largo del libro desarrollaremos muchos ejemplos basados en el modelo cliente-servidor, en el que ambos ejecutan en el mismo equipo. Por ejemplo, en un servidor de impresión, el servicio es la impresión misma, el servidor es el programa que brinda el servicio y los clientes son los programas que solicitan el servicio. En un servidor de archivos, el servicio es la administración de archivos, el servidor es el proceso que los gestiona y los clientes solicitan el servicio – que puede ser «crear archivo», «abrir archivo», etc. Tal vez el ejemplo más claro sea el del servidor Web: el servicio es la entrega de páginas, el servidor es el programa que se ejecuta en el sitio remoto al cual está accediendo y los clientes son programas tales como el Internet Explorer.
Un error muy común es llamar servidor a la máquina donde reside el software servidor. El concepto de servidor es un concepto de software, no de hardware.
1.2.6.1 El núcleo del sistema operativo
El núcleo del sistema operativo es el código diseñado para que sea ejecutado mientras el procesador está en modo núcleo. El núcleo no debería ser considerado un programa, la forma más apropiada de describirlo sería la de una rutina de biblioteca, en la que uno o más procedimientos en ella ejecutan siguiendo una trampa, una interrupción o una llamada a sistema. En algún punto el procesador conmuta a modo usuario y el control retorna a un programa de usuario, a pesar de que puede que no sea el mismo programa que estaba ejecutando cuando se ingresó a modo núcleo.
Una interrupción (hardware) es una señal asincrónica que indica la necesidad de atención (mediata o inmediata), no depende del programa en ejecución, es externa a él.
Una trampa es un tipo de interrupción sincrónica provocada típicamente por una condición excepcional, tal como una división por cero o un acceso a memoria inválido, en un proceso o hilo en modo usuario. Esta trampa provoca un cambio a modo núcleo, en la que el sistema operativo realiza alguna acción antes de devolver el control al proceso que la originó.
Para algunos autores, sólo al núcleo se lo debería considerar como el sistema operativo, dado que es la capa de software que interactúa directamente con el hardware. Cada una de las cuatro áreas de la administración del sistema operativo está implementada en el núcleo, con llamadas a sistema que disparan la ejecución de funciones en esa área. Además, las interrupciones dan como resultado la ejecución de funciones de administración del dispositivo y las trampas generadas por el hardware de administración de la memoria activan el código de la misma. Cada vez que se ingresa al núcleo puede llamarse al administrador de procesos como el último paso antes de que se devuelva el control a un programa de usuario.
Si bien son comunes los sistemas que se caracterizan por tener grandes núcleos monolíticos, también hay mucho interés en los sistemas operativos con micronúcleo (microkernel, en inglés). En estos sistemas, el núcleo tiene mínima funcionalidad, sólo provee funciones esenciales, tales como el control del hardware de administración de la memoria, facilidades para la comunicación entre procesos y manejo de las interrupciones y trampas, así como planificación básica. Los procesos servidores se encargan de proveer las funciones de mayor nivel, tales como los servicios del sistema de archivos. Un programa que requiera de servicios del sistema de archivos usará llamadas a sistema para comunicación entre procesos, para enviar los pedidos al proceso servidor del sistema de archivos.
El uso de procesos servidores mejora la flexibilidad; se pueden activar servidores nuevos sin siquiera reiniciar el sistema. El tamaño pequeño del micronúcleo simplifica la implementación y el portado a nuevos sistemas. Los micronúcleos son más apropiados para los sistemas distribuidos, ya que cuando se usan facilidades de comunicación entre procesos existe poca diferencia si el proceso es local o remoto.
Si la definición de un sistema operativo se expande para incluir a algunos servicios provistos por procesos en capa de usuario, la distinción entre programa de sistema y sistema operativo se torna difusa. Los servicios tales como un sistema de impresión con spooling o un gestor de ventanas son difíciles de clasificar. Según Harris (2002), se los podría considerar parte de las capacidades de administración de dispositivo del sistema.
1.3 Estructura y funcionamiento de la computadora
La computadora es una máquina destinada a procesar datos. En una visión esquemática, como la que muestra la figura 1.3, este procesamiento involucra dos flujos de información: el de datos y el de instrucciones. Se parte del flujo de datos que ha de ser procesado. Este es tratado mediante un flujo de instrucciones de máquina, generado por la ejecución de un programa, y produce el flujo de datos resultado.
fig_01_03Fig. 1.3 – Flujos de información.
1.3.1 Componentes de una computadora
Para llevar a cabo la función de procesamiento, una computadora con arquitectura de von Neumann (1945) está compuesta por los cuatro componentes básicos representados en la figura 1.4:
fig_01_04Fig. 1.4 – Componentes de una computadora.
Para lograr sincronización entre CPU y dispositivos de entrada o salida hay dos métodos:
Transferencia de datos por interrupciones (figura 1.5).
Transferencia de datos por acceso directo a memoria (DMA).
Antes se realizaba por espera activa (la CPU esperaba que se realizara la entrada o salida).
En un sistema basado en interrupciones hay un controlador por cada tipo de dispositivo, que cuenta con almacenamiento local en buffer y registros de propósito general.
El controlador del dispositivo es el responsable de transferir los datos entre el dispositivo que controla y su buffer local.
1.3.1.1 Dinámica de una operación de entrada y salida
La CPU carga los registros apropiados del controlador del dispositivo con la acción que se ha de tomar y continúa su operación normal.
El controlador analiza los registros para ver qué acción realizar.
Concluida la transferencia el controlador avisa a la CPU que la transferencia ya terminó. Esto se realiza causando una interrupción.
La CPU suspende lo que estaba haciendo y transfiere la ejecución a un lugar fijo que tiene la dirección de inicio de la rutina de atención de esa interrupción.
Dicha rutina transfiere los datos desde el buffer local del controlador a la memoria principal.
Una vez realizada la transferencia, la CPU puede continuar con los procesos interrumpidos.
Cada diseño de computadora tiene su esquema de interrupciones.
Es preciso distinguir las interrupciones de las excepciones. Las excepciones o traps son las llamadas interrupciones por software. Las interrupciones son externas al proceso; las excepciones son internas a él.