sop - resumen

62
Unidad Nº1 – Introducción a los Sistemas Operativos Funciones y objetivos de los sistemas operativos El sistema operativo como interfaz usuario/computadora El sistema operativo como administrador de recursos Facilidad de evolución de un sistema operativo Evolución histórica de los sistemas operativos Proceso en serie Sistemas sencillos de proceso por lotes Sistemas por lotes con multiprogramación Sistemas de tiempo compartido Características de los sistemas operativos modernos Arquitectura micronúcleo Multihilos Multiproceso simétrico Sistema operativo distribuido Diseño orientado a objetos Microsoft Windows Reseña histórica Arquitectura Organización del sistema operativo Módulos del Ejecutor Procesos de usuario Modelo cliente/servidor Ventajas UNIX Historia Descripción Linux Historia Estructura modular Unidad Nº2 – Administración y gestión de archivos Archivos Nombre Estructuras de archivos Tipos de archivos Métodos de acceso Atributos de un archivo Operaciones con archivos Directorios Jerarquía de directorios Nombres de ruta Operaciones con directorios Implementación de sistemas de archivos Organización del sistema de archivos Implementación de archivos Implementación de directorios Archivos compartidos Administración del espacio en disco Tamaño de bloque Control de bloques libres Administración de cuotas de disco NTFS (Windows 2000) Unidad Nº3 – Administración de procesos Estados Modelo de dos estados Creación de procesos y terminación de procesos Modelo de cinco estados Transiciones Procesos suspendidos Modelo de siete estados Transiciones Descripción de procesos Estructuras de control del sistema operativo Estructuras de control de procesos Bloque de control de proceso e Imagen de proceso Atributos de los procesos La importancia del BCP Control de procesos Modos de ejecución Funciones del núcleo de un SO Creación de procesos Cambio de proceso Procesos e hilos Entornos monohilo y multihilo Elementos de un proceso Elementos de los hilos de un proceso Modelos de proceso monohilo y multihilo Ventajas de la implementación de hilos Estados de un hilo Implementación de hilos Multiproceso simétrico (SMP) Arquitecturas SMP Micronúcleo Antecesores de la arquitectura micronúcleo Arquitectura micronúcleo Ventajas de la implementación micronúcleo Diseño de micronúcleo Hilos y procesos en Linux Estados de un proceso en Linux Hilos en Linux Comunicación entre procesos Exclusión mutua con espera ocupada (con espera activa) El problema del productor-consumidor Exclusión mutua sin espera ocupada Planificación de procesos (Scheduling o calendarización) Cuando calendarizar (criterios de planificación) Tipos de algoritmos de calendarización Categorías de algoritmos de calendarización Metas de los algoritmos de calendarización Algoritmos de calendarización en sistemas por lotes Algoritmos de calendarización en sistemas interactivos Bloqueos irreversibles (interbloqueos) Recursos Condiciones para un bloqueo irreversible Modelado de bloqueos irreversibles Estrategias para enfrentar los bloqueos irreversibles Detección y recuperación Prevención de bloqueos irreversibles Inanición Unidad Nº4 – Administración de memoria Estrategias de administración Monoprogramación sin intercambio ni paginación Multiprogramación con particiones fijas Reubicación y protección

Upload: lorena-soledad-ledesma

Post on 07-Dec-2015

251 views

Category:

Documents


5 download

DESCRIPTION

Resumen de Sistemas Operativos

TRANSCRIPT

Unidad Nº1 – Introducción a los Sistemas Operativos

Funciones y objetivos de los sistemas operativos

El sistema operativo como interfaz usuario/computadora

El sistema operativo como administrador de recursos

Facilidad de evolución de un sistema operativo

Evolución histórica de los sistemas operativos

Proceso en serie

Sistemas sencillos de proceso por lotes

Sistemas por lotes con multiprogramación

Sistemas de tiempo compartido

Características de los sistemas operativos modernos

Arquitectura micronúcleo

Multihilos

Multiproceso simétrico

Sistema operativo distribuido

Diseño orientado a objetos

Microsoft Windows

Reseña histórica

Arquitectura

Organización del sistema operativo

Módulos del Ejecutor

Procesos de usuario

Modelo cliente/servidor

Ventajas

UNIX

Historia

Descripción

Linux

Historia

Estructura modular

Unidad Nº2 – Administración y gestión de archivos

Archivos

Nombre

Estructuras de archivos

Tipos de archivos

Métodos de acceso

Atributos de un archivo

Operaciones con archivos

Directorios

Jerarquía de directorios

Nombres de ruta

Operaciones con directorios

Implementación de sistemas de archivos

Organización del sistema de archivos

Implementación de archivos

Implementación de directorios

Archivos compartidos

Administración del espacio en disco

Tamaño de bloque

Control de bloques libres

Administración de cuotas de disco

NTFS (Windows 2000)

Unidad Nº3 – Administración de procesos

Estados

Modelo de dos estados

Creación de procesos y terminación de procesos

Modelo de cinco estados

Transiciones

Procesos suspendidos

Modelo de siete estados

Transiciones

Descripción de procesos

Estructuras de control del sistema operativo

Estructuras de control de procesos

Bloque de control de proceso e Imagen de proceso

Atributos de los procesos

La importancia del BCP

Control de procesos

Modos de ejecución

Funciones del núcleo de un SO

Creación de procesos

Cambio de proceso

Procesos e hilos

Entornos monohilo y multihilo

Elementos de un proceso

Elementos de los hilos de un proceso

Modelos de proceso monohilo y multihilo

Ventajas de la implementación de hilos

Estados de un hilo

Implementación de hilos

Multiproceso simétrico (SMP)

Arquitecturas SMP

Micronúcleo

Antecesores de la arquitectura micronúcleo

Arquitectura micronúcleo

Ventajas de la implementación micronúcleo

Diseño de micronúcleo

Hilos y procesos en Linux

Estados de un proceso en Linux

Hilos en Linux

Comunicación entre procesos

Exclusión mutua con espera ocupada (con espera activa)

El problema del productor-consumidor

Exclusión mutua sin espera ocupada

Planificación de procesos (Scheduling o calendarización)

Cuando calendarizar (criterios de planificación)

Tipos de algoritmos de calendarización

Categorías de algoritmos de calendarización

Metas de los algoritmos de calendarización

Algoritmos de calendarización en sistemas por lotes

Algoritmos de calendarización en sistemas interactivos

Bloqueos irreversibles (interbloqueos)

Recursos

Condiciones para un bloqueo irreversible

Modelado de bloqueos irreversibles

Estrategias para enfrentar los bloqueos irreversibles

Detección y recuperación

Prevención de bloqueos irreversibles

Inanición

Unidad Nº4 – Administración de memoria

Estrategias de administración

Monoprogramación sin intercambio ni paginación

Multiprogramación con particiones fijas

Reubicación y protección

Administración de memoria

Intercambio (swapping)

Particiones variables

Administración de memoria con mapa de bits

Administración de memoria con listas enlazadas

Memoria virtual

Paginación

Tablas de página

Memoria asociativa (búferes de consulta para traducción)

Algoritmos para el reemplazo de páginas

Modelo del conjunto de trabajo (algoritmo de reemplazo de

páginas de conjunto de trabajo

Aspectos de diseño de los sistemas con paginación

Políticas de asignación locales vs. globales

Tamaño de página

Aspectos de implementación

Segmentación

Paginación vs. Segmentación

Unidad Nº5 – Entrada / Salida

Interrupciones

Clases de interrupciones

Las interrupciones y el ciclo de instrucción

Tratamiento de las interrupciones

Interrupciones múltiples

Multiprogramación

Dispositivos de Entrada/Salida

Tipos de dispositivos

Controlador de dispositivos (Drivers)

Funcionamiento

Organización del sistema de la E/S

Técnicas de comunicación de la E/S

E/S programada

E/S dirigida por interrupciones

DMA (acceso directo a memoria)

Evolución de las funciones de E/S

Aspectos de diseño en los sistemas operativos

Objetivos del diseño

Estructura lógica de las funciones de E/S

Almacenamiento intermedio de la E/S (Buffering)

Memoria intermedia sencilla

Memoria intermedia doble

Memoria intermedia circular

Planificación de discos

Parámetros de rendimiento del disco

Políticas de planificación de discos

RAID

Características

Niveles

RAID 0 (sin redundancia)

RAID 1 (mirroring)

RAID 2

RAID 3 (paridad por intercalación de bits)

RAID 4

RAID 5 (paridad por intercalación distribuida de bloques)

RAID 6 (paridad doble por intercalación distribuida de bloque)

Caché de disco

Consideraciones sobre el diseño

Unidad Nº6 – Seguridad

Amenazas a la seguridad

Tipos de amenazas

Componentes de un sistema informático

Protección

Protección de la memoria

Control de acceso orientado al usuario (autenticación)

Control de acceso orientado a los datos (autorización)

Intrusos

Tipos de intrusos

Técnicas de intrusión

Técnicas de obtención de contraseñas

Protección de contraseñas

Vulnerabilidad de las contraseñas

Estrategias de elección de contraseñas

Detección de intrusos

Software malicioso

Programas malignos

Fases de un virus

Tipos de virus

Virus de macros

Unidad Nº7 – Procesamiento distribuido

Introducción

Proceso cliente/servidor

Aplicaciones cliente/servidor

Aplicaciones de bases de datos

Clases de aplicaciones cliente/servidor

Arquitectura cliente/servidor de tres capas

Consistencia de la caché de archivos

Middleware

Arquitectura middleware

Paso distribuido de mensajes

Servicio fiable vs. servicio no fiable

Bloqueante vs no bloqueante

Llamadas a procedimiento remoto (RPC)

Paso de parámetros

Enlace cliente/servidor

Sincronismo vs asincronismo

Agrupaciones (Clusters)

Configuraciones de clusters

Conceptos de diseño de los sistemas operativos

Gestión de fallos

Equilibrio de carga

Proceso paralelo

UTN FRC Resumen SOP – Rodrigo Carrión

1 / 8

Unidad Nº1 – Introducción a los Sistemas Operativos

Sistema operativo (SO): es un programa que controla la ejecución de los programas de aplicación y que actúa como

interfaz entre las aplicaciones del usuario y el hardware de una computadora.

Funciones y objetivos de los sistemas operativos

Un SO tiene tres objetivos:

Comodidad: hacer que una computadora sea más cómoda y fácil de utilizar.

Eficiencia: permite que los recursos de un sistema informático se aprovechen eficientemente.

Capacidad de evolución: deben construirse de modo que permitan el desarrollo efectivo, la verificación y la

introducción de nuevas funciones al sistema, y a la vez, no interferir en los servicios que brinda.

El sistema operativo como interfaz usuario/computadora

Los usuarios finales utilizan programas de aplicación, y no tienen que

preocuparse de la arquitectura de la computadora.

Las aplicaciones se construyen con un lenguaje de programación y son

desarrolladas por programadores.

Algunos programas se denominan utilidades, que implementan

funciones muy utilizadas que ayudan a la creación de programas, la

gestión de archivos y el control de dispositivos de E/S.

El SO oculta al programador los detalles de hardware y le proporciona

una interfaz cómoda para utilizar el sistema. Actúa como mediador,

facilitándole al programador y a los programas de aplicación el acceso

y uso de todas esas características y servicios.

Un SO ofrece servicios en las siguientes áreas:

Creación de programas: el SO ofrece múltiples funcionalidades y servicios para ayudar al programador en la

creación de programas. Estos servicios están en forma de programas de utilidades.

Ejecución de programas: el SO administra todas las tareas necesarias para la ejecución de un programa.

Acceso a los dispositivos de E/S: el SO brinda una interfaz uniforme que oculta los detalles de funcionamiento de

los dispositivos de E/S, de modo que el programador pueda acceder a los dispositivos utilizando lecturas y escrituras

simples.

Acceso controlado a los archivos: el SO proporciona mecanismos de protección para controlar el acceso a los

archivos.

Acceso al sistema: en un sistema compartido o público, el SO controla el acceso al sistema como un todo y a los

recursos específicos del sistema.

Detección y respuesta a errores: el SO debe dar respuestas que elimine las condiciones de errores que se

produzcan con el menor impacto posible sobre las aplicaciones que están ejecución.

Contabilidad: el SO debe recoger estadísticas de los recursos y supervisar parámetros de rendimiento. Es muy útil

para anticiparse a la necesidad de mejoras futuras y para ajustar el sistema y así mejorar su rendimiento.

El sistema operativo como administrador de recursos

Una computadora es un conjunto de recursos para el movimiento, almacenamiento y proceso de datos y para el control de

estas funciones. El SO es el responsable de la gestión de estos recursos.

El SO es nada más que un conjunto de programas, que como otros programas, proporciona instrucciones al procesador.

UTN FRC Resumen SOP – Rodrigo Carrión

2 / 8

El SO dirige al procesador en el empleo de otros recursos del sistema y en el control del tiempo de la ejecución de otros

programas. Pero para que el procesador pueda hacer estas cosas, debe cesar la ejecución del programa del SO y ejecutar

otros programas. El SO cede el control del procesador, para realizar algún trabajo y luego lo recupera durante el tiempo

suficiente para preparar al procesador para llevar a cabo la siguiente parte del trabajo.

Una parte del SO está en la memoria principal. En esta parte está el núcleo (kernel), que incluye las funciones más utilizadas

frecuentemente del SO. El resto de la memoria principal contiene datos y otros programas de usuario. La asignación de la

memoria principal es controlada conjuntamente por el SO y por el hardware de gestión de memoria del procesador. El SO

decide cuándo un programa en ejecución puede utilizar un dispositivo de E/S y controla el acceso y la utilización de los

archivos. El procesador es un recurso y es el SO el que debe determinar cuánto tiempo del procesador debe dedicarse a la

ejecución de un programa de usuario en particular.

Facilidad de evolución de un sistema operativo

Un SO evoluciona en el tiempo por las siguientes razones:

Actualizaciones de hardware y nuevos tipos de hardware.

Nuevos servicios, como respuesta a las demandas de los usuarios o necesidades de administradores de sistemas.

Correcciones de fallos que se descubren con el tiempo.

La necesidad de hacer cambios en forma regular, introduce ciertos requisitos de diseño. El sistema debe tener una

construcción modular, con interfaces bien definidas entre los módulos y debe estar bien documentado.

Evolución histórica de los sistemas operativos

Procesos en serie.

Sistemas sencillos de proceso por lotes.

Sistemas por lotes con multiprogramación.

Sistemas de tiempo compartido.

Proceso en serie

En las primeras computadoras los programadores interactuaban directamente con el hardware de los mismos, no había

sistema operativo. Se operaba desde una consola consistente en unos indicadores luminosos, unos conmutadores, algún

tipo de dispositivo de entrada y alguna impresora.

Los programas en código máquina se cargaban con un dispositivo de entrada (lector de tarjetas). Se ejecutaban hasta su

culminación donde la impresora mostraba el resultado, si se producía un error se mostraba con los indicadores luminosos.

Presentaban dos problemas principales:

Planificación: la mayoría de las instalaciones empleaban un formulario de reserva de tiempo de máquina. Si un

usuario reservaba una hora y terminaba a los 45 minutos se desperdiciaba tiempo del computador; por el contrario,

si el usuario tenía dificultades, no terminaba en el tiempo asignado y tenía que parar sin resolver el problema.

Tiempo de preparación: si se producía un error, el usuario tenía que volver a realizar el proceso de preparación

perdiendo tiempo considerable. El proceso de preparación consistía en cargar compilador y programa en alto nivel

en memoria, salvar el programa objeto (compilado) y luego cargarlo y montarlo junto con las funciones comunes.

Se llamaba proceso en serie porque los usuarios accedían al computador en serie.

Sistemas sencillos de proceso por lotes

El primer sistema operativo por lotes (y el primer sistema operativo de todos) se desarrolló a mediados de los 50 por General

Motors.

La idea central es el uso de un elemento de software conocido como el monitor. Aquí, los usuarios no tenían acceso directo

a la máquina. En su lugar, el usuario debía entregar los trabajos en tarjetas o en cintas al operador de la computadora, quien

agrupaba secuencialmente los trabajos por lotes y ubicaba los lotes enteros en un dispositivo de entrada para su empleo

por parte del monitor. Cada programa se construía de modo que al terminar su ejecución, el monitor cargaba

automáticamente el siguiente programa.

UTN FRC Resumen SOP – Rodrigo Carrión

3 / 8

El monitor es quien gestiona el problema de la planificación. Se pone en cola un lote de trabajos y éstos son ejecutados tan

rápidamente como sea posible, evitando tiempos de inactividad. El monitor también organiza mejor el tiempo de organización

del trabajo utilizando un lenguaje de control de trabajos, que es un lenguaje para dar instrucciones al monitor.

Este tipo de sistemas necesitaban nuevas características como:

Protección de memoria: mientras se ejecuta un programa de usuario no debe modificar la zona de memoria donde

está el monitor.

Temporizador: se utiliza para evitar que un solo trabajo monopolice el sistema.

Instrucciones privilegiadas: algunas instrucciones máquina solo las puede ejecutar el monitor.

Interrupciones: le flexibilidad al sistema operativo para ceder y retomar el control de los programas de usuario.

Sistemas por lotes con multiprogramación

Aún con el secuenciamiento automático de trabajos ofrecido por un sistema operativo sencillo por lotes, el procesador está

desocupado con frecuencia, ya que los dispositivos de E/S son lentos comparados al microprocesador.

Consiste en tener varios programas de usuario en la memoria, y cuando el programa que está en ejecución va esperar por

E/S, el procesador cambia a otro trabajo que no esté esperando por E/S. Este proceso es conocido como

multiprogramación o multitarea.

Estos sistemas mantienen varios trabajos listos para ejecutarse en memoria principal, por lo que requieren alguna forma de

gestión de memoria, además debe decidir cuál ejecutar, haciendo uso de un algoritmo de planificación.

Sistemas de tiempo compartido

La técnica de tiempo compartido consiste en que el tiempo del procesador se comparte entre diversos usuarios. Múltiples

usuarios acceden simultáneamente al sistema por medio de terminales, donde el sistema operativo intercala la ejecución de

cada programa de usuario en ráfagas cortas o cuantos (quantum) de computación. El tiempo de respuesta de un sistema

correctamente diseñad debería ser comparable al de un computador dedicado.

Características de los sistemas operativos modernos

Arquitectura micronúcleo.

Multihilos.

Multiproceso simétrico.

Sistemas operativos distribuidos.

Diseño orientado a objetos.

Arquitectura micronúcleo

La arquitectura micronúcleo asigna solamente unas pocas funciones esenciales al núcleo. Otros servicios del sistema

operativo los proporcionan procesos que se ejecutan en modo usuario y que el micronúcleo trata como cualquier otra

aplicación.

Este enfoque simplifica la implementación, proporciona flexibilidad, y se adapta bien para entornos distribuidos.

Multihilos

Los multihilos son una técnica por lo cual un proceso, ejecutando una aplicación, se divide en hilos que pueden ejecutarse

concurrentemente.

Hilo: unidad de trabajo que se puede expedir para su ejecución. Conjunto de instrucciones que pertenecen a un

proceso. Se les suele llamar procesos ligeros o contextos de ejecución. Se ejecuta secuencialmente y es

interrumpible para que el procesador puede ceder el turno a otro hilo.

Proceso: un conjunto de uno o más hilos y los recursos del sistema asociados (código, datos, archivos abiertos y

dispositivos). Al dividir una aplicación en múltiples hilos, el programador tiene un gran control sobre la modularidad

de la aplicación y la coordinación de los sucesos relativos al sistema.

UTN FRC Resumen SOP – Rodrigo Carrión

4 / 8

Los multihilos son muy útiles para las aplicaciones que ejecutan un número de tareas esencialmente independientes que no

necesitan ser consecutivas.

Multiproceso simétrico

Es un término que se refiere a una arquitectura hardware y al comportamiento de la misma. Un multiprocesador simétrico

puede definirse como un sistema de computadores de un solo usuario con las siguientes características:

Existencia de múltiples procesadores.

Estos procesadores comparten la misma memoria principal y dispositivos de E/S.

Todos los procesadores pueden ejecutar las mismas funciones (simétrico).

Ventajas:

Rendimiento: se puede ejecutar más de un proceso simultáneamente, cada uno en un procesador diferente.

Disponibilidad: el fallo de un procesador no detiene la máquina, el sistema continúa funcionando con un

rendimiento reducido.

Crecimiento incremental: se incrementa el rendimiento del sistema agregando un procesador adicional.

Escalabilidad: variedad de productos con diferentes precios y características de rendimiento basados en el número

de procesadores del sistema.

La existencia de múltiples microprocesadores es transparente al usuario.

Sistema operativo distribuido

Un sistema operativo distribuido proporciona la ilusión de un único espacio de memoria principal y un único espacio de

memoria secundaria, además de otros mecanismos de acceso unificados.

Diseño orientado a objetos

Posibilita añadir extensiones modulares a un pequeño núcleo. Permite a los programadores personalizar el SO sin romper

la integridad del mismo, y también facilita el desarrollo de herramientas distribuidas y sistemas operativos distribuidos

abiertos.

Microsoft Windows

Reseña histórica

MS DOS 1.0 (1981). Sistema operativo de Microsoft para la primera computadora personal de IBM. Se ejecutaba

en 8K de memoria utilizando el microprocesador Intel 8086.

MS DOS 2.0 (1983). Para el PC XT de IBM. Añadió soporte para discos duros y ofrecía directorios jerárquicos

(directorios con subdirectorios y archivos). Se añadieron también características de UNIX como el

redireccionamiento de E/S (capacidad de cambiar la identidad de la entrada o salida de una aplicación) y la impresión

subordinada (background). La memoria creció hasta 24 Kb.

MS DOS 3.0 (1984). Para el PC AT de IBM con micro Intel 80286 que añadió direccionamiento extendido y recursos

de protección de memoria, pero DOS no los utilizó. Uso el 80286 como un “8086 rápido” para mantener

compatibilidad. Los requisitos de memoria crecieron hasta 36 KB.

1. MS DOS 3.1 (1984). Añade soporte para redes de PC.

2. MS DOS 3.3 (1987). Soporte para PS/2. El sistema pasó a utilizar 46 KB.

Windows 3.0 (1990). El DOS estaba siendo utilizado en un entorno que iba más allá de sus capacidades. Microsoft

comienza el desarrollo de una Interfaz Gráfica de Usuario (GUI) que podría ejecutarse entre el usuario y el DOS. En

1990, Microsoft presenta una versión de la GUI, el Windows 3.0, la cual seguía maniatada por la necesidad de

ejecutarse sobre DOS.

UTN FRC Resumen SOP – Rodrigo Carrión

5 / 8

Windows NT (1993). Luego de una tentativa fallida por Microsoft de desarrollar junto a IBM un SO de nueva

generación que aprovechara las características de los actuales microprocesadores, IBM desarrolla OS/2 y Microsoft

lanza Windows NT. Ofrece multitarea en entornos monousuarios y multiusuarios.

Windows NT 4.0. Después de varias versiones NT 3.X, Microsoft desarrolla la versión 4.0, que proporciona la misma

interfaz de Windows 98. El mayor cambio consiste en que varios de los componentes gráficos que se ejecutaban

tanto en modo usuario como formando parte del subsistema Win 32 en 3.X, han sido trasladados al ejecutor de

Windows NT, que ejecuta en modo núcleo, lo que implica una aceleración en tales ejecuciones. El inconveniente es

que servicios del sistema tienen acceso a funciones graficas de bajo nivel, pudiendo impactar con la fiabilidad del

SO.

Windows 2000 (2000). Nuevamente el ejecutor y la arquitectura micronúcleo son fundamentalmente los mismos que

en NT 4.0. Se han añadido nuevas características, como el soporte al procesamiento distribuido. El directorio activo

es un servicio del directorio distribuido capaz de traducir los nombres de objetos arbitrarios a cualquier tipo de

información acerca de los mismos. Una consideración final sobre Windows 2000 es la distribución entre Windows

2000 Server y Professional, en donde la versión Server incluye servicios para su uso como servidor de red.

Windows XP (2001).

Windows Server 2003 (2003).

Windows Vista (2007).

Windows Server 2008 (2008).

Windows 7 (2009).

Windows 8 (2011).

1. Windows 8.1 (2012).

Windows Server 2012 (2012).

Arquitectura

Como en casi todos los sistemas operativos, se separa el software orientado a las aplicaciones del software del sistema

operativo.

El software del modo núcleo tiene acceso a los datos del sistema y al hardware. El software restante, que se encuentra en

modo usuario, tiene acceso limitado a los datos del sistema.

UTN FRC Resumen SOP – Rodrigo Carrión

6 / 8

Organización del sistema operativo

Windows no tiene una arquitectura micronúcleo pura, sino una modificación de la misma.

Windows es altamente modular. Cualquier modulo puede ser eliminado, actualizado o reemplazado sin volver a escribir el

sistema completo o sus Interfaces de Programas de Aplicación (API). Sin embargo, a diferencia de in sistema micronúcleo,

Windows está configurado para que la mayoría de las funciones externas al micronúcleo se ejecuten en modo núcleo, todo

por una razón de rendimiento.

Uno de los objetivos de diseño de Windows es la compatibilidad, que sea capaz de ejecutar sobre distintas plataformas de

hardware, por eso utiliza la siguiente estructura por niveles:

Capa de abstracción del hardware (HAL): aísla el sistema operativo de las diferencias de hardware específicas

de cada plataforma. El SO da órdenes que pasan por la HAL y ésta las “transforma” para que el hardware específico

las entienda; y al revés, el hardware da órdenes a al SO a través de la HAL para que el SO las entienda. Así no hay

dependencia entre el SO y el hardware.

Micronúcleo (kernel): formado por los componentes más usados y fundamentales del sistema operativo

(planificación de hilos, cambios de contexto, gestión de excepciones e interrupciones y sincronización de

microprocesadores).

Controladores de dispositivos: incluye los drivers de dispositivos que traducen las llamadas a funciones de E/S

del usuario a peticiones a dispositivos hardware de E/S específicos.

Módulos del Ejecutor

El Ejecutor de Windows incluye módulos para las funciones específicas del sistema y proporciona una API para el software

en modo usuario.

Administrador de E/S: distribuye los controladores de dispositivos (drivers) entre los distintos procesos.

Administrador de objetos: crea, gestiona y elimina los objetos del Ejecutor de Windows.

Monitor de seguridad: impone la validación de acceso y la generación de reglas de auditoría para los objetos

protegidos.

Administrador de procesos/hilos: crea y elimina objetos y sigue la pista de los objetos proceso e hilo.

Servicios de llamadas a procedimiento local (LPC): impone las relaciones cliente/servidor entre las aplicaciones

y los subsistemas del Ejecutor dentro de un mismo sistema, de forma similar al servicio de llamadas a procedimiento

remoto (RPC) utilizadas en el procesamiento distribuido.

Administrador de memoria virtual: traduce direcciones virtuales en el espacio de direcciones del proceso a

páginas físicas en la memoria de la computadora.

Administrador de caché: mejora el rendimiento de las E/S sobre archivos.

Módulos para gráficos/ventanas: crea las interfaces de pantalla (ventanas) y gestiona los dispositivos gráficos.

Procesos de usuario

Procesos de soporte de sistemas especiales: proceso de inicio de sesión y la gestión de sesión.

Procesos de servicio: otros servicios como el registro de sucesos.

Subsistemas de entorno: ofrecen servicios nativos de Windows a las aplicaciones de usuario y de este modo

proporcionan un entorno de SO. Cada subsistema incluye DLLs (bibliotecas de enlace dinámico) que convierten las

llamadas de las aplicaciones de usuario en llamadas que interprete Windows.

Aplicaciones de usuario: programas que se ejecutan sobre el SO. Pueden ser Win32, Posix, OS/2, etc.

Modelo cliente/servidor

Cada subsistema del entorno y el subsistema de servicios del Ejecutor se implementan como uno o más procesos. Cada

proceso espera la solicitud de un cliente para uno de sus servicios. Un cliente (un programa de aplicación u otro módulo del

SO) solicita un servicio enviando un mensaje. El mensaje es encaminado a través del Ejecutor hasta el servidor apropiado.

El servidor lleva a cabo la operación solicitada y devuelve el resultado o la información de estado por medio de otro mensaje,

que se encamina a través del Ejecutor hasta el cliente.

UTN FRC Resumen SOP – Rodrigo Carrión

7 / 8

Ventajas

Simplifica el Ejecutor. Se pueden añadir fácilmente nuevas API.

Mejora la fiabilidad. Cada módulo de servicio del Ejecutor se ejecuta en un proceso independiente, con su propia

partición de memoria, protegido de otros módulos. Un cliente puede fallar sin corromper el resto del SO.

Proporciona una base para el procesamiento distribuido.

UNIX

Historia

Se desarrolló en los Laboratorios Bell operando en una PDP-7 en 1970.

Se reescribió en lenguaje de programación C, demostrando las ventajas de usar un lenguaje de alto nivel.

Descripción

El hardware básico está rodeado por el software del SO (el kernel). UNIX cuenta con varios servicios e interfaces de usuario

que se consideran parte del sistema (interprete de órdenes, conocido como shell, o un software de interfaz gráfica). El nivel

exterior está formado por las aplicaciones de los usuarios y la interfaz de usuario del compilador C. Los programas de

usuario pueden invocar servicios del SO directamente o a través de programas de biblioteca (librerías).

Linux

Historia

Linux aparece como variante de UNIX para la arquitectura del IBM PC.

La versión inicial fue escrita por Linus Torvals.

Torvals distribuyó una primera versión de Linux en Internet en 1991. Desde entonces un gran número de personas

han contribuido al desarrollo de Linux.

Linux es libre y está disponible su código fuente.

Linux es altamente modular y fácilmente configurable. Esto hace que sea fácil de obtener el rendimiento óptimo para

múltiples plataformas de hardware.

Estructura modular

Linux está organizado como un conjunto de bloques independientes denominados módulos cargables, que tienen dos

características importantes:

Enlace dinámico: un módulo del núcleo puede cargarse y enlazarse dentro del núcleo. También, un módulo puede

ser desenlazado y borrado de la memoria en cualquier momento. Esto facilita la tarea de configuración y protege la

memoria del núcleo. En Linux, un programa de usuario o un usuario puede cargar y descargar explícitamente

módulos del núcleo usando las órdenes insmod y rmmod.

UTN FRC Resumen SOP – Rodrigo Carrión

8 / 8

Módulos apilables: los módulos se organizan jerárquicamente, pudiendo definir dependencias entre módulos. Esto

tiene dos ventajas:

1. El código común de un conjunto de módulos similares puede ser trasladado a un único módulo, reduciendo

la duplicación.

2. El núcleo puede asegurar que los módulos necesarios estén presentes, despreocupándose de descargar

un módulo del que dependen otros módulos en ejecución y cargando cualquier módulo adicional necesario

cuando se cargue un módulo nuevo.

UTN FRC Resumen SOP – Rodrigo Carrión

1 / 9

Unidad Nº2 – Administración y gestión de archivos

Archivos Archivo: son un mecanismo de abstracción que permite almacenar información en el disco y leerla después. Esto se realiza de forma que el usuario no tenga que saber los detalles de cómo y dónde está almacenada la información, y de cómo funcionan los discos.

Nombre

Cuando un proceso crea un archivo, le asigna nombre. Cuando el proceso termina, el archivo sigue existiendo y otros

procesos pueden tener acceso a él mediante su nombre.

Las reglas exactas para nombrar archivos varían según el sistema. Algunos sistemas de archivos distinguen entre

mayúsculas y minúsculas (UNIX), pero otros no (MS-DOS).

Muchos sistemas de archivos manejan nombres de archivos en dos partes, separadas con un punto. La parte que sigue al

punto se denomina extensión de archivo, y por lo general indica algo acerca del archivo. En algunos sistemas (como UNIX)

las extensiones de archivo son sólo convenciones y el SO no vigila que se usen de alguna forma específica. El nombre sirve

de recordatorio para el usuario en vez de servirle información a la computadora. En cambio, Windows tiene conocimiento

de las extensiones y les asigna un significado. A cada extensión se le asigna un programa “dueño”, haciendo que cuando

un usuario haga doble clic sobre el archivo, se abra el programa asociado a la extensión con el nombre de archivo como

parámetro (si haces doble clic en documento.doc se abre documento.doc en Word).

Estructuras de archivos

1. Sucesión no estructurada de bytes: el SO no sabe que contiene el archivo, ni le interesa; lo único que ve son

bytes. Utilizado por UNIX y Windows. Ofrece mayor flexibilidad.

2. Sucesión de registros de longitud fija: cada registro tiene una estructura interna. La operación de lectura devuelve

un registro y la operación de escritura sobrescribe o anexa un registro.

3. Árbol de registros: los registros pueden ser de diferente longitud. Cada registro posee un campo clave en una

posición fija del registro. El árbol se ordena según el campo clave con el objetivo de encontrar con rapidez una clave

en particular.

Tipos de archivos

1. Archivos normales: contienen información del usuario. Pueden ser de texto (ASCII) o binarios.

a. ASCII: consisten en líneas de texto. Pueden exhibirse e imprimirse tal cual, y pueden editarse con cualquier

editor de textos. Facilitan la conexión de la salida de un programa con la entrada de otro.

b. Binarios: poseen una estructura interna conocida por los programas que los usan. Solo pueden ser

visualizados por la aplicación que los creó.

2. Directorios: archivos del sistema que sirven para mantener la estructura del sistema de archivos (contiene otros

archivos y directorios).

3. Archivos especiales de caracteres: tienen que ver con E/S y sirven para modelar dispositivos de E/S en serie

(flujos de caracteres, por ejemplo la impresora).

4. Archivos especiales de bloques: sirven para modelar discos (se leen y escriben bloques).

Métodos de acceso

Acceso secuencial: el archivo se lee desde el principio hasta el final, no pudiendo realizar saltos o leerlos en otro

orden. El tiempo de acceso es lento (excepto si el archivo se encuentra en el principio). Usado en cintas magnéticas.

Acceso aleatorio: los archivos pueden leerse en cualquier orden. Se puede acceder a ellos a través de una clave

o índice independientemente de su posición, sin tener que pasar por los datos anteriores. Usado en discos.

UTN FRC Resumen SOP – Rodrigo Carrión

2 / 9

Atributos de un archivo

Atributo: información adicional de un archivo que agrega el SO, como la fecha y la hora de creación, tamaño, etc. Los

atributos varían según el SO.

Protección: quien puede tener acceso al archivo y cómo.

Contraseña: clave necesaria para poder acceder al archivo.

Creador: ID del creador del archivo.

Propietario: propietario actual.

Indicador de sólo lectura: 0 para leer/escribir; 1 sólo lectura.

Indicador de oculto: 0 normal; 1 para no mostrar.

Indicador de sistema: 0 normal; 1 archivo de sistema.

Indicador de archivado: 0 ya respaldado; 1 debe respaldarse.

Indicador de ASCII/Binario: 0 ASCII; 1 binario.

Indicador de acceso aleatorio: 0 acceso secuencial; 1 acceso aleatorio.

Indicador temporal: 0 normal; 1 borrarlo al terminar el proceso.

Indicador de bloqueo: 0 sin bloqueo; 1 bloqueado.

Longitud de registro: bytes en un registro.

Posición de clave: distancia a la clave dentro de cada registro.

Longitud de clave: bytes en el campo clave.

Hora de creación: fecha y hora de creación.

Hora de último acceso: fecha y hora en se tuvo acceso por última vez al archivo.

Hora de último cambio: fecha y hora en se modificó por última vez el archivo.

Tamaño actual: bytes en el archivo.

Tamaño máximo: bytes que puede alcanzar el archivo.

Operaciones con archivos

Los SO ofrecen diferentes operaciones para almacenar y recuperar la información. Las más comunes son:

1. CREATE (crear): se crea el archivo sin datos. Se reserva espacio en el disco y se establecen algunos atributos.

2. DELETE (borrar): borrar un archivo para liberar espacio en disco.

3. OPEN (abrir): hace que el sistema obtenga los atributos y la lista de direcciones de disco y los coloque en la memoria

principal para después accederlos

4. CLOSE (cerrar): cierra el archivo cuando han acabado todos los accesos, ya que no son necesarios los atributos y

direcciones en disco.

5. READ (leer): se leen datos del archivo. Se lee desde la posición actual, y debe especificarse cuantos datos se

necesita y el búfer donde deben colocarse.

6. WRITE (escribir): lee los datos de un archivo, generalmente, en la posición actual. Si la posición actual es el fin del

archivo, aumenta el tamaño; si la posición actual es un punto intermedio, se sobrescriben los datos.

7. APPEND (añadir): forma restringida de WRITE; solo se pueden añadir datos al final del archivo.

8. SEEK (buscar): para los archivos de acceso aleatorio, especifica el punto a partir del cual se tomaran los datos

(escribir o leer).

9. GET ATTRIBUTES: se leen los atributos de un archivo para que un proceso los utilice.

10. SET ATTRIBUTES: el usuario puede establecer algunos atributos o modificarlos después de la creación del archivo.

11. RENAME (renombrar): cambiar el nombre de un archivo existente.

Directorios

Directorio: son archivos que contienen a otros archivos o directorios. Son carpetas.

Jerarquía de directorios

Directorios de un solo nivel: un directorio (directorio raíz) contiene todos los

archivos. Las ventajas son la sencillez y la rapidez para buscar archivos. Este

sistema es problemático en sistemas multiusuario (ejemplo, dos usuarios crean un

archivo con el mismo nombre sobrescribiendo al anterior).

Directorios de dos niveles: un directorio raíz que contiene a su vez un

directorio para cada usuario, eliminando los conflictos presentes en el

sistema de directorios de un nivel. No satisface a los usuarios que tienen una

gran cantidad de archivos.

UTN FRC Resumen SOP – Rodrigo Carrión

3 / 9

Directorios jerárquicos: consiste en una jerarquía general, un árbol de directorios.

Posibilita crear un número arbitrario de subdirectorios ofreciendo a los usuarios una

herramienta potente para organizar sus archivos.

Nombres de ruta

Ruta: son mecanismos para especificar nombres de archivos en un árbol de directorios.

Ruta absoluta: consiste en el camino que hay que seguir para llegar desde el directorio raíz hasta el archivo.

Ruta relativa: consiste en el camino que hay que seguir desde el directorio de trabajo (directorio actual) hasta el

archivo.

Operaciones con directorios

Ejemplos de operaciones de UNIX:

1. CREATE (crear): crea un directorio vacío, excepto por punto y punto-punto que se crean automáticamente por el

sistema.

2. DELETE (borrar): elimina un directorio, siempre y cuando esté vacío (no se considera punto ni punto-punto).

3. OPENDIR (abrir): abre un directorio para poder leerlo luego.

4. CLOSEDIR (cerrar): cierra un directorio para desocupar espacio en las tablas internas.

5. READDIR (leer): devuelve la siguiente entrada en un directorio abierto. Siempre devuelve una entrada en formato

estándar, sin importar la estructura de directorio.

6. REANAME (renombrar): cambiar el nombre del directorio.

7. LINK (enlazar): permite que un archivo aparezca en más de un directorio.

8. UNLINK (desenlazar): se elimina una entrada de directorio. Si el archivo que se quiere eliminar aparece solo en un

directorio (caso normal), se elimina del sistema de archivos. Si está presente en varios directorios, solo se elimina

la ruta de acceso especificada, los demás permanecen.

Implementación de sistemas de archivos

Organización del sistema de archivos

Los sistemas de archivos se almacenan en discos. Los discos pueden dividirse en 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. Al final del MBR está la tabla de particiones, que contiene las direcciones inicial y final

de cada partición. Una partición estará marcada como activa. Cuando se enciende la computadora, el BIOS lee el MBR del

disco y lo ejecuta. Lo primero que hace el programa del 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 SO en esa partición.

La organización de una partición varía

según el sistema de archivos. El primer

elemento es el superbloque que contiene

todos los parámetros clave acerca del

sistema de archivos y se transfiere del disco

a la memoria cuando se arranca la

computadora. A continuación podría haber

información acerca de bloques libres, luego

podrían estar los nodos-i. Después podría

venir el directorio raíz, y por último el resto

del disco suele contener los demás

directorios y archivos.

UTN FRC Resumen SOP – Rodrigo Carrión

4 / 9

Implementación de archivos

Asignación continua: es el esquema de asignación más simple que consiste en almacenar cada archivo en una

serie contigua de bloques de disco. Usado en los CD y DVD.

Ventajas:

- Fácil implementación: para localizar los bloques de un archivo solo se necesitan dos números, la dirección

del primer bloque y el número de bloques del archivo.

- Buen desempeño en lectura: puede leerse todo el archivo del disco en una sola operación. Sólo necesita

un solo desplazamiento del brazo del disco (para el primer bloque).

Desventajas:

- Fragmentación del disco: cuando se elimina un archivo, sus bloques se liberan, dejando una serie de

bloques libres en el disco, resultado que el disco se componga de archivos y huecos.

- Cuando se va a crear un archivo nuevo se hace necesario conocer su tamaño final para recoger un hueco

del tamaño correcto en el cual colocarlo. Este diseño es molesto para el usuario que no sabe cuál va a ser

el tamaño del archivo.

Asignación por lista enlazada: consiste en mantener cada archivo como una lista enlazada de bloques de disco.

La primera palabra de cada bloque se usa como puntero al siguiente bloque, el resto del bloque es para datos.

Ventajas:

- Pueden usarse todos los bloques del disco. No se pierde espacio por fragmentación del disco.

- Sólo es necesario conocer la dirección del primer bloque.

Desventajas:

- Acceso aleatorio lento. Para llegar al bloque n, el SO tiene que comenzar por el principio y leer los n-1

bloques que lo preceden, uno por uno.

- La cantidad de datos almacenados en un bloque no es potencia de 2 porque el puntero ocupo unos cuantos

bytes. Influye en la eficiencia de programas que leen y escriben en bloques de tamaño de potencia de 2.

Asignación por lista enlazada utilizando una tabla en la memoria: se eliminan las desventajas de la asignación

por lista enlazada ya que se saca el apuntador de cada bloque de disco y se lo coloca en una tabla en la memoria

denominada “tabla de asignación de archivo” (FAT, file allocation table).

Ventajas:

- Todo el bloque se utiliza para datos.

- Acceso aleatorio mucho más fácil.

- La cadena está cargada en memoria, pudiéndose seguir sin tener que leer el disco.

- Se necesita la dirección del primer bloque para localizar todos los demás.

Desventajas:

- Toda la tabla debe estar en memoria todo el tiempo.

Nodos-i: asocia a cada archivo una estructura de datos llamada nodo-i (nodo índice) que contiene los atributos y

direcciones en disco de los bloques del archivo. Dado el nodo-i, es posible hallar todos los bloques del archivo. Es

usado en Linux.

Ventaja:

- El nodo-i sólo está en memoria cuando el archivo correspondiente está abierto.

UTN FRC Resumen SOP – Rodrigo Carrión

5 / 9

Desventaja:

- Cada nodo-i tiene espacio para un número fijo de dirección de disco, haciendo que se llene cuando el archivo

crece. Para solucionar esto se reserva la última dirección de disco no para un bloque de datos, sino para

dirección de un bloque que contenga más direcciones de bloques de disco. Para archivos más grandes, una

de las direcciones en el nodo – i es la dirección de un bloque en el disco llamado bloque simplemente

indirecto, el cual contiene direcciones en disco adicionales. Si con esto no es suficiente, otra dirección del

nodo – i, el bloque doblemente indirecto contiene la dirección de un bloque que tiene una lista de bloques

simplemente indirectos, donde cada uno de estos apunta a unos centenares de bloques de datos. Si aún

esto no basta, se puede utilizar un bloque triplemente indirecto.

Implementación de directorios

Para poder leer un archivo, es preciso abrirlo primero. Cuando se abre un archivo, el SO utiliza el nombre de ruta

proporcionado por el usuario para localizar la entrada de directorio. Ésta proporciona la información necesaria para hallar

los bloques de disco. Dependiendo del sistema, esta información puede ser la dirección de disco de todo el archivo (con

asignación contigua), el número del primer bloque (ambos esquemas de lista enlazada) o el número del nodo-i. En todos los

casos, la función principal del sistema de directorios es establecer una correspondencia entre el nombre de archivo ASCII y

la información necesaria para localizar datos. Todo sistema de archivos mantiene atributos de los archivos.

Una posibilidad obvia es guardarlos directamente en la entrada de directorio. Muchos sistemas hacen precisamente esto.

En un diseño sencillo, un directorio es una lista de entradas de tamaño fijo, una por archivo, que contiene un nombre de

archivo (de longitud fija), una estructura con los atributos del archivo y una o más direcciones de disco que indiquen donde

están los bloques de disco.

En los sistemas que usan Nodos-i, otra posibilidad es almacenar los atributos en los nodos-i, en lugar de en las entradas de

directorio (la entrada de directorio es más corta: solo guarda nombre y nodo-i). Hasta ahora hemos supuesto que los archivos

tienen nombre cortos de longitud fija. Sin embargo, casi todos los SO actuales reconocen nombres de archivos más largos,

de longitud de variable. Una alternativa para esto, es abandonar la idea de que todas las entradas de directorio tienen el

mismo tamaño. Con este método, cada entrada contiene una porción fija, que por lo regular principia con la longitud de la

entrada y seguida de los atributos. Este encabezado de longitud fija va seguido del nombre de archivo en sí, que puede

tener cualquier longitud. Una desventaja de este método es que cuando se elimina un archivo queda en el directorio un

hueco de tamaño variable (mismo caso de la asignación continua), aunque es factible compactar el directorio porque está

por completo en memoria. Otro problema es que una sola entrada de directorio podría cruzar fronteras de página, por lo que

podría presentarse un fallo de página durante la lectura de un nombre de archivo.

Otra forma de manejar los nombres variables es hacer que todas las entradas de directorio sean de longitud fija y mantener

los nombres de archivo juntos en un heap al final del directorio. Tiene la ventaja de que si se elimina una entrada siempre

cabrá ahí el siguiente archivo creado.

Una forma de acelerar la búsqueda es utilizar una tabla de hash en cada directorio. Se examina la entrada de tabla

correspondiente al código de hash calculado a partir del nombre del archivo especificado. Si está desocupada, se coloca en

ella un apuntador a la entrada del archivo. Si ya está en uso esa ranura, se construye una lista enlazada, encabezada por

esa entrada de tabla, que encadena todas las entradas que tienen el mismo valor de hash. Aunque la búsqueda es más

rápida, la administración de este método es más compleja.

Directorios en CP/M: sólo hay un directorio, lo único que el sistema de archivos tiene que hacer para consultar un

nombre de archivo es buscarlo en el directorio. Una vez que encuentra la entrada, también tiene de inmediato los

números de bloque en el disco, ya que están almacenados ahí mismo en la entrada, al igual que todos los atributos.

UTN FRC Resumen SOP – Rodrigo Carrión

6 / 9

Directorios en MS-DOS: los directorios tienen tamaño variable, sus entradas son de 32 bytes de longitud fija y

contiene el nombre de archivo, los atributos y el número del primer bloque de disco, que se usa como índice de una

tabla contenida en memoria (asignación por lista enlazada con una tabla en memoria). Siguiendo la cadena, se

pueden encontrar todos los bloques.

Directorios en Windows 98: nombres de archivo más largos y se introdujo FAT-32. Se adicionan cinco campos

nuevos donde estaban los 10 bytes desocupados. El campo NT sirve para asegurar la compatibilidad con Windows

NT. Los archivos poseían dos nombres, uno largo para Windows NT y un nombre de 8 + 3 por compatibilidad. Se

puede acceder desde los dos nombres.

Directorios en UNIX: cada entrada de directorio contiene sólo un nombre de archivo y su número de nodo-i. Toda

la información acerca del tipo, tamaño, tiempos, propietario y bloques de disco está contenida en el nodo-i. Cuando

se abre un archivo, el sistema de archivos debe tomar el nombre que se le proporciona y localizar sus bloques de

disco. Lo primero que hace el sistema de archivos es localizar directorio raíz. En UNIX su nodo-i está situado en un

lugar fijo del disco. La localización de un nodo-i una vez que se tiene su número es directa, ya que cada uno tiene

una posición fija en el disco.

UTN FRC Resumen SOP – Rodrigo Carrión

7 / 9

Archivos compartidos

Un archivo compartido es aquel que aparece al mismo tiempo en diferentes directorios que pertenecen a usuarios distintos.

Si un archivo de un usuario A aparece en algún directorio de un usuario B, el archivo compartido se llama enlace (link). El

sistema de archivos deja de ser un árbol, es una gráfica acíclica dirigida.

Hay dos formas de enlazar archivos:

Enlace duro: los directorios que comparten un archivo, no poseen los bloques de disco, sino que apuntan al mismo

nodo-i que corresponde al archivo. Este es el esquema de UNIX.

Desventaja: si el propietario elimina el archivo y se limpia el nodo-i, algún directorio con un enlace a ese archivo,

apuntara a un nodo-i no válido. Si el nodo-i se reasignara a otro archivo, el enlace apuntará a un archivo incorrecto.

Una solución es eliminar el archivo original, pero mantener el nodo-i para el enlace, manteniendo la cuenta en 1.

Enlace simbólico (accesos directos): el enlace se genera creando un archivo de tipo LINK en el directorio que

quiere crear el enlace. Este archivo sólo contiene el nombre de ruta del archivo con el cual está enlazado, que es

utilizado para buscar el archivo original cuando se lo quiere leer.

Desventajas:

- Cuando el dueño elimina el archivo original, este se destruye, quedando los archivos de enlace obsoletos,

ya que el sistema no lo va a poder localizar. Pasa algo similar cuando se mueve el archivo.

- Necesitan un procesamiento adicional: leer la ruta, analizarla, seguirla, componente por componente hasta

llegar al nodo-i. Puede requerir muchos accesos a disco.

- Se necesita un nodo-i adicional por cada enlace, y si el nombre de ruta es largo, se necesita otro bloque

adicional para almacenarla.

Ventaja: pueden servir para enlazar archivos por red, especificando la dirección de red de la máquina en la que está

el archivo.

Administración del espacio en disco

Hay dos estrategias generales para almacenar un archivo: asignar n bytes consecutivos de espacio en disco, o dividir el

archivo en varios bloques contiguos o no. El almacenamiento de un archivo como secuencia contigua de bytes tiene el

problema de que, si el archivo crece, probablemente tendrá que pasarse a otro lugar del disco. Por esta razón, casi todos

los sistemas de archivos dividen los archivos en bloques de tamaño fijo que no necesitan estar adyacentes.

Tamaño de bloque

Una vez que se ha decidido almacenar archivos en bloques de tamaño fijo, se debe decidir qué tamaño deben tener los

bloques. Dada la forma como están organizados los discos, el sector, la pista y el cilindro son candidatos para utilizarse

como unidad de asignación. Tener una unidad de asignación grande, como un cilindro, implica que cada archivo, incluso un

archivo de un byte, ocupará todo un cilindro, desperdiciando espacio. Por otro lado, el empleo de una unidad de asignación

pequeña implica que cada archivo consistirá en muchos bloques. La lectura de cada bloque normalmente requiere una

búsqueda y un retardo rotacional, así que la lectura de un archivo que consta de muchos bloques pequeños será lenta. El

tiempo en milisegundos requerido para leer un bloque de k bytes es la suma de los tiempos de búsqueda, retardo rotacional

y transferencia.

En resumen, un tamaño de bloque grande tiene mejor tasa de transferencia pero desperdicia espacio; un tamaño de bloque

pequeño aprovecha el espacio del almacenamiento, pero disminuye el desempeño.

Control de bloques libres

Una vez que se ha escogido el tamaño de bloque, se debe decidir cómo administrar a los bloques libres. Se usan dos

técnicas para este control:

Lista enlazada de bloques de disco: en la que cada bloque guarda tantos números de bloques de disco como

quepan en él. Con bloques de 1 KB y números de bloque de 32 bits, cada bloque de la lista libre contendrá los

números de 255 bloques libres (se necesita una ranura para el puntero al siguiente bloque).

UTN FRC Resumen SOP – Rodrigo Carrión

8 / 9

Sólo es preciso mantener un bloque de punteros en la memoria principal. Cuando se crea un archivo tomas los

bloques que necesita del bloque de punteros. Cuando el bloque se agota, se lee del disco un nuevo bloque de

punteros. Cuando se borra un archivo, sus bloques se liberan y se añaden al bloque de punteros en memoria. Si

este bloque se llena, se escribe en el disco. Esto puede generar una cantidad innecesaria de operaciones de E/S

de disco (sobre todo los archivos temporales). Para evitar esto, se divide el bloque de punteros lleno.

Mapa de bits: un disco con n bloques requiere un mapa de bits con n bits. Los bloques libres se representan con

unos en el mapa y los bloques asignados con ceros (o viceversa).

El mapa de bits requiere menos espacio, ya que utiliza 1 bit por bloque y no 32 bits como la lista enlazada.

Sólo si el disco está casi lleno el método de la lista enlazada requerirá menos bloques que el mapa de bits. Si hay suficiente

memoria principal para contener el mapa de bits, este método es preferible. En cambio, si sólo se puede dedicar un bloque

de memoria para seguir la pista a los bloques libres, y el disco está casi lleno, la lista enlazada puede ser mejor.

Administración de cuotas de disco

Los SO multiusuario tienen un mecanismo para evitar que las personas acaparen demasiado espacio de disco. El

administrador del sistema asigna a cada usuario una porción máxima (límites) de archivos y bloques y el SO cuida que los

usuarios no excedan su cuota.

Cuando se abre un archivo, sus atributos y direcciones de disco se colocan en una “tabla de archivos abiertos” en la memoria

principal. Cada archivo tiene una entrada que indica quien es el dueño del archivo, por lo que cualquier aumento en el

tamaño del archivo se carga automáticamente a la cuota del dueño. Una segunda tabla contiene los registros de cuota de

los usuarios que tiene algún archivo abierto en ese momento, para poder localizar los distintos límites. Cada vez que se

añade un bloque a un archivo, se incrementa el total de bloques cargados al usuario y se verifica este valor contra los límites

estricto y flexible. Se puede exceder el límite flexible, pero no el estricto. Cuando un usuario desea iniciar su sesión, el SO

verifica el archivo de cuotas para ver si este se ha excedido su límite flexible (ya sea en número de archivos o bloques). Si

se ha excedido, se le advierte (mediante un mensaje) y el contador de advertencias se reduce en uno. Si este llega a cero,

no se le permite iniciar sesión nuevamente.

NTFS (Windows 2000)

NTFS es un sistema de archivos grande y complejo. Se diseñó desde cero, en vez de intentar mejorar el antiguo sistema de

archivos de MS-DOS. Se usa desde Windows 2000 en adelante.

Cada volumen NTFS (por ej., partición de disco) contiene archivos, directorios, mapa de bits u otras estructuras de datos.

Cada volumen está organizado como una sucesión lineal de bloques (clústeres) de tamaño fijo que pueden variar entre 512

bytes y 64 KB, dependiendo del tamaño del volumen. El término medio entre bloques grandes y pequeños es de 4 KB. Cada

volumen contiene una estructura llamada tabla maestra de archivos (MFT: Master File Table) que es una sucesión lineal

de registros de tamaño fijo (1KB). Cada registro de MFT describe un archivo o directorio, o sea, contiene atributos y lista de

direcciones de disco donde están sus bloques (todas las direcciones, no solo la primera). Si el archivo es muy grande se

usan dos o más registros MFT, donde el primero (registro base) apunta a los demás. Un mapa de bits controla las entradas

libres de la MFT. La MFT es en sí un archivo, por lo que puede colocarse en cualquier lugar del volumen. Cada registro es

una secuencia de pares (atributo, valor). Cada atributo principia con un encabezado que indica de qué atributo se trata y

qué longitud tiene, ya que algunos son variables, como el nombre del archivo y los datos. Si el nombre es corto se coloca

en la MFT, sino se coloca en otro lugar del disco y un puntero al mismo en la MFT. Los primeros 16 registros de la MFT

están reservados para metadatos de NTFS. El nombre de cada uno de estos archivos comienza con un signo dólar, lo que

indica que es un archivo de metadatos.

Reg. Descripción Reg. Descripción

0 Archivo MFT mismo 8 Lista de bloques defectuosos

1 Copia espejo 9 Información de seguridad

2 Archivo de registro para recuperación 10 Tabla de conversión de mayúsculas a minúsculas

3 Información del volumen 11 Extensiones

UTN FRC Resumen SOP – Rodrigo Carrión

9 / 9

4 Definición de atributos 12 Reservado para uso futuro

5 Directorio raíz 13 Reservado para uso futuro

6 Mapa de bits de bloques usados 14 Reservado para uso futuro

7 Cargador de autoarranque 15 Reservado para uso futuro

- Registro 1: copia espejo por si uno de los primeros bloques se arruina alguna vez.

- Registro 2: acá se asienta la información antes de realizar un cambio estructural, como agregar o eliminar un

- directorio, en caso de que falle.

- Registro 8: contiene una lista de bloques defectuosos para asegurarse de que nunca formen parte de un

- archivo.

- Registro 11: archivos diversos, como cuotas de disco, identificadores de objetos, ptos. de reanálisis, etc.

Cada registro de MFT consiste en un encabezado de registro seguido de una secuencia de pares (encabezado de atributo,

valor). El encabezado de registro contiene varios datos referidos al registro (número de validez, contador de referencias al

archivo, número real de bytes ocupados por el archivo, etc.). Después del encabezado de registro viene el encabezado del

primer atributo seguido del valor del mismo, luego el encabezado del segundo seguido del valor del mismo, y así

sucesivamente. NTFS define 13 atributos que pueden estar en un registro MFT. Si un atributo es demasiado largo y no cabe

en el registro MFT, se lo coloca en otra parte del disco. A este tipo de atributo se le llama atributo no residente.

La información estándar contiene bits indicadores, marcas de hora, dueño del archivo, información de seguridad. El nombre

de archivo está en Unicode y es de longitud variable. El descriptor de seguridad es obsoleto. Esta información se coloca en

un archivo que es compartido por varios otros. La lista de atributos se usa en caso de que los atributos no entren en el

registro actual. El identificador de objeto da un nombre único al archivo (para mantenimiento interno). El punto de reanálisis

sirve para montajes y enlaces simbólicos. El nombre del volumen indica el nombre de este volumen. Información del volumen

indica la información de este volumen. La raíz índice se usa para directorios. La asignación de índice y el mapa de bits se

usan para directorios muy grandes. El flujo utilitario de registro se usa en el sistema de archivos cifrador ($LogFile).

Sin duda el atributo datos es el más importante. Después del encabezado viene una lista de direcciones de disco que indica

los bloques contenidos en el archivo, o en el caso de archivos, unos cuantos cientos de bytes. Para controlar los bloques de

disco, siempre que sea posible se asignan series de bloques consecutivos. Por ejemplo si el primer bloque lógico se coloca

en el bloque 20 del disco, el sistema tratara de colocar el segundo bloque lógico en el bloque 21 del disco, y así

sucesivamente.

Los bloques de un archivo se describen mediante una secuencia de registros, los cuales describen una serie de bloques

lógicamente contiguos. En un archivo sin huecos habrá uno solo de estos registros. Cada registro se encabeza con el

desplazamiento del primer bloque dentro del archivo. Cada encabezado de registro va seguido de uno o más pares (dirección

de disco, longitud). La dirección en disco es el desplazamiento del bloque de disco a partir del principio de su partición y la

longitud es el número de bloques que hay en la serie. Se pueden tener tantos pares como sea necesario.

En el caso de un archivo de n bloques, el número de series puede variar de 1 a n incluyendo a este último. No existe un

límite superior para el tamaño de los archivos que pueden representase de esta manera. Si el archivo es demasiado grande

o está demasiado fragmentado y no cabe en un registro MFT, se usan dos o más registros MFT. Si la cantidad de registros

MFT para un archivo es inmensamente grande de manera que todos sus índices no caben en el registro base, la lista de

registros MFT de extensión se hace no residente (se almacena en disco y no en el registro). Así podrá crecer hasta el tamaño

necesario.

UTN FRC Resumen SOP – Rodrigo Carrión

1 / 16

Unidad Nº3 – Administración de procesos Proceso: es un programa ejecutándose, el programa está en la memoria principal al ejecutarlo, sino está en el disco. Es

una unidad de actividad que se caracteriza por la ejecución de una secuencia de instrucciones, un estado actual, y un

conjunto de recursos del sistema asociados.

Estados

La principal responsabilidad del SO es controlar la ejecución de los procesos, para lo cual hay que describir el

comportamiento que se querrá que tengan los procesos.

Modelo de dos estados

Es el modelo más sencillo, teniendo en cuenta que el proceso puede estar ejecutándose en el procesador o no; un proceso

puede estar en dos estados: en Ejecución o No Ejecución. Aquellos procesos que no están en ejecución tienen que

guardarse en algún tipo de cola, para que esperen su turno de ejecución.

Creación de procesos y terminación de procesos

Cuando se añade un proceso a los que ya está administrando el SO, hay que construir las estructuras de datos que se

utilizan para esta administración y asignar el espacio de direcciones en la memoria principal para el proceso. Estas acciones

constituyen la creación de un proceso.

Cuatro sucesos comunes conducen a la creación de un proceso:

1. Un proceso se crea como respuesta a una emisión de trabajo (nuevo trabajo por lotes).

2. Un proceso se crea cuando un nuevo usuario intenta conectarse (en entorno interactivo).

3. Un proceso se crea como parte de una aplicación (por el SO).

4. Un proceso se crea tras la solicitud explícita de otro (por otro proceso, generación de procesos. El proceso

generados se lo denomina proceso padre, y al generado proceso hijo).

Las causas típicas para la terminación de los procesos son:

1. En un trabajo por lotes se incluye la instrucción de detención o se hace una llamada al SO.

2. En una aplicación interactiva, es la acción del usuario la que indica cuando termina el proceso.

3. Un proceso puede ser eliminado por un proceso padre o cuando éste termine.

4. También se puede terminar por una serie de fallos o errores.

Modelo de cinco estados

El modelo de dos estados no es adecuado, ya que algunos procesos en el estado de No Ejecución están listos para

ejecutarse, mientras que otros están bloqueados esperando a que termina una operación de E/S.

La forma más común de solventar esto es dividir el estado de No Ejecución en dos estados: Listo y Bloqueado. Luego se

incorporan dos estados más por una cuestión de utilidad, quedando cinco estados:

Ejecución: proceso actualmente en ejecución.

Listo: proceso preparado listo para ejecutarse.

Bloqueado: procesos que no se va a ejecutar hasta que se produzca cierto suceso (como una operación de E/S).

Nuevo: proceso que se acaba de crear, pero que no ha sido admitido por el SO en el grupo de procesos ejecutables.

Normalmente permanece almacenado en disco.

Terminado: el proceso ha sido excluido del grupo de ejecutables, porque se detuvo o porque fue abandonado por

alguna razón. El SO conserva temporalmente las tablas y otra información asociado al proceso terminado para que

le dé tiempo a otros programas para extraer información necesaria de él, luego se borran del sistema.

UTN FRC Resumen SOP – Rodrigo Carrión

2 / 16

Ahora hay dos colas, una de Listos y una de Bloqueados. A medida que se admiten procesos en el sistema, se sitúan en la

cola de Listos. Cuando llega la hora de que el SO escoja otro proceso para ejecutar, selecciona uno de la cola de Listos

(cola FIFO). Cuando se produce un suceso, todos los procesos de la cola Bloqueados que están esperando a dicho suceso

se pasan a la cola de Listos. El SO debe recorrer toda la cola de Bloqueados, buscando aquellos procesos que esperan el

suceso, pudiendo haber cientos o incluso miles de procesos en dicha cola. Sería más eficiente tener una cola para cada

suceso.

Si la expedición de procesos está dictada por un esquema de prioridades, entonces es conveniente tener un cierto número

de colas de Listos, una para cada nivel de prioridad. El SO podrá determinar fácilmente cuál es el proceso de prioridad más

alta que lleva más tiempo esperando.

Transiciones

Nulo → Nuevo: se crea un nuevo proceso para ejecutar un programa.

Nuevo → Listo: el SO está preparado para aceptar un proceso más.

Listo → Ejecución: momento de seleccionar un nuevo proceso para ejecutar, el SO elige uno de los procesos del

estado Listo.

Ejecución → Terminado: el proceso en ejecución es finalizado por el SO.

Ejecución → Listo: la razón más común es que el proceso en ejecución ha alcanzado el tiempo máximo permitido

de ejecución ininterrumpida. Hay otras causas, como los niveles de prioridad o que un proceso ceda voluntariamente

el control del procesador.

Ejecución → Bloqueado: un proceso solicita por algo por lo que debe esperar.

Bloqueado → Listo: se produce el suceso que el proceso estaba esperando.

Listo → Terminado: por ejemplo, un padre termina con un proceso hijo, o el mismo padre termina, terminando con

él todos sus hijos.

Bloqueado → Terminado: mismo caso de Listo → Terminado.

Procesos suspendidos

Hay una buena justificación para agregar más estados al modelo. Las actividades de E/S son mucho más lentas que las de

cálculo y, por lo tanto, el procesador en un sistema de monoprogramación está la mayor parte del tiempo desocupado. El

procesador es tan rápido comparado con la E/S que suele ser habitual que todos los procesos de memoria estén esperando

por E/S. Incluso con multiprogramación, el procesador podría estar desocupado la mayor parte del tiempo.

Una solución es el intercambio, o sea, mover una parte del proceso o todo el proceso de la memoria principal al disco.

Cuando ninguno de los procesos en la memoria principal está en estado Listo, el SO pasa al disco uno de los procesos en

Bloqueado y lo lleva a una cola de Suspendidos. El SO trae entonces otro proceso de la cola de Suspendidos o acepta la

solicitud de creación de un nuevo proceso. La ejecución continúa con el proceso recién llegado.

No obstante, el intercambio es una operación de E/S, pero como la E/S con el disco es la E/S más rápida de un sistema

(comparado con una impresora o una cinta) suele mejorar el rendimiento.

UTN FRC Resumen SOP – Rodrigo Carrión

3 / 16

Modelo de siete estados

Al emplear el intercambio, se debe añadir un nuevo estado al modelo del comportamiento de los procesos, el estado

Suspendido. A su vez, un proceso en estado Suspendido puede estar Bloqueado o Listo, por eso se necesitan cuatro

estados:

Listo: proceso en memoria principal y listo para la ejecución.

Bloqueado: proceso en memoria principal, esperando un suceso.

Bloqueado y suspendido: proceso en memoria secundaria esperando un suceso.

Listo y suspendido: proceso en memoria secundaria disponible para la ejecución en cuanto se cargue en la

memoria principal.

Transiciones

Bloqueado → Bloqueado y suspendido: si no hay procesos Listos, entonces al menos un proceso Bloqueado se

expulsa para dar cabida a otro proceso que no esté Bloqueado.

Bloqueado y suspendido → Listo y suspendido: se produce un suceso que estaba esperando en memoria

secundaria.

Listo y suspendido → Listo: cuando no hay procesos Listos en memoria principal, el SO tendrá que traer uno para

continuar la ejecución.

Listo → Listo y suspendido: puede ser necesario suspender un proceso Listo si ésta es la única forma de liberar

espacio en memoria principal. El SO puede suspender un proceso Listo de más baja prioridad en lugar de uno

Bloqueado que sea de prioridad más alta, si cree que el proceso Bloqueado pronto estará Listo.

Nuevo → Listo y suspendido, Nuevo → Listo: cuando se crea un nuevo proceso, se lo puede añadir a la cola de

Listos o a la de Listos y suspendidos. En el segundo caso puede deberse a poco espacio en memoria principal.

Bloqueado y suspendido → Bloqueado: un proceso termina y se libera memoria; hay un proceso en Bloqueados

y suspendidos que tiene una prioridad mayor a la de cualquier proceso de Listos y suspendidos, así que el SO

supone que ocurrirá el suceso que espera pronto.

Ejecución → Listo y suspendido: hay un proceso en Bloqueados y suspendidos de prioridad alta que se acaba

de desbloquear, para ello expulsa al proceso en ejecución y lo suspende.

Varios → Terminado: un proceso en cualquier estado puede pasar al estado Terminado.

Descripción de procesos

Estructuras de control del sistema operativo

Si el SO va a administrar los procesos y los recursos, entonces tiene que disponer de información sobre el estado actual de

cada proceso y de cada recurso; para ello, el SO construye y mantiene tablas de información sobre cada entidad que está

administrando. Los SO organizan la información principalmente en cuatro categorías:

Tablas de memoria: se utiliza para seguir la pista de la memoria principal (real) y secundaria (virtual). Parte de la

memoria principal está reservada para uso del SO, el resto es para los procesos. Incluyen información como

asignación de memoria principal y secundaria a los procesos, información de protección de regiones compartidas

(por los procesos) de memoria.

Tablas de E/S: utilizadas por los SO para administrar los dispositivos y canales de E/S, los cuales pueden estar

disponibles o asignados a un proceso en particular.

Tablas de archivos: ofrecen información sobre la existencia de los archivos, su posición en la memoria secundaria,

su estado actual y otros atributos.

Tablas de procesos: sirve para administrar los procesos. Se genera un número para cada proceso, para poder

identificarlo. Estas tablas están enlazadas o relacionadas, disponen de referencias cruzadas. La memoria, la E/S y

los archivos son administrados en nombre de los procesos, por lo que debe haber alguna referencia directa o

indirecta a estos recursos en las tablas de procesos.

Estructuras de control de procesos

Lo que un SO debe saber para administrar y controlar los procesos es: dónde está el proceso y conocer los atributos de

éste.

UTN FRC Resumen SOP – Rodrigo Carrión

4 / 16

Bloque de control de proceso e Imagen de proceso

Un proceso constará, al menos, de la memoria suficiente para albergar los programas y los datos del proceso. Además de

esto, en la ejecución de un programa entra en juego normalmente una pila, que se utiliza para llevar la cuenta de las llamadas

a procedimientos y de los parámetros que se pasan entre los procedimientos. Por último, asociado a cada proceso hay una

serie de atributos utilizados por el SO para su control. Estos atributos se conocen como bloque de control del proceso

(BCP). Esta colección de programas, datos, pila y atributos se conoce como imagen del proceso.

En el caso más simple, la imagen del proceso se guarda como un bloque contiguo, o continuo de memoria. Este bloque se

mantiene en memoria secundaria. Para que el SO pueda administrar el proceso, al menos una pequeña parte de su imagen,

que contiene la información a usar por el SO, debe mantenerse en memoria principal. Para ejecutar el proceso, la imagen

completa debe cargarse a la memoria principal, o al menos a la memoria virtual. Por lo tanto, las tablas mantenidas por el

SO, deben mostrar la ubicación de cada segmento o página (dependiendo el esquema que se use) de cada imagen de

proceso.

Los SO modernos utilizan un esquema de gestión de memoria en donde la imagen de un proceso consiste en un conjunto

de bloques que no tienen por qué estar almacenados consecutivamente. Esto permite al SO tener que traer solo una parte

de un proceso en particular. De este modo, en un momento dado, una parte de la imagen de un proceso puede estar en la

memoria principal y el resto en la memoria secundaria. Las tablas de procesos mantenidas por el SO, deben mostrar la

ubicación de cada segmento o página de cada imagen de proceso.

Atributos de los procesos

La información de los BCP se puede agrupar en tres categorías:

Identificación del proceso: cada proceso tiene un identificador (PID).

Información del estado del procesador: formada por el contenido de los registros del procesador.

Información de control de proceso: información adicional para que el SO controle y coordine los procesos activos.

La importancia del BCP

El BCP es la estructura de datos más importante de un SO. Cada BCP contiene toda la información de un proceso necesaria

para el SO. Puede decirse que el conjunto de los BCP define el estado del SO.

Control de procesos

Modos de ejecución

Modo de usuario: es el modo menos privilegiado y consiste en los programas de usuario.

Modo del núcleo, modo del sistema, modo de control: es el modo más privilegiado. Aquí el software tiene control

completo sobre el procesador y de todas sus instrucciones, registros y memoria.

La razón de usar dos modos, es porque es necesario proteger al SO y a las tablas importantes del mismo. Existe un bit en

la palabra del estado del programa (PSW) que indica al procesador el modo de ejecución. Para cambiar el modo de ejecución

se cambia el bit.

Funciones del núcleo de un SO

Gestión de procesos: creación y terminación, planificación y expedición de procesos, cambio de procesos, gestión

de BCP, sincronización de procesos, y soporte para la comunicación entre ellos.

Gestión de memoria: asignación de espacios de direcciones a los procesos, intercambio, gestión de páginas, etc.

Gestión de E/S: gestión de buffers, asignación de canales de E/S y dispositivos a los procesos.

Funciones de soporte: tratamiento de interrupciones, contabilidad, supervisión.

Creación de procesos

La creación de un proceso incluye los siguientes pasos:

1. Asignar un único identificador al nuevo proceso: se añade una nueva entrada a la tabla principal de procesos.

UTN FRC Resumen SOP – Rodrigo Carrión

5 / 16

2. Asignar espacio para el proceso: incluye todos los elementos de la imagen del proceso. Se debe asignar espacio

para el BCP.

3. Iniciar el BCP: la información del estado del procesador se inicia generalmente con todas las entradas en cero

excepto por el contador de programa y los punteros de pila del programa. La información de control del procesador

se inicia a partir de los valores estándares por omisión y los atributos que se han solicitado para el proceso.

4. Establecer los enlaces apropiados: por ejemplo, poner el nuevo proceso en la cola de Listos o Listos y

suspendidos.

5. Crear o ampliar otras estructuras de datos: por ejemplo, algún tipo de archivo de contabilidad para futuros

informes de rendimiento.

Cambio de proceso

Un cambio de proceso puede producirse en cualquier momento en que el SO haya tomado el control a partir del proceso

que está actualmente ejecutándose. Los posibles sucesos que pueden dar el control al SO son:

Interrupción: originada por un suceso externo e independiente del proceso en ejecución. El control se transfiere a

un gestor de interrupciones quien se encarga del tipo de interrupción ocurrida:

o Interrupción de reloj: el SO determina si el proceso ha consumido el tiempo máximo permitido. Si esto pasa,

el proceso que se está ejecutando pasa a Listo y se debe expedir otro proceso.

o Interrupción de E/S: el SO determina que acción de E/S se ha producido. Si es un suceso que muchos

procesos estaban esperando, se los pasa a Listo, luego el SO debe decidir si reanudar la ejecución o

ejecutar uno de los procesos Listos de mayor prioridad.

o Fallo de memoria: referencias a memoria virtual de una palabra que no está en memoria principal. El proceso

que cometió el fallo pasa a estar Bloqueado hasta que se cargue el bloque en memoria, donde cambia a

Listo.

Cepo: condición de error o excepción generada dentro del proceso en ejecución. Si es un error fatal, el proceso

pasa a Terminado. Si no es fatal, depende del error y del SO, puede intentar una recuperación o informar al usuario.

Llamada al supervisor: el uso de una llamada al sistema hace que el proceso de usuario pase al estado Bloqueado

y el control pase al SO.

Procesos e hilos

Hilo: conjunto de instrucciones que pertenecen a un proceso. Es la unidad de procesamiento más pequeña que puede ser

planificada por un SO.

Proceso: conjunto de uno o más hilos y los recursos del sistema asociados (memoria, datos, archivos abiertos y

dispositivos). Es un programa en ejecución, una tarea, controlado y ejecutado por el procesador.

Entornos monohilo y multihilo

Entorno monohilo: un solo hilo de ejecución por

proceso. No existe el concepto de hilo. MS-DOS

soporta un solo proceso y un solo hilo. UNIX soporta

múltiples procesos con un hilo cada uno.

Entorno multihilo: varios hilos de ejecución dentro

de un proceso. En un entorno multihilo continúa

existiendo un solo BCP y un espacio de dirección de

usuario asociado al proceso, pero ahora hay pilas

separadas por cada hilo, así como diferentes BCP

para cada hilo. Todos los hilos de un proceso

comparten el estado y los recursos del proceso y

tienen el mismo acceso a los datos.

Elementos de un proceso

Un espacio de direcciones virtuales que contiene la imagen del proceso.

Acceso protegido a los procesadores, otros procesos, archivos y recursos de E/S.

UTN FRC Resumen SOP – Rodrigo Carrión

6 / 16

Elementos de los hilos de un proceso

El estado de ejecución del hilo (Ejecución, Listo, etc.).

El contexto del procesador (contador de programa independiente).

Una pila de ejecución.

Almacenamiento estático para las variables locales.

Acceso a memoria y a los recursos del proceso, compartidos con todos los otros del mismo proceso.

Modelos de proceso monohilo y multihilo

En un modelo de proceso monohilo, la representación de un

proceso incluye su BCP y un espacio de direcciones de usuario, así

como las pilas de usuario y un núcleo para gestionar la secuencia

de llamadas/retornos durante la ejecución del proceso.

En un entorno multihilo, continua existiendo un solo BCP y un

espacio de direcciones de usuario asociados al proceso, pero ahora

hay pilas separadas, así como distintos bloques de control para

cada hilo, que contienen los valores de los registros, prioridad y otra

información.

Así pues, todos los hilos de un proceso comparten el estado y los recursos del proceso, residen en el mismo espacio de

direcciones y tienen acceso a los mismos datos.

Ventajas de la implementación de hilos

Los beneficios claves están relacionados con el rendimiento.

Se tarda mucho menos tiempo en crear un nuevo hilo en un proceso existente que crear un nuevo proceso.

Se tarda mucho menos tiempo en terminar un hilo que un proceso.

Se tarda mucho menos tiempo en cambiar entre dos hilos de un mismo proceso.

Aumenta la eficiencia de la comunicación entre programas en ejecución. Los hilos de un mismo proceso comparten

memoria y archivos, pueden comunicarse entre sí sin invocar al núcleo.

Es más eficiente relacionar un conjunto de hilos que un conjunto de procesos.

Ejemplo: servidor de archivos, se crea un nuevo hilo por cada solicitud.

Útiles en monoprocesadores para simplificar programas que llevan a cabo diferentes funciones.

Estados de un hilo

Los principales estados de un hilo son: Ejecución, Listo y Bloqueado. No hay estado de Suspensión ya que esos estados

pertenecen al concepto de procesos. Hay cuatro operaciones básicas relacionadas con el cambio de estado de hilos.

Creación: cuando se crea un nuevo proceso, se crea un hilo para ese proceso. Luego, un hilo de un proceso puede

crear otros hilos dentro del mismo proceso.

Bloqueo: un hilo espera por un suceso.

Desbloqueo: se produce el suceso por el que un hilo se bloqueó.

Terminación: cuando un hilo finaliza, se liberan su contexto y sus pilas.

Implementación de hilos

Hilos a nivel de usuario (ULT, User Level Thread): todo el trabajo de gestión de hilos lo realiza la aplicación y el

núcleo no es consciente de la existencia de hilos. Es posible programar cualquier aplicación como multihilo mediante

una biblioteca de hilos, la cual contiene el código para: crear y destruir hilos, intercambiar mensajes y datos entre

hilos, planificar la ejecución de hilos y salvar y restaurar el contexto de los hilos.

Todas las operaciones se llevan a cabo en el espacio de usuario y dentro de un mismo proceso.

UTN FRC Resumen SOP – Rodrigo Carrión

7 / 16

Ventajas:

- El intercambio de hilos no necesita los privilegios del modo núcleo. Se evita la sobrecarga de dos cambios de

modo (de usuario a núcleo, y de núcleo a usuario).

- Se puede realizar una planificación específica para una aplicación si afectar a la planificación del SO.

- Se pueden ejecutar en cualquier SO.

Desventajas:

- Cuando se ejecuta una llamada al SO, se bloquea el hilo en ejecución y todos los hilos del proceso.

- No aprovechan las ventajas de los multiprocesadores. El núcleo asigna un proceso a un solo procesador cada

vez, teniéndose que ejecutar un hilo de cada proceso en cada instante.

Hilos a nivel de núcleo (KLT, Kernel Level Thread): todo el trabajo de gestión de hilos lo realiza el núcleo.

Ejemplos: Windows 2000, Linux y OS/2.

El núcleo realiza la planificación en función de los hilos.

Ventajas:

- El núcleo puede planificar simultáneamente múltiples hilos del mismo proceso en múltiples procesadores.

- Si se bloquea uno de los hilos de un proceso, el núcleo puede planificar otro hilo del mismo proceso.

Desventaja: el paso del control de un hilo a otro dentro del mismo proceso necesita un cambio de modo a modo de

núcleo.

Combinación: este enfoque puede combinar las ventajas de ULT y KLT. Ejemplo: Solaris.

Multiproceso simétrico (SMP)

SMP: ofrece paralelismo mediante la duplicación de procesadores.

Arquitecturas SMP

Para la arquitectura de SMP hay cuatro categorías:

Flujo de instrucción simple/dato simple (SISD): un único procesador ejecuta un único flujo de instrucciones con

datos en una única memoria.

Flujo de instrucción simple/datos múltiples (SIMD): una única instrucción que se ejecute sobre un conjunto de

datos diferentes por medio de distintos procesadores.

Flujo de instrucciones múltiples/datos simples (MISD): se transmite una secuencia de datos a un conjunto de

procesadores, donde cada uno ejecuta una instrucción de la secuencia. No se ha implementado nunca.

UTN FRC Resumen SOP – Rodrigo Carrión

8 / 16

Flujo de instrucciones múltiples/datos múltiples (MIMD): un conjunto de procesadores ejecuta simultáneamente

varias secuencias de instrucciones sobre distintos conjuntos de datos.

Los MIMD se clasifican en:

Agrupación (multicomputador): cada procesador tiene

una memoria dedicada, cada elemento del proceso es un

autocomputador. Se comunican a través de alguna red o

líneas dedicadas.

Multiprocesadores con memoria compartida: los

procesadores comparten una memoria común y se

comunican entre sí por esa memoria. Se pueden clasificar

según la forma en que se asignan los procesos:

o Maestro/esclavo: el núcleo del SO siempre se ejecuta un procesador determinado, el resto pueden ejecutar

programas de usuario y utilidades del SO. Las desventajas son que: un fallo en el maestro puede hacer caer

todo el sistema; el maestro puede ser un cuello de botella.

o Multiprocesador simétrico: el núcleo se ejecuta en cualquier procesador, y cada procesador se

autoplanifica a partir de una cola de procesos o hilos libres. El SO es más complejo, ya que debe asegurase

de que dos procesadores no elijan el mismo proceso y que los procesos no se pierdan.

Micronúcleo

Micronúcleo: es un núcleo pequeño del SO que proporciona las bases para ampliaciones modulares.

Antecesores de la arquitectura micronúcleo

SO monolíticos: cualquier procedimiento podía llamar a cualquier otro. Esta falta de estructura se volvía

insostenible cuando el SO alcanzó proporciones considerables.

SO por capas: las funciones se organizaban jerárquicamente y sólo se produce interacción entre capas adyacentes.

El problema es que realizar grandes modificaciones en una capa puede tener numerosos efectos en el código de

las capas adyacentes (por encima y por debajo).

Arquitectura micronúcleo

La filosofía en la que se basa el micronúcleo es que sólo las funciones esenciales del núcleo del SO deben permanecer en

el núcleo. Las aplicaciones y los servicios menos esenciales se construyen sobre el micronúcleo y se ejecutan en modo

usuario. Muchos servicios que antes formaban parte del SO, ahora son subsistemas externos que interactúan con el núcleo

y con otros subsistemas (controladores, gestores de memoria virtual, sistemas de archivos, sistemas de ventanas,

seguridad, etc.)

Los componentes externos al micronúcleo se implementan como procesos servidores; estos interactúan uno con otro sobre

una base común, a través de mensajes distribuidos a través del micronúcleo. Entonces, el micronúcleo funciona como

distribuidor de mensajes, validándolos, pasándolos entre componentes, y otorgando el acceso al hardware. También actúa

como protector de mensajes, evitando el intercambio de mensajes cuando no está permitido.

Ventajas de la implementación micronúcleo

1. Uniformidad de interfaces: todos los servicios se utilizan mediante el paso de mensajes.

2. Extensibilidad: facilidad para añadir nuevos servicios.

3. Flexibilidad: se adapta a las necesidades de los usuarios (añadir o quitar características para eficiencia).

4. Portabilidad

5. Fiabilidad: un micronúcleo puede probarse de forma rigurosa. Se utilizan APIs.

6. Soporte a sistemas distribuidos: un proceso puede enviar un mensaje sin saber en qué máquina reside el

destinatario.

7. Soporte para SO orientados a objetos (SOOO): los componentes son objetos con interfaces bien definidas,

entonces, la interacción entre componentes utilizan esa interfaz.

UTN FRC Resumen SOP – Rodrigo Carrión

9 / 16

Diseño de micronúcleo

Un micronúcleo de incluir aquellas funciones que dependen directamente del hardware y cuya funcionalidad es necesaria

para dar soporte a las aplicaciones y servidores que ejecutan en modo núcleo. Se engloban en tres categorías: gestión de

memoria a bajo nivel, comunicación entre procesos, y gestión de interrupciones y E/S.

Hilos y procesos en Linux

Estados de un proceso en Linux

Ejecución: abarca dos estados, ejecutando y listo.

Interrumpible: estado de bloqueo, el proceso espera un suceso.

No interrumpible: otro estado de bloqueo, a diferencia del anterior, no acepta señales, espera directamente una

condición de hardware.

Parado: proceso detenido y sólo puede reanudarse por otro proceso.

Zombie: proceso terminado, pero permanece en la tabla de procesos.

Hilos en Linux

Cuando dos procesos comparten la misma memoria virtual, operan como hilos dentro de un único proceso, pero Linux no

diferencia entre hilo y proceso.

Comunicación entre procesos

Condiciones de competencia: cuando dos o más procesos leen o escriben datos compartidos y el resultado final depende

de quién se ejecuta y cuando lo hace. Ejemplo: el spooler de impresión.

Regiones críticas: es la parte del programa en que se tiene acceso a la memoria compartida.

Exclusión mutua: dos o más procesos no pueden leer o escribir datos compartidos al mismo tiempo.

Para evitar las condiciones de competencia hay que cumplir con lo siguiente:

1. Dos procesos no pueden estar al mismo tiempo dentro de sus regiones críticas.

2. No pueden hacerse suposiciones sobre las velocidades ni el número de las CPUs.

3. Ningún proceso que se esté ejecutando fuera de su región crítica puede bloquear a otro proceso.

4. Ningún proceso deberá tener que esperar de manera indefinida para entrar en su región crítica.

Exclusión mutua con espera ocupada (con espera activa)

Mientras un proceso está actualizando la memoria compartida en su región crítica, ningún otro proceso debe entrar en su

propia región crítica y causar problemas.

Desactivación de interrupciones: la solución más simple es hacer que cada proceso inhabilite todas las

interrupciones inmediatamente después de ingresar a su región crítica y las vuelva a habilitar justo antes de salir de

ella. Con las interrupciones inhabilitadas, no puede haber interrupciones de reloj. Este es un enfoque poco atractivo

porque no es prudente conferir a los procesos de usuario la capacidad de inhabilitar todas las interrupciones.

Variable de cierre (o de bloqueo): una solución de software es utilizar una sola variable compartida que

inicialmente es cero (desbloqueado). Cuando un proceso quiere entrar en su región crítica, primero prueba el

bloqueo. Si este es 0, el proceso lo establece a 1 (bloqueado) y entra en la región critica. Si la variable es 1, el

proceso espera hasta que cambie a 0. La desventaja aquí es que se pueden generar inconsistencias en la lectura

de los datos por interrupciones de reloj en tiempos inoportunos (mismo caso del spooler).

Alternancia estricta: esta solución usa una variable de cerradura pero permite el acceso a 2 procesos en base a

los valores de las variables, por lo que no hay posibilidad de que entren los 2. Un proceso entra en un ciclo corto en

la espera que el otro que está en la región crítica salga de la misma y cambie la variable de cerradura para permitirle

el acceso. Aquí se pueden generar inconsistencias por interrupciones de reloj y; además, como un proceso es el

que llama a otro, si el proceso 0 no entra en la región critica, el 1 no entrará.

Instrucción TSL: esta solución requiere un poco de ayuda del hardware. Muchas computadoras, sobre todo las

diseñadas pensando en múltiples procesadores, tienen una instrucción TSL RX, BLOQUEO (Test and Set Lock).

UTN FRC Resumen SOP – Rodrigo Carrión

10 / 16

Esta lee el contenido de la palabra de memoria bloqueo, la coloca en el registro RX y luego guarda un valor distinto

a cero en la dirección de memoria bloqueo. Se garantiza que las operaciones de leer la palabra y escribir en ella

son indivisibles. La CPU que ejecuta la instrucción TSL cierra el bus de memoria para impedir que otras CPUs

tengan acceso a la memoria antes que termine.

Todas estas alternativas son correctas, pero tienen el defecto de que requieren espera activa. Es decir, cuando un proceso

quiere entrar en su región critica, verifica si tal ingreso está permitido. Si no lo está, el proceso entra en un ciclo corto para

esperar hasta que lo esté. Este enfoque desperdicia CPU y puede tener efectos inesperados.

Otra alternativa para lograr exclusión mutua, es empleando modelos sin espera activa: aquí cuando a un proceso no se le

permite entrar a la región crítica, en lugar de esperar y perder tiempo en la CPU, se bloquea. Cuando se le habilita la entrada,

se desbloquea. Para lograr esto se debe hacer uso de algunas primitivas de comunicación entre procesos, unas de las más

sencillas son el par sleep y wakeup:

sleep: hace que el invocador se bloquee, hasta que otro proceso lo active.

wakeup: desbloquea un proceso. Tiene un parámetro, el proceso a desbloquear.

El problema del productor-consumidor

Este es un modelo que utiliza las dos primitivas nombradas anteriormente. Dos procesos comparten un búfer de tamaño fijo.

Uno de ellos, el productor, coloca la información allí y el otro, el consumidor, la saca. Los problemas de este modelo surgen

cuando el productor quiere colocar un nuevo elemento en el búfer pero este ya está lleno. La solución es que el productor

se desactive y se vuelva a activar cuando el consumidor haya sacado uno o más elementos. Asimismo, si el consumidor

quiere sacar un elemento del búfer y ve que está vacío, se desactiva hasta que el productor coloca algo allí y lo activa.

Siendo cuenta el número de elementos del búfer y N el número de elementos máximo que se puede guardar, el código de

este modelo es:

A pesar de que este modelo no posee espera activa, sigue teniendo el problema de las

interrupciones de reloj en momentos inoportunos.

Ejemplo: si cuenta no está restringido. El búfer está vacío

y el consumidor acaba de leer cuenta para ver si es 0.

En ese instante, el calendarizador decide dejar de

ejecutar el consumidor y comienza a ejecutar el

productor. Este inserta un elemento en el búfer,

incrementa la cuenta y ve que el valor es 1. Al estar

cuenta en 1, el productor intuye que consumidor está

dormido y llama a wakeup() para activarlo. Pero el

consumidor todavía no está inactivo, entonces la señal

de activar se pierde. Cuando se ejecute el consumidor

usará el valor de cuenta que había leído antes, que era

0 y se desactivará. El productor llenará el búfer y se

desactivará y permanecerán ambos inactivos para siempre.

Exclusión mutua sin espera ocupada

Semáforos: consiste en una variable entera para contar el número de llamadas wakeup. Son un tipo de variable a

la que se le aplican dos operaciones, down y up. La operación down, aplicada a un semáforo determina si su valor

es mayor a 0. En tal caso, decrementa el valor y simplemente continúa. Si el valor es 0, el proceso se desactiva sin

terminar la operación down por el momento. La operación up, incrementa el valor del semáforo indicado. Si uno o

más procesos están inactivos en espera de un semáforo, sin haber podido terminar una operación down previa, el

sistema escoge uno de ellos y le permite terminar dicha operación.

Ambas operaciones son atómicas, o sea que se garantiza que una vez iniciada una operación de semáforo, ningún

otro proceso podrá tener acceso al semáforo antes de que la operación haya terminado o se haya bloqueado.

UTN FRC Resumen SOP – Rodrigo Carrión

11 / 16

Utilizando semáforos al modelo productor-consumidor, se tiene:

- lleno = 0, para contar el número

de ranuras ocupadas.

- vacío = N, para contar el número

de ranuras desocupadas.

- mutex = 1, para asegurar que el

productor y consumidor no

tengan acceso al búfer al mismo

tiempo.

Los semáforos resuelven el problema del despertar perdido.

Los semáforos que solo pueden adoptar dos valores, se denominan semáforos binarios o mutex. Las variables lleno

y vacío son semáforos de sincronización, garantizando que ciertas secuencias de sucesos se presenten o no

(producto deje de producir cuando el búfer esté lleno, y el consumido deje de consumir cuando esté vacío).

Monitores: un monitor es una colección de procedimientos, variables y estructuras de datos que se agrupan en un

tipo especial de modulo o paquete. Los procesos pueden invocar a los procedimientos de un monitor cuando lo

deseen, pero no pueden acceder en forma directa a sus estructuras de datos internas desde procedimientos

declarados fuera de dicho monitor. Los monitores tienen una propiedad importante que los hace útiles para lograr

la exclusión mutua: solo un proceso puede estar activo en un monitor a la vez. Son una construcción del lenguaje

de programación.

Transferencia de mensajes: este método utiliza dos primitivas, send y receive, que son llamadas al sistema, no

construcciones del lenguaje. Específicamente, cada una se estructura:

o send(destino, mensaje): envía un mensaje a un destino dado.

o receive(origen, mensaje): 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

con un código de error.

Los sistemas de transferencia de

mensajes presentan muchos

problemas y cuestiones de diseño

difíciles. Cabe la posibilidad de que en

la red se pierdan los mensajes. Para

protegerse contra tal perdida, el

emisor y el receptor pueden convenir

en que tan pronto como el receptor

reciba un mensaje, devolverá un mensaje especial de acuse. Si el emisor no recibe tal acuse dentro de cierto plazo,

retransmitirá el mensaje. Otro problema, es lo que sucede si el mensaje se recibe de forma correcta, pero el acuse

se pierde. El emisor retransmitirá el mensaje y el emisor lo obtendrá dos o más veces. Este problema se resuelve

anexando números de sucesión consecutivos a cada mensaje original. Si el receptor recibe un mensaje con el

mismo número de sucesión que el mensaje anterior, sabrá que está repetido y puede ignorarlo. Cuando el emisor y

el receptor están en la misma máquina, el desempeño es importante, en este caso la transferencia de mensajes

entre procesos es más lenta que una operación de semáforo o entrar en un monitor.

En el problema del productor-consumidor se usan N mensajes (que serían N ranuras en el búfer de memoria

compartida). Lo primero que hace el consumidor es enviar N mensajes vacíos al productor. Cada vez que éste tiene

que entregar un mensaje al consumidor, toma un mensaje vacío y devuelve uno lleno.

Si el productor trabaja más rápido que el consumidor, todos los mensajes se llenarán y estarán esperando al

consumidor, el productor se bloqueará, en espera de un mensaje vacío.

Si el consumidor es más rápido, todos los mensajes estarán vacíos en espera de que el productor los llene, el

consumidor se bloqueará esperando un mensaje lleno.

UTN FRC Resumen SOP – Rodrigo Carrión

12 / 16

Planificación de procesos (Scheduling o calendarización)

Una computadora con multiprogramación suele tener varios procesos compitiendo por la CPU al mismo tiempo (cuando dos

o más estados están en estado Listo). Si sólo hay una CPU, es preciso decidir cuál proceso se ejecutará a continuación,

entrando en juego el calendarizador.

Además de escoger el proceso que más conviene ejecutar, el calendarizador debe preocuparse por aprovechar con

eficiencia la CPU, porque la conmutación de procesos es costosa.

Calendarizador: parte del SO que toma la decisión de que proceso ejecutar a continuación, utilizando un algoritmo de

calendarización, y durante cuánto tiempo.

Cuando calendarizar (criterios de planificación)

Hay diversas situaciones en las que es necesario calendarizar:

cuando se crea un proceso, pues hay que decidir si se ejecutara el proceso padre o el hijo.

cuando un proceso termina se deberá escoger otro del conjunto de procesos Listos. Si no hay procesos Listos se

ejecuta un proceso inactivo del sistema.

cuando un proceso se bloquea por E/S, un semáforo u otro motivo, el motivo del bloqueo puede afectar la decisión.

cuando se presenta una interrupción de E/S, si vino de un dispositivo que terminó su tarea, hay que elegir entre

ejecutar ese proceso o el que se estaba ejecutando cuando se recibió la interrupción.

si algún reloj de hardware genera interrupciones cada una cierta frecuencia, puede tomarse una decisión de

calendarización en cada interrupción o cada cierta cantidad de interrupciones.

Tipos de algoritmos de calendarización

Algoritmo no expropiativo: escoge el proceso que se ejecutará y luego simplemente le permite ejecutarse hasta

que se bloquee o hasta que ceda la CPU de forma voluntaria. Aunque ese proceso se ejecute durante hora, no se

lo suspenderá por la fuerza. No se toman decisiones de calendarización, luego de que la interrupción sea tratada

siempre se reanuda el proceso que se estaba ejecutando antes.

Algoritmo expropiativo: escoge un proceso y le permite ejecutarse durante un tiempo establecido. Si al término

de este tiempo el proceso continúa en ejecución, se le suspende y el calendarizador escoge otro proceso para que

se ejecute (si hay disponible). Este tipo de calendarización requiere que haya una interrupción de reloj al término

del intervalo de tiempo para que el calendarizador pueda recuperar el control de la CPU.

Categorías de algoritmos de calendarización

Lo que el calendarizador debe optimizar en un sistema, no es lo mismo para todos. Por lo tanto, se diferencian tres entornos

que vale la pena distinguir:

Por lotes: suelen ser aceptables los algoritmos no expropiativos, o los expropiativos con intervalos de tiempo largos

para cada proceso (no hay usuarios impacientes esperando que el sistema responda con rapidez). Este enfoque

reduce la conmutación de procesos y, por lo tanto, mejora el desempeño.

Interactivo: la expropiación es indispensable para evitar que un proceso acapare la CPU y niegue servicio a otros.

Tiempo real: a veces no es necesaria la expropiación, porque los procesos saben que tal vez no se ejecuten durante

mucho tiempo y, por lo general, realizan su trabajo y se bloquean rápido. A diferencia de los sistemas interactivos,

ejecutan programas cuyo fin es apoyar a la aplicación actual.

Metas de los algoritmos de calendarización

Algunos objetivos dependen del entorno, pero otros son deseables en todos los casos.

Todos los sistemas:

o Equidad: dar a cada proceso una porción equitativa del tiempo de CPU.

o Cumplimiento de políticas: cuidar que se ponga en práctica la política establecida.

o Equilibrio: mantener ocupadas todas las partes del sistema.

Sistemas por lotes:

o Rendimiento: procesar el máximo de trabajos por hora.

UTN FRC Resumen SOP – Rodrigo Carrión

13 / 16

o Tiempo de retorno: reducir al mínimo el lapso entre la presentación y la terminación de un trabajo.

o Utilización de CPU: mantener ocupada todo el tiempo a la CPU.

Sistemas interactivos:

o Tiempo de respuesta: responder rápido a las solicitudes.

o Proporcionalidad: satisfaces las expectativas de los usuarios.

Sistemas en tiempo real:

o Cumplir los plazos: evitar la pérdida de datos.

o Predecibilidad: evitar la degradación de la calidad en sistemas multimedia.

Algoritmos de calendarización en sistemas por lotes

Primero en llegar, primero en ser atendido (FCFS, First Come, First Served o FIFO): este algoritmo es el más

sencillo de todos y es no expropiativo. Aquí, la CPU se asigna a los procesos en el orden que la solicitan. De manera

básica, hay una sola cola de procesos listos. Cuando el primer trabajo entra al sistema, se le inicia de inmediato y

se le permite ejecutar todo el tiempo que desee. A medida que llegan otros trabajos, se les coloca al final de la cola.

Cuando se bloquea el proceso en ejecución, se ejecuta el primer proceso de la cola. Si un proceso bloqueado vuelve

a estar listo, se le coloca al final de la cola como si fuera un trabajo recién llegado. La gran ventaja de este algoritmo

es que es muy fácil de entender y de programar. La desventaja es que puede hacer uso ineficiente de la CPU.

Trabajo más corto primero (SJF, Simple Job First): es un algoritmo no expropiativo. Su funcionamiento es similar

al FCFS, pero la diferencia es que si hay varios trabajos de la misma importancia en la cola de entrada, el

calendarizador escoge al trabajo más corto primero. Vale la pena señalar que esta estrategia de trabajo más corto

primero sólo es óptima si todos los trabajos están disponibles en forma simultánea.

Tiempo restante más corto a continuación (SRTF, Short Remaining Time First): esta es una versión

expropiativa de la estrategia anterior. Siempre se escoge el proceso en base al tiempo que falta para que termine

de ejecutarse. Cuando llega un trabajo nuevo, su tiempo total se comprara con el tiempo que resta para que el

proceso actual termine de ejecutarse. Si es menor, el proceso actual se suspende y se pone en marcha el trabajo

recién llegado. La ventaja de este esquema es que permite que trabajos cortos nuevos obtengan un buen servicio.

También necesita conocer con antelación los tiempos de ejecución.

Algoritmos de calendarización en sistemas interactivos

Por turno circular (Round Robin): es uno de los métodos más antiguos, sencillos y equitativos muy utilizado. A

cada proceso se le asigna un intervalo de tiempo, llamado cuanto (quantum), durante el que se le permitirá

ejecutarse. Si al termino del cuanto el proceso se sigue ejecutando, se le expropia la CPU asignándosela a otro

proceso. Claro que si el proceso se bloquea o termina antes de expirar el cuanto, la conmutación de la CPU se

efectúa en ese momento. Lo único que necesita hacer el calendarizador es mantener una lista de procesos

ejecutables. Cuando un proceso consume su cuanto, se le coloca al final de la lista. Un aspecto importante es la

magnitud del cuanto: un cuanto demasiado corto causa demasiadas conmutaciones de procesos y reduce la

eficiencia de la CPU, pero uno demasiado largo puede reducir la rapidez de respuesta a solicitudes interactivas

cortas. Aun cuando de alrededor de 20-50 ms suele ser un término medio razonable.

Por prioridades: a cada proceso se le asigna una prioridad, y el proceso listo

que tenga mayor prioridad es el que se ejecuta. Para evitar que los procesos

con prioridades altas se ejecuten de manera indefinida, el calendarizador

podría disminuir la prioridad del proceso que se está ejecutando. Otra

alternativa, es asignar a cada proceso un cuanto de tiempo máximo en el cual

pueda ejecutarse, y una vez cumplido el tiempo, se ejecutará el proceso con la siguiente prioridad más alta. Las

prioridades pueden asignarse estáticamente (por el usuario) o dinámicamente (por el SO). En muchos casos en

conveniente agrupar los procesos en clases de prioridad y utilizar calendarización por prioridades entre las clases,

pero Round Robin dentro de cada clase.

Colas múltiples: se establecen clases de prioridad. Los procesos de la clase más alta se ejecutan durante un

cuanto. Los procesos de la siguiente clase más alta se ejecutaban en dos cuantos. Los procesos de la siguiente

clase se ejecutaban durante cuatro cuantos, y así sucesivamente. Cada vez que un proceso se gastaba todos los

cuantos asignados, se le bajaba a la clase inmediata inferior.

Calendarización garantizada: consiste en hacer “promesas” reales en cuanto al desempeño y luego cumplirlas. Si

hay n usuarios, cada uno recibe 1/n de la capacidad de la CPU, lo mismo pasa con procesos en un sistema

UTN FRC Resumen SOP – Rodrigo Carrión

14 / 16

monousuario. Para cumplir estar promesas, el sistema necesita llevar la cuenta de cuanto tiempo de CPU ha recibido

cada proceso desde su creación. Luego se calcula el tiempo de CPU al que cada uno tiene derecho, que sería el

tiempo desde la creación dividido n procesos existentes. Entonces se puede calcular el cociente entre el tiempo de

CPU de consumido entre el tiempo al que el proceso tiene derecho. El algoritmo consiste entonces en ejecutar el

proceso cuyo cociente es más bajo. Un cociente de 0.5 significa que utilizó la mitad del tiempo prometido, y uno de

2.0 significa que utilizó el doble.

Planificación de dos niveles: los esquemas analizados hasta ahora suponen que todos los procesos ejecutables

están en la memoria principal. Si la memoria principal es insuficiente, ocurrirá lo siguiente:

- Habrá procesos ejecutables que se mantengan en disco.

- Habrá importantes implicaciones para la planificación, tales como las siguientes:

Traer un proceso del disco demanda mucho tiempo.

Es más eficiente el intercambio de los procesos con un planificador de dos niveles.

El esquema operativo de un planificador de dos niveles es como sigue:

1. Se carga en la memoria principal cierto subconjunto de los procesos ejecutables.

2. El planificador se restringe a ellos durante cierto tiempo.

3. Periódicamente se llama a un planificador de nivel superior para efectuar las siguientes tareas:

- Eliminar de la memoria los procesos que hayan permanecido en ella el tiempo suficiente.

- Cargar a memoria los procesos que hayan estado en disco demasiado tiempo.

4. El planificador de nivel inferior se restringe de nuevo a los procesos ejecutables que se encuentren en la

memoria.

5. El planificador de nivel superior se encarga de desplazar los procesos de memoria a disco y viceversa.

Los criterios que podría utilizar el planificador de nivel superior para tomar sus decisiones son los que se indican a

continuación:

- Tiempo que un proceso estuvo en disco.

- Tiempo de CPU utilizado por el proceso.

- Tamaño del proceso.

- Prioridad del proceso.

Bloqueos irreversibles (interbloqueos)

Bloqueo irreversible: un conjunto de procesos cae en un bloqueo irreversible si cada proceso del conjunto está esperando

un suceso que solo otro proceso del conjunto puede causar. Puesto que todos ellos están esperando, ninguno causara

jamás ninguno de los eventos que podrían despertar a algún otro miembro del conjunto, y todos seguirán esperando de

manera indefinida. Pueden ocurrir cuando se ha otorgado a los procesos acceso exclusivo a recursos.

Recursos

Recurso: es cualquier cosa que un solo proceso puede usar en un instante dado. Puede ser un dispositivo de hardware o

de información (registros de una base de datos por ejemplo).

Hay dos tipos de recursos:

Recurso expropiable: recurso que se le quita al proceso que lo tiene sin causar daños. Ejemplo: el uso de la

memoria.

Recurso no expropiable: recurso que no se lo puede quitar del proceso que lo tiene sin hacer que el cómputo falle.

Ejemplo: la grabación de un CD. Generalmente, es donde intervienen los bloqueos irreversibles.

Condiciones para un bloqueo irreversible

Deben cumplirse cuatro condiciones para que haya un bloqueo irreversible:

1. Exclusión mutua: cada recurso está asignado a exactamente un proceso, o está disponible.

2. Retención y espera: los procesos que tienen recursos previamente otorgados pueden solicitar otros recursos.

UTN FRC Resumen SOP – Rodrigo Carrión

15 / 16

3. No expropiación: los recursos ya otorgados no pueden arrebatarse al proceso que los tiene; éste debe liberarlo de

forma limpia y explícita.

4. Espera circular: debe haber una cadena circular de dos o más procesos, cada uno de los cuales está esperando

un recurso que está en manos del siguiente miembro de la cadena.

Deben existir estas cuatro condiciones para que ocurra un bloqueo irreversible. Si falta alguna de ellas, no podrá ocurrir.

Modelado de bloqueos irreversibles

Se emplean grafos dirigidos. Hay dos nodos, los círculos son procesos,

y los cuadrados son recursos. Un arco desde un recurso a un proceso

quiere decir que el recurso fue solicitado primero por ese proceso y se

lo concedió. Un arco desde un proceso hasta un recurso, significa que

el proceso está bloqueado esperando ese recurso.

Los grafos de recursos son una herramienta que nos permite ver si una sucesión dada de solicitudes/liberaciones conduce

a un bloqueo irreversible.

Estrategias para enfrentar los bloqueos irreversibles

Ignorar el problema: conocido como algoritmo del avestruz. Usado por UNIX y Windows.

Detección y recuperación: se detectan los bloqueos irreversibles y se toman medidas para recuperarse.

Evitación dinámica: tratan de evitarse asignando cuidadosamente los recursos.

Prevención: se anula una de las cuatro condiciones necesarias para que haya un bloqueo irreversible.

Detección y recuperación

Algoritmos de detección de bloqueos irreversibles:

Con un solo recurso de cada tipo: solo hay un recurso de cada tipo (una impresora, una grabadora, un disco,

etc.). Se construye un grafo de recursos, si contiene uno o más ciclos, quiere decir que hay un bloque irreversible.

Con múltiples recursos de cada tipo: utiliza matrices y comparación entre vectores para detectar bloqueos

irreversibles. A medida que algoritmo avanza, se van marcando los procesos para indicar que pueden terminar y,

por lo tanto, que no han caído en un bloqueo irreversible. Cuando el algoritmo finaliza, todos los procesos que no

estén marcados habrán caído en un bloqueo irreversible.

Técnicas de recuperación:

Recuperación mediante expropiación: arrebatarle de manera temporal un recurso a su actual poseedor y dárselo

a otro proceso. Es difícil o imposible.

Recuperación mediante reversión (Rollback): los procesos pasan por puntos de verificación periódicamente. En

estos puntos, el estado de un proceso (la imagen de memoria y el estado de los recursos, es decir, si están

asignados o no a dicho proceso) se graban en un archivo. Cuando se detecta un bloqueo irreversible, un proceso

que tiene un recurso solicitado se revierte hasta un momento anterior a la adquisición del recurso, iniciando uno de

sus puntos de verificación previos.

Recuperación por eliminación de procesos: es la forma más burda, pero eficaz. Consiste en eliminar uno o más

procesos. Se elimina un proceso del ciclo, y si esto no ayuda, se repite hasta romper el ciclo. Una alternativa, podría

eliminarse un proceso fuera del ciclo para liberar sus recursos. El proceso a eliminar se escoge con mucho cuidado

porque está reteniendo recursos que algún proceso del ciclo necesita.

Prevención de bloqueos irreversibles

Garantizar que no se cumpla al menos una de las condiciones de bloqueos irreversibles.

Atacar la condición de exclusión mutua: hacer que los recursos no sean exclusivos. Una opción es hacer spooling

(como la impresora, donde el demonio de impresión es el único proceso que puede acceder a la impresora y nunca

solicita otros recursos), pero no todos los dispositivos se pueden manejar con esta técnica. Pero, da la idea de evitar

asignar recursos si no es necesario, y tratar de asegurarse que el número de procesos que van a solicitar un recurso

sea el mínimo posible.

UTN FRC Resumen SOP – Rodrigo Carrión

16 / 16

Atacar la condición de retener y esperar: evitar que los procesos que tiene recursos esperen cuando traten de

adquirir más recursos. Para ello, se exige que todos los procesos soliciten todos sus recursos antes de comenzar a

trabajar. Si todo está disponible, se le asignará los recursos que necesite hasta terminar. Si uno o más recursos

están ocupados, no se asignará ningún recurso y el proceso tendrá que esperar. Ineficiente, porque muchos

procesos no saben cuántos recursos necesitarán, además no se hará uso óptimo de los recursos.

Atacar la condición de no expropiación: expropiarle un recurso a un proceso, muchas veces es muy poco

prometedor. Es difícil o imposible.

Atacar la condición de espera circular: hay varias formas: una forma sería simplemente tener una regla de que

cualquier proceso tiene derecho tan sólo a un recurso en todo momento. Si necesita un segundo recurso, tendrá

que liberar el primero (es imposible para un proceso que copia un archivo grande de una cinta a una impresora). La

otra forma es con una numeración global de todos los recursos. Los recursos pueden solicitar los recursos que

quieran pero siempre en orden numérico (no puede pedir el recurso 3, y luego el 1). La desventaja es que es casi

imposible encontrar un ordenamiento que satisfaga a todos.

Inanición

Es un problema relacionado con los sistemas multitarea, donde a un proceso o un hilo de ejecución se le deniega siempre

el acceso a un recurso compartido. Sin este recurso, la tarea a ejecutar no puede ser nunca finalizada.

La inanición es una situación similar al interbloqueo, pero las causas son diferentes. En el interbloqueo, dos procesos o dos

hilos de ejecución llegan a un punto muerto cuando cada uno de ellos necesita un recurso que es ocupado por el otro. En

cambio, en este caso, uno o más procesos están esperando recursos ocupados por otros procesos que no se encuentran

necesariamente en ningún punto muerto.

La utilización de prioridades en muchos SO multitarea podría causar que procesos de alta prioridad estuvieran ejecutándose

siempre y no permitieran la ejecución de procesos de baja prioridad, causando inanición en estos.

UTN FRC Resumen SOP – Rodrigo Carrión

1 / 7

Unidad Nº4 – Administración de memoria Administrador de memoria: parte del SO que administra todo lo referido a la memoria. Su obligación es mantenerse al

tanto de que partes de la memoria están uso y cuales ocupadas, asignar memoria a procesos cuando la necesiten y liberar

la misma cuando estos terminen, y administrar el intercambio entre la memoria principal y el disco duro cuando la primera

es muy pequeña para contener todos los procesos.

Estrategias de administración

Monoprogramación sin intercambio ni paginación

Este es el esquema de administración de memoria más sencillo. Consiste en ejecutar solo un programa a la vez, repartiendo

la memoria entre ese programa y el SO. Se ejecuta un solo proceso a la vez.

Multiprogramación con particiones fijas

La multiprogramación aumenta el aprovechamiento de la CPU. Existen varias formas de lograr multiprogramación. La forma

más fácil es dividir la memoria en n particiones (desiguales o no), cada una con una cola de entrada. Cuando llega un trabajo,

se lo pone en la cola de la partición más pequeña en la que cabe.

Desventaja: cuando la cola de una partición grande está vacía pero

la de una partición pequeña está llena, los trabajos pequeños tienen

que esperar para entrar en memoria, aunque haya mucha memoria

desocupada.

Una alternativa, sería mantener una sola cola. Cada vez que se

desocupe una partición, el trabajo más cercano al frente, y que quepa

en esa partición, se cargará y ejecutará. La única desventaja seria

desperdiciar una partición grande en un trabajo pequeño. Para

eliminar la desventaja anterior, una estrategia distinta seria examinar

toda la cola cada vez que se desocupe una partición y elegir el trabajo

más grande que entre en ella. Este enfoque discrimina los trabajos

pequeños.

Una solución a lo anterior seria tener por lo menos una partición pequeña, para ejecutar trabajos pequeños.

Otra estrategia se basa en la regla de que un trabajo elegible para ejecutarse no puede pasarse por alto más de k veces.

Cada vez que se lo saltea, se le suma un punto. Cuando tiene k puntos, no se le puede ignorar.

Reubicación y protección

La multiprogramación introduce dos problemas: reubicación y protección. Distintos trabajos se ejecutan en distintas

direcciones. Cuando se enlaza un programa, el enlazador necesita saber en qué dirección de memoria arrancará el

programa. Esto es el problema de la reubicación.

Ejemplo (ver imagen): suponiendo que la primera instrucción llama a un procedimiento en la dirección absoluta 100, si se carga en la

partición 1, esa instrucción saltará a la dirección absoluta 100, que está dentro del SO. Lo que se necesita es una llamada a 100K + 100.

Una posible solución es modificar la instrucción en el momento en que el programa se carga en la memoria. Si se carga en la

partición 1, se suman 100K a cada una de las direcciones, se carga en la partición 2, se suman 200K, y así sucesivamente.

La reubicación sobre la carga no resuelve el problema de la protección. En los SO multiusuario es indeseable dejar que los

procesos lean y escriban en la memoria perteneciente a otros usuarios.

Una solución a los dos problemas, consiste en equipar a la máquina con dos registros especiales de hardware, llamados

base y límite. Cuando se calendariza un proceso, el registro base se carga con la dirección donde comienza su partición, y

el registro límite se carga con la longitud de la partición. Cuando se genera una dirección de memoria, se suma

automáticamente el registro base, y con el registro límite se cuida de no acceder a memoria fuera de la partición actual.

UTN FRC Resumen SOP – Rodrigo Carrión

2 / 7

La desventaja es tener que hacer una suma y una comparación cada vez que se referencia la memoria.

Administración de memoria

A veces no hay espacio suficiente en memoria principal para contener todos los procesos activos, así que los procesos

excedentes se mantienen en disco y traerlos a la memoria en forma dinámica para que se ejecuten.

Pueden usarse dos enfoques para la administración de memoria:

Intercambio (swapping): consiste en traer a la memoria un proceso entero, ejecutarlo durante un rato y volver a

guardarlo en el disco.

Memoria virtual: permite que los programas se ejecuten aunque sólo una parte de ellos esté en memoria.

Intercambio (swapping)

Particiones variables.

Administración de memoria con mapa de bits.

Administración de memoria con listas enlazadas.

Particiones variables

A diferencia de las particiones fijas, el número, ubicación y tamaño de las particiones varían en forma dinámica conforme

los procesos llegan y se van. Las particiones se adaptan al tamaño de los procesos. Esto mejora el aprovechamiento de la

memoria pero complica la asignación y liberación, y su control.

Cuando el intercambio crea muchos huecos en memoria, es posible combinarlos en uno más grande, a esto se lo denomina

compactación de memoria. Lo malo es que requiere mucho CPU.

La asignación de memoria a un proceso es sencilla cuando los procesos se crean con un tamaño fijo. Si los procesos pueden

crecer se presentan problemas. Si hay un hueco adyacente al proceso, se le podrá asignar y el proceso podrá crecer allí. Si

está adyacente a otro proceso, el proceso que crece tendrá que pasarse a otro hueco de la memoria donde pueda crecer o

realizar un intercambio a disco de otros procesos para hacerle lugar en memoria.

Desventajas:

- Complejidad en la asignación y en la liberación.

- Se debe llevar un registro de la memoria.

- Necesidad de realizar compactación.

- ¿Cuánta memoria asignar a un proceso?

Administración de memoria con mapa de bits

Con un mapa de bits, la memoria se divide en unidades de asignación, que pueden ser desde unas cuantas palabras hasta

varios kilobytes. A cada unidad de asignación corresponde un bit del mapa de bits. El bit es 0 si la unidad está desocupada

y 1 si está ocupada (o viceversa).

El tamaño de la unidad de asignación es muy importante. Más pequeña la unidad, mayor tamaño del mapa de bits. A mayor

unidad de asignación, menor tamaño de mapa de bits, pero desperdicia una cantidad de memoria considerable en la última

unidad del proceso si su tamaño no es múltiplo exacto de la unidad de asignación.

El tamaño del mapa de bits depende del tamaño de la unidad de asignación y de la cantidad de memoria.

Desventaja: una vez que se ha decidido traer a la memoria un proceso de k unidades, el administrador de memoria deberá

examinar el mapa de bits en busca de una serie de k bits consecutivos en 0 (operación lenta).

Administración de memoria con listas enlazadas

Consiste en una lista enlazada de segmentos de memoria asignados y libres, donde

un segmento es un proceso, o bien, un hueco entre dos procesos. Cada entrada de la

lista especifica un hueco (H) o un proceso (P), la dirección donde comienza, la longitud y un apuntador a la siguiente entrada.

UTN FRC Resumen SOP – Rodrigo Carrión

3 / 7

Pueden usarse varios algoritmos para la asignación de memoria, dando por hecho que el administrador sabe cuanta

memoria debe asignar:

Primer ajuste: es el método más simple. El administrador de memoria explora la lista de segmentos hasta hallar un

hueco lo bastante grande. Luego el hueco se divide en dos partes, una para el proceso y una para la memoria

desocupada (excepto que sea exacto). Este algoritmo es rápido porque la búsqueda es lo más corta posible.

Siguiente ajuste: funcionamiento similar al del primer ajuste, sólo que el algoritmo recuerda en qué punto de la lista

se quedó la última vez que encontró un hueco apropiado. La siguiente vez que tenga que buscar un hueco, inicia

desde ese punto y no desde el principio. Es más lento que el del primer ajuste.

Mejor ajuste: se explora toda la lista y se escoge el hueco más pequeño que alcance. Es más lento que el del

primer ajuste porque recorre toda la lista y desperdicia más memoria que el primer ajuste y el siguiente ajuste porque

satura la memoria de pequeños huecos que no sirven para nada.

Peor ajuste: asegura de escoger el hueco más grande disponible, de modo que el hueco restante sea lo bastante

grande como para ser útil. Las simulaciones demuestran que no es muy buena idea.

Ajuste rápido: mantiene listas individuales para algunos de los tamaños que se solicitan en forma más común. Por

ejemplo, podría mantenerse una tabla de n elementos, donde el primero es un apuntador a la cabeza de una lista

de huecos 4 KB, el segundo un apuntador a una lista de huecos de 8 KB, etc. Los de 21KB se podrían meter con

los de 20 KB o una lista con tamaños irregulares. Con este algoritmo, la localización de un hueco del tamaño

requerido es extremadamente rápida.

Los cuatro primeros algoritmos pueden acelerarse manteniendo listas distintas para los procesos y para los huecos,

enfocándose entonces en inspeccionar huecos y no procesos. La desventaja es que la asignación es más compleja y la

liberación de memoria es más lenta (quitar de la lista de procesos e insertar en la lista de huecos).

Memoria virtual

La idea básica de este esquema es que el tamaño combinado del programa, sus datos y su pila podrían exceder la cantidad

de memoria física que se le puede asignar. El sistema mantiene en la memoria principal las partes del programa que se

están usando en ese momento, y el resto en el disco. Mientras un programa espera que traiga del disco una parte de sí

mismo, está esperando E/S y no puede ejecutarse, así que la CPU puede ejecutar otro proceso. Hay dos técnicas:

Paginación.

Segmentación.

Paginación

La mayoría de los sistemas con memoria virtual utilizan una técnica llamada paginación. En cualquier computadora existe

un conjunto de direcciones de memoria que los programas pueden producir.

Estas direcciones generadas por el programa se denominan direcciones virtuales y constituyen el espacio de direcciones

virtual. En computadoras sin memoria virtual, la dirección virtual se coloca en forma directa en el bus de memoria y esto

hace que se lea o escriba la palabra física de memoria que tiene esa dirección. Cuando se utiliza memoria virtual, las

direcciones virtuales no se envían de manera directa al bus de memoria, sino a una Unidad de Administración de Memoria

(MMU, Memory Managment Unit) que establece una correspondencia entre las direcciones virtuales y físicas de la memoria.

El espacio de direcciones virtuales se divide en unidades llamadas páginas. Las unidades correspondientes en la memoria

física se denominan marcos de página. Estas dos estructuras siempre tienen el mismo tamaño.

En el caso de que un programa trate de usar una página que no tiene correspondencia, la MMU se da cuenta de esto y hace

que la CPU salte al sistema operativo. Esta interrupción de sistema se denomina fallo de página. El sistema operativo

escoge un marco de página que no esté usando mucho y vuelve a escribir su contenido en el disco, después de lo cual trae

la página a la que se acaba de hacer referencia y la coloca en el marco recién desocupado (es un intercambio), modifica el

mapa y reinicia la instrucción interrumpida.

La MMU interpreta por ejemplo una dirección virtual de 16 bits de la siguiente manera:

Los primero 4 bits indican un número de página. Este se utiliza como índice para consultar la tabla de página y así

obtener el número de marco de página correspondiente.

UTN FRC Resumen SOP – Rodrigo Carrión

4 / 7

Los siguientes 12 bits indican un desplazamiento u offset, por lo que si se tienen marcos de página de 4 KB, estos

12 bits se utilizan para direccionar los 4096 bytes de cada marco.

Tablas de página

El propósito de la tabla de páginas es establecer una correspondencia entre las páginas virtuales y los marcos de página.

En términos matemáticos, la tabla de páginas es una función, el número de página virtual es su argumento y el número de

marco de página es el resultado.

Diseños para la implementación de tablas de páginas:

El diseño más sencillo consiste en tener una sola tabla de páginas conformada por un arreglo de registros rápidos

de hardware. Cuando se inicia un proceso, el SO carga los registros con la tabla de páginas del proceso, tomada

de una copia que se guarda en memoria principal. Durante la ejecución, no se necesitan más referencias a la

memoria para la tabla de páginas ni para la transformación de direcciones. Una desventaja es que puede ser costoso

(si la tabla de páginas es grande); además, tener que cargar toda la tabla en cada conmutación de contexto perjudica

el desempeño.

En el otro extremo, la tabla de páginas podría estar en su totalidad en la memoria principal. Por lo tanto, lo único

que se necesita del hardware es un solo registro que apunte al principio de la tabla de páginas. Este diseño permite

cambiar el mapa de memoria con solo cargar un registro cuando se efectúa una conmutación de contexto. La

desventaja es que requiere una o más referencias a memoria.

Tablas de páginas multinivel: dado que las tablas de páginas pueden ocupar mucha memoria, muchas computadoras

utilizan una tabla de páginas multinivel. En este modelo, no es necesario tener todas las tablas de páginas en memoria todo

el tiempo, las que no se necesitan no deberán tenerse en ella.

Cuando se presenta una dirección virtual a la MMU, ésta extrae un valor que usa como índice para consultar la tabla de

páginas de primer nivel. La entrada a la que se llega al consultar la tabla de páginas de primer nivel, contiene la dirección

del número de marcos de página donde está almacenada una tabla de páginas de segundo nivel (dos niveles).

Estructura de una entrada de tabla de página: el tamaño de cada entrada varía de una computadora a otra, lo común es

de 32 bits. Los atributos son:

Número de marco de página: este es el campo más importante.

Bit presente/ausente: si este bit es 1, la entrada es válida y puede usarse; si es 0, la página virtual a la que la entrada

corresponde no está en memoria. Tener acceso a una entrada de tabla de página que tiene este bit en 0 causa un

fallo de página.

Bits de protección: indican cuales tipos de accesos están permitidos. Bit 0 se permite leer y escribir y 1 si no se

permite leer.

Bit solicitado: se enciende cada vez que se hace referencia a una página, ya sea para leer o para escribir. Este bit

ayuda al sistema a elegir entre que página seleccionar para sacar cuando se presente un fallo de página.

Bit caché: este bit permite inhabilitar el uso de caché con la página.

Memoria asociativa (búferes de consulta para traducción)

Puesto que la velocidad de ejecución por lo general está limitada por la velocidad con que la CPU puede sacar instrucciones

y datos de memoria, tener que hacer dos referencias a la tabla de página por cada referencia a la memoria reduce mucho

el desempeño.

La solución que se halló consiste en equipar las computadoras con un pequeño dispositivo de hardware que traduce

direcciones virtuales a direcciones físicas, sin pasar por la tabla de páginas. Este dispositivo, llamado búfer de consulta

para traducción (TLB), también conocido como memoria asociativa. Por lo general, esto está dentro de la MMU. Cada

entrada contiene información sobre una página, incluido el número de página virtual, un bit que se establece cuando la

página se modifica, el código de protección (permisos) y el marco de página físico en el que está la página. Otro bit indica

si la entrada es válida.

Cuando se presenta una dirección virtual a la MMU para que la traduzca, el hardware verifica primero si su número de página

virtual está presente en el TLB o no, comparándolo con todas las entradas simultáneamente. Si se encuentra el número y

UTN FRC Resumen SOP – Rodrigo Carrión

5 / 7

el acceso no viola los bits de protección, el número de marco de página se toma directo del TLB, sin recurrir a la tabla de

páginas.

Cuando el número de página virtual no está en la TLB, la MMU detecta esto y realiza la consulta ordinaria en la tabla de

páginas. Luego desaloja una de las entradas del TLB y la sustituye por la entrada de tabla de páginas que acaba de buscar.

Algoritmos para el reemplazo de páginas

Cuando se presenta un fallo de página, el SO tiene que escoger la página que desalojará de la memoria para hacer espacio

para colocar la página que traerá del disco. Si la página a desalojar fue modificada mientras estaba en memoria, deberá

reescribirse en el disco para actualizar la copia, sino, simplemente se reemplaza. Para ello existen diferentes tipos de

algoritmos:

Algoritmo óptimo de reemplazo de página: cada página puede rotularse con el número de instrucciones que se

ejecutarán antes de que se haga la primera referencia a esa página. Este algoritmo simplemente dice que debe

desalojarse la página con el rótulo más grande. El único problema con este método es que no puede ponerse en

práctica, debido a que en el momento en que se presenta un fallo de página, el SO no tiene forma de saber cuándo

se volverá a hacer referencia a una página determinada.

Algoritmo de reemplazo de páginas no usadas recientemente (NRU, Not Recently Used): se asocia a cada

página 2 bits de estado, el bit R se enciende cada vez que se hace referencia a la página (para leer o escribir). El

bit M se enciende cada vez que se escribe en la página (es decir se modifica). Cuando se presenta un fallo de

página, el SO examina todas las páginas y las divide en 4 categorías con base en los valores actuales de sus bits

R y M: Clase 0: no solicitada, no modificada; Clase 1: no solicitada, modificada; Clase 2: solicitada, no modificada;

Clase 3: solicitada, modificada. Este algoritmo desaloja al azar una página de la clase de número más bajo que no

esté vacía.

Algoritmo de reemplazo de páginas de primero en entrar, primero en salir (FIFO): el SO mantiene una lista de

todas las páginas que están actualmente en la memoria con la más antigua al principio de la lista, y la más nueva

la final. Al presentarse un fallo de página, se desaloja la página que esta al principio de la lista y la nueva se anexa

al final. La desventaja es que puede desalojar una página que se usa mucho; se soluciona con el siguiente.

Algoritmo de reemplazo de páginas de segunda oportunidad: es una modificación del FIFO, se examina el bit

R de la página más antigua. Si es 0, la página no se usa mucho, por lo tanto es reemplazada de inmediato. Si es 1,

se apaga, la página se coloca al final de la lista de páginas y su tiempo de carga se actualiza como si acabara de

llegar a la memoria. No es tan eficiente porque cambia constantemente las páginas de su lista.

Algoritmo de reemplazo de páginas tipo reloj: mantiene todas las páginas en una lista circular parecida a un reloj,

y una manecilla apunta a la página más antigua. Cuando se presenta un fallo de página, se examina la página a la

que apunta la manecilla. Si su bit R es 0, dicha se desaloja, la nueva se inserta en su lugar y la manecilla se adelanta

una posición. Si R es 1, se cambia a 0 y la manecilla se adelanta a la siguiente página, repitiendo el proceso hasta

encontrar una página con R = 0. Es como el de segunda oportunidad pero diferente implementación.

Algoritmo de reemplazo de páginas menos recientemente usada (LRU, Least Recently Used): cuando se

presenta un fallo de página, se desaloja la página que tiene más tiempo sin usarse.

Modelo del conjunto de trabajo (algoritmo de reemplazo de páginas de conjunto de trabajo)

Primero hay que entender algunas cosas.

Paginación por demanda: las páginas se traen cuando se necesitan, no por adelantado. Los procesos se inician sin tener

páginas en memoria. Cuando la CPU quiera obtener la primera instrucción habrá un fallo de página y el SO traerá del disco

la página con la primera instrucción. Con el tiempo tiene casi todas las páginas y su ejecución se estabiliza.

Localidad de referencia: durante cualquier fase de su ejecución, el proceso solo hace referencia a una fracción

relativamente pequeña de sus páginas.

Conjunto de trabajo: es el conjunto de páginas que esté usando un proceso en un momento dado. Si la memoria disponible

es demasiado reducida para contener todo el conjunto de trabajo, el proceso causará muchos fallos de página y se ejecutará

con lentitud. Se dice que un programa que causa fallos de páginas cada pocas instrucciones está hiperpaginado.

UTN FRC Resumen SOP – Rodrigo Carrión

6 / 7

La pregunta es ¿qué pasa cuando un proceso se vuelve a traer de la memoria? El proceso causará fallos de páginas hasta

que se haya cargado su conjunto de trabajo. El problema es cuando se producen muchos fallos de páginas, ya que se hace

lenta la ejecución y desperdicia tiempo de CPU.

Muchos sistemas paginados tratan de mantenerse al tanto de cuál es el conjunto de trabajo de cada proceso y se aseguran

de tenerlo en la memoria antes de permitir ejecutar al proceso. Este enfoque se denomina modelo de conjunto de trabajo, y

está diseñado para reducir de forma considerable la tasa de fallos de página. O sea, que lleva el registro del conjunto de

trabajo de los procesos y garantiza su prepaginación reduciendo los fallos de página.

Aspectos de diseño de los sistemas con paginación

Políticas de asignación locales vs. globales

Se refiere a cómo debe repartirse la memoria entre los procesos ejecutables que compiten por ella.

Algoritmos locales: equivalen a asignar una fracción fija de la memoria a cada proceso, entonces si el proceso

solicita una página nueva, deberá ser reemplazada por una sus páginas en memoria.

Algoritmos globales: asignan en forma dinámica los marcos de páginas entre los procesos ejecutables. Así, el

número de marcos asignados a cada proceso varía con el tiempo.

En general, los algoritmos globales funcionan mejor, sobre todo si el tamaño del conjunto de trabajo puede variar durante la

vida de los procesos. Si se usa un algoritmo local y el conjunto de trabajo crece, habrá hiperpaginación, aunque haya muchos

marcos de página desocupados. Si el conjunto de trabajo se encoge, los algoritmos locales desperdician memoria. Si se

usa un algoritmo global, el sistema debe decidir de manera continua cuantos marcos de página asignará a cada proceso.

Tamaño de página

La determinación del tamaño de página óptimo requiere equilibrar varios factores opuestos.

Si la página es muy grande un segmento de texto, datos o pila cualquiera no llenará un número entero de páginas.

En promedio, la mitad de una página se desperdicia. Dicho desperdicio se denomina fragmentación interna.

Además, un tamaño de página grande hace que más partes no utilizadas del programa estén en memoria

Si las páginas son muy chicas, implica que los programas van a necesitar muchas y, por lo tanto, una tabla de

páginas más grande. Las transferencias entre la memoria y el disco suelen efectuarse en unidades de páginas, y

casi todo el tiempo que tardan se invierte en el movimiento del brazo y retardo rotacional, por lo que transferir

páginas pequeñas requiere casi el mismo tiempo que transferir una grande.

Aspectos de implementación

Cerradura de páginas en memoria: que no se eliminen de la memoria páginas que están realizando operaciones

de E/S.

Almacenamiento de respaldo: se reserva un espacio en disco para el intercambio de páginas. Es el área de

intercambio o Swap.

Demonios de paginación: proceso que garantiza la existencia de suficientes marcos de página libres. Duerme, se

despierta, ejecuta un algoritmo de reemplazo de páginas y se duerme nuevamente. Detecta si la página se modificó

y establece M=1.

Segmentación

Consiste en proporcionar a la máquina varios espacios de direcciones independientes por completo, llamados segmentos.

Cada segmento consta de una sucesión lineal de direcciones, desde 0 hasta algún máximo. Los segmentos pueden tener

longitudes distintas, y por lo general las tienen. Además, las longitudes de segmento pueden variar durante la ejecución.

Para especificar una dirección en una memoria segmentada, el programa debe proporcionar una dirección de dos partes:

un número de segmento y una dirección dentro del segmento. Cabe destacar que un segmento es una entidad lógica de las

cual tiene conocimiento el programador.

Más fácil compartir y proteger la información (un segmento podría ser de sólo ejecución, prohibiendo la lectura y

escritura).

Separa los datos de los programas.

UTN FRC Resumen SOP – Rodrigo Carrión

7 / 7

Existencia de fragmentación externa.

Direccionamiento complicado.

Consumo de tiempo para la traducción de la dirección.

El programador define los segmentos.

Paginación vs. Segmentación

UTN FRC Resumen SOP – Rodrigo Carrión

1 / 8

Unidad Nº5 – Entrada / Salida

Interrupciones

Interrupción: forma que tiene el SO de comunicarse con los dispositivos y viceversa.

Virtualmente todos los computadores proporcionan un mecanismo mediante el cual otros módulos (E/S, memoria) pueden

interrumpir la ejecución normal del procesador.

Mejoran la eficiencia del procesamiento, ya que permiten que el procesador ejecute otras instrucciones mientras se realiza

una operación de E/S.

Clases de interrupciones

De programa: generadas por alguna condición que se produce como resultado de la ejecución de una instrucción

(división por cero, desbordamiento, etc.).

De reloj: generadas por un reloj interno del procesador.

De E/S: generadas por el controlador de E/S (para indicar que terminaron operaciones de E/S o errores).

Por fallo del hardware: generadas por fallos tales como un corte de energía o un error de paridad en memoria.

Las interrupciones y el ciclo de instrucción

Con las interrupciones, el procesador se puede dedicar a la ejecución de otras instrucciones mientras una operación de E/S

está en proceso. Cuando el dispositivo externo esté disponible, es decir, cuando esté preparado para aceptar más datos

desde el procesador, el módulo de E/S de dicho dispositivo enviará una señal de solicitud de interrupción al procesador.

Éste responde suspendiendo la operación del programa en curso y bifurcándose a un programa que da servicio al dispositivo

de E/S en particular, conocido como rutina de tratamiento de la interrupción, reanudando la ejecución original después de

haber atendido al dispositivo. El procesador y el SO son los responsables de suspender el programa de usuario y reanudarlo

después en el mismo punto.

Para que sean posibles las interrupciones, se añade un

ciclo de interrupción al ciclo de instrucción. En el ciclo de

interrupción, el procesador comprueba si ha ocurrido

alguna interrupción. Si no hay interrupciones pendientes,

el procesador continúa con el ciclo de lectura. Si hay una

interrupción pendiente, el procesador suspende la

ejecución del programa en curso y ejecuta una rutina de

tratamiento de la interrupción. El programa de

tratamiento de la interrupción generalmente forma parte

del SO. Cuando termina la rutina, el procesador puede

reanudar la ejecución del programa de usuario en el punto en que sucedió la interrupción.

Tratamiento de las interrupciones

Una interrupción desencadena una serie de sucesos, tanto en el hardware del procesador como en el software. Cuando un

dispositivo de E/S completa una operación de E/S, se produce en el hardware la siguiente secuencia de sucesos:

1. El dispositivo emite una señal de interrupción al procesador.

2. El procesador finaliza la ejecución de la instrucción en curso antes de responder a la interrupción.

3. El procesador envía una señal de reconocimiento al dispositivo que generó la interrupción. Permite al dispositivo

suprimir la señal de interrupción.

4. El procesador necesita ahora prepararse para trasferir el control a la rutina de interrupción. Por lo tanto, es preciso

salvar la información necesaria para abandonar la ejecución del programa en curso. Lo requerido es la palabra de

estado del programa (PSW) y la ubicación de la próxima instrucción a ejecutar. Graba la información del proceso

actual.

5. El procesador transfiere el control a la rutina de tratamiento de interrupción.

UTN FRC Resumen SOP – Rodrigo Carrión

2 / 8

6. En este punto, se necesita salvar el contenido de los registros del procesador, ya que estos pueden ser utilizados

por la rutina de tratamiento de la interrupción.

7. La rutina de tratamiento de interrupción procesa la interrupción examinando el estado de la operación de E/S o al

evento que causó la interrupción.

8. Cuando se completa el tratamiento de la interrupción, se recuperan los valores de los registros que se salvaron y se

restauran sobre los registros del procesador.

9. La operación final es restaurar los valores de la PSW y el contador de programa. Como resultado, la próxima

instrucción a ser ejecutada será el programa interrumpido previamente (se continúa con el programa interrumpido).

Interrupciones múltiples

Hay dos enfoques para tratar las interrupciones múltiples:

Tratamiento secuencial: consiste en inhabilitar las interrupciones mientras se esté procesando una. Una

interrupción inhabilitada quiere decir que el procesador ignorará la señal de interrupción, que quedará pendiente y

será comprobada por el procesador después de que éste habilite las interrupciones. La limitación de este enfoque

es que no tiene en cuenta las prioridades relativas o necesidades críticas de tiempo.

Definición de prioridades: consiste en definir prioridades para las interrupciones y permitir que una interrupción de

una prioridad más alta puede interrumpir a la rutina de tratamiento de una interrupción de prioridad más baja.

Multiprogramación

Aún con el uso de interrupciones, puede que un procesador no sea aprovechado eficientemente. Si el tiempo necesario para

completar una operación de E/S es mucho mayor que el código del usuario entre llamadas de E/S (situación habitual),

entonces el procesador va a estar desocupado durante una gran parte del tiempo.

Una solución a este problema es permitir a varios programas de usuario estar activos al mismo tiempo. Cuando el procesador

tiene que tratar con una serie de programas, el orden en que estos se ejecutan dependerá de su prioridad relativa y de si

están esperando una E/S. Cuando un programa es interrumpido y se transfiere el control a la rutina de tratamiento, una vez

que ésta haya terminado, puede que no se devuelva el control inmediatamente al programa que estaba en ejecución al

momento de la interrupción, en cambio, el control puede transferirse a algún otro programa pendiente que tenga mayor

prioridad.

Dispositivos de Entrada/Salida

Tipos de dispositivos

Los dispositivos externos pueden clasificarse en tres categorías:

Dispositivos legibles por los humanos: apropiados para la comunicación con el usuario. Por ejemplo se pueden

incluir los terminales de video, que constan de un teclado, pantalla, etc. Manejan flujos de caracteres.

Dispositivos legibles por la máquina: adecuados para comunicarse con equipos electrónicos, como discos,

unidades de cinta, entre otros. Manejan bloques de datos.

Dispositivos de comunicaciones: apropiados para comunicarse con dispositivos lejanos. Por ejemplo un modem.

Controlador de dispositivos (Drivers)

Una unidad de E/S tiene dos componentes: componente mecánico, es el dispositivo; y un componente electrónico, el controlador.

Un controlador puede manejar varios dispositivos idénticos, pero cada dispositivo puede tener su propio controlador.

El SO accede al dispositivo por medio del controlador. Su función es convertir un flujo de bits en serie en un bloque de bytes, almacenado

en su buffer, y luego copiar ese bloque en la memoria principal.

Funcionamiento

1. El SO escribe comandos en los registros del controlador.

2. El controlador acepta el comando, lo verifica y ejecuta.

3. La CPU se libera y deja trabajando al controlador.

4. Al finalizar el comando, el controlador emite una interrupción avisando que terminó la operación.

5. La CPU controla y lee los registros del controlador.

UTN FRC Resumen SOP – Rodrigo Carrión

3 / 8

Organización del sistema de la E/S

Técnicas de comunicación de la E/S

E/S programada.

E/S dirigida por interrupciones.

DMA (acceso directo a memoria).

E/S programada

Cuando el procesador está ejecutando un programa y encuentra una instrucción de E/S, ejecuta dicha instrucción, enviando

una orden al módulo apropiado de E/S. El módulo llevará a cabo la acción requerida y activará los bits apropiados del registro

de estado de E/S., pero no avisa al procesador, ni lo interrumpe. El procesador es el responsable de comprobar

periódicamente el estado del módulo de E/S hasta saber que se completó la operación.

El procesador es el responsable de extraer los datos de la memoria principal (en una salida) o almacenar los datos en la

misma (en una entrada).

El problema de ésta técnica es que el procesador tiene que esperar mucho tiempo a que el módulo de E/S esté listo. El

procesador, mientras espera, interroga repetidamente por el estado del módulo de E/S, degradando el rendimiento del

sistema.

E/S dirigida por interrupciones

Esta técnica consiste en que el procesador cuando envía una orden de E/S al módulo, se dedique a hacer otra cosa, y no

perder tiempo esperando. El módulo de E/S interrumpirá al procesador cuando esté lista la operación. Por último, el

procesador ejecuta la transferencia de los datos y reanuda el procesamiento anterior.

Aunque es más eficiente que la E/S programada, todavía sigue necesitando la intervención del procesador para la

transferencia de datos.

Desventaja de que el procesador participe en la transferencia de datos en la E/S:

La velocidad de transferencia de E/S está limitada por la velocidad con la que el procesador puede dar servicio a un

dispositivo.

Deben ejecutarse una serie de instrucciones en cada transferencia de E/S.

DMA (acceso directo a memoria)

Es una técnica de E/S más eficiente que las anteriores. La función de DMA se puede llevar a cabo por un módulo separado

sobre el bus del sistema o puede estar incorporada dentro de un módulo de E/S.

Cuando el procesador desea leer o escribir un bloque de datos, emite una orden hacia el módulo de DMA, enviándole la

siguiente información:

Si lo que solicita es una lectura o escritura.

La dirección de memoria del dispositivo involucrado.

La dirección inicial de memoria desde la que se va a leer o a escribir.

El número de palabras a leer o escribir.

El procesador continúa entonces con otro trabajo. Habrá delegado la operación de E/S en el módulo DMA. El módulo DMA,

transfiere el bloque entero, una palabra por vez, directamente hacia o desde la memoria, sin pasar por el procesador. Cuando

se completa la transferencia, el módulo DMA envía una señal de interrupción al procesador. De esta manera, el procesador

se involucra sólo al inicio y al final de la transferencia.

El módulo DMA necesita tomar el control del bus para transferir los datos con la memoria, y puede ocurrir que el procesador

necesite el bus. En este caso el procesador tiene que esperar por el módulo DMA (hace una pausa durante un ciclo del bus,

no es una interrupción).

Es el método utilizado actualmente.

UTN FRC Resumen SOP – Rodrigo Carrión

4 / 8

Evolución de las funciones de E/S

1. El procesador controla directamente los dispositivos periféricos.

2. Se añade un controlador o módulo de E/S. El procesador utiliza E/S programada sin interrupciones, y parece aislarse

de los detalles específicos de las interfaces con dispositivos externos.

3. Igual que el punto anterior pero utilizando interrupciones. Se incrementa la eficiencia, ya que el procesador no tiene

que esperar a que termine la operación de E/S.

4. Se utiliza la técnica DMA. El procesador ya no interviene en la transferencia (sólo al principio y al final).

5. El módulo de E/S pasa a ser un procesador separado con un conjunto de instrucciones especializadas para E/S.

6. El módulo de E/S pasa a tener su propia memoria local, convirtiéndose en una computadora independiente.

A medida que sigue la evolución, el procesador se liberando cada vez más de las tareas relacionadas con la E/S, mejorando

así el rendimiento.

Aspectos de diseño en los sistemas operativos

Objetivos del diseño

Hay dos objetivos primordiales en el diseño del servicio de E/S: eficiencia y generalidad.

La eficiencia es importante porque operaciones de E/S constituyen, a menudo, un cuello en los sistemas informáticos. La

mayoría de los dispositivos de E/S son extremadamente lentos en comparación con la memoria principal y el procesador.

Una manera de abordar este problema es el uso de la multiprogramación, que permite que algunos procesos esperen en

operaciones de E/S mientas otro proceso se está ejecutando.

El segundo gran objetivo es la generalidad. En interés de la simplicidad y la exención de errores, será deseable gestionar

todos los dispositivos de una manera uniforme. Debido a la diversidad de características de los dispositivos, en la práctica

es difícil conseguir una auténtica generalidad. Lo que puede hacerse es emplear un enfoque jerárquico y modular para el

diseño las funciones de E/S.

Independencia del dispositivo: manejo de comandos, operaciones que sean comunes para todos o algunos

dispositivos.

Manejo de errores: soluciones a nivel de hardware. Si se produce un error, no se avisa inmediatamente al usuario,

sino que se intenta realizar la operación de nuevo, si después de varios intentos el problema persiste, ahí se informa

al usuario.

Asignación de dispositivos:

o Dedicados: una vez asignado un dispositivo a un proceso, no se lo puede quitar (ejemplo: impresora).

o Compartidos: discos.

o Virtuales: transforma los dispositivos dedicados en compartidos (ejemplo: spooling de impresión).

Estructura lógica de las funciones de E/S

La filosofía jerárquica propone que las funciones del SO deben

separarse según su complejidad, sus rangos característicos de

tiempo y su nivel de abstracción. Con este enfoque, se llega a una

organización del SO en un conjunto de niveles (o capas). Cada capa

realiza una parte de un subconjunto de las funciones necesarias del

SO. Cada capa cuenta con la capa inferior para realizar funciones

más primitivas y para ocultar detalles de estas funciones. Asimismo,

cada capa ofrece servicios a la capa superior. Las capas deben

definirse de forma que los cambios en una capa no provoquen

cambios en otras.

Procesos de usuarios

Software independiente del dispositivo: software común para todos los dispositivos (protección, compartir recursos, manejo de bloques libres,

nombres de los dispositivos, sincronización de los manejadores de dispositivos, asignación y liberación de dispositivos, informe de errores, etc.)

Manejador de dispositivo: cada manejador controla un tipo de dispositivo.

Manejador de interrupciones: controla las interrupciones de todos los dispositivos.

Hardware

UTN FRC Resumen SOP – Rodrigo Carrión

5 / 8

Almacenamiento intermedio de la E/S (Buffering)

Buffering: técnica que soluciona los picos en la demanda de E/S.

Como ya sabemos, la lectura o escritura en dispositivo de E/S es lento, por lo que si un programa de usuario necesita leer

datos de una entrada o escribirlos en una salida y debiera, por ejemplo, leer los datos directamente del dispositivo de entrada,

esto produciría que el programa quede colgado esperando que la lenta operación de lectura termine.

Para evitar este problema lo que se hace es que se lea de los dispositivos de entrada y esos datos leídos se vallan

almacenando en bloques en un almacenamiento intermedio, para que luego el programa de usuario lea los datos de ese

almacenamiento intermedio o buffer.

Este almacenamiento intermedio ofrecido por los sistemas operativos se utiliza para mejorar el rendimiento del sistema.

Para estudiarlo mejor es importante hacer una distinción entre dos tipos de dispositivos: dispositivos orientados a bloque;

son los que almacenan la información en bloques, normalmente de tamaño fijo, haciendo las transferencias de un bloque

cada vez (discos y cintas). Los dispositivos orientados a flujo transfieren los datos como una serie de bytes. No poseen

estructura de bloques (terminales, impresoras, puertos de comunicación, mouse, módem, etc.).

Memoria intermedia sencilla

Cuando un proceso de usuario realiza una solicitud de E/S, el SO le asigna a la operación un espacio en la parte del sistema

de la memoria principal. Para los dispositivos orientados a bloque, las transferencias de entrada se realizan en el espacio

del sistema (memoria principal). Cuando se ha completado la transferencia, el proceso mueve el bloque al espacio del

usuario y solicita otro bloque inmediatamente. Esta técnica se llama lectura por adelantado o entrada anticipada. El proceso

de usuario puede procesar un bloque de datos mientras se está leyendo el siguiente, aumentando la velocidad.

Esta técnica complica al SO ya que debe guardar constancia de las asignaciones

de memorias intermedias del sistema a procesos de usuario. Se pueden aplicar

consideraciones similares a la salida con dispositivos orientados a bloques.

Cuando se transmiten datos a un dispositivo, deben copiarse primero del espacio

de usuario a un espacio del sistema, desde donde serán finalmente escritos.

Para la E/S con dispositivos orientados a flujo, el esquema de memoria intermedia sencilla puede aplicarse por líneas o por

bytes.

Memoria intermedia doble

Se puede realizar una mejora sobre la memoria intermedia sencilla asignando a

la operación dos almacenes intermedios del sistema. De esta forma, un proceso

puede transferir datos hacia (o desde) una memoria intermedia mientras que el S.O. vacía (o rellena) el otro.

Memoria intermedia circular

Si preocupa el rendimiento de un proceso determinado, sería deseable que las

operaciones de E/S fueran capaces de ir al ritmo del proceso. La memoria

intermedia doble puede ser inapropiada si el proceso lleva a cabo rápidas

ráfagas de E/S. En este caso, el problema puede mitigarse usando más de dos

memorias intermedias. Como se emplean más de dos, el conjunto de memorias intermedias se conoce como memoria

intermedia circular.

Planificación de discos

Parámetros de rendimiento del disco

Tiempo de búsqueda: es el tiempo necesario para mover el brazo del disco (y la cabeza) hasta la pista solicitada. Esta cantidad

resulta difícil de concretar. El tiempo de búsqueda consta de dos componentes clave: el tiempo de arranque inicial, y el tiempo

que se tarda en recorrer las pistas. El tiempo de búsqueda medio es de 5 a 10 ms.

Retardo de giro: es el tiempo que tarda en llegar el sector hasta la cabeza del disco.

Tiempo de transferencia: es el tiempo que tarda en realizar la operación de lectura o escritura. Depende del número de bytes

a transferir, el número de bytes por pista y la velocidad de rotación en revoluciones por segundo.

UTN FRC Resumen SOP – Rodrigo Carrión

6 / 8

Políticas de planificación de discos

Las políticas de planificación de discos tratan de reducir el movimiento del brazo del disco. Algunas son:

Aleatoria: se mantiene una cola con las solicitudes de E/S, y se eligen en forma aleatoria, obteniéndose el peor

rendimiento posible.

Primero en entrar, primero en salir (FIFO): es la manera más sencilla de planificación, lo que significa que los

elementos se procesan de la cola en un orden secuencial. Esta estrategia tiene la ventaja de ser justa porque las

solicitudes son servidas en el orden en que llegaron. El brazo puede desplazarse significativamente.

Prioridad: este enfoque no persigue la optimización del uso del disco, sino cumplir con otros objetivos del SO. Los

trabajos por lotes que sean cortos y los trabajos interactivos reciben frecuentemente una prioridad más alta que

trabajos mayores que realicen largas operaciones. Permite que haga salir rápidamente trabajos cortos y pueda

proporcionar un buen tiempo de respuesta interactiva. Los trabajos mayores pueden tener que esperar

excesivamente. Poco favorable para sistemas de bases de datos.

Último en entrar, primero en salir (LIFO): sorprendentemente, esta política cuenta con virtudes. En los sistemas

de proceso de transacciones, conceder el dispositivo al último usuario acarrea pocos o nulos movimientos del brazo

al recorrer un archivo secuencial. Sin embargo, si el disco está ocupado con una larga cola de espera, existe una

clara posibilidad de inanición. Una vez que un trabajo haya lanzado una solicitud de E/S a la cola y haya abandonado

la cabeza de la línea, no podrá volver a ganar la cabeza de la línea a menos que se vayan todos los que estén por

delante.

Primero el tiempo de servicio más corto (SSTF, Shortest Service Time First): es elegir la solicitud de E/S de

disco que requiera el menor movimiento posible del brazo del disco desde su posición actual. De este modo, siempre

es elige procurando el mínimo tiempo de búsqueda.

SCAN: el brazo solo se puede mover en un sentido, resolviendo todas las solicitudes pendientes en su ruta, hasta

que alcance la última pista o hasta que no haya más solicitudes en esa dirección. Luego, comienza a realizar el

rastreo en sentido opuesto., volviendo a recoger todas las solicitudes en orden. Esta política favorece a los trabajos

con solicitudes de pistas cercanas a los cilindros más interiores y exteriores, así como a los últimos en llegar.

C-SCAN (SCAN circular): igual al SCAN pero restringe el rastreo a una sola dirección. Así, cuando se haya visitado

la última pista en un sentido, el brazo vuelve al extremo opuesto del disco y comienza a recorrerlo de nuevo, lo que

reduce el retardo máximo sufrido por las nuevas solicitudes.

RAID

La industria ha acordado un esquema estándar para el diseño de base de datos sobre múltiples discos, llamado RAID

(Redundant Array of Independent Disks).

Características

1. Conjunto de varios discos físicos que forman una única unidad lógica.

2. Los datos se distribuyen entre los diferentes discos.

3. Redundancia utilizada para la recuperación de datos en caso de fallos.

4. Se reemplaza un disco de gran capacidad por varios discos físicos.

5. Mejor rendimiento debido al acceso simultaneo de datos ubicados en discos diferentes.

6. Existen siete niveles de RAID, de 0 a 6 (arquitecturas de diseño diferentes).

Niveles

RAID 0 (sin redundancia)

Este nivel no es un miembro verdadero de la familia RAID, porque no incluye redundancia para mejorar el

rendimiento.

En RAID 0, los datos del sistema están distribuidos a lo largo de todo el vector de discos. Esto tiene una

notable ventaja sobre el uso de un solo disco: si hay pendientes dos solicitudes de E/S distintas en dos

bloques de datos diferentes, entonces existe una buena oportunidad para que los bloques solicitados estén

en discos diferentes. De este modo, se pueden realizar en paralelo las dos solicitudes reduciendo el tiempo

en la cola de E/S.

UTN FRC Resumen SOP – Rodrigo Carrión

7 / 8

El disco lógico de este esquema RAID 0, está dividido en bandas (strip); estas bandas pueden ser bloques físicos, sectores

o alguna otra unidad. Un conjunto de bandas consecutivas lógicamente que se corresponden exactamente con una banda

de cada miembro del vector (disco físico), se denomina franja (stripe).

Es ideal para aplicaciones que requieren alto rendimiento para datos no críticos.

RAID 1 (mirroring)

RAID 1 difiere de los niveles RAID 2 hasta el 6 en el modo en que consigue la redundancia. En RAID 1 la redundancia se

consigue por el simple medio de duplicar todos los datos. Los datos se dividen igual que en RAID 0. Pero en este caso, cada

banda lógica se corresponde con dos discos físicos independientes, por lo que cada disco del vector tiene un disco espejo

que contiene los mismos datos.

Este tipo de organización tiene varios aspectos positivos:

- Una solicitud de lectura le puede servir cualquiera de los dos discos que contienen los datos

solicitados.

- Una solicitud de escritura requiere la actualización de las bandas correspondientes a ambos discos,

pero esto se puede hacer en paralelo.

- La recuperación de fallos es sencilla. Cuando una unidad falla, los datos están todavía accesibles

desde la segunda unidad.

La principal desventaja de RAID 1 es el coste, requiere dos veces el espacio de disco del disco lógico que soporta.

En un entorno orientado a transacciones, se puede conseguir altas tasas de solicitudes de E/S si el grueso de las solicitudes

es de lectura. Es ideal para archivos del SO o archivos críticos.

RAID 2

Los niveles RAID 2 y 3 utilizan una técnica de acceso paralelo. En un vector de acceso

paralelo, todos los discos participan en la ejecución de cada solicitud de E/S.

Normalmente, el eje de las unidades individuales está sincronizado, por lo que cada

cabeza de disco está en la misma posición de cada disco en un instante dado.

En el caso de RAID 2 y 3 existe también la división de datos. En este caso, las bandas son muy pequeñas, a menudo tan

pequeñas como un único byte o palabra. En RAID 2, se calcula un código de corrección de errores a lo largo de los bits

correspondientes sobre cada disco de datos, y los bits del código se almacenan en las respectivas posiciones de bit sobre

los discos de paridad múltiple. Normalmente, se utiliza código Hamming, que es capaz de corregir errores de un solo bit y

detectar errores de dos bit.

RAID 2 solamente es una buena elección en un entorno efectivo en el que se produjeran muchos errores de disco. Dada la

alta fiabilidad de los discos y de las unidades de disco, RAID 2 está superado y ya no se implementa.

RAID 3 (paridad por intercalación de bits)

Se organiza de una forma similar a RAID 2, diferenciándose en que requiere solo un disco

redundante, no importa el tamaño del vector de discos. RAID 3 emplea acceso paralelo, con los

datos distribuidos en pequeñas bandas. En lugar de un código de corrección de errores, se calcula

un solo bit de paridad para el conjunto de bits en la misma posición de todos los discos de datos.

Teniendo en cuenta que los datos están divididos en pequeñas bandas, puede alcanzar una taza de transferencia de datos

muy alta. Por otro lado, solo se puede ejecutar en cada instante una sola solicitud de E/S (bajo rendimiento en sistemas de

transacciones).

RAID 4

Los niveles RAID 4 al 6 usan una técnica de acceso independiente. Cada disco opera de manera

independiente, por lo que se pueden satisfacer en paralelo solicitudes de E/S individuales. Son

más apropiados para aplicaciones que requieran tasas altas de solicitudes de E/S, y son

UTN FRC Resumen SOP – Rodrigo Carrión

8 / 8

relativamente menos apropiados para aplicaciones que requieran altas tasas de transferencia de datos.

En el caso de RAID 4 al 6, las bandas son relativamente grandes. Con RAID 4, se calcula una banda de la paridad bit a bit

a lo largo de las bandas correspondientes de cada disco de datos, y los bits de paridad se almacenan en la banda

correspondiente del disco de paridad.

Implica una penalización en la escritura de E/S, ya que no solo hay que escribir los datos, sino también los bits de paridad

correspondientes. Posee cuello de botella en el disco de paridad. No se usa en la práctica.

RAID 5 (paridad por intercalación distribuida de bloques)

RAID 5 está organizado de forma similar a RAID 4. La diferencia es que distribuye las bandas de

paridad a través de todos los discos. Para un vector de n discos, la banda de paridad está sobre

un disco distinto para las n primeras bandas y, después, se repite el patrón.

La distribución de las bandas de paridad a través de todos los disco evita el potencial cuello de botella en la E/S que hay en

RAID 4 que tiene un solo disco de paridad.

RAID 6 (paridad doble por intercalación distribuida de bloque)

En este esquema se realizan dos cálculos distintos de paridad, y se almacenan en

bloques independientes de diferentes discos. Así, un vector RAID 6 cuyos datos de

usuario requieran N discos está formado por N + 2 discos.

La ventaja de RAID 6 es que ofrece disponibilidad de datos extremadamente alta.

Deberían fallar tres discos para hacer que los datos no estuvieran disponibles. Por otro lado, sufre una importante

penalización de escritura, porque cada escritura afecta a dos bloques de paridad.

Caché de disco

El término memoria caché se aplica normalmente a una memoria más pequeña y más rápida que la memoria principal y que

se sitúa entre ésta y el procesador.

El mismo concepto puede aplicarse a la memoria de disco. Concretamente, una caché de disco es una memoria intermedia

situada en la memoria principal para sectores de disco. La caché contiene una copia de algunos sectores del disco. Cuando

se hace una solicitud de E/S para un sector específico, se comprueba si el sector está en la cache de disco. Si está, la

solicitud toma los datos de la caché. Si no, se lee el sector solicitado en el disco y se coloca en la caché, quedando disponible

para futuras solicitudes.

Consideraciones sobre el diseño

Solicitud de E/S: la caché de disco debe entregarse al proceso que los solicitó:

o Los bloques de datos se trasfieren desde la caché a la memoria asignada al proceso de usuario.

o Usando la capacidad de memoria compartida y pasando un puntero a la entrada apropiada de la caché del

disco

Estrategia de reemplazo: establece que bloque de la caché va a ser reemplazado.

o LRU (usado menos recientemente): bloque sin referencias durante la mayor cantidad de tiempo. Más usado.

o LFU (usado menos frecuentemente): bloque con menor cantidad de referencias.

Política de escritura:

o Por demanda: los sectores se sustituyen sólo cuando se necesita una entrada en la tabla.

o Planificada previamente: los sectores se sustituyen cada vez que se libera un conjunto de entradas.

UTN FRC Resumen SOP – Rodrigo Carrión

1 / 6

Unidad Nº6 – Seguridad

Amenazas a la seguridad

La seguridad de computadoras y redes aborda los siguientes cuatro requisitos:

Secreto: exige que la información de un sistema sea accesible para lectura solamente por partes autorizadas.

Integridad: exige que los elementos de un sistema puedan ser modificados sólo por partes autorizadas.

Disponibilidad: exige que los elementos de un sistema estén disponibles para las partes autorizadas.

Autenticidad: requiere que un sistema sea capaz de verificar la identidad del usuario.

Tipos de amenazas

Interrupción: se destruye un elemento del sistema o se hace inaccesible

o inútil. Es un ataque a la disponibilidad.

Interceptación: una parte no autorizada consigue acceder a un

elemento. Este es un ataque al secreto.

Modificación: una parte no autorizada no solo consigue acceder, sino

que falsifica un elemento. Este es un ataque a la integridad.

Invención: una parte no autorizada inserta objetos falsos en el sistema.

Este es un ataque a la autenticidad.

Componentes de un sistema informático

Hardware:

o Amenaza a la disponibilidad: comprenden daños accidentales y deliberados a los equipos, así como el hurto.

Hacen falta medidas de seguridad físicas y administrativas para hacer frente a estas amenazas.

Software:

o Amenaza a la disponibilidad: el software es alterado o dañado para inutilizarlo. Se puede combatir con

copias de seguridad (backups).

o Amenaza al secreto: se realizan copias no autorizadas del software. Se combate con licencias, registros.

o Amenaza a la integridad/autenticidad: un programa sigue funcionando pero se comporta de forma diferente

a lo normal (virus, ataques). Se pueden usar antivirus.

Datos:

o Amenaza a la disponibilidad: destrucción de archivos (accidentalmente o mal intencionado).

o Amenaza al secreto: lectura no autorizada de bases de datos y archivos. Un análisis de datos estadísticos

puede revelar datos ocultos.

o Amenaza a la integridad: modificación de archivos existentes o invención de nuevos.

Redes y líneas de comunicaciones:

o Amenazas pasivas: escuchas a escondidas o control de las transmisiones. El objetivo del agresor es obtener

la información que se está transmitiendo. Hay dos tipos de amenazas: la revelación de contenido y el análisis

de tráfico. Las amenazas pasivas son muy difíciles de detectar porque no alteran los datos. Se hacen frente

mediante la prevención y no la detección.

o Amenazas activas: suponen alteraciones del flujo de datos o la creación de un flujo falso. Se pueden dividir

en cuatro categorías:

Suplantación: una entidad se hace pasar por otra. Un usuario se hace pasar por otro.

Repetición: incluye la captura previa de un dato único y la subsiguiente retransmisión para producir un efecto

no autorizado.

Modificación de mensajes: significa que se modifica una porción de un mensaje legítimo o que los mensajes

se retrasan o se desordenan para conseguir un efecto no autorizado.

Privación de servicio: impide o inhibe el uso normal o la gestión de servicios de comunicaciones. Esta agresión

puede tener como objetivo suprimir mensajes a un destinatario en particular o interrumpir toda una red.

El objetivo frente a los ataques activos es detectarlos y recuperarse de cualquier interrupción o retardo.

UTN FRC Resumen SOP – Rodrigo Carrión

2 / 6

Protección

La introducción a la multiprogramación originó la posibilidad de compartir recursos entre los usuarios. La necesidad de

compartir recursos introdujo la necesidad de protección. Un sistema operativo puede ofrecer protección de las siguientes

maneras:

Ninguna protección: apropiada cuando se ejecutan procedimientos delicados en distintos instantes.

Aislamiento: cada proceso opera separadamente de los demás.

Compartir todo o nada: el propietario de un objeto lo declara como público o privado.

Compartir por limitación de acceso: el SO comprueba la licencia de cada acceso de un usuario específico a un

objeto.

Compartir por capacidades dinámicas: creación dinámica de derechos de compartimiento para los objetos.

Uso limitado de un objeto: esta forma de protección limita no solo el acceso a un objeto, sino también el uso a que

se puede dedicar dicho objeto. Por ejemplo, se puede dejar ver un documento delicado a un usuario pero no

imprimirlo.

Protección de la memoria

La separación del espacio de memoria de los diversos procesos se lleva a cabo fácilmente con un esquema de memoria

virtual. La segmentación, paginación o la combinación de ambas proporcionan un medio eficaz de gestión de la memoria

principal.

Aislamiento total: el SO simplemente debe asegurar que cada segmento o página es accesible solo para el proceso

al que está asignada. Esto se lleva a cabo fácilmente exigiendo que no haya entradas duplicadas en las tablas de

páginas o segmentos.

Compartimiento: el mismo segmento o página puede ser referenciado en más de una tabla. Este tipo de

compartimiento se consigue mejor en un sistema que soporta segmentación o combinación de segmentación y

paginación

Control de acceso orientado al usuario (autenticación)

La técnica más habitual de control de acceso al usuario en un sistema de tiempo compartido o en un servidor es la conexión

del usuario, que requiere un identificador de usuario (ID) y una contraseña. Este esquema ID/contraseña es un método

notablemente poco fiable de control de acceso al usuario. Los usuarios pueden olvidar sus contraseñas y pueden revelarlas

accidental o deliberadamente. Es una técnica que está sujeta a los intentos de penetración.

El control de acceso a usuario en entornos distribuidos puede ser centralizado o descentralizado:

Control de acceso centralizado: la red proporciona un servicio de conexión para determinar a quien se le permite

usar la red y a qué se le permite conectarse.

Control de acceso descentralizado: el procedimiento usual de conexión lo lleva a cabo un servidor de destino.

Control de acceso orientado a los datos (autorización)

Después de una conexión con éxito, al usuario se le habrá concedido el acceso a uno o más servidores y aplicaciones.

Asociado con cada usuario, puede haber un perfil de usuario que especifique las operaciones y los accesos a archivos

permisibles.

Un modelo general de control de acceso ejercido por un sistema gestor de archivos o bases de datos es el de una matriz

de acceso. Los elementos básicos del modelo son los siguientes:

Sujeto: entidad capaz de acceder a un objeto (proceso, usuario,

etc.).

Objeto: cualquier cosa cuyo acceso deba controlarse (archivos,

programas, segmentos de memoria, etc.).

Derecho de acceso: la manera en que un sujeto accede a un

objeto (leer, escribir, ejecutar).

UTN FRC Resumen SOP – Rodrigo Carrión

3 / 6

Una dimensión de la matriz consta de los sujetos identificados que pueden intentar acceder a los datos (usuarios o grupos

de usuarios). La otra dimensión enumera a los objetos a los que se puede acceder. Cada entrada de la matriz indica los

derechos de acceso de ese sujeto a ese objeto.

La matriz puede descomponerse en columnas para obtener listas de control de acceso. Para cada objeto, una lista de

control de acceso enumera los usuarios y sus derechos de accesos permitidos.

Con la descomposición por filas se obtienen etiquetas de capacidad de acceso. Ésta especifica los objetos y las

operaciones autorizadas para un usuario. Cada usuario tiene un número de etiquetas y puede estar autorizado o no para

prestarlas o concederlas a otros usuarios.

Intrusos

Una de las dos amenazas más conocidas a la seguridad (la otra es la de los virus) es el intruso, conocido en general como

pirata informático, hacker o cracker.

Tipos de intrusos

Suplantador: un individuo que no está autorizado a usar el computador y que penetra en un sistema de control de

acceso para explotar una legítima entrada de usuario. Es un usuario externo.

Abusador: un usuario legítimo que accede a datos, programas o recursos a los que no está autorizado, o que está

autorizado pero hace un mal uso de sus privilegios. Es un usuario interno.

Usuario clandestino: un individuo que está a cargo del control de la supervisión del sistema y utiliza ese control

para evadir la auditoría y el control de acceso o para suprimir la recopilación de datos. Puede ser externo o interno.

Técnicas de intrusión

El objetivo de los intrusos es obtener acceso a un sistema o aumentar el conjunto de privilegios accesibles en un sistema.

En general, esto requiere que el intruso obtenga información que debería estar protegida. En la mayoría de los casos, esta

información está en forma de contraseña de usuario.

Normalmente, un sistema debe mantener un archivo que asocia una contraseña a cada usuario autorizado. El archivo de

contraseñas puede protegerse de dos maneras:

Cifrado unidireccional: el sistema almacena contraseñas de los usuarios de forma cifrada solamente. Cuando un

usuario presenta una contraseña, el sistema cifra contraseña y la compara con el valor almacenado.

Control de acceso: el acceso a los archivos de contraseñas está limitado a una o muy pocas cuentas.

Técnicas de obtención de contraseñas

1. Probar las contraseñas por defecto del sistema. Muchos administradores no cambian estos valores.

2. Probar todas las contraseñas cortas (de uno a tres caracteres).

3. Probar palabras del diccionario del sistema o de una lista de contraseñas probables.

4. Reunir información sobre datos personales del usuario (nombre, nombre de familiares, aficiones, etc.).

5. Probar los números de teléfono de los usuarios, DNI, etc.

6. Intervenir la línea entre un usuario remoto y el sistema anfitrión.

Si un intruso tiene que verificar sus conjeturas intentando conectarse, esto constituye un medio de ataque tedioso y fácil de

contrarrestar. Por ejemplo, el sistema puede rechazar simplemente cualquier conexión tras intentarse tres contraseñas.

Protección de contraseñas

Las contraseñas son la primera línea de defensa contra los intrusos. La contraseña sirve para autentificar el ID del individuo

que se conecta al sistema. A su vez, el ID introduce una seguridad en los siguientes sentidos:

El ID determina si el usuario está autorizado para obtener acceso al sistema.

El ID determina los privilegios que corresponden al usuario.

El ID se emplea para el control de acceso discrecional (enumerando los ID de los usuarios, un usuario les puede

conceder permisos para leer archivos poseídos por él).

UTN FRC Resumen SOP – Rodrigo Carrión

4 / 6

Vulnerabilidad de las contraseñas

Muchos usuarios utilizan contraseñas cortas y fácilmente adivinables (su propio nombre, nombre de la calle, etc.).

Estrategias de elección de contraseñas

El objetivo es eliminar las contraseñas adivinables a la vez que se permite a los usuarios elegir una contraseña recordable.

Hay cuatro técnicas básicas:

Formación del usuario: difícil de lograr, sobre todo cuando hay un gran número de usuarios. Muchos usuarios

harían caso omiso de las instrucciones.

Contraseñas generadas por computador: los usuarios no pueden ser capaces de recordarlas, y pueden caer en

la tentación de escribirlas. Tienen escasa aceptación por parte de los usuarios.

Inspección reactiva de contraseñas: el sistema ejecuta periódicamente su propio averiguador de contraseñas

para encontrar contraseñas adivinables. El sistema cancela todas las contraseñas que se adivinen y se lo notifica

al usuario. La desventaja es que consumen muchos recursos, y además, cualquier contraseña existente será

vulnerable hasta que el inspector reactivo de contraseñas la encuentre.

Inspección proactiva de contraseñas: es el enfoque más prometedor. Al usuario se le permite elegir su propia

contraseña, pero al momento de la selección, el sistema comprueba si la contraseña es permisible, y, si no lo es, la

rechaza. Tiene que haber un equilibrio entre la aceptación del usuario y la fortaleza. Ejemplo: todas las contraseñas

deben tener un mínimo de 8 caracteres, tener una mayúscula, dígitos numéricos, símbolos, etc.

Detección de intrusos

La detección de intrusos es la segunda línea de defensa. Se basa en el supuesto de que el comportamiento del intruso se

diferencia del comportamiento de un usuario legítimo en formas que pueden cuantificarse.

El comportamiento de un usuario se puede establecer observando su historial, y se pueden detectar desviaciones

significativas en su patrón.

Las técnicas para la detección de intrusos son:

Detección de anomalías estadísticas: supone la recolección de datos del comportamiento de los usuarios

legítimos durante un período de tiempo. Después se aplican pruebas estadísticas al comportamiento observado

para determinar, con un alto grado de confianza, si los comportamientos no son de usuarios legítimos.

Es eficaz contra atacantes exteriores. Pueden no ser capaces de hacer frente a usuarios legítimos que intenten

obtener acceso a recursos que requieren mayores privilegios.

Detección basada en reglas: supone el intento de definir un conjunto de reglas que pueden emplearse para decidir

si un comportamiento dado es el de un intruso.

Una herramienta fundamental para la detección de intrusos es un registro de auditoría. Este, consiste en un registro de

actividades en curso por parte de los usuarios. Se utilizan dos planes:

Registros de auditoría nativos: casi todos los SO multiusuario ya incorporan un software de contabilidad que reúne

información sobre la actividad de los usuarios. No necesita ningún software adicional (lo trae el SO). Puede que no

contengan la información que se necesite o no se disponga de ella en una forma conveniente.

Registro de auditoría específicos para la detección: registros de auditoría que contiene sólo aquella información

necesaria para el sistema de detección de intrusiones. Puede ser independiente del fabricante, pero tiene un coste

extra por tener dos paquetes de contabilidad ejecutando en una misma máquina.

Cada registro de auditoría contiene los campos siguientes:

Sujeto: iniciadores de las acciones.

Acción: operación realizada por el sujeto con un objeto o sobre un objeto.

Objeto: receptores de las acciones.

Condición de excepción: indica las condiciones de excepción, si se produce alguna.

UTN FRC Resumen SOP – Rodrigo Carrión

5 / 6

Uso de recursos: una lista de elementos cuantitativos en la que cada elemento dice la cantidad empleada de un

recurso.

Marca de tiempo: fecha y hora que indica cuando tuvo lugar la acción.

Software malicioso

Programas malignos

Pueden dividirse en dos categorías:

Necesitan un programa anfitrión: fragmentos de programa que no tienen existencia independiente de otro

programa.

Independientes: son programas que por sí mismos pueden ser planificados y ejecutados por el SO.

También se pueden distinguir las amenazas de software que se reproducen y las que no lo hacen.

No reproducibles: fragmentos de programa que se activan cuando se invoca al programa anfitrión.

Reproducibles: fragmentos de programa o un programa independiente, que cuando se ejecutan pueden hacer una

copia o más copias de sí mismos que se activarán, más tarde, en el mismo sistema o en algún otro.

Los distintos programas maliciosos son:

Trampillas (puertas secretas): es un punto de entrada secreto a un programa que permite a alguien que la conoce

conseguir acceso sin pasar por procedimientos de seguridad. Estas, han sido utilizadas por programadores para

depurar y probar los programas, y se convierten en amenazas cuando se las utiliza para conseguir acceso no

autorizado. Son difíciles de detectar para los SO. Las medidas de seguridad deben centrarse en el desarrollo de

programas y en actualizaciones de software.

Bomba lógica: es un código incrustado en algún programa legítimo que “explota” cuando se cumplen ciertas

condiciones (presencia o ausencia de archivos, un día concreto de la semana, fecha, usuario en particular que

ejecute la aplicación, etc.). Pueden borrar o modificar datos, hasta hacer que se detenga la máquina.

Caballos de Troya (troyanos): es un programa aparentemente útil que contiene un código oculto que, cuando se

invoca, lleva a cabo alguna función dañina o no deseada. Se pueden usar para efectuar funciones indirectamente

que un usuario no autorizado no podría efectuar directamente, como cambiar los permisos de un archivo.

Virus: es un programa que puede infectar a otros programas, alterándolos, como incluir una copia del programa de

virus, que puede entonces seguir infectando a otros programas.

Gusanos: una vez activo un gusano, puede comportarse como un virus, un troyano o realizar cualquier acción

destructiva. Utilizan las conexiones de red para extenderse de un sistema a otro (correo electrónico, ejecución

remota, conexión remota). Contiene las mismas fases que los virus.

Zombie: es un programa que secretamente toma posesión de otra computadora conectada a internet, y se usa para

lanzar ataques que hacen difícil de rastrear. Se utilizan en ataques de denegación de servicio.

Fases de un virus

1. Fase latente: el virus está inactivo. Se activará luego por algún suceso. No todos los virus pasan por esta fase.

2. Fase de propagación: el virus hace copias idénticas a él en otros programas o en ciertas áreas del disco.

3. Fase de activación: el virus se activa para llevar a cabo la función para la que está pensado. Puede producirse por

múltiples sucesos el sistema.

UTN FRC Resumen SOP – Rodrigo Carrión

6 / 6

4. Fase de ejecución: se lleva a cabo la función. La función puede ser no dañina, como dar un mensaje por pantalla,

o dañina, como la destrucción de archivos.

Tipos de virus

Virus parásitos: la forma más tradicional y más común. Se engancha a archivos ejecutables y se reproduce al

ejecutar el programa infectado, buscando otros archivos ejecutables para infectar.

Virus residentes en la memoria: se alojan en la memoria principal infectando a todos los programas que se

ejecutan.

Virus del sector de arranque: infecta al sector principal de arranque (MBR) y se propaga cuando el sistema arranca

desde el disco que contiene el virus.

Virus clandestino: una forma de virus diseñado explícitamente para esconderse de la detección mediante en

software antivirus.

Virus polimorfo: un virus que muta con cada infección, haciendo imposible la detección por la “firma” del virus.

Virus de macros

Son independientes de la plataforma.

Infectan documentos, no archivos ejecutables.

Se extiende fácilmente a través del correo electrónico.

Sacan provecho de características de Word y Excel llamadas Macro. Una macro consiste en un programa ejecutable

incrustado en un documento de procesador de texto u otro archivo, utilizado para automatizar tareas repetitivas y ahorrar

pulsaciones de teclas.

UTN FRC Resumen SOP – Rodrigo Carrión

1 / 6

Unidad Nº7 – Procesamiento distribuido

Introducción

Con el incremento de la disponibilidad de computadoras personales y potentes servidores no muy caros, ha habido una

mayor tendencia hacia el proceso de datos distribuido (DDP, Distributed Data Processing), en el que los procesadores, datos

y otros elementos del sistema de proceso de datos pueden estar distribuidos en una organización. Un sistema de

procesamiento distribuido implica la partición de la función de computación y puede, también, conllevar una organización

distribuida de la base de datos, el control de los dispositivos y el control de las interacciones (redes).

Se ha explorado un espectro de capacidades distribuidas de los sistemas operativos, como son:

- Arquitectura de comunicaciones: es el software que da soporte a una red de computadoras independientes.

Ofrece soporte para las aplicaciones distribuidas, tales como correo electrónico, transferencia de archivos y acceso

a terminales remotos. Cada computadora tiene su propio SO, y es posible una mezcla heterogénea de computadoras

y SO, siempre que todas las máquinas soporten la misma arquitectura de comunicaciones. Por ejemplo, protocolo

TCP/IP.

- Sistemas operativos de red: es una configuración en la que existe una red de máquinas de aplicación,

generalmente estaciones de trabajo monousuario y uno o más servidores. Los servidores proporcionan servicios o

aplicaciones a toda la red (como almacenamiento de archivos y gestión de impresoras). Cada computador tiene su

propio SO privado. El usuario es consciente de que existen múltiples computadoras independientes y debe tratar

con ellas explícitamente.

- Sistemas operativos distribuidos: un SO común compartido por una red de computadores. Para los usuarios es

como un SO centralizado aunque les proporciona un acceso transparente a los recursos de numerosas

computadoras. Este SO puede depender de una arquitectura de comunicaciones para las funciones básicas de

comunicación.

Proceso cliente/servidor

El entorno cliente/servidor está poblado de clientes y servidores.

- Clientes: son, en general, PC monousuario o puestos de trabajo que ofrecen una interfaz muy amigable para el

usuario final (poseen interfaz gráfica, uso de ventanas y mouse).

- Servidor: ofrece servicios que puede compartir con los clientes (servidores de archivos, servidores de bases de

datos, etc.).

- Red: conjunto de elementos que permiten interconectar clientes y servidores. Ejemplos: LAN (Local Area Network),

WAN (Wide Area Network) e internet.

Aplicaciones cliente/servidor

La característica central de la arquitectura cliente/servidor es la ubicación de las tareas del nivel de aplicación entre clientes

y servidores. Tanto en el cliente como en el servidor, el software básico es un SO que se ejecuta en la plataforma del

hardware. La plataforma y los SO del cliente y del servidor pueden ser diferentes. En tanto que un cliente particular y un

servidor compartan los mismos protocolos de comunicación y soporten las mismas aplicaciones, estas diferencias de niveles

inferiores no son relevantes.

El software de comunicaciones es el que permite interoperar a cliente y servidor (ejemplo, protocolo TCP/IP). En el mejor

de los casos, las funciones reales de la aplicación pueden repartirse entre cliente y servidor de forma que se optimicen los

recursos de la red y de la plataforma.

En mayoría de los sistemas cliente/servidor, se hace un gran hincapié en ofrecer una interfaz de usuario (GUI) que sea fácil

de utilizar y fácil de aprender, pero potente y flexible, en la parte del cliente.

UTN FRC Resumen SOP – Rodrigo Carrión

2 / 6

Aplicaciones de bases de datos

La familia más común de aplicaciones cliente/servidor son aquellas que utilizan base de datos relacionales. En este entorno,

el servidor es, básicamente, un servidor de base de datos. La interacción entre el cliente y el servidor se hace de forma de

transacciones, donde el cliente realiza una petición a la base de datos y recibe una respuesta de aquella.

El servidor es responsable de mantener la base de datos, para cuyo objeto se necesitan sistemas de gestores de bases de

datos. En las máquinas cliente se puede guardar una variedad de aplicaciones diferentes que hagan uso de la base de

datos.

Clases de aplicaciones cliente/servidor

Dentro del entorno general cliente/servidor, se dispone de una gama de posibles implementaciones que dividen el trabajo

entre el cliente y el servidor de manera diferente. Algunas de las opciones principales para las aplicaciones de base de datos

son:

- Procesamiento basado en una máquina central (host): no es realmente un proceso cliente/servidor. Se refiere

más al entorno tradicional de grandes sistemas en el que todo o casi todo el tratamiento se realiza en una

computadora central (mainframes). La interfaz de usuario consiste a menudo en un terminal tonto.

- Procesamiento basado en el servidor (cliente ligero): es el tipo más básico de configuración cliente/servidor.

Consiste en que el cliente es responsable de ofrecer una interfaz de usuario gráfica, mientras casi todo el tratamiento

se hace en el servidor.

- Procesamiento basado en el cliente (cliente pesado): en el otro extremo, casi todo el proceso de la aplicación

puede hacerse en el cliente, con la excepción de las rutinas de validación de datos y otras funciones lógicas de la

base de datos que se realizan mejor en el servidor. Es posiblemente el método cliente/servidor más utilizado

actualmente.

- Procesamiento cooperativo: el proceso de la aplicación se lleva a cabo de forma optimizada, aprovechando la

potencia de las máquinas de cliente y servidora y la distribución de los datos. Es más compleja de instalar y mantener

pero, a largo plazo, puede ofrecer una mayor ganancia de productividad del usuario y una mayor eficiencia de la

red.

Arquitectura cliente/servidor de tres capas

La arquitectura tradicional cliente/servidor implica dos niveles o capas: una capa cliente y una capa servidor. En los últimos

años la arquitectura que más se ha pasado a utilizar es una de tres capas. En esta arquitectura el software de aplicación

está distribuido entre tres tipos de máquinas: una máquina usuario, un servidor de capa intermedia y un servidor final

(backend). La máquina de usuario en esta arquitectura, por lo general es un cliente ligero. Las máquinas de capa intermedia

son esencialmente pasarelas entre los clientes delgados y una variedad de servidores finales de base de datos.

Consistencia de la caché de archivos

Cuando se utiliza un servidor de archivos, el rendimiento de E/S referente a los accesos locales a archivos puede degradarse

sensiblemente por causa del retardo introducido por la red. Para reducir esta carga, los sistemas individuales pueden usar

caché de archivos para almacenar los registros a los que se ha accedido hace poco. El uso de una caché local debe reducir

el número de accesos a servidores remotos.

Cuando las caches contienen siempre copias exactas de los datos remotos, se dice que las caches son consistentes.

Puede ser posible que lleguen a ser inconsistentes cuando se cambian los datos remotos y no se desechan las copias

obsoletas correspondientes de las caches locales. El problema de mantener actualizadas las copias de las caches locales

se conoce como problema de consistencia de caches.

El método más simple para la consistencia de caches consiste en emplear técnicas de bloqueo de archivos para prevenir el

acceso simultáneo a un archivo por parte de más de un cliente (menor rendimiento y flexibilidad).

Un método más potente es que cualquier número de procesos remotos puede abrir un archivo para la lectura y crear su

propia caché del cliente. Pero cuando la solicitud al servidor es de abrir un archivo para escritura y otros procesos tienen el

mismo archivo abierto para lectura, el servidor realizada dos acciones. En primer lugar, notifica al proceso escritor que,

aunque puede mantener una caché, debe reescribir todos los bloques alterados inmediatamente después de actualizarlos.

UTN FRC Resumen SOP – Rodrigo Carrión

3 / 6

Puede haber muchos clientes de este tipo. En segundo lugar, el servidor notifica a todos los procesos lectores que tengan

abierto el archivo que sus copias en caché ya no son válidas.

Middleware

Como gran parte de las ventajas de la filosofía cliente/servidor viene dadas por su modularidad y por la capacidad de

combinar plataformas y aplicaciones para ofrecer soluciones comerciales, debe resolverse este problema de interoperación.

Para alcanzar las ventajas reales de la filosofía cliente/servidor, los desarrolladores deben disponer de un conjunto de

herramientas que proporcionen una manera uniforme de acceder a los recursos del sistema en todas las plataformas.

La forma más común de cumplir con este requisito es utilizar interfaces estándares de programación y protocolos que se

sitúen entre la aplicación y el software de comunicación y el sistema operativo. Dichas interfaces y protocolos estándares

han venido a llamarse middleware.

Existe una gran variedad de paquetes de middleware, desde los muy simples a los muy complejos. Todos ellos tienen en

común la capacidad de ocultar las complejidades y diferencias de los diferentes protocolos de red y sistemas operativos.

Middleware: conjunto de controladores, API y software adicional que mejoran la conectividad entre una aplicación cliente y

un servidor, brindando acceso uniforme a los recursos del sistema a través de todas las plataformas.

Ventajas:

- Permite construir aplicaciones que utilicen el mismo método para acceder a los datos, independientemente de su ubicación.

- Facilita la implementación de la aplicación en diferentes tipos de servidores y estaciones de trabajo.

Arquitectura middleware

La finalidad básica del middleware es hacer que una aplicación

o usuario acceda a una serie de servicios del servidor sin

preocuparse de las diferencias entre servidores.

Aunque hay una amplia variedad de productos middleware, estos

se basan normalmente en uno de dos mecanismos básicos: el

paso de mensajes o las llamadas a procedimientos remotos.

Desde un punto de vista lógico, el middleware permite el procesamiento distribuido. El sistema distribuido entero puede

verse como un conjunto de aplicaciones y recursos disponibles para los usuarios. Todas las aplicaciones operan sobre una

interfaz uniforme de programación de aplicaciones (API). El middleware, que atraviesa todas las plataformas clientes y

servidoras, es el responsable de encaminar las peticiones de los clientes al servidor apropiado.

Paso distribuido de mensajes

En los sistemas de proceso distribuido reales se suele dar el caso de que los computadores no compartan una memoria

principal; cada una es un sistema aislado. Por lo tanto, no es posible emplear técnicas de comunicación entre procesadores

basadas en memoria compartida, como son los semáforos y el uso de un área de memoria común. En su lugar, se usan

técnicas basadas en el paso de mensajes.

Con este método, un proceso cliente solicita un servicio y envía, a un proceso servidor, un mensaje que contiene una petición

de servicio. El proceso servidor satisface la petición y envía un mensaje de respuesta. En su forma más simple, solo se

necesitan dos funciones:

- Send: la utiliza el proceso que quiere enviar el mensaje. Sus parámetros son el identificador del proceso de destino

y el contenido del mensaje.

- Receive: la utiliza el proceso receptor para anunciar su intención de recibir el mensaje, designado un área de

almacenamiento intermedio e informando al módulo de paso de mensajes.

La transferencia de mensajes consiste en:

1. El módulo de paso de mensajes construye el mensaje (destinatario y datos).

UTN FRC Resumen SOP – Rodrigo Carrión

4 / 6

2. Se entrega el mensaje por el medio de transmisión.

3. En el destino, el servicio de comunicación se lo entrega al módulo de paso de mensajes.

4. Se examina el ID del proceso y se almacena el mensaje en el buffer del proceso.

Los procesos hacen uso de los servicios de un módulo de pasos de mensajes, el cual sería un middleware.

Servicio fiable vs. servicio no fiable

- Servicio fiable:

- Garantiza la entrega de los datos.

- Utiliza un protocolo de transporte fiable y llevaría a cabo control de errores, acuse de recibo, retransmisión

y reordenación de mensajes desordenados.

- No se informa si se entregó con éxito (puede usar acuse de recibo solamente para saber si el mensaje se

ha entregado).

- Servicio no fiable:

- Simplemente se envía el mensaje al destinatario por la red.

- Utiliza un protocolo de transporte no fiable.

- No se informa si se entregó con éxito.

- Servicio muy simple y rápido (baja sobrecarga de procesamiento y de comunicaciones del servicio de paso

de mensajes).

- Si se requiere fiabilidad, la aplicación debería garantizarla.

Bloqueante vs no bloqueante

- Primitivas no bloqueantes (asíncronas):

- Cuando se realiza un send o receive no se suspende el proceso.

- Cuando un proceso emite un send, el SO le devolverá el control al proceso cuando ponga en cola el mensaje

de salida.

- Para un receive, se informa mediante una interrupción o este puede comprobar periódicamente su estado.

- Ofrecen un empleo eficiente y flexible del servicio de paso de mensajes.

- Los programas que usan estas primitivas son difíciles de probar y de depurar.

- Primitivas bloqueantes (síncronas):

- Cuando se realiza un send no se devuelve el control al proceso emisor hasta que el mensaje se haya

trasmitido o hasta que el mensaje se haya enviado y obtenido un acuse de recibo.

- Cuando se realiza un receive no devuelve el control al proceso hasta que el mensaje se haya ubicado en el

buffer asignado.

Llamadas a procedimiento remoto (RPC)

Es un método común muy aceptado actualmente para encapsular la comunicación en un sistema distribuido. Lo fundamental

de la técnica es permitir que programas de máquinas diferentes interactúen mediante la semántica de llamadas/retornos a

simples procedimientos, como si los dos programas estuvieran en la misma máquina.

Las ventajas de este método son:

- La llamada al procedimiento es una abstracción muy usada, aceptada y bien comprendida.

- Permiten que las interfaces remotas se especifiquen como un conjunto de operaciones.

El mecanismo de las llamas a procedimientos remotos puede considerarse como un refinamiento del paso de mensajes

fiables y bloqueante.

El programa llamador realiza una llamada normal a un procedimiento con los parámetros situados en su máquina. Por

ejemplo: CALL P(X, Y) donde P es el nombre del procedimiento, X son los argumentos pasados e Y son los valores

devueltos.

El espacio de direcciones del llamador debe incluir un procedimiento P de presentación o tonto, o bien debe enlazarse

dinámicamente en el momento de la llamada. Este procedimiento crea un mensaje que identifica al procedimiento llamado

UTN FRC Resumen SOP – Rodrigo Carrión

5 / 6

e incorpora los parámetros. Envía el mensaje y queda esperando la respuesta. Cuando se recibe la respuesta, el

procedimiento de presentación retorna al programa llamador, proporcionándole los valores devueltos.

Paso de parámetros

Por valor: los parámetros simplemente se copian en el mensaje y se envían al sistema remoto.

Por referencia: difícil de implementar. Hace falta un único puntero para cada objeto.

Enlace cliente/servidor

El enlace especifica la forma en que se establecerá la relación entre un procedimiento remoto y el programa llamador. Un

enlace se forma cuando dos aplicaciones han establecido una conexión lógica y se encuentran preparadas para intercambiar

órdenes y datos.

Enlaces no persistentes: suponen que la conexión lógica se establece entre dos procesos en el momento de la

llamada remota y que la conexión lógica se pierde tan pronto como se devuelven los valores. Como mantener la

conexión consume recursos, con este enfoque se trata de aprovecharlos.

Enlaces persistentes: una conexión establecida para una llamada a un procedimiento remoto se mantiene después

de que el procedimiento termina. La conexión puede utilizarse para futuras llamadas a procedimiento remoto. Si

transcurre un periodo de tiempo determinado sin actividad en la conexión, la misma finaliza.

Sincronismo vs asincronismo

Conceptos análogos a los de mensajes bloqueantes y no bloqueantes.

RPC síncronas: el proceso llamante espera hasta que el proceso devuelva el valor.

RPC asíncronas: no bloquean al llamante y permiten un mayor grado de paralelismo.

Agrupaciones (Clusters)

Cluster: es un grupo de computadoras interconectadas que trabajan juntas como un recurso de proceso unificado que

puede crear la ilusión de ser una única máquina. Son una alternativa al SMP como método de proporcionar alto rendimiento

y alta disponibilidad.

Nodo: forma de nombrar a cada computadora de un cluster.

Ventajas:

Escalabilidad total: es posible crear agrupaciones grandes que sobrepasen con creces las máquinas autónomas

más grandes. Pueden tener docenas o cientos de máquinas multiprocesador.

Escalabilidad incremental: una agrupación se configura de tal forma que es posible añadir sistemas nuevos a la

agrupación en pequeños incrementos. Un cluster pequeño se puede expandir sin muchos problemas.

Alta disponibilidad: como cada uno de los nodos de la agrupación es una computadora autónoma, el fallo de un

nodo no implica la pérdida de servicio.

Mejor relación rendimiento/precio: es posible armar una agrupación con una potencia de proceso igual o mayor

que una máquina grande, a un precio mucho más bajo.

Configuraciones de clusters

Clasificación según si comparten disco o no:

Sin disco compartido: los nodos se conectan mediante enlaces de alta velocidad (ejemplo: LAN). Si cada

computadora es multiprocesador se mejora el rendimiento y la disponibilidad.

Con disco compartido: existe un subsistema de disco compartido entre los nodos del cluster (tecnología RAID).

Clasificación según la funcionalidad:

UTN FRC Resumen SOP – Rodrigo Carrión

6 / 6

Método de agrupación Descripción Ventajas Limitaciones

Espera pasiva En caso de fallo en el servidor primario, el servidor secundario toma el control.

Sencillo de implementar. Alto costo porque el servidor secundario no está accesible para procesar tareas.

Secundaria activa El servidor secundario también se utiliza para procesar tareas.

Costo reducido. Incrementa la complejidad.

Servidores separados

Los servidores contienen sus propios discos. Los datos se copian continuamente del servidor primario al secundario.

Alta disponibilidad.

Incrementa la sobrecarga en el servidor y el uso de la red debido a las operaciones de copia.

Servidores conectados a discos

Los servidores están conectados a los mismos discos, pero cada servidor tiene sus propios discos. Sin un servidor falla, sus discos pasan a estar a cargo de otro servidor.

Reduce la sobrecarga en el servidor y el uso de la red debido a la eliminación de las operaciones de copia.

Necesita tecnología RAID o de discos espejo para compensar el riego de fallo de disco.

Servidores compartiendo discos

Varios servidores comparten acceso simultáneo a los discos.

Baja la sobrecarga en el servidor y uso de la red. Reduce el riesgo de caída por fallo de disco.

Requiere software de gestión de bloqueos. Se utiliza con RAID o discos espejo.

Conceptos de diseño de los sistemas operativos

Gestión de fallos

La forma en que se gestionarán los fallos depende del método de agrupación utilizado. En general, para tratar los fallos se

pueden seguir dos enfoques:

Agrupación de alta disponibilidad: ofrece una alta probabilidad de que todos los recursos estén siendo utilizados.

Si se produce un fallo, cualquier consulta perdida, si se retoma, será atendida por un computador diferente de la

agrupación.

Agrupación tolerante a fallos: garantiza que los recursos siempre van a estar disponibles. Esto se logra mediante

el uso de discos compartidos redundantes y de mecanismos de respaldo para transacciones sin confirmar y

transacciones completadas y confirmadas.

La función de intercambiar una aplicación y los datos de un sistema fallido por un sistema alternativo en una agrupación se

denomina resistencia a fallos (failover). Una función afín a la anterior es la restauración de aplicaciones y de datos al

sistema original una vez que se ha reparado; esto se denomina restauración de fallos (failback).

Equilibrio de carga

Una agrupación requiere una capacidad eficaz para balancear la carga entre los computadores disponibles. Cuando se

añade una nueva computadora a la agrupación, la función de equilibrio de carga debería incluir automáticamente esta

computadora en la planificación de aplicaciones.

Proceso paralelo

Compilador paralelo: un compilador paralelo determina, en tiempo de compilación, que partes de la aplicación se

pueden ejecutar en paralelo. Estas se dividen para asignarlas a distintas computadoras de la agrupación.

Aplicaciones paralelas: el programador diseña la aplicación desde el principio para ejecutar en una agrupación y

utiliza el paso de mensajes para mover datos entre los nodos.

Computación paramétrica: se puede utilizar si el centro de la aplicación es un algoritmo o programa que debe

ejecutarse muchas veces, cada vez con un conjunto diferente de condiciones o parámetros.