You are on page 1of 160

Estimado alumno/a

El Técnico Superior en Análisis de Sistemas es un profesional


que está capacitado para analizar, evaluar y emitir una opinión
técnica respecto de un software determinado, ya sea que se trate
de Sistemas Operativos, programas-producto o bien una aplicación
específica.

Por ello, una de las competencias específicas de este perfil es


conocer los Sistemas operativos, saber las bases y la metodología
adecuada para trabajar con los distintos tipos de Sistemas de
software de base operativos.

Es, en este espacio curricular donde nos propondremos alcanzar lo


expuesto anteriormente.

Le deseamos éxitos en el recorrido de esta materia.

¡Bienvenidos!

Equipo de Cátedra.
OBJETIVOS
▪ Identificar la estructura, componentes y objetivos que deben de incluir los
sistemas operativos.

▪ Clasificar los distintos tipos y estructuras de los sistemas operativos.

▪ Comprender los conceptos básicos sobre los sistemas operativos, sus


propósitos, los servicios que brinda y su ejecución.

▪ Explicar el funcionamiento de los sistemas operativos.

▪ Adquirir vocabulario técnico y utilizarlo con precisión.


CONTENIDOS
UNIDAD 1: INTRODUCCION A SISTEMAS OPERATIVOS
Estructura de una computadora. Componentes de una computadora.
Clasificación del software. Definición de Sistemas operativos. Funciones
esenciales del Sistema operativo. Clasificación de los Sistemas operativos.
Evolución de los Sistemas operativos.

UNIDAD 2: SISTEMAS OPERATIVOS


Conceptos básicos de los Sistemas operativos. Interfaz. Procesos. Archivos.
Monitor residente. Funciones del Sistema operativo. Administración del
procesador. Administración de la memoria. Administración de las unidades de
entrada/salida. Administración de trabajos de impresión. Administración del
Sistema de archivos. Administración de la interfaz con el usuario. Estructura del
Sistema operativo. Sistemas monolíticos. Sistemas con capas. Sistemas de
máquina virtual. Sistemas cliente-servidor. Sistemas distribuidos. Sistemas
operativos de dispositivos móviles, Android, iOS y Windows Phone. Estudio de los
Sistemas operativos más usados en TV Inteligentes (Smart TV).

UNIDAD 3: GESTION DE PROCESOS


Programa y proceso. Estados de un proceso. Un modelo de procesos con dos
estados. Un modelo de procesos con tres estados. Un modelo de procesos con
cinco estados. Transiciones de estados de los procesos. Razones para la
suspensión de procesos. Razones para la terminación de procesos. Bloque de
control de procesos. Planificación de procesos. Tipos de planificación. Objetivos
de las políticas de planificación. Medidas en la planificación. Algoritmos de
planificación. Simulador de procesos, CPU Simulator, de Android. Aplicaciones
que permitan la administración de procesos en ejecución, en tiempo real, en
dispositivos móviles. Aplicaciones de dispositivos móviles que permitan el
monitoreo de procesos.

UNIDAD 4: GESTION DE MEMORIA


La memoria. Jerarquía de memorias. Gestor de memoria. Mono programación.
Multiprogramación. Partición fija. Partición dinámica. Paginación simple.
Segmentación simple. Memoria virtual.

Administración de memoria en dispositivos móviles. Aplicaciones que permiten el


monitoreo del uso de la memoria en tiempo real.

UNIDAD 5: SISTEMAS DE ARCHIVOS


Archivos. Nombres. Estructura. Tipos. Acceso. Atributos. Operaciones con
archivos. Directorios. Sistemas de directorios jerárquicos. Nombres de camino o
ruta de acceso. Operaciones con directorios. Implementación del Sistema de
archivos. Implementación de los archivos. Implementación de directorios.
Administración del espacio en disco. Tamaño de bloque. Control de bloques
libres. Estudio de diferentes administradores de archivos, en Windows, iOS y
Android.

UNIDAD 6: ADMINISTRACION DE E/S


Dispositivos de E/S. Controladores. E/S mapeada en memoria. Acceso directo a
memoria. Interrupciones. Principios del software de E/S. Objetivos. Estructura.
Componentes. Discos. Hardware para discos. Algoritmos de planificación del
brazo. FCFS. SSF. SCAN o ascensor.

Métodos de entrada y salida de los dispositivos móviles, conexiones alámbricas e


inalámbricas. Conexiones posibles entre dispositivos móviles, notebook, Smart TV,
etc.
A continuación, presentaremos un esquema acerca de la funcionalidad del
Manual de Cátedra
El Manual contiene una serie de indicaciones gráficas que pretendemos te ayuden
a identificar con facilidad sus distintos componentes y a organizar las actividades
de estudio:

LECTURAS BIBLIOGRÁFICAS OBLIGATORIAS

Indica la lectura del material bibliográfico obligatorio seleccionado por la


cátedra.

ATENCION

Señala la presencia de conceptos claves de la unidad didáctica estudiada.

ACTIVIDADES DE APRENDIZAJE OBLIGATORIAS

Indica la realización de actividades de aprendizaje obligatorias que serán


enviadas al tutor para ser evaluadas.

ACTIVIDADES DE APRENDIZAJE OPTATIVAS

Indica la realización de actividades de aprendizajes optativas. No requieren


ser enviadas al tutor para ser evaluadas

VISUALIZACIÓN DE MATERIAL AUDIOVISUAL

Indica la observación de proyecciones. Representa un instrumento


mediador y facilitador, que aporta una base concreta para el pensamiento
conceptual y contribuye en el aumento de los significados

ACTIVIDADES GRUPALES Y COLABORATIVAS

Promueven el intercambio de ideas y conocimientos de manera grupal a


través de la interacción entre los miembros que componen un grupo.

FORO DE DEBATE

Representa un medio de comunicación, de consulta y debate, en la


plataforma virtual, donde los alumnos pueden intercambiar, sugerir,
proponer, discutir y aportar información

ENLACES A SITIOS WEB

Indica enlaces que ayudan a navegar por la web. Remiten con rapidez a
una información solicitada.
UNIDAD 1
INTRODUCCION A LOS SISTEMAS
OPERATIVOS

INTRODUCCION
Una computadora sin el software es sólo una masa metálica sin utilidad. El software
para computadoras puede clasificarse en general en dos clases: los programas de
Sistema, que controlan la operación de la computadora en sí y los programas de
aplicación, los cuales resuelven los problemas de los usuarios. El programa
fundamental de todos los programas de Sistema es el Sistema Operativo, que
controla todos los recursos de la computadora y, además, proporciona la base
sobre la cual se pueden diseñar los programas de aplicación. Es decir que para
que una computadora pueda hacer funcionar un programa informático
(aplicación o software), debe contar con la capacidad necesaria para realizar
cierta cantidad de operaciones preparatorias que puedan garantizar el
intercambio entre el procesador, la memoria y los recursos físicos (periféricos).

El Sistema Operativo tiene como principal objetivo incrementar la productividad de


usuarios y el sistema de procesamiento, actuando como interface entre los usuarios
y los recursos, brindando los servicios necesarios para hacer un uso eficiente del
equipamiento disponible y relegarlo de programar aquellas funciones típicas y
comunes para cualquier instalación informática. Además, tiene como objetivo
independizar a los programadores de tareas rutinarias y complejas como
administración de unidades periféricas, administración del tiempo de la CPU, etc.

El conocimiento de los sistemas operativos le permitirá al futuro egresado de la


Tecnicatura Superior en Análisis de Sistemas diseñar e implementar aplicaciones
para aprovechar los recursos eficientemente, y capacitarse para analizar, evaluar
y emitir una opinión técnica respecto de un software determinado, ya sea que se
trate de Sistemas Operativos, programas-producto o bien una aplicación
específica.

Para estudiar y comprender este módulo, es necesario, primero, repasar los


conceptos que se aprendieron en la asignatura Arquitecturas de las
Computadoras; y por ello, iniciamos esta unidad haciendo una breve
recapitulación de los mismos.

Luego, desarrollaremos de manera introductoria los conceptos básicos sobre las


funciones; la clasificación, las arquitecturas de los Sistemas Operativos en general;
como asimismo sobre su evolución histórica.

ESTRUCTURA DE UNA COMPUTADORA


Una definición general de computadora es: "conjunto integrado de algoritmos y
estructuras de datos capaz de almacenar y ejecutar programas".

En una computadora se ingresan datos a través de los dispositivos de entrada


(Input), se procesan con la ayuda de un programa, y se obtiene información por
medio de los dispositivos de salida (Output). En una computadora se distinguen dos
partes: Hardware y Software. Los componentes físicos de una computadora, que
pueden ser de diferente tamaño, color y forma dependiendo de cada fabricante,
constituyen lo que se llama Hardware (Fierros o Ferretería). El Hardware por sí sólo
es inútil, es equivalente a un taxi estacionado, necesita un conductor que lo
conduzca.

En una computadora, ésta guía la provee el Sistema Operativo. Se denomina


Software al conjunto de programas formado por el Sistema Operativo, los
compiladores e intérpretes, más los programas de los usuarios. Las computadoras
que se usan habitualmente están compuestas por componentes físicos como: la
Unidad Central de Procesos (CPU) o procesador que contiene a la Unidad
Aritmético Lógica (UAL), la Unidad de Control (UC) y la Memoria Principal (MP), los
dispositivos de Entrada/Salida, y la Memoria externa de almacenamiento
permanente, cuya estructura es:

La computadora debe guardar datos, programas, procesar, generar la


información, pero el almacenamiento es físico mientras que el ser humano guarda
en su memoria imágenes propias, interpretadas por él mismo.

COMPONENTES DE UNA COMPUTADORA


La Motherboard (Placa Madre):

Es una tarjeta en donde se ubican los componentes principales de una


computadora, contiene el microprocesador, la memoria y los otros circuitos
fundamentales para el funcionamiento de la PC (Personal Computer).

El Microprocesador:

También llamado procesador o CPU, constituye el cerebro de la computadora en


una PC, es el que controla y realiza las operaciones con los datos. Podemos
distinguir dos componentes:

La Unidad de Control (UC):


Coordina las actividades de la computadora y determina que operaciones se
realizan y en qué orden. b) La unidad Aritmético Lógica (UAL) que realiza las
operaciones aritméticas (suma, resta, etc.) y comparaciones.

La Memoria Principal:

También llamada Memoria Central, se utiliza para almacenar en forma temporaria


los datos e instrucciones de los programas que utilizan esos datos. A esta memoria
se la conoce como memoria RAM (Random Access Memory, en castellano
Memoria de Acceso Aleatorio). Sus características principales son:

• Es de carácter temporario, es decir cuando se apague el computador se


perderá la información allí almacenada; o sea es volátil.

• Tiene un tiempo de acceso rápido. Se mide en nanosegundos (10-9seg).

• Tiene un costo más alto comparado con los medios de almacenamiento


permanente.

Dos conceptos importantes relacionados con la memoria son: dirección de


memoria y contenido. Una dirección de memoria es una posición relativa en la
memoria RAM, a la que se puede acceder para almacenar o modificar
información. El contenido es la información almacenada en una determinada
posición. Otros tipos de memoria:

• ROM (ReadOnlyMemory), es decir memoria de sólo lectura. Se encuentra


pregrabada por el fabricante y contiene instrucciones para el manejo de ciertos
dispositivos u operaciones principales de la PC.

• CACHE: es un tipo de memoria ultrarrápida que permite una comunicación


mucho más eficiente que la memoria RAM. Esta memoria se ideó cuando los
microprocesadores se hicieron muy rápidos y la memoria convencional no era lo
suficientemente rápida para acompañar dicha velocidad.

Dispositivos de Entrada/Salida o periféricos:

Son los que permiten la comunicación entre el usuario y la computadora. Los


dispositivos de entrada permiten la introducción de órdenes y datos a la memoria
para su procesamiento. Los más comunes son: teclado, scanner, mouse, lectores
de código de barras, micrófonos, digitalizadores, etc. Los dispositivos de salida son
aquellos que nos permiten presentar el resultado del procesamiento de los datos.
Por ejemplo: la pantalla (CRT) o monitor, impresoras, plotters, parlantes, etc. Existen
también dispositivos que cumplen ambas funciones como los módems y los medios
de almacenamiento (discos rígidos, disquetes, unidades regrabables de CD-ROM,
etc.)
CLASIFICACION DEL SOFTWARE

Si bien esta distinción es, en cierto modo, arbitraria, y a veces confusa, a los fines
prácticos se puede clasificar al software en tres grandes tipos:

Software de base o Sistema:

Su objetivo es desvincular adecuadamente al usuario y al programador de los


detalles del Sistema informático en particular que se use, aislándolo especialmente
del procesamiento referido a las características internas de: memoria, discos,
puertos y dispositivos de comunicaciones, impresoras, pantallas, teclados, etc. El
software de Sistema procura al usuario y al programador adecuadas interfaces de
alto nivel, controladores, herramientas y utilidades de apoyo que permiten el
mantenimiento del Sistema global. Incluye entre otros:

• Sistemas operativos

• Controladores de dispositivos

• Herramientas de diagnóstico

• Herramientas de Corrección y Optimización

• Servidores

• Utilidades

• Software de programación: Es el conjunto de herramientas que permiten al


programador desarrollar programas informáticos, usando diferentes alternativas y
lenguajes de programación, de una manera práctica. Incluyen básicamente:

– Editores de texto

– Compiladores

– Intérpretes

– Enlazadores

– Depuradores

– Entornos de Desarrollo Integrados (IDE): Agrupan las anteriores herramientas,


usualmente en un entorno visual, de forma tal que el programador no necesite
introducir múltiples comandos para compilar, interpretar, depurar, etc.
Habitualmente cuentan con una avanzada interfaz gráfica de usuario (GUI).

Software de aplicación:
Es aquel que permite a los usuarios llevar a cabo una o varias tareas específicas, en
cualquier campo de actividad susceptible de ser automatizado o asistido, con
especial énfasis en los negocios. Incluye entre muchos otros:

Aplicaciones para Control de Sistemas y automatización industrial

• Aplicaciones ofimáticas

• Software educativo

• Software empresarial

• Bases de datos

• Telecomunicaciones (por ejemplo, Internet y toda su estructura lógica)

• Videojuegos

• Software médico

• Software de cálculo Numérico y simbólico.

• Software de diseño asistido (CAD)

• Software de control numérico (CAM)

DEFINICION DE SISTEMAS OPERATIVOS

Se denomina Sistema operativo al conjunto de programas encargados de


administrar los recursos de las computadoras, involucrando el manejo de
todos los elementos de hardware de un Sistema informático, es decir la
CPU y los dispositivos periféricos. El Sistema operativo es uno de los
componentes más importantes en un ambiente informático, quizás el
determinante del éxito de un proyecto, ya que es el que determina los
estándares (la compatibilidad) para todos los utilitarios, lenguajes y
programas de aplicación que se ejecutarán allí. En síntesis, todos los
programas que el usuario quiera ejecutar deben cumplir con la condición
de respetar la compatibilidad para con el Sistema operativo que les
brinda soporte. El conjunto de programas que forman el Sistema operativo
normalmente reside en forma permanente en un medio magnético de
acceso directo y desde allí se lo carga a la memoria principal (RAM)
cuando se enciende la computadora
Los Sistemas operativos llevan a cabo dos funciones que, en esencia, no
tiene relación entre sí. Por ello, según con la persona que hable, usted
podrá escuchar más información acerca de una función u otra. Sería
conveniente en este momento analizar ambas funciones:

El Sistema operativo desde el punto de vista de los recursos

Un punto de vista alternativo sostiene que el Sistema operativo está ahí para
controlar todas las piezas de un complejo Sistema. Las computadoras constan de
procesadores, memorias, discos, unidades de cinta magnética, interfaces de red,
impresoras y una amplia gama de otros dispositivos de E/S para los varios
programas que compiten por ellos. Por ejemplo, imagínese lo qué ocurriría si tres
programas que están en ejecución en cierta computadora intentan imprimir su
salida en forma simultánea en la misma impresora. Los primeros renglones de
impresión serían del programa 1, los siguientes del programa 2, luego, algunos del
programa 3, etc. El resultado sería un caos. El encargado de poner orden a este
caos es el Sistema operativo, para ello, almacena en el disco toda la salida
destinada a la impresora. Resumiendo, este punto de vista del Sistema operativo
sostiene que su principal tarea es la de llevar un registro de la utilización de los
recursos, dar paso a las solicitudes de recursos, llevar la cuenta de su uso y mediar
entre las solicitudes en conflicto de los distintos programas y usuarios.

El Sistema operativo desde el punto de vista de los usuarios

La arquitectura a nivel de lenguaje de máquina (conjunto de instrucciones,


organización de la memoria, E/S y estructura del bus) de la mayoría de las
computadoras es primitiva y difícil de programar, particularmente la E/S. Por
ejemplo, el programador común no desea interiorizarse en la programación de los
discos flexibles, en lugar de esto, el programador desearía una abstracción sencilla
y de alto nivel con la cual trabajar. En el ejemplo de los discos flexibles, una
abstracción típica es que el disco contenga una colección de archivos, cada uno
de ellos con un nombre. El programa que oculta la verdad acerca del hardware al
programador y presenta una agradable y sencilla visión de los archivos con su
nombre, los cuales se pueden leer o escribir, es el Sistema operativo. En síntesis,
desde esta perspectiva, la función del Sistema operativo es presentar al usuario el
equivalente de una interfaz o máquina virtual que sea más fácil de programar que
el hardware subyacente.
CLASIFICACION DE LOS SISTEMAS OPERATIVOS
Según los servicios

Monousuarios

Los Sistemas operativos monousuarios son aquellos que soportan a un usuario a la


vez, sin importar el número de procesadores que tenga la computadora o el
número de procesos o tareas que el usuario pueda ejecutar en un mismo instante
de tiempo. Las computadoras personales típicamente eran Monousuarios.

Multiusuarios

Los Sistemas operativos multiusuarios son capaces de dar servicio a más de un


usuario a la vez, ya sea por medio de varias terminales conectadas a la
computadora o por medio de sesiones remotas en una red de comunicaciones.
No importa el número de procesadores en la máquina ni el número de procesos
que cada usuario puede ejecutar simultáneamente.

Monotareas

Los Sistemas monotareas son aquellos que sólo permiten una tarea a la vez por
usuario. Puede darse el caso de un Sistema multiusuario y monotarea, en el cual se
admiten varios usuarios al mismo tiempo, pero cada uno de ellos puede estar
haciendo solo una tarea a la vez.

Multitareas

Un Sistema operativo multitarea es aquél que le permite al usuario estar realizando


varias labores al mismo tiempo. Por ejemplo, puede estar editando el código fuente
de un programa durante su depuración mientras compila otro programa, a la vez
que está recibiendo correo electrónico en un proceso en background. Es común
encontrar en ellos interfaces gráficas orientadas al uso de menús y el ratón, lo cual
permite un rápido intercambio entre las tareas para el usuario, mejorando su
productividad.

Uniprocesador

Un Sistema operativo uniproceso es aquél que es capaz de manejar solamente un


procesador de la computadora, de manera que si la computadora tuviese más de
uno le sería inútil. El ejemplo más típico de este tipo de Sistemas es· el DOS y MacOS.

Multiprocesador

Un Sistema operativo multiproceso se refiere cuando el número de procesadores


del Sistema es más de uno y éste es capaz de usarlos para distribuir su carga de
trabajo. Generalmente estos Sistemas trabajan de dos formas: simétrica o
asimétricamente. Cuando se trabaja de manera asimétrica, el Sistema operativo
selecciona a uno de los procesadores el cual jugará el papel de procesador
maestro y servirá como pivote para distribuir la carga a los demás procesadores,
que reciben el nombre de esclavos. Cuando se trabaja de manera simétrica, los
procesos o partes de ellos (threads) son enviados indistintamente a cualquiera de
los procesadores disponibles, teniendo, teóricamente, una mejor distribución y
equilibrio en la carga de trabajo bajo este esquema. Existen aplicaciones que
fueron hechas para correr en Sistemas mono proceso que no toman ninguna
ventaja a menos que el Sistema operativo o el compilador detecte secciones de
código paralelizable, los cuales son ejecutados al mismo tiempo en procesadores
diferentes. Por otro lado, el programador puede modificar sus algoritmos y
aprovechar por sí mismo esta facilidad, pero esta última opción la mayoría de las
veces es costosa en horas hombre y muy tediosa, obligando al programador a
ocupar tanto o más tiempo a la paralelizacíón que a elaborar el algoritmo inicial.

Según la capacidad de procesamiento


Monotarea

Únicamente pueden controlar la ejecución de un programa a la vez. Simplemente


cargan y ubican en la memoria principal la aplicación en curso, poniendo a su
disposición todos los recursos del Sistema. Una vez concluida la aplicación, podrá
ejecutarse un nuevo programa. El Sistema más difundido en esta categoría es sin
duda: MS~DOS.

Multitarea (Multitasking)
Permiten la ejecución de más de un programa "al mismo tiempo". Este tipo de
Sistemas operativos permite cargar en la memoria principal diversas aplicaciones
(programas), proporcionando a cada una la posibilidad de utilizar todos los
recursos disponibles en la computadora. Controlan que la unidad central de
proceso (CPU) ejecute sucesivamente porciones de cada uno de los programas
que están corriendo en la memoria de manera que el usuario percibe que se
ejecutan simultáneamente. Ejemplos de Sistemas operativos multitarea son: UNIX
(el más difundido y estándar), OS/2 de 18M, WindoW5 2000 y WindoW5 9x de
Microsoft, entre otros.

Redes

Administran los servidores (de archivo, de impresión y de comunicaciones) de las


redes de área local (LAN). Entre ellos los más difundidos son: Netware de Novell,
LAN Manager de IBM y WindoW5 NT y 2000 de Microsoft.

ACTIVIDAD DE APRENDIZAJE OPTATIVA Nº1

Investigar sobre el sistema operativo instalado en tu computadora,


teléfono celular o tablet e indica en que sección de la clasificación
señalada se encuadra.

EVOLUCION DE LOS SISTEMAS OPERATIVOS


Los Sistemas operativos fueron evolucionando a través de los años, y dado que han
estado relacionados históricamente con la arquitectura de las computadoras en
las cuales se ejecutan, estudiaremos la evolución de los S.O (Sistemas operativos)
haciendo una estrecha relación con las distintas generaciones de las
computadoras. La primera computadora digital real fue diseñada por el
matemático inglés Charles Babbage (1792 - 1871). Aunque Babbage gastó la
mayor parte de su vida y de su fortuna intentando construir su "máquina analítica",
nunca logró hacerla funcionar adecuadamente porque era un diseño puramente
mecánico y la tecnología de su época no podía producir las ruedas, el engranaje,
levas y otras partes mecánicas con la alta precisión que él necesitaba. Sin tener
que decirlo, la máquina analítica no tuvo un Sistema operativo.

La primera generación

Después de los esfuerzos frustrados de Babbage, se progresó poco en la


construcción de computadoras digitales hasta la segunda guerra mundial,
alrededor de la mitad de la década de 1940, recién se
obtuvieron resultados óptimos en la construcción de máquinas de cálculo
mediante el uso de tubos de vacío. En esos primeros días, un grupo singular de
personas diseñó, construyó, programó, operó y dio mantenimiento a cada
máquina. Toda la programación se realizó en lenguaje de máquina absoluto. Los
lenguajes de programación se desconocían (todavía no existía el lenguaje
ensamblador). Los primeros Sistemas operativos eran extraños. El modo usual de
operación consistía en que el programador firmaba para tener acceso a un bloque
de tiempo en la hoja de registro situada en una pared, después bajaba al cuarto
de máquinas, insertaba su conexión en la computadora y pasaba las siguientes
horas esperando que ninguno de los 20.000 tubos de vacío se fundiera durante la
ejecución de su programa. Al inicio de la década de 1950, la rutina había mejorado
un poco con la introducción de las tarjetas perforadas. Ahora era posible escribir
en tarjetas y leerlas, en vez de utilizar la conexión a la computadora.

La segunda generación: Sistemas de lote

La introducción del transistor a mediados de la década de 1950 cambió la imagen


radicalmente. Las computadoras se volvieron más confiables, en un principio hubo
una clara separación entre los diseñadores, armadores, operadores,
programadores y personal de mantenimiento. Estas máquinas se instalaban en
cuartos de computadoras especialmente acondicionados con aire, con cuerpo
de operadores profesionales para accionarlas. Un programador primeramente
escribiría el programa en papel (en FORTRAN o en lenguaje Ensamblador) y
después lo perforaría en tarjetas. Después llevaría la pila de tarjetas al cuarto de
introducción al Sistema y la entregaría a uno de los operadores, el cual iniciaba el
proceso en la computadora, este proceso desperdiciaba mucho tiempo. Después
de casi una hora de recolectar un lote de trabajos, la cinta se volvía a enrollar y se
llevaba al cuarto de máquinas. Después el operador cargaba un programa
especial (el ancestro del Sistema operativo de-hoy en día), el cual leía el primer
trabajo y lo ejecutaba, la salida se escribía en una segunda cinta, en vez de
imprimirse. Después de terminar cada trabajo, el Sistema operativo leía
automáticamente el siguiente trabajo de la cinta, y comenzaba a ejecutarlo. Los
Sistemas operativos comunes eran FMS (el Sistema monitor del FORTRAN) e IBSYS,
Sistema operativo de IBM de la 7094.

La tercera generación: multiprogramación

Al inicio de la década de 1960 muchos fabricantes de computadoras tenían dos


líneas de trabajo distintas y totalmente incompatibles. Por un lado, existían las
computadoras científicas de gran escala orientadas a las palabras que se
utilizaban para realizar cálculos numéricos de ingeniería. Por el otro lado, estaban
las computadoras comerciales orientadas a los caracteres que se utilizaban para
el ordenamiento de cintas e impresión por parte de bancos y compañías de
seguros.

El Sistema 360 de IBM fue la primera línea importante de computadoras que utilizó
circuitos integrados. La intención era que todo el software, como el Sistema
operativo, tenía que funcionar en todos los modelos. Tenía que correr en Sistemas
pequeños, y en Sistemas muy grandes. Tenía que funcionar adecuadamente en
Sistemas con algunos periféricos y en Sistemas con muchos periféricos. No había
manera de que IBM escribiera una pieza de software que cumpliera todos esos
requisitos conflictivos. El resultado fue un Sistema operativo enorme y
extraordinariamente complejo. Constaba de millones de líneas de lenguaje
ensamblador escritas por miles de programadores, y contenía miles y miles de
errores ocultos. A pesar del tamaño y problemas enormes, OS/360 y los Sistemas
operativos similares de la tercera generación satisfacían a muchos de sus clientes
razonablemente bien. Popularizaron varias técnicas importantes ausentes en los
Sistemas operativos de la segunda generación. La más importante de estas fue la
multiprogramación. Otra característica de importancia en los Sistemas operativos
de la tercera generación era la capacidad de leer trabajos de tarjetas contenidas
en el disco tan pronto como se llevaban al cuarto de computación. Siempre que
se terminaba un trabajo, el Sistema operativo podía cargar uno nuevo del disco en
la partición no vacía y ejecutarlo, esta técnica se denomina manejo por cola de
impresión. Con los Sistemas operativos de la tercera generación, el tiempo entre la
entrega de un trabajo y la devolución de la salida comprendía a menudo varias
horas. En esta generación aparece el primer Sistema de tiempo compartido (CTSS
) serio.

Después del éxito del Sistema CTSS, MIT, Bell laboratories y General electric
decidieron embarcarse en el desarrollo de la "computadora de servicio público",
conocido como MULTICS (Multiplexedinformation and computingservice,
información multicanalizada y servicio de computación). MUL TICS tuvo enorme
influencia sobre otros Sistemas subsiguientes. Otro avance durante la tercera
generación fue el crecimiento de las minicomputadoras. Uno de los científicos que
había trabajado en el proyecto MUL TICS, Ken Thompson, empezó a escribir
después una versión desguarnecida de MUL TICS para un usuario. Este

Sistema se llamó "UNICS" (Uniplexedinformation and computingservice, información


unicanalizada y servicio de computación), pero su ortografía cambio más tarde
por UNIX.
La cuarta generación (1980 -1990): Computadoras personales

Con la creación de los circuitos integrados, chips que contiene miles de transistores
en un centímetro cuadrado de silicio. Dos Sistemas operativos han dominado la
escena de la computadora personal: MS-DOS, escrito por Microsoft, Inc., para la
IBM PC y otras computadoras que utilizan la CPU Intel 8088 y sus sucesores, y UNIX,
que domina en las computadoras personales mayores que hacen uso de CPU
Motorola 68000. Un avance importante que empezó a tomar su sitio a mediados
de la década de 1980 es el desarrollo de redes de computadoras personales que
corren Sistemas operativos en red y Sistemas operativos distribuidos. En un Sistema
operativo de red, los usuarios están conscientes de la existencia de varias
computadoras y pueden conectarse con máquinas remotas y copiar archivos de
una máquina a otra. Cada máquina ejecuta su propio Sistema operativo local y
tiene su propio usuario o grupo de usuarios. Por el contrario, un Sistema operativo
distribuido es aquel que aparece ante sus usuarios como un Sistema tradicional de
un solo procesador, aun cuando esté compuesto por varios procesadores. En un
Sistema distribuido verdadero, los usuarios no deben ser conscientes del lugar
donde su programa se ejecute o el lugar donde se encuentran sus archivos; eso
debe ser manejado en forma automática y eficaz por el Sistema operativo. Los
Sistemas operativos en red no son fundamentalmente diferentes de los Sistemas
operativos uniprocesadores. Sin duda necesitan un controlador de interfaz en red
y algún software de bajo nivel para impulsarlo, así como programas para lograr un
ingreso remoto al Sistema y un acceso remoto del archivo. Los Sistemas operativos
distribuidos reales requieren más que simplemente agregar un poco de código a
un Sistema operativo uniprocesador, ya que los Sistemas operativos distribuidos y
centralizados difieren de manera decisiva.
ACTIVIDAD DE APRENDIZAJE OBLIGATORIA Nº2
Resolver el cuestionario de opciones múltiples, disponible en la sección
de “actividades” de la plataforma virtual.

ACTIVIDAD DE APRENDIZAJE OBLIGATORIA NRO. 3


FORO DE INTERCAMBIO GRUPAL

Consignas:

Intercambie puntos de vista y/u opiniones, en el foro de debate, sobre la


siguiente afirmación:

“En la actualidad estamos en presencia de la quinta generación de los


sistemas operativos”.

VISUALIZACION DE MATERIAL AUDIOVISUAL


Visualización de video clases Nº 1 y 2 disponibles en el Sector

“Recursos” de la Plataforma virtual.

LECTURAS BIBLIOGRAFICAS
WILLAMS STALLINGS (2000). Sistemas Operativos.

Prentice Hall. (Capítulo 1)

ANDREW TANENBAUM (2003). Sistemas Operativos

Modernos. Prentice Hall (capítulo 2)

CARRETERO JESÚS (2001) “Sistemas Operativos. Una visión aplicada”.


Editorial Mc Graw-Hill, 1era Edición. (Capítulo 2)
UNIDAD 2
SISTEMAS OPERATIVOS

Un Sistema operativo es un programa que administra el hardware de una


computadora y también proporciona las bases para los programas de aplicación.
Una característica de los Sistemas operativos es la variedad de formas en que
llevan a cabo estas tareas. Los sistemas operativos de grandes computadoras están
diseñados principalmente para optimizar el uso del hardware. Los sistemas
operativos de computadoras personales están diseñados para ejecutar
aplicaciones de mediana envergadura y negocios. Los sistemas operativos para
computadoras portátiles están diseñados para proporcionar un entorno amigable
y fácil de utilizar. Dado que un sistema operativo es un software grande compuesto
por piezas con entradas, salidas y funciones bien definidas, el alumno estudiará en
esta unidad las distintas estructuras internas de los sistemas operativos,
comenzando previamente a describir los principales componentes y las funciones
más importantes desde el punto de vista de los usuarios y del hardware.

CONCEPTOS BÁSICOS DE LOS SISTEMAS OPERATIVOS

Interfaz

Entre el Sistema operativo y los programas del usuario:

Se define “interfaz” al conjunto de "instrucciones ampliadas" que proporciona el


Sistema operativo. Estas instrucciones ampliadas se conocen como “llamadas al
Sistema”. Las llamadas al Sistema crean, eliminan y utilizan varios objetos del
software, controlados por el Sistema operativo. A cada una de estas llamadas le
corresponde un procedimiento de la biblioteca que pueden llamar los programas
del usuario. Este procedimiento pone los parámetros de la llamada al Sistema en
un lugar específico, como pueden ser los registros de la máquina, para después
ejecutar una instrucción TRAP (un tipo de llamada a procedimiento protegido) para
iniciar el Sistema operativo. Para poner en claro el mecanismo de la llamada a
función, revisemos un ejemplo sencillo, la llamada al Sistema READ que se utiliza en
UNIX y MS-DOS. Tiene tres parámetros: el primero es el archivo por leer, el segundo
determina un almacén (buffer) en el cual colocar los datos del archivo y el tercero
indica el número de bytes por leer. Una llamada a READ desde un programa en C
se vería como:
count= read(file, buffer, nbytes)

Observe que existe una sutil diferencia entre el procedimiento de biblioteca que
puede llamar el usuario "read" y la verdadera llamada al Sistema "READ" llamada
por read. O sea, el usuario simplemente usa read y esta instrucción activa la
llamada al Sistema READ.

Entre el Sistema operativo y el usuario:


La forma de interfaz entre el Sistema operativo y el usuario en la que este escribe
los comandos utilizando un lenguaje de comandos especial se denomina “interfaz
de líneas de comando”. Los Sistemas con interfaces de líneas de comandos se
consideran más difíciles de aprender y utilizar que los de las interfaces gráficas. Sin
embargo, los Sistemas basados en comandos son por lo general programables, lo
que les otorga una flexibilidad que no tienen los Sistemas basados en gráficos
carentes de una interfaz de programación. La interfaz gráfica del usuario que
permite al usuario elegir comandos, iniciar programas y ver listas de archivos y otras
opciones utilizando las representaciones visuales (iconos) y las listas de elementos
del menú. Las selecciones pueden activarse bien a través del teclado o con el
mouse. Para los autores de aplicaciones, las interfaces gráficas de usuario ofrecen
un entorno que se encarga de la comunicación con la computadora. Esto hace
que el programador pueda concentrarse en la funcionalidad, ya que no está sujeto
a los detalles de la visualización ni a la entrada a través del mouse o el teclado.
También permite a los programadores crear programas que realicen de la misma
forma las tareas más frecuentes, como guardar un archivo, porque la interfaz
proporciona mecanismos estándar de control como ventanas y cuadros de
diálogo. Otra ventaja es que las aplicaciones escritas para una interfaz gráfica de
usuario son independientes de los dispositivos: a medida que la interfaz cambia
para permitir el uso de nuevos dispositivos de entrada y salida, como un monitor de
pantalla grande o un dispositivo óptico de almacenamiento, las aplicaciones
pueden utilizarlos sin necesidad de cambios.

Procesos
Un concepto central en todos los Sistemas operativos es el de proceso. (Un proceso
es básicamente, un programa en ejecución). Consta del programa ejecutable, sus
datos y pila, contador y otros registros, además de toda la información necesaria
para ejecutar el programa.

Archivos
La otra gran categoría de llamadas al Sistema se relaciona con el Sistema de
archivos. Como ya mencionamos, una de las funciones principales del Sistema
operativo es ocultar las peculiaridades de los discos y demás dispositivos de E/S,
para presentar al programador un modelo agradable y nítido de archivos
independientes de los dispositivos. Es evidente la necesidad de las llamadas al
Sistema en la creación, eliminación, lectura y escritura de archivos. Antes de poder
leer un archivo, hay que abrirlo; y después de leer un archivo, éste debe cerrarse,
las llamadas permiten hacer todo esto.

Monitor Residente
Al encender la computadora, el procesador carga una porción del Sistema
operativo en la memoria principal, donde residirá en forma permanente mientras
esté encendida la computadora. Esta parte del Sistema operativo se denomina
"monitor residente", "ejecutivo" ó "monitor de control". El monitor residente se
encarga de ir trayendo a la memoria los módulos (programas) necesarios del
Sistema operativo para cada fase del trabajo en ejecución. Es decir, los módulos
no incluidos en el monitor residente están en un medio magnético externo (disco),
donde reside el Sistema operativo. Se cargan en la memoria cuando son
convocados por el monitor residente para efectuar una tarea ' especial que él no
puede resolver.

Tareas del monitor residente:


• Supervisar la ejecución de los programas.

• Controlar las funciones de entrada y salida de cada programa y ceder el


control de un programa al siguiente de acuerdo a sus prioridades.

• Interpretar los comandos ingresados por el operador y las instrucciones de


control que indican y describen el trabajo que ha de realizar la computadora.

• Gobernar la operatoria de los utilitarios y otros programas que deba


ejecutar.

• Asignar los dispositivos físicos de Entrada/Salida a los archivos de datos


usados por los programas del usuario.

• Proveer servicios de diagnósticos ante fallos del equipamiento.

• La comunicación entre el operador de la computadora y el Sistema


operativo se logra a través de instrucciones propias del programa en cuestión,
llamadas comandos y complementadas y/o reemplazadas por clicks del mouse o
teclas especiales en Sistemas operativos con interfaz gráfica. (Windows 95 y
versiones posteriores). Este conjunto forma parte del lenguaje de control de trabajos
llamados también lenguajes de operación, comandos del Sistema o con la sigla'
"SCl" (SystemCommandLanguage).

ACTIVIDAD DE APRENDIZAJE OBLIGATORIA Nº 4

Consignas:

Explorar y señalar:

1) ¿Cuáles son las interfaces con las que interactúa el Sistema Operativo
del dispositivo que utilizas a diario?

2) Comparte tu experiencia, con tus compañeros, en el foro disponible


en la plataforma

FUNCIONES DEL SISTEMA OPERATIVO

Hemos visto que el Sistema operativo tiene como funciones administrar los recursos
físicos de la computadora (hardware) y gobernar la ejecución de las tareas
contempladas por el software de aplicación. A los fines de un mejor tratamiento
conceptual del tema, vamos a agrupar las tareas básicas que realiza el Sistema
operativo en las funciones de:

• Administrar el uso del procesador.


• Administrar el uso de la memoria.

• Administrar las unidades de Entrada/Salida (E/S).

• Administrar el Sistema de archivos de datos (File System).

• Administrar la interfaz con el usuario.

A continuación, vamos a describir cada una de las funciones del Sistema operativo:

Administración del procesador


La función de administración del procesador se refiere a la asignación de la unidad
de control y de la unidad aritmético-lógica de la computadora a los distintos
programas que se están ejecutando en la memoria principal. La necesidad de
administración del procesador surge porque en principio solo es posible ejecutar al
mismo tiempo un programa en la computadora. Por lo tanto, será necesario asignar
el o los procesadores existentes en la computadora a los trabajos que lo
demanden, de modo tal que el uso de los mismos sea equilibrado y con un buen
tiempo de respuesta. En computadoras con Sistema operativo Monousuario y
Monotarea, el Sistema operativo no tiene como misión atender varios procesos
simultáneamente, sólo debe atender al único programa de aplicación cargado en
memoria. Pero en el caso de computadoras con Sistema operativo Multitarea y
Multiusuario, es responsable de la operación simultánea de uno o más programas
de aplicación (trabajos) cargados en memoria, de modo tal que se ejecuta un
trabajo antes de otro y que todos los trabajos en ejecución (cargados en memoria)
sean atendidos en su momento. La función que realiza el Sistema operativo como
administrador de procesador consiste básicamente en planificar y controlar el
tráfico de los procesos cargados en la computadora. En resumen, el Sistema
operativo en su función de administrar los procesos en una ambiente multitarea-
multiusuario, llevará el control del estado de cada trabajo en ejecución,
seleccionará los procesos a correr, enviará señales de bloqueo y desbloqueo y
asignará los recursos para cada trabajo.

Administración de la memoria
Cuando hablamos de la función de administración de la memoria realizada por el
Sistema operativo, nos estamos refiriendo a la asignación de la memoria física
principal de la computadora (memoria RAM) a los distintos procesos que se van a
ejecutar. Cuando se trabaja en un ambiente monousuario, con
monoprogramación, la tarea se simplifica enormemente, dado que sólo puede
residir en memoria un proceso por vez, dejando ocioso el espacio sobrante.
Cuando se trabaja en un ambiente multiusuario-multitarea, la administración de la
memoria de la computadora se vuelve más compleja, dado que ahora la memoria
debe ser compartida por varios procesos, a cada uno de los cuales se debe asignar
una porción de la misma.

Administración de las unidades de Entrada/Salida


Las operaciones de entrada y salida de un Sistema de computación no son
realizadas por el procesador central, sino por dispositivos especializados en
efectuar tareas de E/S, llamados comúnmente canales de E/S o controladores de
periféricos. Estos dispositivos comunican el/los periféricos bajo su responsabilidad
directamente con la CPU y se caracterizan por tener capacidad de procesamiento
propia, es decir, que son capaces de ejecutar sus propios comandos e
instrucciones ya que normalmente poseen procesadores especializados y
dedicados exclusivamente a la tarea de administrar los periféricos que controlan.
Obviamente, al disponer de procesadores especializados para efectuar todas las
tareas involucradas en la Entrada/Salida de datos, la CPU queda liberada para
seguir realizando sus funciones propias e indelegables: los cálculos y
comparaciones lógicas correspondientes a los programas cargados en su memoria
principal, en proceso de ejecución. El Sistema operativo de la computadora se
comunica con los canales o controladores mediante instrucciones especiales,
llamadas interrupciones de E/S, por ejemplo: comenzar a trabajar con el periférico,
leer y grabar registros de datos, terminar la tarea, probar el estado del periférico
(status), etc. Es decir, los canales de E/S se comunican con la CPU medianteórdenes
llamadas "interrupciones" y no mediante "instrucciones" como se denominan las
operaciones indicadas por los programas de aplicación. La idea subyacente es
que cuando la CPU solicita una interrupción de E/S el Sistema operativo emite la
correspondiente interrupción dando orden de arranque a uno de los canales de
E/S y este se encarga de que el periférico efectúe la tarea solicitada.
Finalizada la tarea encomendada, el canal de E/S interrumpirá a la CPU para
avisarle que ha terminado su trabajo, y así pueda desbloquear el programa que
efectuó la petición de E/S. El Sistema de interrupciones es responsabilidad del
Sistema operativo y lo maneja a través de un módulo especial llamado rutina de
interrupciones. Una vez finalizado el trabajo encargado a la rutina de
interrupciones, el procesador central continuará con el procesamiento del
programa original bloqueado por la operación de E/S, en el punto anteriormente
interrumpido. Para saber en qué punto reiniciar el programa, el Sistema operativo
consulta con un registro interno del procesador que le indica la dirección de la
próxima instrucción del programa en ejecución.

Administración de trabajos de impresión (spooling)


Un módulo especial del Sistema operativo, dentro de las funciones de administrar
la E/S, es aquel diseñado para administrar los datos relacionados a los trabajos de
impresión. Los Sistemas operativos suelen disponer de programas especializados
para administrar las tareas de impresión, son denominados genéricamente como
Sistemas de spooling. Estos son programas especializados en administrar las tareas
de impresión de un Sistema informático. Por ejemplo, pude suceder que exista una
sola impresora en el Sistema y que varios programas al mismo tiempo requieran de
la misma como unidad de salida. Lo que hace el Sistema de spooling en estos
casos, es mandar toda la salida de datos para impresión a un área del Sistema de
almacenamiento en disco en forma temporal. Luego, el subSistema de spooling irá
imprimiendo de a un trabajo por vez, según las prioridades y la disponibilidad de
servicios por parte de las impresoras que administre. Para ello dispone de listas o
colas de trabajos pendientes de impresión manejadas por el Sistema de spool,
utilizando espacio en disco para almacenar temporalmente las imágenes de los
listados que esperan su turno para ser impresos. Esto se debe a la diferente
velocidad con que trabaja el procesador (más rápido) que las impresoras (más
lento).

Administración del Sistema de archivos


Otra función inherente a un Sistema operativo es llevar la cuenta de la ubicación
de los datos grabados y los espacios disponibles del Sistema de discos. Los
programas de aplicación no saben dónde se encuentran almacenados sus datos
en los dispositivos de almacenamiento secundario (discos, disquetes), ni como
obtenerlos cuando los necesiten. El sub Sistema de administración de archivos es
un conjunto de programas, módulos o rutinas integrantes del Sistema operativo y
encargados de realizar todas las operaciones relacionadas con el
almacenamiento físico de los datos correspondientes a los archivos. Por ejemplo,
se ocupa de la asignación del espacio físico para los datos a grabar, determinar
las formas de almacenamiento, ubicar los datos necesarios para el proceso en
ejecución. Son de gran ayuda para las tareas de programación, ya que liberan al
programador de ocuparse dónde y cómo leer o guardar los datos. También se
ocupa de la protección de los archivos, así como de proveer los comandos para
la administración de los mismos (borrar, copiar, renombrar, etc.). Un buen Sistema
de administración de archivos debe permitir a los operadores crear, modificar y
borrar archivos y directorios, compartir archivos con otros usuarios, controlar el
acceso a los registros de datos de sus archivos, etc.

Administración de la interfaz con el usuario


Por último, otra función propia de un Sistema operativo es administrar la relación
que mantiene con el usuario u operador del mismo. Como ya se mencionó, la
comunicación entre el operador de la computadora y el Sistema operativo se
instrumenta a través de:

• Los comandos (SCl) o instrucciones que el operador envía al Sistema


operativo para solicitarle que ejecute las tareas que requiere de la computadora.

• Los mensajes que el Sistema operativo envía al usuario para avisarle que
realizó las acciones encomendadas, ayudarlo y guiarlo en caso de errores o dudas,
aclararle las alternativas y advertirle las consecuencias de sus acciones, etc.

• Casi todos los Sistemas operativos actuales se comunican con el usuario en


modo interactivo o "conversacional" y se diferencian en cuanto a los instrumentos
utilizados para relacionarse con el usuario, así tenemos hoy Sistemas operativos
cuya relación con el usuario es a: modo de comandos, sólo con mensajes de
caracteres (como el MS-DOS, UNfx o LlNUX en viejas versiones), por medio de menús
(como Netware de Novell, OS 400 ), a modo gráfico, utilizando íconos, figuras, etc.,
(como Windows y los más nuevos que usan reconocimiento de voz para recibir las
órdenes del operador, como IBM OS/2 WARP).

ACTIVIDAD DE APRENDIZAJE OBLIGATORIA Nro. 5


ACTIVIDAD GRUPAL

1) Investigar sobre los administradores que pueden encontrarse en los


sistemas operativos de los dispositivos móviles y computadoras personales.

2) Efectuar pruebas de administración de recursos de estos dispositivos


a través de sus administradores Ej: el administrador de aplicaciones de
android.

3) Elabora un escrito sobre la tarea realizada.

4) Remitirla por el buzón de envíos en la plataforma

virtual.
ESTRUCTURA DEL SISTEMA OPERATIVO.
A continuación, examinaremos cuatro estructuras distintas que ya han sido
probadas, con el fin de tener una idea del espectro de posibilidades. Estas no son
exhaustivas, pero dan idea de algunos diseños que han sido probados en la
práctica.

Sistemas monolíticos
Este tipo de organización podría recibir el título de "El gran embrollo". La estructura
consiste en que no existe estructura alguna. El Sistema operativo se escribe como
una colección de procedimientos, cada uno de las cuales puede llevar a los
demás donde los requiera. Cuando se usa esta técnica, cada procedimiento del
Sistema tiene una interfaz bien definida en términos de parámetros y resultados y
cada uno de ellos es libre de llamar a cualquier otro, si éste último proporciona
cierto cálculo útil para el primero. Para construir el programa objeto real del Sistema
operativo mediante este punto de vista, se copila en forma individual los
procedimientos y después se envasan en un solo archivo objeto con el ligado
(linker). A pesar de no tener una estructura se podría inducir al menos algo parecido
a esta última. Los servicios (llamadas al Sistema que proporciona el Sistema
operativo) se solicitan colocando los parámetros en los lugares bien definidos, quizá
en los registros o en la pila, después se ejecuta una instrucción especial de trampa
(tramp) de nombre llamada al núcleo o llamada al supervisor. Esta llamada consta
de los siguientes pasos de la siguiente figura:

Figura: La forma en que debe hacerse una llamada al Sistema: (1) El programa del
usuario es atraído hacia el núcleo. (2) El Sistema operativo determina el número del
servicio solicitado. (3) El Sistema operativo localiza y llama al procedimiento
correspondiente al servicio. (4) El control regresa al programa del usuario.
Esta organización sugiere una estructura básica del Sistema operativo:

Un conjunto de procedimientos de servicio que llevan a cabo las llamadas al


Sistema.

• Un programa principal que llama al procedimiento del servicio solicitado.

• Un conjunto de procedimientos utilitarios que ayudan al procedimiento de


servicio.

En este modelo, para cada llamada al Sistema existe un procedimiento de servicio


que se encarga de él. Los procedimientos utilitarios hacen cosas necesarias para
varios procedimientos de servicio, como por ejemplo, buscar los datos de los
programas del usuario. Esta división de los procedimientos en tres capas se muestra
en la figura.

Un modelo de estructura simple para un Sistema monolítico

Sistemas con capas (Jerárquicos)

A medida que fueron creciendo las necesidades de los usuarios y se


perfeccionaron los Sistemas, se hizo necesaria una mayor organización del
software, del Sistema operativo, donde una parte del Sistema contenía sub-partes
y está organizado en forma de niveles. Se dividió el Sistema operativo en pequeñas
partes, de tal forma que cada una de ellas estuviera perfectamente definida y con
una clara interfase con el resto de los elementos. Se constituyó una estructura
jerárquica o de niveles en los Sistemas operativos, el primero de los cuales fue
denominado THE (TechnischeHogeschool, Eindhoven), de Dijkstra, que se utilizó con
fines didácticos (Ver Fig. 3). Se puede pensar también en estos Sistemas como si
fueran 'multicapa'. Multics y Unix caen en esa categoría.

Capa 6: usuario Capa 5: Archivos

Capa 4: Entrada/salida

Capa 3: Comunicaciones Sistema jerárquico Capa 2: Memoria

Capa 1: Gestión de CPU

Capa 0: Hardware

En la estructura anterior se basan prácticamente la mayoría de los Sistemas


operativos actuales. Otra forma de ver este tipo de Sistema es la denominada de
anillos concéntricos o "rings". En el Sistema de anillos, cada uno tiene una apertura,
conocida como puerta o trampa (trap), por donde pueden entrar las llamadas de
las capas inferiores. De esta forma, las zonas más internas del Sistema operativo o
núcleo del Sistema estarán más protegidas de accesos indeseados desde las
capas más externas. Las capas más internas serán, por tanto, más privilegiadas que
las externas.
Sistemas de máquina virtual

Se trata de un tipo de Sistemas operativos que presentan una interface a cada


proceso, mostrando una máquina que parece idéntica a la máquina real
subyacente. Estos Sistemas operativos separan dos conceptos que suelen estar
unidos en el resto de Sistemas: la multiprogramación y la máquina extendida. El
objetivo de los Sistemas operativos de máquina virtual es el de integrar distintos
Sistemas operativos dando la sensación de ser varias máquinas diferentes. El núcleo
de estos Sistemas operativos se denomina monitor virtual y tiene como misión llevar
a cabo la multiprogramación, presentando a los niveles superiores tantas máquinas
virtuales como se soliciten. Estas máquinas virtuales no son máquinas extendidas,
sino una réplica de la máquina real, de manera que en cada una de ellas se pueda
ejecutar un Sistema operativo diferente, que será el que ofrezca la máquina
extendida al usuario.

Sistemas cliente-servidor (microkernel)


El tipo más reciente de Sistemas operativos es el denominado Cliente-servidor, que
puede ser ejecutado en la mayoría de las computadoras, ya sean grandes o
pequeñas.

Este Sistema sirve para toda clase de aplicaciones, por tanto, es de propósito
general y cumple con las mismas actividades que los Sistemas operativos
convencionales.
El núcleo tiene como misión establecer la comunicación entre los clientes y los
servidores. Los procesos pueden ser tanto servidores como clientes. Por ejemplo, un
programa de aplicación normal es un cliente que llama al servidor correspondiente
para acceder a un archivo o realizar una operación de entrada/salida sobre un
dispositivo concreto. A su vez, un proceso cliente puede actuar como servidor para
otro. [AlcaI92]. Este paradigma ofrece gran flexibilidad en cuanto a los servicios
posibles en el Sistema final, ya que el núcleo provee solamente funciones muy
básicas de memoria, entrada/salida, archivos y procesos, dejando a los servidores
proveer la mayoría de lo que el

usuario final o programador puede usar. Estos


servidores deben tener mecanismos de
seguridad y protección que, a su vez, serán
filtrados por el núcleo que controla el hardware.
Actualmente las versiones de LlNUX, UNIX
contemplan en su diseño este paradigma.

Sistemas distribuidos
Es lógico suponer que las computadoras pueden trabajar en conjunto. Ahora,
¿Cómo conseguir, sin embargo, que computadoras de diferentes fabricantes en
distintos países funcionen en común a través de todo el mundo? Hasta hace poco,
la mayoría de las computadoras disponían de sus propias interfaces y presentaban
una estructura particular. Un equipo podía comunicarse con otro de su misma
familia, pero tenía grandes dificultades para hacerlo con un extraño. Sólo los más
privilegiados disponían del tiempo, conocimientos y equipos necesarios para
extraer de diferentes recursos informáticos aquello que necesitaban. En los años
noventa, el nivel de concordancia entre las diferentes computadoras alcanzaron
el punto en que podían interconectarse de forma eficaz, lo que le permite a
cualquiera sacar provecho de un equipo remoto. En un principio las computadoras
eran grandes y caras. Luego aparecieron las minicomputadoras, pero éstas
costaban cientos de miles de dólares. Como resultado, la mayoría de las
compañías tenían solo un puñado de computadoras, las que por carecer de una
forma para conectarlas operaban, por lo general, en forma independiente entre
sí. A partir de la mitad de la década de los ochenta, dos avances tecnológicos
comenzaron a cambiar esta situación. El primero fue el desarrollo de poderosos
microprocesadores. En un principio, se disponía de máquinas de 8 bits, pero pronto
se volvieron comunes las CPU de 16, 32 e incluso 64 bits. Muchos de ellos tenían el
poder de cómputo de una computadora mainframe de tamaño respetable, pero
por una fracción de su precio. El segundo desarrollo fue la invención de las redes
de área local de alta velocidad. Estos Sistemas permitieron conectar docenas, e
incluso cientos de máquinas, de tal forma que se pudiese transferir pequeñas
cantidades de información entre ellas durante un milisegundo o un tiempo
parecido. El resultado neto de estas dos tecnologías es que hoy en día no solo es
posible, sino que es fácil, reunir Sistemas de cómputos compuestos por un gran
número de CPU conectadas mediante una red de alta velocidad. Estos reciben el
nombre genérico de Sistemas distribuidos en contraste con los Sistemas
centralizados, que son aquellos cuya capacidad de proceso reside en un solo
lugar. Sólo hay un pequeño problema: el software. Los Sistemas distribuidos
necesitan un software radicalmente distinto al de los Sistemas centralizados. Los
Sistemas operativos para Sistemas distribuidos están en una etapa de surgimiento,
pero ya se conoce bastante de estos Sistemas.

A continuación, analizaremos las ventajas y desventajas de los Sistemas distribuidos


en comparación con los Sistemas centralizados tradicionales.

Un ejemplo es el Sistema AMOEBA, MACH.

Ventajas de los Sistemas distribuidos:

El motivo fundamental de la tendencia a la descentralización es la economía.


Por su estructura y sus características, los Sistemas distribuidos ofrecen grandes
ventajas a los usuarios. La primera es que se adecuan a un concepto común en la
vida de los seres humanos: la distribución. En efecto, el hombre comparte
información y recursos sin necesidad de complejos protocolos de comunicación u
otros requerimientos, simplemente se comunica. Así que los Sistemas distribuidos se
acercan más al concepto que tiene el hombre de compartir recursos.

• El costo y el rendimiento de los Sistemas son reducidos. Gracias a que cada


componente del Sistema se desenvuelve como una entidad, es programado por
separado y no dependiendo de otros componentes. No se requieren costosos
Sistemas de redes que requieran de una configuración exhaustiva. Además, los
Sistemas de comunicación han mejorado su rendimiento, implementando
protocolos que permiten la rápida y efectiva transmisión de datos, incluyendo
multimedia.

• Otra ventaja importante es la modularidad, ya que un Sistema distribuido


deja de ser centralizado y cada una de las entidades que lo componen tienen
integrado su propio Sistema de control. Es decir, cada entidad es independiente y
es programada cuidadosamente para que tenga un óptimo desempeño dentro
de una comunidad de servicios.

• Además, un Sistema distribuido es expandible y escalable. Por la misma


razón que cada entidad es programada de tal forma que sea independiente,
pueden ser añadidas o removidas de un Sistema, a esto se refiere la escalabilidad.
• En cuanto al concepto de expansión, se pueden agregar procesadores y
servidores que incrementen la capacidad de almacenamiento y procesamiento
del Sistema como también nuevos componentes, dispositivos o periféricos.

• La disponibilidad es siempre una ventaja primordial de los Sistemas


Distribuidos y se engloba bajo el concepto de redundancia, es decir los servicios
deben permanecer al alcance de quien los solicite a pesar de que ocurra alguna
falla en ellos, por supuesto siempre y cuando esta no sea esencial.

• Por último, dentro de las ventajas de un Sistema distribuido existe la


confiabilidad. Esta cualidad se debe a que engloba todos los conceptos anteriores,
en especial la disponibilidad, ya que, si un componente está disponible, a pesar de
que exista alguna falla, el usuario tiene como garantía que podrá seguir usándolo.
Así, una aplicación dentro de un Sistema distribuido debe ser capaz de localizar
entidades remotas, comunicarse con ellas y por último, obtener de ellas los
procesos que requiera. Existen tecnologías que ofrecen esta funcionalidad y que
permiten un manejo dinámico de entidades, específicamente para todo tipo de
dispositivos y periféricos conectados a de una red.

En el siguiente cuadro podemos resumir las ventajas de los Sistemas distribuidos:


Desventajas de los Sistemas distribuidos

Aunque los Sistemas distribuidos tienen sus aspectos fuertes, también tienen sus
debilidades. Ya hemos dicho que el peor de los problemas es el software. Con el
actual estado de las cosas, no tenemos mucha experiencia en el diseño,
implantación y uso del software distribuido. ¿Qué tipos de Sistemas operativos,
lenguajes de programación y aplicaciones son adecuados para estos Sistemas?

¿Cuánto deben saber los usuarios de la distribución? ¿Qué tanto debe hacer el
Sistema y que tanto deben hacer los usuarios? Mientras se realicen más
investigaciones, el problema disminuirá, pero por el momento no puede
subestimarse.

• Otro problema potencial se debe a las redes de comunicación. Estas


pueden perder mensajes, lo cual requiere de un software especial para su manejo.
Además, la red puede saturarse, lo cual implica que deba reemplazarse o añadir
una segunda red. En ambos casos, hay que realizar un tendido de cables, lo que
implica un gran costo; o bien hay que reemplazar las tarjetas de interfaz de la red
(por ejemplo, por fibras ópticas). Una vez que el Sistema llega a depender la red,
la pérdida o saturación de ésta puede negar algunas de las ventajas que el Sistema
distribuido debía conseguir.

• Ya dijimos que es una ventaja que los datos sean fáciles de compartir, pero
esto puede transformarse en un arma de doble filo. Si las personas pueden tener
acceso a los datos en todo el Sistema, entonces también pueden tener acceso a
los datos con los que no tienen nada que ver. Por lo tanto, la seguridad es un
problema. Para que los datos se mantengan en secreto es preferible tener una
computadora aislada, sin conexión a la red con las demás computadoras y
mantenerla en un cuarto cerrado.
Las ventajas de los Sistemas distribuidos las podemos resumir en el siguiente cuadro

Para entender mejor la diferencia entre el procesamiento centralizado y el


procesamiento distribuido, analice el siguiente gráfico:

SISTEMAS OPERATIVOS MOVILES


La tecnología móvil se encuentra en nuestro diario vivir y así mismo esto
nos lleva a querer tener un dispositivo móvil que cumpla con todas
nuestras demandas tanto en velocidad, facilidad de manejo, etc.

Los Sistemas Operativos son los encargados de administrar el hardware de los


diferentes equipos o dispositivos de computación ya sean computadores
servidores, escritorio, portátiles, NetBooks, etc., en el caso específico de los
dispositivos móviles como Tabletas, Smartphone, Reloj, entre otros, teniendo en
cuenta las características que diferencian los dispositivos móviles a los demás
Sistemas computacionales, los Sistemas operativos móviles están enfocados en la
movilidad, la conectividad inalámbrica y en la administración de forma óptima del
procesamiento, almacenamiento , el consumo de la energía, visualización que
generan un consumo de energía bastante alto produciendo como resultado un
uso inadecuado de la energía en el dispositivo.
Componentes de los Sistemas operativos móviles
Los Sistemas operativos utilizados en los dispositivos móviles están basados en el
modelo de capas.

Estas capas son:

• Kernel: Es el que proporciona el acceso a los distintos elementos del


hardware del dispositivo. Ofrece distintos servicios a las superiores como son los
controladores o drivers para el hardware, la gestión de procesos, el Sistema de
archivos y el acceso y gestión de la memoria.

• Middleware: Es el conjunto de módulos que hacen posible la propia

existencia de aplicaciones para móviles. Es totalmente transparente para el usuario


y ofrece servicios claves como el motor de mensajería y comunicaciones, codecs
multimedia, intérpretes de páginas web, gestión de Dispositivos y seguridad.
Middleware es software que se sitúa entre un Sistema operativo y las aplicaciones
que se ejecutan en él. Básicamente, funciona como una capa de traducción
oculta para permitir la comunicación y la administración de datos en aplicaciones
distribuidas. A veces, se le denomina “plumbing” (tuberías), porque conecta dos
aplicaciones para que se puedan pasar fácilmente datos y bases de datos por una
“canalización”. El uso de middleware permite a los usuarios hacer solicitudes como
el envío de formularios en un explorador web o permitir que un servidor web
devuelva páginas web dinámicas en función del perfil de un usuario.

• Entorno de ejecución de aplicaciones: consiste en un gestor de aplicaciones


y un conjunto de interfaces programables abiertas para facilitar la creación de
software.

• Interfaz de usuario: Facilita la interacción con el usuario y el diseño de la


presentación visual de la aplicación. Los servicios que incluye son el de
componentes gráficos (botones, pantallas, listas, etc) y el del marco de interacción.

Las características más relevantes de un Sistema operativo móvil actual son:

• Kernel Unificado

• Construido por Capas

• Multiproceso y Multitarea.

• Soporte a diferentes Pantallas

• Soporte Multilenguaje

• Multihilo

• Conectividad Inalámbrica
• Administración del Hardware

• Administración de Aplicaciones

• Navegación Web

• Capacidad de Adaptación

• Reinvención y Mejoramiento

• Personalizable

• Multiusuario

• Inteligente

Los Sistemas Operativos móviles más usados son:


ANDROID:

Es un Sistema operativo inicialmente pensado para teléfonos móviles, al igual que


iOS, Symbian y Blackberry OS. Lo que lo hace diferente es que está basado en Linux,
un núcleo de Sistema operativo libre, gratuito y multiplataforma.

El Sistema operativo Android es sin duda el líder del mercado móvil en Sistemas
operativos, está basado en Linux, diseñado originalmente para cámaras
fotográficas profesionales, luego fue vendido a Google y modificado para ser
utilizado en dispositivos móviles como los teléfonos inteligentes y luego en tablets
como es el caso del Galaxy Tab de Samsung, actualmente se encuentra en
desarrollo para usarse en netbooks y PCs, el desarrollador de este S.O. es Google,
fue anunciado en el 2007 y liberado en el 2008; además de la creación de la Open
Handset Alliance, compuesto por 78 compañías de hardware, software y
telecomunicaciones dedicadas al desarrollo de estándares abiertos para celulares,
esto le ha ayudado mucho a Google a masificar el S.O, hasta el punto de ser usado
por empresas como HTC, LG, Samsung, Motorola entre otros.

Android Inc., es la empresa que creó el Sistema operativo móvil, se fundó en 2003
y fue comprada por Google en el 2005 y 2007 fue lanzado al mercado. Su nombre
se debe a su inventor, Andy Rubin. Originalmente era un Sistema pensado para las
cámaras digitales.

Android está basado en Linux, disponiendo de un Kernel en este Sistema y utilizando


una máquina virtual sobre este Kernel que es la responsable de convertir el código
escrito en Java de las aplicaciones a código capaz de comprender el Kernel.
Una de las grandes cualidades o características de este Sistema operativo es su
carácter abierto. Android se distribuye bajo dos tipos de licencias, una que abarca
todo el código del Kernel y que es GNU GPLv2 (implica que su código se debe
poner al alcance de todos y que todos podremos hacer con este código lo que
nos parezca oportuno, modificarlo, ampliarlo, recortarlo, pero siempre estaremos
en la obligación de volver a licenciarlo con la misma licencia).

Google también por supuesto tiene otra licencia para el resto de componentes del
Sistema que se licencian bajo APACHE v2 (implica que este código se pueda
distribuir para ser modificado y usado a antojo del que lo utilice, pero a diferencia
del primer caso, las modificaciones y el código resultante no es obligatorio el
licenciarlo bajo las mismas condiciones en las que se encontraba).

Esta sencillez, junto a la existencia de herramientas de programación gratuitas,


hace que una de las cosas más importantes de este Sistema Operativo sea la
cantidad de aplicaciones disponibles, que se extienden casi sin límites la
experiencia del usuario.
ACTIVIDAD DE APRENDIZAJE OPTATIVA Nro. 6

ACTIVIDAD COLABORATIVA GRUPAL.

1) Investigar que sistemas operativos se encuentran en los relojes


inteligentes.

2) Elaborar un cuadro comparativo que muestre las diferencias con


otros sistemas operativos móviles.

3) Enviar el cuadro a través del buzón de envíos dispuesto en la


plataforma.

iOS

Este Sistema operativo está orientado específicamente para su uso mediante


dispositivos móviles con pantalla Táctil. iOS es una variante del Mac OS X, que es el
Sistema operativo para computadoras de la marca Apple y, al igual que él, está
basado en Unix.

El Sistema Unix es el utilizado en publicaciones de Linux, así que iOS, OS X y Linux,


guardan más similitudes de las que nos podemos imaginar, tan solo que los dos
primeros son Sistemas operativos propiedad de Apple y cerrados al uso en
dispositivos de la propia compañía, mientras que Linux es un código abierto y valido
para multitud de dispositivos, abierto a implementaciones y al uso e inclusión en los
dispositivos y marcas que lo consideren.

Una de las peculiaridades más valoradas por los usuarios de este Sistema Operativo
móvil, es su funcionalidad y capacidad para trabajar con múltiples programas a la
vez y en segundo plano, lo que es conocido como la multi-tarea (a partir del iOS
4). Además, al ser un Sistema Operativo orientado exclusivamente para dispositivos
móviles con pantalla táctil, incorpora la tecnología multi-touch, la cual es capaz
de reconocer múltiples gestos y toques en la pantalla, así podremos, por ejemplo,
pellizcando en la pantalla ampliar o reducir una imagen.

Cuenta con actualizaciones periódicas que están disponibles para su descarga y


actualización a través de iTunes, que es el software gratuito e indispensable para
manipular y sincronizar toda clase da archivos en estos dispositivos.

Su constitución gráfica es sencilla y minimalista, cuenta con una pantalla principal,


a la cual accedemos mediante una pantalla de bloqueo/desbloqueo de Sistema
deslizante, en la cual se van disponiendo las aplicaciones según su instalación.

En la parte inferior de la pantalla principal se encuentra el Dock, este elemento es


fijo en todas las pantallas y nos permitirá incluir dentro de él las aplicaciones más
usadas por el usuario, para de esta manera tenerlas siempre a mano con
independencia de la pantalla que nos encontremos en ese momento.

SISTEMAS OPERATIVOS PARA TELEVISORES INTELIGENTES


Hoy día tener una televisión inteligente es relativamente barato, y sin duda estos
dispositivos ofrecen un gran número de ventajas. No obstante, debido a que ya
funciona con una interfaz de usuario interactiva, necesitan de un Sistema
operativo. Y como te podrás imaginar, no todas las televisiones inteligentes usan el
mismo.
Android TV
Este Sistema operativo tiene el sello de Google, pues tanto en el aspecto visual
como en funciones, es muy parecido a otros productos de la compañía. Android
TV tiene una gran variedad de ofertas en juegos, aplicaciones y contenido, y tiene
una fácil integración con otros dispositivos. Además, Android TV te deja realizar
búsquedas a través de comandos de voz, y también tiene integración con Google
Now, el cual te permite buscar más contenido, realizar ajustes, resolver preguntas y
mucho más.

Este Sistema operativo es mejor para quienes tengan muchos dispositivos Google y
ya conozcan y estén acostumbrados a cómo trabaja esta compañía. Marcas que
usan Android TV; Sony Bravia, Philips OLED, Sharp Aquos.

webOS
Este es uno de los Sistemas operativos más populares en todo el mundo, lo que
incluso lo ha llevado a ganar premios debido a su interfaz sencilla y amigable. La
plataforma es personalizable, veloz y muy intuitiva. Permite realizar reproducciones
en segundo plano, grabar contenido fácilmente a una memoria USB y controlar
otros aparatos que estén conectados a la misma red. Sin embargo, quizá su mejor
función es SmartShare, la cual permite reproducir contenido en otros dispositivos
móviles de manera muy sencilla. La marca que opto por webOS es LG.

Tizen OS:
Un gigante como Samsung no se podía quedar fuera de la jugada, y es por eso
que todas sus televisiones y wearables tienen incluido Tizen, el Sistema operativo
propietario de la compañía. SmartHUB es la interfaz principal de Tizen, y nos
organiza fácilmente todas las aplicaciones que utilizamos con frecuencia; y muy
pronto podrás personalizar la interfaz a tu gusto. Por otro lado, el control remoto
inteligente puede conectarse a muchos dispositivos más para controlarlos
fácilmente. Finalmente, la función SmartView puede utilizar los dispositivos
enlazados a la televisión para pasar y reproducir fácilmente contenido de uno a
otro sin muchas complicaciones. Por supuesto, Tizen es perfecto para quienes están
totalmente subidos en el barco de Samsung con varios de sus productos. Claro, la
televisión funcionará bien de todos modos, pero puedes sacarle todo su jugo si
tienes un Galaxy, por ejemplo.

Resumen, Cuadro comparativo.


Actividad de aprendizaje obligatoria Nº 7.

Resolver el cuestionario de opciones múltiples Nº 7 dispuesto en la sección


de actividades de la plataforma.

REFERENCIAS BIBLIOGRAFICAS

Selección de Capítulos:

-WILLAMS STALLINGS (2005). Sistemas Operativos. Prentice Hall. (Capítulo 2)

-ANDREW TANENBAUM (2009). Sistemas Operativos Modernos. Prentice Hall

(Capítulo 1)

-CARRETERO JESÚS (2001) “Sistemas Operativos. Una visión aplicada”.


Editorial Mc Graw-Hill, 1era Edición.

(Capítulo 2)

MATERIALES AUDIOVISUALES

Los invitamos a Visualizar las video clases Nº 3 y 4, disponibles en el

Sector “Recursos” de la Plataforma virtual.


UNIDAD 3
ADMINISTRACION
DE PROCESOS

El concepto central de cualquier sistema operativo es el proceso y su gestión. Un


proceso es una abstracción de un programa en ejecución almacenado
temporalmente en la memoria principal. En la actualidad todos los equipos
informáticos permiten la ejecución de múltiples procesos debido a la aplicación de
diversas políticas de gestión que también permiten maximizar el funcionamiento de
microprocesador. En esta unidad el alumno podrá estudiar los distintos estados por
los que atraviesa un proceso durante su ejecución, y con ellos podrá también
analizar y comparar el rendimiento de las políticas de gestión de procesos más
utilizadas en la actualidad, y determinar la política más óptima según la cantidad
y tamaño de los procesos a ejecutar en una computadora.

PROGRAMA Y PROCESO

Uno de los conceptos más importantes que giran en torno a un


sistema operativo es el de proceso.

Proceso
Es un programa en ejecución que incluye la actividad actual, representada por el
valor del contador de programa y el contenido de los registros del procesador,
Además, un proceso incluye la pila del proceso, que contiene datos temporales
(como parámetros de subrutinas, direcciones de retorno y variables temporales) y
una sección de datos que contiene variables globales. Es una abstracción de un
programa en ejecución también llamada tarea.

Un programa
Es una entidad pasiva, como el contenido de un archivo guardado en disco.

Un proceso es una entidad activa, con el contador de programa especificando la


siguiente instrucción que se ejecutará y un conjunto de recursos asociados.
En Sistemas de multiprogramación el procesador alterna de programa en
programa, dando la idea de que ejecutan en paralelo, es decir que el procesador
ejecuta en cierto instante un solo proceso, intercambiando muy rápidamente entre
uno y otro.

ESTADOS DE UN PROCESO
La misión principal del procesador es ejecutar las instrucciones de la máquina que
residen en la memoria principal. Estas instrucciones se dan en forma de programas
que contienen secuencias de instrucciones. Un procesador puede intercalar la
ejecución de un conjunto de programas en el tiempo. De este modo, desde el
punto de vista del procesador, éste ejecutará instrucciones de entre un repertorio
en una secuencia dictada por los valores cambiante de un registro conocido como
el contador de programa (PC, ProgramCounter) o puntero a las instrucciones. A lo
largo del tiempo, este contador puede apuntar a código de programas diferentes
que son parte de diferentes aplicaciones. Desde el punto de vista de un programa
individual, su ejecución involucra una secuencia de instrucciones del programa. La
ejecución de un programa individual se conoce como proceso o tarea. El
comportamiento del procesador puede caracterizarse mostrando la forma en que
se intercalan las trazas de varios procesos. Considérese un ejemplo muy simple. La
figura muestra la disposición en la memoria de tres procesos. Para simplificar la
discusión, se supondrá que no se emplea memoria virtual; de esta manera, los tres
procesos están representados por programas que están cargados por completo en
la memoria principal. Además, hay un pequeño programa distribuidor que asigna
el procesador de un

proceso a otro. El proceso B


ejecuta 4 instrucciones y se
supone que la cuarta instrucción
invoca una operación de E/S
por la que el proceso debe
esperar.
Se supone que el Sistema operativo permite a un proceso continuar su ejecución
solo por un máximo de cuatro instrucciones, después de los cuales es interrumpido;
esto impide que un solo proceso monopolice el tiempo del procesador. Como se
ilustra en la figura, se ejecutan las primeras cuatro instrucciones del proceso A,
seguidas del fin del plazo (time-out) asignado y la ejecución de cierto código del
distribuidor, que devuelve el control al proceso B. Después de ejecutar tres
instrucciones de este proceso, éste solicita una acción de E/S por la que debe
esperar. Por tanto, el procesador detiene la ejecución del proceso B y avanza, por
vía del distribuidor, hasta el proceso C. Después de vencer el tiempo, el procesador
pasa de nuevo al proceso A. Cuando este proceso consume su tiempo, el proceso
B todavía está esperando que termine la operación de E/S, así que el distribuidor
avanza de nuevo hasta el proceso C.

Un modelo de procesos con dos estados


La responsabilidad principal del Sistema operativo es el control de la ejecución de
los procesos; esto incluye la determinación de las pautas de intercalado que se van
a seguir y la asignación de recursos a los procesos. El modelo más sencillo que
puede construirse tiene en cuenta que, en un momento dado, un proceso puede
estar ejecutándose en el procesador o no. Así pues, un proceso puede estar en uno
de dos estados: Ejecución o No Ejecución. Esto queda ilustrado en la figura.
Cuando el Sistema operativo crea un nuevo proceso, éste entra en el Sistema en
estado de No Ejecución. De este modo, el proceso existe, es conocido por el
Sistema operativo y está esperando la oportunidad de ejecutarse. De cuando en
cuando, el proceso que está ejecutando será interrumpido y el programa
distribuidor del Sistema operativo seleccionará un nuevo proceso para que se
ejecute. El proceso anterior pasa del estado de Ejecución al estado de No
Ejecución y uno de los demás procesos pasará al estado de Ejecución. Incluso en
este modelo tan simple ya se comienzan a apreciar algunos de los elementos de
diseño del Sistema operativo. Cada proceso debe representarse de forma que el
Sistema operativo pueda seguirle la pista. Esto es, debe haber información relativa
a cada proceso, incluyendo su estado actual y su posición en memoria. Aquellos
procesos que no están ejecutándose tienen que guardarse en algún tipo de cola,
para que esperen su tumo de ejecución.
La figura propone una cola sencilla de procesos. Cada entrada de la cola es un
puntero a un proceso en particular. Por otra parte, la cola consiste en una lista
enlazada de bloques de datos en la que cada bloque representa a un proceso. El
comportamiento del distribuidor se puede describir en términos de un diagrama de
colas. Cuando un proceso se interrumpe, se le pasa a la cola de procesos en
espera. Por otra parte, si un proceso termina o se abandona, se le descarta del
Sistema (sale del Sistema). En cualquier caso, el distribuidor selecciona entonces un
proceso de la cola para ejecutarlo.

Un modelo de procesos con tres estados


Aunque cada proceso es una entidad independiente, con su propio contador de
programa y estado interno, es frecuente que los procesos deban interactuar con
otros. Un proceso podría generar cierta salida que fuera utilizada por otro, pero
podría ocurrir que un proceso estuviera listo para ser ejecutado, pero que no
hubiera datos esperando por él. Debe entonces bloquearse hasta disponer de
ciertos datos. Cuando un proceso se bloquea, lo hace porque:

Desde el punto de vista lógico no puede continuar; esto ocurre, por lo general,
porque espera ciertos datos que no están disponibles todavía.
También es posible que se detenga un proceso que conceptualmente esté listo y
que se pueda ejecutar, debido a que el Sistema operativo ha decidido asignar la
CPU a otro proceso en cierto momento.

Estas dos condiciones son totalmente distintas. En el primer caso, la suspensión es


inherente al problema (no se puede procesar la línea de comando del usuario
hasta que ésta sea escrita). En el segundo caso, es un aspecto técnico del Sistema
(no existe la CPU suficiente como para darle a cada proceso su propio procesador
privado.

1. En ejecución (el proceso utiliza la CPU en el instante dado).

2. Listo (ejecutable, está en espera de su turno de ejecución).

3. Bloqueado (no se puede ejecutar un proceso debido a la ocurrencia de un


evento externo).

Desde el punto de vista lógico, los dos primeros estados son similares. En ambos
casos, el proceso desea ejecutarse, sólo que en el segundo caso, no existe CPU
disponible para él. El tercer estado es distinto de los otros puesto que el proceso no
se puede ejecutar, incluso aunque la CPU no tenga labores que realizar Son
posibles cuatro transiciones entre estos estados, como lo muestra la figura anterior.

• La transición 1 ocurre cuando un proceso descubre que no puede continuar.


Lo más frecuente es que un proceso lea de un tubo o archivo especial (por
ejemplo, una terminal) y que no existan datos disponibles, por lo que el proceso se
bloquea en forma automática.

• La transición 2 ocurre cuando el planificador decide que el proceso en


ejecución ya ha sido ejecutado el tiempo suficiente y que es hora de que otro
proceso tenga tiempo de CPU.
• La transición 3 ocurre cuando los demás procesos han tenido su parte y es
tiempo de que el primer proceso vuelva a ejecutarse. El tema de la planificación.
es decir, decidir cuál proceso debe ejecutarse, cuándo y por cuánto tiempo, es
muy importante: lo analizaremos más adelante.

• La transición 4 aparece cuando ocurre el evento externo por el que espera


un proceso (como la llegada de nuevos datos). Si no existe otro proceso en
ejecución en ese momento, se produce la transición 3 en forma inmediata y el
proceso comienza su ejecución. En caso contrario, tendría que esperar en estado
listo por un momento, hasta que la CPU esté disponible.

Un modelo de procesos con cinco estados


A medida que un proceso se ejecuta cambia de estado. Cada estado está
definido en parte por la actividad actual de ese proceso. Los estados de los
procesos son internos en el Sistema operativo y son transparentes al usuario. Para el
usuario su proceso estará siempre en ejecución independientemente del estado
en que se encuentre internamente en el Sistema. Los estados de los procesos se
pueden dividir en tres tipos:

1. De inicio y finalización.

2. Activos.

3. Inactivos.

Estados de inicio y finalización


Nuevo: Proceso que se acaba de crear, pero que aún no ha sido admitido por el
Sistema operativo en el grupo de procesos ejecutables.

Terminado: Un proceso que ha sido excluido por el Sistema operativo del grupo de
procesos ejecutables, bien porque se detuvo o porque fue abandonado por
alguna razón.

Los estados Nuevo y Terminado son construcciones útiles para la gestión de


procesos. El estado Nuevo corresponde a los procesos que acaban de ser
definidos. El Sistema operativo puede definir un nuevo proceso en dos pasos.
Primero, el Sistema operativo lleva a cabo algunas tareas necesarias de gestión
interna. Se le asocia un identificador al proceso y se construyen y asignan algunas
tablas necesarias para gestionar el proceso. En este punto, el proceso estará en el
estado Nuevo. Esto significa que el Sistema operativo ha llevado a cabo las
acciones necesarias para crear el proceso, pero no se ha comprometido aún a su
ejecución. Asimismo, un proceso sale de un cuando llega al punto normal de
terminación, cuando se abandona debido a un error irrecuperable o cuando otro
proceso con la debida autoridad hace que el proceso abandone. La terminación
pasa el proceso al estado Terminado. En este punto, el proceso ya no se elige más
para la ejecución. Sin embargo, las tablas y otra información asociada con el
trabajo son conservadas temporalmente por el Sistema operativo. Esto les da
tiempo a otros programas auxiliares o de soporte para extraer la información
necesaria.

Estados activos
Los procesos que se encentran en estados activos son los que compiten por el
procesador o están en condiciones de hacerlo. Estos son:

• Listo: Proceso que está preparado para ser ejecutado, en cuanto se le dé la


oportunidad.

• Ejecución: El proceso que está actualmente en ejecución. La cantidad de


procesos que pueden estar en este estado simultáneamente está limitada por la
cantidad de procesadores que tenga el Sistema. Con un único procesador, a lo
sumo, puede estar en este estado en un instante dado un único proceso.

• Bloqueado: Proceso que no se puede ejecutar hasta que se produzca cierto


evento, como la terminación de una operación de entrada/salida.

Estados inactivos
Son aquellos que no pueden competir por el procesador, pero que pueden volver
a hacerlo por medio de ciertas operaciones. Se trata de procesos que no han
terminado su trabajo por causas que lo han impedido (por ejemplo, avería en un
dispositivo de entrada/salida) y que pueden volver a activarse desde el punto en
que se quedaron sin que tengan que volver a ejecutarse desde el principio. Estos
son:

Suspendido listo: Es el proceso que ha sido suspendido, pero que no tiene causa
para estar bloqueado.

Suspendido bloqueado: Es el proceso que fue suspendido en espera de un


evento, sin que hayan desaparecido las causas de su bloqueo.
TRANSICIONES DE ESTADOS DE LOS PROCESOS
Todo proceso a lo largo de su existencia puede cambiar de estado varias veces.
Cada uno de estos cambios se denomina transición de estado. Estas transiciones,
según el modelo de cinco estados, son las siguientes:

Nuevo
Se crea un nuevo proceso para ejecutar un programa. Este suceso se produce por
algunas de las siguientes razones:

El Sistema operativo puede crear un proceso para llevar a cabo una función de
parte de un programa usuario, sin que el usuario tenga que esperar (por ejemplo,
imprimir).

Conexión interactiva: un usuario entra en el Sistema desde una terminal.

Con afán de modularidad o para aprovechar el paralelismo, un programa de


usuario puede ordenar la creación de una serie de procesos.

Nuevo a Listo

El Sistema operativo pasará un proceso del estado Nuevo al estado Listo cuando
esté preparado para aceptar un proceso más. La mayoría de los Sistemas ponen
un límite en función del número de procesos existente o en la cantidad de memoria
virtual dedicada a los procesos existentes. El motivo de este límite es asegurar que
no haya tantos procesos activos como para degradar el rendimiento.

Listo a Ejecución

Cuando es hora de seleccionar un nuevo proceso para ejecutar, el Sistema


operativo elige a uno de los procesos del estado Listo. La elección del proceso
depende de la política de planificación que aplique.

Ejecución a Terminado

El proceso que se está ejecutando es finalizado por el Sistema operativo si indica


que terminó o si se abandona. Normalmente, los procesos terminan mientras están
ejecutándose, bien porque se completaron o bien por causa de alguna condición
drástica de error. Sin embargo, en algunos Sistemas operativos, un proceso puede
ser finalizado por el proceso que lo creó o bien finalizar cuando termina el proceso
padre. Si se permite esto, un proceso situado en cualquier estado podrá pasar al
estado Terminado.

Ejecución a Listo

La razón más común de esta transición es que el proceso que está en ejecución ha
alcanzado el tiempo máximo permitido de ejecución interrumpida; casi todos los
Sistemas operativos con multiprogramación imponen este tipo de norma de
tiempo. Hay otras causas alternativas para esta transición que no están
implementadas en todos los Sistemas operativos. Por ejemplo, si el Sistema
operativo asigna diferentes niveles de prioridad a los diferentes procesos. Otro caso
es que un proceso ceda voluntariamente el control del procesador.

Ejecución a Bloqueado

Un proceso se pone en el estado Bloqueado si solicita algo por lo que debe esperar.
Las solicitudes al Sistema operativo suelen ser en forma de llamadas a servicios del
Sistema, es decir, llamadas desde el programa que está ejecutándose a un
procedimiento que forma parte del código del Sistema operativo. Por ejemplo, un
proceso puede solicitar un servicio que el Sistema operativo no está preparado
para llevar a cabo de inmediato. Puede pedir un recurso, tal y como un archivo o
una sección compartida de memoria virtual, que no esté inmediatamente
disponible. O bien el proceso puede iniciar una acción, como una operación de
entrada/salida, que debe terminarse antes de que el proceso pueda continuar. Al
comunicarse los procesos unos con otros, un proceso puede quedar bloqueado
cuando espera que otro le proporcione una cierta entrada o cuando espera un
mensaje de otro proceso.

Bloqueado a Listo
Un proceso que está en el estado Bloqueado pasará al estado Listo cuando se
produzca el suceso que estaba esperando. Cuando se produce un suceso, todos
los procesos de la cola de Bloqueados que están esperando a dicho suceso se
pasan a la cola de Listos. Esta última medida significa que, cuando se produce un
suceso, el Sistema operativo debe recorrer toda la cola de Bloqueados, buscando
aquellos procesos que esperan al suceso. En un Sistema operativo grande, puede
haber cientos o incluso miles de procesos en dicha cola. Por tanto, sería más
eficiente tener una serie de colas, una para cada suceso. En tal caso, cuando se
produzca un suceso, la lista entera de procesos de la cola correspondiente al
suceso puede pasarse al estado Listo.

Bloqueado a Bloqueado suspendido

Si no hay procesos Listos, entonces al menos un proceso Bloqueado se expulsa para


dar cabida a otro proceso que no esté bloqueado. Esta transición puede hacerse
aun cuando hay procesos listos disponibles, cuando el Sistema operativo determina
que el proceso que está actualmente en Ejecución o un proceso Listo que sería
conveniente expedir requieren más memoria principal para mantener un
rendimiento adecuado.

Bloqueado suspendido a Bloqueado

La inclusión de esta transición puede parecer resultado de un mal diseño. Después


de todo, si un proceso no está listo para ejecutarse y aún no está en memoria
principal, ¿cuál es el interés por traerlo a memoria? Pero la siguiente situación es
posible: Un proceso termina, liberando memoria principal. Hay un proceso en la
cola de Bloqueados suspendidos que tiene una prioridad mayor que la de
cualquier proceso de la cola de Listos suspendidos, así que el Sistema operativo
tiene razones para suponer que pronto ocurrirá el suceso por el que el proceso está
bloqueado. En estas circunstancias, podría parecer razonable traer un proceso
Bloqueado a memoria antes que un proceso Listo.

Bloqueado suspendido a Listo suspendido

Un proceso en estado Bloqueado suspendido se pasa al estado Listo suspendido


cuando ocurre el suceso que estaba esperando. Nótese que esto requiere que sea
accesible para el Sistema operativo la información relativa a los procesos
Suspendidos.

Listo suspendido a Listo

Cuando no hay procesos Listos en la memoria principal, el Sistema operativo tendrá


que traer uno para continuar la ejecución. Además, puede darse el caso de que
un proceso en estado Listo suspendido tenga una prioridad mayor que la de un
proceso en estado Listo. En tal caso, el diseñador del Sistema operativo puede
decidir que es más importante tomar el proceso de mayor prioridad que minimizar
el intercambio.

Listo a Listo suspendido

Generalmente, el Sistema operativo prefiere suspender a un proceso Bloqueado en


vez de a uno Listo, ya que el proceso Listo podría ejecutarse de inmediato, mientras
que el proceso Bloqueado estará ocupando espacio en la memoria principal sin
poder ejecutarse. Sin embargo, puede ser necesario suspender un proceso Listo si
ésta es la única forma de liberar un bloque lo suficientemente grande de memoria
principal. Por último, el Sistema operativo puede escoger suspender un proceso
Listo de más baja prioridad en lugar de uno Bloqueado que sea de prioridad más
alta si él cree que el proceso Bloqueado pronto estará listo.

ACTIVIDAD DE APRENDIZAJE OPTATIVA Nro. 8

Actividad colaborativa grupal.


1) Indagar si los procesos de dispositivos móviles actuales
comparten el listado de estados definidos.

2) Compartir los resultados de la búsqueda, en un foro dispuesto


en la plataforma.

RAZONES PARA LA SUSPENSION DE PROCESOS

• Intercambio: el Sistema operativo necesita liberar suficiente memoria


principal para cargar un proceso que está listo para ejecutarse.

• Solicitud de un usuario: un usuario puede querer suspender la ejecución de


un programa con fines de depuración o en conexión con el uso de un recurso.

• Por tiempo: un proceso puede ejecutarse periódicamente (por ejemplo, un


proceso de contabilidad o de supervisión del Sistema) y puede ser suspendido
mientras espera el siguiente intervalo de tiempo.

• Solicitud del proceso padre: un proceso padre puede querer suspender la


ejecución de un proceso descendiente para examinar o modificar el proceso
suspendido o para coordinar la actividad de varios descendientes.
RAZONES PARA LA TERMINACIÓN DE PROCESOS

• Terminación normal: el proceso ejecuta una llamada a un servicio del


Sistema operativo que indica que ha terminado de ejecutar.

• Terminación del padre: cuando un proceso padre finaliza, el Sistema


operativo puede diseñarse para terminar automáticamente con todos sus
descendientes.

• Solicitud del padre: un proceso padre tiene normalmente la autoridad de


terminar con cualquiera de sus descendientes.

• Tiempo límite excedido: el proceso ha ejecutado por más del tiempo límite
total especificado.

• No hay memoria disponible: el proceso necesita más memoria de la que el


Sistema le puede proporcionar. • Violación de límites: el proceso trata de acceder
a una posición de memoria a la que no le está permitido acceder.

• Error de protección: el proceso intenta utilizar un recurso o un archivo que no


le está permitido utilizar, o trata de utilizarlo de forma incorrecta, como escribir en
un archivo que es solo de lectura.

• Error aritmético: el proceso intenta hacer un cálculo prohibido, como una


división por cero, o trata de almacenar un número mayor del que el hardware
acepta.

• Tiempo máximo de espera rebasado: el proceso ha esperado más allá del


tiempo máximo especificado para que se produzca cierto suceso.

• Fallo de entrada/salida: se produce un error en la entrada o la salida, tal


como la incapacidad de encontrar un archivo, un fallo de lectura o escritura
después de un número máximo de intentos, o una operación ilegal.

• Instrucción inválida: el proceso intenta ejecutar una instrucción inexistente.

• Instrucción privilegiada: el proceso intenta usar una instrucción reservada


para el Sistema operativo.

• Mal uso de los datos: un elemento de dato es de un tipo equivocado o no


está inicializado.

• • Intervención del operador o del Sistema operativo: Por alguna razón el


operador o el Sistema operativo termina con el proceso.
BLOQUE DE CONTROL DE PROCESOS

Un proceso se representa, desde el punto de vista del Sistema operativo, por un


conjunto de datos donde se incluyen el estado en cada momento, recursos
utilizados, registros, etc., denominado Bloque de Control del Proceso (PCB). Los
objetivos que se pretenden cubrir con el bloque de control del proceso son los
siguientes:

• Localización de la información sobre el proceso por parte del Sistema


operativo.

• Mantener registrados los datos del proceso en caso de tener que suspender
temporalmente su ejecución o reanudarla.

El Sistema operativo utiliza una tabla (un arreglo de estructuras) llamada tabla de
procesos con datos de los procesos. Estos datos contienen la información relativa
al estado del proceso, el contador del programa, el apuntador a la pila, asignación
de memoria, estado de los archivos abiertos, tipo de planificación, así como todos
los datos relativos al proceso que deben guardarse cuando el proceso alterna
entre los distintos estados, de forma que pueda iniciar más adelante como si nunca
se hubiera detenido. Los campos exactos de la tabla de procesos son distintos de
Sistema en Sistema, la siguiente tabla muestra los campos más comunes presentes
en los Sistemas operativos.

PLANIFICACIÓN DE PROCESOS

El término planificación de procesos hace referencia a un conjunto de


políticas y mecanismos del Sistema Operativo que gobiernan el orden en
que se ejecutan los procesos.

Un planificador de procesos es un módulo del Sistema operativo que se encarga


de mover los procesos entre las distintas colas de planificación y cuyo objetivo es
el de dar un buen servicio a todos los procesos que existan en un momento dado
en el Sistema. Estos planificadores son:

Planificador a largo plazo – Planificador de trabajos

Es el encargado de escoger procesos para ser cargados en la memoria para que


se ejecuten, por lo tanto, en este nivel, es responsable de crear los procesos.
También controla el grado de multiprogramación, es decir, el número de procesos
que están en la memoria.

Planificador a medio plazo – Planificador de swaping

Decide si un proceso que está en estado bloqueado o listo debe ser extraído de la
memoria principal temporalmente, es decir, suspenderlo, así como también se
encarga de reanudarlos. Este nivel, por lo tanto, gestiona los procesos suspendidos
en espera de algún recurso no disponible en el momento de la suspensión. Es el
encargado del intercambio de procesos entre memoria principal y memoria
secundaria.

Planificador a corto plazo – Planificador del procesador

Es el encargado de escoger un proceso entre los procesos en estado listo y de


asignar el procesador al mismo. Por tanto, lleva a cabo las funciones de la
multiprogramación, estando siempre residente en memoria y ejecutándose con
mucha frecuencia; por ello debe ser de ejecución muy rápida.
TIPOS DE PLANIFICACIÓN
Las políticas de planificación de distinguen en dos grupos:

Políticas apropiativas

Son las que producen un cambio de proceso con cada cambio de contexto; es
decir, el proceso que está haciendo uso del procesador puede ser temporalmente
suspendido, aunque éste no haya terminado, y permitir que otro proceso se
apropie del procesador. Es útil para Sistemas donde algunos procesos requieren
atención rápida

Políticas no apropiativas
Una vez que un proceso tiene asignado el procesador, no se puede retirar del
procesador hasta que el proceso lo haga voluntariamente al finalizar o bloquearse.
En estas políticas, los trabajos largos retrasan a los cortos, pero el tratamiento para
todos los procesos es más justo. Los tiempos de respuesta son más predecibles
porque los trabajos nuevos de alta prioridad no pueden desplazar a los trabajos en
espera.

OBJETIVOS DE LAS POLÍTICAS DE PLANIFICACIÓN


Las políticas de planificación intentan cubrir los siguientes objetivos:

• Justicia: La política debe ser lo más justa posible con todo tipo de procesos,
sin favorecer a uno y perjudicar a otros.

• Máxima capacidad de ejecución: Debe dar un servicio aceptable para que


todos los trabajos se realicen lo más rápidamente posible. Esto se logra
disminuyendo el número de cambios de procesos.

• Máximo número de usuarios interactivos: En los Sistemas de tiempo


compartido se tratará de que puedan estar trabajando el mayor número de
usuarios simultáneamente.

• Predictibilidad: La política de planificación debe concebirse de tal forma


que en todo momento pueda saberse cómo será su ejecución.

• Minimización de la sobrecarga: El Sistema debe tener poca sobrecarga ya


que esto incide directamente sobre el rendimiento final del mismo: a menor
sobrecarga, mayor velocidad de procesamiento.

• Equilibrio en el uso de recursos: Para obtener un buen rendimiento en el uso


de los recursos y que éstos estén ocupados equitativamente el mayor tiempo
posible.

• Seguridad de las prioridades: Si un proceso tiene mayor prioridad que otro,


éste debe ejecutarse más rápidamente.

MEDIDAS EN LA PLANIFICACIÓN
Para estudiar el comportamiento de las distintas políticas de planificación, se
definen dos medidas relacionadas entre sí que indican cómo se está tratando un
proceso concreto. Se considera t como el tiempo que un proceso P necesita estar
en ejecución para llevar a cabo un trabajo, ti el instante en que el usuario da la
orden de ejecución del proceso y tfel instante en que el proceso termina su
ejecución. En función de estos datos, se tienen las siguientes medidas para cada
proceso:

• Tiempo de servicio (T): T = tf - ti • Tiempo de espera (E): E = T – t

• A partir de los dos valores anteriores, se puede establecer una relación que
permite evaluar la actuación de la política establecida que se denomina índice de
servicio I.
• Índice de servicio (I): I = t / T

• Este índice representa cuanto tiempo el proceso está en ejecución respecto


al tiempo de vida del mismo en el Sistema. Se establecen medidas con valores
medios obtenidos al considerar el conjunto de procesos presentes. Estas serán las
medidas que reflejarán el verdadero comportamiento del Sistema. Estas son:

• Tiempo medio de servicio: es el promedio del tiempo de servicio de cada


uno de los procesos en el Sistema.

• Tiempo medio de espera: es el promedio del tiempo de espera de cada uno


de los procesos en el Sistema. • Eficiencia - Índice medio de servicio: es el promedio
de los valores de los índices de servicio de cada proceso.

ALGORITMOS DE PLANIFICACION
Para el estudio de las diferentes políticas aplicaremos la situación de un grupo de
procesos existentes en un Sistema, cuyos datos se encuentran en la siguiente tabla
y representación gráfica.

Planificación por Primero en llegar, primero en ser servido (FCFS)

En esta política de planificación FCFS (First Come, FirstServed), el procesador


ejecuta cada proceso hasta que termina, los procesos que entren la cola de
procesos listos permanecerán encolados en el orden de llegada hasta que les
toque su ejecución. Este método de se conoce también como Primero en llegar,
Primero en salir (First In, FirstOut).
Esta política de planificación FCFS (First Come FirstServed) es muy simple, los
procesos se despachan de acuerdo con su tiempo de llegada a la cola de
procesos listos. Una vez que el proceso obtiene el procesador, se ejecuta hasta
terminar o cuando genera un pedido de entrada/salida, ya que es una disciplina
“no apropiativa”. Esta disciplina puede ocasionar que procesos largos hagan
esperar a procesos cortos y que procesos no importantes hagan esperar a procesos
importantes; por lo cual el tiempo promedio de espera generalmente es muy alto.
Esta política de planificación no puede garantizar buenos tiempos de respuesta
interactivos. Además, el tiempo medio de servicio es muy variable en función del
número de procesos, su duración y orden de llegada. Es una política fácil de
implementar y es más predecible que otros esquemas. En la siguiente figura pueden
verse como FCFS despacha los procesos del ejemplo, donde las partes sombreadas
indican el tiempo que ha estado cada proceso en ejecución, y las partes ralladas
indican el tiempo de espera.

Características de esta política

• No es apropiativa.

• Es justa, aunque los procesos largos hacen esperar mucho a los cortos.
• Es predecible.

• El tiempo medio de servicio es muy variable en función del número de


procesos y su duración

Planificación por El siguiente proceso, el más corto (SJN)


La política SJN (Shortest Job Next) es una política de planificación no apropiativa.
Esta política toma de la cola de procesos listos el que necesite menos tiempo de
ejecución para realizar su trabajo. Para ello debe saber el tiempo de procesador
que necesita cada proceso, lo cual no es fácil, pero posible a través de diversos
métodos como pueden ser la información suministrada por el propio usuario, por el
programa, etc. El tiempo de proceso T en esta política es bueno para los procesos
cortos, saliendo perjudicados los procesos largos.

Las características de esta política son:

• No es apropiativa.

• El tiempo de espera aumenta de acuerdo con la longitud de los procesos,


pero el tiempo medio de espera con respecto a otras políticas es óptimo.

• Es poco predecible.

• No es justa con los procesos largos.

• Buen tiempo de servicio.

• Resulta difícil de poner en práctica por los datos que necesita para realizar
la planificación.
Planificación por El siguiente proceso, el tiempo restante más corto (SRTN)
La política SRTN (ShortestRemaining Time Next) es la contraparte de SJN. El proceso
con el tiempo estimado de ejecución menor para finalizar es el siguiente en ser
ejecutado. Un proceso en ejecución puede ser interrumpido por un nuevo proceso
con un tiempo estimado de ejecución menor. Debe mantener un registro del
tiempo de servicio transcurrido del proceso en ejecución, lo que aumenta la
sobrecarga. Los trabajos largos tienen un promedio y una varianza de los tiempos
de espera aún mayor que en SJF. La apropiación de un proceso a punto de
terminar por otro de menor duración recién llegado podría significar un mayor
tiempo de cambio de contexto (administración del procesador) que el tiempo de
finalización del primero.

Las características de esta política son:

• Puede ser injusta, ya que un proceso corto puede interrumpir a uno largo
que esté haciendo uso del procesador y que además esté terminando.

• Presenta una mayor sobrecarga.

• Excelente tiempo de servicio.

• Es muy eficiente.
Planificación por Asignación cíclica o Round Robin (RR)

Esta política, cuya traducción podría ser Asignación Cíclica o planificación en


rueda, es una mejora de FCFS. Trata de ser más justa en cuanto a la respuesta tanto
de los procesos cortos como de los largos. Consiste en conceder a cada proceso
una ejecución un determinado período de tiempo Q (quantum), transcurrido éste
tiempo, si el proceso no ha terminado, se le devuelve al final de la cola de procesos
listos, concediéndose el procesador al siguiente proceso por su correspondiente
quantum.

Esta interrupción periódica continúa hasta que el proceso termine su ejecución,


formando una rueda de procesos que serán ejecutados cíclicamente hasta que
terminen. La gestión de la cola de procesos listos se puede realizar de muy diversas
maneras, siendo las más comunes la FIFO y Por prioridades, donde los procesos se
seleccionan según su prioridad. Variando el parámetro Q lograremos tener
diferentes comportamientos de esta política, de tal forma que si Q es mayor que el
tiempo que necesita para su ejecución el proceso más largo se convertirá en una
política FCFS. En cambio, si se aproxima a cero, la sobrecarga del Sistema será muy
grande puesto que la mayor parte del tiempo se consumirá en los cambios de
contexto. Los valores de Q varían entre 10 y 100 milisegundos, siendo
recomendable que el 80% de los tiempos de respuesta de los procesos sean
inferiores al quantum. En la figura puede verse la planificación para el ejemplo
propuesto, con un valor de quantum Q=1, con las siguientes condiciones:

• Si el procesador finaliza su quantum, inmediatamente se le concede el


procesador a otro proceso, al que se le asigna el quantum completo.

• Al crearse un proceso y pasar a la cola de procesos listos, se coloca al final


de la cola.

• Si en un instante, un proceso termina su quantum de ejecución, se lo


devuelve a cola de procesos listos, y en el mismo instante se crea un nuevo proceso,
también se lo coloca en la cola de procesos listos, pero antes que el que ya tuvo
al menos un quantum de ejecución.
Las características de esta planificación son:

• • Es una política apropiativa.

• Baja sobrecarga si el cambio de contexto es eficiente y los procesos siempre


están en la memoria principal.

• Ofrece un índice de servicio uniforme para todos los procesos.

• Es la política más utilizada para multiprogramación.

• El tamaño óptimo del quantum depende de:

• El tipo de Sistema.

• Cargas que soporta el Sistema.

• El número de procesadores y tipo.

Planificación por Prioridades


En esta política se asocia a cada proceso una prioridad, de manera que el
procesador se asigna al proceso de mayor prioridad. Las prioridades pueden ser
definidas interna o externamente. En el primer caso, el Sistema operativo se basa
en una serie de informaciones medibles para el cálculo y asignación de dichas
prioridades (tiempo requerido de procesador, requerimientos de memoria, etc.) El
principal problema de esta política es el bloqueo o postergación indefinida, ya que
si las prioridades no se reajustan en algún momento un proceso de baja prioridad
puede estar esperando su turno indefinidamente. Para evitarlo, se suele emplear lo
que se denomina envejecimiento de las prioridades, que aumenta gradualmente
las prioridades de los procesos que están a la espera de utilizar el procesador.
Cualquier algoritmo basado en esta política puede ser apropiativo o no
apropiativo. En el primer caso, un proceso puede ser retirado del procesador si
aparece otro de mayor prioridad en la cola de procesos listos. El comportamiento
de esta política como apropiativa puede verse en la figura para el ejemplo
propuesto.

APLICACIONES PARA ADMINISTRAR PROCESOS


En los Sistemas operativos Windows nos encontramos con el Administrador de
Tareas.

El administrador de tareas es una aplicación integrada en los Sistemas operativos


de Windows, gracias a la cual podremos obtener información de los procesos que
se ejecutan en el equipo, además de proporcionar los indicadores de rendimientos
más utilizados en el equipo. Podemos utilizarlo para comprobar el rendimiento de
nuestro equipo, obteniendo información del estado de los programas que se
encuentran en ejecución, además de poder realizar acciones sobre ellos como
forzar su finalización si fuera necesario en algún momento.

Además, el administrador de tareas nos ofrece gráficos y datos sobre la CPU


además del uso de la memoria. Este porcentaje nos indicaría cuál es la capacidad
total que posee nuestro procesador y qué porcentaje estamos utilizando. A mayor
sea el porcentaje de utilización, mayor será el consumo de energía de nuestro
ordenador. Podemos observar que el administrador de tareas tiene diferentes
pestañas que nos proporcionan distinta información. La primera de todas es la de
Procesos. En ella podemos observar distintos datos de las aplicaciones o programas
que se encuentran en ejecución, como por ejemplo su nombre, estado, porcentaje
de utilización de la CPU, porcentaje de uso de memoria, porcentaje de uso de
disco y porcentaje de uso de red.

Administrador de tareas Sistema Operativo Windows 7


Administrador de tareas Sistema Operativo Windows 10

Si hacemos click con el botón derecho del ratón sobre cualquiera de los procesos,
podremos realizar seis acciones distintas: expandir, la cual nos permitirá ver todos
los procesos que implican dicha aplicación (una aplicación puede gestionar más
de un proceso), finalizar tarea, mediante la cual cerraremos la aplicación
seleccionada, valores del recurso, mediante la cual podremos seleccionar en qué
formato queremos ver los distintos valores de uso de dicha aplicación, ir a detalle,
nos llevaría directamente a los detalles de dicha aplicación en el administrador de
tareas, abrir ubicación del archivo, nos abrirá un explorador situándonos en el
directorio donde se encuentre dicho fichero en ejecución, buscar en línea, que
realizará una búsqueda de dicho proceso en Internet y por último propiedades,
que nos permitirá ver las distintas propiedades de dicho fichero.

Aplicaciones para administrar procesos en dispositivos móviles (ANDROID):


Process Monitor

En Android existen varias aplicaciones de monitorización de todo lo que sucede


dentro del dispositivo. Ya sea el tráfico de datos, como por ejemplo 3G Watchdog,
o el uso de la memoria, el procesador, etc.

Pero dentro de esa gran variedad a veces cuesta encontrar aplicaciones que
realmente valgan la pena. En lo que a monitorización de memoria y procesador se
refiere Process Monitor posiblemente sea una de las aplicaciones más interesantes
y con más opciones que hay en el Android Market.

Process Monitor nos ofrece una guía detallada de todo lo que ocurre en nuestro
Android. Desde una lista de procesos donde nos marca cuánto consume cada
aplicación, según diferentes valores como memoria, ciclos, etc. A otros valores
como el consumo de espacio en las diferentes unidades de almacenamiento.

Además, también ofrece la posibilidad de matar procesos. Opción que a mí


personalmente sólo me parece útil si estás utilizando Android Eclair 2.1 o inferior.
Porque a partir de Android Froyo 2.2 el Sistema gestiona muy bien los procesos y
estas aplicaciones se vuelven bastante inútiles.
MATERIAL AUDIOVISUAL

Visualización de video clases Nº 5, 6 y 7 disponibles en el

Sector “Recursos” de la Plataforma virtual

ACTIVIDAD DE APRENDIZAJE OBLIGATORIA Nº 9

Consigna: Realizar el cuestionario de opciones múltiples Nº 9 dispuesto


en la sección de actividades de la plataforma.

ACTIVIDAD DE APRENDIZAJE OBLIGATORIA Nº 10

En nuestra computadora de escritorio podemos visualizar un listado de


los procesos activos en un momento determinado:

1) Buscar en el sistema operativo el listado y realizar un cuadro


indicando los procesos activos, la cantidad de memoria que están
utilizando y el porcentaje de microprocesador necesario.

2) Descargar CPU Simulator desde App Android y realizar pruebas con


los datos de las tablas propuestas en la explicación de cada algoritmo
de planificación.

3) Remitir por el buzón de envíos, el trabajo elaborado, con las capturas


de pantallas de los procesos visualizados, con una breve explicación de
cada uno de ellos.

Lecturas bibliográficas obligatorias

-WILLAMS STALLINGS (2005). Sistemas Operativos. Prentice

Hall. (Capítulos 4 y 5)

-ANDREW TANENBAUM (2009). Sistemas Operativos

Modernos. Prentice Hall (Capítulo 9)

CARRETERO JESÚS (2001) “Sistemas Operativos. Una visión aplicada”.


Editorial Mc Graw-Hill, 1era Edición. (Capítulo 3)

ACTIVIDAD DE APRENDIZAJE OBLIGATORIA Nº 11

Lo invitamos a realizar la actividad obligatoria Nº 11, que se encuentra


disponible en el Sector “Actividades de la plataforma virtual.

ENLACES WEB

https://www.xatakawindows.com/bienvenidoawindows8/ el-
administrador-de-tareas-de-windows-que-es-y-como-funciona
UNIDAD 4
ADMINISTRACION DE LA
MEMORIA

La memoria es un importante recurso que debe administrarse con cuidado.


Aunque el promedio de memoria de las computadoras caseras es de cien veces
la memoria de las primeras computadoras de la década del sesenta, los programas
crecen en tamaño tan rápido como las memorias.

La ley de Parkinson dice “los programas se desarrollan para ocupar toda la


memoria disponible para ellos”. Cuando hablamos de la memoria de un sistema
informático debemos mencionar que no es una sola memoria, sino que son varias
memorias y todas con distintas características y funcionamiento.

En esta unidad de aprendizaje los alumnos estudiarán estos tipos de memoria para
comprender la interacción entre ellos. Para la ejecución de múltiples procesos,
como los estudiados en la unidad anterior, es necesario aplicar políticas de
administración que garanticen un máximo aprovechamiento de la memoria ya
que ésta es un recurso de tamaño limitado.

Así, se pretende que los alumnos puedan analizar las características y el


rendimiento de las políticas más utilizadas en la actualidad y determinar la mejor
según la capacidad de memoria y cantidad de procesos a ejecutar.

LA MEMORIA

Para que un programa pueda ser ejecutado, tanto él como los datos que se vayan
a manejar deben estar almacenados en la memoria principal o física. Por otra
parte, para mejorar el rendimiento del procesador y su capacidad de proceso se
pueden repartir los servicios del mismo entre varios programas que necesitan estar
simultáneamente cargados en la memoria, por lo tanto, se hace necesario
compartir la memoria.
Podemos decir que la memoria principal es el recurso central de la computadora
ya que el procesador y los dispositivos de E/S acceden a ella para leer o grabar la
información que manejan.

La velocidad de lectura y escritura están relacionados con dos parámetros:

Tiempo de acceso: transcurre entre el inicio y el fin de una operación de lectura o


escritura sobre la misma.

Tiempo de ciclo de memoria: marca el retraso que impone el hardware entre el fin
de una operación y el principio de las siguientes.

Estos dos factores marcan la velocidad de la memoria principal y condicionará la


rapidez y eficiencia de la computadora.

JERARQUIA DE MEMORIAS

La memoria es la parte de la computadora en la que se guardan o almacenan los


programas (instrucciones y datos). Sin una memoria de la que los procesadores
leyeran o escribieran la información no habría computadoras digitales de
programa almacenado (como son todos los actuales desde la EDVAC en 1945).

Por una parte, tenemos que la velocidad de ejecución de los programas es muy
dependiente de la velocidad a la que se pueden transferir los datos entre la CPU y
la memoria. Por otra parte, también es importante disponer de una gran cantidad
de memoria, para facilitar la ejecución de programas que pueden ser grandes o
que trabajen con gran cantidad de datos.

Por eso, idealmente, la memoria debería ser rápida, grande y barata. El dilema está
claro, sería óptimo disponer de una tecnología de memoria que proporcionara una
gran capacidad y que el costo por bit sea pequeño. Sin embargo, para conseguir
un buen rendimiento y velocidad se necesitan varios tipos de memoria con distintas
capacidades, velocidades y costos por bit.
Jerarquía tradicional de memoria

La pirámide del gráfico superior está construida por diversos tipos de memorias, de
tal manera que a medida que se va de arriba hacia abajo, sucede lo siguiente:

• Disminuye el costo por bit.

• Aumenta la capacidad.

• Aumenta el tiempo de acceso.

• Disminuya la frecuencia de acceso a la memoria desde la CPU.

En lugar de decidirnos por un único tipo o tecnología de memoria, lo que hay que
hacer es construir una estructura con una jerarquía de memorias en la que haya
diversas tecnologías, de tal manera que los pocos datos con los que se está
ejecutando las instrucción en curso estén en los registros de la CPU; los datos de las
últimas instrucciones ejecutadas, en la memoria caché, el restos de los datos del
programa en ejecución estarán repartidos entre memoria principal y secundaria;
los programas o datos que no se ejecutan con frecuencia se guardan en memoria
secundaria y en memorias secundarias masivas de mayor tiempo de acceso como
cintas magnéticas y discos ópticos.

La CPU y el sistema operativo se encargan de ir llevando y trayendo los datos de


las memorias lentas a las rápidas y viceversa, a medida que se vayan referenciando
los distintos datos o programas.

Jerarquía moderna de memoria


La memoria Cache

Aunque la memoria caché es invisible para el sistema operativo, interactúa con


otras partes del hardware de gestión de memoria. Es más, muchos de los principios
utilizados en la memoria virtual son también aplicables a la memoria caché

En todos los ciclos de instrucción, el procesador accede a la memoria, al menos


una vez, para leer la instrucción y, a menudo, algunas veces más para leer los
operandos y/o almacenar los resultados. La frecuencia con que el procesador
puede ejecutar las instrucciones está claramente limitada por el tiempo de ciclo
de memoria. Esta limitación ha sido de hecho un problema significativo, debido al
persistente desacuerdo entre las velocidades del procesador y de la memoria
principal.
Cache y memoria principal.

La memoria caché intenta obtener una velocidad cercana a la de las memorias


más rápidas y, al mismo tiempo, aportar una memoria grande al precio de las
memorias de semiconductores, que son menos costosas. Este concepto se ilustra
en la figura. Hay una memoria

principal más lenta y relativamente grande, junto a una memoria caché más
pequeña y rápida. La caché contiene una copia de parte de la memoria principal.
Cuando el procesador intenta leer una palabra de la memoria, se comprueba si la
palabra está en la memoria caché. Si es así, la palabra se envía al procesador. Si
no, se rellena la caché con un bloque de memoria principal, formado por un
número fijo de palabras y, después, la palabra es enviada al procesador. Debido
al fenómeno de la cercanía de referencias, cuando se carga en la caché un
bloque de datos para satisfacer una sola referencia a memoria, es probable que
ya se hayan hecho antes otras referencias a palabras del mismo bloque.
Estructura cache-memoria principal

La figura siguiente ilustra la operación LEER. El procesador genera la dirección DL,


de la palabra a leer. Si la palabra está en la cache es entregada al procesador. En
caso contrario, el bloque que contiene a la palabra se carga en cache y la palabra
se envía al procesador.
Operación de lectura de la cache.

Cache de disco

En informática, el caché de página (page cache), también a veces


ambiguamente llamado caché de disco es un buffer transparente de páginas de
disco almacenadas en memoria principal (RAM) por el sistema operativo para un
rápido acceso.

Normalmente el caché de página es implementado en los kernels con el


administrador de memoria de paginación y es completamente transparente a las
aplicaciones (es decir, éstas jamás se enteran de que existe).
Toda la memoria que no es directamente asignada a las aplicaciones es
generalmente empleada para caché de página. En algunos

sistemas operativos (como Windows), la memoria principal ocupada por caché de


página es tomada como memoria libre.

La lectura de datos en el disco duro es relativamente lenta comparada a la


memoria principal. Existen cachés provistos por hardware por un chip de RAM o
NVRAM dedicado, localizados en el controlador de disco dentro de la unidad de
disco duro, llamado buffer de disco. Esta memoria no debe ser confundida con el
caché de página.

La parte del S.O, que se encarga de la memoria se llama administrador


de memoria

ACTIVIDAD DE APRENDIZAJE OBLIGATORIA Nro. 12

Actividad colaborativa grupal

1) Investigar sobre las capacidades de memoria caché en los


dispositivos actuales

2) Elaborar una tabla comparativa.

3) Enviar el resultado a través de un buzón de envíos dispuesto para esta


actividad

GESTOR DE MEMORIA

Lleva el control de que partes de la memoria que está en uso y cuáles no lo están.
Asigna memoria a los procesos que necesiten y retira de memoria, los procesos que
terminen. Administra el intercambio entre la memoria central y el disco cuando la
memoria central no de abasto para contener todos los procesos. (swap)
Los sistemas de administración de la memoria se dividen en dos clases: aquellos
que mueven los procesos desde memoria secundaria a principal y viceversa
durante la ejecución de los procesos, y aquellos que no lo hacen.

El sistema que no lo hace se denomina: Monoprogramación y el segundo


Multiprogramación.

En un sistema monoprogramado, la memoria principal se divide en dos partes:


una parte para el sistema operativo (monitor residente, núcleo) y otra parte para
el programa que se ejecuta en ese instante. En un sistema multiprogramado, la
parte de "usuario" de la memoria debe subdividirse aún más para hacer sitio a varios
procesos. La tarea de subdivisión la lleva a cabo dinámicamente el sistema
operativo y se conoce como gestión de memoria.

En un sistema multiprogramado resulta vital una gestión efectiva de la memoria.


Si sólo hay unos pocos procesos en memoria, entonces la mayor parte del tiempo
estarán esperando a la E/S y el procesador estará desocupado. Por ello, hace falta
repartir eficientemente la memoria para meter tantos procesos como sea posible.

MONOPROGRAMACION

La monoprogramación es el método de trabajo en el que solo un programa utiliza


el procesador y es el único existente en la memoria principal

Podemos mencionar, como ejemplo, a la memoria dedicada, que consiste en que


el programador acceda directamente al hardware y gestione la memoria. En sus
programas no existe S.O. Esta forma de utilización de la memoria es ineficaz y obliga
a un conocimiento profundo del hardware utilizado.

Otro tipo de monoprogramación, es el monitor residente, en este se divide la


memoria en dos zonas, una utilizada por el usuario y otro reservado para la parte
residente del propio S.O. denominado monitor.

Estos repartos de la memoria introducen nuevos problemas estos son:

Como asegurar la independencia de ambas zonas (protección).


Como asegurar que los programas de usuarios no se vean afectados por esta
división de la memoria.

Protección de la memoria: Para ella se establece una dirección con frontera que
limita la zona del S.O. La dirección frontera suele ser variable para permitir que un
sistema pueda variar su tamaño.

Una vez inicializado el S.O el contenido del registro frontera indicara el punto a partir
del cual pueda cargarse el programa de usuario. Para ello, es necesario reasignar
las direcciones del programa de usuarios.

Tenemos dos formas de realizar la asignación:

• ESTATICA: Se realiza durante la compilación, durante la carga del programa


en memoria. Si el programa se modifica, el S.O, obliga a cambiar las direcciones
restantes y hay que recompilar.

• DINAMICA: Durante la ejecución del programa.

El usuario rara vez utiliza direcciones reales, en cambio utiliza direcciones relativas
que varían entre O y el máximo permitido por el S.O. denominado espacio lógico
de direcciones.

El S.O con la ayuda del hardware establece la correspondencia entre las


direcciones relativas y las reales, estas se denominan espacio físico de direcciones.
Por ejemplo, al definir una variable, en un lenguaje de programación, esta no es
más que una dirección de memoria.

MULTIPROGRAMACION

La tarea central de cualquier sistema de gestión de memoria es traer los programas


a memoria principal para su ejecución en el procesador. En casi todos los sistemas
multiprogramados modernos, esta tarea supone un esquema sofisticado conocido
como memoria virtual. La memoria virtual está, a su vez, basada en el uso de una
de dos técnicas básicas; segmentación y/o paginación. Antes de ver estás
técnicas de memoria virtual, se debe preparar el terreno considerando técnicas
más simples que no requieren el uso de memoria virtual. Una de estas técnicas, la
partición, se ha venido usando con distintas variantes en algunos sistemas
operativos ahora obsoletos. Las otras dos técnicas, la paginación simple y la
segmentación simple, no se usan en solitario. No obstante, el estudio de la memoria
virtual resultará más sencillo si se consideran en primer lugar estas dos técnicas, sin
tener en cuenta la memoria virtual.

Partición fija

En la mayoría de los esquemas de gestión de memoria, se puede suponer que el


sistema operativo ocupa una parte fija de memoria principal y que el resto de la
memoria está disponible para ser usado por varios procesos. El esquema más
sencillo de gestión de la memoria disponible es dividirla en regiones con límites fijos.

Una posibilidad es emplear particiones de igual tamaño. En este caso, cualquier


proceso cuyo tamaño sea menor o igual que el tamaño de la partición puede
cargarse en cualquier partición libre. Si todas las particiones están ocupadas y no
hay procesos residentes en estado Listo o Ejecutando, el sistema operativo puede
sacar un proceso de alguna de las particiones y cargar otro proceso de forma que
haya trabajo para el procesador.

Las particiones fijas de igual tamaño plantean dos dificultades:

• Un programa puede ser demasiado grande para caber en la partición. En


este caso, el programador debe diseñar el programa mediante superposiciones,
para que sólo una parte del programa esté en memoria principal en cada instante.
Cuando se necesita un módulo que no está presente, el programa de usuario debe
cargar dicho módulo en la partición del programa, superponiéndose a los
programas y datos que se encuentren en ella.

• El uso de memoria principal es extremadamente ineficiente. Cualquier


programa, sin importar lo pequeño que sea, ocupará una partición completa. En
el ejemplo, puede haber un programa que ocupe menos de 128Kb de memoria y,
aun así, ocuparía una partición de 512Kb cada vez que se cargase. Este fenómeno,
en el que se malgasta el espacio interno de una partición cuando el bloque de
datos cargado sea más pequeño que la partición, se denomina fragmentación
interna.
Pueden reducirse, aunque no solventarse, ambos problemas, por medio del
empleo de particiones de tamaños distintos, como se muestra en la figura. En este
ejemplo, los programas de hasta 1 Mb pueden alojarse sin superposición. Las
particiones menores de 512K permiten alojar programas más pequeños con un
desperdicio menor.

Partición fija de una memoria de 4 MB.

• Con particiones del mismo tamaño, la ubicación de un proceso en memoria


es trivial. Mientras haya alguna partición libre, puede cargarse un proceso en esa
partición. Puesto que todas las particiones son de igual tamaño, no importa la
partición que se use. Si todas las particiones están ocupadas con procesos que no
están listos para ejecutar, uno de esos procesos debe sacarse y hacer sitio para un
nuevo proceso.
• Con particiones de distintos tamaños, hay dos maneras posibles de asignar
los procesos a las particiones. La forma más simple es asignar cada proceso a la
partición más pequeña en la que quepa. En este caso, hace falta una cola de
planificación para cada partición, que albergue los procesos expulsados cuyo
destinado es dicha partición. La ventaja de este enfoque es que los procesos están
siempre asignados de forma que se minimiza la memoria desperdiciada dentro de
cada partición.

• Sin embargo, aunque esta técnica parece óptima desde el punto de vista
de una partición individual, no lo es desde el punto de vista del sistema global.
Considérese el caso de la figura, por ejemplo, donde no hay procesos con un
tamaño comprendido entre 768K y 1M en un determinado instante. En este caso,
la partición de 768K permanecerá sin usar, incluso aunque algún proceso más
pequeño pudiera haber sido asignado a la misma. Así pues, una solución mejor
sería emplear una única cola para todos los procesos. Cuando se va a cargar un
proceso en memoria principal, se selecciona la partición más pequeña disponible
que pueda albergar al proceso. Si todas las particiones están ocupadas, se debe
tomar una decisión de intercambio. Puede darse preferencia al intercambio de la
partición más pequeña que pueda contener al proceso entrante. También es
posible considerar otros factores, tales como prioridades y preferencia para
descargar procesos bloqueados antes que procesos listos.

• El uso de particiones de distinto tamaño proporciona cierto grado de


flexibilidad a las particiones fijas. Además, ambos tipos de esquema de partición
fija son relativamente simples y exigen un software del sistema operativo y una
sobrecarga de procesamiento mínimos. Sin embargo, se plantean los problemas
siguientes:

• El número de particiones especificadas en el momento de la generación del


sistema limita el número de procesos activos (no suspendidos) del sistema.

• Puesto que los tamaños de partición se programan en el momento de la


generación del sistema, los trabajos pequeños no hacen un uso eficiente del
espacio de las particiones. En un entorno en el que los requisitos básicos de
almacenamiento de todos los procesos se conocen de antemano, puede ser una
técnica razonable, pero, en la mayoría de los casos, ineficiente.

El uso de la partición fija es casi nulo hoy día. Como ejemplo de un sistema
operativo fructuoso que empleaba está técnica se tiene un antiguo sistema
operativo de grandes computadores de IBM, el OS/MFT (Multiprogramación con un
número Fijo de Tareas).
Asignación de memoria con partición fija.

Partición Dinámica

Para superar algunas de las dificultades de la partición estática, se desarrolló una


solución denominada partición dinámica. Otra vez, este enfoque ha sido superado
de largo por técnicas de gestión de memoria más sofisticadas. Un sistema operativo
importante que empleaba esta técnica fue el antiguo OS/MVT (Multiprogramación
con un número Variable de Tareas), para grandes computadores de IBM.

Con la partición dinámica, las particiones son variables en número y longitud.


Cuando se trae un proceso a memoria principal, se le asigna exactamente tanta
memoria como necesita y no más. En la figura se muestra un ejemplo que usa 1MB
de memoria principal. Al principio, la memoria principal está vacía, exceptuando
el sistema operativo (figura a). Se cargan los tres primeros procesos, empezando en
donde acaba el sistema operativo y ocupando sólo un espacio suficiente para
cada proceso (figuras b, c y d). Esto deja un "hueco" al final de la memoria
demasiado pequeño para un cuarto proceso. En algún momento, ninguno de los
procesos en memoria está listo. Así pues, el sistema operativo saca al proceso 2
(figura e), que deja sitio suficiente para cargar un nuevo proceso, el proceso 4
(figura f). Puesto que el proceso 4 es más pequeño que el proceso 2, se crea otro
hueco pequeño. Más tarde, se alcanza un punto en el que ninguno de los procesos
que están en memoria principal está listo y el proceso 2, que está en estado Listo,
pero suspendido, está disponible. Puesto que no hay suficiente sitio en memoria
para el proceso 2, el sistema operativo expulsa al proceso 1 (figura g) y carga de
nuevo el proceso 2 (figura h).

Como se muestra en el ejemplo, este método comienza bien, pero, finalmente,


desemboca en una situación en la que hay un gran número de huecos pequeños
en memoria. Conforme pasa el tiempo, la memoria comienza a estar más
fragmentada y su rendimiento decae. Este fenómeno se denomina fragmentación
externay se refiere al hecho de que la memoria externa a todas las particiones se
fragmenta cada vez más, a diferencia de la fragmentación interna, que se
comentó anteriormente.

Efectos de la partición dinámica


Una técnica para superar la fragmentación externa es la compactación: De vez
en cuando, el sistema operativo desplaza los procesos para que estén contiguos
de forma que toda la memoria libre quede junta en un bloque. Por ejemplo, en la
figura h, la compactación produce un bloque de memoria libre de 256K. Este
hueco puede ser suficiente para cargar un proceso adicional. La dificultad de la
compactación está en que es un procedimiento que consume tiempo, por lo que
desperdicia tiempo del procesador. La compactación necesita de la capacidad
de reubicación dinámica. Es decir, se debe poder mover un programa de una
región a otra de memoria principal sin invalidar las referencias a memoria del
programa

Ejemplo de una configuración de memoria antes y después de asignar un bloque


de 16 Kb.

Puesto que la compactación de memoria consume tiempo, atañe al diseñador del


sistema operativo decidir adecuadamente cómo asignar un proceso a memoria
(como llenar los huecos). Cuando llega el momento de cargar o traer un proceso
a memoria principal y, si hay libre más de un bloque de memoria de tamaño
suficiente, el sistema operativo debe decidir cuál asignar.
Los tres algoritmos de ubicación que se pueden considerar son:

• El del mejor ajuste (best-fit).

• El del primer ajuste (first-fit).

• El del siguiente ajuste (next-fit).

Todos ellos se limitan a elegir entre los bloques de memoria libres que son mayores
o iguales que el proceso a traer.

El mejor ajuste elige el bloque de tamaño más parecido al solicitado.

El primer ajuste comienza recorriendo la memoria desde el principio y escoge el


primer bloque disponible que sea suficientemente grande.

El siguiente ajuste recorre la memoria desde el lugar de la última ubicación y elige


el siguiente bloque disponible que sea suficientemente grande.

La figura a muestra un ejemplo de configuración de la memoria después de cierto


número de ubicaciones y operaciones de descarga de procesos. El último bloque
usado fue de 22Kb, de donde se creó una partición de 14Kb. La figura 6.5b muestra
la diferencia entre los algoritmos de ubicación del mejor, primer y siguiente ajuste
para una solicitud de 16Kb. El mejor ajuste busca en la lista completa de bloques
disponibles y emplea el hueco de 18Kb, dejando un fragmento de 2Kb. El primer
ajuste genera un fragmento de 6Kb y el siguiente ajuste origina un fragmento de
20Kb.

Decidir cuál de estos métodos es mejor dependerá de la secuencia exacta de


intercambios de procesos que se den y del tamaño de estos procesos. Sin embargo,
se pueden hacer algunos comentarios generales:

• El algoritmo del primer ajuste es el más sencillo, normalmente es también el


mejor y más rápido, aunque puede poblar el extremo inicial de pequeñas
particiones libres que es necesario recorrer en las pasadas siguientes del algoritmo.

• El algoritmo del siguiente ajuste tiende a generar resultados algo peores que
el del primer ajuste. El algoritmo del siguiente ajuste llevará frecuentemente a la
asignación de bloques libres del final de la memoria. El resultado es que el bloque
de memoria libre más grande, que suele aparecer al final del espacio de memoria,
se divide rápidamente en fragmentos pequeños, con lo que hará falta una
compactación más frecuente.

• El algoritmo del mejor ajuste, a pesar de su nombre, proporciona en general


los peores resultados. Puesto que este algoritmo busca el hueco más pequeño que
cumple con los requisitos, garantiza que el fragmento que se deja es lo más
pequeño posible. Aunque cada solicitud de memoria desperdicia siempre la
menor cantidad, el resultado es que la memoria principal se llena rápidamente de
bloques demasiado pequeños como para satisfacer las solicitudes de asignación
de memoria. Así pues, se debe compactar más frecuentemente que con los otros
algoritmos.

Paginación Simple

Tanto las particiones de tamaño fijo como las de tamaño variable


hacen un uso ineficiente de la memoria

• Las primeras generan fragmentación interna (Partición de tamaño

fijo).

• Las segundas originan fragmentación externa (Partición dinámica).

Supongamos que la memoria principal se encuentra particionada en trozos iguales


de tamaño fijo relativamente pequeños y que cada proceso está dividido también
en pequeños trozos de tamaño fijo y del mismo tamaño que los de memoria. En tal
caso, los trozos del proceso, conocidos como páginas, pueden asignarse a los
trozos libres de memoria, conocidos como marcos o marcos de página. En este
tema se verá que el espacio malgastado en memoria para cada proceso por
fragmentación interna consta sólo de una fracción de la última página del
proceso. Además, no hay fragmentación externa.
Asignación de páginas de procesos a marco libres.

La figura anterior muestra un ejemplo del uso de páginas y marcos. En un instante


dado, algunos de los marcos de memoria están en uso y otros están libres. El sistema
operativo mantiene una lista de los marcos libres. El proceso A, almacenado en
disco, consta de cuatro páginas. Cuando llega el momento de cargar este
proceso, el sistema operativo busca cuatro marcos libres y carga las cuatro páginas
del proceso A en los cuatro marcos (figura b). El proceso B, que consta de tres
páginas y el proceso C, que consta de cuatro, se cargan a continuación. Más
tarde, el proceso B se suspende y es expulsado de memoria principal. Después,
todos los procesos de memoria principal están bloqueados y el sistema operativo
tiene que traer un nuevo proceso, el proceso D, que consta de cinco páginas.

Supóngase ahora, como en este ejemplo, que no hay suficientes marcos sin usar
contiguos para albergar al proceso. ¿Impedirá esto al sistema operativo cargar D? La
respuesta es negativa, puesto que se puede emplear de nuevo el concepto de
dirección lógica. Ya no será

suficiente con un simple registro base. En su lugar, el sistema operativo mantiene una
tabla de páginas para cada proceso. La tabla de páginas muestra la posición del
marco de cada página del proceso. Dentro del programa, cada dirección lógica
constará de un número de página y de un desplazamiento dentro de la página.
Recuerde que, en el caso de la partición simple, una dirección lógica era la posición
de una palabra relativa al comienzo del programa; el procesador realizaba la
traducción a dirección física. Con paginación, el hardware del procesador también
realiza la traducción de direcciones lógicas a físicas. Ahora, el procesador debe saber
cómo acceder a la tabla de páginas del proceso actual. Dada una dirección lógica
(número de página, desplazamiento), el procesador emplea la tabla de páginas para
obtener una dirección física (número de marco, desplazamiento).

Continuando con el ejemplo, las cinco páginas del proceso D se cargan en los
marcos 4, 5, 6, 11 y 12. La siguiente figura muestra las distintas tablas de páginas en
este instante. Cada tabla de páginas contiene una entrada por cada página del
proceso, por lo que la tabla se indexa fácilmente por número de página
(comenzando en la página 0). En cada entrada de la tabla de páginas se
encuentra el número de marco en memoria, si lo hay, que alberga la página
correspondiente. Además, el sistema operativo mantiene una lista de marcos libres
con todos los marcos de memoria que actualmente están vacíos y disponibles para
las páginas.

Estructura de datos para el ejemplo anterior en el período f.

Así pues, se puede comprobar que la paginación simple, tal y como se describe,
es similar a la partición estática. Las diferencias están en que, con paginación, las
particiones son algo más pequeñas, un programa puede ocupar más de una
partición y éstas no tienen por qué estar contiguas.

Segmentación simple

Otro modo de subdividir el programa es la segmentación. En este caso, el


programa y sus datos asociados se dividen en un conjunto de segmentos. No es
necesario que todos los segmentos de todos los programas tengan la misma
longitud, aunque existe una longitud máxima de segmento. Como en la
paginación, una dirección lógica segmentada consta de dos partes, en este caso
un número de segmento y un desplazamiento.

Como consecuencia del empleo de segmentos de distinto tamaño, la


segmentación resulta similar a la partición dinámica. En ausencia de un esquema
de superposición o del uso de memoria virtual, sería necesario cargar en memoria
todos los segmentos de un programa para su ejecución. La diferencia, en
comparación con la partición dinámica, radica en que, con segmentación, un
programa puede ocupar más de una partición y éstas no tienen por qué estar
contiguas. La segmentación elimina la fragmentación interna, pero, como la
partición dinámica, sufre de fragmentación externa. Sin embargo, debido a que
los procesos se dividen en un conjunto de partes más pequeñas, la fragmentación
externa será menor.

Mientras que la paginación es transparente al programador, la segmentación es


generalmente visible y se proporciona como una comodidad para la organización
de los programas y datos. Normalmente, el programador o el compilador asignan
los programas y los datos a diferentes segmentos. En aras de la programación
modular, el programa o los datos pueden ser divididos de nuevo en diferentes
segmentos. El principal inconveniente de este servicio es que el programador debe
ser consciente de la limitación de tamaño máximo de los segmentos.
Memoria virtual

En función del tamaño del programa, los datos y las pilas combinados podrán
exceder la cantidad de memoria física disponible. El S.O. guarda aquellas partes
del programa que se encuentran en uso corriente en la memoria central y el resto
en el disco.

Ejemplo: un programa de 1 Mbyte se puede ejecutar en una máquina de


256kbyteeligiendo cuidadosamente cual bloque de 256k se debe guardar en la
memoria en cada instante, con las partes del programa que se intercambian entre
el disco y la memoria a medida que se necesiten.

Implicaciones de esta nueva estrategia. La segunda más sorprendente que la


primera. Ambas conducen a mejoras en la utilidad del sistema:

1) Se pueden conservar más procesos en memoria principal. Puesto que se van


a cargar sólo algunos fragmentos de un proceso particular, habrá sitio para más
procesos. Esto conduce a una utilización más eficiente del procesador, puesto que
es más probable que, por lo menos, uno de los numerosos procesos esté en estado
Listo en un instante determinado.

2) Es posible que un proceso sea más grande que toda la memoria principal.
Se elimina así una de las limitaciones más notorias de la programación. Sin el
esquema que se ha expuesto, un programador debe ser consciente de cuánta
memoria tiene disponible. Si el programa que está escribiendo es demasiado
grande, el programador debe idear formas de estructurar el programa en
fragmentos que puedan cargarse de forma separada con algún tipo de estrategia
de superposición. Con una memoria virtual basada en paginación o
segmentación, este trabajo queda para el sistema operativo y el hardware. En lo
que atañe al programador, se las arregla con una memoria enorme, dependiendo
del tamaño de almacenamiento en disco. El sistema operativo cargará
automáticamente en memoria principal los fragmentos de un proceso cuando los
necesita.

Como los procesos se ejecutan sólo en memoria principal, a esta memoria se le


llama memoria real. Pero un programador o usuario percibe en potencia una
memoria mucho mayor, que está situada en el disco. Esta última se conoce por
memoria virtual.

La memoria virtual permite una multiprogramación muy efectiva y releva al usuario


de las rígidas e innecesarias restricciones de la memoria principal. La tabla

Memoria virtual paginada

El término memoria virtual se asocia normalmente con sistemas que emplean


paginación, aunque también se puede usar memoria virtual basada en la
segmentación, que se tratará después.

En el estudio de la paginación simple se indicó que cada proceso tiene su propia


tabla de páginas y que, cuando carga todas sus páginas en memoria principal, se
crea y carga en memoria principal una tabla de páginas. Cada entrada de la
tabla de páginas contiene el número de marco de la página correspondiente en
memoria principal. Cuando se considera un esquema de memoria virtual basado
en la paginación se necesita la misma estructura, una tabla de páginas.
Nuevamente, es normal asociar una única tabla de páginas con cada proceso. En
este caso, sin embargo, las entradas de la tabla de páginas pasan a ser más
complejas. Puesto que sólo algunas de las páginas de un proceso pueden estar en
memoria principal, se necesita un bit en cada entrada de la tabla para indicar si la
página correspondiente está presente (P) en memoria principal o no lo está. Si el
bit indica que la página está en memoria, la entrada incluye también el número
de marco para esa página.

Otro bit de control necesario en la entrada de la tabla de páginas es el bit de


modificación (M), para indicar si el contenido de la página correspondiente se ha
alterado desde que la página se cargó en memoria principal. Si no ha habido
cambios, no es necesario escribir la página cuando sea sustituida en el marco que
ocupa actualmente. Puede haber también otros bits de control. Por ejemplo, si la
protección o la compartición se gestionan a nivel de página, se necesitarán más
bits con tal propósito.
Tabla de páginas con memoria virtual.

Memoria virtual segmentada

En el estudio de la segmentación simple, se llegó a la conclusión de que cada


proceso tiene su propia tabla de segmentos y que, cuando todos los segmentos se
encuentran en memoria principal, la tabla de segmentos del proceso se crea y
carga en memoria. Cada entrada de la tabla de segmentos contiene la dirección
de comienzo del segmento correspondiente en memoria principal, así como su
longitud. La misma estructura, una tabla de segmentos, se necesitará al hablar de
un esquema de memoria virtual basado en segmentación. Nuevamente, es normal
asociar una única tabla de segmentos a cada proceso. En este caso, sin embargo,
las entradas de la tabla de segmentos pasan a ser más complejas. Puesto que sólo
algunos de los segmentos de un proceso estarán en memoria principal, se necesita
un bit en cada entrada de la tabla de segmentos para indicar si el segmento
correspondiente está presente en memoria principal. Si el bit indica que el
segmento está en memoria, la entrada incluye también la dirección de comienzo
y la longitud del segmento.

Otro bit de control necesario en la entrada de la tabla de segmentos es un bit de


modificación que indique si el contenido del segmento correspondiente ha sido
modificado desde que se cargó por última vez en memoria principal. Si no ha
habido cambios, no será necesario escribir a disco el segmento cuando llegue el
momento de reemplazarlo en el marco que ocupa actualmente. Puede haber
también otros bits de control. Por ejemplo, si se gestiona la protección o la
compartición a nivel del segmento, se necesitarán bits con tal propósito. Más
adelante se verán varios ejemplos de entradas de tablas de segmentos.
Tabla de segmentos con memoria virtual

• Paginación y segmentación combinadas

Tanto la paginación como la segmentación tienen sus ventajas. La paginación,


que es transparente al programador, elimina la fragmentación externa y, de este
modo, aprovecha la memoria principal de forma eficiente. Además, puesto que
los fragmentos que se cargan y descargan de memoria principal son de tamaño
constante e igual para todos, es posible construir algoritmos de gestión de memoria
sofisticados que aprovechen mejor el comportamiento de los programas. La
segmentación, que es visible para el programador, tiene las ventajas antes citadas,
incluida la capacidad de manejar estructuras de datos que puedan crecer, la
modularidad y el soporte de la compartición y la protección. Para combinar las
ventajas de ambas, algunos sistemas están equipados con hardware del
procesador y software del sistema operativo que las permiten.

En un sistema con paginación y segmentación combinadas, el espacio de


direcciones de un usuario se divide en varios segmentos según el criterio del
programador. Cada segmento se vuelve a dividir en varias páginas de tamaño fijo,
que tienen la misma longitud que un marco de memoria principal. Si el segmento
tiene menor longitud que la página, el segmento ocupará sólo una página.

Paginación y segmentación combinadas con memoria virtual


Actividad de aprendizaje optativa Nº 13
1) Describir las técnicas de administración de memoria en un
esquema de contenidos.

2) Remitir el organizador gráfico elaborado por el buzón de envíos

RESUMEN DE LAS TÉCNICAS DE GESTIÓN DE MEMORIA


Lectura bibliográfica obligatoria:

Selección de Capítulos:

-WILLAMS STALLINGS (2005). Sistemas Operativos. Prentice Hall.


(Capítulos 7 y 8)
-ANDREW TANENBAUM (2009). Sistemas Operativos Modernos.
Prentice

Hall (Capitulo 3)

CARRETERO JESÚS (2001) “Sistemas Operativos. Una visión aplicada”.

Editorial Mc Graw-Hill, 1era Edición.

(Capítulo 4 y 8)

MATERIAL AUDIOVISUAL
Visualización de video clases Nº 8 disponible en el Sector

“Recursos” de la Plataforma virtual

Actividad de aprendizaje obligatoria Nº 14


Consignas: Realizar la actividad de aprendizaje obligatoria Nro. 14
que se encuentra disponible en la plataforma virtual.

Enlace Web

https://www.youtube.com/watch?v=vTsKBSTCygg
UNIDAD 5
ADMINISTRACION DE
ARCHIVOS

Todas las aplicaciones necesitan almacenar y recuperar información. Mientras un


proceso está ejecutándose puede almacenar cierta cantidad de información
dentro de su propio espacio de direcciones. Sin embargo, esa capacidad de
almacenamiento está limitada por el tamaño del espacio de direcciones virtual.
Para algunas aplicaciones ese tamaño es adecuado, pero para otras, tales como
la reserva de billetes de avión, la banca o el registro de las operaciones realizadas
por una empresa, resulta demasiado pequeño.

Un segundo problema con el que nos encontramos al guardar la información


dentro del espacio de direccionamiento de un proceso es que cuando el proceso
termina, la información se pierde. Para muchas aplicaciones (por ejemplo, para las
bases de datos) la información debe ser retenida durante semanas, meses o incluso
para siempre. Es inaceptable permitir que la información se desvanezca cuando
termina el proceso que la utiliza. Además, tampoco debe perderse aunque el
proceso se destruya repentinamente debido a una caída del sistema.

Un tercer problema es que frecuentemente es necesario que múltiples procesos


accedan a (partes de) la información al mismo tiempo. Si disponemos de una guía
telefónica almacenada dentro del espacio de direccionamiento de un único
proceso, sólo ese proceso va a poder acceder a ella. La manera de resolver este
problema es hacer que la información sea ella misma independiente de cualquier
proceso.

Entonces tenemos ya tres requerimientos esenciales para el almacenamiento a


largo plazo de la información:

1. Debe poder almacenarse una cantidad de información muy grande.

2. La información debe permanecer tras la terminación del proceso que la usa.

3. Debe permitir que múltiples procesos puedan acceder a la información


concurrentemente
La solución usual a todos estos problemas es almacenar la información sobre discos
y otros medios externos en unidades denominadas archivos. Los procesos pueden
entonces leerlos y crear nuevos archivos si es necesario. La información
almacenada en los archivos debe ser persistente, esto es, no debe verse afectada
por la creación y terminación de los procesos. Un archivo sólo puede desaparecer
cuando su propietario lo borre de forma explícita.

Los archivos están gestionados por el sistema operativo. La forma en la cual están
estructurados, cómo se nombran, se acceden, se utilizan, se protegen e
implementan son temas principales en el diseño de los sistemas operativos.
Globalmente, a esa parte del sistema operativo que trata los archivos se la conoce
como el sistema de archivos.

ARCHIVOS
En las páginas siguientes examinaremos los archivos desde la perspectiva del
usuario; es decir, cómo se utilizan y qué propiedades tienen.

Nombres de archivo
Los archivos son un mecanismo de abstracción que permite almacenar
información en el disco y leerla después. Esto debe hacerse de tal modo que el
usuario no tenga que enterarse de los detalles de cómo y dónde está almacenada
la información, y de cómo funcionan en realidad los discos.

Tal vez la característica más importante de cualquier mecanismo de abstracción


es la forma en la que se da nombre a los objetos que se manejan, así que
comenzaremos nuestro estudio de los sistemas de archivos con el tema de los
nombres de archivo. Cuando un proceso crea un archivo, le asigna un nombre.
Cuando el proceso termina, el archivo sigue existiendo y otros programas pueden
tener acceso a él utilizando su nombre.

Las reglas exactas para nombrar archivos varían un tanto de un sistema a otro, pero
todos los sistemas operativos actuales permiten usar cadenas de una a ocho letras
como nombres de archivo válidos. Así andrea, bruce y cathy son posibles nombres
de archivo. Es común que se permitan también dígitos y caracteres especiales, de
modo que nombres como 2, urgent!. Muchos sistemas de archivos reconocen
nombres de hasta 255 caracteres de longitud.
Algunos sistemas de archivos distinguen entre mayúsculas y minúsculas, pero otros
no. UNIX pertenece a esta primera categoría; MS-DOS, a la segunda. Por tanto, en
un sistema UNIX los siguientes nombres corresponden a tres archivos distintos: maria,
Maria y MARIA. En MS-DOS, todos esos nombres se refieren al mismo archivo.

Quizá valga la pena hacer aquí una pequeña digresión en lo tocante a los nombres
de archivo. Tanto Windows 95 como Windows 98, Windows NT y Windows 2000
utilizan y reconocen el sistema de archivos de MS-DOS, y por lo tanto heredaron
muchas de sus propiedades, como la forma de construir nombres de archivo. Sin
embargo, Windows NT y Windows 2000 también tienen un sistema de archivos
nativo (NTFS) que tiene diferentes propiedades (como nombres de archivo en
Unicode).

Muchos sistemas de archivos manejan nombres de archivo con dos partes,


separadas por un punto, como en prog.cpp y programa.pas. La parte que sigue al
punto se denomina extensión del archivo, y normalmente indica algo acerca del
archivo. En MS-DOS, por ejemplo, los nombres de archivo tienen de uno a ocho
caracteres, más una extensión opcional de uno a tres caracteres.

En algunos sistemas (como UNIX) las extensiones de archivo son sólo un convenio y
el sistema operativo no vigila que se utilicen de alguna manera específica. Un
archivo llamado archivo.txt puede ser algún tipo de archivo de texto, pero el
nombre sirve más para recordar ese hecho a su propietario que para comunicar
alguna información real al ordenador. En cambio, un compilador de C podría insistir
en que cualquier archivo que vaya a compilar termine en .c, y podría negarse a
compilarlo de no ser así.

En contraste, Windows tiene conocimiento de las extensiones y les asigna un


significado. Los usuarios (o procesos) pueden registrar extensiones de cara al
sistema operativo y especificar, para cada una, qué programa es el “dueño” de la
extensión. Cuando un usuario hace doble clic sobre un nombre de archivo, se inicia
el programa asociado a su extensión de archivo, con el nombre de archivo como
parámetro. Por ejemplo, si se hace doble clic en archivo.doc, se iniciará el
programa Word de Microsoft, y éste abrirá archivo.doc como primer documento a
editar.

Estructura de los archivos


Los archivos pueden estructurarse de varias maneras. En la siguiente se ilustran tres
posibilidades comunes.

El archivo de la Figura (a) es una sucesión no estructurada de bytes. En efecto, el


sistema operativo no sabe qué contiene el archivo, ni le interesa; lo único que ve
son bytes. Cualquier significado que tenga el archivo deberán atribuírselo los
programas en el nivel de usuario. Tanto UNIX como Windows utilizan este enfoque.
Hacer que el sistema operativo vea los archivos únicamente como sucesiones de
bytes ofrece el máximo de flexibilidad. Los programas de usuario pueden colocar
lo que deseen en sus archivos y darles el nombre que les convenga. El sistema
operativo no ayuda, pero tampoco estorba. Esto es muy importante para los
usuarios que desean hacer cosas fuera de lo común.
El primer paso de estructuración se muestra en el caso (b) de la figura anterior. En
este modelo, un archivo es una sucesión de registros de longitud fija, cada uno de
los cuales tiene cierta estructura interna. Un aspecto fundamental de la idea de
que un archivo es una sucesión de registros es la idea de que la operación de
lectura devuelve un registro y que la operación de escritura sobrescribe o añade
un registro.

El tercer tipo de estructura de archivo se muestra en el caso (c) de la figura. En esta


organización un archivo consiste en un árbol de registros, no todos necesariamente
de la misma longitud, cada uno de los cuales contiene un campo clave en una
posición fija del registro. El árbol está ordenado según el campo clave, con objeto
de poder hallar con rapidez una clave en particular.

La operación básica aquí no es obtener el “siguiente” registro, aunque también


puede hacerse, sino obtener el que tenga una clave dada. En el caso del archivo
del zoológico de la figura (c), se le podría pedir al sistema que obtenga el registro
cuya clave es Pony, por ejemplo, sin preocuparse por su posición exacta en el
archivo. Además, es posible añadir registros nuevos al archivo y dejar que sea el
sistema operativo, no el usuario, quien decida dónde colocarlos. Es obvio que este
tipo de archivo es muy distinto de los flujos de bytes no estructurados que se usan
en UNIX y Windows, pero se utiliza en forma amplia en los grandes ordenadores
mainframe que todavía se emplean en el procesamiento comercial de datos.

Tipos de archivos
Muchos sistemas operativos reconocen varios tipos de archivos. UNIX y Windows,
por ejemplo, tienen archivos regulares y directorios. UNIX también tiene archivos
especiales de bloques y de caracteres. Los archivos regulares son los que contienen
información del usuario. Todos los archivos de la figura anterior son archivos
regulares. Los directorios son archivos del sistema que sirven para mantener la
estructura del sistema de archivos, y los estudiaremos más adelante. Los archivos
especiales de caracteres tienen que ver con la entrada/salida, y sirven para
modelar dispositivos de E/S de tipo serie como terminales, impresoras y redes. Los
archivos especiales de bloques sirven para modelar discos. En esta unidad nos
referiremos primordialmente a los archivos regulares.

Los archivos regulares son normalmente archivos ASCII o archivos binarios. Los
archivos ASCII consisten en líneas de texto. En algunos sistemas, cada línea termina
con un carácter de retorno de carro; en otros se usa el carácter de salto de línea.
Algunos sistemas (como MS-DOS) utilizan ambos. No es necesario que todas las
líneas sean de la misma longitud.
La gran ventaja de los archivos ASCII es que pueden visualizarse e imprimirse tal
cual, y pueden editarse con cualquier editor de texto. Además, si un gran número
de programas utiliza archivos ASCII como su entrada y su salida, es fácil conectar
la salida de un programa con la entrada de otro.

Otros archivos son binarios, lo que significa simplemente que no son archivos ASCII.
Si se escriben en una impresora se produce un listado incomprensible que parece
estar lleno de basura. Normalmente, estos archivos tienen alguna estructura interna
solo conocida por los programas que los usan.

Acceso a archivos
Los primeros sistemas operativos sólo permitían un tipo de acceso a los archivos:
acceso secuencial. En aquellos sistemas, un proceso podía leer todos los bytes o
registros de un archivo por orden, comenzando por el principio, pero no podía
efectuar saltos para leerlos en otro orden. Lo que sí podía hacerse con los archivos
secuenciales era “rebobinarlos” para poder leerlos tantas veces como se quisiera.
Los archivos secuenciales eran apropiados cuando el medio de almacenamiento
era la cinta magnética, no el disco.

Cuando comenzaron a usarse discos para almacenar archivos se hizo posible leer
los bytes o registros de un archivo sin un orden específico, o tener acceso a los
registros por clave, no por posición. Los archivos cuyos bytes o registros pueden
leerse en cualquier orden se denominan archivos de acceso aleatorio, y muchas
aplicaciones los necesitan.

Los archivos de acceso aleatorio son indispensables en muchas aplicaciones,


como los sistemas de bases de datos. Si un cliente de una línea aérea llama para
reservar un asiento en un vuelo dado, el programa de reservas deberá contar con
la capacidad de acceder al registro de ese vuelo sin tener que leer primero los
demás miles de vuelos existentes.

Se utilizan dos métodos para especificar dónde debe comenzar la lectura. En el


primero, cada operación read da la posición en el archivo dónde debe
comenzarse a leer. En el segundo, se cuenta con una operación especial, seek,
para establecer la posición actual.

Después del seek, el archivo podrá leerse de forma secuencial a partir de la


posición que ahora es la actual.
Atributos de los archivos
Todo archivo tiene un nombre y datos. Además, todos los sistemas operativos
asocian otra información a cada archivo, como la fecha y la hora en que se creó,
y su tamaño. Llamaremos a esta información adicional atributos del archivo. La lista
de atributos varía de manera considerable de un sistema a otro. La siguiente tabla
muestra algunas de las posibilidades, pero existen otras. Ningún sistema actual
maneja todos estos atributos, pero todos están presentes en algún sistema.

Los primeros cuatro atributos tienen que ver con la protección del archivo e indican
quién puede tener acceso a él y quién no. En algunos sistemas el usuario debe
presentar una contraseña para el acceso a un archivo, en cuyo caso la contraseña
deberá ser uno de los atributos.

Los indicadores son bits o campos cortos que controlan o habilitan alguna
propiedad específica. Los archivos ocultos, por ejemplo, no aparecen en los
listados de todos los archivos. El indicador de archivado es un bit que indica si el
archivo ya se respaldó o no. El programa de respaldo lo establece a 0 y el sistema
lo pone a 1 cada vez que se modifica el archivo. Así, el programa de respaldo sabe
qué archivos deben respaldarse. El indicador temporal permite marcar un archivo
para que se borre de forma automática cuando termine el proceso que lo creó.

Los campos de longitud del registro, posición de la clave y longitud de la clave sólo
están presentes en archivos cuyos registros pueden consultarse empleando una
clave. Dichos campos proporcionan la información necesaria para hallar las
claves.

Las diversas horas llevan el control de cuándo se creó el archivo, cuándo fue la
última vez que se tuvo acceso a él y cuando fue la última vez que se modificó. Son
útiles para varias cosas. Por ejemplo, si un archivo fuente se modificó después de
crear el archivo objeto correspondiente, será necesario recompilarlo. Estos campos
proporcionan la información necesaria.

El tamaño actual indica lo grande que es un archivo. Algunos sistemas operativos


de mainframe antiguos exigen que se especifique el tamaño máximo cuando se
crea un archivo, para poder reservar por adelantado la cantidad máxima de
espacio de almacenamiento. Los sistemas operativos de estaciones de trabajo y
ordenadores personales son lo bastante inteligentes como para prescindir de esa
información.

Operaciones con archivos


Los archivos existen para guardar información y poder recuperarla después. Los
distintos sistemas ofrecen diferentes operaciones de almacenamiento y
recuperación.

A continuación, estudiaremos las llamadas al sistema más comunes relacionadas


con los archivos.

1. Create. Se crea el archivo sin datos. El objetivo de la llamada es anunciar


que va a haber un archivo nuevo y establecer algunos de sus atributos.

2. Delete. Si ya no se necesita un archivo, conviene borrarlo para desocupar el


espacio en disco. Siempre hay una llamada al sistema para ese fin.

3. Open. Antes de usar un archivo, un proceso debe abrirlo. El propósito de las


llamadas open es que el sistema obtenga los atributos y la lista de direcciones de
disco y los coloque en la memoria principal para tener acceso a ellos rápidamente
en llamadas posteriores.

4. Close. Una vez que han terminado todos los accesos, ya no se necesitarán
los atributos y direcciones en disco, por lo que es recomendable cerrar el archivo
para desocupar espacio en las tablas internas. Muchos sistemas fomentan esto
imponiendo un límite para el número de archivo que pueden tener abiertos los
procesos. Los discos se escriben en bloques, y el cierre de un archivo hace que se
escriba el último bloque del archivo, aunque no esté lleno por completo.
5. Read. Se leen datos de un archivo. Normalmente, los bytes provienen de la
posición actual. Quien efectúa la llamada debe especificar cuántos datos
necesita, y el búfer donde deben colocarse.

6. Write. Se escriben datos en un archivo, también, normalmente, en la posición


actual. Si la posición actual es el fin del archivo, aumenta el tamaño del archivo. Si
la posición actual está en un punto intermedio del archivo, los datos existentes se
sobrescriben y se perderán sin remedio.

7. Append. Esta llamada es una forma restringida de write; con ella sólo se
puede agregar datos al final del archivo. Los sistemas que ofrecen un número
mínimo de llamadas al sistema por lo general no tienen append, pero muchos
sistemas ofrecen varias formas de hacer lo mismo, y en algunos casos cuentan con
append.

8. Seek. En el caso de archivos de acceso aleatorio, se requiere alguna forma


de especificar el punto del archivo de donde se tomarán los datos. Un método
común es usar una llamada al sistema, seek, que sitúe el puntero del archivo en un
lugar específico del archivo. Una vez ejecutada esta llamada, podrán leerse datos
de esa posición, o escribir en ella.

9. Get attributes. Muchas veces los procesos necesitan leer los atributos de un
archivo para efectuar su trabajo. Por ejemplo, el programa make de UNIX se usa
por lo común para administrar proyectos de desarrollo de software que contienen
muchos archivos fuente. Cuando se invoca a make se examinan los tiempos de
modificación de todos los archivos fuente y objeto y se determina el número mínimo
de compilaciones necesarias para que todo esté actualizado. Para efectuar su
trabajo, el sistema debe examinar atributos, a saber, las horas de modificación.

10. Set attributes. El usuario puede establecer algunos de los atributos, o


modificarlos después de que se creó el archivo, y eso se logra con esta llamada al
sistema. La información de modo de protección es un ejemplo obvio. Casi todos
los indicadores pertenecen también a esa categoría.

11. Rename. Es común que un usuario necesite cambiar el nombre de un archivo


existente. Esta llamada al sistema lo hace posible. No siempre es estrictamente
necesaria, pues por lo general el archivo puede copiarse en un archivo nuevo con
el nuevo nombre, borrando después el archivo viejo.
DIRECTORIOS
Para llevar el control de los archivos, los sistemas de archivos suelen tener directorios
o carpetas que, en muchos sistemas son a su vez archivos. En esta sección veremos
los directorios, su organización, sus propiedades y las operaciones que pueden
realizarse con ellos.
Sistemas de directorios jerárquicos
Es muy común que los usuarios quieran agrupar sus archivos de forma lógica. Un
profesor, por ejemplo, podría tener una serie de archivo que juntos integran un libro
que está escribiendo para un curso, una segunda colección de archivos formada
por programas que han presentado los estudiantes para otro curso, un tercer grupo
de archivos que contienen el código de un sistema avanzado para escribir
compiladores que está desarrollando, un cuarto grupo de archivos que contienen
propuestas de becas, así como otros archivos de correo electrónico, minutas de
reuniones, artículos que está escribiendo, juegos, etc. Se necesita alguna forma de
agrupar estos archivos dentro de esquemas flexibles determinados por el usuario.

Lo que se necesita es una jerarquía general (es decir, un árbol de directorios). Con
este enfoque, cada usuario puede tener tantos directorios como necesite para
agrupar sus archivos en categorías naturales. El enfoque se muestra en la siguiente
figura. Aquí, los directorios A, B y C contenidos en el directorio raíz pertenecen cada
uno a un usuario distinto, dos de los cuales han creado un subdirectorio para los
proyectos en los que están trabajando.
Nombres de camino o ruta de acceso
Cuando un sistema de archivos está organizado como un árbol de directorios, se
necesita un mecanismo para especificar los nombres de archivo. Por lo común se
utilizan dos métodos. En el primero, cada archivo recibe un nombre de camino
absoluto que consiste en el camino que debe seguirse para llegar del directorio raíz
hasta el archivo. Por ejemplo, el camino /usr/ast/correo nos indica que el directorio
raíz contiene un subdirectorio, usr, que a su vez contiene un subdirectorio, ast, que
contiene el archivo correo. Los nombres de camino absolutos siempre parten del
directorio raíz y son únicos. En UNIX los componentes del camino se separan con /.
En Windows el separador es \. En MULTICS era >. Así el mismo nombre de camino se
escribiría como sigue en esos tres sistemas:

• Windows \usr\ast\correo

• UNIX /usr/ast/correo

• MULTICS >usr>ast>correo

Sea cual sea el carácter empleado, si el primer carácter del nombre de camino es
el separador, el camino será absoluto.

El otro tipo de nombre es el nombre de camino relativo. Éste se utiliza junto con el
concepto de directorio de trabajo (también llamado directorio actual). Un usuario
puede designar un directorio como su directorio de trabajo actual, en cuyo caso
todos los nombres de camino que no comiencen en el directorio raíz se
considerarán relativos al directorio de trabajo.

Por ejemplo, si el directorio de trabajo actual es /usr/ast, podrá hacerse referencia


al archivo cuyo camino absoluto es /usr/ast/correo simplemente mediante correo.

Algunos programas necesitan tener acceso a un archivo específico sin importar


cuál sea el directorio de trabajo; en tal caso, siempre deberán utilizar nombres de
camino absolutos. Por ejemplo, un corrector ortográfico podría tener que leer
/usr/lib/diccionario para realizar su trabajo.

La mayoría de los sistemas operativos que disponen de sistema de directorio


jerárquico tienen dos entradas especiales en cada directorio, “.” y “..” que
normalmente se pronuncian “punto” y “punto punto”. Punto se refiere al directorio
actual; punto punto se refiere a su padre. Para ver cómo se utilizan esas entradas,
consideremos el árbol de archivos UNIX de la siguiente figura. Cierto proceso tiene
/usr/ast como su directorio de trabajo. Ese proceso puede utilizar “..” para subir por
el árbol. Por ejemplo, el proceso puede copiar el archivo /usr/ast/diccionario a su
propio directorio emitiendo el comando cp

../lib/diccionario .

El primer camino le indica al sistema que suba en la jerarquía (al directorio usr) y
luego que baje al directorio lib para hallar el archivo diccionario.

El segundo argumento (punto) nombra el directorio actual. Cuando el comando


cp recibe un nombre de directorio (que puede ser punto) como segundo
argumento, copia todos los archivos ahí. Desde luego, una forma más normal de
efectuar la copia sería teclear cp /usr/lib/diccionario.

Aquí el uso de punto ahorra al usuario el trabajo de teclear otra vez diccionario. No
obstante, teclear

cp /usr/lib/diccionario diccionario también funciona a la perfección, lo mismo que

cp /usr/lib/diccionario /usr/ast/diccionario

Todos estos comandos hacen exactamente lo mismo.


Operaciones con directorios
Las llamadas al sistema que pueden emitirse para administrar los directorios
presentan más variaciones entre los diferentes sistemas que las llamadas para
administrar los archivos. Para dar una idea de cuáles son y cómo funcionan, damos
la siguiente muestra (tomada de UNIX).

1. Create. Se crea un directorio, el cual está vacío excepto por punto y punto
punto, que el sistema coloca ahí (o, en algunos casos, el programa mkdir).

2. Delete. Se elimina un directorio. Sólo es posible eliminar un directorio vacío.


Se considera vacío un directorio que sólo contiene los directorios punto y punto
punto. Por lo general no pueden borrarse esas entradas.

3. Opendir. Los directorios pueden leerse. Por ejemplo, si se desea visualizar la


lista de todos los archivos contenidos en un directorio, el programa que los visualiza
debe abrir el directorio para leer los nombres de todos los archivos que contiene.
Para poder leer un directorio es necesario abrirlo antes, de forma análoga a como
se abre y se lee un archivo.

4. Closedir. Una vez que se ha terminado de leer un directorio, debe cerrarse


para desocupar espacio en las tablas internas.

5. Readdir. Esta llamada devuelve la siguiente entrada de un directorio abierto.


Antes era posible leer directorios utilizando la llamada al sistema read normal, pero
eso tenía la desventaja de que obligaba al programador a conocer y tener en
cuenta la estructura interna de los directorios. En cambio, readdir siempre devuelve
una entrada en el formato estándar, sin importar cuál de las posibles estructuras de
directorio se estén utilizando.

6. Rename. En muchos sentidos, los directorios son como archivos y se les


puede cambiar el nombre igual que a los archivos.

7. Link. El enlazado es una técnica que permite a un archivo aparecer en más


de un directorio. Esta llamada al sistema especifica un archivo existente y un
nombre de camino, y crea un enlace entre el archivo existente y el nombre
especificado por el camino. Así el mismo archivo podría aparecer en múltiples
directorios. Un enlace de este tipo, que incrementa el contador en el i-nodo del
archivo (para llevar la cuenta del número de entradas de directorio que contienen
al archivo), se conoce como enlace duro.

8. Unlink. Se elimina una entrada de directorio. Si el archivo que se está


desenlazando sólo está presente en un directorio (que es lo más común), se elimina
del sistema de archivos. Si está presente en varios directorios, sólo se elimina el
nombre de camino especificado; los demás permanecerán. En UNIX, la llamada al
sistema para borrar archivos (que vimos antes) en realidad es un link. La lista anterior
incluye las llamadas más importantes, pero hay unas pocas más, como las que
administran la información de protección asociada con un directorio.

ACTIVIDAD DE APRENDIZAJE OPTATIVA Nro. 15


Actividad colaborativa grupal

Elaborar un cuadro comparativo, estableciendo semejanzas y


diferencias, sobre la gestión de archivos por parte de los sistemas
operativos iOS y Android.

IMPLEMENTACIÓN DEL SISTEMA DE ARCHIVOS


Los sistemas de archivos se almacenan en discos. Casi todos los discos pueden
dividirse en una o más 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 el ordenador. El final del MBR contiene la
tabla de particiones. Esta tabla contiene las direcciones inicial y final de cada
partición. Una de las particiones de la tabla está marcada como activa. Cuando
se enciende el ordenador, 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 sistema operativo contenido en esa partición. Por uniformidad, cada
partición, comienza con un bloque de arranque, aunque no contenga un sistema
operativo arrancable. De cualquier modo, ese bloque podría contener uno en el
futuro, por lo que es una buena idea reservarlo.

Aparte de comenzar con un bloque de arranque, la organización de una partición


del disco varía de forma considerable de un sistema de archivos a otro. Es común
que el sistema de archivos contenga algunos de los elementos que se muestran en
la figura.
El primero es el super bloque, que contiene todos los parámetros clave acerca del
sistema de archivos y se transfiere del disco a la memoria cuando se arranca el
ordenador o cuando se toca por primera vez el sistema de archivos. La información
que suele contener un super bloque incluye un número mágico para identificar el
tipo de sistema de archivos, el número de bloques que hay en el sistema de
archivos y otra información administrativa crucial.

A continuación, podría haber información acerca de bloques libres en el sistema


de archivos, por ejemplo, en forma de mapa de bits o de una lista de punteros.
Luego podrían estar los i-nodos, un array de estructuras, una por archivo, que
proporciona todas las características del archivo. Después podría venir el directorio
raíz, que contiene la parte más alta del árbol del sistema de archivos o sea todos
los directorios y/o archivos almacenados en él. Por último, el resto del disco suele
contener los demás directorios y archivos.

Implementación de los archivos


Tal vez el aspecto más importante de la implementación del almacenamiento de
los archivos sea llevar el control de qué bloques de disco corresponden a qué
archivo. Se emplean diversos métodos en los distintos sistemas operativos. En esta
sección examinaremos algunos de ellos: Asignación contigua, Asignación por lista
enlazada y Nodo de índice (i-nodo).

Asignación contigua
El esquema de asignación más simple es almacenar cada archivo en una serie
contigua de bloques de disco. Así en un disco con bloques de 1 KB, se asignarían
50 bloques consecutivos a un archivo de 50 KB. Si los bloques fueran de 2 KB, se le
asignarían 25 bloques consecutivos.

Vemos un ejemplo de asignación de almacenamiento contiguo en la figura.


Ahí se muestran los primeros 40 bloques de disco, comenzando con el bloque 0 a
la izquierda. En un principio, el disco estaba vacío. Luego se escribió en el disco un
archivo A con una longitud de cuatro bloques a partir del principio (bloque 0).
Después se escribió un archivo de seis bloques, B, inmediatamente después de
archivo A. Cabe señalar que cada archivo comienza al principio de un bloque
nuevo, de modo que, si el archivo A en realidad ocupara 3,5 bloques, se
desperdiciaría algo de espacio al final del último bloque. En la figura se muestra un
total de siete archivos, cada uno comenzando en el bloque que sigue al último
bloque del archivo anterior. Se utiliza sombreado para que sea más fácil distinguir
los archivos.

La asignación de espacio contiguo en disco tiene dos ventajas importantes. La


primera es que su implementación es sencilla porque para llevar el control de
dónde están los bloques de un archivo basta con recordar dos números: la
dirección en disco del primer bloque y el número de bloques del archivo. Dado el
número del primer bloque, se podrá hallar el número de cualquier otro bloque
mediante una simple suma.

La segunda ventaja es que la eficiencia en lectura es excelente porque puede


leerse todo el archivo del disco en una sola operación. Sólo se necesita un
desplazamiento del brazo (al primer bloque). Después no se requiere más
desplazamientos ni retrasos rotacionales, y los datos se transfieren con el ancho de
banda máximo que permite el disco. Así la asignación contigua es fácil de
implementar y tiene un alto rendimiento.

Por desgracia, la asignación contigua también tiene una importante desventaja:


con el tiempo, el disco se fragmenta. Para ver cómo sucede este, examinaremos
la siguiente figura.
Aquí se han borrado dos archivos C y F. Cuando se elimina un archivo, sus bloques
se liberan, dejando una serie de bloques libres en el disco. El disco no se compacta
de inmediato para tener un único hueco grande, pues eso requeriría copiar todos
los bloques que están después del hueco, de los cuales podría haber millones. El
resultado es que al final el disco se compone de archivos y huecos, como se ilustra
en la figura.

En un principio, esta fragmentación no es un problema porque es posible escribir


cada archivo nuevo al final del disco, después del anterior. Sin embargo, tarde o
temprano el disco se llenará y será necesario compactarlo, lo cual tiene un coste
prohibitivo, o reutilizar el espacio desocupado (los huecos). Para ello es necesario
mantener una lista de huecos, lo cual es factible. Sin embargo, cuando se va a
crear un archivo nuevo se hace necesario conocer su tamaño final para escoger
un hueco del tamaño correcto en el cual colocarlo.

No obstante, existe una situación en la que la asignación contigua es factible y, de


hecho, muy utilizada: en los CD-ROMs. Aquí se conoce con antelación el tamaño
de todos los archivos, y esos tamaños no cambiarán durante el uso posterior del
sistema de archivos del CDROM.

Asignación por lista enlazada


El segundo método para almacenar archivos consiste en mantener cada uno
como una lista enlazada de bloques de disco, como se muestra en la figura. La
primera palabra de cada bloque se utiliza como puntero al siguiente bloque del
archivo. El resto del bloque es para datos.

A diferencia de la asignación contigua, con este método pueden utilizarse todos


los bloques del disco. No se pierde espacio por fragmentación del disco (sólo por
fragmentación interna en el último bloque). Además, basta que la entrada del
directorio correspondiente al archivo guarde la dirección de disco del primer
bloque. El resto de bloques pueden localizarse a partir de ese punto.

Por otra parte, aunque la lectura secuencial de un archivo es directa, el acceso


aleatorio es lento en el extremo. Para llegar al bloque n, el sistema operativo tienen
que comenzar por el principio y leer los n – 1 bloques que lo preceden, uno por uno.
Es evidente que tantas lecturas hacen demasiado lento el acceso.

Las dos desventajas de la asignación por lista enlazada pueden eliminarse sacando
el puntero de cada bloque del disco y colocándolo en una tabla en la memoria.
La siguiente figura muestra cómo se vería la tabla para el ejemplo anterior. En
ambas figuras tenemos dos archivos. El archivo A ocupa los bloques de disco 4, 7,
2, 10 y 12, en ese orden, y el archivo B ocupa los bloques 6, 3, 11 y 14, en ese orden.
Con la tabla de la Figura 6-14, podemos partir del bloque 4 y seguir la cadena hasta
el final. Lo mismo puede hacerse partiendo del bloque 6. Ambas cadenas terminan
con un marcador especial (por ejemplo –1) que no es un número de bloque válido.
Una tabla así en la memoria principal se denomina una FAT (File Allocation Table;
tabla de asignación de archivos).

Con esta organización los bloques pueden llenarse ahora completamente con
datos. Además, el acceso aleatorio es mucho más fácil. Aunque todavía es
necesario seguir la cadena para hallar un desplazamiento dado dentro del archivo,
la cadena está por completo en la memoria, así que puede seguirse sin tener que
leer el disco. Al igual que con el método anterior, basta con que la entrada del
directorio guarde un único entero (el número del primer bloque) para poder
localizar todos los bloques, sin importar qué tamaño tenga el archivo. La desventaja
primordial de este método es que, para que funcione, toda la tabla debe estar en
la memoria todo el tiempo. Con un disco de 20 GB y bloques de 1 KB, la tabla
necesita 20 millones de entradas, una para cada uno de los 20 millones de bloques
del disco.

Cada entrada debe tener un mínimo de 3 bytes, y si se desea agilizar la consulta


se necesitan 4 bytes. Por tanto, la tabla ocupará 60 u 80 MB de memoria principal
todo el tiempo, dependiendo de si el sistema está optimizado desde el punto de
vista del espacio o del tiempo. Es concebible colocar la tabla en memoria
paginable, pero de todos modos ocuparía una gran cantidad de memoria virtual
y de espacio en disco, además de generar tráfico de paginación adicional.

i-nodos

El último método para llevar el control de qué bloques pertenecen a qué archivos
consiste en asociar a cada archivo una estructura de datos llamada inodo (nodo
de índice), que contiene los atributos y direcciones en disco de los bloques del
archivo. En la siguiente figura se muestra un ejemplo sencillo. Dado el i-nodo, es
posible hallar todos los bloques del archivo. La gran ventaja de este esquema
respecto de las listas enlazadas empleando una tabla en la memoria es que el i-
nodo sólo tiene que estar en memoria cuando el archivo correspondiente está
abierto. Si cada i-nodo ocupa n bytes y no puede haber más de k archivos abiertos
al mismo tiempo, la memoria total ocupada por el array que contiene los i-nodos
de los archivos abiertos es de sólo kn bytes. Únicamente es necesario reservar esa
cantidad de espacio.

Un problema de los i-nodos es que, si cada uno tiene espacio para un número fijo
de direcciones de disco, ¿qué sucede cuando un archivo crece más allá de ese
límite? Una solución es reservar la última dirección de disco no para un bloque de
datos, sino para la dirección de un bloque que contenga más direcciones de
bloques de disco, como se muestra en la figura anterior. Algo aún más avanzado
sería tener dos o más de esos bloques llenos de direcciones en disco o incluso
bloques de disco que apunten a otros bloques de disco llenos de direcciones.
Volveremos a ver los i-nodos cuando estudiemos UNIX más adelante.

Implementación de directorios
Para poder leer de un archivo, es preciso abrirlo primero. Cuando se abre un
archivo, el sistema operativo utiliza el nombre de camino 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 podría ser la dirección en disco de todo el archivo (asignación
contigua), el número del primer bloque (ambos esquemas de lista enlazada) o el
número del i-nodo. 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 los datos.

Un aspecto estrechamente relacionado es dónde deben guardarse los atributos.


Todo sistema de archivos mantiene atributos de los archivos, como su propietario y
tiempo de creación, y deben almacenarse en algún lado. Una posibilidad obvia es
guardarlos directamente en la entrada de directorio. Muchos sistemas hacen
precisamente esto. En la siguiente figura se muestra esta opción.
(a) Directorio sencillo que contiene entradas de tamaño fijo con las direcciones en
disco y los atributos de cada archivo. (b) Directorio en el que cada entrada sólo
hace referencia a un i-nodo.

En este sencillo diseño, 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 en disco (hasta algún máximo)
que indican dónde están los bloques de disco.

En los sistemas que utilizan i-nodos, otra posibilidad para almacenar los atributos es
en los i-nodos, en lugar de en las entradas de directorio. En este caso, la entrada
de directorio puede ser más corta: tan sólo un nombre de archivo y un número de
i-nodo. Este enfoque se ilustra en el caso (b) de la figura. Los dos enfoques que se
muestran en la figura corresponden a MSDOS/Windows y UNIX.

Administración del espacio en disco


Los archivos generalmente se almacenan en disco, por lo que la administración del
espacio en disco es de primordial interés para los diseñadores de sistemas de
archivos. Pueden adoptarse dos estrategias generales para almacenar un archivo
de n bytes: asignar n bytes consecutivos de espacio en disco, o dividir el archivo en
varios bloques (no necesariamente) contiguos

Como hemos visto, almacenar un archivo como una sucesión contigua de bytes
tiene el problema obvio de que, si un archivo crece, es probable que tenga que
pasarse a otro lugar del disco. Por ello, casi todos los sistemas de archivos dividen
los archivos en bloques de tamaño fijo que no tienen que ser adyacentes.

Tamaño de bloque
Una vez que se ha decidido almacenar archivos en bloques de tamaño fijo, surge
la pregunta de qué tamaño debe de tener un bloque. Dada la forma en que está
organizados los discos, el sector, la pista y el cilindro son candidatos obvios para ser
la unidad de asignación

(aunque todos estos tamaños dependen del dispositivo, lo cual es una


desventaja).

Tener una unidad de asignación grande, digamos un cilindro, implica que todos los
archivos, incluso aunque sólo tengan 1 byte, ocuparán cilindros enteros, lo que
implica un desperdicio grande del espacio total del disco.
Por otra parte, el uso de una unidad de asignación pequeña implica que cada
archivo va a constar de varios bloques. Leer cada bloque requiere por lo regular
un desplazamiento del brazo y una latencia rotacional, por lo que resulta lenta la
lectura de un archivo integrado por muchos bloques pequeños.

4 KB podría ser una buena opción, pero algunos sistemas operativos tomaron su
decisión hace mucho tiempo, cuando los parámetros de disco y los tamaños de
archivo eran diferentes. En el caso de UNIX, es común utilizar 1 KB. En el caso de MS-
DOS, el tamaño de bloque puede ser cualquier potencia de 2, desde 512 bytes
hasta 32 KB, pero está determinado por el tamaño del disco y por factores que no
tienen relación con estos argumentos. (El número máximo de bloques en una
partición de disco es 216, lo que obliga a usar bloques grandes en discos grandes.)
En un experimento para ver si el uso de archivos en Windows NT mostraba
diferencias apreciables respecto al uso de archivos en UNIX, Vogels hizo mediciones
de archivos en la Universidad de Cornell (Vogels, 1999). Observó que los resultados
son razonablemente congruentes con una mediana del tamaño de archivo
alrededor de 2 KB.

Control de bloques libres


Una vez escogido un tamaño de bloque, la siguiente cuestión es cómo llevar el
control de los bloques libres. Se usan dos métodos principalmente, los cuales se
muestran en la siguiente figura. El primero consiste en usar una lista enlazada de
bloques de disco, en cada uno de los cuales se guardan tantos números de
bloques de disco como quepan. Con bloques de disco de 1 KB y números de
bloque de 32 bits, cada bloque de la lista de bloques libres contendrá los números
de 256 bloques libres (1 KB/32 bits). Un disco de 16 GB necesitará una lista de
bloques libres de 16794 bloques como máximo para contener los 224 números de
bloque (16 GB tiene 16777216 bloques de 1 KB, cada bloque de la lista de bloques
libre puede contener 256 bloques libres del disco, por lo tanto, se requieren 65536
bloques libres). Es común que se utilicen bloques libres del disco para almacenar
esta la lista libre.
La otra técnica de administración del espacio libre es el 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). Un disco de 16
GB tiene 224 bloques de 1KB y por tanto requiere 224 bits para el mapa (1 bit por
cada bloque del disco), lo cual ocuparía 2048 bloques libres de la lista enlazada.
No es sorprendente que el mapa de bits requiera menos espacio, puesto que utiliza
1 bit por bloque, en comparación con 32 bits si se utiliza el modelo de la lista
enlazada. Sólo si el disco está lleno (es decir, si tiene pocos bloques libres) el
esquema de lista enlazada requerirá menos bloques que el mapa de bits. Por otra
parte, si hay muchos bloques libres, podrán pedirse prestados algunos de ellos para
almacenar la lista libre, sin pérdida de capacidad del disco. Si existe espacio
suficiente dentro de la memoria principal para contener el mapa de bits, ese
método es preferible, en este caso se requiere 2 MB de espacio libre en memoria
principal.
Lecturas bibliográficas Obligatorias
Selección de Capítulos:

-WILLAMS STALLINGS (2005). Sistemas Operativos. Prentice Hall.


(Capítulos 7 y 8)

-ANDREW TANENBAUM (2009). Sistemas Operativos Modernos.

Prentice Hall (Capitulo 3)

CARRETERO JESÚS (2001) “Sistemas Operativos. Una visión aplicada”.


Editorial Mc Graw-Hill, 1era Edición. (Capítulo 4 y 8)
MATERIAL AUDIOVISUAL
Visualización de video clases Nº 9 disponible en el Sector

“Recursos” de la Plataforma virtual


Actividad de aprendizaje obligatoria Nº 16
Consignas: Realizar el cuestionario de opciones múltiples dispuesto en
la sección de actividades de la plataforma.
UNIDAD 6
ADMINISTRACION DE E/S
Una de las principales funciones de un sistema operativo es la de controlar todos
los dispositivos de E/S (Entrada/Salida). El sistema operativo debe enviar comandos
a los dispositivos, atender las interrupciones y gestionar los errores. También debe
proporcionar una interfaz entre los dispositivos y el resto del sistema que sea sencilla
y fácil de utilizar. Hasta donde sea posible, la interfaz debe ser la misma para todos
los dispositivos (independencia del dispositivo). El código de E/S representa una
fracción significativamente grande del sistema operativo completo. La forma en la
cual el sistema operativo gestiona la E/S es el tema de este capítulo. Esta unidad
está organizada de la siguiente manera. En primer lugar, vamos a ver algunos de
los principios del hardware de E/S, para después fijarnos en el software de E/S en
general. El software de E/S puede estructurarse en capas, cada una de las cuales
tiene encomendada una tarea bien definida. Vamos a fijarnos en esas capas para
ver qué es lo que hacen y cómo encajan unas con otras. Siguiendo a esa
introducción, vamos a pasar a ver uno de los dispositivos de E/S más utilizado: el
disco.

DISPOSITIVOS DE E/S
En términos generales, los dispositivos de E/S pueden clasificarse en dos categorías:
dispositivos de bloques y dispositivos de caracteres. Un dispositivo de bloques es
uno que almacena la información en bloques de tamaño fijo, cada uno con su
propia dirección. El tamaño de los bloques varía desde 512 bytes a 32768 bytes. La
propiedad esencial de un dispositivo de bloques es que es posible leer o escribir
cada bloque independientemente de todos los demás. Los discos son los
dispositivos de bloques más comunes.

El otro tipo de dispositivos de E/S es el de los dispositivos de caracteres. Un dispositivo


de caracteres proporciona o acepta un flujo de caracteres, sin tener en cuenta
ninguna estructura de bloque. No es un dispositivo direccionable y no cuenta con
ninguna operación de posicionamiento. Las impresoras, los interfaces de red, los
ratones (para señalar en la pantalla), las ratas (para experimentar en el laboratorio
de psicología) y la mayoría de los otros dispositivos que no son similares a los discos,
pueden ser vistos como dispositivos de caracteres.

Este esquema de clasificación no es perfecto. Algunos dispositivos simplemente no


encajan en la clasificación. Por ejemplo, los relojes (timers) no son dispositivos
direccionables por bloques, ni tampoco generan o aceptan flujos de caracteres.
Lo único que hacen es provocar interrupciones a intervalos de tiempo bien
definidos. Las pantallas con RAM de vídeo mapeada en memoria tampoco
encajan bien en el modelo descrito. Sin embargo, el modelo de los dispositivos de
bloques y de caracteres es una base lo suficientemente general para conseguir
que una buena parte del software de E/S del sistema operativo sea independiente
del dispositivo. Por ejemplo, el sistema de ficheros trata sólo con dispositivos de
bloques abstractos, dejando para el software de nivel inferior la parte dependiente
del dispositivo.

Controladores de dispositivos
Las unidades de E/S constan normalmente de un componente mecánico y un
componente electrónico. En muchos casos es posible separar las dos partes para
tener un diseño más modular y general. El componente electrónico se denomina
controlador del dispositivo o adaptador. En los ordenadores personales, este
componente suele adoptar la forma de una tarjeta de circuito impreso (tarjeta
controladora) que puede insertarse en una ranura de expansión. El componente
mecánico es el dispositivo mismo.

La tarjeta controladora está provista usualmente de un conector en el cual puede


conectarse un cable que va al dispositivo. Muchas controladoras pueden manejar
dos, cuatro o incluso ocho dispositivos idénticos. Si la interfaz entre la controladora
y el dispositivo es un interfaz estándar, ya sea un estándar ANSI, IEEE o ISO oficial, o
un estándar de facto, eso permite que cualquier fabricante de hardware pueda
manufacturar controladores o dispositivos que se ajusten a esa interfaz.

Por ejemplo, muchas compañías de hardware fabrican unidades de disco


compatibles con la interfaz IDE o SCSI.
La interfaz entre el controlador y el dispositivo es a menudo una interfaz de muy
bajo nivel. Por ejemplo, un disco puede formatearse con 256 sectores de 512 bytes
por pista. Sin embargo, lo que en realidad sale de la unidad es un flujo de bits en
serie que comienza por un preámbulo, seguido de los 4096 bits de un sector y
terminando con una suma de verificación (checksum), también llamada un código
de corrección de errores (ECC; Error-Correcting Code). El preámbulo se escribe
cuando se formatea el disco, y contiene el número de cilindro y de sector, el
tamaño del sector y datos similares, así como información de sincronización.

La tarea del controlador consiste en convertir ese flujo de bits en serie en un bloque
de bytes y realizar cualquier corrección de errores que sea necesaria. Normalmente
primero se ensambla el bloque de bytes, bit a bit, en un búfer que está dentro del
controlador. Una vez comprobado su checksum y declarado el bloque libre de
errores, puede procederse a copiarlo en la memoria principal.

Un nivel igual de bajo, el controlador de un monitor también opera como un


dispositivo de bits en serie: lee de la memoria bytes que contienen los caracteres a
visualizar y genera las señales que sirven para modular el haz de electrones del CRT
para producir la escritura en la pantalla.

E/S mapeada en memoria


Cada controlador tiene unos cuantos registros que le sirven para comunicarse con
la CPU. Escribiendo en estos registros, el sistema operativo puede ordenar al
dispositivo que suministre datos, acepte datos, se encienda o apague a sí mismo,
o realice alguna otra acción. Leyendo de estos registros, el sistema operativo
puede averiguar en qué estado se encuentra el dispositivo, si está preparado o no
para aceptar un nuevo comando, etc. En ciertas computadoras estos registros son
parte del espacio normal de direcciones de la memoria. Este esquema se llama E/S
mapeada a memoria Además de los registros de control, muchos dispositivos tienen
un búfer de datos que el sistema operativo puede leer y escribir. Por ejemplo, en
muchos ordenadores la manera usual de visualizar píxeles en la pantalla es
mediante una RAM de vídeo (que es básicamente un búfer de datos) en la que los
programas o el sistema operativo pueden escribir. Muchos de los comandos tienen
parámetros, los cuales también se cargan en los registros del

controlador. Al aceptar un comando la CPU puede dejar al controlador y


dedicarse a otro trabajo. Al terminar el comando, el controlador provoca una
interrupción para permitir que el sistema operativo tome el control de la CPU y
verifica que los resultados de la operación. La CPU obtiene los resultados de la
operación y el estado del dispositivo al leer uno o más bytes de información de los
registros del controlador.

Acceso directo a memoria (DMA)


Independientemente de que tenga o no E/S mapeada en memoria, la CPU
necesita direccionar los controladores de dispositivo para intercambiar datos con
ellos. La CPU puede solicitar datos del controlador de E/S byte a byte, pero
haciéndolo así estaría desperdiciándose mucho tiempo de CPU debido a la
diferencia en las velocidades de funcionamiento. Por ese motivo normalmente se
utiliza un esquema diferente, denominado acceso directo a memoria (DMA; Direct
Memory Access). El sistema operativo sólo puede utilizar DMA si el hardware
dispone de un controlador de DMA, por lo que la mayoría de los sistemas cuentan
con él. A veces ese controlador está integrado en los controladores de disco o en
otros controladores, pero tal diseño significa tener un controlador de DMA por cada
dispositivo. Más comúnmente, se tiene un único controlador de DMA (por ejemplo,
en la placa madre) para regular las transferencias con múltiples dispositivos, a
menudo de forma concurrente.

Para explicar cómo funciona el DMA, veamos primero cómo se realizan las lecturas
del disco cuando no se utiliza DMA. Primero, el controlador lee el bloque (uno o
más sectores) de la unidad, bit a bit en serie, hasta que esté todo el bloque en el
búfer interno del controlador. Luego, calcula el checksum para comprobar que no
se produjeron errores al leer, y provoca una interrupción. Cuando el sistema
operativo comienza a ejecutarse, puede leer ya el bloque de disco del búfer de la
controladora byte a byte (o palabra a palabra), ejecutando un bucle, en el que
en cada iteración lee un byte (o una palabra) de un registro de control del
controlador y lo almacena en la memoria principal.
Cuando se utiliza DMA, el procedimiento es diferente. Primero la CPU programa el
controlador de DMA, escribiendo los valores apropiados en sus registros para que
sepa qué debe transferir y a dónde debe transferirse (paso 1 en la Figura). La CPU
envía también un comando al controlador del disco para indicarle que lea los
datos del disco en su búfer interno y compruebe el checksum. Cuando haya datos
válidos en el búfer del controlador del disco, el DMA puede comenzar.

El controlador de DMA inicia la transferencia enviando por el bus una petición de


lectura al controlador de disco (paso 2). Esta petición de lectura es similar a
cualquier otra petición de lectura, y el controlador del disco no sabe ni le importa
si proviene de la CPU o de una controladora de DMA. Típicamente, la dirección de
memoria en la que va a escribirse está ya en las líneas de dirección del bus, así que
cuando el controlador del disco toma la siguiente palabra de su búfer interno, sabe
dónde escribirla. La escritura en memoria es otro ciclo de bus estándar (paso 3).
Cuando termina la escritura, el controlador del disco envía una señal de acuse al
controlador de DMA, también por el bus (paso 4). Después, el controlador de DMA
incrementa la dirección de memoria a utilizar y decrementa el contador de bytes.
Si el contador de bytes sigue siendo todavía mayor que 0, se repiten los pasos 2 a 4
hasta que el contador llega a valer 0. En ese momento, el controlador de DMA
interrumpe a la CPU para avisarle de que se ha completado la transferencia.
Cuando el sistema operativo tome el control, no tendrá que copiar el bloque del
disco en la memoria; el bloque ya está ahí.

¿Por qué el controlador no almacena los bytes en la memoria principal a medida


que llegan del disco? En otras palabras ¿Por qué necesita un buffer interno? La
razón consiste en que, una vez iniciada la transferencia del disco, los bits siguen
llegando del disco constantemente, sin importar si el controlador está listo o no para
recibirlos. Si el controlador intentar escribir los datos en la memoria en forma directa,
tendría que recurrir al bus del sistema para cada una de las palabras transferidas.
Si el bus estuviera ocupado por otro dispositivo, debería esperar. Si la siguiente
palabra llegase antes de que al anterior hubiera sido almacenada, el controlador
tendría que almacenarla en alguna parte. Si el bus estuviese demasiado ocupado,
el controlador terminaría por almacenar unas cuantas palabras y con una gran
tarea de administración al mismo tiempo. Cuando el bloque se guarda en el buffer
interno, el bus no se necesita sino hasta que el DMA comienza; por ello, el diseño
del controlador es más sencillo, puesto que la transferencia DMA a la memoria ya
no es un aspecto crítico del tiempo.

Interrupciones
En un ordenador personal típico, la estructura de las interrupciones es como se
muestra en la siguiente figura. A nivel de hardware, las interrupciones funcionan
como sigue. Cuando un dispositivo de E/S termina el trabajo que se le encomendó,
provoca una interrupción (suponiendo que el sistema operativo ha habilitado las
interrupciones). Esto lo hace aplicando una señal a una línea del bus que se le ha
asignado. El chip controlador de interrupciones situado en la placa madre detecta
esa señal y decide lo que se va a hacer a continuación.

Forma en la que se produce una interrupción. En la realidad las conexiones entre


los dispositivos y el controlador de interrupciones utilizan líneas del bus en vez de
cables dedicados.

Si no hay otras interrupciones pendientes, el controlador de interrupciones procesa


la interrupción inmediatamente. Si está atendiéndose alguna otra interrupción en
ese momento, o si otro dispositivo ha realizado una petición simultánea sobre una
línea de petición de interrupción de mayor prioridad, el primer dispositivo será
ignorado momentáneamente. En este caso, el dispositivo seguirá aplicando la
señal de interrupción al bus hasta que reciba de la CPU el servicio deseado. Para
gestionar la interrupción, el controlador vuelca un número en las líneas de dirección
del bus especificando qué dispositivo requiere atención y aplica una señal que
interrumpe a la CPU. La señal de interrupción provoca que la CPU deje lo que
estaba haciendo y comience a hacer alguna otra cosa.
El número que está en las líneas de dirección se usa como un índice de una tabla
llamada la tabla de vectores de interrupción para extraer un nuevo contador de
programa, el cual apunta al comienzo del correspondiente procedimiento de
servicio de la interrupción. Normalmente tanto los traps, como las interrupciones
utilizan el mismo mecanismo a partir es este punto, y a menudo comparten la
misma tabla de vectores de interrupción. La ubicación de la tabla de vectores de
interrupción puede estar cableada en la máquina o puede estar en cualquier lugar
de la memoria, en cuyo caso habrá un registro en la CPU (cargado por el sistema
operativo) que apuntará a su comienzo.

PRINCIPIOS DEL SOFTWARE DE E/S

Objetivos del software de E/S


Un concepto clave en el diseño del software de E/S es lo que se conoce como la
independencia del dispositivo, lo que significa que debe ser posible escribir
programas capaces de acceder a cualquier dispositivo de E/S sin tener que
especificar por adelantado de qué dispositivo se trata. Por ejemplo, un programa
que tome su entrada de un fichero debe poder leerlo tanto de un disquete, como
de un disco duro, como de un CD-ROM sin tener que modificar el programa para
cada dispositivo diferente. Similarmente, debe ser posible que un comando del shell
como sort < entrada > salida funcione con la entrada proveniente de un disquete,
un disco IDE, un disco SCSI o el teclado, y enviando la salida a cualquier tipo de
disco o a la pantalla. Corresponde al sistema operativo resolver los problemas
causados por el hecho de que todos esos dispositivos son en realidad diferentes y
requieren secuencias de comandos muy distintas para leer o escribir.

Otro aspecto importante del software de E/S es el manejo de errores. En general,


los errores deben tratarse tan cerca del hardware como sea posible. Si el
controlador descubre un error de lectura, él mismo debe tratar de corregirlo en un
primer momento. Si no puede, será el driver del dispositivo quien deberá tratar de
corregirlo, por ejemplo, repitiendo el intento de lectura del bloque. Muchos errores
son transitorios, tales como los errores de lectura provocado por una partícula de
polvo en la cabeza de lectura, y desaparecen si se repite la operación. Sólo debe
informarse del problema a las capas superiores cuando las capas inferiores no
puedan solucionar el problema por sí mismas. En muchos casos, la recuperación
de los errores puede realizarse de forma transparente en los niveles más bajos, sin
necesidad de que los niveles superiores se enteren siquiera de que tuvo lugar el
error.

También otro aspecto clave son las transferencias síncronas (bloqueantes) frente a
las asíncronas (dirigidas por interrupciones). Casi toda la E/S física es asíncrona – la
CPU pone en marcha la transferencia y se pone a hacer alguna otra cosa hasta
que llega la interrupción. Los programas de usuario son mucho más fáciles de
escribir si las operaciones de E/S son bloqueantes – después de una llamada al
sistema read, el programa se suspende automáticamente hasta que los datos estén
disponibles en el búfer. Corresponde al sistema operativo hacer que las
operaciones que realmente están controladas por interrupciones parezcan
bloqueantes desde la perspectiva de los programas de usuario.

Otra cuestión que corresponde al software de E/S es el almacenamiento


intermedio de los datos (buffering). A menudo los datos provenientes de un
dispositivo no pueden almacenarse directamente en su destino final. Por ejemplo,
cuando llega un paquete por la red, el sistema operativo no sabe a dónde dirigirlo
hasta que no lo guarda en algún sitio y lo examina. Además, algunos dispositivos
están sujetos a severas restricciones de tiempo real (por ejemplo, los dispositivos de
audio digital o las grabadoras de CDs), por lo que los datos deben colocarse
primeramente en un búfer de salida para desacoplar la velocidad a la que se llena
el búfer con la velocidad a la que se vacía, de manera que el dispositivo de destino
nunca se encuentre con el búfer vacío (buffer underruns). El uso de búferes requiere
numerosas operaciones de copiado y tiene a menudo un importante impacto
sobre el rendimiento de la E/S.
Estos cuatro objetivos se logran de forma comprensible y eficiente al estructurar el
software de E/S en 4 capas: Procesos del usuario, software independiente del
dispositivo, manejadores de dispositivos y manejadores de interrupciones.

Estructura y componentes del software de E/S


El software de E/S está organizado típicamente en cuatro capas, como se muestra
en la figura. Cada capa tiene encomendada una función bien definida y ofrece a
las capas adyacentes una interfaz igualmente bien definida. La funcionalidad y las
interfaces difieren de un sistema a otro, motivo por el cual nuestro análisis siguiente,
que examina todas las capas comenzando por la más baja, no es específico de
ninguna máquina concreta.

1) Manejadores de interrupciones
Aunque a veces es útil la E/S programada, en la mayoría de los sistemas de E/S las
interrupciones son de esas cosas inevitables que tiene la vida. No obstante, es
preciso mantener ocultas las interrupciones en las profundidades del sistema
operativo, reduciendo al mínimo la parte del sistema operativo que tiene
conocimiento de ellas. La mejor manera de ocultar las interrupciones es hacer que
el driver que pone en marcha una operación de E/S se bloquee hasta que se
complete la E/S y se produzca la interrupción. El driver puede bloquearse a sí mismo
por ejemplo ejecutando una operación bajar sobre un semáforo, o un wait sobre
una variable de condición o un receive sobre un mensaje, o algo similar. Cuando
llega la interrupción, la rutina de tratamiento hace lo necesario para atender a la
interrupción, tras lo cual puede desbloquear el driver que programó esa
interrupción. En algunos casos la rutina de tratamiento simplemente ejecutará un
subir sobre un semáforo. En otros casos, ejecutará un signal sobre una variable de
condición de un monitor. En otros casos diferentes, enviará un mensaje al driver
bloqueado. En absolutamente todos los casos, el efecto neto de la interrupción
será que un driver que antes estaba bloqueado pasará ya a poder ejecutarse. Este
modelo funciona mejor si los drivers se estructuran como procesos del núcleo, con
sus propios estados, pilas y contadores de programa.

• Se deben ocultar al máximo en el S.O.

• El proceso que solicita la operación se bloquea hasta que termina la E/S

• Cuando se presenta una interrupción el manejador de interrupciones hace


lo propio para manejarla. Después avisa al manejador que le solicitó esa operación
de E/S

El manejador despierta al proceso y prosigue su ejecución • Así, el efecto real es


que el proceso que antes estaba bloqueado ahora ya puede ejecutarse

2) Manejador de dispositivo
Cada dispositivo de E/S conectado a un ordenador necesita algún código
específico de ese dispositivo que lo controle. Ese código, denominado el driver del
dispositivo, está normalmente escrito por el fabricante del dispositivo que lo
proporciona junto con el dispositivo. Dado que cada sistema operativo necesita
sus propios drivers, los fabricantes suelen proporcionar sus drivers para varios de los
sistemas operativos más utilizados. Cada driver de dispositivo maneja normalmente
un tipo de dispositivo o, cuando más, una clase de dispositivos estrechamente
relacionados. Por ejemplo, usualmente un driver de disco SCSI puede manejar
varios discos SCSI de diferentes tamaños y diferentes velocidades, y quizá también
un CDROM SCSI. Por otra parte, un ratón y un joystick son tan diferentes que casi
siempre necesitan drivers diferentes. Sin embargo, no existe ninguna restricción
técnica que impida que un driver de dispositivo controle varios dispositivos que no
tengan relación entre sí; simplemente resulta que no es una buena idea.
Ubicación lógica de los drivers de dispositivo. En realidad, toda la comunicación
entre los drivers y los controladores de dispositivo se realiza a través del bus.

Para acceder al hardware del dispositivo, es decir a los registros del controlador,
normalmente es necesario que el driver forme parte del núcleo del sistema
operativo, al menos con las arquitecturas actuales. Puesto que los diseñadores de
cualquier sistema operativo saben que se instalarán en él fragmentos de código
(drivers) escritos por otras personas, es preciso que utilicen en su diseño una
arquitectura que permita tal instalación. Eso significa tener un modelo bien definido
de lo que hace un driver y de cómo interactúa con el resto del sistema operativo.
Los drivers de dispositivo se ubican comúnmente por debajo del resto del sistema
operativo, como se ilustra en la figura.

• Código que depende de los dispositivos, que sirve para controlarlos.

• Cada manejador habla con la controladora de un tipo determinado de


dispositivos, o de una clase de dispositivos

• Forma parte del núcleo del SO, necesita ejecutarse en modo núcleo para
acceder a los registros de la controladora del dispositivo

• Tareas del manejador del dispositivo:


• Trata las solicitudes abstractas del SID y se encarga de que se satisfagan
indicando a la controladora qué hay que hacer y leyendo la respuesta de la
misma.

• Verifica la ejecución de la operación, corrigiendo posibles errores

• Inicializa el dispositivo, comprueba si está encendido (p.e. el motor de una


disquetera), si está conectado, o si está ocupado

• Al solicitar la orden a realizar, el manejador puede ser que tenga que esperar
(bloqueándose hasta que se produzca una interrupción) o que la operación
termine sin retraso (el manejador no se bloquea)

• Ha de ser reentrante: Durante su ejecución, debe considerar la posibilidad


de que se le invoque otra vez antes de terminar

3) Software independiente del dispositivo


Aunque una parte del software de E/S es específica para los dispositivos concretos
existentes en el sistema, otras partes son independientes del dispositivo. La frontera
exacta entre los drivers y el software independiente del dispositivo depende del
sistema (y del dispositivo), porque algunas funciones que podrían realizarse con
independencia del dispositivo en realidad se llevan a cabo en los drivers por
cuestiones de eficiencia u otras razones. Las funciones que se muestran en la figura
se realizan típicamente en el software independiente del dispositivo. La función
básica del software independiente del dispositivo es realizar las operaciones de E/S
que son comunes a todos los dispositivos y presentar una interfaz uniforme al
software a nivel de usuario.

A continuación, examinaremos los aspectos anteriores con más detalle.


4) Procesos de usuario
Aunque casi todo el software de E/S está dentro del sistema operativo, una
pequeña porción consiste en bibliotecas enlazadas junto con los programas de
usuario, e incluso en programas enteros que se ejecutan fuera del núcleo. Los
procedimientos de biblioteca normalmente realizan llamadas al sistema,
incluyendo las correspondientes a la E/S. Cuando un programa en C contiene la
llamada contador = write(fd, buffer, nbytes) ; el procedimiento de biblioteca write
debe enlazarse con el programa por lo que estará contenido en el programa
binario presente en la memoria en tiempo de ejecución. Es obvio que el conjunto
de todos estos procedimientos de biblioteca forma parte del sistema de E/S.

No todo el software de E/S en el nivel de usuario consiste en procedimientos de


biblioteca. Otra categoría importante es el sistema de spooling. El spooling es una
forma de tratar los dispositivos dedicados en un sistema con multiprogramación.
Consideremos un dispositivo que típicamente se gestiona mediante spooling: una
impresora. Aunque desde el punto de vista técnico sería fácil permitir que el
proceso de usuario abriese el fichero especial de caracteres correspondiente a la
impresora, eso tendría el peligro de que un proceso podría abrir el fichero sin hacer
nada con él durante horas. Durante ese tiempo ningún otro proceso podría imprimir
nada a pesar de que la impresora no está realmente siendo utilizada. En vez de
eso, lo que se hace es crear un proceso especial, llamado demonio (daemon), y
un directorio especial, llamado directorio de spooling. Para imprimir un fichero, lo
primero que hace un proceso es generar el fichero completo que desea imprimir,
colocándolo a continuación en el directorio de spooling. Corresponde al demonio,
que es el único proceso autorizado para usar el fichero especial de la impresora,
imprimir los ficheros que están en el directorio. Al proteger el fichero especial contra
el uso directo por parte de los usuarios, se elimina el problema de que uno de ellos
lo mantenga abierto durante un tiempo innecesariamente largo.

Procedimientos de biblioteca
• La mayoría del software de E/S está en el núcleo

• Sin embargo, también hay procedimientos de biblioteca que se ejecutan en


modo usuario y que se encargan de realizar las llamadas al sistema (ej. read, printf,
etc.)

• Normalmente preparan el «entorno» adecuado y a continuación realizan la


llamada al sistema
Sistema de spooling
• Los dispositivos de uso exclusivo no se pueden dejar a cargo de programas
de usuario (problema: monopolización)

• El sistema de spooling es una forma de manejar dispositivos dedicados en un


sistema con multipogramación

• Hay un demonio y un directorio de spooling

• El demonio verifica periódicamente el directorio para saber si hay trabajos


pendientes

• Las impresoras se manejan de esta manera.

DISCOS
Casi todas las computadoras tienen discos para almacenar información. El uso de
discos tiene tres ventajas principales con respecto del uso de la memoria principal.

• La capacidad de almacenamiento disponible es mucho más grande.

• El precio por bit es más barato.

• La información no se pierde al apagar la computadora.

Hardware para discos


Existe una enorme variedad de tipos de discos. Los más comunes son los discos
magnéticos (discos duros y disquetes), caracterizándose por el hecho de que las
lecturas y escrituras son igual de rápidas, lo que los hace ideales como memoria
secundaria (paginación, sistemas de ficheros, etc.). A veces se utilizan
conjuntamente varios de esos discos para obtener dispositivos de almacenamiento
altamente fiables. Son también importantes de cara a la distribución de programas,
datos y películas diversos tipos de discos ópticos (CD-ROMs, CDRegrabables y
DVDs).
ACTIVIDAD DE APRENDIZAJE OBLIGATORIA
Nro. 17
Actividad colaborativa grupal
1) Analizar e intercambiar apreciaciones sobre los

Métodos de almacenamiento sólidos.


2) Establecer los costos beneficios de adquirirlos e
instalarlos en los equipos.

3) Elaborar una tabla comparativa, con los


dispositivos de almacenamiento de tipo magnético.

Los discos magnéticos están organizados en cilindros, cada uno de los cuales
contiene tantas pistas como cabezas tenga apiladas verticalmente. Las pistas se
dividen en sectores, siendo el número de sectores alrededor de cada
circunferencia típicamente de 8 a 32 en los disquetes, y de hasta varios cientos en
los discos duros. El número de cabezas varía entre 1 y 16.

Con el fin de ocultar los detalles sobre el número de sectores que hay en cada
pista, la mayoría de los discos modernos tiene una geometría virtual que se
presenta al sistema operativo. El software actúa como si hubiera x cilindros, y
cabezas y z sectores por pista. Luego, el controlador establece la correspondencia
entre una petición del sector (x, y, z) y el cilindro, cabeza y sector reales. En los
ordenadores basados en el Pentium, los valores máximos para esos tres parámetros
suelen ser (65535, 16 y 63), debido a la necesidad de mantener la compatibilidad
hacia atrás con las limitaciones del IBM PC original. Sobre esa máquina se utilizaron
campos de 16, 4 y 6 bits respectivamente para especificar dichos números, con
cilindros y sectores numerados a partir de 1 y cabezas numeradas a partir de 0. Con
estos parámetros y 512 bytes por sector, el disco más grande posible tiene una
capacidad de 31,5 GB. Para poder superar ese límite, muchos discos modernos
soportan ahora un sistema denominado direccionamiento de bloque lógico (LBA),
en el cual los sectores del disco se numeran de forma consecutiva a partir de 0, sin
tener en cuenta para nada la geometría física del disco.

• Serie de platos que giran sobre un eje (7000 a 10.000 rpm)

• Conjunto de cabezas, una por cada superficie del disco

• Cabezas conectadas a un brazo móvil. Determinan qué pistas conforman


un cilindro

• Cada cilindro tiene tantas pistas como cabezas haya

• Las pistas se dividen en sectores

• Las unidades son los sectores (bloques físicos) de 512, 1024, 2048 bytes, . . .

• Cada bloque se identifica como: (cilindro, cabeza, sector)

Algoritmos de planificación del brazo del disco


Comenzaremos considerando el tiempo que se requiere para leer o escribir un
bloque de disco. El tiempo requerido viene determinado por tres factores:

1. Tiempo de posicionamiento (el tiempo que se tarda en mover el brazo hasta


el cilindro correcto).

2. Retraso (latencia) rotacional (el tiempo que tarda el sector correcto en girar
hasta pasar por debajo de la cabeza de lectura).

3. Tiempo de transferencia de datos real.


Para la mayoría de los discos, el tiempo de posicionamiento (seek time) domina los
otros dos tiempos, por lo que una reducción en el tiempo de posicionamiento
medio puede mejorar substancialmente el rendimiento del sistema.

1) Planificación FCFS (First come, first served)


Si el driver del disco sólo acepta una petición de cada vez y las atiende en el orden
de llegada, es decir, First-Come First-Served (FCFS), poco puede hacerse para
optimizar el tiempo de posicionamiento. Sin embargo, si el disco está sometido a
una carga intensa de peticiones, podría utilizarse otra estrategia. Es muy probable
que mientras el brazo esté moviéndose para atender una petición, otros procesos
generen nuevas peticiones de disco. Muchos drivers de disco mantienen una tabla,
indexada por número de cilindro, con todas las peticiones pendientes para cada
cilindro encadenadas en una lista enlazada encabezada por las entradas de la
tabla.
Dado este tipo de estructura de datos, podemos mejorar el algoritmo de
planificación primera en llegar, primera en ser servida. Para ver cómo,
consideremos un disco imaginario con 40 cilindros. Supongamos que llega una
petición para leer un bloque en el cilindro 11, y que mientras el brazo está
moviéndose hacia el cilindro 11, llegan nuevas peticiones para los cilindros 1, 36, 16,
34, 9 y 12, en ese orden. Esas peticiones se colocan en la tabla de peticiones
pendientes, con una lista enlazada distinta para cada cilindro. Las peticiones se
muestran en la figura. Cuando termina de atenderse la petición actual
(correspondiente al cilindro 11), el driver del disco tiene que elegir la petición que
atenderá a continuación. Si utiliza FCFS, irá a continuación al cilindro 1, luego al 36,
y así todas las demás. Este algoritmo requerirá movimientos del brazo de 10, 35, 20,
18, 25 y 3 cilindros respectivamente, para un total de 111 cilindros.

• El manejador acepta solicitudes y las ejecuta en el orden de llegada. No


realiza ningún tipo de optimización

• Problema: tiempos promedio bastante largos

2) Planificación SSF (Shortest Seek First)


Alternativamente, el driver del disco podría atender siempre a continuación la
petición más cercana, con el fin de minimizar el tiempo de posicionamiento. Dadas
las peticiones de la siguiente figura, la secuencia es 12, 9, 16, 1, 34 y 36, como indica
la línea en zigzag de la parte baja de la figura. Con esta sucesión, los movimientos
del brazo son de 1, 3, 7, 15, 33 y 2, para un total de 61 cilindros. Este algoritmo,
Shortest Seek First (SSF), reduce el movimiento total del brazo en casi la mitad
comparado con FCFS. Desafortunadamente SSF tiene un problema. Supongamos
que siguen llegando más peticiones mientras se están procesando las peticiones.
Por ejemplo, si después de posicionarnos sobre el cilindro 16 está presente una
nueva petición para el cilindro 8, esa solicitud tendrá prioridad sobre la del cilindro
1. Si luego llega una petición para el cilindro 13, el brazo se dirigirá entonces al
cilindro 13, no al 1. Si el disco está sometido a mucha carga de peticiones, el brazo
tenderá a permanecer en el medio del disco la mayor parte del tiempo, mientras
que las peticiones para ambos extremos tendrán que esperar hasta que una
fluctuación estadística en la carga de peticiones provoque que no haya ninguna
petición de cilindros de la zona central. En consecuencia, las peticiones alejadas
del centro del disco podrían recibir un mal servicio con este algoritmo. En este caso
se produce un conflicto entre el objetivo de maximizar el rendimiento y el objetivo
de ser justos evitando discriminar algún tipo de peticiones.
• Es demasiado «local», el brazo tenderá a permanecer en una zona del disco,
olvidando las solicitudes de los extremos.

• Están en conflicto las metas de reducir al mínimo el tiempo de respuesta y


de ser equitativo

3) Planificación SCAN o del ascensor


Los rascacielos también tienen que enfrentarse con esta situación comprometida.
El problema de planificar el ascensor de un rascacielos es similar al de planificar el
brazo de un disco. Continuamente llegan peticiones llamando al ascensor para
que acuda a los pisos (cilindros) al azar. El ordenador que controla el ascensor
fácilmente puede seguir la pista de la secuencia en la cual los usuarios oprimieron
el botón de llamada, atendiéndolos utilizando FCFS o SSF. Sin embargo, la mayoría
de los ascensores utilizan un algoritmo diferente para conciliar los objetivos en
conflicto de justicia y eficiencia. El ascensor siempre continúa su avance en el
mismo sentido (hacia arriba o hacia abajo) hasta que no queden peticiones
pendientes en ese sentido, momento en el cual el ascensor cambia de sentido. Este
algoritmo conocido tanto en el mundo de los discos como en el de los ascensores
como el algoritmo del ascensor, requiere que el software mantenga un bit: el bit
del sentido actual del movimiento, ARRIBA o ABAJO. Cuando termina de atenderse
una petición, el driver del disco o del ascensor comprueba el bit. Si es ARRIBA, el
brazo o la cabina se mueve hasta la siguiente petición pendiente hacia arriba. Si
no hay peticiones pendientes en posiciones más altas, se invierte el bit del sentido
del movimiento. Una vez que el bit se establece a ABAJO, el movimiento es hasta
la siguiente posición hacia abajo solicitada, si la hay.
La figura muestra el algoritmo del ascensor aplicado a las mismas siete peticiones
del ejemplo anterior, suponiendo que el bit de sentido del movimiento es
inicialmente ARRIBA. El orden en el que se atienden las peticiones es 12, 16, 34, 36,
9 y 1, lo que significa movimientos del brazo de 1, 4, 18, 2, 27 y 8, para un total de
60 cilindros. En este caso el algoritmo del ascensor es ligeramente mejor que el SSF,
aunque normalmente es peor. Una propiedad agradable que tiene el algoritmo
del ascensor es que, dado cualquier conjunto de peticiones, existe una cota
superior fija sobre el movimiento total, que es exactamente el doble del número de
cilindros.

Una pequeña modificación de ese algoritmo que tiene menor varianza en los
tiempos de respuesta (Teory, 1972) consiste en explorar siempre en el mismo sentido.
Una vez que se ha servido el cilindro de número más alto con una petición
pendiente, el brazo se dirige al cilindro de número más bajo que tenga una petición
pendiente, para luego continuar moviéndose hacia arriba. En definitiva, es como
si el cilindro de número más bajo estuviera justo a continuación del cilindro de
número más alto.

• Siempre avanza en un sentido y resuelve las solicitudes de ese sentido; y


cuando no queden más, avanza en el otro sentido

• Se necesita un bit que indique dirección actual

• Tiene cota máxima de cilindros recorridos (2 * no de cilindros)

ANEXO: Conexiones entre dispositivos móviles


¿Es muy complicado ver el contenido del smartphone en un televisor de gran
formato? Pues no. Afortunadamente la tecnología ha simplificado mucho esta
tarea en los últimos años, dándonos múltiples opciones, tanto cableadas como
inalámbricas que nos facilitan compartir contenidos en una tele, sea esta smartTV
o convencional

Con cable HDMI

La opción más sencilla y directa pasa por


conectar el teléfono a través de un cable a
uno de los puertos HDMI del televisor. Si el
smartphone no tiene un puerto HDMI, algunas
tabletas sí vienen con este tipo de salidas de
serie (en formato mini o micro), en los móviles
no suele ser habitual.

No obstante, se
suele dar la opción de adquirir algún tipo de adaptador
externo (por ejemplo, en el caso de Apple para pasar
de Lightning a HDMI), aunque lo más habitual en
móviles de los últimos años es que tengan un puerto
compatible con el estándar MHL, o lo que es lo mismo,
con el Mobile High-definition Link.

Se trata de un tipo de conexión surgido en 2010 que


permite transmitir vídeo con calidad 1080p sin comprimir (sonido a 192 kHz y 7.1)
desde teléfonos y tabletas a pantallas y equipos de vídeo (por ejemplo,
proyectores) más grandes utilizando solo 5 pines. La conexión MHL permite recargar
el móvil conectado proporcionando 5 voltios y 500 mA al mismo tiempo que se
realiza la transmisión de vídeo y audio, así como usar el mando a distancia del
televisor para controlar las funciones del teléfono.

Como vemos, es la opción más directa. Solo hay que enchufar el cable en el móvil
y en la tele (en un puerto compatible con MHL) y como mucho activar la opción
de pantalla externa en el terminal seleccionando además la entrada de vídeo que
corresponda en el televisor si no se activa automáticamente. Es importante
asegurarnos de que el móvil es compatible y sobre todo de elegir un cable de
calidad para evitar posteriores problemas de interferencias y cortes en la imagen
o sonido.

¿El principal inconveniente de esta forma de conexión? Pues que al utilizar un cable
estamos limitados con su longitud y probablemente tengamos que andar
levantándonos del sofá para hacer cualquier cosa con el teléfono
Estándares inalámbricos
La siguiente gran opción para ver el móvil en pantalla grande pasa por utilizar
alguno de los estándares inalámbricos que están disponibles en el mercado e
implementados tanto en los teléfonos como en los televisores y otros equipos
multimedia domésticos. Los tres más utilizados y extendidos son: DLNA, Miracast y
Airplay, cada uno con sus particularidades, ventajas e inconvenientes.

DLNA:
Las siglas DLNA son la abreviatura de Digital Living Network Alliance, un estándar al
que están suscritas más de 250 empresas de tecnología y cuya misión es poder
compartir contenidos en red desde cualquier dispositivo, sin importar la marca o
modelo. Los equipos compatibles pueden ser de todo tipo, incluyendo routers,
televisores, discos duros, teléfonos móviles, ordenadores, etc., aunque necesitan
estar conectados a una red local por WiFi o Ethernet.

En general hay tres tipos básicos de equipos con diferentes roles dentro de una red
DLNA: un servidor en el que alojar los archivos multimedia (un disco duro de red, un
ordenador, o el propio móvil etc.), un reproductor que reproducirá los contenidos
(en nuestro caso el teléfono) y un renderizador (una pantalla o equipo de sonido).
Al estar todos ellos dentro de la misma red, la detección debería ser automática (o
casi) y solo hay que seccionar en el terminal por qué dispositivo queremos
reproducir el archivo de vídeo o de sonido.

Miracast
DLNA está muy bien para reproducir vídeos en la tele y escuchar la música del móvil
en un equipo estéreo o una barra de sonido. Sin embargo, si lo que queremos es
visualizar todo el escritorio del teléfono en la pantalla grande, tal cual lo vemos en
nuestro móvil, entonces la opción más recomendable pasa por el estándar
Miracast.

Miracast es un protocolo que permite mandar vía un enlace WiFi Direct la pantalla
del dispositivo móvil en tiempo real a un televisor o monitor compatible. Surgió con
Android 4.2 y para que funcione necesitamos que el móvil o tableta ofrezca esta
posibilidad y que la TV tenga WiFi y sea compatible.

Permite transmitir inalámbricamente contenido de audio y vídeo con calidad hasta


FullHD y audio 5.1 a una TV o proyector compatible que servirá de pantalla clonada
de nuestro dispositivo móvil. Aunque el nombre genérico de la tecnología es
Miracast, las compañías lo suelen camuflar bajo otros nombres, como por ejemplo
Samsung y su AllShare Cast.

Airplay
A pesar de que tecnologías como DLNA llevaban ya un tiempo en el mercado, en
2010 Apple sorprendía lanzando su propia versión de un protocolo similar que servía
para hacer prácticamente lo mismo pero que sería incompatible con el resto. Fue
bautizado como AirPlay y llegaba de la mano del sistema operativo iOS 4.2.

AirPlay permite enviar desde el teléfono cualquier contenido multimedia que


tengamos almacenado, tanto música como vídeos. Además, también se envía
información sobre lo que estamos reproduciendo: títulos de canciones, artistas,
álbumes, tiempo transcurrido y restante, etc. El problema es que no es un estándar
que haya tenido mucha acogida entre los fabricantes de televisores (sí entre
algunos de equipos de sonido), por lo que para sacarle partido necesitamos contar
con algún dispositivo extra que nos haga de intermediario, como veremos en el
siguiente apartado.

Centros multimedia, sticks HDMI y otros dispositivos


Los nuevos modelos de televisores inteligentes suelen venir de serie con alguno o
varios de los estándares anteriormente comentados, permitiendo seleccionar
desde el móvil la opción correspondiente para compartir la pantalla o los
contenidos sin tener que hacer mucho más.

Sin embargo, si tenemos una tele algo más antigua y queremos compartir
contenidos de forma inalámbrica, probablemente necesitemos hacernos con un
reproductor externo que actúe como intermediario. En el mercado podemos
encontrar multitud de dispositivos diseñados para este fin, cada uno con sus
ventajas e inconvenientes. Algunos de los más populares son los siguientes:
•Chromecast:
El dispositivo más popular de Google que
recientemente ha alcanzado la versión 2 ofreciendo
un renovado diseño, un nuevo procesador más
potente y una configuración de tres antenas para WiFi
AC de doble banda. Permite hacer screen mirroring
directo

desde terminales Android compatibles pudiendo


disfrutar de los juegos y aplicaciones del teléfono en pantalla grande. Además, en
una de sus últimas actualizaciones se ha añadido la función AllCast a la iTunes store,
con lo que también es posible transmitir hasta un Chromecast contenidos
almacenados en un iPhone e iPad, así como compartir archivos desde servicios
como Dropbox y Google Drive.

•Apple TV
Indispensable para sacar el máximo partido a nuestro móvil
o tableta iOS a la hora de conectarla al televisor ya sea
reproduciendo contenidos sueltos o viendo el escritorio en
pantalla grande. La última versión realiza una búsqueda
de contenidos en todos los servicios disponibles (iTunes,
HBO, Showtime,

Hulu ...) y nos los presenta independientemente de dónde


procedan. Si vivimos dentro del Universo Apple, es un dispositivo que no puede
faltar en el salón.

•Amazon Fire TV
Compatible con señales de vídeo 4K y pensado para llevar los juegos hasta la tele,
si tenemos un terminal Android 4.2 o superior podremos ver su pantalla
directamente en la tele gracias a Miracast.

 Roku
Otro interesante set-top box que en su última versión
introduce conectividad WiFi AC y posibilidad de ver
vídeos 4K y hacer screen mirroring en teléfonos
Android y Windows Phone.

Sticks HDMI y otros dispositivos: En los últimos dos años también han proliferado los
sticks HDMI pensados para ayudarnos a enlazar el móvil con el televisor de gran
formato del salón. Suelen ser más baratos que los set-top boxes, aunque también
tienen menos potencia y opciones más limitadas. No obstante, son una buena
opción para dotar de funcionalidades DLNA y Miracast a un televisor que se ha
quedado anticuado.

¿Algún dispositivo en concreto? Pues hay muchos, ya que multitud de marcas están
implementando este tipo de funcionalidades en sus equipos. Por ejemplo tenemos
desde sticks como el Miracast Video Adapter de Belkin, el Lenovo Cast, incluso hay
reproductores de Blu-rayque nos ofrecen esta función.
PROGRAMACION DE CONTROLADORES

Software para el funcionamiento de PIC - FlowCode


Flowcode es un lenguaje gráfico orientado a iconos con los que el programador
diseña su programa de aplicación describiendo el organigrama o diagrama de
flujo del mismo. Aunque aconsejable, no se hace necesario tener grandes
conocimientos de electrónica ni de microcontroladores, por lo que es un lenguaje
destinado a prácticamente todo tipo de usuarios: aficionados, estudiantes de ESO,
Formación Profesional tanto en grado medio como en grado superior, ingenierías,
profesionales, investigadores y desarrolladores de aplicaciones. La gran ventaja de
FlowCode es que permite, con unos mínimos conocimientos, crear complejos
sistemas electrónicos en muy poco tiempo.

Ventajas

Son muchas las ventajas que ofrece el empleo de un lenguaje como FlowCode:

• Ahorro de tiempo y dinero: FlowCode facilita el diseño rápido de sistemas y


aplicaciones basadas en microcontroladores (en nuestro caso los PIC’s).

• Sencilla interfaz de usuario: Basta simplemente con coger iconos y


arrastrarlos sobre el área de trabajo para confeccionar un diagrama de flujo que
responda a las necesidades de la aplicación. No es necesario escribir un programa
de la forma tradicional, instrucción a instrucción, como lo hemos venido haciendo
en los ejemplos que se han propuesto en la obra.

• Rápido y flexible: FlowCode integra un gran número de subrutinas de alto


nivel para la gestión de diversos componentes, lo que facilita un rápido desarrollo
de cualquier aplicación. El método de programación de FlowCode permite el uso
de prácticamente todos los recursos que integra el microcontrolador.

• Resultado libre de errores: Cuando se diseña un programa, su


funcionamiento se puede simular totalmente sobre el PC. El ejecutable obtenido se
puede grabar directamente sobre la memoria de programa del microcontrolador.

• Arquitectura abierta: FlowCode, al igual que la mayor parte de los lenguajes


gráficos y/o de alto nivel, ofrece una puerta abierta para que el usuario pueda
insertar sus propias funciones o subrutinas escritas en ensamblador o en C.
Características
Las más relevantes son:

• Soporta diferentes microcontroladores: Según la versión elegida, FlowCode


puede trabajar con dispositivos PIC, AVR, Atmel y ARM.

• Soporta diferentes sistemas de comunicación: FlowCode integra las


funciones necesarias para implementar comunicaciones según diferentes
estándares o protocolos: I2C, SPI, RS232, Bluetooth, Zigbee, IrDA, CAN, LIN, TCP/IP,
Webserver, USB y RFID.

• Soporta componentes estándar: Efectivamente, FlowCode integra las


funciones necesarias para el control de los componentes más típicos usados en
cualquier aplicación: LEDs, interruptores, teclados, pantallas, LCD de texto y
gráficas, sensores, displays de 7 segmentos, memorias EEPROM, dispositivos de
comunicación, etc .

• Panel de montaje: Donde colocamos y conectamos los componentes que


forman parte de nuestra aplicación y que serán controlados desde nuestro
programa. Permite la simulación del funcionamiento de los mismos.

• Soporta diferentes herramientas: Una vez compilado y ensamblado el


diagrama de flujo de nuestra aplicación, el programa ejecutable obtenido se
puede descargar directamente sobre nuestro microcontrolador mediante
herramientas hardware.
Lectura bibliográfica obligatoria:
Selección de Capítulos:

-WILLAMS STALLINGS (2005). Sistemas Operativos. Prentice Hall.


(Capítulo 8)

-ANDREW TANENBAUM (2009). Sistemas Operativos Modernos.


Prentice

Hall (Capítulo 5)

-SILBERSCHATZ, GALVIN, CAGNE (2006) Fundamentos de Sistemas


Operativos 7ma Edición Editorial Mc Graw-Hill Interamericana.
España.

Visualización de video clases Nº 10 disponibles en el


Sector

“Recursos” de la Plataforma virtual


ACTIVIDAD DE APRENDIZAJE OBLIGATORIA Nro. 18
Realización de Actividades de aprendizaje obligatorias Nº 18,
disponibles en el Sector “Actividades” en plataforma virtual.

You might also like