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.
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.
6. Proceso.
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.
Trabajo enviado por:
Arturo Feria Gerònimo