Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

Sistemas Operativos (página 2)




Enviado por yodeargentina1972



Partes: 1, 2

7. Nucleos de sistemas
operativos

Los núcleos (kernels) de los sistemas
operativos se pueden ubicar en dos categorias:
monolíticos o micronúcleos (microkernels). El
primer tipo de núcleo es el más tradicionalmente
usado, mientras que los micronúcleos forman parte delas
tendencias modernas en el diseño de
sistemas operativos.

Para comprender mejor qué diferencias existen entre
ambas categorías, se necesita revisar algunos
conceptos.

Trabajos, Procesos y
Thread
Estos tres conceptos van definiendo el grado de granularidad en
que el sistema operativo
trata a las masas de operaciones que
se tienen que realizar. Un trabajo se conceptualiza como un
conjunto de uno o más procesos. Por
ejemplo, si se tiene que hacer el trabajo de
correr el inventario, tal
vez se subdivida ese trabajo en varios procesos: obtener la lista
de artículos, número en existencia,
artículos vendidos, artículos extraviados, etc. Un
proceso se
define como la imagen de un
programa en
ejecución, es decir, en memoria y usando
el CPU. A este
nivel de granularidad, un proceso tiene
un espacio de direcciones de memoria, una
pila, sus registros y su
'program counter'. Un thread es un trozo o sección de un
proceso que tiene sus propios registros, pila y
'program counter' y puede compartir la memoria con
todos aquellos threads que forman parte del mismo
proceso.

Objetos
Un objeto es una entidad que contiene dos partes principales: una
colección de atributos y un conjunto de métodos
(también llamados servicios).
Generalmente los atributos del objeto no pueden ser cambiados por
el usuario, sino solamente a través de los métodos.
Los métodos sí son accesibles al usuario y de hecho
es lo único que él observa: los métodos
conforman lo que se llama la 'interfaz' del objeto. Por ejemplo,
para el objeto 'archivo' los
métodos son abrir, cerrar, escribir, borrar, etc. El
cómo se abre, se cierra, se borra, etc; está
escondido para el usuario, es decir, los atributos y el código
están 'encapsulados'. La única forma de activar un
método es
a través del envío de mensajes entre los objetos, o
hacia un objeto.

Cliente – Servidor
Un cliente es un
proceso que necesita de algún valor o de
alguna operación externa para poder
trabajar. A la entidad que prove ese valor o
realiza esa operación se le llama servidor. Por
ejemplo, un servidor de
archivos debe
correr en el núcleo (kernel) o por medio de un proceso
'guardián' al servidor de archivos que
escucha peticiones de apertura, lectura,
escritura,
etc; sobre los archivos. Un cliente es otro
proceso guardián que escucha esas peticiones en las
máquinas clientes y se
comunica con el proceso servidor a través de la red, dando la apariencia de
que se tienen los archivos en forma local en la máquina
cliente.

Núcleo Monolítico
Los núcleos monolíticos generalmente están
divididos en dos partes estructuradas: el núcleo
dependiente del hardware y el núcleo
independiente del hardware. El núcleo
dependiente se encarga de manejar las interrupciones del
hardware, hacer el manejo de bajo nivel de memoria y discos y
trabajar con los manejadores de dispositivos de bajo nivel,
principalmente. El núcleo independiente del hardware se
encarga de ofrecer las llamadas al sistema, manejar
los sistemas de
archivos y la planificación de procesos. Para el usuario
esta división generalmente pasa desapercibida. Para un
mismo sistema operativo
corriendo en diferentes plataformas, el núcleo
independiente es exactamente el mismo, mientras que el
dependiente debe re-escribirse.

Microkernel
Un núcleo con 'arquitectura'
micronúcleo es aquél que contiene únicamente
el manejo de procesos y threads, el de manejo bajo de memoria, da
soporte a las comunicaciones
y maneja las interrupciones y operaciones de
bajo nivel de entrada-salida. [Tan92]. En los sistemas
oprativos que cuentan con este tipo de núcleo se usan
procesos 'servidores' que
se encargan de ofrecer el resto de servicios (por
ejemplo el de sistema de
archivos) y que utilizan al núcleo a través del
soporte de comunicaciones.

Este diseño
permite que los servidores no
estén atados a un fabricante en especial, incluso el
usuario puede escoger o programar sus propios servidores. La
mayoría de los sistemas
operativos que usan este esquema manejan los recursos de
la computadora
como si fueran objetos: los servidores ofrecen una serie de
'llamadas' o 'métodos' utilizables con un comportamiento
coherente y estructurado. Otra de las características importantes de los
micronúcleos es el manejo de threads. Cuando un proceso
está formado de un solo thread, éste es un proceso
normal como en cualquier sistema operativo.

Los usos más comunes de los micronúcleos es
en los sistemas
operativos que intentan ser distribuídos, y en
aquellos que sirven como base para instalar sobre ellos otros
sistemas operativos. Por ejemplo, el sistema operativo AMOEBA
intenta ser distribuído y el sistema operativo MACH sirve
como base para instalar sobre él DOS, UNIX,
etc.

8. Caso De Estudio: UNIX

Unix es uno de los sistemas operativos más
ampliamente usados en computadoras
que varían desde las personales hasta las macro. Existen
versiones para máquinas
uniprocesador hasta multiprocesadores. Debido a su historia, que evoluciona en
los Laboratorios Bell de AT&T con un simulador de un viaje
espacial en el sistema solar,
pasando por su expansión en universidades y la
creación de las versiones más importantes que son
la de la Universidad de
Berkeley y el Sistema V de la misma AT&T.

Estandarización de UNIX
Debido a las múltiples versiones en el mercado de
UNIX, se
comenzaron a publicar estándares para que todas la s
versiones fuesen 'compatibles'. La primera de ellas la
lanzó AT&T llamada SVID (System V Interface
Definition) que defininía cómo deberían ser
las llamadas al sistema, el formato de los archivos y muchas
cosas más, pero la otra versión importante, la de
Bekeley (Berkeley Software Distribution o BSD)
simplemente la ignoró. Después la IEEE usó
un algoritmo
consistente en revisar las llamadas al sistema de ambas versiones
(System V y BSD) y aquellas que eran iguales las definió
como estándares surgiendo así la definición
'Portable Operating System for UNIX' o POSIX, que tuvo buen
éxito y
que varios fabricantes adoptaron rápidamente. El
estándard de POSIX se llama 1003.1 Posteriormente los
institutos ANSI e ISO se
interesaron en estandarizar el lenguaje
'C' y conjuntamente se publicaron definiciones estándares
para otras áreas del sistema operativo como la
interconectividad, el intérprete de comandos y otras.
En la tabla 8.1 se muestran las definiciones de
POSIX.

<>

Estándard Descripción

1003.0 Introducción y repaso.

1003.1 Llamadas al sistema.

1003.2 Intérprete y comandos.

1003.3 Métodos de prueba.

1003.4 Extensiones para tiempo
real.

1003.5 Lenguaje
Ada.

1003.6 Extensiones para la seguridad

1003.7 Administración del Sistema.

1003.8 Acceso transparente a archivos.

1003.9 Lenguaje
Fortran.

1003.10 Supercómputo.

Tabla 8.1 Los Estándares de POSIX

Al momento del auge de los estándares de POSIX
desgraciadamente se formó un grupo de
fabricantes de computadoras
(IBM, DEC y Hewlett-Packard) que lanzaron su propia
versión de UNIX llamada OSF/1 (de Open Software Fundation). Lo
bueno fue que su versión tenía como objetivo
cumplir con todas los estándares del IEEE, además
de un sistema de ventanas (el X11), una interfaz amigable para
los usuarios (MOTIF) y las definiciones para cómputo
distribuido (DCE) y administración distribuida (DME). La idea
de ofrecer una interfaz amigable en UNIX no fue original de OSF,
ya en la versión 3.5 de SunOS de Sun Microsystems se
ofrecía una interfaz amigable y un conjunto de
librerías para crear aplicaciones con interfaz
gráfica técnicamente eficiente y poderosa llamada
SunWindows o SunVIEW. Esta interfaz junto con sus
librerías estaban evolucionando desde la versión
para máquinas aisladas hacia una versión en
red, donde las
aplicaciones podían estarse ejecutando en un nodo de la
red y los resultados gráficos verlos en otro nodo de la red,
pero Sun tardó tanto en liberarlo que le dio tiempo al MIT de
lanzar el X11 y ganarle en popularidad.

AT&T formó, junto con Sun Microsystems y
otras compañias UNIX International y su versión de
UNIX, provocando así que ahora se manejen esas dos
corrientes principales en UNIX.

Filosofía de UNIX
Las ideas principales de UNIX fueron derivadas del
proyecto
MULTICS (Multiplexed Information and Computing Service) del MIT y
de General Electric. Estas ideas son:

  • Todo se maneja como cadena de bytes: Los dispositivos
    periféricos, los archivos y los comandos pueden
    verse como secuencias de bytes o como entes que las producen.
    Por ejemplo, para usar una terminal en UNIX se hace a
    través de un archivo
    (generalmente en el directorio /dev y con nombre
    ttyX).
  • Manejo de tres descriptores estándares: Todo
    comando posee tres descriptores por omisión llamados
    'stdin', 'stdout' y 'stderr', los cuales son los lugares de
    donde se leen los datos de
    trabajo, donde se envían los resultados y en donde se
    envían los errores, respectivamente. El 'stdin' es el
    teclado, el
    'stdout' y el 'stderr' son la pantalla por omisión
    (default).
  • Capacidades de 'entubar' y 'redireccionar': El
    'stdin', 'stdout' y el 'stderr' pueden usarse para cambiar el
    lugar de donde se leen los datos, donde se
    envían los resultados y donde se envían los
    errores, respectivamente. A nivel comandos, el símbolo
    de 'mayor que' (>) sirve para enviar los resultados de un
    comando a un archivo. Por ejemplo, en UNIX el comando 'ls'
    lista los archivos del directorio actual (es lo mismo que 'dir'
    en DOS). Si en vez de ver los nombres de archivos en la
    pantalla se quieren guardar en el archivo 'listado', el
    redireccionamiento es útil y el comando para hacer la
    tarea anterior es 'ls > listado'. Si lo que se desea es
    enviar a imprimir esos nombres, el 'entubamiento' es
    útil y el comando sería 'ls | lpr', donde el
    símbolo "|" ( pipe) es el entubamiento y 'lpr' es el
    comando para imprimir en UNIX BSD.
  • Crear sistemas grandes a partir de módulos:
    Cada instrucción en UNIX está diseñada
    para poderse usar con 'pipes' o 'redireccionamiento', de manera
    que se pueden crear sistemas complejos a través del uso
    de comandos simples y elegantes. Un ejemplo sencillo de esto es
    el siguiente. Suponga que se tienen cuatro comandos separados
    A,B,C y D cuyas funcionalidades son:
  • A: lee matrices
    checando tipos de datos
    y formato.
  • B: recibe matrices,
    las invierte y arroja el resultado en forma
    matricial.
  • C: recibe una matriz y le
    pone encabezados 'bonitos'
  • D: manda a la impresora
    una matriz
    cuidando el salto de página, etc.

Como se ve, cada módulo hace una actividad
específica, si lo que se quiere es un pequeño
sistema que lea un sistema de ecuaciones y
como resultado se tenga un listado 'bonito', simplemente se usa
el entubamiento para leer con el módulo A la matriz, que
su resultado lo reciba el B para obtener la solución,
luego esa solución la reciba el módulo C para que
le ponga los encabezados 'bonitos' y finalmente eso lo tome el
módulo D y lo imprima, el comando completo sería '
A | B | C | D '. ø Fácil no ?

Sistema de Archivos en UNIX
El sistema de archivos de UNIX, desde el punto de vista del
usuario, tiene una organización jerárquica o de
árbol invertido que parte de una raíz conocida como
"/" (diagonal). Es una diagonal al revés que la usada en
DOS. Internamente se usa un sistema de direccionamiento de
archivos de varios niveles, cuya estructura
más primitiva se le llama 'information node' (i-node) cuya
explicación va más allá de este trabajo. El
sistema de archivos de UNIX ofreceun poderoso conjunto de
comandos y llamadas al sistema. En la tabla 8.2 se muestran los
comandos más útiles para el manejo de archivos en
UNIX vs. VMS.

Comando en UNIX Comando en VMS Utilidad
rm delete borra archivos
cpb copy copia archivos
mv rename renombra archivos
ls dir lista directorio
mkdir create/directory crea un directorio
rmdir delete borra directorio
ln – crea una 'liga simbolica'
chmod set protection maneja los permisos
chown set uic cambia de dueño

Tabla 8.2 Manejo de Archivos en UNIX y VMS
La protección de archivos en UNIX se maneja por medio de
una cadena de permisos de nueve caracteres. Los nueve caracteres
se dividen en tres grupos de tres
caracteres cada uno.

RWX RWX RWX

1 2 3

El primer grupo (1)
especifica los permisos del dueño del archivo. El segundo
grupo especifica los permisos para aquellos usuarios que
pertenecen al mismo grupo de trabajo que el dueño y
finalmente el tercer grupo indica los permisos para el resto del
mundo. En cada grupo de tres caracteres pueden aparecer las
letras RWX en ese orden indicando permiso de leer (READ),
escribir (WRITE) y ejecutar (EXECUTE). Por ejemplo, la cadena
completa RWXR-XR– indica que el dueño tiene los tres
permisos (READ,,WRITE,EXECUTE), los miembros de su grupo de
trabajo tienen permisos de leer y ejecutar (READ,EXECUTE) y el
resto del mundo sólo tienen permiso de leer (READ). Las
llamadas al sistema más útiles en UNIX son 'open',
'close' e 'ioctl'. Sirven para abrir, cerrar archivos; y
establecer las características de trabajo. Por ejemplo, ya
que en UNIX las terminales se accesan a través de archivos
especiales, el 'ioctl' (input output control) sirve
para establecer la velocidad,
paridad, etc; de la terminal.

El núcleo de UNIX
El núcleo de UNIX (kernel) se clasifica como de tipo
monolítico, pero en él se pueden encontrar dos
partes principales [Tan92]:
el núcleo dependiente de la máquina y el
núcleo independiente. El núcleo dependiente se
encarga de las interrupciones, los manejadores de dispositivos de
bajo nivel (lower half) y parte del manejo de la memoria. El
núcleo independiente es igual en todas las plataformas e
incluye el manejo de llamadas del sistema, la planificación de procesos, el entubamiento,
el manejo de sentilde;ales, la paginación e intercambio,
el manejo de discos y del sistema de archivos.

Los procesos en UNIX
El manejo de procesos en UNIX es por prioridad y round robin. En
algunas versiones se maneja también un ajuste
dinámico de la prioridad de acuerdo al tiempo que los
procesos han esperado y al tiempo que ya han usado el CPU. El
sistema provee facilidades para crear 'pipes' entre procesos,
contabilizar el uso de CPU por proceso y una pila común
para todos los procesos cuando necesitan estarse ejecutando en
modo privilegiado (cuando hicieron una llamada al sistema). UNIX
permite que un proceso haga una copia de sí mismo por
medio de la llamada 'fork', lo cual es muy útil cuando se
realizan trabajos paralelos o concurrentes; también se
proveen facilidades para el envío de mensajes entre
procesos. Recientemente Sun Microsystems, AT&T, IBM, Hewlett
Packard y otros fabricantes de computadoras llegaron a un acuerdo
para usar un paquete llamado ToolTalk para crear aplicaciones que
usen un mismo método de
intercambio de mensajes.

El manejo de memoria en UNIX
Los primeros sistema con UNIX nacieron en máquinas cuyo
espacio de direcciones era muy pequeño (por ejemplo 64
kilobytes) y tenían un manejo de memoria real algo
complejo. Actualmente todos los sistemas UNIX utilizan el manejo
de memoria
virtual siendo el esquema más usado la
paginación por demanda y
combinación de segmentos paginados, en ambos casos con
páginas de tamaño fijo. En todos los sistemas UNIX
se usa una partición de disco duro
para el área de intercambio. Esa área se reserva al
tiempo de instalación del sistema operativo. Una regla muy
difundida entre administradores de sistemas es asignar una
partición de disco duro que
sea al menos el doble de la cantidad de memoria real de la
computadora.
Con esta regla se permite que se puedan intercambiar
flexiblemente todos los procesos que estén en memoria RAM en un
momento dado por otros que estén en el disco. Todos los
procesos que forman parte del kernel no pueden ser intercambiados
a disco. Algunos sistemas operativos (como SunOS) permiten
incrementar el espacio de intercambio incluso mientras el sistema
está en uso (en el caso de SunOS con el comando 'swapon').
También es muy importante que al momento de decidirse por
un sistema operativo se pregunte por esa facilidad de incrementar
el espacio de intercambio, así como la facilidad de
añadir módulos de memoria RAM a la computadora
sin necesidad de reconfigurar el núcleo.

El manejo de entrada/salida en UNIX
Derivado de la filosofía de manejar todo como flujo de
bytes, los dispositivos son considerados como archivos que se
accesan mediante descriptores de archivos cuyos nombres se
encuentran generalmente en el directorio '/dev'. Cada proceso en
UNIX mantiene una tabla de archivos abiertos (donde el archivo
puede ser cualquier dispositivo de entrada/salida). Esa tabla
tiene entradas que corresponden a los descriptores, los cuales
son números enteros [Deitel93] obtenidos por medio de la
llamada a la llamada del sistema 'open'. En la tabla 8.3 se
muestran las llamadas más usuales para realizar
entrada/salida.

Llamada Función
open Obtener un descriptor entero.
close Terminar las operaciones sobre el archivo
lseek Posicionar la entrada/salida.
read,write Leer o escribir al archivo (dispositivo)
ioctl Establecer el modo de trabajo del dispositivo

Tabla 8.3 Llamadas al sistema de entrada/salida
En UNIX es posible ejecutar llamadas al sistema de entrada/salida
de dos formas: síncrona y asíncrona. El modo
síncrono es el modo normal de trabajo y consiste en hacer
peticiones de lectura o
escritura que
hacen que el originador tenga que esperar a que el sistema le
responda, es decir, que le de los datos deseados. A veces se
requiere que un mismo proceso sea capaz de supervisar el estado de
varios dispositivos y tomar ciertas decisiones dependiendo de si
existen datos o no. En este caso se requiere una forma de trabajo
asíncrona. Para este tipo de situaciones existen las
llamadas a las rutinas 'select' y 'poll' que permiten saber el
estado de un
conjunto de descriptores.

9. Caso De Estudio:
VMS

El sistema operativo VMS (Virtual Memory System) es
uno de los más robustos en el mercado, aunque
es propietario de la compañia Digital Equipment
Corporation. Actualmente con su versión OpenVMS 5.x existe
para los procesadores de
las máquinas VAX (CISC) y con el Alpha-chip (RISC). Ofrece
un amplio conjunto de comandos a través de su
intérprete Digital Command Language (DCL), utilidades de
red (DECnet), formación de 'clusters' de computadoras para
compartir recursos,
correo
electrónico y otras facilidades. Es un sistema
operativo multiusuario/multitarea
monolítico.

El manejo de archivos en VMS
El sistema de archivos de VMS es jerárquico aunque la
descripción de sus senderos tiene una
sintaxis propia. En la figura 9.1 se muestra un
ejemplo.
Los archivos en VMS se referencían con la sintaxis
'nombre.tipo;versión', donde 'nombre' es una cadena de
caracteres alfanuméricos, 'tipo' es la extensión
del archivo y se usa generalmente para describir a qué
aplicación pertenece ('pas'=pascal, 'for'
fortran, etc.) y 'versión' es un número entero que
el sistema se encarga de asignar de acuerdo al número de
veces que el archivo ha sido modificado. Por ejemplo, si se ha
editado tres veces el archivo 'lee.pas', seguro que
existirán las versiones 'lee.pas;1', 'lee.pas;2' y
'lee.pas;3'. De esta forma el usuario obtiene
automáticamente una 'historia' de sus
archivos.
La protección de los archivos se realiza mediante listas
de control de acceso
(Access Control
Lists). Se pueden establecer protecciones hacia el dueño
del archivo, hacia los usuarios privilegiados (system), hacia los
usuarios que pertenecen al mismo grupo de trabajo que el
dueño y hacia el resto del mundo. Para cada uno de los
anteriores usuarios se manejan cuatro permisos: lectura,
escritura, ejecución y borrado. Por ejemplo, el siguiente
comando:

$ set protection=(S:rwed,O:rwed,G:d:W:e) lee.pas
establece que el archivo 'lee.pas' dará todos los permisos
al sistema (S:rwed) y al dueño (O:rwed), mientras que a
los miembros del grupo de trabajo le da permiso de borrar (G:d) y
al resto del mundo permiso de ejecución (W:e).
[VMS89].
Una lista de los comandos sobre archivos más útiles
en VMS se mostró en la tabla 8.2, que son bastante
mnemónicos en
contraste con los comandos crípticos de UNIX.
En VMS, a través de su 'Record Management System' (RMS) se
obtienen las facilidades para la manipulación de archivos
tanto locales como en red. En el RMS, se provenn facilidades
tales como: múltiples modos de acceso a archivos para
lograr accesarlos en forma concurrente y permitiendo su
consistencia e integridad, establecimiento de candados
automáticos al momento de apertura para evitar
actualizaciones erróneas y optimización interna en
las operaciones de entrada/salida al accesar los archivos. En el
caso de que los archivos no son locales, sino remotos, se utiliza
internamente el protocolo llamado
'Data Access Protocol'
(DAP).

Manejo de procesos en VMS
Soporta muchos ambientes de usuario tales como : Tiempo
crítico, desarrollo de
programas
interactivos, batch, ya sea de manera concurrente, independiente
o combinado.
El calendarizador VAX/VMS realiza calendarización de
procesos normales y de tiempo real, basados en la prioridad de
los procesos ejecutables en el Balance Set.Un proceso normal es
referido a como un proceso de tiempo compartido o proceso
background mientras que los procesos en tiempo real se refieren a
los de tiempo crítico.

En VMS los procesos se manejan por prioridades y de
manera apropiativa. Los procesos se clasifican de la prioridad 1
a la 31, siendo las primeras quince prioridades para procesos
normales y trabajos en lote, y de la 16 a la 31 para procesos
privilegiados y del sistema. Las prioridades no permanecen fijas
todo el tiempo sino que se varían de acuerdo a algunos
eventos del
sistema. Las prioridades de los procesos normales pueden sufrir
variaciones de hasta 6 puntos, por ejemplo, cuando un proceso
está esperando un dispositivo y éste fue liberado.
Un proceso no suelta la unidad central de procesamiento hasta que
exista un proceso con mayor prioridad.

El proceso residente de mayor prioridad a ser
ejecutado siempre se selecciona para su ejecución.Los
procesos en tiempo crítico son establecidos por el usuario
y no pueden ser alterados por el sistema. La prioridad de los
procesos normales puede ser alterada por el sistema para
optimizar overlap de computación y otras actividades
I/O.

Un aspecto importante del planificador de procesos en
VMS es la existencia de proceso 'monitor' o
'supervisor', el cual se ejecuta periódicamente para
actualizar algunas variables de
desempeño y para re-calendarizar los
procesos en ejecución.

Existen versiones de VMS que corren en varios
procesadores,
y se ofrece librerías para crear programas con
múltiples 'threads'. En específico se proveen las
interfaces 'cma', 'pthread' y 'pthread-exception-returning'.
Todas estas librerías se conocen como DECthreads e
incluyen librerías tales como semáforos y colas
atómicas para la
comunicación y sincronización entre threads. El
uso de threads sirve para enviar porciones de un programa a
ejecutar en diferentes procesadores aprovechando así el
multiproceso.

Servicios del Sistema para el Control de
Procesos

  • Crear un proceso:

El servicio de
creado de sistema permite a un proceso crear otro. El proceso
creado puede ser un subproceso o un proceso completamente
independiente. (se necesitan privilegios para hacer
esto).

  • Suspender un proceso:

Esto es que le permite a un proceso suspenderse a
sí mismo o a otro (también necesita tener
privilegios).

  • Reanudar un proceso:

Permite a un proceso reanudar a otro si es que este
tiene privilegios para hacerlo.

  • Borrar un proceso:

Permite que se borre el proceso mismo o a otro si es
que es un subproceso, o si no tiene que tener privilegios de
borrado.

  • Dar Prioridad:

Permite que el proceso mismo se ponga prioridad o a
otros, para el calendarizador.

  • Dar el modo de espera:

Permite que el proceso escoja de dos modos: el modo
por default es cuando un proceso requiere un recurso y
está ocupado y espera a que esté desocupado, y el
otro modo es cuando está ocupado el recurso, el proceso no
espera y notifica al usuario que el recurso no se encuentra
disponible en ese momento en lugar de esperar.

  • Hibernar:

Es cuando un proceso se hace inactivo pero
está presente en el sistema. Para que el proceso continue
necesita de un evento para despertar.

  • Wake:

Esto activa a los procesos que estan
hibernando.

  • Exit:

Es cuando se aborta un proceso.

  • Dar nombre al proceso:

Este puede dar un nombre al proceso mismo o cambiarlo
(el PCB contiene el nombre).

Manejo de memoria en VMS
El sistema operativo VMS utiliza un esquema de manejo de memoria
virtual combinado de segmentación paginada que se describe
exactamente como se vió en el capítulo de
administración de memoria de este trabajo. Lo novedoso en
VMS es que usa un doble esquema de paginación cuando las
páginas se van a intercambiar de memoria RAM hacia
disco duro. En primer lugar, cuando una página necesita
cargarse a RAM ésta
se carga junto con varias páginas que están
adyacentes, justificando esto por medio de la teoría
del conjunto de trabajo que especifica que es muy probable que
las referencias a memoria en el futuro inmediato caerán
precisamente en esas páginas. De este modo, se tiene un
doble algoritmo: al
hecho de cargarse las páginas cuando se necesitan se le
llama 'paginación por demanda' y al
hecho de traerse las otras páginas del conjunto de trabajo
por anticipado se le llama 'paginación
anticipada'.

El manejo de entrada/salida en VMS
En VMS, se usan nombres 'lógicos' para describir a los
dispositivos existentes en el sistema. Un concepto
importante tanto en archivos como en dispositivos es el 'User
Identification Code' (UIC) que permite establecer protecciones
adicionales a los ACL. En los dispositivos se manejan cinco tipos
de permisos: leer, escribir, ejecutar, borrar y controlar. No
todos los permisos se aplican a todos los dispositivos. El
permiso de 'control' no se maneja explícitamente sino que
se otorga por omisioacute;n al dueño y al sistema. Los
permisos de los discos, unidades de cinta y otros dispositivos
son establecidos por el administrador del
sistema.

Los dispositivos reciben nombres 'lógicos',
por ejemplo, para una unidad de cinta el nombre puede ser
'MTA0'.
System Interface" (SCSI) que son ampliamente usados en diversas
plataformas. El intercambio de datos entre la unidad central de
proceso y los periféricos se lleva a cabo a través
de los 'buses' normalizados UNIBUS y MASSBUS.

10. Caso De Estudio:
OS/2

El sistema operativo OS/2 ha tenido una historia
turbulenta en el seno de Microsoft e
IBM, creciendo en algún tiempo bajo equipos de
trabajo de ambas compañias y prosiguiendo finalmente
con la última. Los objetivos para
este sistema operativo eran: compatibilidad para ejecutar los
programas existentes para DOS en las computadoras 80×86, ofrecer
la multitarea, la facilidad de memoria virtual y servicios de red
de área local [Alcal92].

Manejo de archivos en OS/2
Debido al objetivo
inicial de mantener compatibilidad con DOS, las versión
1.0 de OS/2 era muy similar a la de éste sistema
operativo. Posteriormente en las versiones 2.x mejoró el
sistema de archivos con otras facilidades, como ofrecer dos modos
de trabajo: el síncrono y el asíncrono. El modo
síncrono se realiza a través del llamado a las
rutinas 'DosRead' y 'DosWrite', mientras que el asíncrono
se realiza por medio de 'DosReadAsync' y 'DosWriteAsync'. En el
caso de que se estén ejecutando varios 'threads' de un
proceso, la sincronización de las operaciones sobre
archivos se puede realizar a través de semaacute;foros con
la llamada a la rutina 'DosMuxSemWait'.

Respecto a los discos duros,
OS/2 permite crear varias particiones en un solo disco y mantener
sistemas de archivos en cada partición con su propio 'File
Allocation Table' (FAT) en cada partición. A este tipo de
particiones se les llama 'particiones ampliadas'. OS/2 continua
usando nombres de archivos de ocho caracteres y extensiones de
tres con un punto que los separa. En la tabla 10.1 se muestran
algunas llamadas para la manipulacioacute;n de
archivos.

Llamada Descripción

DosBufReset Graba al disco los buffers del
archivo

DosClose Cierra el archivo

DosDelete Borra el archivo

DosDevIOCtl Establece parámetros de
trabajo

DosMkDir Crea un directorio

DosNewSize Cambia el tamaño de
archivo

DosFileInfo Obtiene información sobre el archivo

DosSetFileInfo Establece información del archivo

DosOpen Abre un archivo

DosSetFileMode Establece el modo de
operación

DosRmDir Borra un directorio
vacío

DosSelectDisk Selecciona un disco para
trabajar

Tabla 10.1 Algunas llamadas de OS/2 para
archivos

Como en UNIX y algunos otros sistemas operativos,
OS/2 permite ser instalado en una partición de disco duro
y dejar otras intactas para instalar otros sistemas operativos,
dando así la facilidad de poder usar una
misma computadora
con diferentes sistemas operativos. OS/2 ofrece una interfaz
gráfica para que el usuario trabaje, en particular ofrece
un ícono para representar los archivos y una barra de
menús para realizar operaciones sobre ellos como abrirlos,
cerralos, copiarlos, etc. Si el usuario está acostumbrado
a teclear comandos, entonces puede pedir una sesión de DOS
para usar los comandos habituales de ese sistema operativo. En
particular, en el ambiente de
ventanas se tiene un ícono denominado 'Sistema OS/2' que
contiene otro ícono llamado 'Unidades' y ahí
existen íconos que representan el disco duro, unidades de
disco flexible, etc. Para realizar copias de archivos, borrados,
etc; basta con arrastrar los íconos correspondientes
de/hacia el origen/destino deseado. La versión inicial de
OS/2 tenía incluído el sistema Windows, pero
debido a las regalías que debía pagar a Microsoft,
éste fue eliminado y el usuario debe adquirirlo por
separado, y configurarlo al momento de
instalación.

Manejo de procesos en OS/2
OS/2 utiliza un esquema de planificación apropiativa, es
decir, los procesos pueden ser suspendidos para darle su turno de
ejecución a otro diferente. Los procesos pueden estar
dividos en 'threads' que cuentan con sus propios registros, pila
y contador de programa y todos los 'threads' de un mismo proceso
comparten la memoria. Esto facilita la comunicación entre ellos y la
sincronización. También es posible que un proceso
genere un proceso hijo, en tal caso el hijo hereda todos los
atributos del padre como son los descriptores de archivos
abiertos, los valores en
memoria, etc; prácticamente igual que el sistema operativo
UNIX.

Otra facilidad de OS/2 es la facilidad de crear
'conductos' lo cual también es una función
heredada de UNIX.
La calendarización de procesos o 'threads' se hace por
prioridad y dándoles una intervalo de ejecución a
cada proceso o 'thread'. Se manejan tres niveles de prioridades:
procesos preferentes, procesos preferentes interactivos y
procesos normales. OS/2 eleva a la categoría de prefentes
a aquellos procesos que hacen mucha E/S.

Otra facilidad notable de OS/2 es la carga dinámica de librerías, que consiste
en la generación de aplicaciones cuyas librerías no
forman parte del coacute;digo compilado, sino que son cargadas
cuando el programa es ejecutado. Esto sirve bastante sobre todo
cuando las librerías son de uso común. Como se ve,
esta facilidad es parecida a las del sistema operativo UNIX
SunOS.

Manejo de memoria en OS/2
La versión inicial de OS/2 usaba segmentación pura debido sobre todos a las
restricciones de los procesadores. Pero ya que el 80386 soportaba
segmentación y paginación, IBM prometió un
manejo de memoria virtual más sofisticado. El algoritmo de
sustitución de segmentos era el 'Menos Recientemente
Usado'. Con el 80386 se rompió la barrera de segmentos de
64 kilobytes para ofrecer los llamados 'segmentos gigantes' que
podian estar formados de varios segmentos de 64k. Debido a que
OS/2 debe hacer uso del modo protegido, no se permiten algunos
manejadores de extensión de memoria que violan este modo
de trabajo. En particular, la versión 2.0 soporta
aplicaciones que usan el modo protegido de DOS 'DOS Protect-Mode
Interface', el 'Expanded Memory Specification' (EMS), o el
'Extended Memory Specification' (XMS). Los programas que usan
WINMEM32.DLL no eran soportados, ni los que accesan directamente
los sectores fisicos del disco duro.

Para estas fechas, es posible contar con una
versión de OS/2 que maneje la memoria con
paginación.

Manejo de entrada/salida en OS/2
En OS/2 se tuvo un gran problema de diseño
en este aspecto, ya que se deseaba dar compatibilidad a los
programas existentes para DOS. En este aspecto, existen gran
cantidad de programas de DOS que accesaban directamente algunos
periféricos, incluso interceptando los
vectores de
interrupciones para realizar un manejo propio en la
entrada/salida. Todos esos programas no son soportados en forma
nativa en OS/2, sino que deben ser recreados usando una facilidad
llamada 'supervisor de dispositivos'.

OS/2 sigue soportando la idea de 'device drivers' en
una forma parecida que en DOS. De hecho, algunos estudiosos de
los sistemas operativos afirman que DOS se puede considerar como
un sistema 'microkernel' por esta característica.
Para que un proceso sea candidato a manejar un dispositivo, debe
informarlo a través de una llamada a 'DosMonOpen' y
'DosMonReg'. El supervisor de dispositivos usará un
modelo de
productor-consumidor para
enviar y recibir datos con el proceso candidato. Tambieacute;n es
factible que para un mismo dispositivo el supervisor envíe
los datos a varios procesos interesados en leer de él. Los
dispositivos en OS/2 se clasifican en aquellos orientados a
bloques y aquellos orientados a caracteres. Los dispositivos
orientados a caracteres se manejan de manera
síncrona.

Los procesos también pueden indicar los
permisos de los archivos y dispositivos para indicar
quiénes pueden accesarlos al mismo tiempo. De este modo se
consigue que los datos estén
íntegros.

También existe el servicio de
reloj, lo cual permite sincronizar algunos eventos, por
medio del reloj del sistema que oscila 32 veces por segundo y
otro que oscila millones de veces. Dependiendo de la
precisión deseada se usa el reloj adecuado. Las llamadas
para el reloj de mayor precisión se hacen en un
área llamada 'segmento de información global' por
medio de la rutina 'DosGetInfoSeg'.

11. Caso De Estudio:
WindowsNT

Windows NT es el nuevo sistema operativo de
Microsoft. Fue diseñado para tomar ventaja de todo el
poder que ofrecen los procesadores más avanzados de Intel,
así como algunos de los procesadores RISC. Windows NT es
la respuesta de Microsoft a UNIX. NT ofrece los mismos servicios
que UNIX, interopera con redes UNIX pero remplaza los
comandos criacute;pticos de UNIX, su estructura de
archivos ARCANE y la mezcla de GUIs con una simple y
estandarizada interfaz para el usuario como lo es Windows.
Además, NT tiene las características que
originalmente iba a tener el OS/2: un avanzado sistema operativo
de 32 bits y compatibilidad con Windows GUI, además de
soportar las aplicaciones hechas en DOS pero liberándose
de las limitaciones de éste. Las características de
diseño que hacen de Windows NT un
sistema operativo avanzado son

  • Extensibilidad: El código podrá ser alterado (crecer
    o cambiar) de manera sencilla según cambien las
    necesidades del mercado.
  • Portabilidad: El código podrá
    utilizar cualquier procesador sin
    que esto afecte su desempeño de manera
    negativa.
  • Confiabilidad y robustez: El sistema deberá
    auto-protegerse tanto de los malos funcionamientos internos
    como de los externos. Así mismo se deberá
    comportar de manera predecible en cualquier momento y las
    aplicaciones no deberán afectar su funcionamiento en
    forma negativa.
  • Compatibilidad: El sistema se extendará
    hacia la tecnología existente pero al mismo tiempo
    sus API y sus UI serán compatibles con los sistemas ya
    existentes de Microsoft.
  • Multiprocesamiento y escalabilidad: Las
    aplicaciones podrán tomar ventaja de cualquier
    computadora y los usuarios podrán correr las mismas
    aplicaciones tanto en una computadora de un procesador como
    en una multiprocesador.
  • Cómputo distribuído: NT será
    capaz de repartir sus tareas computacionales a otras
    computadoras en la red para dar a los usuarios más poder
    que el que tenga cualquier computadora por sí misma en
    la red. Podrá usar computadoras tanto local como
    remotamente de manera transparente al usuario (efecto de
    sinergia en
    red).
  • Desempeño: El sistema debe responder y ser
    lo más rápido posible en cada plataforma
    HW.
  • Compatibilidad con POSIX: POSIX (Portable
    Operating System based on UNIX) es un estándar
    especificado por el gobierno de los
    EU, el cual deberán de cumplir todos los contratos en el
    área computacional que sean vendidos a ese gobierno. NT
    puede proporcionar un ambiente
    opcional para la ejecución de aplicaciones
    POSIX.
  • Seguridad certificable por el gobierno de EU: El
    gobierno de EU estableció niveles de seguridad
    computacional como guías a cumplir para todas las
    aplicaciones gubernamentales. El rango de estos niveles va
    desde la D (menor) hasta la A (mayor), en donde la C y B tienen
    varios subniveles. NT puede soportar el C2 (el dueño del
    sistema tiene el derecho de decidir quién tiene permiso
    de acceso y el sistema operativo puede detectar cuándo
    los datos son accesados y por quién) pero en futuras
    versiones puede ser mejorada para alcanzar niveles de seguridad
    más altos.

Características de WindowsNT
Un sistema operativo es un programa complejo que necesita un
modelo
unificado para asegurarse que el sistema puede acomodar sus
características propias sin que éstas alteren el
diseño. El diseño de Windows NT fue guiado por una
combinación de diversos modelos que
fueron unidos en Windows NT. Los razgos característicos de
NT son:

  • Direccionamiento de 32-bits.
  • Soporte de memoria virtual.
  • Preemptive multitasking.
  • Soporte para multiprocesador.
  • Arquitectura cliente/servidor.
  • Seguridad e integridad del
    sistema.
  • Compatibilidad con otros Sistemas
    Operativos.
  • Independencia de plataformas.
  • Networking (Interoperatividad).

El núcleo de WindowNT
El núcleo es la base del sistema operativo, en donde
reside el ejecutivo del NT por medio del cual se realizan las
siguientes operaciones:

  • Entradas y salidas de tareas al
    sistema.
  • Proceso de interrupciones y
    excepciones.
  • Sincronización de los
    multiprocesadores.
  • Recuperación del sistema después de
    una caída.

Entradas y salidas de tareas al sistema
Cada objeto de tipo tarea es creado como una respuesta a una
requisición de la aplicación que contenga una
mini-tarea consistente en una llamada al kernel que es usada para
iniciar la ejecución de una tarea más larga, cada
una de las tareas puede encontrarse en los estados de
ejecución, espera en cola, espera por recursos, lista para
ejecución o finalizada. El kernel cuenta con un
módulo llamado despachador que se encarga de permitir la
entrada de los procesos y de darlos por terminados. El
despachador igualmente examina la prioridad de los procesos para
determinar en qué orden van a ser ejecutados; suspendiendo
y activando los procesos.

Proceso de interrupciones y excepciones
En Windows NT se manejan las interrupciones como en cualquier
sistema operativo. La llegada de señales por el bus debido a fallas de los
programas o por peticiones de entrada/salida de los
periféricos son atrapadas por el núcleo. En la
Figura 11.1 se pueden observar las partes del núcleo de
WindowsNT. El paso de los subsistemas de OS/2, POSIX y Win32
hacia los servicios del sistema se hace a través de
mensajes y de atrapado de interrupciones.

Sincronización de los multiprocesadores.
Esta característica asegura que sólo una tarea
puede accesar un mismo recurso a la vez. En un sistema basado en
multiprocesadores con memoria compartida, dos o más
procesadores pueden estar ejecutando tareas que necesitan accesar
la misma página de memoria o realizar operaciones sobre un
mismo objeto. El núcleo y el ejecutivo de NT proveen
mecanismos para asegurar la integridad del sistema a
través de la sincronización; en el caso del kernel
la sincronización es manejada a través de candados
colocados en puntos críticos de las instrucciones del
nivel despachador, de esta manera, ningún otro procesador
puede ejecutar código o accesar datos protegidos por uno
de los candados de tipo spin hasta que éste es liberado.
El ejecutivo del NT realiza la sincronización a
través de la familia de
los objetos de sincronización.

Recuperación del sistema
La última función del kernel consiste en la
recuperación del sistema en caso de una caída.
Cuando existe una falla de alimentación en un
sistema NT se dispara una interrupción de alta prioridad
la cual dispara a su vez una serie de tareas diseñadas
para preservar la integridad del sistema operativo y de los datos
tan rápido como sea posible.
El mcro-núcleo de WindowsNT contiene una capa de
abstracción del hw que es el límite entre el
ejecutivo del NT y el hw específico de la computadora. NT
fue diseñado de tal manera que los cambios de
código son mínimos para ser acoplados a las
diferentes plataformas de hw tomando como ejemplo los sistemas
UNIX.

Arquitectura cliente/servidor
Windows NT tiene dos modos de operar, modo usuario y modo
privilegiado (kernel). Programas de aplicaciones como una
base de datos,
una hoja de
cálculo, o un sistema de reservaciones de un hotel,
siempre son ejecutadas en modo usuario. El ejecutivo de NT es el
corazón
del sistema. El ejecutivo de NT realiza tareas como el manejo de
entradas y salidas, la memoria virtual, y todos lo procesos,
además de controlar las ligas entre NT y el hardware de la
computadora. El ejecutivo de NT es ejecutado en modo kernel, el
cual es una modo de alta seguridad libre de interferencias de los
procesos de los usuarios. Consúltese la figura
11.1.

El modo usuario, hay también los llamados
subsistemas protegidos. Un ejemplo de estos es el Win32 API.
Usando esta API los programadores no tienen porque preocuparse
acerca del hardware donde el programa va a ser ejecutado y por
otro lado protege al sistema de aquellos programadores que traten
de modificar su memoria y para hacer que falle el sistema.
Adicionalmente el API tiene reglas de seguridad que protegen a
los otros subsistemas de interferencias entre
ellos.

En el ambiente de NT los programas de
aplicación de los usuarios son los clientes y los
subsistemas protegidos son los servidores. Las aplicaciones
(clientes) mandan mensajes a los subsistemas protegidos a
través del ejecutivo de NT, el cual provee un conjunto de
servicios compartidos para todos los servidores. Y a su vez los
servidores contestan a los clientes de la misma forma.
En NT, los servidores ejecutándose en un procesador local
pueden mandar mensajes de sus clientes a otros servidores que
estén siendo ejecutados en procesadores remotos sin que se
necesite que el cliente sepa algo de los servidores
remotos.

El modelo cliente/servidor hizo que el sistema
operativo fuera más eficiente eliminando recursos
duplicados y elevó el soporte que ofrece el sistema
operativo para multiproceso y redes. Esta arquitectura
permite que otros API's sean añadidos sin tener que
aumentar un nuevo ejecutivo de NT para su manejo. Por otro lado
cada subsistema es un proceso separado en su propias memorias
protegidas, así, si uno de los subsistemas falla no hace
que todo el sistema falle también.

El ejecutivo NT (Ver figura 11.1) es un sistema
operativo completo que no cuenta con interfaz y está
compuesto de cuatro capas, siendo éstas las
siguientes:

  • Servicios del sistema: son las llamadas al sistema
    que sirven como medio de comunicación entre los modos de los
    procesos y los componentes del ejecutivo. La manera en que
    interactúan los dos componentes anteriormente
    mencionados es a través de llamadas al sistema; en otras
    palabras los servicios del sistema son el API para el modo de
    usuario.
  • Componentes del ejecutivo: el ejecutivo de NT
    tiene seis componentes primarios cada uno de los cuales realiza
    el siguiente conjunto de operaciones críticas del
    sistema: manejador de objetos, monitoreo de la seguridad del
    sistema, manejador de procesos, facilidad para la llamada de
    procesos locales, manejador de la memoria virtual y manejador
    de las entradas y salidas.

Manejador de Objetos
Este módulo es el responsable de crear, manejar y borrar
los objetos del ejecutivo de NT, siendo este tipo de objetos
procesos y datos, así como objetos propios de los niveles
del sistema.
Existen dos tipos principales de objetos: los objetos ejecutivos
que son creados dentro del ejecutivo y que son accesibles para el
ejecutivo y los subsistemas protegidos, y la otra clase se
objetos que son sólo accesibles por el ejecutivo y que se
llaman objetos del kernel y que sólo pueden ser
modificados dentro del mismo. El manejador de objetos tiene las
siguientes funciones:

  • Asignar memoria.
  • Asigna un descriptor de seguridad del objeto el
    cual permite o prohíbe el acceso a dicho
    objeto.
  • Coloca el nombre del objeto dentro de la
    posición adecuada en el directorio de
    objetos.
  • Crea y regresa un "manejador" o apuntador al
    objeto el cual elimina la necesidad de llamar al objeto por su
    ubicación.

Monitor de la seguridad del sistema

El monitor de la
seguridad del sistema trabaja en conjunción con el
manejador de objetos para proveer un mecanismo de control de
acceso a los objetos mismos.

La información de control de acceso esta atada
a cada objeto, dentro de esta información cada objeto
maneja una lista de control de accesos ( ACL ) en esta lista cada
objeto registra los permisos de acceso con los que cuenta su
creador pero siempre manteniendo la peculiaridad de que el
dueño de dicho objeto puede cambiar los
permisos.

Manejo de archivos en WindowsNT
En lo relativo al sistema de archivos de NT tiene compatibilidad
con los siguientes sistemas de archivos:

  • FAT (DOS)
  • HPFS (OS/2)

La migración
de archivos desde DOS o Windows 16-bits al sistema manejador de
archivos de Windows NT (NTFS) puede dar como resultado que el
sistema y los usuarios confundan la seguridad de estos archivos
pero esto tiene una fácil solución con la
intervención del administrador.

La facilidad de soportar diferentes tipos de archivos
ayuda a lograr una característica llamada 'personalidad
del sistema operativo'. Esta característica consiste en la
facilidad de que un sistema operativo soporte la ejecución
de aplicaciones creadas para un sistema operativo diferente. Como
se puede observar en la figura 11.1, los susbsistemas de Win32,
de POSIX y de OS/2 complementan el logro de diferentes
personalidades.

Manejo de procesos en WindowsNT
En la arquitectura de NT los procesos son segmentados en
componentes más pequeños llamados 'threads'.
WindowsNT soporta varias tareas al mismo tiempo. Existen dos
tipos de multitarea, el apropiativo (preemptive) y el no
apropiativo (no preemptive). Con la multitarea apropiativa la
ejecución de un 'thread' puede ser suspendida
después de un tiempo determinado (time slice) por el
sistema operativo para permitir que otro thread sea ejecutado.
Mientras que con la multitarea no apropiativa, es el thread el
que determina cuándo le regresará el control al
sistema operativo para permitir que otro thread sea ejecutado. NT
así como OS/2 y UNIX usan preemptive multitasking para
soportar la ejecución "simultánea" de varios
procesos.

Manejador de Procesos.
El manejador de procesos es un componente ambiental que crea y
destruye procesos y tareas, como el manejador de objetos, el
manejador de procesos ve los procesos como si fueran objetos en
efecto el manejador de procesos puede ser considerado como un
instancia específica del manejador de objetos porque dicho
manejador crea, maneja y destruye un sólo tipo de
objetos.
Se puede únicamente distinguir una funcionalidad adicional
al manejador de objetos con la que cuenta el manejador de
procesos que consiste en el manejo del estadío de cada uno
de los procesos (ejecutar, suspender, reiniciar, terminar una
tarea).

Las llamadas a procedimientos
locales (LPC, ver figura 11.1) son usadas para pasar mensajes
entre dos diferentes procesos corriendo dentro de un mismo
sistema NT, estos sistemas fueron modelados utilizando como
modelo las llamadas a procedimientos
remotos (RPC); los RPC consisten en una manera estandarizada de
pasar mensajes entre un cliente y un servidor a través de
una red.
Similarmente los LPC's pasan mensajes de un procedimiento
cliente a un procedimiento
servidor en un mismo sistema NT.
Cada proceso cliente en un sistema NT que tiene capacidad de
comunicación por medio de LPC's debe tener por lo menos un
objeto de tipo puerto asignado a él, este objeto tipo
puerto es el equivalente a un puerto de TCP/IP en un
sistema UNIX.

Soporte para multiprocesador
Existen dos tipos de multiproceso, el asimétrico y el
simétrico. En el asimétrico hay un procesador
(maestro) en el cual se ejecuta el sistema operativo y los
demás (esclavos) donde se ejecutan las demás
tareas. La ventaja de éste es que al aumentar más
procesadores se tiene que hacer un cambio
mínimo y fácil para el manejo de éstos y en
general se eliminan muchos problemas de
integridad de datos. La gran desventaja es que al haber
sólo una copia del sistema operativo en un sólo
procesador (maestro) cuando este procesador falla todo el sistema
falla porque todos los recursos que son manejados por el sistema
operativo no pueden ser accesados.

En el simétrico se ejecuta el sistema
operativo – o una gran parte de él – en cualquiera de los
procesadores disponibles y todos ellos tienen acceso a los
recursos a menos que cada recurso sea asignado a un procesador
específico. Aunque es mas difícil de implementar
tiene muchas más ventajas. Primero, este tipo de sistemas
tienden a ser más eficientes porque las tareas tanto del
sistema operativo como de los usuarios pueden ser
distribuídas en forma balanceada a todos los procesadores.
Debido a que las demandas del sistema operativo pueden ser
repartidas a todos los procesadores, el tiempo de inactividad de
un procesador mientras otro está sobretrabajando es
mínimo. Segunda, si un procesador falla, es posible que
sus tareas sean repartidas entre los demás y no es
necesario que todo el sistema sea parado o que falle el sistema.
Y finalmente, la portabilidad del sistema es mayor debido a que
no sigue la arquitectura de mastrer/slave. NT implementa este
modelo de multiproceso.

Seguridad e integridad del sistema
Seguridad en relación a Windows NT se refiere a dos cosas
básicamente:

  • El control total en el acceso al sistema y a los
    archivos o subdirectorios que hay en el sistema. (Control de
    acceso y seguridad del sistema)
  • La protección individual de los procesos y
    del sistema operativo, para que en caso de un bug o de un
    programa destructivo no pueda hacer que el sistema se caiga o
    afecte a otros programas o aplicaciones. (Integridad del
    sistema)

En el primer punto, el control sobre el acceso al
sistema se refiere al manejo de user names y passwords para poder
accesar al sistema operativo, de esta manera se mantienen a los
usuarios sin autorización fuera del sistema. El siguiente
nivel de seguridad en cuanto a este punto se refiere, son los
privilegios que tiene un usuario, todos los usuarios o grupos de
usuarios a los directorios y archivos del sistema, p.e. el acceso
a los archivos del sistema de NT está estrictamente
limitado al administrador del sistema, mientras que las
aplicaciones comunes como lo son hojas de
cálculo o procesadores de palabras pueden ser
accesados por todos los usuarios.

El segundo punto trata acerca de la integridad del
sistema, la pérdida de información en sistemas
operativos para un sólo usuario no es tan grave comparada
con la de los sistemas operativos para redes, en los cuales se
pudo haber perdido información que tardará horas en
ser recuperada. NT tiene amplias facilidades para asegurar la
integridad del sistema para hacer correr a NT bajo condiciones
difíciles, así como para recuperar el sistema de
manera rápida y sencilla.

Control de Acceso y Seguridad del sistema.
Windows NT cuenta con un extenso sistema de control de seguridad
para el acceso a archivos. El propósito de la seguridad en
Windows NT es brindarle el acceso sólo a aquellos usuarios
que están autorizados, controlar el acceso concurrente a
archivos, a los directorios y a los recursos del
sistema.

La seguridad en los sistemas Windows NT debe ser
configurada por el administrador del sistema siendo necesario
para todos los sistemas un administrador (incluyendo los sistemas
monousuarios). El administrador establece los nombres de usuario,
crea grupos de usuarios, asigna los usuarios a los grupos,
controla los passwords, permite los niveles de acceso a las
funcionalidades del sistema; en pocas palabras el administrados
controla todos los puntos de acceso al sistema.

El administrador puede controlar el acceso
específico a ciertas funciones del
sistema, especialmente aquellas que afectan el funcionamiento del
mismo, este sistema de control es llamado la política de derechos del usuario. De
esta manera el administrador a través de esta política puede
controlar las labores que efectúa un usuario tanto local
como remotamente.

Integridad del sistema
Entendemos por integridad del sistema a la habilidad del mismo de
permanecer activo cuando una de sus aplicaciones falla. Windows
NT está diseñado para prevenir la caída
catastrófica del sistema en caso de que algunas de sus
aplicaciones falle y para esto establece los siguientes cuatro
mecanismos de protección de memoria:

  • Espacio de direcciones separado: cada proceso
    maneja sus propias direcciones virtuales y el sistema
    prohíbe el acceso a espacios de memoria de otros
    procesos.
  • Modos de Kernel y usuarios separados: todas las
    aplicaciones corren en modo de usuario pro lo tanto está
    prohibido el acceso o modificación del código o
    datos del sistema que residan en el kernel.
  • Banderas de páginas: cada página de
    la memoria virtual tiene una bandera la cual determina
    cómo puede ser accesada en modo usuario y en modo
    kernel.
  • Seguridad de los Objetos: el manejador virtual de
    la memoria crea un tipo especial de objeto llamado
    objeto-sección el cual funciona como una ventana hacia
    la memoria virtual, por lo tanto cada vez que un proceso accesa
    un objeto-sección el sistema determina si el proceso
    tiene los permisos de lectura y/o escritura sobre
    éste.

Dentro de la integridad del sistema Windows NT
establece políticas
y procedimientos de protección el acceso a recursos de
esta manera protege a los procesos de caer en estados muertos
cuando compiten por recursos.

Manejo de memoria en WindowNT
Como se mencionó al comienzo de este capítulo,
WindowsNT es un sistema operativo de 32 bits con la facilidad del
manejo de memoria virtual. A continuación se verán
a detalle las caracteristicas ofrecidas en este
S.O.

Direccionamiento de 32 bits
Este tipo de direccionamiento tiene varias ventajas. Primera,
eliminando la memoria segmentada, el desarrollo de
software es mas fácil y rápido. Los programadores
no necesitarán estar familiarizados con los requerimientos
de memoria de sus aplicaciones. Además, el
direccionamiento de 32-bits mejora el desempeño del
sistema eliminando parte del 'overhead' del software para el
manejo de la memoria. Quitando los manejadores de memoria elimina
también las incompatibilidades en hw y sw, lo que
significa que la instalación y configuración de NT
es tan simple y fácil como la de DOS o la de 16-bit
Windows.

La ventaja final del direccionamiento de 32-bits es
un incremento considerable en el tamaño disponible para
los programas y los datos. NT soporta un máximo de 4 Gigas
de programas y sistema, lo que es n veces más grande de lo
que soporta el DOS o el mismo 16-bit Windows, ésta es una
gran ventaja si se van a manejar aplicaciones complejas que
procesan archivos muy grandes (como los de procesamiento de
imágenes) o a aplicaciones orientadas a
transacciones críticas, las cuales serían
imposibles de implementar en DOS y Windows.

Soporte de memoria virtual
El direccionamiento de 32-bits le da a las aplicaciones acceso a
4 Gigabytes de memoria, de los cuales 2 Gigas están
reservados para uso del sistema operativo, y que son más
que suficientes para casi cualquier aplicacion
concebible.

Cuando el usuario o el administrador instala por
primera vez NT, el NT setup program checa cuánto espacio
en RAM y en DD está disponible. Basándose en esto
NT crea un swap file, el cual debe de ser al menos del mismo
tamaño del RAM. El manejador de memoria virtual de NT
realiza dos tareas básicas. Primero, maneja los datos
guardados en disco y mapea las direcciones de los datos que
están en disco al espacio de direcciones en 32-bits
lineales. Las aplicaciones pueden hacer operaciones con los datos
sin importar la localización física de ellos
(disco o RAM).

Segundo, el manejador de memoria virtual mueve
algunas porciones del RAM al swap file cuando los procesos tratan
usar más RAM del que está disponible. En este caso,
las partes inactivas de RAM son movidas temporalmente al swap
file hasta que son necesitadas en RAM, el tamaño de
página con que se hace el swap de RAM a disco es de 4 K.
Es decir, se usa paginación por demanda.

Manejador de memoria virtual
El manejador de memoria virtual (MMV) de los sistemas NT realiza
tres funciones escenciales: el manejo del espacio virtual de cada
uno de los procesos, el espacio de memoria compartida entre los
procesos, la protección de la memoria virtual de cada
proceso. Dentro del manejo de la memoria virtual de cada proceso
se realizan las siguientes tareas :

  • Reservar y liberar la memoria
    virtual
  • La lectura y escritura de páginas de
    memoria virtual
  • El establecimiento de candados en las
    páginas seleccionadas de la memoria virtual lo cual
    significa, el mantiene unas páginas de la memoria real
    sin ser intercambiadas a disco (swap).
  • El encadenamiento de la información dentro
    de las páginas de memoria virtual
    protegida
  • El vaciado de las páginas virtuales a
    disco

El manejador de memoria virtual permite que uno o
varios procesos compartan las mismas páginas de memoria
virtual, de tal manera que dos o más procesos puedan tener
manejadores a la misma área de memoria virtual. El MMV
tiene una característica singular que consiste en el poder
direccionar una pequeña área del espacio de memoria
virtual de otro proceso, esta ventana del espacio total de
memoria virtual de procesos es llamada vista y ésta
permite que un proceso trabaje con muchas porciones
pequeñas de largos espacios de memoria virtual para crear
su propio espacio de memoria virtual.

Memoria protegida
El manejador de memoria de Windows NT permite proteger ciertas
regiones de memoria de accesos inadvertidos o deliberados
realizados por otros procesos. El MMV es responsable de hacer el
mapeo entre las direcciones de memoria virtual y las direcciones
de hw específicas asegurando de esta manera que dos
procesos no puedan accesar una misma página de memoria. El
MMV utiliza técnicas
de manejo de memoria en hw que están disponibles en la
computadora host y de esta manera establece la protección
a cada una de las páginas. Todas las protecciones de las
páginas no están provistas por el hw por lo que
Windows NT tuvo que hacerlo a través del sw definiendo
páginas individuales de memoria como de lectura y
escritura, sólo lectura, sólo escritura, de
ejecución o sin acceso.

Para aplicaciones que utilizan largos sectores de
memoria Windows NT introduce un concepto llamado
" bookend " el cual consiste en un página que marca el final
del código o de datos; cuando el proceso llega a una de
estas páginas llamadas páginas guardia sabe que se
encuentra en un estado fuera
de memoria y solicita memoria adicional al MMV protegiendo de
esta manera la caída de la
aplicación.

En situaciones donde dos o más procesos
necesitan accesar la misma región de memoria, el MMV
realiza una copia de la página para que el segundo proceso
lo utilice estableciendo de esta manera el mecanismo de
protección de páginas y a su vez estableciendo la
memoria compartida.

Cuando un proceso quiere modificar ciertos datos en
la memoria compartida debe primero modificarlo en su copia de las
páginas de memoria y después notificar al MMV que
necesita actualizar los cambios en las páginas de los
demás procesos, previniendo de esta manera que el proceso
modifique directamente las páginas de memoria que no le
pertenecen.

Manejo de entrada/salida en WindowsNT

En Windows NT el manejador de las entradas y salidas
debe ser considerado más bien como un despachador de las
entradas y salidas al sistema, puesto que este módulo
establece la
comunicación entre los subsistemas protegidos y los
controladores de dispositivos por otro lado.

Cuando cualquier aplicación solicita un
servicio de entrada/salida, el manejador de entradas/salidas
convierte la solicitud en un IRP (I/O request packet) e
identifica el manejador de dispositivos adecuado para llevar
acabo la requisición hecha por el proceso. Cada uno de los
manejadores de dispositivos recibe el paquete de datos y lo
procesa mandando el resultado hacia el manejador de entradas y
salidas o si es necesario mandando su resultado al siguiente
manejador de dispositivos para que procese su resultado, teniendo
como destino final, el paquete de datos, el manejador de entradas
y salidas. Después de que una requisición ha sido
pasada a un manejador de dispositivos éste es responsable
del control de las mismas a través de sistemas de
colas.

Compatiblidad con otros Sistemas Operativos
Una de los más grandes cualidades dentro de Windows NT es
la capacidad de soportar múltiples sistemas operativos. Un
sistema NT puede simultáneamente correr la mayoría
de los programas de DOS, Windows 16-bits, y la mayoría de
las aplicaciones orientadas a caracteres de OS/2 versión
1.x y las que cumplan con el estándar POSIX

Independencia de plataformas
El propósito de Windows NT es el de ser un sistema
operativo diseñado para correr en distintas plataformas
soportando los siguientes procesadores:

  • La familia Intel
    x86
  • De motorola 680×0
  • El MIPS 400
  • El ALFA de Dec.
  • El HP-PA de Hewlett Packard
  • Los SPARC RISC processors de Sun
    Microsystems.
  • El RS/6000 de IBM
  • Una futuras versiónes del Powerpc (Apple,
    IBM y Motorola)

La independencia
de plataforma está basada en el concepto de el desarrollar
un kernel específico para cada uno de los distintos
procesadores que sirva de interfaz entre el hardware
específico y las llamadas al sistema de NT.

Interoperatividad (Networking)
Windows NT ofrece cuatro tipos diferentes de soporte de
redes:

  • Punto a punto: En las conexiones punto a punto con
    otros sistemas Windows NT y Windows para
    grupos.
  • Interoperabilidad: con otros sistemas operativos
    orientados a red como lo son : DEC Pathworks, Novell
    Network, BanyanVINES a través de la arquitectura de
    sistemas abiertos de Windows ( WOSA ) , al igual que sistemas
    UNIX basados en TCP/IP.
  • SNA: Conexiones a host basados en redes SNA a
    través de una propia versión de los servidores de
    comunicaciones de Microsoft DCA.
  • Soporte para redes Microsoft basadas en sistemas
    operativo de red LAN
    Manager.

12. Caso de Estudio: Procesos en
Linux

Linux se ha convertido hoy día en protagonista
de actualidad por méritos propios. Se trata de un
núcleo de sistema operativo bajo licencia GNU que no
sólo permite disponer de un potente sistema operativo,
sino también aprender la teoría de
sistemas estudiando su código fuente.

Introduccion
A estas alturas todos conocemos bien las características
principales de un sistema operativo como Linux. Se trata
de un sistema libre, compatible con el estándar para
sistemas operativos POSIX 1003.1, que incluye numerosas
áreas de funcionamiento del Unix System V y del BSD 4.3.
Es capaz de aportar al usuario multitarea, acceso multiusuario,
protección de archivos en su sistema de ficheros
(además de soportar a la mayoría de los restantes
sistemas de ficheros existentes) y otras muchísimas
ventajas más.

Sin embargo, no siempre sabemos cómo se
consiguen algunas de esas características, o no llegamos a
aprovechar del todo las oportunidades que nos ofrece. Trataremos
de aportar más claridad sobre uno de estos aspectos de
Linux, la
multitarea y los procesos. Para ello describiremos el
funcionamiento y la base de los procesos en Linux. Y en el
segundo pasaremos a un campo más práctico que
será el de la programación de los mismos bajo el lenguaje C,
haciendo uso del estándar POSIX. Trataremos de imprimir al
texto un nivel
alto, pero con la suficiente claridad para que los menos
avanzados puedan captar algo de luz entre tanto
nuevo conocimiento.

Concepto de "proceso"
El Proceso podría definirse como un programa en
ejecución. Y también podría considerarse que
el objetivo último de un sistema operativo es el de crear,
ejecutar y destruir procesos, de acuerdo a las órdenes de
los usuarios. Así, podríamos realizar un
símil entre el famoso anuncio de las cucarachas y los
procesos. Los procesos nacen, crecen, se reproducen, y mueren.
Quizás, considerar que un proceso pueda crecer no es algo
demasiado acertado, aunque ya iremos viendo a lo largo de este
artículo el porqué de esta comparación tan
aparentemente absurda.

Para que un programa pueda ser ejecutado, ha de
residir con sus datos en memoria principal, de forma que Linux
mantiene por cada proceso una serie de estructuras de
información que permiten identificar las
características de éste, así como los
recursos que tiene asignados. Estos recursos son, entre otros,
los descriptores de los ficheros abiertos y los de los puertos de
comunicaciones. El BCP, o bloque de control de proceso, es una
estructura encargada de almacenar una parte muy importante de
dicha información. Linux mantiene una tabla de procesos
con todos los BCP de los procesos existentes. Dicha tabla se
construye como una estructura estática
por razones de eficiencia, de
forma que puede contener un número determinado de BCP
’s, todos del mismo tamaño. Este número
determinado de BCP ’s se establece en al arranque del
sistema operativo, como un parámetro de
configuración del mismo, y en Linux tradicionalmente ha
tenido el valor de 256. Como comentábamos un poco
más arriba, parte de la información que contiene el
BCP son los descriptores de ficheros abiertos y puertos de
comunicaciones. Como idea base tenemos entonces que un proceso se
encuentra formado por el contenido de los segmentos de memoria en
los que residen el código y los datos del mismo (imagen de memoria
o core image), el contenido de los registros del modelo de
programación, y el contenido del BCP. En el
siguiente apartado vamos a ver de donde surgen los procesos. No
lo hacen por arte de magia
sino que, como veréis, nacen unos de otros, siendo el
proceso creador de otro el proceso PADRE, y el creado el proceso
HIJO. Si un proceso no nace de la nada, nos encontramos con el
famoso problema del huevo o la gallina, ¿qué fue
antes?
Por suerte bajo Linux todo tiene una
sola explicación nada filosófica (al menos no
literaria).

El inicio de Linux

Una vez que conocemos lo que es un proceso, vamos a
explicar brevemente cómo se inicia Linux, para introducir
nuevos conceptos sobre el tema que nos ocupa.

Cuando se arranca un computador (o
en su defecto se pulsa el botón de RESET) se genera una
señal eléctrica de RESET que carga unos valores
predefinidos en los registros. En concreto esta
señal carga en el PC (el registro program
counter) la dirección de un programa denominado
iniciador ROM. Este realiza tres funciones. Primero un test del sistema,
que sirve para detectar sus características y comprobar si
el conjunto funciona correctamente. En segundo lugar realiza una
fase de lectura y almacenamiento en
memoria del programa cargador del sistema operativo. Finalmente
el iniciador ROM da control a este programa. En Linux este
programa cargador del sistema operativo, suele ser el
archiconocido LILO.

Cuando toma el control LILO, encuentra el
núcleo de Linux y lo carga en memoria principal. Entonces,
comienza en el punto de entrada "start:" (se puede comprobar todo
esto examinando el código del núcleo situado en el
directorio /usr/src/linux/kernel-version). Se trata de una serie
de instrucciones en lenguaje
ensamblador que se encargan de inicializar el hardware. En un
PC, una vez los parámetros básicos se encuentren
establecidos, se cambia el estado de
la máquina al Modo Protegido, se salta a la dirección de comienzo del núcleo, y
comienza a partir de aquí el inicio real del sistema
operativo. Este inicio comprende el establecimiento de una serie
de parámetros básicos (la MMU (tabla de
páginas), el coprocesador, la tabla descriptora de
interrupciones, etcétera). Una vez se completa esta fase,
se llama a la primera función en C de todo el proceso,
start kernel() (contenida en el archivo
init/maw.c).

La ejecución de esta función, se
convierte en el proceso número 0 del sistema. Éste,
tras salvar una serie de datos sobre el hardware creado por el
código en ensamblador,
realiza una llamada al sistema mediante un fork()
(instrucción que produce nuevos procesos, dos procesos
idénticos, cada una con una copia de espacio de
direcciones adicional). Esta llamada al sistema se encarga de
crear un proceso HIJO a partir del proceso llamante,
convirtiéndose este último en el proceso
PADRE.

El nuevo proceso 1 se encarga de llevar a cabo todas
las operaciones restantes para inicializar Limsx. Para ello
ejecuta la función init() que inicializa el sistema de
ficheros y monta el sistema de ficheros del root mediante la
llamada al sistema setup, aparte de otras muchas cosas. Se
establece una conexión con la consola y se abren los
descriptores de fichero 0, l y 2. Se realiza entonces la
ejecución del programa /sbin/init (otras alternativas son
/etc,/init ó /bin/init). Normalmente éste
iniciará los procesos que trabajarán en segundo
plano o background (más adelante se aclarará este
término), y se asegura que el programa getty está
ejecutándose en todas las terminales conectadas, de forma
que cualquier usuario pueda comunicarse con la
máquina.

El proceso que ejecuta el programa init, suele
considerarse como el Padre de todos los procesos del sistema.
Dentro de todos los programas, init tiene un status especial por
ser ejecutado directamente por el núcleo, y no puede ser
por tanto interrumpido. Los procesos siguientes son ejecutados
directamente por init o por alguno de sus procesos
hijos.

Por tanto, todo el proceso de arranque (y
también la secuencia de apagado) es controlado por init.
Así, prácticamente se puede entender que el
núcleo trabaja en segundo plano, y que tiene como objetivo
gestionar los procesos arrancados, dedicarles tiempo de cálculo y
posibilitar y controlar el acceso al hardware.

Ahora sabemos cómo se inicia, en lí
neas generales, un sistema operativo como Linux, y de paso hemos
resuelto la respuesta a la pregunta del ¿qué fue
antes?. En general esa respuesta sería el proceso Init, a
partir del cual suele establecerse la jerarquía de
procesos. También llegamos a la conclusión de que
cualquier programa en ejecución es un proceso, hijo de
algún otro.

Cuando interactuamos con nuestra máquina, lo
hacemos a través de una interfaz dispuesta para ello. En
el modo texto el shell
típico en Linux es bash, y por supuesto éste no es
más que un proceso en ejecución que nos facilita la
comunicación con el ordenador. Cuando decidimos ejecutar
algún programa concreto desde
bash, lo que en definitiva ocurre es que bash crea un proceso
hijo mediante la llamada al sistema fork(). Es en éste,
donde con otra llamada al sistema, exec(), se carga en memoria y
comienza a ejecutar el programa solicitado por
nosotros.

Dentro de un proceso
Hemos dado ya la definición de proceso y el nacimiento de
la jerarquía de procesos dentro de Linux. Pero nos queda
aún mucho por profundizar dentro del concepto de proceso,
puesto que para manejarlos debemos conocer sus
características principales para poder manejarlos de forma
eficaz haciendo desaparecer la magia que pudiera
rodearlos.

Información perteneciente a un proceso
El proceso, ya lo decíamos anteriormente, tiene asociado
una serie de elementos de información que pueden
organizarse en tres grupos: estado del procesador, imagen de
memoria y tablas del sistema operativo.
Vamos a detallar resumidamente, parte del contenido de cada uno
de los grupos de información propuestos.
Estado del procesador: Está formado por el contenido de
todos sus registros. Esencialmente son los registros generales,
el contador de programa, el puntero de pila, los registros de
estado y los registros especiales.
Esta información reside en los registros del computador
cuando el proceso se encuentra en estado de ejecución, y
cuando éste cambia de estado la información pasa a
almacenarse al BCP.

Imagen de memoria: La imagen de memoria está
formada por los espacios de memoria que está autorizando
el proceso a utilizar. Esta posee una serie de
características. El proceso solamente puede tener
información en su imagen de memoria y no fuera de ella. Si
genera una dirección que esté fuera, el hardware de
protección deberá detectarlo y generar un trap o
excepción (Linux posee rutinas de tratamiento para cada
una de esas excepciones, y en este caso se encarga de proteger el
resto del espacio no asignado al proceso que ha generado la
excepción).
Los procesos suelen necesitar asignación dinámica de memoria. Por lo tanto, la
imagen de memoria deberá ser capaz de adaptarse a estas
necesidades, creciendo o decreciendo
adecuadamente.

Tablas del sistema operativo: El sistema operativo
mantiene una serie de tablas que describen a los procesos y a los
recursos del sistema. La información asociada al proceso
se encuentra parcialmente en el BCP, y parcialmente fuera de
él. La decisión de incluir la información en
esa estructura depende de varios factores, entre ellos eficiencia y
necesidad de compartir información. Por ejemplo, las
informaciones que tienen un tamaño variable no deben
incluirse en el BCP (que tiene un tamaño estático)
por razones de eficiencia. Y la información que ha de ser
compartida por varios procesos tampoco.

El BCP

Vemos continuamente la importancia que posee el BCP.
Sin embargo, aún no conocemos a ciencia cierta
qué información guarda dicha estructura. Vamos a
describirla:

Información de identificación:
aquí se identifica al usuario y al proceso. En sistemas
Unix, (el caso de Linux) suelen incluirse los siguientes
datos:
pid del proceso: identificador de proceso, que es el
número de proceso en el sistema.
pid deI padre: identificador de proceso del padre.P_pgpr:
pid del cabeza de grupo.
Identificador de usuario real: uid real
Identificador de grupo real: gid real.
Identificador de usuario efectivo: uid efectivo.
Identificador de grupo efectivo: gid efectivo.

Estado del procesador: contiene los valores
iniciales del estado del procesador o su valor en el instante en
que fue interrumpido el proceso.
Información de control del proceso: aquí se incluye
información que permite gestionar el proceso. Podemos
destacar los siguientes datos:
Información de planificación y estado: estado
actual del proceso, evento por el que espera el proceso (si es
que está en espera), prioridad del proceso (para decidir
cuándo debe ejecutarse antes que otro proceso),
etcétera.
Descripción de los punteros de memoria
asignados al proceso.
Recursos asignados (ficheros abiertos y puertos asignados).
Punteros para estructurar los procesos en colas o anillos. Por
ejemplo, los procesos que están en estado Listo, pueden
estar organizados en una cola, de forma que se facilite la labor
del planificador (explicaremos más adelante lo qué
es).

Información para almacenar señales y
mensajes en la comunicación entre procesos (los procesos
pueden y en numerosas ocasiones deben
comunicarse).

Vida de un proceso
Establecíamos al principio el símil entre las
cucarachas y los procesos. Y es que se considera que la vida de
un proceso consta de tres etapas:
Creación del proceso (nacimiento): El proceso es creado
por el sistema operativo cuando así lo solicita otro
proceso, que se convierte en el padre del nuevo.
Ejecución del proceso (vida del mismo): Los procesos
pueden ejecutarse en dos modalidades: batch o interactiva. Un
proceso que se ejecuta en modo batch, también llamado
background, no está asociado a ningún terminal.
Deberá tomar sus datos de entrada de un fichero y
deberá depositar sus resultados en otro fichero. Por el
contrario, un proceso interactivo está asociado a un
terminal, por el que recibe la información del usuario y
por el que contesta con los resultados (por ejemplo un editor de
texto).

Muerte del proceso: Un proceso puede morir por varias
causas. Bien porque el programa ha finalizado su
ejecución, bien porque se produce algún error en su
ejecución, o porque el usuario u otro proceso manden que
finalice.
Durante la ejecución del mismo puede suceder que desde
éste se creen procesos nuevos (reproducción), y que su zona de datos
crezca en tamaño (crecimiento del proceso). Hoy en
día aún no es muy corriente que un programa crezca
en su zona de código. Ello implicaría que el
programa es capaz de generar código. Sin duda este es un
campo en el que actualmente se investiga fuertemente en Inteligencia
Artificial, un programa capaz de generar código para
tratar situaciones desconocidas, y que incluso sea capaz de
variarlo en tiempo de ejecución. Pero esto se encuentra
fuera del tema del artículo.

Gupos de Procesos
Los procesos forman grupos que tienen diversas propiedades. El
conjunto de procesos creados a partir de un shell forma un grupo
de procesos, también pueden formar un grupo los procesos
dependientes de un terminal y los que dependen de un socket.
El interés
de los grupos de procesos radica en que hay determinadas
operaciones que se pueden realizar sobre los procesos de un
determinado grupo, que no se pueden hacer sobre el resto de
procesos del sistema.

Estados del proceso
Ya sabemos que un programa en ejecución es un proceso,
pero a su vez el proceso puede encontrarse en varios estados, y
que nos permitirán más adelante adentrarnos en la
explicación del funcionamiento de la multitarea:
Ejecución: en este estado el proceso está siendo
ejecutado por el procesador, es decir, que se encuentra en la
fase de
procesamiento.
Bloqueado: un proceso bloqueado está esperando a que
ocurra un evento y no puede seguir ejecutando hasta que termine
dicho evento. Una situación típica que produce el
bloqueo de un proceso, es la petición por parte de
éste de una operación de entrada salida. Hasta que
la operación no finaliza el proceso queda bloqueado.
Listo: un proceso se encuentra en el estado de listo cuando puede
entrar en fase de procesamiento. Más adelante veremos que
como pueden ser varios los procesos en este estado, es misión del
sistema operativo decidir cuál de ellos es el que pasa a
ejecutarse primero. La parte del sistema encargada de ello se
denomina planificador.
Espera: es frecuente tener una lista de procesos batch en espera
para ser ejecutados cuando se pueda. El sistema operativo
analizará esa lista para lanzar la ejecución de los
procesos según se dispongan de los recursos
necesarios.
Suspendido: el objetivo de la suspensión estriba en dejar
suficiente memoria a los procesos no suspendidos para que su
conjunto residente tenga un tamaño adecuado que evite la
hiperpaginación (efecto fácilmente reconocible
cuando el sistema parece detenerse y sólo dedicarse a leer
continuamente del disco duro. Entonces es momento de suspender o
matar alguno de los procesos no suspendidos existentes).
Las transiciones en el estado de un proceso exigen un trabajo
cuidadoso por parte del sistema operativo para que se hagan
correctamente. El aspecto más delicado se refiere al
contenido de los registros del computador.

Parte de la información del proceso en
ejecución se encuentra repartida entre dichos registros.
Si el sistema operativo entrara en acción sin cuidado,
bien podría sobreescribir la información contenida
en parte de esos registros. Para evitar esta situación,
cuando se decide que el proceso en ejecución cambie de
estado, el sistema operativo lo primero que hace es salvar el
contenido de todos los registros, teniendo cuidado de no
modificarlos anteriormente. Sus valores los
almacena en el BCP correspondiente. Cuando el sistema operativo
decide volver a pasar el proceso al estado de ejecución,
devuelve a los registros los valores previamente grabados en el
BCP. Así puede seguir ejecutándose sin notar
diferencia alguna.

Formación de un proceso
Cuando creamos un objeto ejecutable, un programa que al mandar
ejecutarse se convertirá en proceso, no sólo
contiene éste el código del programa, sino que,
además, se le añade la siguiente
información:
Cabecera que contiene entre otras informaciones el estado inicial
de los registros y el tamaño del código y de los
datos.

Los datos con su valor inicial.
Al solicitar la ejecución de un programa, el sistema
operativo ha de pasar a la formación del proceso
correspondiente. La formación de un proceso consiste en
completar todas las informaciones que lo constituyen. Así,
cuando se crea un nuevo proceso el sistema operativo debe
realizar las siguientes operaciones: Asignar un espacio de
memoria para albergar la imagen de memoria del proceso. Este
espacio es virtual y estará formado normalmente por varios
segmentos.

Seleccionar un BCP libre de la tabla de procesos.
Rellenar el BCP con el uid, el pid, la descripción de la
memoria asignada, los valores iniciales de los registros
indicados en el fichero objeto, etcétera.
Además en el momento de creación del proceso se
pasan al mismo una serie de variables que
se conocen como el "entorno del proceso". El entorno se encuentra
formado por una tabla NOMBRE-VALOR que se incluye en la pila del
proceso. El nombre especifica el nombre de la variable y el valor
su valor (algo totalmente obvio por otra parte). Los procesos
pueden utilizar las variables del entorno para definir su
comportamiento. El entorno se establece y modifica
por los siguientes mecanismos:
Por defecto.
Mediante mandatos del shell (export).
Mediante rutinas de biblioteca que
puede llamar el propio proceso (putenv, getenv).
Un ejemplo de configuración de entorno es el archivo
profile que se lee al entrar en la cuenta del usuario
correspondiente.

Multitarea
Linux es un sistema operativo multitarea o multiproceso (a los
procesos también se les denomina en ocasiones tareas).
Esto implica que es capaz de poner en ejecución varios
procesos simultáneamente. Sin embargo, dentro de la
mayoría de los PC de nuestras casas hay un solo
procesador, y casi todos sabemos que un procesador es capaz de
ejecutar un solo programa a la vez.

¿Cómo se resuelve este problema? La
solución más directa bien parece poner varios
procesadores, pero esto seguiría siendo un tanto
ineficiente. En realidad muchos de los elementos que rodean a los
procesos nacieron como necesidad de emular con un procesador la
multitarea real.
El sistema operativo se encarga de gestionar la ejecución
de los procesos, de forma que normalmente asigna pequeñas
rodajas de tiempo a cada proceso para ejecutarse. Una vez
concluida dicha rodaja, se detiene el proceso, pasándolo
al estado Listo, espera o bloqueado según el momento, y se
asigna el procesador al proceso que decida el sistema operativo.
Así hasta que finalice su tiempo del nuevo proceso y se
repite el bucle continuamente.

La parte del sistema operativo que gestiona los
procesos se llama planificador, y su implementación ha ido
creciendo en complejidad a medida que Linux crecía de
versión. Actualmente se tienen muchísimos aspectos
en cuenta a la hora de gestionar los procesos y se consigue una
perfecta ilusión de multitarea, que otros sistemas
operativos, no hay que dejar de destacarlo, no acaban de
conseguir. Y es que éste es uno de los aspectos en que
Linux no ha dejado de mejorar desde su nacimiento.
Servidores, demonios, procesos ligeros y procesos
núlos
Vamos a definir una serie de términos con relación
al tema que nos ocupa:
Servidores: es un proceso que está pendiente de recibir
órdenes de trabajo que provienen de otros procesos, que se
denominan clientes. Una vez recibida la orden la ejecuta y
responde al peticionario con el resultado.
Demonios: un demonio es un proceso que se arranca al iniciar el
sistema operativo puesto que debe estar siempre activo. No
mueren, en muchos casos están en espera de un evento o
tienen encomendada una labor determinada que hay que realizar de
forma periódica. No suelen realizar su trabajo
directamente sino que lanzan otros procesos para ello. Y se
ejecutan en background sin estar asociados por tanto a
ningún terminal o proceso login.

Proceso Ligero: es un programa en ejecución
que comparte la imagen de memoria y otras informaciones con otros
procesos ligeros. Se trata básicamente de un proceso con
varios flujos de ejecución. Desde el punto de vista de la
programación cada proceso ligero se define como una
función cuya ejecución se puede lanzar en paralelo
con otras.

Proceso Nulo: se trata de un proceso cuya finalidad
es entretener al procesador cuando éste no tiene ninguna
otra tarea que hacer (un procesador no para nunca de ejecutar
instrucciones, de ahí la necesidad de este
proceso).

13.
Bibliografía

  • -Sistemas Operativos -David Luis La
    Red Martínez, profesor titular por concurso de "Sistemas
    Operativos" – Universidad
    Nacional del Nordeste – U.N.N.E. – Argentina
    – Publicación Virtial en:
    http://exa.unne.edu.ar/depar/areas/informatica/SistemasOperativos/SOF.htm
  • http://www.tau.org.ar/base/lara.pue.udlap.mx/sistoper/
    seminario de
    Sistemas operativos.
  • Revista Solo Programadores Linux, Año III
    Nº 26 Tercer Época Ed. Revistas Profesionales S.L.,
    Nota a cargo de Javier Martinez Villacampa, Desarrollador
    independiente.

 

 

Autor:

Genovece, Claudio
Szeman, Sergio

Tomadera, Pablo
Trincado, Marcelo
Zapata, Nestor
Tecnicatura Superior en Analistas de Sistemas
Asignatura: Arquitectura de Computadoras.

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter