Professional Documents
Culture Documents
¡Bienvenidos!
Equipo de Cátedra.
OBJETIVOS
▪ Identificar la estructura, componentes y objetivos que deben de incluir los
sistemas operativos.
ATENCION
FORO DE DEBATE
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 Microprocesador:
La Memoria Principal:
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:
• Sistemas operativos
• Controladores de dispositivos
• Herramientas de diagnóstico
• Servidores
• Utilidades
– Editores de texto
– Compiladores
– Intérpretes
– Enlazadores
– Depuradores
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 ofimáticas
• Software educativo
• Software empresarial
• Bases de datos
• Videojuegos
• Software médico
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.
Monousuarios
Multiusuarios
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
Uniprocesador
Multiprocesador
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
La primera generación
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
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.
Consignas:
LECTURAS BIBLIOGRAFICAS
WILLAMS STALLINGS (2000). Sistemas Operativos.
Interfaz
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.
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.
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?
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:
A continuación, vamos a describir cada una de las funciones del Sistema operativo:
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.
• 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.
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:
Capa 4: Entrada/salida
Capa 0: Hardware
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
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.
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.
• 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
• Kernel Unificado
• Multiproceso y Multitarea.
• 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
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.
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).
iOS
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.
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.
REFERENCIAS BIBLIOGRAFICAS
Selección de Capítulos:
(Capítulo 1)
(Capítulo 2)
MATERIALES AUDIOVISUALES
PROGRAMA Y 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.
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
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.
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.
1. De inicio y finalización.
2. Activos.
3. Inactivos.
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.
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:
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.
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).
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
Ejecución a 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.
• Tiempo límite excedido: el proceso ha ejecutado por más del tiempo límite
total especificado.
• 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
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.
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.
• Justicia: La política debe ser lo más justa posible con todo tipo de procesos,
sin favorecer a uno y perjudicar a otros.
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:
• 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
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.
• No es apropiativa.
• Es justa, aunque los procesos largos hacen esperar mucho a los cortos.
• Es predecible.
• No es apropiativa.
• Es poco predecible.
• 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.
• 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.
• Es muy eficiente.
Planificación por Asignación cíclica o Round Robin (RR)
• El tipo de Sistema.
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.
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.
Hall. (Capítulos 4 y 5)
ENLACES WEB
https://www.xatakawindows.com/bienvenidoawindows8/ el-
administrador-de-tareas-de-windows-que-es-y-como-funciona
UNIDAD 4
ADMINISTRACION DE LA
MEMORIA
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.
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.
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.
JERARQUIA DE MEMORIAS
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:
• Aumenta la capacidad.
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.
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
Cache de disco
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.
MONOPROGRAMACION
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.
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.
MULTIPROGRAMACION
Partición fija
• 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 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
Todos ellos se limitan a elegir entre los bloques de memoria libres que son mayores
o iguales que el proceso a traer.
• 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.
Paginación Simple
fijo).
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.
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
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.
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.
Selección de Capítulos:
Hall (Capitulo 3)
(Capítulo 4 y 8)
MATERIAL AUDIOVISUAL
Visualización de video clases Nº 8 disponible en el Sector
Enlace Web
https://www.youtube.com/watch?v=vTsKBSTCygg
UNIDAD 5
ADMINISTRACION DE
ARCHIVOS
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.
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).
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í.
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 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.
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.
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.
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.
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.
../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.
Aquí el uso de punto ahorra al usuario el trabajo de teclear otra vez diccionario. No
obstante, teclear
cp /usr/lib/diccionario /usr/ast/diccionario
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).
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.
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.
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.
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.
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
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.
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.
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 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.
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.
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.
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.
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.
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.
• Forma parte del núcleo del SO, necesita ejecutarse en modo núcleo para
acceder a los registros de la controladora del dispositivo
• 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)
Procedimientos de biblioteca
• La mayoría del software de E/S está en el núcleo
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.
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.
• Las unidades son los sectores (bloques físicos) de 512, 1024, 2048 bytes, . . .
2. Retraso (latencia) rotacional (el tiempo que tarda el sector correcto en girar
hasta pasar por debajo de la cabeza de lectura).
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.
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.
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.
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.
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
•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,
•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
Ventajas
Son muchas las ventajas que ofrece el empleo de un lenguaje como FlowCode:
Hall (Capítulo 5)