Download 1 Introducción a los sistemas operativos. Un Sistema Operativo (SO

Document related concepts

Sistema operativo wikipedia , lookup

Núcleo (informática) wikipedia , lookup

Servidor wikipedia , lookup

Arquitectura de Windows NT wikipedia , lookup

BIOS wikipedia , lookup

Transcript
1 Introducción a los sistemas operativos.
Un Sistema Operativo (SO) es una colección organizada de rutinas o extensiones de software
del hardware. Consiste en rutinas de control que hacen funcionar una computadora y
proporcionan un entorno para la ejecución de los programas. Existen otros programas que se
apoyan en el SO para poder acceder a los recursos que necesitan. Esto se lleva a cabo a través
de llamadas sistema operativo. También el SO debe brindar una forma de que el usuario se
pueda comunicar con él a través de una interfaz que le brinde una vía de comunicación con el
hardware del sistema informático.
El objetivo principal del SO es lograr que el sistema informático es el lograr que el hardware de
la computadora se emplee de modo eficiente, y el objetivo secundario se use de manera
cómoda.
El SO debe asegurar el correcto funcionamiento del sistema informático. Para lograr esto el
hardware debe brindar algún mecanismo apropiado que impida que los usuarios intervengan
en el funcionamiento del sistema y así mismo el SO debe poder utilizar este recurso de
hardware de modo que esto se cumpla.
El SO debe ofrecer servicios a los programas y sus usuarios para facilitar la tarea de
programación.
1.1 Definición, objetivos y funciones de un S.O.
Un sistema operativo es un programa que actúa como intermediario entre el usuario y el
hardware de un computador y su propósito es proporcionar un entorno en el cual el usuario
pueda ejecutar programas. El objetivo principal de un sistema operativo es lograr que el
sistema de computación se use de manera cómoda, y el objetivo secundario es que el
hardware
del
computador
se
emplee
de
manera
eficiente.
Un sistema Operativo (SO) es en sí mismo un programa de computadora. Sin embargo, es un
programa muy especial, quizá el más complejo e importante en una computadora. El SO
despierta a la computadora y hace que reconozca a la CPU, la memoria, el teclado, el sistema
de vídeo y las unidades de disco. Además, proporciona la facilidad para que los usuarios se
comuniquen con la computadora y sirve de plataforma a partir de la cual se corran programas
de
aplicación.
Cuando enciendes una computadora, lo primero que ésta hace es llevar a cabo un
autodiagnóstico llamado auto prueba de encendido (Power On Self Test, POST). Durante la
POST, la computadora identifica su memoria, sus discos, su teclado, su sistema de vídeo y
cualquier otro dispositivo conectado a ella. Lo siguiente que la computadora hace es buscar un
SO
para
arrancar
(boot).
Una vez que la computadora ha puesto en marcha su SO, mantiene al menos parte de éste en
su memoria en todo momento. Mientras la computadora esté encendida, el SO tiene 4 tareas
principales:


Proporcionar ya sea una interfaz de línea de comando o una interfaz gráfica al usuario,
para que este último se pueda comunicar con la computadora. Interfaz de línea de
comando: tú introduces palabras y símbolos desde el teclado de la computadora, ejemplo,
el MS-DOS. Interfaz gráfica del Usuario (GUI), seleccionas las acciones mediante el uso de
un Mouse para pulsar sobre figuras llamadas iconos o seleccionar opciones de los menús.
Administrar los dispositivos de hardware en la computadora. Cuando corren los
programas, necesitan utilizar la memoria, el monitor, las unidades de disco, los puertos de


Entrada/Salida (impresoras, módems, etc.). El SO sirve de intermediario entre los
programas y el hardware.
Administrar y mantener los sistemas de archivo de disco. Los SO agrupan la
información dentro de compartimientos lógicos para almacenarlos en el disco. Estos grupos
de información son llamados archivos. Los archivos pueden contener instrucciones de
programas o información creada por el usuario. El SO mantiene una lista de los archivos en
un disco, y nos proporciona las herramientas necesarias para organizar y manipular estos
archivos.
Apoyar a otros programas. Otra de las funciones importantes del SO es proporcionar
servicios a otros programas. Estos servicios son similares a aquellos que el SO proporciona
directamente a los usuarios. Por ejemplo, listar los archivos, grabarlos a disco, eliminar
archivos, revisar espacio disponible, etc. Cuando los programadores escriben programas de
computadora, incluyen en sus programas instrucciones que solicitan los servicios del SO.
Estas instrucciones son conocidas como "llamadas del sistema"
Objetivos de los sistemas Operativos.


Transformar el complejo hardware de una computadora a una máquina accesible al
usuario.
Lograr el mejor uso posible de los recursos. Hacer eficiente el uso del recurso.
El objetivo fundamental de los sistemas de computación es ejecutar los programas de los
usuarios y facilitar la resolución de sus problemas. El hardware se construye con este fin, pero
como este no es fácil de utilizar, se desarrollan programas de aplicación que requieren ciertas
operaciones comunes, como el control de dispositivos de E/S. las funciones comunes de
control y de asignación de recursos se integran para formar un solo fragmento de software: el
sistema operativo.
Desarrollo
histórico
de
los
sistemas
operativos.
En un principio solo existía el hardware del computador. Los primeros computadores eran
(físicamente) grandes maquinas que se operaban desde una consola. El programador escribía
un programa y luego lo controlaba directamente desde la consola. En primer lugar, el
programa se cargaba manualmente en la memoria, desde los interruptores del tablero frontal
(una instrucción en cada ocasión), desde una cinta de papel o desde tarjetas perforadas. Luego
se pulsaban los botones adecuados para establecer la dirección de inicio y comenzar la
ejecución del programa. Mientras este se ejecutaba, el programador-operador lo podía
supervisar observando las luces en la consola, si se descubrían errores, el programador podía
detener el programa, examinar el contenido de la memoria y los registros y depurar el
programa directamente desde la consola. La salida del programa se imprimía, o se perforaba
en
cintas
de
papel
o
tarjetas
para
su
impresión
posterior.
Sin embargo, con este procedimiento se presentaban ciertos problemas. Supongamos que un
usuario se había registrado para usar una hora de tiempo del computador dedicada a ejecutar
el programa que estaba desarrollando, pero se topaba con algún error difícil y no podía
terminar en esa hora. Si alguien más había reservado el siguiente bloque de tiempo, usted
debía detenerse, rescatar lo que pudiera y volver mas tarde para continuar. Por otra parte, si
el programa se ejecutaba sin problemas, podría terminar en 35 minutos; pero como pensó que
necesitaría la maquina durante más tiempo, se registro para usarla una hora, y permanecería
inactiva
durante
25
minutos.
Conforme transcurrió el tiempo, se desarrollaron software y hardware adicionales; empezaron
a popularizarse los lectores de tarjetas, impresoras de líneas y cintas magnéticas; se diseñaron
ensambladores, cargadores y ligadores para facilitar las tareas de programación, y se crearon
bibliotecas de funciones comunes, de manera que estas podían copiarse a un nuevo programa
sin
tener
que
escribirlas
de
nuevo.
Las rutinas que efectuaban operaciones de E/S tenían una importancia especial. Cada nuevo
dispositivo de E/S poseía sus propias características, lo que requería una cuidadosa
programación. Así mismo, para cada uno de ellos se escribía una subrutina especial, la cual se
denominaba manejador de dispositivos. Este sabe como deben de usarse los buffers,
indicadores, registros, bits de control y bits de estado para cada dispositivo. Cada tipo de
dispositivo tenía su propio manejador. Una tarea sencilla, como leer un carácter de un lector
de cinta de papel, podía conllevar complicadas secuencias de operaciones específicas para el
dispositivo. En lugar de tener que escribir cada vez el código necesario, bastaba usar el
manejador
de
dispositivo
de
la
biblioteca.
Más tarde aparecieron los compiladores de FORTRAN, COBOL y otros lenguajes, lo que facilito
la tarea de programación, pero hizo más complejo el funcionamiento del computador. Por
ejemplo, al preparar la ejecución de un programa en FORTRAN, el programador primero
necesitaba cargar en el computador el compilador de FORTRAN, que generalmente se
conservaba en una cinta magnética, por lo que había que montar la cinta adecuada en la
unidad correspondiente. El programa se leía a través del lector de tarjetas y se escribía en otra
cinta. El compilador de FORTRAN producía una salida en lenguaje ensamblador, que luego
tenia que ensamblarse, para esto era necesario montar otra cinta con el ensamblador, y su
salida debía enlazarse con las rutinas de apoyo de las bibliotecas. Finalmente, el programa
objeto, en código binario, estaba listo para ejecutarse; se cargaba en memoria y se depuraba
desde la consola como antes.
Funciones y características de los sistemas operativos.
Funciones
de
los
sistemas
operativos.
1.Aceptar
todos
los
trabajos
y
conservarlos
hasta
su
finalización.
2.- Interpretación de comandos: Interpreta los comandos que permiten al usuario comunicarse
con
el
ordenador.
3.- Control de recursos: Coordina y manipula el hardware de la computadora, como la
memoria, las impresoras, las unidades de disco, el teclado o el Mouse.
4.- Manejo de dispositivos de E/S: Organiza los archivos en diversos dispositivos de
almacenamiento, como discos flexibles, discos duros, discos compactos o cintas magnéticas.
5.- Manejo de errores: Gestiona los errores de hardware y la pérdida de datos.
6.- Secuencia de tareas: El sistema operativo debe administrar la manera en que se reparten
los procesos. Definir el orden. (Quien va primero y quien después).
7.- Protección: Evitar que las acciones de un usuario afecten el trabajo que esta realizando otro
usuario.
8.- Multiacceso: Un usuario se puede conectar a otra máquina sin tener que estar cerca de ella.
9.- Contabilidad de recursos: establece el costo que se le cobra a un usuario por utilizar
determinados recursos.
Características
de
los
sistemas
operativos.
En general, se puede decir que un Sistema Operativo tiene las siguientes características:



Conveniencia. Un Sistema Operativo hace más conveniente el uso de una
computadora.
Eficiencia. Un Sistema Operativo permite que los recursos de la computadora se usen
de la manera más eficiente posible.
Habilidad para evolucionar. Un Sistema Operativo deberá construirse de manera que
permita el desarrollo, prueba o introducción efectiva de nuevas funciones del sistema sin
interferir con el servicio.






Encargado de administrar el hardware. El Sistema Operativo se encarga de manejar de
una mejor manera los recursos de la computadora en cuanto a hardware se refiere, esto es,
asignar a cada proceso una parte del procesador para poder compartir los recursos.
Relacionar dispositivos (gestionar a través del kernel). El Sistema Operativo se debe
encargar de comunicar a los dispositivos periféricos, cuando el usuario así lo requiera.
Organizar datos para acceso rápido y seguro.
Manejar las comunicaciones en red. El Sistema Operativo permite al usuario manejar
con alta facilidad todo lo referente a la instalación y uso de las redes de computadoras.
Procesamiento por bytes de flujo a través del bus de datos.
Facilitar las entradas y salidas. Un Sistema Operativo debe hacerle fácil al usuario el
acceso y manejo de los dispositivos de Entrada/Salida de la computadora.
1.2 Historia y evolución de los S.O.
HISTORIA Y EVOLUCION DE LOS SISTEMAS OPERATIVOS
Introduccion
Los sistemas operativos han venido evolucionando a través de los años . ya que
los sistemas operativos se han apegado íntimamente a la arquitectura de las
computadoras en las cuales se ejecutan .
La primera computadora digital real fue diseñada por el matemático ingles
Charles Babbage ( 1792 - 1871) . Aunque Babbage gasto la mayor parte de su
vida y de su fortuna intentando construir su “ maquina analítica “ , nunca la hizo
funcionar adecuadamente porque era un diseño puramente mecánico y la
tecnología de su época no podía producir las ruedas, el engranaje, levas y otras
partes mecánicas con la alta precisión que el necesitaba. Sin tener que decirlo, la
maquina analítica no tuvo un sistema operativo.
La primera generacion (1945 - 1955 ) : Tubos de vacio y tableros enchufables
Después de los esfuerzos frustrados de Babbage, se progresó poco en la
construcción de computadoras digitales hasta la segunda guerra mundial,
alrededor de la mitad de la década de 1940, Howard Aiken en Hardvard, Jon Von
Neumann en el Instituto de Estudios Avanzados en Princeton, J. Presper Ecker y
William Mauchley en la Universidad de Pennsylvania y Konrad Zuse en
Alemania, entre otros, todos obtuvieron resultados óptimos en la construcción
de maquinas de calculo mediante el uso de tubos de vacío.
En estos primeros días, un grupo singular de personas diseño, construyo,
programo, opero y dio mantenimiento a cada maquina. Toda la programación se
realizo en lenguaje de maquina absoluto. Los lenguajes de programación se
desconocían ( todavía no existía el lenguaje ensamblador ). Los primeros
sistemas operativos eran extraños. El modo usual de operación consistía en que
el programador firmaba para tener acceso a un bloque de tiempo en la hoja de
registro situada en la pared, después bajaba al cuarto de maquinas, insertaba su
tablero enchufable en la computadora y pasaba las siguientes horas esperando
que ninguno de los 20,000 tubos de vació se fundiera durante la ejecución de su
programa.
Al inicio de la década de 1950, la rutina había mejorado un poco con la
introducción de la tarjetas perforadas. Ahora era posible escribir en tarjetas y
leerlos, en vez de utilizar tableros enchufables; de lo contrario el procedimiento
era el mismo.
La segunda generacion (1955 - 1965 ) : Transistores y sistemas de lote
La introducción del transistor a mediados de la década de 1950 cambio la
imagen radicalmente. Las computadoras se volvieron lo suficientemente
confiables, en un principio hubo una clara separación entre los diseñadores,
armadores, operadores, programadores y personal de mantenimiento.
Estas maquinas se instalaban en cuartos de computadoras especialmente
acondicionados con aire, con cuerpo de operadores profesionales para
accionarlas. un programador primeramente escribiría el programa en papel ( en
FORTRAN o en lenguaje Ensamblador ) y después lo perforaría en tarjetas.
Después llevaría la pila de tarjetas al cuarto de introducción al sistema y la
entregaría a uno de los operadores el cual iniciaba el proceso en la
computadora, este proceso desperdiciaba mucho tiempo.
Dado el alto costo del equipo, no es sorprendente que las personas buscaran
rápidamente maneras de reducir el tiempo perdido. La solución que
generalmente se adoptaba era el sistema de lote. La idea implícita en este
sistema era la de conjuntar un cajón lleno de trabajos en el cuarto de
introducción al sistema y después leerlos en una cinta magnética mediante el
uso de una computadora ( relativamente ) pequeña y poco costosa, como la IBM
1401.
Después de casi una hora de recolectar un lote de trabajos, la cinta se volvía a
enrollar y se llevaba al cuarto de maquinas. Después el operador cargaba un
programa especial ( el ancestro del sistema operativo de hoy en día ) , el cual
leía el primer trabajo y lo ejecutaba, la salida se escribía en una segunda cinta,
en vez de imprimirse. Después de terminar cada trabajo, el sistema operativo
leía automáticamente el siguiente trabajo de la cinta, y comenzaba a ejecutarlo.
La estructura de un trabajo de entrada común arrancaba con una tarjeta $JOB ,
que especifica el tiempo máximo de ejecución en minutos, el numero de cuenta
que se cargara y el nombre del programador. Después venia una tarjeta
$FORTRAN , que indicaba al sistema operativo que debía cargar el compilador
de FORTRAN . Venia seguido de un programa que debía compilarse y después de
una tarjeta $LOAD, que ordenaba al sistema operativo cargar el programa
objeto recién compilado, después venia la tarjeta $RUN, que indicaba al sistema
operativo que debía ejecutar el programa con los datos que le seguían. Por
ultimo, la tarjeta $END marcaba el final del trabajo. Los sistemas operativos
comunes eran FMS ( el sistema monitor del FORTRAN ) e IBSYS, sistema
operativo de IBM de la 7094.
La tercera generacion (1965 - 1980 ) : Circuitos integrados ( CI ) y
multiprogramacion
Al inicio de la década de 1960 muchos fabricantes de computadoras tenían dos
líneas de trabajo distintas y totalmente incompatibles. Por un lado existían las
computadoras científicas de grande escala orientadas a las palabras, como la
7094, que se utilizaban para realizar cálculos numéricos de ciencias e ingeniería.
Por el otro lado estaban las computadoras comerciales orientadas a los
caracteres, como 1401, que se utilizaban para el ordenamiento de cintas e
impresión por parte de bancos y compañías de seguros.
El desarrollo y mantenimiento de dos líneas de productos diferentes era una
proposición costosa para los fabricantes. Además, muchos nuevos compradores
de computadoras necesitaban una maquina pequeña, pero después se
expandían y querían una maquina de mayor tamaño que ejecutara todos sus
programas antiguos, pero con mayor velocidad.
IBM intento resolver estos dos problemas de un solo golpe introduciendo en el
mercado el Sistema/360. El 360 era una serie de maquinas compatibles con el
software que variaban del tamaño de la 1401 a una mucho mas poderosa que la
7094, el 360 estaba diseñado para realizar cálculos tanto científicos como
comerciales. Por lo tanto una sola familia de maquinas podía satisfacer las
necesidades de todos los clientes.
El sistema 360 fue la primera línea importante de computadoras que utilizo
circuitos integrados ( CI ), con lo cual ofreció una mayor ventaja de
precio/rendimiento sobre las maquinas de la segunda generación.
La intención era que todo el software, como el sistema operativo, tenían que
funcionar en todos los modelos. Tenia que correr en sistemas pequeños, y en
sistemas muy grandes. Tenia que funcionar adecuadamente en sistemas con
algunos periféricos y en sistemas con muchos periféricos.
No había manera de que IBM escribiera una pieza de software que cumpliera
todos esos requisitos conflictivos. El resultado fue un sistema operativo enorme
y extraordinariamente complejo. Constaba de millones de líneas de lenguaje
ensamblador escritas por miles de programadores, y contenía miles y miles de
errores ocultos.
A pesar de tamaño y problemas enormes , OS/360 y los sistemas operativos
similares de la tercera generación satisfacían a muchos de sus clientes
razonablemente bien, También popularizaron varias técnicas importantes
ausentes en los sistemas operativos de la segunda generación. La mas
importante de estas fue la multiprogramación. Cuando el trabajo corriente se
detenía para esperara a que se completara una operación en cinta u otra
operación de E/S, la unidad central de procesamiento ( CPU ) simplemente
permanecía ociosa hasta que terminara la operación de E/S . La solución que
evoluciono consistía en partir la memoria en varias partes, con trabajo diferente
en cada partición. Mientras que un trabajo esperaba a que se completara la E/S,
otro trabajo podía estar utilizando la CPU. Si se podían mantener suficientes
trabajos en la memoria central al mismo tiempo, la CPU podía mantenerse
ocupada casi el 100% del tiempo.
Otra caracteristica de importancia en los sistemas operativos de la tercera
generación era la capacidad de leer trabajos de tarjetas contenidas en el disco
tan pronto como se llevaban al cuarto de computación. Siempre que se
terminaba un trabajo, el sistema operativo podía cargar uno nuevo del disco en
la partición no vacía y ejecutarlo, esta técnica se denomina manejo por cola de
impresión.
Los sistemas operativos de la tercera generación seguían siendo básicamente
sistemas de lote. Con los sistemas operativos de la tercera generación, el tiempo
entre la entrega de un trabajo y la devolución de la salida comprendía a menudo
varias horas.
El deseo de obtener un tiempo de respuesta corto marco el camino para el
tiempo compartido, variante de la multiprogramación, en la cual cada usuario
tiene una terminal en línea. En un sistema de tiempo compartido si hay 20
usuarios dentro del sistema y 17 de ellos están pensando o platicando o bien
tomando café, la CPU puede distribuirse en turno para los tres trabajos que
necesitan servicio.
Aunque el primer sistema de tiempo compartido ( CTSS ) serio fue creado en
MIT en una unidad 7094 especialmente modificada, no se volvió popular sino
hasta que el hardware de protección necesario se disemino durante la tercera
generación.
Después del éxito del sistema CTSS, MIT, Bell laboratories y General electric
decidieron embarcarse en el desarrollo de la “ computadora de servicio publico
“. conocido como MULTICS ( Multiplexed information and computing service,
información multicanalizada y servicio de computación ) . Para resumir una larga
historia, MULTICS introdujo muchas ideas originales en la literatura de
computación, pero su construcción era mas difícil de lo que nadie había
sospechado. MULTICS tuvo enorme influencia sobre otros sistemas
subsiguientes.
Otro avance durante la tercera generación fue el crecimiento de las
minicomputadoras, comenzando con DEC PDP-1 en 1961. Uno de los científicos
que había trabajado en el proyecto MULTICS, Ken Thompson, hallo después una
pequeña PDP-7 y empezó a escribir después una versión desguarnecida de
MULTICS para un usuario. Este sistema se llamo “UNICS” ( Uniplexed
information and computing service, información unicanalizada y servicio de
computación ), pero su ortografía cambio mas tarde por UNIX. UNIX se ha
desplazado a mas computadoras que ningún otro sistema operativo de la
historia y su uso sigue aumentando rápidamente.
La cuarta generacion (1980 - 1990 ) : Computadoras personales
Con la creación de los circuitos integrados LSI ( integración a grande escala ) ,
chips que contiene miles de transistores en un centímetro cuadrado de silicon,
la era de computadora personal vio sus inicios.
Dos sistemas operativos han dominado la escena de la computadora personal:
MS-DOS, escrito por Microsoft, Inc., para la IBM PC y otras computadoras que
utilizan la CPU Intel 8088 y sus sucesores. y UNIX, que domina en las
computadoras personales mayores que hacen uso de CPU Motorola 68000.
Aunque la versión inicial de MS-DOS era relativamente primitiva, versiones
subsiguientes han incluido mas y mas características de UNIX, lo que no es
totalmente sorprendente dado que Microsoft es un proveedor importante de
UNIX, que usa el nombre comercial de XENIX.
Un avance importante que empezó a tomar su sitio a mediados de la década de
1980 es el desarrollo de redes de computadoras personales que corren sistemas
operativos en red y sistemas operativos distribuidos. En un sistema operativo en
red, los usuarios tienen conocimiento de la existencia de múltiples
computadoras y pueden ingresar en maquinas remotas y reproducir archivos de
una maquina a la otra. Cada maquina ejecuta su sistema operativo local y tiene
un usuario propio ( o usuarios).
Un sistema distribuido, es aquel que se presenta ante sus usuarios como un
sistema uniprocesador tradicional, aunque en realidad este compuesto de
múltiples procesadores. En un sistema distribuido real, los usuarios no tienen
conocimiento de donde se están ejecutando sus programas o de donde están
ubicados sus archivos; todo esto se debe manejar en forma automática y
eficiente por medio del sistema operativo.
Los sistemas operativos en red no son fundamentalmente diferentes de los
sistemas operativos uniprocesadores. Sin duda necesitan un controlador de
interfaz en red y algún software de bajo nivel para impulsarlo, así como
programas para lograr un ingreso remoto al sistema y un acceso remoto del
archivo .
Los sistemas operativos distribuidos reales requieren mas que simplemente
agregar un poco de código a un sistema operativo uniprocesador, ya que los
sistemas operativos distribuidos y centralizados difieren de manera decisiva.
1.3 Subsistemas de un S.O.
Un subsistema es un sistema que se ejecuta sobre un sistema operativo, este puede ser un
shell (intérprete de comandos: consola que puede interpretar uno o varios comandos por
linea, este tipo de interfaz es muy utilizado por administradores de redes o usuarios de unix
(sistema operativo en el cuál el intérprete de comandos cumple un papel fundamental), en
windows, el intérprete de comandos por defecto es el símbolo del sistema MS-DOS, un
subsistema que se encarga de ejecutar archivos de 16 bits y es utilizado también como cliente
telnet (es el nombre de un protocolo de red (y del programa informático que implementa el
cliente), que sirve para acceder mediante una red a otra máquina, para manejarla
remotamente como si estuviéramos sentados delante de ella) por defecto en windows) del
sistema operativo primario o puede ser una máquina virtual (Una máquina virtual emula el
kernel (Es el software responsable de facilitar a los distintos programas acceso seguro al
hardware de la computadora o en forma más básica, es el encargado de gestionar recursos, a
través de servicios de llamada al sistema) del sistema operativo o se basa de algunas librerías
incluidas en su instalación para el cuál una aplicación está destinada, de esta forma los
problemas de compatibilidad son solucionados o notablemente reducidos).
1.4 Estructuras de los sistemas operativos
Estructura de un sistema operativo
En esta unidad examinaremos cuatro estructuras distintas que ya han sido probadas, con el fin
de tener una idea más extensa de cómo esta estructurado el sistema operativo. Veremos
brevemente algunas estructuras de diseños de sistemas operativos.
Estructura modular.
También llamados sistemas monolíticos. Este tipo de organización es con mucho la mas
común; bien podría recibir el subtitulo de “el gran embrollo”. La estructura consiste en que no
existe estructura alguna. El sistema operativo se escribe como una colección de
procedimientos, cada uno de los cuales puede llamar a los demás cada vez que así lo requiera.
Cuando se usa esta técnica, cada procedimiento del sistema tiene una interfaz bien definida en
términos de parámetros y resultados y cada uno de ellos es libre de llamar a cualquier otro, si
este ultimo proporciona cierto cálculo útil para el primero. Sin embargo incluso en este tipo de
sistemas es posible tener al menos algo de estructura. Los servicios (llamadas al sistema) que
proporciona el sistema operativo se solicitan colocando los parámetros en lugares bien
definidos, como en los registros o en la pila, para después ejecutar una instrucción especial de
trampa de nombre “llamada al núcleo” o “llamada al supervisor”.
Esta instrucción cambia la máquina del modo usuario al modo núcleo y transfiere el control al
sistema operativo, lo que se muestra en el evento (1) de la figura 1. El sistema operativo
examina entonces los parámetros de la llamada, para determinar cual de ellas se desea
realizar, como se muestra en el evento (2) de la figura 1. A continuación, el sistema operativo
analiza una tabla que contiene en la entrada k un apuntador al procedimiento que realiza la kesima llamada al sistema. Esta operación que se muestra en (3) de la figura 1, identifica el
procedimiento de servicio, al cual se llama. Por ultimo, la llamada al sistema termina y el
control regresa al programa del usuario.
Programa 2 del usuario
Los programas del
usuario se ejecutan
Programa 1 del usuario
en modo usuario
Llamada al núcleo
Memoria
Principal
4
1
Procedimiento
3
2
de servicio
El sistema operativo
Se ejecuta en modo
núcleo
Tabla de
despacho
Figura 1. La forma en que debe hacerse una llamada al sistema: (1) el programa del usuario es
atraído hacia el núcleo. (2) el sistema operativo determina el número del servicio solicitado. (3)
el sistema operativo localiza y llama al procedimiento correspondiente al servicio. (4) el control
regresa al programa del usuario.
Esta organización sugiere una organización básica del sistema operativo:
1.- un programa principal que llama al procedimiento del servicio solicitado.
2.- un conjunto de procedimientos de servicio que llevan a cabo las llamadas al sistema.
3.- un conjunto de procedimientos utilitarios que ayudan al procedimiento de servicio.
En este modelo, para cada llamada al sistema existe un procedimiento de servicio que se
encarga de él. Los procedimientos utilitarios hacen cosas necesarias para varios
procedimientos de servicio, por ejemplo buscar los datos de los programas del usuario. La
Procedimiento
principal
Procedimientos de
servicio
Procedimientos
utilitarios
siguiente figura muestra este procedimiento de tres capas:
Figura 2. Un modelo de estructura simple para un sistema monolítico.
Estructura por microkernel.
Las funciones centrales de un SO son controladas por el núcleo (kernel) mientras que la
interfaz del usuario es controlada por el entorno (shell). Por ejemplo, la parte más importante
del DOS es un programa con el nombre "COMMAND.COM" Este programa tiene dos partes. El
kernel, que se mantiene en memoria en todo momento, contiene el código máquina de bajo
nivel para manejar la administración de hardware para otros programas que necesitan estos
servicios, y para la segunda parte del COMMAND.COM el shell, el cual es el interprete de
comandos.
Las funciones de bajo nivel del SO y las funciones de interpretación de comandos están
separadas, de tal forma que puedes mantener el kernel DOS corriendo, pero utilizar una
interfaz de usuario diferente. Esto es exactamente lo que sucede cuando cargas Microsoft
Windows, el cual toma el lugar del shell, reemplazando la interfaz de línea de comandos con
una interfaz gráfica del usuario. Existen muchos “shells” diferentes en el mercado, ejemplo:
NDOS (Norton DOS), XTG, PCTOOLS, o inclusive el mismo SO MS-DOS a partir de la versión 5.0
incluyó un Shell llamado DOS SHELL.
Estructura por anillos concéntricos (capas).
El sistema por “capas” consiste en organizar el sistema operativo como una jerarquía de capas,
cada una construida sobre la inmediata inferior. El primer sistema construido de esta manera
fue el sistema THE (Technische Hogeschool Eindhoven), desarrollado en Holanda por E. W.
Dijkstra (1968) y sus estudiantes.
El sistema tenia 6 capas, como se muestra en la figura 3. La capa 0 trabaja con la asignación del
procesador y alterna entre los procesos cuando ocurren las interrupciones o expiran los
cronómetros. Sobre la capa 0, el sistema consta de procesos secuénciales, cada uno de los
cuales se podría programar sin importar que varios procesos estuvieran ejecutándose en el
mismo procesador, la capa 0 proporcionaba la multiprogramación básica de la CPU.
La capa 1 realizaba la administración de la memoria. Asignaba el espacio de memoria principal
para los procesos y un recipiente de palabras de 512K se utilizaba para almacenar partes de los
procesos (páginas) para las que no existía lugar en la memoria principal. Por encima de la capa
1, los procesos no debían preocuparse si estaban en la memoria o en el recipiente; el software
de la capa 1 se encargaba de garantizar que las páginas llegaran a la memoria cuando fueran
necesarias.
La capa 2 se encargaba de la comunicación entre cada proceso y la consola del operador. Por
encima de esta capa, cada proceso tiene su propia consola de operador.
La capa 3 controla los dispositivos de E/S y guarda en almacenes (buffers) los flujos de
información entre ellos. Por encima de la capa 3, cada proceso puede trabajar con dispositivos
exactos de E/S con propiedades adecuadas, en vez de dispositivos reales con muchas
peculiaridades. La capa 4 es donde estaban los programas del usuario, estos no tenían que
preocuparse por el proceso, memoria, consola o control de E/S. el proceso operador del
sistema se localizaba en la capa 5.
Una generalización mas avanzada del concepto de capas se presento en el sistema MULTICS.
En lugar de capas, MULTICS estaba organizado como una serie de anillos concéntricos, siendo
los anillos interiores los privilegiados. Cuando un procedimiento de un anillo exterior deseaba
llamar a un procedimiento de un anillo interior, debió hacer el equivalente a una llamada al
sistema.
Mientras que el esquema de capas de THE era en realidad un apoyo al diseño, debido a que
todas las partes del sistema estaban ligadas entre si en un solo programa objeto, en MULTICS,
el mecanismo de anillos estaba mas presente durante el tiempo de ejecución y era reforzado
por el hardware. La ventaja del mecanismo de anillos es su facilidad de extensión para
estructurar subsistemas del usuario.
5
El operador
4
Programas del usuario
3
Control de entrada/salida
2
Comunicación operador-proceso
1
Administración de la memoria y del disco
0
Asignación del procesador y multiprogramación
Figura 3. Estructura del sistema operativo THE.
Estructura cliente – servidor.
Una tendencia de los sistemas operativos modernos es la de explotar la idea de mover el
código a capas superiores y eliminar la mayor parte posible del sistema operativo para
mantener un núcleo mínimo.
El punto de vista usual es el de implantar la mayoría de las funciones del sistema operativo en
los procesos del usuario. Para solicitar un servicio, como la lectura de un bloque de cierto
archivo, un proceso del usuario (denominado proceso cliente) envía la solicitud a un proceso
servidor, que realiza entonces el trabajo y regresa la respuesta. En este modelo, que se
muestra en la figura 4, lo único que hace el núcleo es controlar la comunicación entre los
clientes y los servidores. Al separar el sistema operativo en partes, cada una de ellas controla
una faceta del sistema, como el servicio a archivos, servicios a procesos, servicio a terminales o
servicio a la memoria, cada parte es pequeña y controlable. Además como todos los servidores
se ejecutan como procesos en modo usuario y no en modo núcleo, no tienen acceso directo al
hardware. En consecuencia si hay un error en el servidor de archivos, éste puede fallar, pero
esto no afectará en general a toda la máquina.
Proceso
Proceso
Cliente
Cliente
Servidor
Del proceso
Servidor de
la terminal
...
Servidor de
archivos
Servidor de
la memoria
Modo usuario
Modo núcleo
Núcleo
Los clientes obtienen el servicio al enviar
mensajes a los procesos servidores
Figura 4. El modelo Cliente-servidor.
Otra de las ventajas del modelo cliente-servidor es su capacidad de adaptación para su uso en
los sistemas distribuidos (figura 5).
Si un cliente se comunica con un servidor mediante mensajes, el cliente no necesita saber si el
mensaje se maneja en forma local, en su máquina, o si se envía por medio de una red a un
servidor en una máquina remota. En lo que respecta al cliente, lo mismo ocurre en ambos
casos: se envió una solicitud y se recibió una respuesta.
Máquina 1
Cliente
Núcleo
Máquina 2
Servidor de
archivos
Núcleo
Máquina 3
Máquina 4
Servidor de
procesos
Servidor de
terminales
Núcleo
Núcleo
Red
Mensaje del cliente al servidor
Figura 5. El modelo cliente-servidor en un sistema distribuido.