Está en la página 1de 74

RESUMEN DE SISTEMAS OPERATIVOS

I (PROGRAMA 2022)

UNIDAD Nº 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS.


1.1. Sistemas operativos. Conceptos. Funciones. Sistemas Operativos como Maquinas
Extendida. Sistemas Operativos como Administración de Recursos.
1.2. Requisitos para el diseño de Sistemas Operativos.
1.3. Estructura de los Sistemas Operativos. Servicios del Sistema Operativo. Interfaz del
Usuario. 1.4. Llamadas a Sistemas. Tipos de Llamadas al Sistema.
1.5. Tipos de Sistemas Operativos Modernos.

1.1.Sistemas operativos
El sistema operativo es el principal programa que se ejecuta en toda computadora de
propósito general.
Está formado por 3 capas principales.
La capa más cercana al hardware es la que se denomina núcleo (kernel) y es la que
gestiona los recursos del hardware del sistema y la que suministra la funcionalidad básica
del Sistema Operativo. Esta capa ha de ejecutar en nivel núcleo, mientras que las otras
pueden ejecutar en niveles menos permisivos. La función del núcleo se centra en la
gestión de recursos como el CPU, tratamiento de interrupciones y las funciones básicas de
manipulación de memoria.
La capa de Servicios o Llamadas al Sistema ofrece a los programas unos servicios en
forma de una interfaz de programación. Desde el punto de vista, esta capa extiende la
funcionalidad de la computadora por lo que se suele decir que el S.O ofrece una máquina
virtual extendida a los programas. De esta forma se facilita la elaboración de estos, puesto
que se apoyan en las funciones que le suministra el S.O.
La capa de intérprete de mandatos o Shell suministra una interfaz a través de la cual el
usuario puede dialogar de forma interactiva con la computadora. El Shell recibe los
mandatos u órdenes de los usuarios, los interpreta y si puede los ejecuta. Dado que el
shell ejecuta en nivel de usuario algunos autores consideran que no forman parte del S.O.
1.1.Conceptos
Es difícil definir qué es un sistema operativo aparte de decir que es el software que se
ejecuta en modo kernel (además de que esto no siempre es cierto). Parte del problema es
que los sistemas operativos realizan dos funciones básicas que no están relacionadas:
proporcionar a los programadores de aplicaciones (y a los programas de aplicaciones,
naturalmente) un conjunto abstracto de recursos simples, en vez de los complejos
conjuntos de hardware; y administrar estos recursos de hardware. Dependiendo de quién
se esté hablando, el lector podría escuchar más acerca de una función o de la otra.

1.1.Objetivos
Un sistema operativo es un programa que controla la ejecución de los programas de
aplicación y que actúa como interfaz entre el usuario de un computador y el hardware de
esta. Puede considerarse que un sistema operativo tiene tres objetivos o lleva a cabo tres
funciones:
Comodidad: Un sistema operativo hace que un computador sea más cómodo de utilizar.
Eficiencia: Un sistema operativo permite que los recursos de un sistema informático se
aprovechen de una manera más eficiente.
Capacidad de evolución: Un sistema operativo debe construirse de modo que permita el
desarrollo efectivo, la verificación y la introducción de nuevas funciones en el sistema y, a
la vez, no interferir en los servicios que brinda

1.1.Funciones
- Gestión de los Recursos de la PC
- Ejecución de Servicios para los programas
- Ejecución de los mandatos de los usuarios

Vamos por parte:


La gestión de los recursos de la PC es una función fundamental del sistema operativo. La
gestión de recursos se refiere a la administración y control de los diversos componentes
de hardware y software de una computadora para asegurar un uso eficiente y equitativo
de los recursos disponibles. Algunas de las áreas clave de gestión de recursos que realiza
el sistema operativo incluyen:
Gestión de la memoria: El sistema operativo supervisa y administra el uso de la memoria
RAM de la computadora. Se encarga de asignar memoria a los programas en ejecución,
liberar memoria cuando no se necesita y prevenir conflictos de acceso a la memoria entre
diferentes procesos.
Gestión del procesador (CPU): El sistema operativo planifica y coordina la ejecución de los
procesos en la CPU. Asigna tiempo de procesador a cada proceso de manera justa y
eficiente, lo que se conoce como planificación de procesos.
Gestión de dispositivos: El sistema operativo administra los dispositivos de hardware
conectados a la computadora, como impresoras, discos duros, unidades USB, etc. Se
encarga de la detección, inicialización, asignación y liberación de recursos de los
dispositivos.
Gestión de archivos: El sistema operativo controla cómo se almacenan, organizan y
acceden los archivos en el sistema de almacenamiento. Esto incluye la administración de
estructuras de directorios, permisos de archivos y operaciones de lectura y escritura.
Gestión de red: En sistemas conectados a redes, el sistema operativo gestiona la
comunicación de red, incluida la asignación de direcciones IP, la configuración de
conexiones y la administración de datos transmitidos y recibidos.
Gestión de energía: En dispositivos portátiles y computadoras con capacidad de ahorro de
energía, el sistema operativo puede administrar la energía de los componentes para
prolongar la duración de la batería y reducir el consumo de energía.
Gestión de usuario y seguridad: El sistema operativo administra la autenticación y
autorización de usuarios, asegurando que los usuarios tengan los permisos adecuados
para acceder a los recursos y mantener la seguridad del sistema.
La gestión eficiente de los recursos es esencial para el rendimiento general de la
computadora y para garantizar que los programas se ejecuten de manera suave y sin
conflictos. El sistema operativo juega un papel crucial al supervisar y coordinar cómo se
utilizan los recursos de la PC, permitiendo que múltiples programas y usuarios compartan
y accedan a los recursos de manera ordenada y sin problemas.

La ejecución de servicios para los programas es una función fundamental del sistema
operativo. Los servicios del sistema operativo son programas o rutinas que proporcionan
funcionalidades adicionales a las aplicaciones y a los usuarios, permitiéndoles realizar
tareas específicas o acceder a recursos del sistema de una manera más sencilla y
estandarizada.
El sistema operativo actúa como intermediario entre las aplicaciones y el hardware, y los
servicios que proporciona son esenciales para que los programas funcionen
correctamente y puedan realizar diversas tareas. Algunos ejemplos comunes de servicios
que proporciona el sistema operativo incluyen:
Servicios de entrada/salida: Permiten que las aplicaciones interactúen con dispositivos de
entrada y salida, como teclados, ratones, impresoras, pantallas, etc.
Servicios de red: Facilitan la comunicación entre aplicaciones y otros dispositivos a través
de la red, como la conexión a internet, la transferencia de datos entre computadoras, etc.
Servicios de gestión de archivos: Proporcionan a las aplicaciones la capacidad de crear,
leer, escribir y eliminar archivos en el sistema de almacenamiento.
Servicios de seguridad: Garantizan que las aplicaciones y usuarios tengan los permisos
adecuados para acceder a ciertos recursos y protegen el sistema contra amenazas y
accesos no autorizados.
Servicios de gestión de memoria: Administran la asignación de memoria a las aplicaciones
y se aseguran de que cada una tenga suficiente espacio y no interfieran entre sí.
Servicios de planificación de procesos: Deciden qué programas se ejecutan y cuándo,
asignando recursos de manera eficiente y equitativa.
Servicios de tiempo compartido: Permiten que múltiples usuarios compartan el sistema y
ejecuten sus programas de forma concurrente.
En resumen, los servicios del sistema operativo son esenciales para que los programas
puedan funcionar correctamente y aprovechar los recursos del hardware de manera
eficiente. El sistema operativo proporciona una interfaz y un conjunto de funciones
estándar que las aplicaciones pueden utilizar para realizar diversas tareas sin tener que
preocuparse por la complejidad del hardware subyacente. Esto hace que el desarrollo de
aplicaciones sea más sencillo y permite que los usuarios interactúen con la computadora
de manera más intuitiva y conveniente.

La ejecución de mandatos (comandos) de los usuarios es definitivamente una función


clave del sistema operativo. Cuando un usuario interactúa con el sistema operativo, ya
sea a través de una interfaz gráfica de usuario (GUI) o una interfaz de línea de comandos
(CLI), puede ingresar comandos para realizar diversas acciones o tareas en la
computadora.
Cuando un usuario ingresa un comando, el sistema operativo es responsable de
interpretar ese comando y llevar a cabo las acciones correspondientes. Estas acciones
pueden incluir:
Ejecución de programas: El sistema operativo puede ejecutar programas específicos que
el usuario solicite mediante el comando.
Acceso a archivos y directorios: Los comandos pueden permitir al usuario crear, leer,
escribir o eliminar archivos y directorios en el sistema de almacenamiento.
Configuración del sistema: El usuario puede utilizar comandos para cambiar la
configuración del sistema operativo, ajustar la apariencia, modificar preferencias y ajustar
el funcionamiento general del sistema.
Gestión de procesos: Los comandos pueden permitir al usuario ver qué procesos están en
ejecución, detener procesos, cambiar prioridades y administrar el uso del procesador.
Comunicación con otros usuarios: En sistemas multiusuario, los comandos pueden
utilizarse para enviar mensajes a otros usuarios, compartir archivos o acceder a recursos
compartidos.
Interacción con dispositivos: El sistema operativo puede permitir al usuario enviar
comandos para interactuar con dispositivos periféricos conectados, como impresoras,
escáneres, unidades USB, etc.
Gestión de redes: Los comandos pueden utilizarse para configurar y administrar la
conectividad de red, como establecer conexiones, diagnosticar problemas de red, etc.
En sistemas de interfaz de línea de comandos (CLI), los usuarios ingresan comandos
mediante la escritura de texto en una consola o terminal. En sistemas con interfaz gráfica
de usuario (GUI), los comandos también se pueden ingresar en cuadros de diálogo o
menús, pero en última instancia, estos comandos se traducen en acciones realizadas por
el sistema operativo.
La capacidad del sistema operativo para ejecutar los comandos de los usuarios es lo que
permite a los usuarios interactuar con la computadora y realizar tareas específicas según
sus necesidades y preferencias. Es una de las principales formas en que los usuarios
pueden dar instrucciones al sistema operativo para realizar acciones en su nombre.

1.1.Sistemas Operativos como Maquinas Extendida


El concepto de "sistemas operativos como máquinas extendidas" se refiere a la idea de
que un sistema operativo puede proporcionar una capa de abstracción que extiende las
capacidades y funciones del hardware subyacente, permitiendo a los programas y
usuarios interactuar con la computadora de una manera más conveniente y eficiente.
Básicamente, un sistema operativo actúa como una interfaz entre el hardware físico y las
aplicaciones de software. En lugar de que los programas interactúen directamente con el
hardware, utilizan las funciones y servicios proporcionados por el sistema operativo para
llevar a cabo tareas como la gestión de memoria, la administración de archivos, la
planificación de procesos y otras funciones esenciales.
Al considerar el sistema operativo como una "máquina extendida", se está enfocando en
cómo el sistema operativo agrega capas de funcionalidad y abstracción al hardware
subyacente, lo que permite que los programas y usuarios realicen tareas complejas sin
tener que preocuparse por los detalles técnicos del hardware en sí.
Por ejemplo, imagina que estás escribiendo un programa para imprimir un documento.
En lugar de tener que lidiar con los detalles específicos de cómo enviar señales eléctricas
a los componentes de la impresora para imprimir, el programa puede simplemente
hacer una llamada a una función proporcionada por el sistema operativo para imprimir
el documento. El sistema operativo se encargaría de todas las complejidades
relacionadas con la comunicación con la impresora y la gestión de la cola de impresión.
En resumen, el concepto de sistemas operativos como máquinas extendidas resalta cómo
el sistema operativo actúa como una capa intermedia que simplifica y amplía las
capacidades del hardware, permitiendo que los programas y usuarios interactúen con la
computadora de manera más eficiente y abstraída.
Con mas detalles:
La arquitectura (conjunto de instrucciones, organización de memoria, E/S y estructura de
bus) de la mayoría de las computadoras a nivel de lenguaje máquina es primitiva y
compleja de programar, en especial para la entrada/salida.
Sin entrar en los detalles reales, debe quedar claro que el programador promedio tal vez
no desee involucrarse demasiado con la programación de bajo nivel. En vez de ello, lo que
desea es una abstracción simple de alto nivel que se encargue de lidiar con este tipo de
complejidad. Los detalles más específicos no deben aparecer en la abstracción que se
presenta al programador de aplicaciones.
Dicha abstracción es la clave para lidiar con la complejidad. Las buenas abstracciones
convierten una tarea casi imposible en dos tareas manejables. La primera de éstas es
definir e implementar las abstracciones; la segunda, utilizarlas para resolver el problema
en cuestión. Una abstracción que casi cualquier usuario de computadora comprende es el
archivo: es una pieza útil de información, como una fotografía digital, un mensaje de
correo electrónico almacenado o una página Web. Es más fácil lidiar con fotografías,
correos electrónicos y páginas Web que con los detalles de los discos, como en el caso del
disco flexible descrito. El trabajo del sistema operativo es crear buenas abstracciones para
después implementar y administrar los objetos abstractos entonces creados.
Una de las principales tareas del sistema operativo es ocultar el hardware y presentar a los
programas (y a sus programadores) abstracciones agradables, elegantes, simples y
consistentes con las que puedan trabajar.
Hay que recalcar que los verdaderos clientes del sistema operativo son los programas de
aplicación (a través de los programadores de aplicaciones, desde luego). Son los que
tratan directamente con el sistema operativo y sus abstracciones. En contraste, los
usuarios finales tienen que lidiar con las abstracciones que proporciona la interfaz de
usuario, ya sea un Shell de línea de comandos o una interfaz gráfica.

1.1.Sistemas Operativos como Administración de Recursos.


El concepto de un sistema operativo cuya función principal es proporcionar abstracciones a los programas
de aplicación responde a una perspectiva de arriba hacia abajo. La perspectiva alterna, de abajo hacia arriba,
sostiene que el sistema operativo está presente para administrar todas las piezas de un sistema complejo.
Las computadoras modernas constan de procesadores, memorias, temporizadores, discos, ratones,
interfaces de red, impresoras y una amplia variedad de otros dispositivos. En la perspectiva alterna, el
trabajo del sistema operativo es proporcionar una asignación ordenada y controlada de los procesadores,
memorias y dispositivos de E/S, entre los diversos programas que compiten por estos recursos. Los sistemas
operativos modernos permiten la ejecución simultánea de varios programas. Imagine lo que ocurriría si tres
programas que se ejecutan en cierta computadora trataran de imprimir sus resultados en forma simultánea
en la misma impresora. Las primeras líneas de impresión podrían provenir del programa 1, las siguientes del
programa 2, después algunas del programa 3, y así en lo sucesivo: el resultado sería un caos. El sistema
operativo puede imponer orden al caos potencial, guardando en búferes en disco toda la salida
destinada para la impresora. Cuando termina un programa, el sistema operativo puede entonces copiar su
salida, previamente almacenada, del archivo en disco a la impresora, mientras que al mismo tiempo el otro
programa puede continuar generando más salida, ajeno al hecho de que la salida en realidad no se está
enviando a la impresora todavía. Cuando una computadora (o red) tiene varios usuarios, la necesidad de
administrar y proteger la memoria, los dispositivos de E/S y otros recursos es cada vez mayor; de lo
contrario, los usuarios podrían interferir unos con otros. Además, los usuarios necesitan con frecuencia
compartir no sólo el hardware, sino también la información (archivos o bases de datos, por ejemplo). En
resumen, esta visión del sistema operativo sostiene que su tarea principal es llevar un registro de qué
programa está utilizando qué recursos, de otorgar las peticiones de recursos, de contabilizar su uso y de
mediar las peticiones en conflicto provenientes de distintos programas y usuarios. La administración de
recursos incluye el Multiplexaje (compartir) de recursos en dos formas distintas: en el tiempo y en el
espacio. Cuando un recurso se multiplexa en el tiempo, los distintos programas o usuarios toman turnos
para utilizarlo: uno de ellos obtiene acceso al recurso, después otro, y así en lo sucesivo. Por ejemplo, con
sólo una CPU y varios programas que desean ejecutarse en ella, el sistema operativo primero asigna la CPU a
un programa y luego, una vez que se ha ejecutado por el tiempo suficiente, otro programa obtiene acceso a
la CPU, después otro, y en un momento dado el primer programa vuelve a obtener acceso al recurso. La
tarea de determinar cómo se multiplexa el recurso en el tiempo (quién sigue y durante cuánto tiempo) es
responsabilidad del sistema operativo. Otro ejemplo de multiplexaje en el tiempo es la compartición de la
impresora. Cuando hay varios trabajos en una cola de impresión, para imprimirlos en una sola impresora, se
debe tomar una decisión en cuanto a cuál trabajo debe imprimirse a continuación. El otro tipo de
multiplexaje es en el espacio. En vez de que los clientes tomen turnos, cada uno obtiene una parte del
recurso. Por ejemplo, normalmente la memoria principal se divide entre varios programas en ejecución para
que cada uno pueda estar residente al mismo tiempo (por ejemplo, para poder tomar turnos al utilizar la
CPU). Suponiendo que hay suficiente memoria como para contener varios programas, es más eficiente
contener varios programas en memoria a la vez, en vez de proporcionar a un solo programa toda la
memoria, en especial si sólo necesita una pequeña fracción. Desde luego que esto genera problemas de
equidad y protección, por ejemplo, y corresponde al sistema operativo resolverlos. Otro recurso que se
multiplexa en espacio es el disco duro. En muchos sistemas, un solo disco puede contener archivos de
muchos usuarios al mismo tiempo. Asignar espacio en disco y llevar el registro de quién está utilizando
cuáles bloques de disco es una tarea típica de administración de recursos común del sistema operativo.

1.2.Requisitos para el diseño de Sistemas Operativos.


El diseño de un sistema operativo debe reflejar con seguridad los requisitos que se pretende que éste
cumpla. Todos los sistemas operativos de multiprogramación, desde los sistemas monousuario, como
Windows NT, hasta los sistemas de grandes computadores, como MVS, que puede dar soporte a miles de
usuarios, están construidos en torno al concepto de proceso. Por tanto, los requisitos principales que debe
satisfacer un sistema operativo están expresados haciendo referencia a los procesos:

• El sistema operativo debe intercalar la ejecución de un conjunto de procesos para maximizar la utilización
del procesador ofreciendo a la vez un tiempo de respuesta razonable.

• El sistema operativo debe asignar los recursos a los procesos en conformidad con una política específica
(por ejemplo, ciertas funciones o aplicaciones son de prioridad más alta), evitando, al mismo tiempo, el
interbloqueo.

• El sistema operativo podría tener que dar soporte a la comunicación entre procesos y la creación de
procesos por parte del usuario, labores que pueden ser de ayuda en la estructuración de las aplicaciones.

1.3.Estructura de los Sistemas Operativos.


En función de esta estructura se pueden agrupar los sistemas operativos en dos grandes grupos: sistemas
operativos monolíticos y sistemas operativos estructurados.

Sistemas operativos monolíticos: Un sistema operativo de este tipo no tiene una estructura clara y bien
definida. Todos sus componentes se encuentran integrados en un único programa (el sistema operativo) que
ejecuta en un único espacio de direcciones. En este tipo de sistemas todas las funciones que ofrece el
sistema operativo se ejecutan en un modo núcleo. Estos sistemas operativos han surgido, normalmente, de
sistemas operativos sencillos y pequeños a los que se les ha ido añadiendo un número mayor de
funcionalidades. Esto les ha hecho evolucionar y crecer hasta convertirlos en programas grandes y
complejos formados por muchas funciones situadas todas ellas en un mismo nivel. Ejemplos claros de este
tipo de sistemas son MS-DOS y UNIX. Ambos comenzaron siendo pequeños sistemas operativos, que fueron
haciéndose cada vez más grandes debido a la gran popularidad que adquirieron. El problema que plantean
este tipo de sistemas radica en lo complicado que es modificar el sistema operativo para añadir nuevas
funcionalidades y servicios. En efecto, añadir una nueva característica al sistema operativo implica la
modificación de un gran programa, compuesto por miles de líneas de código fuente y funciones, cada una de
las cuales puede invocar a otras cuando así lo requiera. Además, en este tipo de sistemas no se sigue el
principio de ocultación de la información. Para solucionar este problema es necesario dotar de cierta
estructura al sistema operativo.

Sistemas operativos estructurados: Cuando se quiere dotar de estructura a un sistema operativo,


normalmente se recurre a dos tipos de soluciones: sistemas por capas y sistemas cliente-servidor.

a) Sistemas por capa. En un sistema por capas, el sistema operativo se organiza como una jerarquía de
capas, donde cada capa ofrece una interfaz clara y bien definida a la capa superior y solamente utiliza
los servicios que le ofrece la capa inferior. La principal ventaja que ofrece este tipo de estructuras es la
modularidad y la ocultación de la información. Una capa no necesita conocer como se ha
implementado la capa sobre la que se construye, únicamente necesita conocer la interfaz que ofrece.
Esto facilita enormemente la depuración y verificación del sistema, puesto que las capas se pueden ir
construyendo y depurando por separado. Este enfoque lo utilizo por primera vez el sistema operativo
THE [Dijkstra, 1968], un sistema operativo sencillo que estaba formado por seis capas, como se muestra
en la Figura 2.6. Otro ejemplo de sistema operativo diseñado por capas es el OS/2 [Deitel, 1994],
descendiente de MS-DOS.

b) Modelo cliente-servidor En este tipo de modelo, el enfoque consiste en implementar la mayor parte de
los servicios y funciones del sistema operativo en procesos de usuario, dejando solo una pequeña parte del
sistema operativo ejecutando en modo núcleo. A esta parte se le denomina micronúcleo y a los procesos
que ejecutan el resto de funciones se les denomina servidores. La Figura 2.7 presenta la estructura de un
sistema operativo con estructura cliente-servidor, Como puede apreciarse en la figura, el sistema operativo
está formado por diversas partes, cada una de las cuales puede desarrollarse por separado. No hay una
definición clara de las funciones que debe llevar a cabo un micronúcleo. La mayoría incluyen la gestión de
interrupciones, gestión básica de procesos y de memoria y servicios básicos de comunicación entre
procesos. Para solicitar un servicio en este tipo de sistemas, como por ejemplo crear un proceso, el proceso
de usuario (proceso denominado cliente) solicita el servicio al servidor del sistema operativo
correspondiente, en este caso al servidor de procesos. A su vez, el proceso servidor puede requerir los
servicios de otros servidores, como es el caso del servidor de memoria. En este caso, el servidor de procesos
se convierte en cliente del servidor de memoria. La ventaja de este modelo es la gran flexibilidad que
presenta. Cada proceso servidor sólo ocupa de una funcionalidad concreta, lo que hace que cada parte
pueda ser pequeña y Esto a su vez facilita el desarrollo y depuración de cada uno de los procesos servidores.
En cuanto a las desventajas, citar que estos sistemas presentan una mayor sobrecarga en el tratamiento de
los servicios que los sistemas monolíticos. Esto se debe a que los distintos componentes de un sistema
operativo de este tipo ejecutan en espacios de direcciones distintos, lo que hace que su activación requiera
más tiempo.
1.3.Servicios del Sistema Operativo.
Un sistema operativo proporciona un entorno para la ejecución de programas. El sistema presta ciertos
servicios a los programas y a los usuarios de dichos programas. Por supuesto, los servicios específicos que se
suministran difieren de un sistema operativo a otro, pero podemos identificar perfectamente una serie de
clases comunes. Estos servicios del sistema operativo se proporcionan para comodidad del programador,
con el fin de facilitar la tarea de desarrollo. Un cierto conjunto de servicios del sistema operativo
proporciona funciones que resultan útiles al usuario:

 Interfaz de usuario. Casi todos los sistemas operativos disponen de una interfaz de usuario (UI, user
interface), que puede tomar diferentes formas. Uno de los tipos existentes es la interfaz de línea de
comandos (CLI, command-line interface), que usa comandos de textos y algún tipo de método para
introducirlos, es decir, un programa que permite introducir y editar los comandos. Otro tipo
destacable es la interfaz de proceso por lotes, en la que los comandos y las directivas para controlar
dichos comandos se introducen en archivos, luego dichos archivos se ejecutan. Habitualmente, se
utiliza una interfaz gráfica de usuario (GUI, graphical user interface); en este caso, la interfaz es un
sistema de ventanas, con un dispositivo señalador para dirigir la E/S, para elegir opciones en los
menús y para realizar otras selecciones, y con un teclado para introducir texto. Algunos sistemas
proporcionan dos o tres de estas variantes.

 Ejecución de programas. El sistema tiene que poder cargar un programa en memoria y ejecutar
dicho programa. Todo programa debe poder terminar su ejecución, de forma normal o anormal
(indicando un error).

 Operaciones de E/S. Un programa en ejecución puede necesitar llevar a cabo operaciones de E/S,
dirigidas a un archivo o a un dispositivo de E/S. Para ciertos dispositivos específicos, puede ser
deseable disponer de funciones especiales, tales como grabar en una unidad de CD o DVD o borrar
una pantalla de TRC (tubo de rayos catódicos). Por cuestiones de eficiencia y protección, los
usuarios no pueden, normalmente, controlar de modo directo los dispositivos de E/S; por tanto, el
sistema operativo debe proporcionar medios para realizar la E/S.
 Manipulación del sistema de archivos. El sistema de archivos tiene una importancia especial.
Obviamente, los programas necesitan leer y escribir en archivos y directorios. También necesitan
crearlos y borrarlos usando su nombre, realizar búsquedas en un determinado archivo o presentar
la información contenida en un archivo. Por último, algunos programas incluyen mecanismos de
gestión de permisos para conceder o denegar el acceso a los archivos o directorios basándose en
quién sea el propietario del archivo.

 Comunicaciones. Hay muchas circunstancias en las que un proceso necesita intercambiar


información con otro. Dicha comunicación puede tener lugar entre procesos que estén
ejecutándose en la misma computadora o entre procesos que se ejecuten en computadoras
diferentes conectadas a través de una red. Las comunicaciones se pueden implementar utilizando
memoria compartida o mediante paso de mensajes, procedimiento en el que el sistema operativo
transfiere paquetes de información entre unos procesos y otros.

 Detección de errores. El sistema operativo necesita detectar constantemente los posibles errores.
Estos errores pueden producirse en el hardware del procesador y de memoria (como, por ejemplo,
un error de memoria o un fallo de la alimentación) en un dispositivo de E/S (como un error de
paridad en una cinta, un fallo de conexión en una red o un problema de falta papel en la impresora)
o en los programas de usuario (como, por ejemplo, un desbordamiento aritmético, un intento de
acceso a una posición de memoria ilegal o un uso excesivo del tiempo de CPU). Para cada tipo de
error, el sistema operativo debe llevar a cabo la acción apropiada para asegurar un funcionamiento
correcto y coherente. Las facilidades de depuración pueden mejorar en gran medida la capacidad
de los usuarios y programadores para utilizar el sistema de manera eficiente.

Hay disponible otro conjunto de funciones del sistema de operativo que están pensadas para ayudar al
usuario, sino para garantizar la eficiencia del propio sistema. Los sistemas con múltiples usuarios
pueden ser más eficientes cuando se comparten los recursos del equipo entre los distintos usuarios:

 Asignación de recursos. Cuando hay varios usuarios, o hay varios trabajos ejecutándose al mismo
tiempo, deben asignarse a cada uno de ellos los recursos necesarios. El sistema operativo gestiona
muchos tipos diferentes de recursos; algunos (como los ciclos de CPU, la memoria principal y el
espacio de almacenamiento de archivos) pueden disponer de código software especial que gestione
su asignación, mientras que otros (como los dispositivos de E/S) pueden tener código que gestione
de forma mucho más general su solicitud y liberación. Por ejemplo, para poder determinar cuál es
el mejor modo de usar la CPU el sistema operativo dispone de rutinas de planificación de la CPU
que tienen en cuenta la velocidad del procesador, los trabajos que tienen que ejecutarse, el
número de registros disponibles

 Responsabilidad. Normalmente conviene hacer un seguimiento de qué usuarios emplean que clase
de recursos de la computadora y en qué cantidad. Este registro se puede usar para propósitos
contables (con el fin de poder facturar el gasto correspondiente a los usuarios) o simplemente para
acumular estadísticas de uso. Estas estadísticas pueden ser una herramienta valiosa para aquellos
investigadores que deseen el sistema con el fin de mejorar los servicios informáticos.

 Protección y seguridad. Los propietarios de la información en un sistema de computadoras en red


o multiusuario necesitan a menudo poder controlar el uso de dicha información. Cuando se
ejecutan de forma concurrente varios procesos distintos no debe ser posible que un proceso
interfiera con los demás procesos o con el propio sistema operativo. La protección implica asegurar
que todos los accesos a los recursos del sistema estén controlados. También es importante
garantizar la seguridad del sistema frente a posibles intrusos; dicha seguridad comienza por
requerir que cada usuario se autentique ante el sistema, usualmente mediante una contraseña,
para obtener acceso a los recursos de este. Esto se extiende a la defensa de los dispositivos de E/ S,
entre los que incluyen módems y adaptadores de red. frente a intentos de acceso ilegales y el
registro de dichas conexiones con el fin de detectar intrusiones. Si hay que proteger y asegurar un
sistema, las protecciones deben implementarse en todas partes del mismo: una cadena es tan
fuerte como su eslabón más débil.

1.3.Interfaz del Usuario.


Existen dos métodos fundamentales para que los usuarios interactúen con el sistema operativo. Una técnica
consiste en proporcionar una interfaz de línea de comandos o intérprete de comandos, que permita a los
usuarios introducir directamente comandos que el sistema operativo pueda ejecutar. El segundo método
permite que el usuario interactúe con el sistema operativo a través de una interfaz gráfica de usuario o GUI.

Intérprete de comandos

Algunos sistemas operativos incluyen el intérprete de comandos en el kernel. Otros, como Windows XP y
UNIX, tratan al intérprete de comandos como un programa especial que se ejecuta cuando se inicia un
trabajo o cuando un usuario inicia una sesión (en los sistemas interactivos). En los sistemas que disponen de
varios intérpretes de comandos entre los que elegir, los intérpretes se conocen como Shell. Por ejemplo, en
los sistemas UNIX y Linux, hay disponibles varias Shell diferentes entre las que un usuario puede elegir,
incluyendo la Shell Bourne, la Shell C, la Shell Bourne-Again, la Shell Korn, etc. La mayoría de las Shell
proporcionan funcionalidades similares, existiendo sólo algunas diferencias menores, casi todos los usuarios
seleccionan una Shell u otra basándose en sus preferencias personales. La función principal del intérprete de
comandos es obtener y ejecutar el siguiente comando especificado por el usuario. Muchos de los comandos
que se proporcionan en este nivel se utilizan para manipular archivos: creación, borrado, listado, impresión,
copia, ejecución, etc.; las Shell* de MS-DOS y UNIX operan de esta forma. Estos comandos pueden
implementarse de dos formas generales.

Uno de los métodos consiste en que el propio intérprete de comandos contiene el código que el comando
tiene que ejecutar. Por ejemplo, un comando para borrar un archivo puede hacer que el intérprete de
comandos salte a una sección de su código que configura los parámetros necesarios y realiza las apropiadas
llamadas al sistema. En este caso, el número de comandos que puede proporcionarse determina el tamaño
del intérprete de comandos, dado que cada comando requiere su propio código de implementación.
Un método alternativo, utilizado por UNIX y otros sistemas operativos, implementa la mayoría de los
comandos a través de una serie de programas del sistema. En este caso, el intérprete de comandos no
"entiende" el comando, sino que simplemente lo usa para identificar el archivo que hay que cargar en
memoria y ejecutar. Por tanto, el comando UNIX para borrar un archivo “rm file.txt” buscaría un archivo
llamado “rm“ , cargaría el archivo en memoria y lo ejecutaría, pasándole el parámetro file. txt. La función
asociada con el comando rm queda definida completamente mediante el código contenido en el archivo rm.
De esta forma, los programadores pueden añadir comandos al sistema fácilmente, creando nuevos archivos
con los nombres apropiados. El programa intérprete de comandos, que puede ser pequeño, no tiene que
modificarse en función de los nuevos comandos que se añadan.

Una segunda estrategia para interactuar con el sistema operativo es a través de una interfaz gráfica de
usuario (GUI) suficientemente amigable. En lugar de tener que introducir comandos directamente a través
de la línea de comandos, una GUI permite a los usuarios emplear un sistema de ventanas y menús
controlable mediante el ratón. Una GUI proporciona una especie de escritorio en el que el usuario mueve el
ratón para colocar su puntero sobre imágenes, o iconos, que se muestran en la pantalla (el escritorio) y que
representan programas, archivos. directorios y funciones del sistema. Dependiendo de la ubicación del
puntero, pulsar el botón del ratón puede invocar un programa, seleccionar un archivo o directorio (conocido
como carpeta) o desplegar un menú que contenga comandos ejecutables. las primeras interfaces gráficas de
usuario aparecieron debido, en parte, a las investigaciones realizadas en el departamento de investigación
de Xerox Parc a principios de los años 70. La primera GUI se incorporó en la computadora Xerox Alto en
1973. Sin embargo, las interfaces gráficas sólo se popularizaron con la introducción de las computadoras
Apple Macintosh en los años 80. La interfaz de usuario del sistema operativo de Macintosh (Mac OS) ha
sufrido diversos cambios a lo largo de los años, siendo el más significativo la adopción de la interfaz Aqua en
Mac OS X. La primera versión de Microsoft Windows (versión 1.0) estaba basada en una interfaz GUI que
permitía interactuar con el sistema operativo MS-DOS. Las distintas versiones de los sistemas Windows
proceden de esa versión inicial, a la que se le han aplicado cambios cosméticos en cuanto su apariencia y
diversas mejoras de funcionalidad, incluyendo el Explorador de Windows. Tradicionalmente, en los sistemas
UNIX han predominado las interfaces de línea de comandos, aunque hay disponibles varias interfaces GUI,
incluyendo el entorno de escritorio CDE (Common Desktop Environment) y los sistemas X-Windows, que son
muy habituales en las versiones comerciales de UNIX, como Solaris 0 el sistema AIX de IBM. Sin embargo,
también es necesario resaltar el desarrollo de diversas interfaces de tipo CUI en diferentes proyectos de
Código fuente abierto, como por ejemplo el entorno de escritorio KDE (K tx•sktop Environment) y el entorno
GNOME, que forma parte del proyecto GNU. Ambos entornos de escritorio, KDE y GNOME. se ejecutan
sobre Linux y otros varios sistemas UNIX, y están disponibles con licencias de código fuente abierto, 10 que
quiere decir que Su código fuente es del dominio público. La decisión de usar una interfaz de línea de
comandos o GUI es, principalmente, una opción personal. Por regla general, muchos usuarios de UNIX
prefieren una interfaz de línea de coman dos, ya que a menudo les proporciona interfaces de tipo Shell más
potentes. Por otro lado, la mayor parte de los usuarios de Windows se decantan por el uso del entorno GUI
de Windows y casi nunca emplean la interfaz de tipo Shell MS-DOS. Por el contrario, los diversos cambios
experimentados por los sistemas operativos de Macintosh proporcionan un interesante caso de estudio:
históricamente, Mac OS no proporcionaba una interfaz de línea de comandos, siendo obligatorio que los
usuarios interactuaran con el sistema operativo a través de la interfaz GUI; sin embargo, con el lanzamiento
de Mac OS X (que está parcialmente basado en un kernel CXIX). el sistema operativo proporciona ahora
tanto la nueva interfaz Aqua. como una interfaz de línea de comandos.
1.4.Llamadas a Sistemas.
Las llamadas al sistema proporcionan una interfaz con la que poder invocar servicios que el sistema
operativo ofrece. Estas llamadas, generalmente, están disponibles como rutinas escritas en C y C", aunque
determinadas tareas de bajo nivel, como por ejemplo aquéllas en las que se tiene que acceder al hardware,
pueden necesitar escribirse con lenguaje ensamblador

Antes de ver cómo pone un Sistema Operativo a nuestra disposición las llamadas al sistema. vamos a ver un
ejemplo para ilustrar cómo se usan llamadas: suponga que deseamos escribir un programa sencillo para leer
datos de un archivo y copiarlos en otro archivo, El primer dato de entrada que el programa va a necesitar
Son los nombres de los archivos, el de entrada y el de salida. Estos nombres pueden especificarse de muchas
maneras. dependiendo del diseño del sistema operativo; un método consiste en que el programa pida al
usuario que introduzca nombres de los dos archivos. En un sistema interactivo, este método requerirá una
secuencia de llamadas al sistema: primero hay que escribir un mensaje en el indicativo de comandos de la
pantalla y luego leer del teclado los caracteres que especifican los dos archivos En los sistemas basados en
iconos y en el uso de un ratón, habitualmente se suele presentar un menú de archivo en una ventana. El
usuario puede entonces usar el ratón para seleccionar el nombre del archivo de origen y puede abrirse otra
ventana para especificar el del archivo de destino. Esta secuencia requiere realizar numerosas llamadas al
sistema de E/S

Una vez que se han obtenido los nombres de los dos archivos. el programa debe abrir el archivo de entrada
y crear el archivo de salida. Cada una de estas requiere otra llamada al sistema. Asimismo, para cada
operación, existen posibles condiciones de error. Cuando el programa intenta abrir el archivo de entrada,
puede encontrarse con que no existe ningún archivo con ese nombre o que está protegido contra accesos.
En estos casos, el programa debe escribir un mensaje en la consola (otra secuencia de llamadas al sistema) y
terminar de forma anormal (otra llamada al sistema). Si el archivo de entrada existe, entonces se debe crear
un nuevo archivo de salida. En este caso, podemos encontrarnos con que ya existe un archivo de salida con
el nombre; esta situación puede hacer que el programa termine (una Llamada al sistema) o podemos borrar
el archivo existente (otra llamada al sistema) y crear otro (otra llamada más). En un sistema Interactivo, otra
posibilidad sería preguntar al usuario (a través de una secuencia de al sistema para mostrar mensajes en el
indicativo de comandos y leer las respuestas desde el terminal) si desea reemplazar el archivo existente o
terminar el programa.

Una vez que ambos archivos están definidos, hay que ejecutar un bucle que lea del archivo de entrada (una
llamada al sistema) y escriba en el archivo de salida (Otra llamada al sistema). Cada lectura y escritura
devolver información de estado relativa a las distintas condiciones posibles de error. En la entrada, el
programa puede encontrarse con que ha llegado al final del archivo o con que se ha producido un fallo de
hardware en la lectura (como por ejemplo un error de paridad) En la operación de escritura pueden
producirse varios errores, dependiendo del dispositivo de salida (espacio de disco insuficiente. la impresora
no tiene papel, etc.) Finalmente, después de que ha copiado el archivo completo, el programa cierra ambos
archivos (otra llamada al sistema), escribe un mensaje en la consola o ventana (más llamadas al sistema) y,
por último. termina normalmente (la última llamada al sistema). Como puede ver. incluso los programas
más sencillos pueden hacer un uso intensivo del sistema operativo. Frecuentemente, los sistemas ejecutan
miles de llamadas al sistema por segundo. Esta secuencia de llamadas al sistema se muestra en la Figura 2.1.

Sin embargo. lo mayoría de los programadores no ven este nivel de detalle. Normalmente. Desarrolladores
de aplicaciones diseñan sus programas utilizando una API (application programming interface, interfaz de
programación de aplicaciones). La API especifica un conjunto de funciones que el programador de
aplicaciones puede usar, indicándose los parámetros que hay que pasar a cada función y los valores de
retorno que el programador debe esperar. Tres de las API disponibles para programadores de aplicaciones
son la API Win32 para sistemas Windows, la API PCFIX para sistemas basados en POSIX (que incluye
prácticamente todas las versiones de UNIX, Linux y Mac OS X) y la API Java para diseñar programas que se
ejecuten sobre una máquina virtual de Java.

Observe que los nombres de las llamadas al sistema que usamos a lo largo del texto son ejemplos genéricos.
Cada sistema operativo tiene sus propios nombres de llamadas al sistema.

Entre bastidores, las funciones que conforman una API invocan, habitualmente, a las llamadas al sistema por
cuenta del programador de la aplicación. Por ejemplo, la función Create Process () de Win32 (que, como su
propio nombre indica, se emplea para crear un nuevo proceso) lo que hace, realmente, es invocar la llamada
al sistema NTCreateProcess() del kernel de Windows. ¿Por qué un programador de aplicaciones preferiría
usar una API en lugar de invocar las propias llamadas al sistema? Existen varias razones para que sea así.
Una ventaja de programar usando una API está relacionada con la portabilidad: un programador de
aplicaciones diseña un programa usando una API cuando quiere poder compilar y ejecutar su programa en
cualquier sistema que soporte la misma API (aunque, en la práctica, a menudo existen diferencias de
arquitectura que hacen que esto Sea más difícil de Io que parece). Además, a menudo resulta más difícil
trabajar con las propias llamadas al sistema y exige un grado mayor de detalle que usar las API que los
programadores de aplicaciones tienen a su disposición. De todos modos, existe una fuerte correlación entre
invocar una función de la API y Su llamada al sistema asociada disponible en el kernel. De hecho, muchas de
las API Win32 y IOSIX son similares a las llamadas al sistema nativas proporcionadas por los sistemas
operativos UNIX, Linux y Windows.
El sistema de soporte en tiempo de ejecución (un conjunto de funciones de biblioteca que suele incluirse
con los compiladores) de la mayoría de los lenguajes de programación proporciona una interfaz de llamadas
al sistema que Sirve como enlace Con las llamadas al sistema disponibles en el sistema operativo. La interfaz
de llamadas al sistema intercepta las llamadas a función dentro de las API e invoca la llamada al sistema
necesaria. Habitualmente, cada llamada al sistema tiene asociado un número y la interfaz de llamadas al
sistema mantiene una tabla indexada según dichos números. Usando esa tabla, la interfaz de llamadas al
sistema invoca la llamada necesaria del kernel del sistema operativo y devuelve el estado de la ejecución de
la llamada al sistema y los posibles valores de retorno.

Quien realiza la llamada no tiene por qué saber nada acerca de cómo se implementa dicha llamada al
sistema o qué es lo que ocurre durante la ejecución. Tan sólo necesita ajustarse a lo que la API específica y
entender lo que hará el sistema operativo como resultado de la ejecución de dicha llamada al sistema. Por
tanto, la API oculta al programador la mayor parte de los detalles de la interfaz del sistema operativo, los
cuales son gestionados por la biblioteca de soporte en tiempo de ejecución. Las relaciones entre una API, la
interfaz de llamadas al sistema y el sistema operativo se muestran en la Figura 2.3, que ilustra cómo
gestiona el sistema operativo una aplicación de usuario invocando la llamada al sistema open ).

Las llamadas al sistema se llevan a cabo de diferentes formas, dependiendo de la computadora que se
utilice. A menudo, se requiere más información que simplemente la identidad de la llamada al sistema
deseada. El tipo exacto y la cantidad de información necesaria varían según el sistema operativo y la llamada
concreta que se efectúe. Por ejemplo, para obtener un dato de entrada, podemos tener que especificar el
archivo o dispositivo que hay que utilizar como origen, así como la dirección y la longitud del búfer de
memoria en el que debe almacenarse dicho dato de entrada. Por supuesto, el dispositivo o archivo y la
longitud pueden estar implícitos en la llamada.
Para pasar parámetros al sistema operativo se emplean tres métodos generales. El más sencillo de ellos
consiste en pasar los parámetros en una serie de registros. Sin embargo, en algunos casos, puede haber más
parámetros que registros disponibles. En estos casos, generalmente, los parámetros se almacenan en un
bloque o tabla, en memoria, y la dirección del bloque se pasa como parámetro en un registro (Figura 2.4).
Éste es el método que utilizan Linux y Solaris. El programa también puede colocar, o insertar, los parámetros
en la pila y el sistema operativo se encargará de extraer de la pila esos parámetros. Algunos sistemas
operativos prefieren el método del bloque o el de la pila, porque no limitan el número o la longitud de los
parámetros que se quieren pasar.

Las llamadas al sistema comúnmente usan una instrucción especial de la CPU que causa que el procesador
transfiera el control a un código privilegiado (Generalmente es el núcleo) previamente especificado. Esto
permite al código privilegiado especificar donde va a ser conectado, así como el estado del procesador.

Cuando una llamada es invocada, la ejecución del programa que invoca es interrumpida y sus datos son
guardados normalmente en BCP (Bloque de control de procesos: es un registro especial donde el sistema
operativo agrupa toda la información que necesita conocer respecto a un proceso particular. Cada vez que
se crea un proceso el sistema operativo crea el BCP correspondiente para que sirva como descripción en
tiempo de ejecución durante toda la vida del proceso) para poder ejecutarse luego. El procesador entonces
comienza a ejecutar las instrucciones de código de alto nivel de privilegio para realizar la tarea requerida,
cuando esta finaliza se retorna al proceso original y continua su ejecución. EL retorno al proceso
demandante no es obligatoriamente, es inmediato, depende del tiempo de ejecución de la llamada al
sistema y del algoritmo de planificación del CPU.

1.4.Tipos de Llamadas al Sistema.

Las llamadas al sistema pueden agruparse de forma muy general en cinco categorías principales control de
procesos, manipulación de archivos, manipulación de dispositivos, mantenimiento de información y
comunicaciones.

Control de procesos

 terminar, abortar
 cargar, ejecutar
 crear terminar procesos
 obtener atributos del proceso, definir atributos del proceso
 esperar para obtener tiempo
 esperar suceso, señalizar suceso
 asignar y liberar memoria

Administración de archivos

 crear archivos, borrar archivos


 abrir, cerrar
 leer, escribir, reposicionar
 obtener atributos de archivo. definir atributos de archivo

Administración de dispositivos

 solicitar dispositivo, dispositivo


 leer, escribir, reposicionar
 obtener atributos de dispositivo, definir atributos de dispositivo
 conectar y desconectar dispositivos lógicamente

Mantenimiento de información

 obtener la hora o la fecha, definir la hora o la fecha


 obtener datos del sistema, establecer datos del sistema
 obtener los atributos de procesos, archivos o dispositivos
 establecer los atributos de procesos, archivos o dispositivos

Comunicaciones

 Crear, eliminar conexiones de comunicación


 enviar, recibir mensajes
 transferir información de estado
 conectar y desconectar dispositivos remotos
(HAY INFO EXTRA QUE NO SE SI VA O NO VA)

1.5.Tipos de Sistemas Operativos Modernos.

Un sistema distribuido es una colección de procesadores conectados en red, la cual es imprescindible para
su funcionamiento. Estos procesadores no comparten memoria entre sí, en lugar de eso, cada procesador
tiene su propia memoria local. Desde el punto de vista de un procesador especifico en un sistema
distribuido, el resto de los procesadores y sus respectivos recursos son remotos, mientras que sus propios
recursos son locales.

Ventajas

 Compartir recursos

Los usuarios de un host (servidor que provee servicios a otras computadoras) pueden disponer de los
recursos de los demas host. En general se ofrecen mecanismos para compartir archivos remotos, procesar
informacian en sistemas de bases de datos distribuidos, imprimir archivos en host remotos, usar equipos de
hardware especializados, etc.

 Aumentar la velocidad

Si un determinado problema se puede dividir en subproblemas de manera que diferentes procesadores se


encarguen de cada una de las partes queda claro que ese hecho hará que se obtenga una solución mas
rápidamente. Otro elemento para tomar en cuenta es que si un procesador especifico esta muy cargado se
puede pasar su trabajo hacia otro que esta menos cargado, lo cual se denomina carga compartida, lo que,
evidentemente, redundara en una mayor velocidad de respuesta.

 Confiabilidad

Si un host de un sistema distribuido falla el resto de los hosts pueden continuar funcionando. Si el sistema
esta compuesto por una cantidad de instalaciones autónomas (por ejemplo, computadoras de propósito
general) la falla de un host no afectara el resto, sin embargo si el sistema esta formado por pequeñas
maquinas y cada una de ellas tiene alguna responsabilidad crucial, una simple falla afectara la operación.
Para resolver esta situación debe tenerse suficiente redundancia de recursos (en hardware y datos).

La falla de un host debe detectarse por el sistema, el cual tendra que tomar una accion adecuada para
recuperarse de ella, entre las acciones esta ver si existe la posibilidad de que otro host se encargue de la
tarea de aquel que falla haciendo la oportuna transferencia de funciones.
 Comunicación

Como los host están conectados entre si, pueden intercambiar información. La información se puede
transferir aun cuando los host están a distancias considerables.

Desventajas

 La desventaja principal de los S.O.D. es que el software no obstante más compacto y disperso, tiene
una responsabilidad hasta cierto punto crítica; es complejo en términos de su diseño, implantación
y uso
 Una vez que el sistema llega a depender de la red, la pérdida o saturación de ésta puede negar
algunas de las ventajas que el S.O.D. debía conseguir.

Los sistemas integrados (embedded), que también se conocen como incrustados o embebidos, operan en
las computadoras que controlan dispositivos que no se consideran generalmente como computadoras, ya
que no aceptan software instalado por el usuario.

Algunos ejemplos comunes son los hornos de microondas, las televisiones, los autos, los grabadores de
DVDs, los teléfonos celulares y los re- productores de MP3. La propiedad principal que diferencia a los
sistemas integrados de los dispositivos de bolsillo es la certeza de que nunca se podrá ejecutar software que
no sea confiable. No se pueden descargar nuevas aplicaciones en el horno de microondas; todo el software
se encuentra en ROM. Esto significa que no hay necesidad de protección en las aplicaciones lo cual conlleva
a cierta simplificación.

Sistemas operativos en tiempo real: Otro tipo de sistema operativo es el sistema en tiempo real. Estos
sistemas se caracterizan por tener el tiempo como un parámetro clave. Por ejemplo, en los sistemas de
control de procesos industriales, las computadoras en tiempo real tienen que recolectar datos acerca del
proceso de producción y utilizarlos para controlar las máquinas en la fábrica. A menudo hay tiempos de
entrega estrictos que se deben cumplir. Por ejemplo, si un auto se desplaza sobre una línea de ensamblaje,
deben llevarse a cabo ciertas acciones en determinados instantes. Si un robot soldador realiza su trabajo de
soldadura antes o después de tiempo, el auto se arruinará. Si la acción debe ocurrir sin excepción en cierto
momento (o dentro de cierto rango), tenemos un sistema en tiempo real duro. Muchos de estos sistemas se
encuentran en el control de procesos industriales, en aeronáutica, en la milicia y en áreas de aplicación
similares. Estos sistemas deben proveer garantías absolutas de que cierta acción ocurrirá en un instante
determinado. Otro tipo de sistema en tiempo real es el sistema en tiempo real suave , en el cual es
aceptable que muy ocasionalmente se pueda fallar a un tiempo predeterminado. Los sistemas de audio
digital o de multimedia están en esta categoría. Los teléfonos digitales también son ejemplos de sistema en
tiempo real suave. Como en los sistemas en tiempo real es crucial cumplir con tiempos predeterminados
para realizar una acción, algunas veces el sistema operativo es simplemente una biblioteca enlazada con los
programas de aplicación, en donde todo está acoplado en forma estrecha y no hay protección entre cada
una de las partes del sistema. Un ejemplo de este tipo de sistema en tiempo real es e -Cos. Las categorías de
sistemas para computadoras de bolsillo, sistemas integrados y sistemas en tiempo real se traslapan en
forma considerable. Casi todos ellos tienen por lo menos ciertos aspectos de tiempo real suave. Los sistemas
integrados y de tiempo real sólo ejecutan software que colocan los diseñadores del sistema; los usuarios no
pueden agregar su propio software, lo cual facilita la protección. Los sistemas de computadoras de bolsillo y
los sistemas integrados están diseñados para los consumidores, mientras que los sistemas en tiempo real
son más adecuados para el uso industrial. Sin embargo, tienen ciertas características en común.

Sistemas operativos por Lotes: procesan un conjunto de trabajos (con características afines) al mismo
tiempo, es decir, con poca o ninguna interacción entre los usuarios y los programas en ejecución. Estos
sistemas no son convenientes para el desarrollo de programas de poco tiempo de respuesta, sino que están
diseñados para conjuntos de programas de largos tiempos de ejecución los cuales no pueden ser
interrumpidos. Un ejemplo de estos lotes puede ser: análisis estadísticos, nóminas de personal, etc.

Sistemas operativos interactivos: Un sistema operativo interactivo o de utilización directa ofrece una
comunicación en la línea del usuario y el sistema operativo. El usuario proporciona instrucciones
directamente al sistema operativo y recibe una respuesta inmediata. En lo general para proporcionar la
entrada se utiliza un teclado y para la salida una impresora o un monitor. Cuando el sistema operativo
termina de ejecutar el mandato busca el siguiente enunciado de control del teclado o usuario. Este
proporciona un mandato, espera la respuesta y decide sobre el siguiente mandato dependiendo del
resultado anterior.

Sistema operativo de tiempo compartido: Varias tareas se pueden ejecutar al mismo tiempo y funcionar sin
problema. También se les llama sistemas multitarea, y las tareas pueden ser de un solo usuario o de
diferentes usuarios. El tiempo que cada tarea llega a ejecutar se llama quantum. Una vez transcurrido este
intervalo de tiempo, el sistema operativo cambia a la siguiente tarea.

Sistemas operativos de multiprogramación: La multiprogramación aumenta la utilización de la CPU


organizando los trabajos de manera que este siempre tenga algo que ejecutar. El sistema operativo escoge
uno de los trabajos y lo comienza a ejecutar, en algún momento ese trabajo tendrá que esperar a que se
efectúe cierta tarea, por ejemplo, que termine una operación de entrada salida. En un sistema
multiprogramado el sistema operativo cambia a otro trabajo y lo ejecuta, cuando ese trabajo tiene que
esperar, la CPU cambia a otro, etc. Eventualmente el primer trabajo deja de esperar y recupera la CPU.
Mientras haya otro trabajo por ejecutar, la CPU nunca estará inactiva. Para que pueda haber varios
programas listos para ejecutarse el sistema debe conservarlos todos en la memoria al mismo tiempo,
cuando esto se consigue, se necesita alguna forma de administración de la memoria. Cuando existen al
mismo tiempo varios programas listos para ejecutare, el sistema debe elegir uno de ellos, decisión tomada
por el planificador de la CPU
UNIDAD Nº 2. ADMINISTRACIÓN DE PROCESOS. PLANIFICACIÓN

2.1. Procesos. Conceptos. Modelos de procesos. Estados de un Proceso. Estados básicos. Modelos
de Procesos de Cinco Estados.
2.2. Implementación de Procesos. Control de Procesos. Operaciones sobre Procesos. Crear.
Eliminar. Procesos Usuarios. Procesos de Sistema
2.3. Procesos e Hilos. Multihilos. Funciones de los Hilos. Estados de los hilos.
2.4. Planificación Uniprocesador. Tipos de Planificaciones. Planificación de Procesos. Planificador
de CPU. Algoritmos de Planificación: Apropiativa – No Apropiativa. Evaluación de Algoritmos.
Medidas para Estudiar el Comportamiento de los Algoritmos de Planificación.

2.1.Procesos.Conceptos
Un proceso es un programa en ejecución. Sin embargo, es importante resaltar que un proceso es algo más
que el código de un programa (que en ocasiones se denomina sección de texto). Además del código, un
proceso incluye también la actividad actual, que queda representada por el valor del contador de programa
y por los contenidos de los registros del procesador. Generalmente, un proceso incluye también la pila del
proceso, que contiene datos temporales (como los parámetros de las funciones, las direcciones de retorno y
las variables locales), y una sección de datos, que contiene las variables globales. El proceso puede incluir,
asimismo, un cúmulo de memoria, que es la memoria que se asigna dinámicamente al proceso en tiempo de
ejecución. En la Figura 3.1 se muestra la estructura de un proceso en memoria.

Insistamos en que un programa, por sí mismo, no es un proceso; un programa es una entidad pasiva, un
archivo que contiene una lista de instrucciones almacenadas en disco (a menudo denominado archivo
ejecutable), mientras que un proceso es una entidad activa, con un contador de programa que especifica la
siguiente instrucción que hay que ejecutar y un conjunto de recursos asociados. Un programa se convierte
en un proceso cuando se carga en memoria un archivo ejecutable. Dos técnicas habituales para cargar
archivos ejecutables son: hacer doble clic sobre un icono que represente el archivo ejecutable e introducir el
nombre del archivo ejecutable en la línea de comandos (como por ejemplo, prog . exe o a. out.)

Aunque puede haber dos procesos asociados con el mismo programa, esos procesos se consideran dos
secuencias de ejecución separadas. Por ejemplo, varios usuarios pueden estar ejecutando copias diferentes
del programa de correo, o el mismo usuario puede invocar muchas copias del explorador web. Cada una de
estas copias es un proceso distinto y, aunque las secciones de texto sean equivalentes, las secciones de
datos, del cúmulo (heap) de memoria y de la pila variarán de unos procesos a otros. También es habitual que
un proceso cree muchos otros procesos a medida que se ejecuta. En la Sección 3.4 se explican estas
cuestiones.

En un sistema multiprogramado o de tiempo compartido, un proceso es la imagen en memoria de un


programa, junto con la información relacionada con el estado de su ejecución. Un programa es una entidad
pasiva, una lista de instrucciones; un proceso es una entidad activa, que –empleando al programa– define la
actuación que tendrá el sistema.

En contraposición con proceso, en un sistema por lotes se habla de tareas. Una tarea requiere mucha menos
estructura, típicamente basta con guardar la información relacionada con la contabilidad de los recursos
empleados. Una tarea no es interrumpida en el transcurso de su ejecución. Ahora bien, esta distinción no es
completamente objetiva y se pueden encontrar muchos textos que emplean indistintamente una u otra
nomenclatura. Si bien el sistema brinda la ilusión de que muchos procesos se están ejecutando al mismo
tiempo, la mayor parte de ellos típicamente está esperando para continuar su ejecución en un momento
determinado sólo puede estar ejecutando sus instrucciones un número de procesos igual o menor al
número de procesadores que tenga el sistema.

2.1.Modelo de procesos.
En este modelo, todo el software ejecutable en la computadora, que algunas veces incluye al sistema
operativo, se organiza en varios procesos secuenciales (procesos, para abreviar). Un proceso no es más que
una instancia de un programa en ejecución, incluyendo los valores actuales del contador de programa, los
registros y las variables. En concepto, cada proceso tiene su propia CPU virtual; en la realidad, la CPU real
conmuta de un proceso a otro, pero para entender el sis- tema es mucho más fácil pensar en una colección
de procesos que se ejecutan en (pseudo) paralelo, en vez de tratar de llevar la cuenta de cómo la CPU
conmuta de programa en programa. Esta conmutación rápida de un proceso a otro se conoce como
multiprogramación, como vimos en el capítulo I.

La figura 2-I(a) muestra una computadora multiprogramando cuatro programas en memoria; la figura 2-1 (b)
lista cuatro procesos, cada uno con su propio flujo de control (es decir, su propio contador de programa
lógico) y cada uno ejecutándose en forma independiente. Desde luego que sólo hay un contador de
programa fisico, por Io que cuando se ejecuta cada proceso, se carga su contador de programa lógico en el
contador de programa real. Cuando termina (por el tiempo que tenga asignado), el contador de programa
fisico se guarda en el contador de programa lógico alma- cenado, del proceso en memoria. En la figura 2-1
(c) podemos ver que durante un intervalo suficientemente largo todos los procesos han progresado, pero en
cualquier momento dado sólo hay un proceso en ejecución.

La información que debe manipular el sistema operativo relativa a cada uno de los procesos actuales se
suele almacenar en una estructura llamada bloque de control de proceso (PCB - Process Control Block). El
PCB incluye campos como:

 Estado del proceso: El estado actual del proceso.


 Contador de programa: Cuál es la siguiente instrucción a ser ejecutada por el proceso.
 Registros del CPU: La información específica del estado del CPU mientras el proceso está en
ejecución (debe ser respaldada y restaurada cuando se registra un cambio de estado).
 Información de planificación (scheduling): La prioridad del proceso, la cola en que está agendado,
y demás información que puede ayudar al sistema operativo a planificar los procesos; se
profundizará el tema en el capítulo 5.
 Información de administración de memoria: La información de mapeo de memoria (páginas o
segmentos, dependiendo del sistema operativo), incluyendo la pila (stack) de llamadas. Se abordará
el tema en el capítulo 6.
 Información de contabilidad: Información de la utilización de recursos que ha tenido este proceso.
Puede incluir el tiempo total empleado y otros (de usuario, cuando el procesador va avanzando
sobre las instrucciones del programa propiamente, de sistema cuando el sistema operativo está
atendiendo las solicitudes del proceso), uso acumulado de memoria y dispositivos, etc.
 Estado de E/S: Listado de dispositivos y archivos asignados que el proceso tiene abiertos en un
momento dado.

2.1.Estados de proceso
Un proceso, a lo largo de su vida, alterna entre diferentes estados de ejecución. Estos son:

Nuevo: Se solicitó al sistema operativo la creación de un proceso, y sus recursos y estructuras están siendo
creadas.
Listo: Está listo para iniciar o continuar su ejecución, pero el sistema no le ha asignado un procesador.
En ejecución: El proceso está siendo ejecutado en este momento. Sus instrucciones están siendo procesadas
en algún procesador.
Bloqueado: En espera de algún evento para poder continuar su ejecución (aun si hubiera un procesador
disponible, no podría avanzar).
Terminado: El proceso terminó de ejecutarse; sus estructuras están a la espera de ser limpiadas por el
sistema operativo

2.1.Estados básicos.
MODELOS DE PROCESO DE DOS ESTADOS:

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í, un proceso puede estar en uno de dos estados: Ejecución o
No ejecución. Cuando el Sistema Operativo crea un nuevo proceso, este entra en el Sistema en estado de No
ejecución. El proceso existe, es conocido por el Sistema Operativo y está esperando la oportunidad de
ejecutarse. De cuando en cuando, el proceso que está ejecutándose será interrumpido y el programa
distribuidor (Planificador) 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 otros procesos pasará
al estado de Ejecución.

Cada proceso debe representarse de forma que el Sistema Operativo pueda seguirle la pista, es decir, que
debe haber información relativa a cada proceso, incluyendo su estado actual y su posición en la memoria.
Aquellos procesos que no estén ejecutándose tienen que guardarse en algún tipo de cola, para que esperen
su turno de ejecución.

Expedir

No
Entrar Ejecución Salir
ejecución

Pausar

Diagrama de transmisión de estados

COLA
Entrar Expedir
Procesador Salir
Pausa
Modelo de 3 estados

Aunque cada proceso es una entidad independiente, con su propio contador de programa y estado interno,
a menudo los procesos necesitan interactuar con otros. Un proceso puede generar cierta salida que otro
proceso utiliza como entrada.

Cuando un proceso se bloquea, lo hace debido a que por lógica no puede continuar, comúnmente porque
está esperando una entrada que todavía no está disponible. También es posible que un proceso, que esté
listo en concepto y pueda ejecutarse, se detenga debido a que el sistema operativo ha decidido asignar la
CPU a otro proceso por cierto tiempo. Estas dos condiciones son completamente distintas. En el primer caso,
la suspensión está inherente en el problema (no se puede procesar la línea de comandos del usuario sino
hasta que éste la haya escrito mediante el teclado). En el segundo caso, es un tecnicismo del sistema (no hay
suficientes CPUs como para otorgar a cada proceso su propio procesador privado). En la figura 2-2 podemos
ver un diagrama de estados que muestra los tres estados en los que se puede encontrar un proceso:

 En ejecución (en realidad está usando la CPU en ese instante).


 Listo (ejecutable; se detuvo temporalmente para dejar que se ejecute otro proceso).
 Bloqueado (no puede ejecutarse sino hasta que ocurra cierto evento externo).

En sentido lógico, los primeros dos estados son similares. En ambos casos el proceso está
deseoso de ejecutarse; sólo en el segundo no hay temporalmente una CPU para él. El tercer estado es
distinto de los primeros dos en cuanto a que el proceso no se puede ejecutar, incluso aunque la CPU no
tenga nada que hacer.

2.1.Modelos de Procesos de Cinco Estados.


Un proceso, a lo largo de su vida, alterna entre diferentes estados de ejecución. Estos son:

Nuevo: Se solicitó al sistema operativo la creación de un proceso, y sus recursos y estructuras están siendo
creadas.
Listo: Está listo para iniciar o continuar su ejecución, pero el sistema no le ha asignado un procesador.
En ejecución: El proceso está siendo ejecutado en este momento. Sus instrucciones están siendo procesadas
en algún procesador.
Bloqueado: En espera de algún evento para poder continuar su ejecución (aun si hubiera un procesador
disponible, no podría avanzar).
Terminado: El proceso terminó de ejecutarse; sus estructuras están a la espera de ser limpiadas por el
sistema operativo

Nulo a Nuevo: Se crea un nuevo proceso para ejecutar un programa. Este suceso se produce por algunas de
las razones enumeradas en la tabla 3.1.

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 limite 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.

Ejecución a Terminado: El proceso que se está ejecutando es finalizado por el sistema operativo si indica
que terminó o si se abandona.

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. Supóngase que un proceso A está
ejecutándose con un cierto nivel de prioridad y que el proceso B, con un nivel de prioridad mayor, está
bloqueado. Si el sistema operativo se entera de que el suceso que B estaba esperando se ha producido,
pasando así B al estado Listo, entonces puede interrumpir al proceso A y expedir a B. Por último, 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.

Bloqueado a listo : Ocurre el suceso que esperaba el proceso


Diagrama de colas:

Cola de listos
Admitir Expedir Salir
Procesador

Cola de bloqueados
Esperar suceso 1
Ocurre
suceso 1

Esperar suceso N
Ocurre
suceso N
Cola bloqueados

MODELOS CON ESTADOS SUSPENDIDOS:

Una de las razones para implementar el estado de Bloqueado era poder que los procesos se puedan
mantener algún suceso, sin embargo puede ocurrir que todos los procesos en memoria estén esperando en
el estado bloqueado y que no haya más memoria disponible para nuevos procesos. Podría conseguirse más
memoria, pero esto significaría procesos mayores, no más procesos (Cantidad).

Entonces otra solución es el Intercambio, que implica mover una parte del proceso o todo el proceso de la
memoria principal al disco. Cuando ninguno de los procesos en memoria principal está en estado Listo, El
Sistema Operativo pasa un proceso que este bloqueado, a una cola en estado suspendido, transfiriéndolo al
disco. Entonces el espacio liberado, puede utilizarse para aceptar un nuevo proceso o traer otro proceso
suspendido anteriormente.

El problema que se presenta ahora es que puede sr que si se decido traer a memoria un proceso que está en
el estado de suspendido, el mismo todavía se encuentre bloqueado. Solo convendrá traerlo cuando ya está
listo para ejecutar, esto implica que ya aconteció el suceso que estaba esperando cuando se bloqueo. Para
tener esta diferenciación entre procesos suspendidos ya sean como listo o bloqueados, se utilizan los
siguientes estados:

 Listo: El proceso está en memoria principal y listo para su ejecución.


 Bloqueado: el proceso está en memoria principal esperando un suceso.
 Bloqueado y suspendido: El proceso está en memoria secundaria esperando un suceso.
 Listo y suspendido: El proceso está en memoria secundaria pero está disponible para su ejecución
tan pronto como se cargue en memoria principal.
 Nuevo.
 Terminado.
 Ejecución.

Diagrama de transición de 6 estados:

Expedir
Admitir Salir
Listo Ejecución Terminado
Fin plazo
Nuevo

Diagrama de transición de 7 estados:

Nuevo Suspender

Admitir
Admitir
Expedir
Salir
Activar
Listo/Suspendido Listo Ejecución Terminado
Fin plazo

Suspender

Ocurre suceso Ocurre suceso


Activar
Espera suceso

Bloqueado/ Bloqueado

Suspender
Las líneas punteadas indican transiciones posibles pero no necesarias.

Transiciones:

 Bloqueado  Bloqueado y Suspendido: Si no hay procesos listos, entonces al menos un proceso


bloqueado se expulsa para dar cabida a otro proceso que no esté bloqueado. Inclusive puede
ocurrir cuando haya procesos Listos disponibles, cuando el Sistema Operativo determina que el
proceso que esta e ejecución o un proceso listo que sería conveniente expedir, requieren más
memoria.
 Bloqueado y Suspendido  Listo y suspendido: Ocurre cuando se produce el suceso que estaba
esperando. Esto requiere que este accesible para el Sistema Operativo la información relativa a los
procesos suspendidos.
 Listo y suspendido  Listo: Cuando no haya procesos listos en memoria principal el S.O tendrá que
traer uno para continuar la ejecución. Además puede suceder que in proceso en estado listo y
suspendido tenga una prioridad mayor a que la de un proceso listo.
 Listo  Listo y Suspendido: Por lo general 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.
Pero pude ser necesario suspender a un proceso listo. Esta es la única forma de liberar un bloque
grande de memoria principal, o también el Sistema Operativo puede escoger suspender el proceso
listo de baja prioridad en lugar de un bloqueado de alta prioridad que pronto estará listo.
 Nuevo  Listo y Suspendido, Nuevo  Listo: Cuando se crea un nuevo proceso se le puede añadir
a la cola de listos o ala de listos y suspendidos. En ambos casos el Sistema Operativo necesita
construir unas tablas para poder administrar el proceso y asignarle un espacio de direcciones.
Podría ser preferible que el sistema operativo llevara a cabo esas labores en un primer momento,
de modo que se mantuviera una reserva grande de procesos que no estuvieran bloqueados. Con
esta estrategia sería frecuente el caso que hubiese poco espacio en la memoria principal para un
nuevo proceso. De ahí el uso de la transición  Listo y Suspendidos.
 Bloqueado y suspendido  Bloqueado: Puede suceder que un proceso termina, liberando
memoria principal. Hay u proceso en la cola de bloqueados y suspendidos que tiene una prioridad
mayor que la de cualquier proceso de la cola de listos y suspendidos, así que el Sistema Operativo
tiene razones para suponer que pronto ocurrirá el suceso por el que el proceso está bloqueado
entonces parece razonable traerlo a memoria principal antes que un proceso listo.
 Ejecución Listo y suspendida: Generalmente un proceso en ejecución pasa al estado de listo
cuando expira su tiempo asignado. Sin embargo, si está expulsando al proceso porque hay un
proceso de prioridad mayor en la lista de bloqueados y suspendidos que se acaba de desbloquear,
entonces el Sistema Operativo podría pasar el proceso en ejecución directamente a la cola de listos
y suspendidos liberando espacio en memoria principal.
 Varios  Terminado: Por lo general 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, 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.

2.2.Implementación de Procesos.
Para implementar el modelo de procesos, el sistema operativo mantiene una tabla (un arreglo de
estructuras) llamada tabla de procesos, con sólo una entrada por cada proceso (algunos autores llaman a
estas entradas bloques de control de procesos). Esta entrada contiene información importante acerca del
estado del proceso, incluyendo su contador de programa, apuntador de pila, asignación de memoria, estado
de sus archivos abiertos, información de contabilidad y planificación, y todo lo demás que debe guardarse
acerca del proceso cuando éste cambia del estado en ejecución a listo o bloqueado, de manera que se
pueda reiniciar posteriormente como si nunca se hubiera detenido.

Ahora que hemos analizado la tabla de procesos, es posible explicar un poco más acerca de cómo la ilusión
de varios procesos secuenciales se mantiene en una (o en varias) CPU. Con cada clase de E/S hay una
ubicación asociada (por lo general, en una ubicación cerca de la parte final de la memoria), a la cual se le
llama vector de interrupción. Esta ubicación contiene la dirección del procedimiento del servicio de
interrupciones. Suponga que el proceso de usuario 3 está en ejecución cuando ocurre una interrupción de
disco. El contador de programa, la palabra de estado del programa y algunas veces uno o más registros del
proceso del usuario 3 se meten en la pila (actual) mediante el hardware de interrupción. Después, la
computadora salta a la dirección especificada en el vector de interrupción. Esto es todo lo que hace el
hardware. De aquí en adelante, depende del software y en especial del procedimiento del servicio de
interrupciones. Todas las interrupciones empiezan por guardar los registros, a menudo en la entrada de la
tabla de procesos para el proceso actual. Después, se quita la información que la interrupción metió en la
pila y el apuntador de pila se establece para que apunte a una pila temporal utilizada por el manejador de
procesos. Las acciones como guardar los registros y establecer el apuntador de pila no se pueden expresar ni
siquiera en lenguajes de alto nivel tales como C, por lo que se realizan mediante una pequeña rutina en
lenguaje ensamblador, que por lo general es la misma para todas las interrupciones, ya que el trabajo de
guardar los registros es idéntico, sin importar cuál sea la causa de la interrupción.

Cuando termina esta rutina, llama a un procedimiento en C para realizar el resto del trabajo para este tipo
de interrupción específico (suponemos que el sistema operativo está escrito en C, la elección usual para
todos los sistemas operativos reales). Cuando ha terminado su trabajo y tal vez ocasionando que algún otro
proceso esté entonces listo, el planificador es llamado para ver qué proceso se debe ejecutar a continuación.
Después de eso, el control se pasa de vuelta al código en lenguaje ensamblador para cargar los registros y el
mapa de memoria para el proceso que entonces es el actual y se empieza a ejecutar. En la figura 2-5 se
sintetizan el manejo de interrupciones y la planificación de proceso. Vale la pena recalcar que los detalles
varían dependiendo del sistema.
Cuando el proceso termina, el sistema operativo muestra un carácter indicador y espera un nuevo comando.
Cuando recibe el comando, carga un nuevo programa en memoria, sobrescribiendo el anterior.

2.2.Control de procesos.
Modos de ejecución

Antes de continuar la discusión sobre la forma en que el sistema operativo gestiona los procesos, hace falta
distinguir entre el modo de ejecución del procesador que normalmente se asocia con el sistema operativo y
el modo que normalmente se asocia con los programas de usuario. La mayoría de los procesadores dan
soporte para dos modos de ejecución por lo menos. Ciertas instrucciones pueden ejecutarse solo en modo
privilegiado. Entre éstas están la lectura o modificación de registros de control (como la palabra de estado
del programa), instrucciones primitivas de E/S e instrucciones relativas a la gestión de memoria. Además, se
puede acceder a ciertas regiones de memoria solo en el modo más privilegiado. El modo menos privilegiado
a menudo se conoce como modo de usuario, ya que los programas de usuario ejecutan normalmente en ese
modo. Al modo más privilegiado normalmente se le conoce como modo del sistema, modo de control o,
modo del núcleo.

La razón por la que se usan dos modos debe quedar clara. Es necesario proteger al sistema operativo y a las
tablas importantes del mismo, tales como los bloques de control de procesos, de las injerencias de los
programas de usuario. En el modo del núcleo, el software tiene control completo del procesador y de todas
sus instrucciones, registros y memoria. Este nivel de control no es necesario y, por seguridad, tampoco
conveniente para los programas de usuario.

Surgen dos preguntas: ¿Cómo conoce el procesador en qué modo va a ejecutar? ¿Cómo se cambia de
modo? Para la primera pregunta, normalmente hay un bit en la PSW (Program Status Word) que indica el
modo de ejecución.

Cuando el usuario hace una llamada a un servicio del sistema o cuando una interrupción transfiere el control
a una rutina del sistema, la rutina ejecuta CHM para entrar en un modo más privilegiado y la ejecuta de
nuevo para pasar a un modo menos privilegiado, antes de devolver el control al proceso del usuario.
2.2.Operaciones sobre Procesos. Crear. Eliminar.
Una vez que el sistema operativo decide crear un nuevo proceso, éste puede proceder como sigue:

1. Asignar un único identificador al nuevo proceso. En ese momento se añade una nueva entrada a la tabla
principal de procesos, que contiene una entrada por proceso.

2. Asignar espacio para el proceso. Esto incluye todos los elementos de la imagen del proceso. Así pues, el
sistema operativo debe saber cuánto espacio se necesitará para el espacio privado de direcciones del
usuario (programas y datos) y para la pila del usuario. Estos valores se pueden asignar por omisión en
función del tipo de proceso o bien se puede asignar a partir de la solicitud del usuario cuando se crea el
trabajo. Si un proceso es generado por otro, el proceso padre puede pasarle al sistema operativo los valores
necesarios como parte de la solicitud de creación del proceso. Si algún espacio de direcciones existente se va
a compartir con este nuevo proceso, entonces se deben establecer los enlaces adecuados. Por último, se
debe asignar espacio para el bloque de control del proceso.

3. Debe inicializarse el bloque de control del proceso. La parte de identificación del proceso contiene el ID
de este proceso junto a otros ID apropiados, tales como el del proceso padre. La parte de información del
estado del procesador se inicializa con la mayor parte de las entradas a cero, excepto para el contador de
programa (que se prepara con el punto de entrada del programa) y los punteros a las pilas del sistema (que
establecen los límites de la pila del proceso). La parte de información de control del procesador se inicializa a
partir de los valores estándares por omisión y los atributos que se han solicitado para el proceso.

4. Se deben establecer los enlaces apropiados. Por ejemplo, si el sistema operativo mantiene cada cola de
planificación como una lista enlazada, entonces el proceso nuevo se debe poner en la cola de Listos o de
Listos y suspendidos.

5. Puede haber otras estructuras de datos que crear o ampliar.


En cualquier sistema informático, debe haber alguna forma de que un proceso pueda indicar que ha
terminado. Un trabajo por lotes debe incluir una instrucción de detención (Halt) o una llamada explicita a un
servicio del sistema operativo para la terminación. En el primer caso la instrucción Halt generará una
interrupción para avisar al sistema operativo que el sistema ha concluido. En una aplicación interactiva es la
acción del usuario la que indica cuando termina el proceso. Por ejemplo, en un sistema de tiempo
compartido, el proceso de un usuario particular terminará cuando éste se desconecte del sistema o apague
el terminal. En un computador personal o una estación de trabajo, el usuario puede abandonar una
aplicación. Todas estas acciones provocan al final una petición de servicio de sistema operativo para
terminar con el proceso demandante.

Se define proceso Suspendido como aquel que tiene las características siguientes:

1. Un proceso que está suspendido no está disponible de inmediato para ejecución.

2. El proceso puede estar esperando o no un suceso. Si lo está, la condición de Bloqueado es


independiente de La condición de Suspendido y el acontecimiento del suceso bloqueante no lo
habilita para la ejecución.
3. El proceso fue situado en el estado suspendido por un agente (por sí mismo, por el proceso
padre o por el sistema operativo) con el fin de impedir su ejecución.

4. El proceso no puede apartarse de este estado hasta que el agente lo ordene explícitamente.

2.3.Procesos e hilos
Como se vio, la cantidad de información que el sistema operativo debe manejar acerca de cada proceso es
bastante significativa. Si cada vez que el planificador elige qué proceso pasar de Listo a En ejecución debe
considerar buena parte de dicha información, la simple transferencia de todo esto entre la memoria y el
procesador podría llevar a un desperdicio burocrático de recursos. Una respuesta a esta problemática fue la
de utilizar los hilos de ejecución, a veces conocidos como procesos ligeros (LWP, Lightweight processes).

Cuando se consideran procesos basados en un modelo de hilos, se puede proyectar en sentido inverso que
todo proceso es como un sólo hilo de ejecución. Un sistema operativo que no ofreciera soporte expreso a
los hilos los planificaría exactamente del mismo modo. Pero visto desde la perspectiva del proceso hay una
gran diferencia: si bien el sistema operativo se encarga de que cada proceso tenga una visión de virtual
exclusividad sobre la computadora, todos los hilos de un proceso comparten un sólo espacio de direcciona-
miento en memoria y los archivos y dispositivos abiertos. Cada uno de los hilos se ejecuta de forma
(aparentemente) secuencial y maneja su propio contador de programa y pila (y algunas estructuras
adicionales, aunque mucho más ligeras que el PCB).

2.3.Multihilos. Funciones de los Hilos. Estados de los hilos.


Ahora que hemos visto por qué podrían ser útiles los hilos y cómo se pueden utilizar, vamos a investigar la
idea un poco más de cerca. El modelo de procesos se basa en dos conceptos independientes: agrupamiento
de recursos y ejecución. Algunas veces es útil separarlos; aquí es donde entran los hilos. Primero
analizaremos el modelo clásico de hilos; después el modelo de hilos de Linux, que desaparece la línea entre
los procesos y los hilos. Una manera de ver a un proceso es como si fuera una forma de agrupar recursos
relacionados. Un proceso tiene un espacio de direcciones que contiene texto y datos del programa, así como
otros recursos. Estos pueden incluir archivos abiertos, procesos hijos: alarmas pendientes, manejadores de
señales, información contable y mucho más. Al reunirlos en forma de un proceso, pueden administrarse con
más facilidad. El otro concepto que tiene un proceso es un hilo de ejecución, al que por lo general sólo se le
llama hilo. El hilo tiene un contador de programa que lleva el registro de cuál instrucción se va a ejecutar a
continuación. Tiene registros que contienen sus variables de trabajo actuales. Tiene una Pila, que contiene el
historial de ejecución, con un conjunto de valores para cada procedimiento al que se haya llamado, pero del
cual no se haya devuelto todavía. Aunque un hilo se debe ejecutar en cierto proceso, el hilo y su proceso son
conceptos distintos y pueden tratarse por separado. Los procesos se utilizan para agrupar los recursos; son
las entidades planificadas para su ejecución en la CPU.

Lo que agregan los hilos al modelo de procesos es permitir que se lleven a cabo varias ejecuciones en el
mismo entorno del proceso, que son en gran parte independientes unas de las otras. Tener varios procesos
ejecutándose en paralelo en un proceso es algo similar a tener varios procesos ejecutándose en paralelo en
una computadora- En el primer caso, los hilos comparten un espacio de direcciones y otros recursos; en el
segundo, los procesos comparten la memoria fisica, los discos, las impresoras y otros recursos. Como los
hilos tienen algunas de las propiedades de los procesos, algunas veces se les llama procesos ligeros. El
término multihilamiento también se utiliza para describir la situación de permitir varios hilos en el mismo
proceso. Como vimos en el capitulo 1, algunas CPUs tienen soporte directo en el hardware para el
multihilamiento y permiten que las conmutaciones de hilos ocurran en una escala de tiempo en
nanosegundos- En la figura 2-Il(a) podemos ver tres procesos tradicionales. Cada proceso tiene su propio
espacio de direcciones y un solo hilo de control- Por el contrario, en la figura 2-11(b) vemos un solo proceso
con tres hilos de control. Aunque en ambos casos tenemos tres hilos, en la figura 2-11(a) cada uno de ellos
opera en un espacio de direcciones distinto, mientras que en la figura 2-11 (b) los tres comparten el mismo
espacio de direcciones.

Cuando se ejecuta un proceso con multihilamiento en un sistema con una CPU, los hilos toman tumos para
ejecutarse- En la figura 2-1 vimos cómo funciona la multiprogramación de procesos. Al conmutar de un
proceso a otro entre varios procesos, el sistema da la apariencia de que hay procesos secuenciales
separados ejecutándose en paralelo. El multihilamiento funciona de la misma manera. La CPU conmuta
rápidamente entre un hilo y otro, dando la ilusión de que los hilos se ejecutan en paralelo, aunque en una
CPU más lenta que la verdadera. Con tres hilos limitados a cálculos en un proceso, los hilos parecerían
ejecutarse en paralelo, cada uno en una CPU con un tercio de la velocidad de la CPU verdadera-

Los distintos hilos en un proceso no son tan independientes como los procesos. Todos los hilos tienen el
mismo espacio de direcciones, lo cual significa que también comparten las mismas variables globales. Como
cada hilo puede acceder a cada dirección de memoria dentro del espacio de direcciones del proceso, un hilo
puede leer, escribir o incluso borrar la pila de otro hilo. No hay protección entre los hilos debido a que (1) es
Imposible y (2) no debe ser necesario. A diferencia de tener procesos diferentes, que pueden ser de distintos
usuarios y hostiles entre sí, un proceso siempre es propiedad de un solo usuario, quien se supone que ha
creado varios hilos para que puedan cooperar, no pelear. Además de compartir un espacio de direcciones,
todos los hilos pueden compartir el mismo conjunto de archivos abiertos, procesos hijos, alarmas y señales,
etc., como se muestra en la figura 2-12. Por ende, la organización de la figura 2-11(a) se utilizaría cuando los
tres procesos no estén esencialmente relacionados, mientras que la figura 2-11(b) seria apropiada cuando
los tres hilos en realidad formen parte del mismo trabajo y estén cooperando en forma activa y estrecha
entre sí.
Los elementos en la primera columna son propiedades de un proceso, no de un hilo. Por ejemplo, si un hilo
abre un archivo, ese archivo está visible para los demás hilos en el proceso y pueden leer y escribir datos en
él. Esto es lógico, ya que el proceso es la unidad de administración de recursos, no el hilo. Si cada hilo tuviera
su propio espacio de direcciones, archivos abiertos, alarmas pendientes, etcétera, sería un proceso
separado. Lo que estamos tratando de lograr con el concepto de los hilos es la habilidad de que varios hilos
de ejecución compartan un conjunto de recursos, de manera que puedan trabajar en conjunto para realizar
cierta tarea. Al igual que un proceso tradicional (es decir, un proceso con sólo un hilo), un hilo puede estar
en uno de varios estados: en ejecución, bloqueado, listo o terminado. Un hilo en ejecución tiene la CPU en
un momento dado y está activo. Un hilo bloqueado está esperando a que cierto evento lo desbloquee. Por
ejemplo, cuando un hilo realiza una llamada al sistema para leer datos del teclado, se bloquea hasta que se
escribe la entrada. Un hilo puede bloquearse en espera de que ocurra algún evento externo o que algún otro
hilo lo desbloquee. Un hilo listo se programa para ejecutarse y lo hará tan pronto como sea su tumo. Las
transiciones entre los estados de los hilos son las mismas que las transiciones entre los estados de los
procesos y se ilustran en la figura 2-2. Es importante tener en cuenta que cada hilo tiene su propia Pila,
como la figura 2-13 lo ilustra. La pila de cada hilo contiene un conjunto de valores para cada procedimiento
llamado, pero del que todavía no se ha regresado. Este conjunto de valores contiene las variables locales del
procedimiento y la dirección de retomo que se debe utilizar cuando haya terminado la llamada al
procedimiento. Por ejemplo, si el procedimiento X llama al procedimiento Y y Y llama al procedimiento Z,
entonces mientras se ejecuta Z, los conjuntos de valores para X, Y y Z estarán todos en la pila. Por lo general,
cada hilo llama a distintos procedimientos y por ende, tiene un historial de ejecución diferente. Esta es la
razón por la cual cada hilo necesita su propia pila.

Cuando hay multihilamiento, por lo general los procesos empiezan con un solo hilo presente. Este hilo tiene
la habilidad de crear hilos mediante la llamada a un procedimiento de biblioteca, como thread créate.
Comúnmente, un parámetro para thread create especifica el nombre de un procedimiento para que se
ejecute el nuevo hilo. No es necesario (ni posible) especificar nada acerca del espacio de direcciones del
nuevo hilo, ya que se ejecuta de manera automática en el espacio de direcciones del hilo creador. Algunas
veces los hilos son jerárquicos: con una relación padre-hijo, pero a menudo no existe dicha relación y todos
los hilos son iguales. Con o sin una relación jerárquica, el hilo creador generalmente recibe un identificador
de hilo que da nombre al nuevo hilo. Cuando un hilo termina su trabajo, puede salir mediante la llamada a
un procedimiento de biblioteca, como thread_exit_ Después desaparece y ya no puede planificarse para
volver a ejecutarse. En algunos sistemas con hilos, un hilo puede esperar a que un hilo (especifico) termine
mediante la llamada a un procedimiento, por ejemplo thread_join. Este procedimiento bloquea al hilo
llamador hasta que un hilo (especifico) haya terminado- En este aspecto, la creación y terminación de hilos
es algo muy parecido a la creación y terminación de procesos, conteniendo casi las misma opciones.

Otra llamada de hilos común es thread_yeld, que permite a un hilo entregar voluntariamente la CPU para
dejar que otro hilo se ejecute Dicha llamada es importante, ya que no hay una interrupción de reloj para
implementar en realidad la multiprogramación, como en los procesos. Por ende, es importante que los hilos
sean amables y entreguen de manera voluntaria la CPU de vez en cuando, para dar a otros hilos la
oportunidad de ejecutarse. Otras llamadas permiten a un hilo esperar a que otro termine cierto trabajo, y
que otro anuncie que ya terminó cierto trabajo, y así sucesivamente.

2.4.Planificación Uniprocesador.
En un sistema de un único procesador, sólo puede ejecutarse un proceso cada vez; cualquier otro proceso
tendrá que esperar hasta que la CPU quede libre y pueda volver a planificarse. El objetivo de la
multiprogramación es tener continuamente varios procesos en ejecución, con el fin de maximizar el uso de
la CPU. La idea es bastante simple: un proceso se ejecuta hasta que tenga que esperar, normalmente porque
es necesario completar alguna solicitud de E/S- En un sistema informático simple, la CPU permanece
entonces inactiva y todo el tiempo de espera se desperdicia; no se realiza ningún trabajo útil. Con la
multiprogramación, se intenta usar ese tiempo de forma productiva. En este caso, se mantienen varios
procesos en memoria a la vez. Cuando un proceso tiene que esperar, el sistema operativo retira el uso de la
CPU a ese proceso y se lo cede a otro proceso

Este patrón se repite continuamente y cada vez que un proceso tiene que esperar, Otro proceso puede
hacer uso de la CPU.

Este tipo de planificación es una función fundamental del sistema operativo; casi todos los recursos de la
computadora se planifican antes de usarlos. Por supuesto, la CPU es uno de los principales recursos de la
computadora, así que su correcta planificación resulta crucial en el diseño del sistema operativo.

2.4.Tipos de planificadores.
En muchos Sistemas, esta actividad de planificación se divide en 3 niveles o funciones independientes:
Planificación a largo, mediano y corto plazo.

 Planificación a LARGO PLAZO:

El planificador a largo plazo determina que programas se admiten en el sistema para su procesamiento. De
esta forma se controla el grado de multiprogramación. Una vez admitido un trabajo o programa de usuario
se convierte en un proceso y se añade a la cola del planificador a corto plazo. En algunos sistemas, un
proceso de reciente creación comienza en la zona de intercambio, en cuyo caso se añaden a la cola del
planificador a medio plazo.

En un Sistema por lotes, o en la parte de lotes de un Sistema Operativo de propósito general, los nuevos
trabajos enviados se mandan al disco y se mantienen en una cola de lotes. El planificador a largo plazo
creara procesos desde la cola siempre que pueda. En este caso hay que tomar dos decisiones. La primera, el
planificador debe decidir cuando el Sistema Operativo puede tomar uno o más procesos adicionales. La
segunda, el planificador debe decidir que trabajo o trabajos se aceptan y son convertidos en procesos.
Para los programas interactivos en un Sistema de tiempo compartido, la petición de la creación de un
proceso, puede estar generada por un usuario intentando conectarse al sistema. Aquí el Sistema Operativo
aceptará a todos los usuarios autorizados hasta que el Sistema se sature.

 Planificación a MEDIO PLAZO:

Decide cuáles procesos es conveniente bloquear en determinado momento, sea por escasez/saturación de
algún recurso (como la memoria primaria) o porque están realizando alguna solicitud que no puede
satisfacerse momentáneamente; se encarga de tomar decisiones respecto a los procesos conforme entran y
salen del estado de bloqueado (esto es, típicamente, están a la espera de algún evento externo o de la
finalización de transferencia de datos con algún dispositivo).

En algunos textos, al planificador a mediano plazo se le llama agendador (scheduler).

Planificación a CORTO PLAZO:

El planificador a corto plazo, conocido como activador, se ejecuta mucho más frecuentemente y toma las
decisiones sobre qué proceso ejecutar.

Se invoca siempre que ocurre un evento que pueda conllevar el bloqueo del proceso actual y que puede
proporcionar la oportunidad de expulsar al proceso actualmente en ejecución en favor de otro. Ejemplos de
estos eventos son:

 Interrupciones de reloj.
 Llamadas al sistema.
 Interrupciones de Entrada y Salida.
 Señales (semáforos).

Podrían ubicarse a estos tres planificadores en las siguientes transiciones entre estados:

 El planificador a largo plazo se encarga de admitir un nuevo proceso: La transición de Nuevo a Listo.
 El planificador a mediano plazo maneja la activación y bloqueo de un proceso relacionado con
eventos — Esto es, las transiciones entre En ejecución y Bloqueado, y entre Bloqueado y Listo.
 El planificador a corto plazo decide entre los procesos que están listos para ejecutarse y determina
a cuál de ellos activar, y detiene a aquellos que exceden su tiempo de procesador — Implementa
las transiciones entre los estados Listo y En ejecución.

Activador (Dispatcher)

Es el módulo del S.O. que pone a ejecutar un proceso seleccionado por el planificador. Esta función implica:

 Cambio de contexto
 Cambio al modo usuario
 Salto a la posición correcta dentro del programa de usuario para reiniciar dicho
programa.

El despachador debe ser lo más rápido posible ya que se invoca en cada conmutación de proceso. El tiempo
que tarda el despachador en detener un proceso e iniciar la ejecución de otro se conoce como latencia de
despachador. Actúa para poner listo al proceso. Busca el BCP necesario para que comience la ejecución del
proceso seleccionado (Debe ubicar recursos, referencias, saber el espacio de memoria que ocupa, etc

Ciclo de ráfagas de cpu y de e/s


Tipos de proceso

Como ya se ha visto, los procesos típicamente alternan entre ráfagas (periodos, en inglés bursts) en que
realizan principalmente cómputo interno (están limitados por CPU, CPU-Bound) y otras en que la atención
está puesta en transmitir los datos desde o hacia dispositivos externos (están limitados por entrada-
salida,I/0-bound). Dado que cuando un proceso se suspende para realizar entrada-salida deja de estar listo
(y pasa a estar bloqueado), y desaparece de la atención del planificador a corto plazo, en todo momento los
procesos que están en ejecución y listos pueden separarse en:

Procesos largos: Aquellos que por mucho tiempo han estado en listos o en ejecución, esto es, procesos que
estén en una larga ráfaga limitada por CPU.

Procesos cortos: Aquellos que, ya sea que en este momento estén en una ráfaga limitada por entrada-salida
y requieran atención meramente ocasional del procesador, o tienden a estar bloqueados esperando a
eventos (como los procesos interactivos).

Por lo general se busca dar un tratamiento preferente a los procesos cortos, en particular a los interactivos.
Cuando un usuario está interactuando con un proceso, si no tiene una respuesta inmediata a su interacción
con el equipo (sea proporcionar comandos, recibir la respuesta a un teclado o mover el puntero en el GUI)
su percepción será la de una respuesta degradada.

2.4.Planificación de procesos.

El objetivo de la multiprogramación es tener en ejecución varios procesos al mismo tiempo con el fin de
maximizar la utilización de la CPU. El objetivo de los sistemas de tiempo compartido es conmutar la CPU
entre los distintos procesos con tanta frecuencia que los usuarios puedan interactuar con cada programa
mientras éste se ejecuta. Para conseguir estos objetivos, el planificador de procesos selecciona un proceso
disponible (posiblemente de entre un conjunto de varios procesos disponibles) para ejecutar el programa en
la CPU. En los sistemas de un solo procesador, nunca habrá más de un proceso en ejecución: si hay más
procesos, tendrán que esperar hasta que la CPU esté libre y se pueda asignar a otro proceso.

Colas de planificación

A medida que los procesos entran en el sistema, se colocan en una cola de trabajos que contiene todos los
procesos del sistema. Los procesos que residen en la memoria principal y están preparados y en espera de
ejecutarse se mantienen en una lista denominada cola de procesos preparados. Generalmente, esta cola se
almacena en forma de lista enlazada. La cabecera de la cola de procesos preparados contiene punteros al
primer y último bloque de control de procesos (PCB) de la lista. Cada PCB incluye un campo de puntero que
apunta al siguiente PCB de la cola de procesos preparados.
El sistema también incluye otras colas. Cuando Se asigna la CPU a un proceso, éste se ejecuta durante un
rato y finalmente termina, es interrumpido o espera a que se produzca un determinado suceso, como la
terminación de una solicitud de E/S. Suponga que el proceso hace una solicitud de E/S a un dispositivo
compartido, como por ejemplo un disco. Dado que hay muchos procesos en el sistema, el disco puede estar
ocupado con la solicitud de E/S de algún otro proceso. Por tanto, nuestro proceso puede tener que esperar
para poder acceder al disco. La lista de procesos en espera de un determinado dispositivo de E/s se
denomina cola del dispositivo. Cada dispositivo tiene su propia cola (Figura 3.6).

Una representación que habitualmente se emplea para explicar la planificación de procesos es el diagrama
de colas, como el mostrado en la Figura 3.7, donde cada rectángulo representa una cola. Hay dos tipos de
colas: la cola de procesos preparados y un conjunto de colas de dispositivo. Los círculos representan los
recursos que dan servicio a las colas y las flechas indican el flujo de procesos en el sistema.
Cada proceso nuevo se coloca inicialmente en la cola de procesos preparados, donde espera hasta que es
seleccionado para ejecución, es decir, hasta que es despachado. Una vez que se asigna la CPU al proceso y
éste comienza a ejecutarse, se puede producir uno de los sucesos siguientes:

 El proceso podría ejecutar una solicitud de E/S y ser colocado, como consecuencia, en una cola de
E/S.
 El proceso podría crear un nuevo subproceso y esperar a que éste termine.
 El proceso podría ser desalojado de la CPU como resultado de una interrupción y puesto de nuevo
en la cola de procesos preparados.

2.4.Planificador de CPU.
Cuando la CPU queda inactiva, el sistema operativo debe seleccionar uno de los procesos que se encuentran
en la cola de procesos preparados para ejecución. El planificador a corto plazo (o planificador de la CPU)
lleva a cabo esa selección del proceso. El planificador elige uno de los procesos que están en memoria
preparados para ejecutarse y asigna la CPU a dicho proceso.

Observe que la cola de procesos preparados no necesariamente tiene que ser una cola FIFO (first-in, first-
out). Como veremos al considerar los distintos algoritmos de planificación, una cola de procesos preparados
puede implementarse como una cola FIFO, una cola prioritaria, un árbol o simplemente una lista enlazada
no ordenada. Sin embargo, conceptualmente, todos los procesos que se encuentran en la cola de procesos
preparados se ponen en fila esperando la oportunidad de ejecutarse en la CPU. Los registros que se
almacenan en las colas son, generalmente, bloques de control de proceso (PCB) que describen los procesos
en cuestión.

Algoritmos de Planificación: Apropiativa – No Apropiativa


No apropiativo: En este caso, una vez que el proceso pasa a estado de ejecución, continúa
ejecutando hasta que termina o hasta que se bloquea en espera de una E/S o al solicitar algún
servicio del sistema.

Apropiativo: El proceso que se está ejecutando actualmente puede ser interrumpido y pasado al
estado de Listos por parte del sistema operativo. La decisión de apropiarse de la CPU puede
llevarse a cabo cuando llega un nuevo proceso, cuando se produce una interrupción que lleva a un
proceso Bloqueado al estado Listo o periódicamente, en función de una interrupción del reloj.

Las políticas apropiativas suponen un mayor coste que las no apropiativas pero dan un servicio
mejor al conjunto de todos los procesos, puesto que evitan que un proceso pueda monopolizar el
procesador durante mucho tiempo. Además, el coste de la apropiación puede mantenerse
relativamente bajo por medio de mecanismos eficientes de cambio de contexto (con tanta ayuda
del hardware como sea posible) y usando mucha memoria principal para que el porcentaje de
programas en memoria sea grande.
Para llevar a cabo la planificación apropiativa es necesario que ocurra una interrupción de reloj al
final del intervalo de tiempo para que la CPU regrese el control al planificador. Si no hay un reloj
disponible, la planificación no apropiativa es la única opción.

ALGORITMOS

FCFS/FIFO (No apropiativo):

El algoritmo más simple de planificación de la CPU es el algoritmo FCFS o FIFO. Con este esquema
se asigna primero la CPU al proceso que primero la solicite. La implementación de la política FIFO
se gestiona fácilmente con una cola FIFO. Cuando un proceso entra en la cola de procesos listos, su
BCP se coloca al final de la cola. Cuando la CPU queda libre se asigna al proceso que esta al
principio de la cola y ese proceso que pasa a ejecutarse se elimina de la cola.

Con este esquema NO se interrumpe debido a que in proceso ha ejecutado demasiado tiempo, por
lo que tiende a favorecer a los procesos más largos. Pero es equitativo. El tiempo medio de espera
es bastante largo.

Este algoritmo resulta problemático en Sistema de tiempo compartido, donde es importante que
cada usuario obtenga una cuota del procesador a intervalos regulares.

SJF o SPN no apropiativo


Este algoritmo exige conocer a priori el tiempo de ejecución de los procesos, por lo que es aplicable a
trabajos batch repetitivos cuyo comportamiento se tenga analizado.

El algoritmo consiste en seleccionar para ejecución al proceso listo con menor tiempo de ejecución. No se
plantea expulsión, por lo que el proceso sigue ejecutándose mientras lo desee. La ventaja de este algoritmo
es que produce el menor tiempo de respuesta, pero a costa de penalizar los trabajos de mayor tiempo de
ejecución.

También puede sufrir de inanición, puesto que, en el caso de que estén continuamente apareciendo
procesos con tiempo de ejecución pequeño, un proceso largo puede no llegar a ejecutar.

Algoritmo de Menor Tiempo Restante (Shortest Remaining Time First) apropiativo

El algoritmo de planificación SRTF es similar al algoritmo de planificación SJF, que selecciona al proceso con
el próximo tiempo de ejecución más corto. Pero el SRTF selecciona al proceso con el próximo tiempo de
ejecución restante más corto. En SRTF se penaliza a las ráfagas largas (como en SJF). Un punto débil de este
algoritmo se evidencia cuando una ráfaga muy corta suspende a otra un poco más larga, siendo más larga la
ejecución en este orden al ser preciso un cambio adicional de proceso y la ejecución del código del
planificador.
Planificación Próximo proceso el de índice más alto (HPRN): (También conocido como Mayor
tasa de respuesta:
El método HPRN, trata de ser justo sin introducir la apropiación. Cuando un proceso nuevo está esperando
en la cola de listos, el valor de su índice de penalización (Cuyo valor inicial será de 1), empezara a crecer.
Después de haber esperado un tiempo “w” en la lista de procesos listos, tendremos que P= (w+T) / T . Donde
P es la tasa de respuesta, w es el tiempo esperando y T es el tiempo requerido del proceso.

Cuando un proceso antiguo sale del procesador el proceso listo que tenga la mayor tasa de respuesta o
índice de penalización será el que se seleccione para su ejecución. El método HPRN no postergará
indefinidamente ni siquiera a los procesos muy largos ya que siempre llegara un momento en que su índice
de penalización alcanzara un valor alto.

Su desventaja, es que un proceso corto que llegue justo después de un proceso largo que ya ha comenzado
a ejecutarse, tendrá que esperar mucho tiempo.

Otra desventaja, es que es más costoso llevar a la práctica ya que el índice de penalización debe calcularse
para todos los procesos que estén en espera, siempre que termine el proceso que se está ejecutando.

Planificación por turnos (RR) (Apropiativo):


El algoritmo de planificación por turnos (RR, Round Robin), también conocido como asignación cíclica, da
servicio a un proceso solo durante u quantum de tiempo (Intervalo de tiempo). Si el proceso no terminase
dentro de un quantum, será interrumpido al expirar su quantum y será colocado al final de la cola de listos,
esperando allí hasta que llegue su turno para ejecutarse de nuevo durante otro quantum. De esta forma se
consigue que todos los procesos pasen a ejecutar, repartiendo el tiempo del procesador de forma
homogénea entre ellos.

Las nuevas llegadas entrarán en la cola de procesos listos al final de la misma.

La asignación por turnos tiene la finalidad de producir buenos tiempos de respuesta o espera tanto para los
procesos cortos como para los largos.

Este tipo de planificación es efectiva en Sistemas de tiempo compartido.

Con la planificación por turnos, el tema clave de diseño es la longitud del quantum de tiempo. Si se
establece el quantum demasiado corto, se producen demasiadas conmutaciones de procesos y se reduce la
eficiencia de la CPU, pero si se establece demasiado largo, se puede producir una mala respuesta a las
peticiones interactivas cortas. Un quantum intermedio constituye una solución razonable.

Asignación cíclica a los más antiguos (SRR) (Selfish Round Robin) (Apropiativo):
Este algoritmo es una variante del algoritmo Round Robin. Se basa en dar un mejor servicio a los procesos
parcialmente ejecutados. Para ello emplea dos colas, una para los procesos nuevos (Cola de nuevos) y otra
para los procesos antiguos (Cola de procesos aceptados).

El funcionamiento es muy simple, al principio los procesos entran en la cola de procesos nuevos en la que
esperan hasta ser aceptados.

En esta cola la prioridad de los procesos crece al ritmo del parámetro previamente ajustado. AL principio la
prioridad es igual a 0 y se acepta en la segunda cola (Cola de aceptados) el primer proceso de la cola de
nuevos.
Los procesos de la cola de aceptados son atendidos con el algoritmo de Round Robin y su prioridad crece al
ritmo del parámetro que también se habrá ajustado previamente. Cuando la prioridad de un procesos nuevo
alcanza la prioridad de un proceso aceptado, el proceso nuevo pasa a ser aceptado.

Si terminan todos los procesos aceptados en la segunda cola, se acepta el proceso nuevo con mayor
prioridad.

El ajuste de los parámetros a y b tienen gran importancia en el comportamiento de SRR.

Si b/a ≥ 1 no se aceptaran más procesos en la cola de nuevos, se atenderán los procesos ya aceptados y por
lo tanto el algoritmo SRR se degenera en el algoritmo RR.

2.4.Evaluacion de algoritmos.

Modelo Determinista

En este tipo de evaluación de algoritmo lo que se hace es tomar una carga de trabajo determinada y definir
el rendimiento de cada algoritmo en función a la carga elegida. Este tipo de evaluación es simple y eficiente,
ya que nos brindan valores exactos fáciles y rápidos de calcular, para comparar los algoritmos entre sí.

Modelo De Colas

Este tipo de evaluación se toman las colas de CPU y E/S y se generan distribuciones estadísticas la cuales se
utilizarán para comparar algoritmos.

Modelos De Simulación

Se programa un software el cual genera un escenario real donde se analizan los algoritmos por su
funcionamiento

2.4.Medidas Para Estudiar El Comportamiento De Los Algoritmos


De Planificación
Las medidas que podemos utilizar para estudiar el comportamiento de los algoritmos pueden ser en
RELACIÓN AL USUARIO, o en RELACIÓN AL SISTEMA.

En relación al usuario podemos analizar el TIEMPO DE RESPUESTA, tiempo entre la llegada y la respuesta, y
el TIEMPO DE RETORNO, tiempo entre la llegada de un proceso y su finalización.

en relación al sistema podemos analizar la PRODUCTIVIDAD, numero de procesos terminados por unidad de
tiempo, y la UTILIZACION DEL PROCESADOR, tiempo en el que el procesador se encontró activo.
UNIDAD Nº 3. ADMINISTRACIÓN DE MEMORIA.

3.1. Administración de Memoria. Espacio de Direcciones Lógico y Físico. Registros Base y Limite.
Intercambio. Grado de Multiprogramación.
3.2. Paginación. Soporte de Hardware. Protección. Paginas Compartidas. Segmentación Simple.
3.3. Memoria Virtual. Paginación. Tablas de Paginas. Tablas de Páginas Invertidas. Tablas de
Páginas Jerárquicas. Algoritmos de Reemplazo de Pagina. Hiperpaginación.
3.4. Condiciones de Diseños para Sistemas Paginados: Tamaños de Paginas. Políticas de Vaciados.
Control de Carga. Grado de Multiprogramación. Suspensión de Proceso. Políticas de Asignación.
3.5. Segmentación. Tabla de Segmento. Segmentación Paginada. Ejemplos.

3.1.Administración de Memoria.
La memoria principal es un recurso que se debe administrar con mucho cuidado, ya que para que un
programa se ejecute debe residir dentro de ella, por lo que existe una parte del sistema operativo, conocida
como administrador de memoria, que se encargar registrar que partes de la misma se encuentran en uso,
asignar espacios a procesos y reclamarles cuando estos dejen de ejecutarse.

3.1.Espacio de Direcciones Lógico y Físico.


Una dirección generada por el cpu es lo que se define como dirección lógica, mientras que una dirección
vista por la unidad de memoria se define como dirección física.

Todo conjunto de direcciones lógicas generadas por un programa se conoce como espacio de direcciones
logicas, y el conjunto de direcciones físicas asociadas a las lógicas se conocen como espacio de direcciones
fisicas. La correspondencia entre las direcciones lógica y físicas lo hace la unidad de gestion de memoria.

3.1.Registros base y limite.


Los registros base y limite son dos dispositivos de hardware que se utilizan para realizar la técnica de
reubicación dinámica. Cada vez que se ejecuta un proceso, en el registro base se carga la dirección física
donde inicia el programa, y en el registro limite se carga el tamaño de este. Por lo que, cuando el programa
hace referencia a la memoria, el CPU calcula la dirección física sumándoles el registro base a la dirección
generada por el proceso, además de controlar que la dirección a la que hace referencia se encuentra dentro
del espacio de memoria que tenía asignado, sumando el registro base con el límite.

3.1.Intercambio.
Debido a que no se puede tener tantos programas en la memoria principal, ya que esta no cuenta con
mucho espacio para tener varios programas activos al mismo tiempo (sobrecarga de memoria), se
implementa una solución sencilla para combatirla la cual se denominó intercambio.
El método de intercambio consta en llevar cada proceso completo a la memoria principal, ejecutarlos por un
determinado tiempo y una vez cumplido el tiempo, regresarlo al disco.

Esta técnica va generando huecos entre los espacios usados y los espacios libres, ya que no todos los
programas tienen un mismo tamaño. Estos huecos se pueden agrupar en un solo de mayor tamaño
desplazando los procesos lo más abajo posible, esta técnica se conoce como compactación de memoria,
aunque por lo general, ya que requiere de mucho tiempo de ejecución¸ no suele implementarse.

Generalmente cuando un proceso se carga en la memoria principal, se le asigna un espacio adicional por si el
programa crece, ya que si asignamos el espacio justo de memoria y el programa necesita más, deberá hacer
varios intercambios de programas hasta generar un espacio mínimo para poder cederle al programa
solicitante.

3.1.Grado de multiprogramación.
Se denomina grado de multiprogramación al número de procesos activos que mantiene el sistema. Si el
grado de multiprogramación se hace demasiado alto, el número de fallos de página se dispara y el
rendimiento del sistema baja drásticamente. A esta situación se le denomina hiperpaginación.

3.2.Paginación.
La paginación es una técnica que nos permite que el espacio de direcciones físicas de un proceso no sea
contiguo.

Consiste en descomponer la memoria lógica en bloques de mismo tamaño llamados páginas, y descomponer
la memoria física en bloques de igual tamaño llamados marcos. Cuando un proceso se quiere ejecutar,
primero se debe cargar en la memoria principal las páginas del proceso.

Toda dirección generada por el CPU se va a componer de dos partes, un numero de página (p) y un
desplazamiento (d). Dicho número de página sirve como índice para la tabla de páginas. Dentro de esta tabla
de páginas se encuentra la dirección base de cada página en la memoria, a la cual se le va a sumar el
desplazamiento de la página para determinar cuál es la dirección a la que hace referencia el CPU.

Cuando llega un proceso, el sistema analiza dicho proceso en función a la paginas, cada página necesita un
marco en la memoria principal, por lo que, si el proceso está compuesto por n páginas, necesitara n marcos
en la memoria.

Puesto a que el sistema operativo está gestionando la memoria física, este debe llevar un registro de cuales
marcos están cedidos y cuales están disponibles, por lo que utiliza una estructura denominada tabla de
marcos, donde cada entrada de esta tabla es un marco con la información de si está ocupado o no, y en el
caso de que lo estuviese, por cual página del proceso lo está.

En el método básico de paginación es necesario que todas las páginas de un proceso se encuentren dentro
de la memoria principal para que este pueda ser ejecutado.

Los esquemas de paginación no van a producir una fragmentación externa, debido a que todos los marcos
pueden utilizarse, pero si se producirá una fragmentación interna debido a que en algunos casos los
programas ocupen menos tamaño del que nos permite la frontera del marco, por lo que quizás el ultimo
marco del programa no se llene.

3.2.Soporte de hardware.
El soporte en hardware de la paginación consiste en utilizar una memoria cache muy pequeña que se llama
buffer de consulta de traducciones, el cual solo contiene la información de unas cuantas páginas, que
generalmente suelen ser las más usadas. Cuando la CPU genera una dirección lógica, lo que hace este
dispositivo es analizar si dentro de su memoria se encuentra el número de página a la que se hace
referencia, y en el caso de que se lo encuentre, devolver el marco correspondiente para acceder a la
memoria.

La finalidad de este dispositivo de hardware es la de reducir el tiempo de acceso a la memoria por parte de
los procesos.
3.2.Proteccion.
Dentro de la paginación la protección de la memoria consiste en utilizar unos bits adicionales de protección con cada
marco, que generalmente se los mantiene en la tabla de páginas.

Estos bits podrían indicarnos si la página a la que se está haciendo referencia es de lectura o escritura, con lo que,
además de hacer el cálculo de la dirección física del mismo, controla que no se esté escribiendo sobre una página de solo
lectura.

Otro bit que se suele incorporar con cada entrada de la tabla de páginas es el de valido-invalido , cuando una página
está configurada como válida, quiere decir que dicha página se encuentra dentro del espacio de direcciones lógica por lo
que puede acceder a ella. Sin embargo, si una página se encuentra configurada como invalida, la página no se encuentra
dentro del espacio de direcciones lógica del proceso, por lo cual se denegaría su acceso.
3.2.Paginas compartidas.
Una gran ventaja que presenta la técnica de paginación es la de compartir paginas entre varios procesos,
situación que se suele presentar en sistemas operativos de tiempo compartido.

En el caso de que se esté trabajando con varios usuarios que están utilizando el mismo programa, teniendo
páginas de programa y páginas de datos, en vez tener en memoria su propia página del programa que están
ejecutando para los “n” usuarios, lo que se hace tener una sola copia del mismo programa en la memoria y
que cada tabla de página de los usuarios contenga la misma dirección física del programa, pero sus datos en
diferentes direcciones, por lo que por consecuente, se reduce de manera considerable el espacio utilizado.

3.2.Segmentación simple.
De manera similar a la paginación, la segmentación es una técnica que nos permite dividir la memoria logica
en bloques, aunque, a diferencia de la paginación, en este caso no es necesario que tengan el mismo
tamaño, solo no tienen que superar el tamaño máximo. De manera similar a la paginación, una dirección
lógica segmentada está compuesta por un numero de segmento y su longitud, calculando la dirección física
de la misma manera.

Como en este caso no se trabaja con bloques del mismo tamaño, trabajaría de manera similar a una
partición dinámica, con la diferencia que en esta técnica un segmento puede ocupar más de una partición y
no estar necesariamente continuas.

Al trabajar con la segmentación simple un proceso se divide en segmentos de distintos tamaños, por lo que
cuando se carga en la memoria principal, tiene que trasladar todos los segmentos en espacios libres de la
misma.
Estructura de la tabla de segmento.

La entrada de la tabla de segmentos presenta la siguiente estructura:

NUMERO DEL SEGMENTO DIRECCION BASE LIMITE DE SEGMENTO BIT ADICIONALES


 NUMERO DEL SEGMENTO: Índice para identificar el segmento referenciado
 DIRECCION BASE: indica la dirección física de donde inicia dicho segmento en memoria
 LIMITE DE SEGMENTO: indica la longitud del segmento.
 BITS ADICIONALES: Conjunto de bits que dan más información acerca del proceso (bit de presencia,
bits de protección, etc.)

Cuando se genera una dirección lógica, el desplazamiento del mismo no debe superar el LIMITE DEL
SEGMENTO.
3.3.Memoria Virtual.
La memoria virtual es una técnica de gestión de espacio de memoria que tiene como objetivo
intentar que la información que un proceso está utilizando en un preciso momento resida en la
memoria principal y dejar que el resto no utilizado resida en la memoria secundaria.

La utilización de esta técnica aporta como beneficios:

 Se produce un aumento de grado de multiprogramación, al no ser necesario que todo el


proceso se aloje en la memoria principal, dando lugar a que más procesos puedan alojarse
en ella.
 Se pueden ejecutar programas de tamaño mayor al de la memoria principal
Cabe aclarar que, si bien esta técnica permite que más procesos se alojen dentro de la memoria
principal, existe un punto donde tener tantos procesos genere un aumento de fallos de página,
por lo que el rendimiento se vería reducido drásticamente.

Además, esta técnica no acelera el proceso de la ejecución, sino que es capaz de hasta ralentizar el
ritmo, debido al constante cambio de información entre la memoria principal y secundaria, por lo
que no es muy óptimo para s.o. En tiempo real.

3.3.Paginacion
La paginación es igual a cuando no se utiliza memoria virtual, la diferencia yace en:

Si se hace referencia a una dirección no asociada, la MMU lo detecta y hace que la CPU haga un trap al
sistema operativo. A este trap se le llama fallo de página. El sistema operativo selecciona un marco de
página que se utilice poco y escribe su contenido de vuelta al disco (si no es que ya está ahí). Después
obtiene la página que se acaba de referenciar en el marco de página que se acaba de liberar, cambia la
asociación(página que antes estaba en el marco se le pone bit ausente y a la página que va a ocupar su lugar
se le pone el bit presente y el registro base) y reinicia la instrucción que origino el trap.

3.3.Tabla de paginas

Como se había detallado anteriormente, una tabla de páginas contiene la información sobre que marco o no
tiene asociado dicha página, además de información adicional sobre la página con respecto a su utilización.

Estructura De La Tabla De Paginas


Aunque no todas las tablas de páginas presentan la misma organización, los campos utilizados siempre son
los mismos, estos son:

N° DE MARCO BITS DE USO DE CACHE


BIT PRESENTE/AUSENTE MODIFICADA REFERENCIADA
DE PAGINA PROTECCIÓN DESHABILITADO

 NUMERO DE MARCO DE PAGINA: este campo INDICA CUAL ES EL MARCO QUE TIENE ASOCIADO LA
PÁGINA en el caso que lo tuviere
 BIT PRESENTE/AUSENTE: este campo INDICA SI LA PÁGINA SE ENCUENTRA DENTRO O NO DE LA
MEMORIA PRINCIPAL, siguiendo una lógica positiva, si este bit se encuentra en 1 quiere decir que la
página se encuentra dentro de la memoria, en el caso de que sea 0 indica que se encuentra fuera
de la misma.
 BITS DE PROTECCION: este campo INDICA SI LA PÁGINA ES DE LECTURA/ESCRITURA O LECTURA
SOLO. De manera más sofisticada este campo se divide en 3, uno para escritura, uno para lectura y
uno para ejecución.
 MODIFICADA: este campo INDICA SI LA PAGINACIÓN SUFRIÓ UNA MODIFICACIÓN POR ESCRITURA.
Este campo es importante dentro de las paginas ya que, si este no se encuentra modificado, cuando
se reemplace esta página no es necesario que se transfiera al disco, ya que la copia que se
encuentra dentro del disco es igual a la de la memoria principal, por lo que se la puede descartar,
no es así en el caso de que si haya sufrido una modificación.
 REFERENCIADA: este campo INDICA SI LA PÁGINA FUE SOLICITADA O NO EN UN DETERMINADO
TIEMPO. Este campo le sirve al sistema operativo para determinar cuál de las páginas en memoria
es la más apta para ser reemplazada cuando ocurre un fallo, ya que si reemplazamos una página
que se utiliza frecuentemente, puede presentar más fallos en un futuro.
 USO DE CACHE DESHABILITADO: este campo INDICA SI LA PAGINA TIENE HABILITADA O NO EL USO
DEL CACHE. Este campo no es muy utilizado en algunos sistemas operativos, pero de igual forma
hay que tenerlos en cuenta.

3.3.Tabla de páginas invertidas.

Aunque la implementación de la paginación para reducir el espacio utilizado por cada proceso en la
memoria principal se presenta como una gran solución, sigue existiendo el limitante del espacio disponible,
ya que las tablas de páginas ocupan un espacio dentro de la memoria principal.

Por lo que, para dar solución a este inconveniente, se presenta la técnica de tabla de paginas invertida, que
consta en una tabla que, en vez de tener una entrada por cada página, tiene una entrada por cada marco de
página en la memoria real. Por lo que en cada entrada se indica quien está ocupando dicho marco de la
página.

Aunque resuelven el problema del espacio utilizado por las paginas, tiene como desventaja el tiempo de
acceso a la memoria principal, ya que ahora tiene que buscar en toda la tabla una página “p” referenciada
por un proceso “n”, y no tomar la página “p” como índice como se realizaba en la paginación común. Para
solucionar este inconveniente se puede implementar el soporte por hardware (buffer de consulta de
traducciones).

N° DE IDENTIFICADOR BIT BITS DE USO DE CACHE


MODIFICADA REFERENCIADA
PAGINA DE PROCESO PRESENTE/AUSENTE PROTECCIÓN DESHABILITADO
3.3.Tabla de pagina invertida.

Otra manera de solucionar el problema del espacio ocupado por las tablas de páginas es con la técnica de la
tabla de paginas jerarquica

De manera simplificada esta técnica consiste en paginar las tablas de página, es decir, dividir la tabla de
páginas a su vez en bloques, formando así una tabla de páginas externa, formada por páginas que contienen
porciones de la tabla de páginas del proceso, y una tabla de páginas interna, formada por pociones de
direcciones lógicas del proceso. Por lo que, por consecuente, una dirección lógica quedaría de la siguiente
forma:

Para tablas de nivel intermedio:

DIRECCIÓN TABLA BIT BITS DE REFERENCIAD USO DE CACHE


MODIFICADA
SIG. PRESENTE/AUSENTE PROTECCIÓN A DESHABILITADO

Para tablas de ultimo nivel:


N° MARCO DE BIT BITS DE REFERENCIAD USO DE CACHE
MODIFICADA
PAGINA PRESENTE/AUSENTE PROTECCIÓN A DESHABILITADO
La finalidad de esta técnica es la de en el caso de que en una de las tablas de ultimo nivel todas sus páginas
se encuentren ausentes, la tabla de página de mayor nivel pondría dicha tabla como ausente, para que la
primera libere espacio en la memoria principal al no ser necesaria que se encuentre almacenado en ella.

En el caso de que aun paginando la tabla de páginas en dos niveles seguiría siendo de un tamaño
considerado, se podría profundizar aún más la técnica llegando a tener 3, o 4 niveles

3.3.Algoritmos de Reemplazo de Pagina.


Cuando ocurre un fallo de página, el sistema operativo debe decidir cuál página va a reemplazar de la
memoria principal para dar lugar a la página que se desea acceder. Si la página que se desea reemplazar fue
modificada, primero se debe actualizar los cambios en el disco y recién ser reemplazado, en el caso de que
no, solo se sobrescribe el proceso nuevo sobre de él.

Aunque se podría reemplazar cualquier página al azar, existen algoritmos de reemplazo hacen más eficiente
el reemplazo de páginas. Estos son:

Optimo
Este tipo de algoritmo en realidad no es posible implementarlo. Se basa en reemplazar la página la cual no
vaya a ser referenciada por un largo periodo, pero al igual que la planificación de trabajo más corto, el
sistema operativo no sabe cuándo se va a referenciar una página luego de que ocurre un fallo de pagina

No Usadas Recientemente
Este tipo de algoritmo de reemplazo trabaja con los bits de referenciada y modificada de las tablas de
página. Se basa en agrupar las paginas en 4 niveles de acuerdo a los valores de estos bits:

NIVEL REFERENCIADA MODIFICADA


0 0 0
1 0 1
2 1 0
3 1 1
Cuando se produce un fallo de página, el sistema operativo toma una página del nivel más inferior y la
reemplaza por la pagina entrante.

FIFO
Este algoritmo, como su nombre lo indica, tiene una lista en donde las paginas se encuentran ordenadas por
llegada, una vez que ocurre un fallo de página toma la primera página que entro a la memoria y la reemplaza
por la entrante, colocando esta al último de la lista.

Segunda oportunidad
Es una versión mejorada del FIFO. Cuando ocurre un fallo de página, primero analiza si la página fue
referenciada o no, si no lo fuere es reemplazada de inmediato, pero en el caso de que si, se resetea la
referenciada a la página y se la carga al final. El problema de este método es que desordena constantemente
el orden de las paginas
Reloj
Método que soluciona el problema del anterior. Se implementa ubicando las paginas en una lista circular y
coloca un puntero en la página más antigua, cuando ocurre un fallo verifica si la página fue referenciada, en
el caso de que lo fuere el puntero avanza a la siguiente página y resetea el valor de referenciada de la
página, y continua así hasta que encuentra una página sin referenciarse y la reemplaza.

LRU
La política de reemplazo LRU selecciona como candidata la página de memoria que no se ha referenciado o
utilizado durante el mayor periodo de tiempo. Debido al principio de proximidad referenciada, esta página
sería la que tiene menos probabilidad de volver a tener referencias en un futuro próximo y de hecho la
política LRU proporciona unos resultados casi tan buenos como la política óptima. EL problema con este
algoritmo es la dificultad de su implementación. Además requiere un considerable apoyo del hardware.

Una forma de implementación es utilizando contadores. Utilizando un contador que se incremente por cada
referencia a memoria, cada posición de la tabla de páginas ha de tener un campo de tamaño suficiente para
que quepa el contador.

Cuando se referencia a una página, el valor actual del contador se copia por hardware a la posición de la
tabla correspondiente a esa página. Cuando se produce un fallo de página, el Sistema Operativo examina los
contadores de todas las páginas residentes en memoria y selecciona como víctima aquella que tiene el
menor valor. Esta implementación es factible aunque requiere un hardware complejo y muy específico.

Otra forma es utilizando una matriz. En una maquina con n marcos para página, el hardware LRU puede
utilizar una matriz de nxn bits, cuyos datos iniciales son todos cero. En una referencia al marco K, el
hardware primero activa todos los bits del renglón K y desactiva después todos los bits de la columna K. En
cualquier instante, el renglón cuyo valor binario es mínimo es el de uso menos reciente.

3.3.Hiperpaginación.
Este fenómeno sucede cuando se generan demasiado fallos de páginas en un periodo, por lo que entorpece
la eficiencia de trabajo. Los motivos por los que se puede generar la hiperpaginacion son:

 Cuando el grado de multiprogramación es muy alto, es decir cuando existen muchos procesos
activos en memoria.
 Cuando un proceso tiene asignada pocas páginas, por lo que le imposibilita realizar su trabajo.

Cuando se inicializa un proceso, generalmente hay que llenar diversas estructuras en memoria física, lo que
nos producirá diversos fallos de página. Estos fallos de página harán que el rendimiento del sistema
operativo decrezca a gran escala debido a que el disco secundario es millones de veces mas lento que las
ram. Cuando el sistema operativo detecta que su rendimiento bajó considerablemente empieza a realizar
tareas de mantenimiento que se cargan en ram, disminuyendo aún más el rendimiento.

Una solución a esta problemática sería la de bajar el grado de multiprogramación del sistema, suspendiendo
uno o mas procesos hasta que el sistema vuelva a su estado normal.
3.4. Condiciones de Diseños para Sistemas Paginado: Tamaño de
paginas.
Los tamaños de página son invariablemente potencias de 2, que generalmente son de 512 (2^9) a los 16384
(2^14) bytes.

Para determinar el mejor tamaño de página se requiere balancear varios factores competitivos. Como
resultado no hay un tamaño óptimo general.

Hay quienes favorecen el tamaño de página pequeño, otros tamaños más grandes

Con un tamaño de página menor, permite que cada página se ajuste con mayor precisión a la localidad del
programa, es decir, obtenemos una mejor resolución lo que no permite aislar la memoria que realmente se
necesita. Si el tamaño de página es mayor, tenemos que transferir y asignar no solo lo que se necesita sino
todo lo demás que se encuentre en la página. Se requiera o no.

Por otra parte, un tamaño de página pequeño produciría muchos fallos de página, lo que puede derivar en
una hiperpaginacion. Por lo cual sería conveniente un tamaño de página más grande.

La tendencia histórica va hacia tamaños mayores de página. Como consecuencia de que la velocidad de la
CPU y la capacidad de la memoria principal han aumentado con mayor rapidez que la velocidad de los
discos.

Tamaño de pagina grande aumenta la fragmentación interna

3.4.Vaciado de paginas
La política de vaciado se centra en cuál es el momento óptimo para actualizar la información de una página
que ha sido modificada. Existe dos políticas: por demanda y vaciado previo

 El vaciado por demanda se basa en actualizar las paginas modificadas en el momento que se las
desee reemplazar por paginas nuevas. Tiene como desventaja que aumenta el tiempo de espera de
las paginas cuando ocurre un fallo de página.
 El vaciado previo se basa en actualizar los cambios de las paginas antes de que se las reemplace. El
problema radica en que algunas páginas pueden ser vaciadas en un periodo y luego volver a ser
modificadas antes del siguiente periodo de vaciado.

Una solución para resolver los inconvenientes que encontramos en ambas políticas de vaciado, seria la
de implementar una memoria intermedia(buffering de pagina). En este caso solo se vacían aquellas
paginas que pueden ser reemplazadas.

3.4.Control de carga.
El control de carga determina el número de procesos que residirán en la memoria principal, eso se
denomina, grado de multiprogramación. Cuando el número de procesos en memoria principal es demasiado
bajo, la CPU puede estar inactiva durante largos periodos. Por otro lado si hay muchos procesos residentes,
entonces el tamaño de conjunto residente de cada proceso no es adecuado y se producirán frecuentes fallos
de páginas. El resultado de eso se deriva en la hiperpaginacion.
3.4.Grado de multiprogramación.
Se denomina grado de multiprogramación al número de procesos activos que mantiene el sistema. Si el
grado de multiprogramación se hace demasiado alto, el número de fallos de página se dispara y el
rendimiento del sistema baja drásticamente. A esta situación se le denomina hiperpaginación.

3.4.Suspension de procesos

Para reducir el grado de la multiprogramación es conveniente suspender procesos para desocupar


espacio en la memoria principal. Los criterios para realizarlo son:

 Procesos Con La Prioridad Más Baja


 Procesos Con Fallos De Pagina
 Ultimo Proceso Activado
 El proceso mas pequeño
 El Proceso Más Grande
 Proceso Con Tiempo De Ejecución Mas Alto
Política de asignaciones:

En un Sistema Multiporgramado es necesario determinar cuántos marcos de página se asignan a


cada proceso. Existen dos estrategias de asignación.

- Asignación fija: Se asigna a cada proceso un número fijo de marcos de página. Este
número se decide en el momento de la carga inicial del proceso. Con esta política siempre
que se produzca un fallo de página del proceso en ejecución, la página que se necesite
reemplazar se hará con un reemplazo local, es decir se selecciona únicamente entre la
paginas residentes del proceso que ha generado el fallo de página.
-
La desventaja de esta estrategia son dos: Si las reservas de memoria (Marcos) resulta
pocas va a haber una alta tasa de fallos, haciendo que se relentice el sistema. Si la reserva
son demasiado granes, habrá pocos programas en memoria principal y habrá tiempo
ocioso por parte de la CPU.
-
- Asignación variable: El número de marcos asignados a un proceso varía según las
necesidades que tenga el proceso en diferentes instantes de tiempo. Con este tipo de
asignación se pueden usar estrategias de reemplazo locales y también globales.
* Con reemplazo local, el proceso se va aumentado o disminuyendo su conjunto residente
dependiendo de sus necesidades en distintas fases de ejecución del programa, cuando
ocurra un fallo de página, la página que se seleccionara para reemplazar pertenecerá al
conjunto residente del proceso que cause el fallo.
* Con reemplazo global: Con esta política, cuando ocurre un fallo de página, se permite
que un proceso seleccione un marco para reemplazar de entre todo el conjunto de
marcos, incluso si ese marco está asignado a otro proceso. De esta forma se incrementara
el número de procesos que tiene asignados. El problema es que un proceso no puede
controlar su propia tasa de fallos de página.

El reemplazo local puede afectar a un proceso al no permitir que tenga acceso a otras
páginas de memoria menos usadas.

3.5.Segmentacion paginada.Tabla de segmento paginado.

Esta técnica se basa en juntar las dos técnicas anteriores, tanto paginación como segmentación.

El espacio de memoria de cada proceso se divide en segmentos, donde cada uno de estos
segmentos alojan un conjunto de páginas de igual tamaño para todo el mapa de memoria del
proceso, los cuales estos últimos estarán apuntando a los marcos donde se alojarían dichas
páginas.

DIRECCION DE TABLA DE NUMERO DE PAGINA


NUMERO DE SEGMENTO BITS ADICIONALES
PAGINAS (TAMAÑO DEL SEGMENTO)
 NUMERO DEL SEGMENTO: Índice para identificar el segmento referenciado
 DIRECCION DE TABLA DE PAGINAS: Indica cual es la dirección en donde se encuentra la
tabla de páginas.
 NUMERO DE PAGINAS: Indica el número de páginas que contiene el segmento, que al
tener todos las paginas el mismo tamaño, se puede expresar en forma de TAMAÑO DEL
SEGMENTO.
 BITS ADICIONALES: Conjunto de bits que dan más información acerca del proceso (bit de
presencia, bits de protección, etc.)
UNIDAD Nº 4. ENTRADA-SALIDA.

4.1. Entra – Salida. Características de Dispositivos de Entrada – Salida. Organización de las


Funciones de la Entrada – Salida.
4.2. Principios de Hardware de Entrada-Salida. Arquitectura del Sistema de Entrada – Salida.
Controladores de Dispositivos. Accesos Directorio a Memoria.
4.3. Principios de Software de Entrada-Salida. Manejo del Software de Interrupciones. Manejos de
Dispositivos. Interfaz de Aplicaciones.
4.4. Discos. Estructura del Disco. Hardware y Software del Disco. Parámetros de Rendimiento de
Discos. Planificación de Discos.

4.1. Entra – Salida.


Además de proporcionar abstracciones como los procesos (e hilos), espacios de direcciones y archivos, un
sistema operativo también controla todos los dispositivos de E/S (Entrada/Salida) de la computadora. Debe
emitir comandos para los dispositivos, captar interrupciones y manejar errores. Adicionalmente debe
proporcionar una interfaz —simple y fácil de usar— entre los dispositivos y el resto del sistema. Hasta donde
sea posible, la interfaz debe ser igual para todos los dispositivos (independencia de dispositivos).
4.2.Principios de Hardware de Entrada-Salida.

Dispositivos de E/S: son elementos que se conectan a la CPU a través de las unidades de E/S. Son
el componente mecánico que se conecta a la máquina. Se pueden clasificar en 3 categorías:
- Dispositivos de interfaz de usuario: Permiten la comunicación entre los usuarios y la computadora.
Se incluyen todos los dispositivos que sirven para proporcionar interfaz con el usuario tanto para
entrada como para salida.
- Dispositivo de almacenamiento: Se usan para proporcionar almacenamiento no volátil de datos y
memoria. Su función primordial es abastecer de datos y almacenamiento a los programas que se
ejecutan en la computadora.
- Dispositivo de comunicaciones: Permiten conectar a la computadora con otras a través de una red.
Los dos más importantes son el modem y las tarjetas de red.

También pueden clasificarse según como almancenan la información o como transfieren la


misma:

- Dispositivos de Bloque: Almacena información en bloques de tamaño fijo. Estos se pueden


direccionar de manera independiente. Lo que permite leer o escribir un bloque con independencia
de los demás.
- Dispositivo de caracteres: no almacena información en bloques de tamaño fijo. Envía o acepta flujo
de caracteres de formalidad y sin ningún tipo de estructura de bloque, o es direccionable y no tiene
ninguna operación de búsqueda. Por ejemplo: Impresoras, tarjetas de res, módems, teclado.

4.3. Arquitectura del Sistema de Entrada - Salida.

El sistema de entrada/salida está construido como un conjunto de controladores apilados, cada uno de los
cuales está asociado a un dispositivo de entrada/salida (archivos, red, etc.). Ofrece a las aplicaciones y
entornos de ejecución servicios genéricos que permiten manejar los objetos de entrada/salida del sistema.
A través de ellos se puede acceder a todos los manejadores de archivos y de dispositivos tales como discos,
cintas, redes, consola, tarjetas de sonido, etc.

La estructura y los componentes del sistema de E/S esta formada por:

 Interfaz del sistema operativo para entrada/salida. Proporciona servicios de E/S síncrona y
asíncrona a las aplicaciones y una interfaz homogénea para poderse comunicar con los
manejadores de dispositivo ocultando los detalles de bajo nivel.

 Sistemas de archivos. Proporcionan una interfaz homogénea, a través del sistema de archivos
virtuales, para acceder a todos los sistemas de archivos que proporciona el sistema operativo (FFS,
SV, NTFS, FA T, etc.). Permite acceder a los manejadores de los dispositivos de almacenamiento de
forma transparente, incluyendo en muchos casos, como NFS o NTFS, accesos remotos a través de
redes. En algunos sistemas, como Windows NT, los servidores para cada tipo de sistema de archivos
se pueden cargar y descargar dinámicamente como cualquier otro manejador.

 Gestor de redes. Proporciona una interfaz homogénea para acceder a todos los sistemas de red
que proporciona el sistema operativo (TCP/IP, Novell, etc.). Además, permite acceder a los
manejadores de cada tipo de red particular de forma transparente.

 Gestor de bloques. Los sistemas de archivos y otros dispositivos lógicos con acceso a nivel de
bloque se suelen limitar a traducir las operaciones del formato del usuario al de bloques que
entiende el dispositivo y se las pasan a este gestor de bloques. El gestor de bloques admite
únicamente operaciones a nivel de bloque e interacciona con la cache de bloques para optimizar la
E/S.

 Gestor de cache. Optimiza la entrada/salida mediante la gestión de almacenamiento intermedio en


memoria para dispositivos de E/S de tipo bloque [ 1985]. Aunque en el Capítulo 8 se comenta con
más detalle la estructura de la cache de bloques, es importante saber que su tamaño varía
dinámicamente en función de la memoria RAM disponible y que los bloques se escriben a los
dispositivos según una política bien definida, que en UNIX y WINDOWS NT es la de escritura
retrasada.

 Manejadores de dispositivo. Proporcionan operaciones de alto nivel sobre los dispositivos y las
traducen en su ámbito interno a operaciones de control de cada dispositivo particular. Como ya se
ha dicho, los manejadores se comunican con los dispositivos reales mediante puertos o zonas de
memoria especiales.

4.2. Controladores de Dispositivos.

Controladores de dispositivos o unidades de E/S. Se encargan de hacer la transferencia de información entre


la memoria principal y los periféricos. Tienen una conexión al bus de la computadora y otra para
el dispositivo (generalmente mediante cables internos o externos).
Su programación se lleva a cabo mediante una interfaz de muy bajo nivel que proporciona acceso a una
serie de registros del controlador. Hay tres registros importantes en casi todos los controladores: registro de
datos, estado y control. El registro de datos sirve para el intercambio de datos. En él irá el controlador
cargando los datos leídos y de él irá extrayendo los datos para su escritura en el periférico. Un bit del
registro de estado sirve para indicar que el controlador puede transferir una palabra. En las operaciones de
lectura esto significa que ha cargado en el registro de datos un nuevo valor, mientras que en las de escritura
significa que necesita un nuevo dato. Otros bits de este registro sirven para que el controlador indique los
problemas que ha encontrado en la ejecución de la última operación de E/S. El registro de control sirve para
indicarle al controlador las operaciones que ha de realizar

4.2.Accesos Directorio a Memoria.

ACCESO DIRECTO A MEMORIA (DMA):


E/S PROGRAMADA

La información entre los controladores de dispositivo y la unidad central de proceso o memoria


principal se puede transferir mediante un programa que ejecuta continuamente y lee o escribe los datos del
(al) controlador. Con esta técnica, que se denomina E/S programada, la transferencia de información entre
un periférico y el procesador se realiza mediante la ejecución de una instrucción de E/S. Con esta técnica,
es el procesador el responsable de extraer o enviar datos entre el procesador y el controlador de dispositivo,
lo que provoca que el procesador tenga que esperar mientras se realiza la transferencia entre el periférico y
el controlador. Dado que los periféricos son sensiblemente más lentos que el procesador, éste deberá
esperar una gran cantidad de tiempo hasta que se complete la operación de E/S. En este caso no existe
ningún tipo de concurrencia entre la E/S y el procesador ya que éste debe esperar a que finalice la
operación.

E/S DIRIGIDA POR INTERRUPCIONES:

Esta alternativa propone que el procesador genere la orden de E/S para un módulo y acto seguido continúe
realizando algún otro trabajo útil. El módulo de E/S interrumpirá más tarde al procesador para solicitar su
servicio cuando esté listo para intercambiar datos con el mismo. El procesador ejecutará la transferencia de
datos y después reanudará el procesamiento previo.

Desde el punto de vista del módulo o controlador de E/S: El módulo recibe un mandato de lectura del
procesador. El módulo de E/S pasa entonces a leer los datos del periférico asociado. Una vez que los datos
están en el registro de datos del módulo, el módulo genera una interrupción al procesador a través de una
línea de control. El módulo entonces espera hasta que el procesador pida sus datos. Cuando se hace la
petición, el módulo sitúa sus datos en el bus de datos y ya está listo para otra operación de E/S.

Desde el punto de vista del procesador: El procesador genera un mandato de lectura, salva el contexto
(Guarda) del programa actual y lo abandona, pasando a hacer otra cosa. Al final de cada ciclo de instrucción,
el procesador comprueba si hay interrupciones. Cuando se produce la interrupción del módulo de E/S, el
procesador salva el contexto del programa que se está ejecutando actualmente y comienza a ejecutar un
programa de manejo de interrupción que procesa la interrupción. En este caso el procesador lee la palabra
de datos del módulo de E/S, (O de algún otro programa) y reanuda su ejecución.

La E/S dirigida por interrupciones es más eficiente que la E/S programada, pero todavía consume mucho
tiempo de procesador, puesto que cada palabra de datos que va desde o hacia la memoria debe pasar a
través del procesador.

Casi invariablemente, habrá múltiples módulos de E/S en un computador, por lo que se necesitan
mecanismo para permitir que el procesador determine que dispositivo causo la interrupción y para decidir,
en caso de múltiples interrupciones, cual debe manejar primero. En algunos Sistemas, hay múltiples líneas
de interrupción de manera que cada módulo de E/S usa una línea diferente.
La función de DMA(acceso directo a memoria) puede llevarla a cabo un módulo separado
conectado en el bus del Sistema o puede estar incluida en un módulo de E/S.

Esta técnica consiste en que el controlador del dispositivo se pueda encargar de efectuar la
transferencia de datos, entre el periférico y la memoria principal, liberando de este trabajo a la
CPU, e interrumpir a la CPU solo cuando haya terminado la operación completa de E/S.

Cuando el procesador desea leer o escribir un bloque de datos, genera o envía una orden al
controlador de DMA, enviándole la siguiente información:

- Tipo de operación (Lectura o escritura) (Utilizando la línea de control de Lectura –


Escritura).
- La dirección del dispositivo de E/S involucrado. (Comunicándoselo mediante las líneas de
datos).
- La posición inicial de memoria (Dirección) en la que se desea leer o donde se quieren
escribir, utilizando la línea de datos y almacenándose en el registro de dirección del
módulo de DMA.
- El número de palabras (Bytes) que se pretende leer o escribir. (Utilizando las líneas de
datos y almacenando en el registro de contador de datos).

A continuación, el procesador realizando otro trabajo, ha delegado esta operación de E/S al


módulo o controlador de DMA, que se ocupa de la misma. El módulo de DMA transferirá el bloque
completo de datos, palabra por palabra, hacia la memoria sin pasar a través del procesador.

Cuando el módulo ha completado la transferencia, genera una interrupción que activa la rutina de
tratamiento correspondiente, de tal manera que se sepa que la operación ha concluido.

Utilizando DMA el procesador únicamente se ve involucrado al inicio y al final de la transferencia.

El módulo de DMA necesita tomar el control del bus para transferir datos hacia la memoria o
desde ella. Debido a esta competencia en el uso del bus, puede haber veces en la que el
procesador necesita el bus y debe esperar al módulo de DMA. (Esto no es una interrupción ya que
el procesador no salva el contexto y pasa a hacer otra cosa). El efecto global es causar que el
procesador ejecute más lentamente durante una transferencia de DMA en el caso de que el
procesador requiera acceso l bus.

Sin embargo, para una transferencia de E/S de múltiples palabras, el DMA es mucho más eficiente
que la E/S dirigida por interrupciones o la programada.
4.3.Principios de Software de Entrada-Salida.
El software de E/S se organiza en cuatro capas, cada una tiene una función bien definida que
realizar.

Los procesos de usuarios emiten peticiones de E/S al Sistema Operativo, cuando un proceso
solicita una operación de E/S, el Sistema Operativo prepara dicha operación y bloquea al proceso
hasta que se recibe una interrupción del controlador del dispositivo indicando que la operación
está completa. Las peticiones se procesan de forma estructurada en las siguientes capas.

 Manejadores de interrupciones.
 Manejadores de dispositivos y drivers.
 Software de E/S independiente de los dispositivos. (Formado por la parte del alto
nivel de los manejadores, el gestos de caché, el gestor de bloques y el servidor de
archivos).
 Interfaz del Sistema Operativo. Llamadas al Sistema que usan las aplicaciones de
usuario. Software de E/S de capa de usuario.

Manejadores de interrupción:

Los manejadores de interrupción se encargan de tratar las interrupciones que generan los
controladores de dispositivos una vez que estos están listos para la transferencia de datos o bien
han leído o escrito los datos de memoria principal en caso de acceso directo a memoria. Para
tratar dicha interrupción se ejecuta el correspondiente manejador de interrupción cuyo efecto es
el de salvar los registros, comunicar el evento al manejador del dispositivo y restaurar la ejecución
de un proceso (Que no tiene por qué ser interrumpido).

Los manejadores de interrupción suelen hacer algo más que comunicar el evento al manejador de
dispositivo. Cuando una interrupción ocurre muy frecuentemente, caso del reloj, o cuando la
cantidad de información a transferir es muy pequeña, caso del teclado, sería muy costoso
comunicar siempre el evento al manejador del dispositivo asociado. En estos casos el propio
manejador de interrupción registra la ocurrencia del evento, bien mediante el incremento de una
variable global para el reloj o la acumulación de caracteres en un buffer del teclado. La notificación
al manejador se hace únicamente con cierto número de ocurrencias del evento en el caso del
reloj, o activando una bandera que indica que hay datos en el buffer del teclado.

Manejadores de dispositivos o drivers:

Cada dispositivo de E/S o cada clase de dispositivo, tienen un manejador asociado en el Sistema
Operativo. Dicho manejador incluye código independiente del dispositivo para proporcionar al
nivel superior del Sistema Operativo, una interfaz de alto nivel y el código dependiente necesario
para programar el controlador del dispositivo a través de sus registros y mandatos.

La tarea del manejador de dispositivos es aceptar peticiones en formato abstracto, de la parte del
código de E/S independiente del dispositivo, traducir dichas peticiones a términos que entienda el
controlador, enviar al mismo las ordenes adecuadas en la secuencia correcta y esperar a que se
cumplan.
Todos los manejadores tienen una lista de peticiones pendientes por dispositivo donde se encolan
las peticiones que llegan de niveles superiores. El manejador explora la lista de peticiones, extrae
una petición pendiente y ordena su ejecución. Una vez enviada la petición al controlador, el
manejador se bloquea o no, dependiendo de la velocidad del dispositivo. Para los lentos (Discos
por ej...), se bloquea esperando una interrupción. Para los rápidos, (Pantallas, memorias RAM),
responde inmediatamente.

Después de recibir el fin de operación, controla la existencia de errores y devuelve al nivel superior
el estado de terminación de la operación. Si tiene operaciones pendientes en la cola de peticiones,
atiende a la siguiente, en caso de que le toque ejecutar después de la operación de E/S. En caso
contrario se bloquea.

En los Sistemas Operativos modernos, los manejadores se agrupan en clases. Para cada clase
existe un manejador genérico que se encaja de las operaciones de E/S para una clase de
dispositivos, tales como el disco, la cinta, etc... . Cuando se instala un dispositivo particular como
por ejemplo el disco SEAGATE S300, se crea una instalación de manejador de clase con los
parámetros específicos de ese objeto. Todas las funciones comunes al manejador de una clase se
llevan a cabo en el manejador genérico y las particulares en el del objeto. De esta forma se crea un
apilamiento de manejadores que refleja muy bien en que operaciones son independientes del
dispositivo y en cuáles no.

Software de E/S independiente del dispositivo:

La mejor parte del Sistema de E/S es el software independiente del dispositivo. Esta capa o niveles,
incluye el Sistema de archivos y el de gestión de red, el gestor de bloques, la cache de bloques y
una parte de los manejadores de dispositivo. La función principal de esta capa de software es
ejecutar las funciones de E/S que son comunes a todos los dispositivos a través de una interfaz
uniforme. Internamente, en este nivel se proporciona acceso a nivel de bloques o caracteres,
almacenamiento intermedio, gestión de los dispositivos, planificación de la E/S y control de
errores.

El tamaño de acceso al nivel de bloques se hace usando tamaños de bloques de acceso comunes
para todo un Sistema de archivos, lo que permite ocultar que el dispositivo pueda tener distinto
tamaño de sectores y distinta geometría. Estos detalles quedan ocultos por la capa de software
independiente del dispositivo que ofrece una interfaz sobre la base de bloques lógicos del Sistema
de archivos. Lo mismo ocurre con los dispositivos de caracteres, algunos de los cuales trabajan con
un carácter cada vez como el teclado, mientras otros trabajan con flujos de caracteres como el
modem o las redes.

Para optimizar las E/S y para armonizar las peticiones de usuario, que pueden ser de cualquier
tamaño, con los bloques que maneja el Sistema de archivos, el software de E/S proporciona
almacenamiento intermedio en memoria del Sistema Operativo. Esta facultad se usa para tres
cosas:

1) Optimizar la E/S evitando accesos a los dispositivos.


2) Ocultar las diferencias de velocidad con que cada dispositivo y usuario manejan los datos.
3) Facilitar la implementación de la semántica de compartición, al existir una copia única de
los datos en memoria.

El Sistema de E/S mantiene buffers en distintos componentes. Por ejemplo, en la parte del
manejador del teclado independiente del dispositivo existe un buffer para almacenar los
caracteres que teclea el usuario hasta que se pueden entregar a los niveles superiores.

La gestión de los dispositivos agrupa a su vez tres servicios: Nombrado, protección y control de
acceso. El nombrado permite traducir los nombres de usuario a identificadores del sistema. Cada
dispositivo tienen asociado una información de protección y este nivel de software asegura que los
requisitos de protección se cumplen. Además proporciona control de acceso ara que un
dispositivo dedicado, (como una impresora), sea accedido por un único usuario cada vez.

Una de las funciones principales del Sistema de E/S es la planificación de E/S de los distintos
componentes. Para ellos se usan colas de peticiones para cada clase de dispositivo, de las que se
extraen las peticiones de cada dispositivo en particular. Cada una de estas colas se ordena
siguiendo una política de planificación, que puede ser distinta en cada nivel.

Esta capa proporciona gestión de errores, para aquellos casos que el manejador de dispositivo no
puede solucionar. Un error transitorio de lectura de un bloque se resuelve en el manejador
reintentando su lectura. Un error permanente de lectura no puede ser resuelto y debe ser
comunicado al usuario para que tome las medidas adecuadas. En general, todos los Sistemas
Operativos incluyen alguna forma de control de errores internos y de notificación al exterior en
caso de que esos errores no se puedan resolver.

Interfaz de aplicaciones:

Las aplicaciones tienen acceso al Sistema de E/S a través de las llamadas al Sistema Operativo,
relacionadas con la gestión de archivos y con la E/S.

En muchos casos, las aplicaciones no acceden directamente a las llamadas del Sistema, sino a
utilidades que llaman al Sistema en representación del usuario. Las principales utilidades de este
estilo son:

- Las bibliotecas de los lenguajes como las que traducen la petición del usuario a llamadas
del Sistema, convirtiendo los parámetros allí donde es necesario.
- Los demonios del Sistema, como los de red o los Spooler de las impresoras. Son programas
privilegiados que pueden acceder a recursos que las aplicaciones normales no tienen
acceso.

Esta forma de relación a través de representantes existe principalmente por razones de seguridad
y control de acceso.

La interfaz de ES de las aplicaciones en la que define el modelo de E/S que ven los usuarios, por lo
que, cuando se diseña un Sistema Operativo, hay que tomar varias decisiones relativas a la
funcionalidad que se va a ofrecer al mundo exterior en las siguientes cuestiones:

- Nombres independientes de dispositivo.


- E/S bloqueante y no bloqueante.
- Control de acceso a dispositivos compartidos y dedicados.
- Indicaciones de error.
- Uso de estándares.

La elección de unas u otras características determina la visión del Sistema de E/S del usuario.

Nombres independientes de dispositivo: Usar nombres independientes de dispositivo permite


construir un árbol completo de nombres lógicos son que el usuario vea en ningún momento los
dispositivos a los que están asociados.

E/S bloqueante y no bloqueante: La mayoría de los dispositivos de E/S son no bloqueantes,


también llamados asíncronos, es decir, reciben la petición, la programan, contestan e interrumpen
al cabo de un cierto tiempo. Solo los dispositivos muy rápidos o algunos dedicados fuerzan la
existencia de operaciones de E/S bloqueantes, también llamadas síncronas.

Sin embargo la mayoría de las aplicaciones efectúan operaciones de E/S con lógica bloqueante, lo
que significa que emiten la operación y esperan hasta tener el resultado antes de continuar su
ejecución. En este tipo de operaciones, el Sistema Operativo recibe la operación y bloquea al
proceso emisor hasta que la operación de E/S ha terminado. Momento en que se desbloquea a la
aplicación y le envía el estado del resultado de la operación. En este caso, la aplicación puede
acceder a los datos inmediatamente ya que los tiene disponibles en la posición de memoria
especificada, a no ser que hubiera un error de E/S. Este modelo de programación es claro y
sencillo, por lo que las principales llamadas al Sistema de E/S bloquean al usuario y complementan
la operación antes de devolver el control al usuario.

Las llamadas de E/S no bloqueantes se comportan de forma muy distinta, reflejando mejor la
propia naturaleza del comportamiento de los dispositivos de E/S. Estas llamadas permiten a la
aplicación seguir su ejecución, sin bloquearla, después de hacer una petición de E/S. El
procesamiento de la llamada de E/S consiste en recuperar los parámetros de la misma, asignar un
identificador de operación de E/S pendiente de ejecución y devolver a la aplicación que sigue
ejecutando su código. Es responsabilidad de la aplicación preguntar por el estado de la operación
de E/S usando una llamada al Sistema especial para realizar esta consulta o cancelarla si ya no le
interesa o tarda demasiado.

Este modelo es más complejo pero se ajusta muy bien al modelo de algunos Sistemas que emiten
peticiones y reciben la respuesta después de un cierto tiempo.

Control de acceso a dispositivos:

Una de las funciones más importantes de la interfaz de usuario es dar indicaciones de control de
acceso a los dispositivos e indicar cuales son compartidos y cuales son dedicados.

Para esto se usan dos tipos de mecanismos:

- Mandatos externos o programas especiales (Demonios), que se encargan de imponer


restricciones de acceso a los mismos cuando es necesario.
- Llamadas al Sistema que permiten bloquear y desbloquear el acceso de un dispositivo o a
parte de él. Usando estas llamadas, una aplicación se puede asegurar acceso exclusivo
bloqueando el dispositivo antes de acceder y desbloqueándolo al terminar sus accesos.
Para evitar problemas de bloqueos indefinidos, solo se permiten bloqueos aconsejados,
nunca obligatorios. Además el único usuario que puede bloquear un dispositivo de E/S es
el administrador del Sistema.

La seguridad es un aspecto importante de control de accesos. No basta con que se resuelvan los
conflictos de acceso. Hay que asegurar que el usuario que accede al Sistema de E/S tiene derechos
de acceso suficientes para llevar a cabo las operaciones que solicita.

Indicaciones de error:

Las operaciones del Sistema Operativo pueden fallar debido a cuestiones diversas. Es importante
decidir cómo se va a indicar al usuario esos fallos.

Uso de estándares:

Proporcionar una interfaz de usuario estándar garantiza a los programadores la posibilidad de sus
aplicaciones, así como un comportamiento totalmente predecible de las llamadas al sistema, en
cuanto a definición de sus prototipos y resultados

4.4.Discos.

EL Sistema de almacenamiento secundario se usa para guardar los programas y datos en dispositivos
rápidos, de forma que sean fácilmente accesibles a las aplicaciones a través del Sistema de archivos. Hay dos
elementos principales involucrados en este Sistema: Discos y manejadores de disco.

Discos: Los discos son dispositivos básicos para llevar a cabo el almacenamiento masivo y no volátil de datos.
Además se usan como plataforma para el Sistema de intercambio que usa el gestor de memoria virtual. Son
dispositivos electromecánicos u opto mecánicos que acceden a nivel de bloque lógico por el Sistema de
archivos.

De acuerdo a su tecnología de fabricación se pueden clasificar en:

 Discos duros: Dispositivos de gran capacidad compuestos por varias superficies magnetizadas y
cuyas cabezas lectoras funcionan por efecto electromagnético.
 Discos Ópticos: Dispositivos de gran capacidad compuestos por una sola superficie y cuyas cabezas
lectoras funcionan por láser. (Por ejemplo CD, DVD etc...)

4.4.Estructura de discos.

Estructura física de los discos: Un disco duro es un dispositivo de gran capacidad compuesto por varios
platos, cada plato tiene forma circular plana como un CD. Los diámetros comunes de los platos varían entre
1,8´a 5,25´ pulgadas. Las dos superficies de cada plato están recubiertas de un material magnético. La
información se almacena grabándola magnéticamente sobre los platos.
un cabezal de lectura-escritura “vuela” justo por encima de cada una de las superficies de cada plato. Los
cabezales están conectados a un brazo del disco que mueve todos los cabezales como una sola unidad.
En el ámbito organizativo, las superficies de cada plato están divididas en pistas circulares, que a su vez se
dividen en sectores. El conjunto de pistas que están situadas en una determinada posición del brazo forman
un cilindro (Por la figura geométrica que forman las cabezas al moverse en paralelo simultáneamente sobre
los discos).

La capacidad puede calcularse como:

Capacidad = Cilindros * pistas * sectores * tamaño del sector.

EL tiempo para servir una petición como:

Tiempo= Tiempo de búsqueda + retardo rotacional + tiempo de transferencia.

Cuando se está usando el disco, un motor hace que gire a una velocidad constante. La mayoría de los
motores rotan entre 60 y 200 veces por segundo.

Para leer o escribir la cabeza se debe posicionar en la pista deseada y en el principio del sector requerido de
dicha pista.

EL tiempo que se tarda en situar la cabeza en la pista se denomina “Tiempo de búsqueda”. Una vez que se
selecciona la pista, el controlador del disco espera hasta que el sector apropiado rote debajo de la cabeza. El
tiempo que tarda en llegar el comienzo del sector hasta debajo de la cabeza se conoce como “Retardo
rotacional”, o “Latencia rotacional”, también “Tiempo de latencia”). La suma del tiempo de búsqueda y el
retardo rotacional dan lugar al tiempo de acedo, que es el tiempo que se tarda en llegar a estar en posición
para realizar la lectura o escritura. Una vez que la cabeza está en posición, la operación de lectura o escritura
se realiza cuando el sector se mueve debajo de la cabeza, esta es la parte de la transferencia de datos de la
operación, el tiempo requerido para la transferencia es el tiempo de transferencia.
Puesto que el cabezal del disco vuela sobre un colchón de aire extremadamente fino, existe el peligro de que
el cabezal entre en contacto con la superficie del disco. Aunque los platos del disco están recubiertos de una
fina capa protectora, a veces el cabezal puede llegar a dañar la superficie magnética, siendo necesario
sustituir el disco.
Para conectar una unidad de disco a una computadora se utiliza un conjunto de cables denominados bus de
E/S. Hay disponibles varios tipos de buses, incluyendo ATA, SATA, USB etc...

Los parámetros de configuración física de un disco dependen de dos cosas.

1) El diseño del fabricante, que define su velocidad de rotación, ancho de banda del bus etc…
2) La operación de formato físico, que define el tamaño del sector y l posición de los sectores en las
pistas. Los discos duros suelen venir con formato físico de fábrica.

Tiempo de búsqueda:
El tiempo de búsqueda es el tiempo requerido par amover el brazo del disco a la pista requerida. El tiempo
de búsqueda consta de dos componentes fundamentales: El tiempo de arranque inicial y el tiempo que se
tarda en atravesar las pistas que tienen que cruzarse una vez que el brazo de acceso empieza a moverse. Por
desgracia el tiempo para atravesar las pistas no es una función lineal del número de pistas sino que incluye
un tiempo de establecimiento (el tiempo que transcurre desde un tiempo normal de búsqueda medio en los
discos duros actuales está por debajo de los 10 milisegundos).

Retarde rotacional:
Los discos rotan a velocidades que van desde los 3600 rpm hasta 15000 rpm, a esta última velocidad se
produce una revolución cada 4 milisegundos.

Tiempo de transferencia:
El tiempo de transferencia de un disco depende de la velocidad de rotación de acuerdo con la siguiente
expresión:

T= b/rN

Donde:

T= Tiempo de transferencia.

B= Numero de bytes que se usan a transferir.

N= Numero de bytes en una pista.

R= Velocidad de rotación.
Por lo tanto, el tiempo de acceso total medio se puede expresar de la siguiente manera:

Tt = Tb + 1/2r + b/rN. Donde Tb es el tiempo de búsqueda medio


4.4.Parametros de rendimiento de disco duro.
Factores que influyen en el rendimiento del disco:
 Densidad de cada pista: EN los discos modernos las pistas tienen distinta densidad, por lo que el
número de sectores varía de unas pistas a otras. Si se mantiene el número de bytes constantes por
pista, las pistas más pequeñas tienen mayor densidad, lo que afecta mucho al controlador. Los
controladores SCSI e IDE son de este tipo.
 Intercalado de sectores: El controlador debe emplear tiempo en copiar los datos leídos a memoria
principal. Durante este tiempo no puede estar transfiriendo datos del disco, que se sigue moviendo
a velocidad constante, lo que significa que si se quiere leer el sector siguiente, deberá esperar a que
las cabezas lectoras den una vuelta y lleguen de nuevo a ese bloque. Una solución a este problema
es intercalar sectores del disco de forma que no sean consecutivos. Por ejemplo: En un disco se
pueden colocar los bloques con un factor de entrelazado, de forma que en una pista de ocho
sectores seria: 0, 3, 6, 1, 4, 7, 2,5. Así, una vez transmitidos los datos del controlador, las cabezas
están colocadas sobre el siguiente bloque a leer. El factor de entrelazado se puede definir cuándo
se hace el formato físico del disco.
 Almacenamiento intermedio en el controlador: La existencia de memoria en el controlador permite
optimizar mucho las operaciones de E/S ya que en lugar de leer sectores sueltos de una pista se
puede optar por leer la pista entera y mantenerla en memoria dl controlador. Si las peticiones de
E/S, son para archivos contiguos en disco, el rendimiento se puede incrementar considerablemente.
 Controladores inteligentes: Cuando controlan carios dispositivos, permiten efectuar operaciones de
búsqueda de forma solapada, como si funcionaran guiados por interrupciones. De esta forma
pueden solapar carios tiempos de búsquedas mejorando mucho el rendimiento global del Sistema.
Obviamente, esta optimización no es posible mientras se efectúa transferencia de datos ya que el
bus del controlador está ocupado
Algoritmos o políticas de planificación:

- Política FIFO: Es la forma más sencilla de planificación, procesa las peticiones en orden
secuencial. Esta estrategia tienen la ventaja de ser equitativa, porque toda petición se
acaba sirviendo y además las peticiones se sirven en el orden recibido.
Pero su desventaja es que generalmente no permite optimizar el tiempo de búsqueda
especialmente cuando hay que desplazarse a posiciones muy alejadas.
- Política SSF: Primero el trabajo más cortó. Consiste en seleccionar la petición de disco que
requiera un menor movimiento del brazo desde su posición actual. De este modo, siempre
se realiza una selección de manera que se produzca el mínimo tiempo de búsqueda.
Sin embargo este algoritmo tiene un serio problema, se puede producir inanición de
algunas solicitudes. Debido a que las peticiones pueden llegar en todo momento, siempre
se da prioridad a las solicitudes más próximas por lo que peticiones más alejadas pueden
sufrir un retraso o espera indefinida. Aquí la equidad es un conflicto.
- Política SCAN o Algoritmo del ascensor: Su nombre se debe a que es la política que se usa
en edificios altos para controlar eficientemente los ascensores. Esta política consiste en
mover las cabezas de un extremo a otro del disco, sirviendo todas las peticiones que van
en ese sentido. Al volver se sirven todas las del sentido contrario. El cabezal está
continuamente explorando el disco en una y otra dirección. Además requiere que el
software mantenga 1 bit de control de la dirección actual (Arriba o abajo).
EL comportamiento de este algoritmo es óptimo cuando las peticione se distribuyen
uniformemente por todo el disco, pero es algo que casi nunca ocurre. El tiempo de
búsqueda es menor que un FCFS pero considerablemente mayor a un SSF, debido
fundamentalmente al último desplazo que obliga a recorrer el disco entero.
Una buena propiedad que tiene este algoritmo es que dada cierta colección de peticiones,
el límite superior en el movimiento total es fijo, solo es el doble del número de cilindros.
Puede retrasar mucho algunas peticiones si no se insertan en el momento adecuado.
- Política C-SCAN (Cyclic Scan): Es una variación de la SCAN, para mejorar el tiempo de
respuesta o espera del disco.
C-Scan mueve el cabezal de un extremo al otro, atendiendo las peticiones en ese sentido,
sin embargo cuando el cabezal alcanza el otro extremo, vuelve al principio del disco, sin
atender a ninguna petición de vuelta.
El tiempo de respuesta de este algoritmo es mucho menor que el Scan, y casi similar a SSF.
En dispositivos con muchas peticiones de E/S, esta política tiene un rendimiento medio
superior a las otras.
- Planificación LOOK: Es una optimización de la política-SCAN, consiste en evitar el
desplazamiento hasta el final del disco, es decir volviendo de la última petición en un
sentido a la primera del otro.
Se denomina LOOK, ya que este algoritmo mira (Look), si hay una petición antes de
continuar moviéndose en una determinada dirección.

EL algoritmo C-SCAN es el más usado actualmente. Se usa en prácticamente todas las versiones de
UNIX, LINUX y Windows, debido a que da el mejor rendimiento en Sistemas muy cargados. Sin
embargo su rendimiento depende mucho de la distribución de las operaciones de E/S por el disco
y de la situación de los bloques que se acceden con más frecuencia. Por ellos, suele ser una técnica
habitual en el Sistema Operativo situar en el centro del disco aquellos datos que se acceden más a
menudo.

- Política SCAN de N pasos: Divide la cola de peticiones del disco en varias colas de longitud
N. En cada momento se procesa solo una cola, utilizando SCAN. Mientras se está
procesando una cola, las nuevas peticiones se deben añadir a otra cola. Si hay menos de N
peticiones disponibles al final de una búsqueda, todas ellas se procesan en la próxima
búsqueda.
Para valores grandes de N, el rendimiento de SCAN de N pasos se aproxima al de SCAN,
para un valor de N=1 se convierte en una política FIFO.
- FSCAN: Es una política que utiliza dos colas. Cuando comienza una búsqueda, todas las
peticiones están incluidas en una de las colas, estando la otra vacía. Durante la búsqueda,
todas las nuevas peticiones se incluyen en la otra cola. Por lo tanto, se difiere el servicio de
las nuevas peticiones hasta que se han procesado todas las peticiones antiguas.
Existen otras políticas para casos de las aplicaciones de tiempo real y multimedia como las
políticas EDF, SCAN EDF, SCANRT.

También podría gustarte