Professional Documents
Culture Documents
Como se ha dicho antes, los sistemas operativos son sistemas muy grandes
y complejos: sólo podemos crear un sistema operativo dividiéndolo en fragmentos
más pequeños. Cada uno de éstos debe ser una parte bien definida del sistema que
tenga su función, sus entradas y sus salidas perfectamente definidas.
No todos los sistemas tienen la misma estructura, pero la gran parte de los
sistemas operativos que existen actualmente utilizan la estructura de componentes
que se presenta en los siguientes puntos del temario.
todas las instrucciones de los programas, por lo que es necesario que el sistema
proporcione un soporte diferente para poder almacenar toda esa información, este
soporte es lo que se conoce como almacenamiento secundario. La mayoría de los
sistemas de computación modernos utilizan discos como principal medio de
almacenamiento, tanto para programas como para datos. La mayor parte de los
programas se almacenan en disco hasta que se cargan en la memoria, y luego
utilizan el disco como fuente y destino de su actividad. Por tanto, la adecuada
administración del almacenamiento en disco tiene una importancia decisiva para el
sistema de computación.
concepto de archivo, están los directorios, que son una forma de englobar distintos
archivos que están relacionados.
Otra función del Sistema Operativo, relacionada con la administración de
archivos, es la del control de acceso a los mismos. Normalmente, los sistemas de
computación son usados por distintos usuarios, es necesario que el Sistema
Operativo controle el acceso de dichos usuarios a los archivos que se almacenan en
los dispositivos del sistema.
1.1.7. Redes.
Hoy en día, el uso de redes de ordenadores está muy extendido, con todos
los beneficios que nos proporcionan: compartición de recursos, reducción de costes,
acceso a información en computadores remotos,... Los Sistema Operativos actuales
tienen que proporcionar los recursos necesarios para la utilización de las redes de
computadores.
Los computadores independientes de antaño, han evolucionado a sistemas
más complejos que se comunican entre ellos. Un sistema distribuido es un conjunto
de procesadores que no comparten memoria ni reloj, pues cada uno tiene su propia
memoria y los procesos se comunican entre sí a través de diversos medios, como
canales de alta velocidad o líneas telefónicas. Los procesadores de un sistema
distribuido pueden variar en tamaño y función, e incluyen pequeños
2. Llamadas al sistema.
Una vez que el programa ha obtenido los nombres de los dos archivos, debe
abrir el archivo de entrada y crear el de salida; cada una de estas operaciones
requiere otra llamada al sistema. También existen posibles condiciones de error
para cada operación: cuando el programa trata de abrir el archivo de entrada,
puede encontrar que no hay ningún archivo con ese nombre o que está protegido
contra el acceso. En estas situaciones, el programa debe imprimir un mensaje en la
consola (otra serie de llamadas al sistema) y luego terminar anormalmente (otra
llamada al sistema). Si existe el archivo de entrada, entonces debemos crear un
nuevo archivo de salida. Es posible encontrar que ya existe un archivo de salida con
ese mismo nombre, situación que puede ocasionar que el programa aborte ( una
llamada al sistema) o podemos eliminar el archivo existente (otra llamada al
sistema) y crear uno nuevo (otra llamada al sistema). En un sistema interactivo,
otra opción es preguntar al usuario (una serie de llamadas al sistema para
presentar el mensaje de solicitud y leer la respuesta de la terminal) si se debe
sustituir el archivo existente o abortar.
Ahora que los dos archivos están listos, debemos entrar en el ciclo que lee
del archivo de entrada (una llamada al sistema) y escribe en el de salida (otra
llamada al sistema). Cada lectura y escritura debe devolver información de estado
relacionada con las posibles condiciones de error. En la entrada, el programa puede
encontrar que se ha alcanzado el fin del archivo o que durante la lectura se
A este método se conoce como espera activa, ya que la CPU necesita realizar
un seguimiento del estado de la E/S y, por consiguiente, está activa mientras
espera que termine la E/S. Aunque en teoría es cierto que la CPU podría efectuar
algún otro procesamiento y regresar más tarde a imprimir el siguiente carácter, en
la práctica esto no siempre es posible. Considere que aunque se emplea un
dispositivo de entrada de alta velocidad, la CPU seguirá siendo más rápida, y por
tanto, deberá esperar entre una y otra entrada. No obstante, si la CPU cambia a
otra tarea para evitar esta pérdida de tiempo, se presenta el riesgo de omitir parte
de la entrada, ya que durante ese lapso se pueden recibir dos entradas. La E/S
basada en interrupciones se presenta como la mejor solución para esta situación.
Para realizar una operación de E/S, la CPU modifica los valores de los
registros del controlador para indicarle que debe de realizar una operación, por
ejemplo de lectura de datos del dispositivo. A continuación, mientras la CPU
continúa con su trabajo, el controlador analiza el valor de sus registros para saber
qué operación debe de realizar. Al ver que es una operación de lectura, comienza a
trasladar datos desde el dispositivo a su buffer local. Al terminar, el dispositivo
tiene que informar a la CPU de que ha rematado la operación. Esta comunicación se
produce mediante una interrupción.
4. Estructura de E/S.
Se trata de un ciclo muy cerrado que continúa hasta que ocurre una
interrupción, lo cual transfiere el control a otra parte del sistema operativo. La
instrucción de espera es probablemente mejor, ya que un ciclo de espera genera
una serie de búsquedas de instrucciones, lo que puede causar una contienda
significativa por el acceso a memoria. La contienda es provocada por el dispositivo
de E/S que transfiere información y la CPU que transfiere instrucciones.
Una gran ventaja de esperar siempre a que termine la E/S es que como
máximo hay una solicitud de E/S pendiente en cada ocasión, de manera que al
ocurrir una interrupción de E/S, el sistema operativo sabe exactamente cuál es el
dispositivo que interrumpe. Por otra parte, este método excluye al procesamiento
de E/S.
Este método funciona bien siempre que el hardware detecte el error. Sin
embargo, debemos asegurarnos de que se detecten todos los errores y proteger al
sistema operativo, así como a todos los demás programas y datos, de cualquier
programa que no funcione correctamente. Se requiere protección para cualquier
recurso compartido. La estrategia que se utiliza es proporcionar apoyo del hardware
que permita distinguir entre diversos modos de ejecución. Por lo menos
necesitamos dos modos de operación distintos: modo usuario y modo monitor
(también llamado modo de supervisión o modo de sistema). Se añade un bit,
llamado bit de modo, al hardware del computador para indicar el modo actual:
monitor (0) o usuario (1). Con el bit de modo podemos distinguir entre una
ejecución efectuada por el sistema operativo y una efectuada por el usuario.
El enfoque por capas se empleó por primera vez en el sistema operativo THE
en la Technische Hogeschool Eindhoven; THE se definió en seis capas. La capa más
baja era el hardware; la siguiente implantaba la planificación de la CPU y la tercera
La mayor dificultad con el enfoque por capas es definir los niveles en los que
se va a definir el sistema: como una capa sólo puede utilizar las capas inferiores, es
necesaria una buena planificación.
7. Máquina virtuales.
Algunos sistemas extienden este esquema aún más, permitiendo que los
programas del sistema puedan llamarse fácilmente desde las aplicaciones. Como
antes, aunque los programas del sistema se encuentran en un nivel superior al de
las otras rutinas, las aplicaciones pueden considerar que todo se encuentra por
debajo de ellas en la jerarquía, como si esas rutinas formaran parte de la misma
máquina. Este enfoque por capas tiene su conclusión lógica en el concepto de
máquina virtual.
Los recursos del computador físico se comparten para crear las máquinas
virtuales. Puede entonces planificarse la CPU para compartirla y aparentar que los
usuarios cuentan con su propio procesador. Con la utilización de spoolers y un
sistema de archivos se puede proporcionar lectores de tarjetas e impresoras de
líneas virtuales. Una terminal normal de tiempo compartido ofrece al usuario la
función de la consola del operador de la máquina virtual.
Por supuesto, la principal diferencia es el tiempo; mientras que una E/S real
podría ocupar 100 milisegundos, la E/S virtual podría requerir menos tiempo (por
encontrarse en el spooler) o más (por ser interpretada). Además, la CPU se
multiprograma entre varias máquinas virtuales, lo que las hace impredeciblemente
más lentas; en un caso extremo, puede ser necesario simular todas las
instrucciones para ofrecer una verdadera máquina virtual.
Dado que las instrucciones de E/S son privilegiadas, sólo las puede ejecutar
el sistema operativo. Entonces, ¿cómo lleva a cabo la E/S un programa de usuario?.
Al hacer privilegiadas las instrucciones de E/S, hemos evitado que los programas de
usuario efectúen cualquier E/S, esté permitida o no. La solución a este problema es
que, puesto que únicamente el monitor puede llevar a cabo la E/S, el usuario debe
pedir al monitor que la efectúe en su nombre.
Así, para realizar una operación de E/S, el programa de usuario ejecuta una
llamada al sistema para solicitar que el sistema operativo lleve a cabo su operación
de E/S. El sistema operativo, que se ejecuta en modo monitor, revisa la validez de
la solicitud y, si lo es, realiza la E/S solicitada. El sistema operativo devuelve
entonces el control al usuario.
complejos que los ASMP, contemplan un mejor balance de la carga y son más
tolerantes a fallos (de manera que si un subproceso del SO falla, el SO no se
caerá pues podrá ejecutarse sobre otra CPU, cosa que en los ASMP no sería
posible, con lo que se bloquearía el sistema entero).
Son una serie de procesos servidores que se ejecutan en modo usuario como
cualquier proceso de usuario, pero que tienen algunas características propias que
los hacen distintos. Se inician al arrancar el SO. Los hay de dos tipos: integrales y
de entorno.
Un Subsistema Integral: es aquel servidor que ejecuta una función crítica del SO
(como por ejemplo el que gestiona la seguridad). Tenemos los siguientes:
El Subsistema de Seguridad
Un Subsistema de Entorno
El Subsistema Win32
El subsistema soporta una buena parte del API Win32. Así, se encarga de
todo lo relacionado con la interfaz gráfica con el usuario (GUI), controlando las
entradas del usuario y salidas de la aplicación.
El Subsistema POSIX
El Subsistema OS/2
9.1.3. El Executive
El administrador de caches
Trabaja en conjunción con otros componentes del Executive, sobre todo con
el Administrador de Memoria Virtual. Le proporciona la E/S síncrona y asíncrona, la
E/S a archivos asignados en memoria y las caches de los ficheros.
El Núcleo (Kernel)
• Ejecución de subprocesos
• Sincronización multiprocesador
Las LPC se pueden considerar una versión de las RPC. Se usan cuando un
proceso necesita los servicios de algún subsistema protegido, típicamente Win32.
9.1.4.1. Planificación del Tiempo de la CPU por Round Robin con Prioridades
Existe un anillo o cola circular por cada uno de los niveles de prioridad. En
cada anillo están los subprocesos de la misma prioridad. El Executive comienza a
repartir el tiempo de CPU en el primer anillo de mayor prioridad no vacío. A cada
uno de esos subprocesos se les asigna secuencialmente la CPU durante el tiempo
de un quantum, como ya indicamos antes. Cuando todos los subprocesos de nivel
de prioridad n están dormidos, el Executive comienza a ejecutar los del nivel (n-1),
siguiendo el mismo mecanismo.
Así como un proceso tiene una prioridad oscilando entre cuatro clases, un
subproceso puede tener cualquier valor en el rango [1,31]. En principio, cuando el
subproceso es creado, su prioridad es la correspondiente a la de la clase de su
proceso padre. Pero este valor puede ser modificado.
• Direcciones para las DLL del sistema (NTDLL, KERNEL32, USER32, GDI32
...).
Hay que tener en cuenta que aunque existan páginas libres en la memoria,
si el proceso agota su número de páginas asignadas, se producirá el intercambio de
páginas (swapping), y además de una de sus propias páginas. Este mecanismo
puede parecer ilógico, pero presenta tanto ventajas como inconvenientes. Una de
los principales problemas es que si un proceso estuviera gran parte del tiempo
dormido (en espera de un suceso o de una E/S), dicho proceso estaría ocupando
páginas físicas que de otro modo podrían ser descargadas. Como ventaja tenemos
que, con este esquema, procesos que requieran muchos recursos no dejarán fuera
de juego a aquellos cuya demanda de memoria sea escasa. No obstante, el
problema planteado es paliado en gran medida por una parte del VMM llamada
gestor del conjunto de trabajo. Realiza dos funciones fundamentales:
• Por otro lado, y también de forma periódica, roba a los procesos páginas
físicas, elegidas de entre las menos recientemente usadas por cada uno.
Este procedimiento se realiza con la frecuencia necesaria para que los
procesos no se ralenticen demasiado por los fallos de página. El objetivo de
esto es mantener una reserva de páginas para que una repentina demanda
no ocasione una caída en prestaciones del sistema completo. Por ejemplo,
cuando se inicia un proceso nuevo se suele requerir una cantidad
considerable de páginas.
Para llevar a cabo estas tareas, las páginas físicas se clasifican en una de cuatro
listas que son mantenidos por el gestor del conjunto de trabajo:
NTFS Windows NT
CDFS Windows NT
• Nivel 5: es el nivel más usual; es igual que el4, pero no usa un disco
separado para almacenar los códigos de paridad, sino que divide igualmente
esos códigos y los distribuye por los disco, intentando que no coincidan en la
misma zona de disco datos de un fichero con sus códigos de paridad
correspondientes.
En NTFS, al igual que en los Sistemas de ficheros de UNIX, existen una serie de
permisos sobre ficheros y directorios, que son los siguientes: lectura (R), escritura
(W), ejecución (X), borrado (D), cambio de permisos (P) y ser el nuevo propietario
(O). Todo fichero y directorio tienen un propietario, que puede conceder permisos
sobre ellos. El Administrador del sistema puede tomar la propiedad de cualquier
fichero o directorio sobre NTFS, pero no transferirla de nuevo a ningún otro usuario,
a diferencia de UNIX, ni siquiera a su dueño original.
Sistemas de
Ventajas Desventajas
Archivos
9.1.7. Entrada/Salida
misma manera sin tener conocimiento de cual de los dispositivos esta controlando
actualmente. El Manejador de E/S también incluye rutinas especiales designadas
para soporte de manejadores de sistemas de archivo, de dispositivos de hardware y
de dispositivos de red.
Manejador de cache
Manejadores de red
- Paso de parámetros.
En términos generales, cada vez que algún usuario oprime una tecla de una
terminal, o que se debe leer o escribir información del disco magnético, el núcleo se
encarga de efectuar la operación de transferencia.
Después de haber creado el proceso 0, se hace una copia del mismo, con lo
que se crea el proceso 1; éste muy pronto se encargará de "dar vida" al sistema
completo, mediante la activación de otros procesos que también forman parte del
núcleo. Es decir, se inicia una cadena de activaciones de procesos. A partir de ese
momento se conoce el número 1 como proceso de inicialización del sistema (init).
Init crea otro proceso, que espera pacientemente a que alguien entre en
sesión en alguna línea de comunicación. Cuando esto sucede, realiza ajustes en el
protocolo de la línea y ejecuta el programa login, que se encarga de atender
inicialmente a los nuevos usuarios. Si la clave del usuario, y la contraseña
proporcionadas son las correctas, entonces entra en operación el programa Shell,
que en lo sucesivo se encargará de la atención normal del usuario que se dio de
alta en esa terminal.
La shell del sistema proporciona las ordenes necesarias para hacer diversas
manipulaciones, como crear directorios, moverse dentro del sistema de archivos,
copiarlos, etcétera.
El control del espacio libre en el disco se mantiene mediante una lista ligada
de bloques disponibles. Cada bloque contiene la dirección en disco del siguiente
bloque en la cadena. El espacio restante contiene las direcciones de grupos de
bloques del disco que se encuentren libres. De esta forma, con una operación de
E/S, el sistema obtiene un conjunto de bloques libres y un apuntador para
conseguir más.
nodo-i de todo archivo. Además, existen otros tres bits que se emplean para
manejos especiales, relacionados con la clave del superusuario.
Existe una tabla de procesos que contiene una entrada por cada uno de ellos
con los datos que requiere el sistema:
• Identificación
en un pipe ocupado, debe esperar a que el receptor lea los datos pendientes. Lo
mismo ocurre en el caso de una lectura de datos inexistentes: el proceso que
intenta leer debe esperar a que el proceso productor deposite los datos en el canal
de intercomunicación.
Está claro que el proceso que se encarga de los intercambios entre memoria
y disco (llamado swapper) debe ser especial y jamás podrá perder su posición
privilegiada en la memoria central. El Kernel se encarga de que nadie intente
siquiera interrumpir este proceso, del cual dependen todos los demás. Este es el
proceso 0 mencionado antes. Cuando se decide traer a la memoria principal un
proceso en estado de "listo para ejecutar", se le asigna memoria y se copian allí sus
segmentos. Entonces, el proceso cargado compite por el procesador con todos los
demás procesos cargados. Si no hay suficiente memoria, el proceso de intercambio
examina la tabla de procesos para determinar cuál puede ser interrumpido y
llevado al disco.
Para realizar las operaciones de E/S, el Sistema Operativo emplea una serie
de rutinas generales para los distintos dispositivos. Esto permite que desde el punto
de vista del usuario, no se encuentren grandes diferencias entre emplear un
dispositivo y otro. No existe distinción entre acceso aleatorio y secuencial, ni hay un
tamaño de registro lógico impuesto por el sistema. El tamaño de un archivo
ordinario está determinado por el número de bytes escritos en él; no es necesario
predeterminar el tamaño de un archivo.