Indice
1.
Introducción
2. Tipos de Sistemas
Operativos
3. Sistemas Operativos por
Servicio
4. Sistemas Operativos por su
Estructura
5. Sistema Operativo por la Forma de
Ofrecer sus Servicios
6. Proceso
7. Dispositivos de Entrada y
Salida
8. Principios del Software de
E/S
9. Manejo de los Dispositivos de
E/S
10. Administración de
Archivos
Para tratar de comprender los requisitos de un Sistema Operativo
y el significado de las principales características de un Sistema Operativo
contemporáneo, es útil considerar como han ido
evolucionando éstos con el tiempo.
A finales de los 40's el uso de computadoras
estaba restringido a aquellas empresas o
instituciones
que podían pagar su alto precio, y no
existían los sistemas
operativos. En su lugar, el programador debía tener un
conocimiento y
contacto profundo con el hardware, y en el
infortunado caso de que su programa fallara,
debía examinar los valores de
los registros y
páneles de luces indicadoras del estado de
la computadora
para determinar la causa del fallo y poder corregir
su programa, además de enfrentarse nuevamente a los
procedimientos
de apartar tiempo del sistema y poner a punto los compiladores,
ligadores, etc; para volver a correr su programa, es decir,
enfrentaba el problema del procesamiento serial ( serial
processing ).
La importancia de los sistemas
operativos nace históricamente desde los 50's, cuando se
hizo evidente que el operar una computadora
por medio de tableros enchufables en la primera generación
y luego por medio del trabajo en lote en la segunda
generación se podía mejorar notoriamente, pues el
operador realizaba siempre una secuencia de pasos repetitivos, lo
cual es una de las características contempladas en la
definición de lo que es un programa. Es decir, se
comenzó a ver que las tareas mismas del operador
podían plasmarse en un programa, el cual a través
del tiempo y por su enorme complejidad se le llamó
"Sistema Operativo". Así, tenemos entre los primeros
sistemas operativos al Fortran Monitor System
( FMS ) e IBSYS.
Posteriormente, en la tercera generación de
computadoras nace uno de los primeros sistemas operativos con la
filosofía de administrar una familia de
computadoras: el OS/360 de IBM. Fue este un proyecto tan
novedoso y ambicioso que enfrentó por primera vez una
serie de problemas
conflictivos debido a que anteriormente las computadoras eran
creadas para dos propósitos en general: el comercial y el
científico. Así, al tratar de crear un solo sistema
operativo para computadoras que podían dedicarse a un
propósito, al otro o ambos, puso en evidencia la
problemática del trabajo en equipos de análisis, diseño
e implantación de sistemas grandes. El resultado fue un
sistema del cual uno de sus mismos diseñadores
patentizó su opinión en la portada de un libro: una
horda de bestias prehistóricas atascadas en un foso de
brea.
Surge también en la tercera generación de
computadoras el concepto de la
multiprogramación, porque debido al alto costo de las
computadoras era necesario idear un esquema de trabajo que
mantuviese a la unidad central de procesamiento más tiempo
ocupada, así como el encolado (spooling ) de trabajos para
su lectura hacia
los lugares libres de memoria o la
escritura de
resultados. Sin embargo, se puede afirmar que los sistemas
durante la tercera generación siguieron siendo
básicamente sistemas de lote.
En la cuarta generación la electrónica avanza hacia la integración a gran escala, pudiendo
crear circuitos con
miles de transistores en
un centímetro cuadrado de silicón y ya es posible
hablar de las computadoras personales y las estaciones de
trabajo. Surgen los conceptos de interfaces amigables intentando
así atraer al público en general al uso de las
computadoras como herramientas
cotidianas. Se hacen populares el MS-DOS y
UNIX en estas
máquinas. También es común
encontrar clones de computadoras personales y una multitud de
empresas pequeñas ensamblándolas por todo el
mundo.
Para mediados de los 80's, comienza el auge de las redes de computadoras y la
necesidad de sistemas operativos en red y sistemas operativos
distribuidos. La red mundial Internet se va haciendo
accesible a toda clase de instituciones y se comienzan a dar
muchas soluciones ( y
problemas ) al querer hacer convivir recursos
residentes en computadoras con sistemas operativos diferentes.
Para los 90's el paradigma de
la programación
orientada a objetos cobra auge, así como el manejo de
objetos desde los sistemas operativos. Las aplicaciones intentan
crearse para ser ejecutadas en una plataforma específica y
poder ver sus resultados en la pantalla o monitor de otra
diferente (por ejemplo, ejecutar una simulación
en una máquina con UNIX y ver los resultados en otra con
DOS ). Los niveles de interacción se van haciendo cada vez
más profundos.
¿Qué es un Sistema Operativo?.
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, entonces, 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 es una parte importante de cualquier sistema
de computación. Un sistema de computación puede
dividirse en cuatro componentes: el hardware, el Sistema
Operativo, los programas de aplicación y los usuarios. El
hardware (Unidad Central de Procesamiento(UCP), memoria y
dispositivos de
entrada/salida (E/S)) proporciona los recursos de
computación básicos. Los programas de
aplicación (compiladores, sistemas de bases de datos,
juegos de
vídeo y programas para negocios)
definen la forma en que estos recursos se emplean para resolver
los problemas de computación de los usuarios.
Característica de un Sistema Operativo.
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
pàrte 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.
Técnicas de recuperación de
errores.
Evita que otros usuarios interfieran. El Sistema Operativo evita
que los usuarios se bloqueen entre ellos, informándoles si
esa aplicación esta siendo ocupada por otro usuario.
Generación de estadísticas.
Permite que se puedan compartir el hardware y los datos entre los
usuarios.
El software de
aplicación son programas que se utilizan para
diseñar, tal como el procesador de palabras, lenguajes de
programación, hojas de
cálculo, etc.
El software de base
sirve para interactuar el usuario con la máquina, son un
conjunto de programas que facilitan el ambiente
plataforma, y permite el diseño del mismo.
El Software de base está compuesto por :
Cargadores.
Compiladores.
Ensambladores.
Macros.
2. Tipos de Sistemas
Operativos.
Actualmente los sistemas operativos se clasifican en
tres clasificaciones: sistemas operativos por su estructura
(visión interna), sistemas operativos por los servicios que
ofrecen y sistemas operativos por la forma en que ofrecen sus
servicios (visión externa).
3. Sistemas Operativos por
Servicios(Visión Externa).
Esta clasificación es la más
comúnmente usada y conocida desde el punto de vista del
usuario final. Esta clasificación se comprende
fácilmente con el cuadro sinóptico que a
continuación se muestra:
Por Número de Usuarios:
Sistema Operativo Monousuario.
Los sistemas operativos monousuarios son aquéllos que
soportan a un usuario a la vez, sin importar el número de
procesadores que
tenga la computadora o el número de procesos o
tareas que el usuario pueda ejecutar en un mismo instante de
tiempo. Las computadoras personales típicamente se han
clasificado en este renglón.
En otras palabras los sistemas monousuarios son aquellos que nada
más puede atender a un solo usuario, gracias a las
limitaciones creadas por el hardware, los programas o el tipo de
aplicación que se este ejecutando.
Sistema Operativo Multiusuario.
Los sistemas operativos multiusuarios son capaces de dar servicio
a más de un usuario a la vez, ya sea por medio de varias
terminales conectadas a la computadora o por medio de sesiones
remotas en una red de comunicaciones.
No importa el número de procesadores en la máquina
ni el número de procesos que cada usuario puede ejecutar
simultáneamente.
En esta categoría se encuentran todos los sistemas que
cumplen simultáneamente las necesidades de dos o
más usuarios, que comparten mismos recursos. Este tipo de
sistemas se emplean especialmente en redes. En otras palabras
consiste en el fraccionamiento del tiempo
(timesharing).
Por el Número de Tareas:
Sistema Operativo Monotarea.
Los sistemas monotarea son aquellos que sólo permiten una
tarea a la vez por usuario. Puede darse el caso de un sistema
multiusuario y monotarea, en el cual se admiten varios usuarios
al mismo tiempo pero cada uno de ellos puede estar haciendo solo
una tarea a la vez.
Los sistemas operativos monotareas son más primitivos y,
solo pueden manejar un proceso en cada momento o que solo puede
ejecutar las tareas de una en una.
Sistema Operativo Multitarea.
Un sistema operativo multitarea es aquél que le permite al
usuario estar realizando varias labores al mismo tiempo.
Es el modo de funcionamiento disponible en algunos sistemas
operativos, mediante el cual una computadora procesa varias
tareas al mismo tiempo. Existen varios tipos de multitareas. La
conmutación de contextos (context Switching) es un tipo
muy simple de multitarea en el que dos o más aplicaciones
se cargan al mismo tiempo, pero en el que solo se esta procesando
la aplicación que se encuentra en primer plano (la que ve
el usuario. En la multitarea cooperativa,
la que se utiliza en el sistema operativo Macintosh, las tareas
en segundo plano reciben tiempo de procesado durante los tiempos
muertos de la tarea que se encuentra en primer plano (por
ejemplo, cuando esta aplicación esta esperando información del usuario), y siempre que
esta aplicación lo permita. En los sistemas multitarea de
tiempo compartido, como OS/2, cada tarea recibe la atención del microprocesador
durante una fracción de segundo.
Un sistema operativo multitarea puede estar editando el código
fuente de un programa durante su depuración mientras
compila otro programa, a la vez que está recibiendo
correo
electrónico en un proceso en background. Es
común encontrar en ellos interfaces gráficas orientadas al uso de menús
y el ratón, lo cual permite un rápido intercambio
entre las tareas para el usuario, mejorando su productividad.
Un sistema operativo multitarea se distingue por su capacidad
para soportar la ejecución concurrente de dos o más
procesos
activos. La
multitarea se implementa generalmente manteniendo el
código y los datos de varios procesos
simultáneamente en memoria y multiplexando el procesador y
los dispositivos de E/S entre ellos.
La multitarea suele asociarse con soporte hardware y software
para protección de memoria con el fin de evitar que
procesos corrompan el espacio de direcciones y el comportamiento
de otros procesos residentes.
Por el Número de Procesadores:
Sistema Operativo de Uniproceso.
Un sistema operativo uniproceso es aquél que es capaz de
manejar solamente un procesador de la computadora, de manera que
si la computadora tuviese más de uno le sería
inútil. El ejemplo más típico de este tipo
de sistemas es el DOS y MacOS.
Sistema Operativo de Multiproceso.
Un sistema operativo multiproceso se refiere al número de
procesadores del sistema, que es más de uno y éste
es capaz de usarlos todos para distribuir su carga de trabajo.
Generalmente estos sistemas trabajan de dos formas:
simétrica o asimétricamente.
Asimétrica.
Cuando se trabaja de manera asimétrica, el sistema
operativo selecciona a uno de los procesadores el cual
jugará el papel de
procesador maestro y servirá como pivote para distribuir
la carga a los demás procesadores, que reciben el nombre
de esclavos.
Simétrica.
Cuando se trabaja de manera simétrica, los procesos o
partes de ellos (threads) son enviados indistintamente a cual
quiera de los procesadores disponibles, teniendo,
teóricamente, una mejor distribución y equilibrio en
la carga de trabajo bajo este esquema.
Se dice que un thread es la parte activa en memoria y corriendo
de un proceso, lo cual puede consistir de un área de
memoria, un conjunto de registros con valores
específicos, la pila y otros valores de contexto.
Un aspecto importante a considerar en estos sistemas es la forma
de crear aplicaciones para aprovechar los varios procesadores.
Existen aplicaciones que fueron hechas para correr en sistemas
monoproceso que no toman ninguna ventaja a menos que el sistema
operativo o el compilador detecte secciones de código
paralelizable, los cuales son ejecutados al mismo tiempo en
procesadores diferentes. Por otro lado, el programador puede
modificar sus algoritmos y
aprovechar por sí mismo esta facilidad, pero esta
última opción las más de las veces es
costosa en horas hombre y muy
tediosa, obligando al programador a ocupar tanto o más
tiempo a la paralelización que a elaborar el algoritmo
inicial.
4. Sistemas Operativos
por su Estructura (Visión Interna).
Según, se deben observar dos tipos de requisitos
cuando se construye un sistema operativo, los cuales son:
Requisitos de usuario: Sistema fácil de usar y de
aprender, seguro, rápido y adecuado al uso al que se le
quiere destinar.
Requisitos del software: Donde se engloban aspectos como el
mantenimiento,
forma de operación, restricciones de uso, eficiencia,
tolerancia
frente a los errores y flexibilidad.
A continuación se describen las distintas estructuras
que presentan los actuales sistemas operativos para satisfacer
las necesidades que de ellos se quieren obtener.
Estructura Monolítica.
Es la estructura de los primeros sistemas operativos constituidos
fundamentalmente por un solo programa compuesto de un conjunto de
rutinas entrelazadas de tal forma que cada una puede llamar a
cualquier otra. Las características fundamentales de este
tipo de estructura son:
- Construcción del programa final a base de
módulos compilados separadamente que se unen a
través del ligador. - Buena definición de parámetros de
enlace entre las distintas rutinas existentes, que puede
provocar mucho acoplamiento. - Carecen de protecciones y privilegios al entrar a
rutinas que manejan diferentes aspectos de los recursos de la
computadora, como memoria, disco, etc.
Generalmente están hechos a medida, por lo que
son eficientes y rápidos en su ejecución y gestión, pero por lo mismo carecen de
flexibilidad para soportar diferentes ambientes de trabajo o
tipos de aplicaciones.
Estructura Jerárquica.
A medida que fueron creciendo las necesidades de los usuarios y
se perfeccionaron los sistemas, se hizo necesaria una mayor
organización del software, del sistema
operativo, donde una parte del sistema contenía subpartes
y esto organizado en forma de niveles.
Se dividió el sistema operativo en pequeñas partes,
de tal forma que cada una de ellas estuviera perfectamente
definida y con un claro interface con el resto de elementos.
Se constituyó una estructura jerárquica o de
niveles en los sistemas operativos, el primero de los cuales fue
denominado THE (Technische Hogeschool, Eindhoven), de Dijkstra,
que se utilizó con fines didácticos. Se puede
pensar también en estos sistemas como si fueran
`multicapa'. Multics y Unix caen en esa
categoría.
En la estructura anterior se basan prácticamente
la mayoría de los sistemas operativos actuales. Otra forma
de ver este tipo de sistema es la denominada de anillos
concéntricos o "rings".
En el sistema de anillos, cada uno tiene una apertura,
conocida como puerta o trampa (trap), por donde pueden entrar las
llamadas de las capas inferiores. De esta forma, las zonas
más internas del sistema operativo o núcleo del
sistema estarán más protegidas de accesos
indeseados desde las capas más externas. Las capas
más internas serán, por tanto, más
privilegiadas que las externas.
Máquina Virtual.
Se trata de un tipo de sistemas operativos que presentan una
interface a cada proceso, mostrando una máquina que parece
idéntica a la máquina real subyacente. Estos
sistemas operativos separan dos conceptos que suelen estar unidos
en el resto de sistemas: la multiprogramación y la
máquina extendida. El objetivo de los sistemas operativos
de máquina virtual es el de integrar distintos sistemas
operativos dando la sensación de ser varias
máquinas diferentes.
El núcleo de estos sistemas operativos se denomina monitor
virtual y tiene como misión
llevar a cabo la multiprogramación, presentando a los
niveles superiores tantas máquinas virtuales como se
soliciten. Estas máquinas virtuales no son máquinas
extendidas, sino una réplica de la máquina real, de
manera que en cada una de ellas se pueda ejecutar un sistema
operativo diferente, que será el que ofrezca la
máquina extendida al usuario
Cliente-Servidor(Microkernel).
El tipo más reciente de sistemas operativos es el
denominado Cliente-servidor,
que puede ser ejecutado en la mayoría de las computadoras,
ya sean grandes o pequeñas.
Este sistema sirve para toda clase de aplicaciones por tanto, es
de propósito general y cumple con las mismas actividades
que los sistemas operativos convencionales.
El núcleo tiene como misión establecer la
comunicación entre los clientes y los
servidores.
Los procesos pueden ser tanto servidores como clientes. Por
ejemplo, un programa de aplicación normal es un cliente
que llama al servidor correspondiente para acceder a un archivo o
realizar una operación de entrada/salida sobre un
dispositivo concreto. A su
vez, un proceso cliente puede actuar como servidor para otro."
[Alcal92]. Este paradigma ofrece gran flexibilidad en cuanto a
los servicios posibles en el sistema final, ya que el
núcleo provee solamente funciones muy básicas de
memoria, entrada/salida, archivos y
procesos, dejando a los servidores proveer la mayoría que
el usuario final o programador puede usar. Estos servidores deben
tener mecanismos de seguridad y
protección que, a su vez, serán filtrados por el
núcleo que controla el hardware. Actualmente se
está trabajando en una versión de UNIX que
contempla en su diseño este paradigma.
5. Sistemas Operativos por
la Forma de Ofrecer sus Servicios
Esta clasificación también se refiere a
una visión externa, que en este caso se refiere a la del
usuario, el cómo accesa a los servicios. Bajo esta
clasificación se pueden detectar dos tipos principales:
sistemas operativos de red y sistemas operativos
distribuidos.
Sistema Operativo de Red.
Los sistemas operativos de red se definen como aquellos que tiene
la capacidad de interactuar con sistemas operativos en otras
computadoras por medio de un medio de transmisión con el
objeto de intercambiar información, transferir archivos,
ejecutar comandos remotos
y un sin fin de otras actividades. El punto crucial de estos
sistemas es que el usuario debe saber la sintaxis de un conjunto
de comandos o llamadas al sistema para ejecutar estas operaciones,
además de la ubicación de los recursos que desee
accesar. Por ejemplo, si un usuario en la computadora hidalgo
necesita el archivo matriz.pas que
se localiza en el directorio /software/codigo en la
computadora morelos bajo el sistema operativo UNIX, dicho usuario
podría copiarlo a través de la red con los comandos
siguientes: hidalgo% hidalgo% rcp
morelos:/software/codigo/matriz.pas . hidalgo%. En este caso, el
comando rcp que significa "remote copy" trae el archivo indicado
de la computadora morelos y lo coloca en el directorio donde se
ejecutó el mencionado comando. Lo importante es hacer ver
que el usuario puede accesar y compartir muchos recursos.
El primer Sistema Operativo de red estaba enfocado a equipos con
un procesador Motorola 68000, pasando posteriormente a
procesadores Intel como Novell
Netware.
Los Sistemas Operativos de red mas ampliamente usados son: Novell
Netware, Personal Netware,
LAN Manager,
Windows NT
Server, UNIX, LANtastic.
Sistemas Operativos Distribuidos.
Los sistemas operativos distribuidos abarcan los servicios de los
de red, logrando integrar recursos ( impresoras,
unidades de respaldo, memoria, procesos, unidades centrales de
proceso ) en una sola máquina virtual que el usuario
accesa en forma transparente. Es decir, ahora el usuario ya no
necesita saber la ubicación de los recursos, sino que los
conoce por nombre y simplemente los usa como si todos ellos
fuesen locales a su lugar de trabajo habitual. Todo lo anterior
es el marco
teórico de lo que se desearía tener como
sistema operativo distribuido, pero en la realidad no se ha
conseguido crear uno del todo, por la complejidad que suponen:
distribuir los procesos en las varias unidades de procesamiento,
reintegrar sub-resultados, resolver problemas de concurrencia y
paralelismo, recuperarse de fallas de algunos recursos
distribuidos y consolidar la protección y seguridad entre
los diferentes componentes del sistema y los usuarios. Los
avances
tecnológicos en las redes de área local y la
creación de microprocesadores
de 32 y 64 bits lograron que computadoras mas o menos baratas
tuvieran el suficiente poder en forma autónoma para
desafiar en cierto grado a los mainframes, y a la vez se dio la
posibilidad de intercomunicarlas, sugiriendo la oportunidad de
partir procesos muy pesados en cálculo en
unidades más pequeñas y distribuirlas en los varios
microprocesadores para luego reunir los sub-resultados, creando
así una máquina virtual en la red que exceda en
poder a un mainframe. El sistema integrador de los
microprocesadores que hacer ver a las varias memorias,
procesadores, y todos los demás recursos como una sola
entidad en forma transparente se le llama sistema operativo
distribuído. Las razones para crear o adoptar sistemas
distribuidos se dan por dos razones principales: por
necesidad ( debido a que los problemas a resolver son
inherentemente distribuidos ) o porque se desea tener más
confiabilidad y disponibilidad de recursos. En el primer caso
tenemos, por ejemplo, el control de los
cajeros automáticos en diferentes estados de la
república. Ahí no es posible ni eficiente mantener
un control centralizado, es más, no existe capacidad de
cómputo y de entrada/salida para dar servicio a los
millones de operaciones por minuto. En el segundo caso,
supóngase que se tienen en una gran empresa varios
grupos de
trabajo, cada uno necesita almacenar grandes cantidades de
información en disco duro con
una alta confiabilidad y disponibilidad. La solución puede
ser que para cada grupo de
trabajo se asigne una partición de disco duro en
servidores diferentes, de manera que si uno de los servidores
falla, no se deje dar el servicio a todos, sino sólo a
unos cuantos y, más aún, se podría tener un
sistema con discos en espejo ( mirror ) a través de la
red, de manera que si un servidor se cae, el servidor en espejo
continúa trabajando y el usuario ni cuenta se da de estas
fallas, es decir, obtiene acceso a recursos en forma
transparente.
Los sistemas distribuidos deben de ser muy confiables, ya que si
un componente del sistema se compone otro componente debe de ser
capaz de reemplazarlo.
Entre los diferentes Sistemas Operativos distribuidos que existen
tenemos los siguientes: Sprite, Solaris-MC, Mach, Chorus, Spring,
Amoeba, Taos, etc.
Uno de los conceptos mas importantes que gira entorno a
un sistema operativo es el de proceso. Un proceso es un programa
en ejecución junto con el entorno asociado (registros,
variables
,etc.).
El corazón de
un sistema operativo es el núcleo, un programa de control
que reacciona ante cualquier interrupción de eventos externos
y que da servicio a los procesos, creándolos,
terminándolos y respondiendo a cualquier petición
de servicio por parte de los mismos.
Planificación del Procesador.
La planificación del procesador se refiere a
la manera o técnicas que se usan para decidir
cuánto tiempo de ejecución y cuando se le asignan a
cada proceso del sistema. Obviamente, si el sistema es
monousuario y monotarea no hay mucho que decidir, pero en el
resto de los sistemas esto es crucial para el buen funcionamiento
del sistema.
Caracteristicas a considerar de los Procesos.
No todos los equipos de cómputo procesan el mismo tipo de
trabajos, y un algoritmo de planificación que en un
sistema funciona excelente puede dar un rendimiento pésimo
en otro cuyos procesos tienen características diferentes.
Estas características pueden ser:
- Cantidad de Entrada/Salida: Existen procesos que
realizan una gran cantidad de operaciones de entrada y salida
(aplicaciones de bases de datos, por ejemplo). - Cantidad de Uso de CPU: Existen
procesos que no realizan muchas operaciones de entrada y
salida, sino que usan intensivamente la unidad central de
procesamiento. Por ejemplo, operaciones con matrices. - Procesos de Lote o Interactivos: Un proceso de lote
es más eficiente en cuanto a la lectura
de datos, ya que generalmente lo hace de archivos, mientras que
un programa interactivo espera mucho tiempo (no es lo mismo el
tiempo de lectura de un archivo que la velocidad en
que una persona teclea
datos) por las respuestas de los usuarios. - Procesos en Tiempo Real: Si los procesos deben dar
respuesta en tiempo real se requiere que tengan prioridad para
los turnos de ejecución. - Longevidad de los Procesos: Existen procesos que
típicamente requerirán varias horas para
finalizar su labor, mientras que existen otros que solo
necesitan algunos segundos.
Un proceso es una actividad que se apoya en datos,
recursos, un estado en cada momento y un programa.
El Bloque de Control de Procesos (PCB).
Un proceso se representa desde el punto de vista del sistema
operativo, por un conjunto de datos donde se incluyen el estado en
cada momento, recursos utilizados, registros, etc., denominado
Bloque de Control de Procesos (PCB).
Los objetivos del
bloque de control de procesos son los siguientes:
Localización de la información sobre el proceso por
parte del sistema operativo.
Mantener registrados los datos del proceso en caso de tener que
suspender temporalmente su ejecución o reanudarla.
La información contenida en el bloque de control es la
siguiente:
Estado del proceso. Información relativa al contenido del
controlador del programa (Program Counter, PC), estado de
procesador en cuanto a prioridad del proceso, modo de
ejecución, etc., y por ultimo el estado de los registros
internos de la computadora.
Estadísticas de tiempo y ocupación de recursos para
la gestión de la planificación del procesador.
Ocupación de memoria interna y externa para el intercambio
(swapping).
Recursos en uso (normalmente unidades de entrada/salida).
Archivos en uso.
Privilegios.
Estas informaciones se encuentran en memoria principal en disco y
se accede a ellas en los momentos en que se hace necesaria su
actualización o consulta. Los datos relativos al estado
del proceso siempre se encuentran en memoria principal.
Existe un Bloque de Control de Sistema (SCB) con objetivos
similares al anterior y entre los que se encuentra el enlazado de
los bloques de control de procesos existentes en el sistema.
El cambio de
contexto se producirá en caso de ejecución de una
instrucción privilegiada, una llamada al sistema operativo
o una interrupción, es decir, siempre que se requiera la
atención de algún servicio del sistema
operativo.
Estado de los Procesos.
Los bloques de control de los procesos se almacenan en colas,
cada una de las cuales representa un estado particular de los
procesos, existiendo en cada bloque, entre otras informaciones.
Los estados de los procesos son internos del sistema operativo y
transparentes al usuario.
Los estados de los procesos se pueden dividir en dos tipos:
activos e inactivos.
1.- Estados activos: Son aquellos que compiten con el procesador
o están en condiciones de hacerlo. Se dividen en:
Ejecución. Estado en el que se encuentra un proceso cuando
tiene el control del procesador. En un sistema monoprocesador
este estado sólo lo puede tener un proceso.
Preparado. Aquellos procesos que están dispuestos para ser
ejecutados, pero no están en ejecución por alguna
causa (Interrupción, haber entrado en cola estando otro
proceso en ejecución, etc.).
Bloqueado. Son los procesos que no pueden ejecutarse de momento
por necesitar algún recurso no disponible (generalmente
recursos de entrada/salida).
2.- Estados inactivos: Son aquellos que no pueden competir por el
procesador, pero que pueden volver a hacerlo por medio de ciertas
operaciones. En estos estados se mantiene el bloque de control de
proceso aparcado hasta que vuelva a ser activado. Se trata de
procesos que no han terminado su trabajo que lo han impedido y
que pueden volver a activarse desde el punto en que se quedaron
sin que tengan que volver a ejecutarse desde el principio.
Son de dos tipos:
- Suspendido bloqueado. Es el proceso que fue
suspendido en espera de un evento, sin que hayan desaparecido
las causas de su bloqueo. - Suspendido programado. Es el proceso que han sido
suspendido, pero no tiene causa parta estar
bloqueado.
Operaciones sobre procesos.
Los sistemas operativos actuales poseen una serie de funciones
cuyo objetivo es el de la manipulación de los procesos.
Las operaciones que se pueden hacer sobre un proceso son las
siguientes:
Crear el proceso. Se produce con la orden de ejecución del
programa y suele necesitar varios argumentos, como el nombre y la
prioridad del proceso. Aparece en este momento el PCB, que
será insertado en la cola de procesos
preparados.
La creación de un proceso puede ser de dos
tipos:
Jerárquica. En ella, cada proceso que se crea es hijo del
proceso creador y hereda el entorno de ejecución de su
padre. El primer proceso que ejecuta un usuario será hijo
del intérprete de comandos con el que
interactúa.
No jerárquica. Cada proceso creado por otro proceso se
ejecuta independientemente de su creador con un entorno
diferente. Es un tipo de creación que no suele darse en
los sistemas operativos actuales.
Destruir un proceso. Se trata de la orden de eliminación
del proceso con la cual el sistema operativo destruye su PCB.
Suspender un proceso. Es un proceso de alta prioridad que
paraliza un proceso que puede ser reanudado posteriormente. Suele
utilizarse en ocasiones de mal funcionamiento o sobrecarga del
sistema.
Reanudar un proceso. Trata de activar un proceso que a sido
previamente suspendido.
Cambiar la prioridad de un proceso.
Temporizar la ejecución de un proceso. Hace que un
determinado proceso se ejecute cada cierto tiempo (segundos,
minutos, horas…) por etapas de una sola vez, pero transcurrido
un periodo de tiempo fijo.
Despertar un proceso. Es una forma de desbloquear un proceso que
habrá sido bloqueado previamente por temporización
o cualquier otra causa.
Prioridades
Todo proceso por sus características e importancia lleva
aparejadas unas determinadas necesidades de ejecución en
cuanto a urgencia y asignación de recursos.
Las prioridades según los sistemas operativos se pueden
clasificar del siguiente modo:
Asignadas por el sistema operativo. Se trata de prioridades que
son asignadas a un proceso en el momento de comenzar su
ejecución y dependen fundamentalmente de los privilegios
de su propietario y del modo de ejecución.
- Asignadas por el propietario.
- Estáticas.
- Dinámicas.
El Núcleo del Sistema Operativo.
Todas las operaciones en las que participan procesos son
controladas por la parte del sistema operativo denominada
núcleo (nucleus, core o kernel, en inglés). El núcleo normalmente
representa sólo una pequeña parte de lo que por lo
general se piensa que es todo el sistema operativo, pero es tal
vez el código que más se utiliza. Por esta
razón, el núcleo reside por lo regular en la memoria
principal, mientras que otras partes del sistema operativo son
cargadas en la memoria principal sólo cuando se
necesitan.
Los núcleos se diseñan para realizar "el
mínimo" posible de procesamiento en cada
interrupción y dejar que el resto lo realice el proceso
apropiado del sistema, que puede operar mientras el núcleo
se habilita para atender otras interrupciones.
El núcleo de un sistema operativo normalmente contiene el
código necesario para realizar las siguientes
funciones:
Manejo de interrupciones.
Creación y destrucción de procesos.
Cambio de estado de los procesos.
Despacho.
Suspensión y reanudación de procesos.
Sincronización de procesos.
Comunicación entre procesos.
Manipulación de los bloques de control de procesos.
Apoyo para las actividades de entrada/salida.
Apoyo para asignación y liberación de memoria.
Apoyo para el sistema de archivos.
Apoyo para el mecanismo de llamada y retorno de un procedimiento.
Apoyo para ciertas funciones de contabilidad
del sistema.
Núcleo o Kernel y niveles de un Sistema Operativo.
El Kernel consiste en la parte principal del código del
sistema operativo, el cual se encargan de controlar y administrar
los servicios y peticiones de recursos y de hardware con respecto
a uno o varios procesos, este se divide en 5 capas:
Nivel 1. Gestión de Memoria: que proporciona las
facilidades de bajo nivel para la gestión de memoria
secundaria necesaria para la ejecución de procesos.
Nivel 2. Procesador: Se encarga de activar los cuantums de tiempo
para cada uno de los procesos, creando interrupciones de hardware
cuando no son respetadas.
Nivel 3. Entrada/Salida: Proporciona las facilidades para poder
utilizar los dispositivos de E/S requeridos por procesos.
Nivel 4. Información o Aplicación o Interprete de
Lenguajes: Facilita la comunicación con los lenguajes y el
sistema operativo para aceptar las ordenes en cada una de las
aplicaciones. Cuando se solicitan ejecutando un programa el
software de este nivel crea el ambiente de trabajo e invoca a los
procesos correspondientes.
Nivel 5. Control de Archivos: Proporciona la facilidad para el
almacenamiento a
largo plazo y manipulación de archivos con nombre, va
asignando espacio y acceso de datos en memoria.
El núcleo y los procesos.
El núcleo (Kernel) de un sistema operativo es un conjunto
de rutinas cuya misión es la de gestionar el procesador,
la memoria, la entrada/salida y el resto de procesos disponibles
en la instalación. Toda esta gestión la realiza
para atender al
funcionamiento y peticiones de los trabajos que se ejecutan en el
sistema.
Los procesos relacionados con la entidad básica de los
sistemas operativos actuales: Los procesos.
El esquema general del mismo es el siguiente:
Definición y concepto de proceso.
El Bloque de Control de Proceso (PCB) como imagen donde el
sistema operativo ve el estado del proceso.
Estados por los que pasa un proceso a lo largo de su existencia
en la computadora.
Operaciones que se pueden realizar sobre un proceso.
Clasificación de los procesos según su forma de
ejecución, de carga, etc.
7. Dispositivos de
Entrada y Salida.
El código destinado a manejar la entrada y salida
de los diferentes periféricos en un sistema operativo es de
una extensión considerable y sumamente complejo. Resuelve
la necesidades de sincronizar, atrapar interrupciones y ofrecer
llamadas al sistema para los programadores.
Los dispositivos de entrada salida se dividen, en general, en dos
tipos: dispositivos orientados a bloques y dispositivos
orientados a caracteres.
Orientados a Bloques.
Los dispositivos orientados a bloques tienen la propiedad de
que se pueden direccionar, esto es, el programador puede escribir
o leer cualquier bloque del dispositivo realizando primero una
operación de posicionamiento
sobre el dispositivo. Los dispositivos más comunes
orientados a bloques son los discos duros,
la memoria, discos compactos y, posiblemente, unidades de
cinta.
Orientados a Caracteres.
Los dispositivos orientados a caracteres son aquellos que
trabajan con secuencias de bytes sin importar su longitud ni
ninguna agrupación en especial. No son dispositivos
direccionables. Ejemplos de estos dispositivos son el teclado, la
pantalla o display y las impresoras.
La clasificación anterior no es perfecta, porque existen
varios dispositivos que generan entrada o salida que no pueden
englobarse en esas categorías. Por ejemplo, un reloj que
genera pulsos. Sin embargo, aunque existan algunos
periféricos que no se puedan categorizar, todos
están administrados por el sistema operativo por medio de
una parte electrónica – mecánica y una parte de
software.
8. Principios del
Software de Entrada y Salida.
Los principios de software en la entrada – salida se
resumen en cuatro puntos: el software debe ofrecer manejadores de
interrupciones, manejadores de dispositivos, software que sea
independiente de los dispositivos y software para
usuarios.
Manejadores de Interrupciones.
El primer objetivo referente a los manejadores de interrupciones
consiste en que el programador o el usuario no debe darse cuenta
de los manejos de bajo nivel para los casos en que el dispositivo
está ocupado y se debe suspender el proceso o sincronizar
algunas tareas. Desde el punto de vista del proceso o usuario, el
sistema simplemente se tardó más o menos en
responder a su petición.
Manejadores de Dispositivos.
El sistema debe proveer los manejadores de dispositivos
necesarios para los periféricos, así como ocultar
las peculiaridades del manejo interno de cada uno de ellos, tales
como el formato de la información, los medios
mecánicos, los niveles de voltaje y otros. Por ejemplo, si
el sistema tiene varios tipos diferentes de discos duros, para el
usuario o programador las diferencias técnicas entre ellos
no le deben importar, y los manejadores le deben ofrecer el mismo
conjunto de rutinas para leer y escribir datos.
Software que sea independiente de los dispositivos.
Este es un nivel superior de independencia
que el ofrecido por los manejadores de dispositivos. Aquí
el sistema operativo debe ser capaz, en lo más posible, de
ofrecer un conjunto de utilerías para accesar
periféricos o programarlos de una manera consistente. Por
ejemplo, que para todos los dispositivos orientados a bloques se
tenga una llamada para decidir si se desea usar 'buffers' o no, o
para posicionarse en ellos.
Software para Usuarios.
La mayoría de las rutinas de entrada – salida trabajan en
modo privilegiado, o son llamadas al sistema que se ligan a los
programas del usuario formando parte de sus aplicaciones y que no
le dejan ninguna flexibilidad al usuario en cuanto a la
apariencia de los datos. Existen otras librerías en donde
el usuario si tiene poder de decisión (por ejemplo la
llamada a "printf" en el lenguaje
"C"). Otra facilidad ofrecida son las áreas de trabajos
encolados (spooling areas), tales como las de impresión y
correo electrónico.
9. Manejo de los Dispositivos de
E/S.
En el manejo de los dispositivos de E/S es necesario,
introducir dos nuevos términos:
Buffering (uso de memoria intermedia).
El buffering trata de mantener ocupados tanto la CPU como los
dispositivos de E/S. La idea es sencilla, los datos se leen y se
almacenan en un buffer, una vez que los datos se han leído
y la CPU va a iniciar inmediatamente la operación con
ellos, el dispositivo de entrada es instruido para iniciar
inmediatamente la siguiente lectura. La CPU y el dispositivo de
entrada permanecen ocupados. Cuando la CPU esté libre para
el siguiente grupo de datos, el dispositivo de entrada
habrá terminado de leerlos. La CPU podrá empezar el
proceso de los últimos datos leídos, mientras el
dispositivo de entrada iniciará la lectura de los datos
siguientes.
Para la salida, el proceso es análogo. En este caso los
datos de salida se descargan en otro buffer hasta que el
dispositivo de salida pueda procesarlos.
Este sistema soluciona en forma parcial el problema de mantener
ocupados todo el tiempo la CPU y los dispositivos de E/S. Ya que
todo depende del tamaño del buffer y de la velocidad de
procesamiento tanto de la CPU como de los dispositivos de
E/S.
El manejo de buffer es complicado. Uno de los principales
problemas reside en determinar tan pronto como sea posible que un
dispositivo de E/S a finalizado una operación. Este
problema se resuelve mediante las interrupciones. Tan pronto como
un dispositivo de E/S acaba con una operación interrumpe a
la CPU, en ese momento la CPU detiene lo que está haciendo
e inmediatamente transfiere el control a una posición
determinada. Normalmente las instrucciones que existen en esta
posición corresponden a una rutina de servicio de
interrupciones. La rutina de servicio de interrupción
comprueba si el buffer no está lleno o no está
vacío y entonces inicia la siguiente petición de
E/S. La CPU puede continuar entonces el proceso interrumpido.
Cada diseño de computadora tiene su propio mecanismo de
interrupción, pero hay varias funciones comunes que todos
contemplan.
El buffering puede ser de gran ayuda pero pocas veces es
suficiente.
Spooling.
El problema con los sistemas de cintas es que una lectora de
tarjetas no
podía escribir sobre un extremo mientras la CPU
leía el otro. Los sistemas de disco eliminaron esa
dificultad, moviendo la cabeza de un área del disco a
otra.
En un sistema de discos, las tarjetas se leen directamente desde
la lectora sobre el disco. La posición de las imágenes
de las tarjetas se registran en una tabla mantenida por el
sistema operativo. En la tabla se anota cada trabajo una vez
leído. Cuando se ejecuta un trabajo sus peticiones de
entrada desde la tarjeta se satisfacen leyendo el disco. Cuando
el trabajo
solicita la salida, ésta se copia en el buffer del sistema
y se escribe en el disco. Cuando la tarea se ha completado se
escribe en la salida realmente.
Esta forma de procesamiento se denomina spooling, utiliza el
disco como un buffer muy grande para leer tan por delante como
sea posible de los dispositivos de entrada y para almacenar los
ficheros hasta que los dispositivos de salida sean capaces de
aceptarlos.
La ventaja sobre el buffering es que el spooling solapa la E/S de
un trabajo con la computación de otro. Es una
característica utilizada en la mayoría de los
sistemas operativos.
Afecta directamente a las prestaciones.
Por el costo de algo de espacio en disco y algunas tablas, la CPU
puede simultanear la computación de un trabajo con la E/S
de otros. De esta manera, puede mantener tanto a la CPU como a
los dispositivos de E/S trabajando con un rendimiento mucho
mayor.
Además mantiene una estructura de
datos llama job spooling, que hace que los trabajos ya
leídos permanezcan en el disco y el sistema operativo
puede seleccionar cual ejecutar, por lo tanto se hace posible la
planificación de trabajos.
10. Administración de Archivos.
Un archivo es un conjunto de información, que se
encuentra almacenada o guardada en la memoria principal del
computador, en el disco duro, en el disquete flexible o en los
discos compactos (Cd-Rom).
Antes de que un archivo pueda leerse o escribirse en él,
debe abrirse, momento en el cual se verifican los permisos. Estos
archivos se abren especificando en el computador la ruta de
acceso al archivo desde el directorio raíz, que es la
unidad principal del disco del computador, este puede ser un
disco duro o disco flexible. Entonces el sistema operativo
visualiza el entorno al abrir un archivo.
Uno de los problemas mas frecuentes en el manejo de archivos son
los deadlock, un deadlock es una situación no deseada de
espera indefinida y se da cuando en un grupo de procesos, dos o
más procesos de ese grupo esperan por llevar a cabo una
tarea que será ejecutada por otro proceso del mismo grupo,
entonces se produce el bloqueo. Los bloqueos se dan tanto en los
sistemas operativos tradicionales como en los distribuidos, solo
que en estos últimos es más difícil de
prevenirlos, evitarlos e incluso detectarlos, y si se los logra
detectar es muy complicado solucionarlos ya que la
información se encuentra dispersa por todo el sistema.
Una vez que un deadlock se detecta, es obvio que el sistema
está en problemas y lo único que resta por hacer es
una de dos cosas: tener algún mecanismo de
suspensión o reanudación que permita copiar todo el
contexto de un proceso incluyendo valores de memoria y aspecto de
los periféricos que esté usando para reanudarlo
otro día, o simplemente eliminar un proceso o arrebatarle
el recurso, causando para ese proceso la pérdida de datos
y tiempo.
Seguridad de un Sistema Operativo.
En los sistemas operativos se requiere tener una buena seguridad
informática, tanto del hardware, programas y datos,
previamente haciendo un balance de los requerimientos y
mecanismos necesarios. Con el fin de asegurar la integridad de la
información contenida.
Dependiendo de los mecanismos utilizados y de su grado de
efectividad, se puede hablar de sistemas seguros e
inseguros. En primer lugar, deben imponerse ciertas
características en el entorno donde se encuentra la
instalación de los equipos, con el fin de impedir el
acceso a personas no autorizadas, mantener un buen estado y uso
del material y equipos, así como eliminar los riesgos de causas
de fuerza mayor,
que puedan destruir la instalación y la información
contenida.
En la actualidad son muchas las violaciones que se producen en
los sistemas informáticos, en general por acceso de
personas no autorizadas que obtienen información
confidencial pudiendo incluso manipularla. En ocasiones este tipo
de incidencias resulta grave por la naturaleza de los
datos; por ejemplo si se trata de datos bancarios, datos
oficiales que puedan afectar a la seguridad de los estados,
etc.
El software mal intencionado que se produce por diversas causas,
es decir pequeños programas que poseen gran facilidad para
reproducirse y ejecutarse, cuyos efectos son destructivos nos
estamos refiriendo a los virus
informáticos.
Para esto, se analizan cuestiones de seguridad desde dos
perspectivas diferentes la seguridad externa y la seguridad
interna.
Todos los mecanismos dirigidos a asegurar el sistema
informático sin que el propio sistema intervenga en el
mismo se engloban en lo que podemos denominar seguridad
externa.
La seguridad externa puede dividirse en dos grandes grupos:
Seguridad física.
Engloba aquellos mecanismos que impiden a los agentes
físicos la destrucción de la información
existente en el sistema; entre ellos podemos citar el fuego, el
humo, inundaciones descargas eléctricas, campos
magnéticos, acceso físico de personas con no muy
buena intención, entre otros.
Seguridad de administración. Engloba los mecanismos
más usuales para impedir el acceso lógico de
personas físicas al sistema.
Todos los mecanismos dirigidos a asegurar el sistema
informático, siendo el propio sistema el que controla
dichos mecanismos, se engloban en lo que podemos denominar
seguridad interna.
Autor:
Arturo Feria Gerònimo