|
| |
Análisis del Sistema Operativo BSD4.4 (Berkeley Software Distributions 4.4) UNIX
Resumen: Berkeley Software Distributions 4.4; UNIX. Objetivo del Software. Arquitectura. Componentes. Comunicación entre procesos. La administración de los procesos y el procesador. Coordinación y sincronización de procesos. Administración de memoria. La administración de los archivos. La seguridad y protección.
Publicación enviada por Armando Fausto Flores
Indice
1. Objetivo del Software
2. Arquitectura
3. Componentes
4. Comunicación entre procesos
5. La administración de los
procesos y el procesador
6. Coordinación y sincronización
de procesos
7. Administración de memoria
8. La administración de los
archivos
9. La seguridad y protección
10. Conclusión final del trabajo
11. Referencia Bibliográfica
1. Objetivo del Software
El sistema UNIX ha sido usado ampliamente por mas de 28 años, y ha ayudado a
definir muchas áreas de computación. Numerosas organizaciones han contribuido y
todavía contribuyen al desarrollo del sistema UNIX.
- El sistema UNIX se invento en los Laboratorios Bell
- El Grupo de Investigación de Sistemas de Computo (CSRG) en la
Universidad de California en Berkeley, le dio memoria virtual a UNIX y la
implementación de referencia de TCP/IP.
Diseño de Software Berkeley, Incorporado (BSDI), El Proyecto FreeBSD, y El
Proyecto NetBSD continúan con los trabajos empezados por el CSRG.
El BSD4.4 amplió la base de hardware del BSD4.3, y ahora soporta numerosas
arquitecturas, incluyendo Motorola 68000, Sun de SAPARC, MIPS, y PCs de Intel.
Remedia varias deficiencias del BSD4.3. En particular el sistema de
memoria-virtual necesitado fue completamente reemplazado.
Añade una implementación de protocolos de red de la suite ISO, además aumenta y
mejora el rendimiento de TCP/IP.
El manejador de terminal ha sido cuidadosamente conservado compatible no
solamente con Séptima Edición (Seventh Edition), sino incluso con Sexta Edición
(Sixth Edition).
Lo mas critico del BSD4.3 fue la falta de soporte para sistemas de archivo
múltiple. El BSD 4.4 incluye una interface orientada a objetos para sistemas de
archivos similar al marco de trabajo vnode de Sun.
El BSD 4.4 hizo pequeñas extensiones a la interface de socket para permitir la
implementación de los protocolos de red ISO.
Quien lo desarrollo.
Distribuciones de Software Berkeley (Berkeley Software Distributions)
Estos sistemas Berkeley han introducido varios programas y facilidades útiles
para la comunidad UNIX.
En que fechas lo desarrollo.
La ultima versión de CSRG fue tener dos versiones del BSD 4.4 , para ser
liberadas en Junio de 1993. Una fue para seguir teniendo una distribución
tradicional de código fuente y binario total, llamadoBSD4.4-Sobrecargado, que
requirió el receptor para tener una licencia de código UNIX. La otra fue para
tener un subconjunto del fuente, llamado BSD4.4 Lite, este fue liberado un año
mas tarde, en 1994. Y una versión corregida de BSD 4.4 Lite fue distribuida en
Junio de 1995.
Características principales.
- Soporta numerosas arquitecturas (Motorola 68000, Sun SPARC, MIPS, y PCs
de Intel.
- Sistema de memoria-virtual reemplazado y mejorado.
- implementación de protocolos de red en la suite ISO.
- Mejoramiento de la funcionalidad de TCP/IP.
- Manejador de terminal compatible con Sexta y Séptima Edición.
- Interface orientada a objetos para sistemas de archivos, soporta
sistemas de archivo múltiples locales y remotos.
- Soporta numerosos tipos de sistemas de archivos, incluyendo : Loopback,
Unión, y capas de mapeo uid/gid. Además un sistemas de archivos ISO9660 útil
para CDROMs.
- Soporta Sistema de Archivos de Red(NFS) de Sun Versión 2 y 3 y un
sistema de archivo lógico estructurado basado en disco.
- Pequeñas extensiones para la interface de sockets para permitir la
implementación de los protocolos ISO.
Que impacto ha tenido
Mucho del trabajo de desarrollo de Berkeley fue hecho en respuesta a la
comunidad de usuarios. Expectativas e ideas vinieron no solo de DARPA, la
organización principal directamente fundadora, sino también de usuarios del
sistema en compañías y universidades de todo el mundo.
Los investigadores de Berkeley aceptaron no solo ideas de la comunidad de
usuarios, sino también a usuarios del software actual. Contribuciones al BSD 4
vinieron de universidades y otras organizaciones en Australia, Canadá, Europa y
los Estados Unidos. Estas contribuciones incluyeron características de
importancia, tales como auto configuración y tiempos de disco.
Berkeley solicito correo electrónico para corregir bugs y propuestas. La casa de
software MT XINU de UNIX distribuyo una lista de bugs compilados de ese correo.
Muchos de los bugs corregidos fueron incorporados en distribuciones posteriores.
Hay una constante discusión de UNIX en general (incluyendo el BSD 4.4) en el
grupo de noticias USENET comp.unix, los cuales son distribuidos en la Internet;
ambos la Internet y la USENET son de alcance internacional. Existe otro grupo de
noticias USENET dedicado a los bugs del BSD 4: comp.bugs.4bsd. Después, fue
creado un grupo de noticias moderado dedicado a las correcciones CSRG-sancionado
para tales bugs, llamado comp.bugs.4bsd.bug-fixes.
2. Arquitectura
El kernel del BSD4.4 provee 4 características básicas: Procesos, un sistema
de archivos, comunicaciones, y un sistema de arranque.
Constituye un hilo de control en un espacio de dirección. Cuenta con
mecanismos para crear, terminar y controlar procesos. El sistema múltiplexa
espacios separados de dirección - virtual para cada proceso.
El conjunto de archivos es un conjunto de archivos nombrados, organizados en
una estructura de árbol jerárquico de directorios, y de operaciones para
manipularlos. Los archivos residen en un medio físico tal como discos. El BSD
4.4 soporta varias organizaciones de datos en disco. Acceso a archivos en
maquinas remotas. Las terminales son usadas para acceder el sistema.
Los mecanismos de comunicación proporcionados por sistemas tradicionales de
UNIX incluye flujo simple de byte confiable entre procesos relacionados, y
notificación de eventos excepcional, el BSD4.4 también tiene una característica
general de comunicación - ínter procesos. Esta característica usa mecanismos de
acceso distintos del sistema de archivo, pero una vez que una conexión se hace,
un proceso puede accesarla como si fuera una conexión directa (pipe). Existe un
marco general de red, que es normalmente usado como una capa por debajo de la
característica IPC( Interprocessing comunications).
Cualquier sistema operativo real tiene asuntos operacionales, tales como,
como arrancarlo y ponerlo en operación.
Sistema operativo base
El sistema operativo base como se ha insinuado antes es el UNIX, del cual la
primer versión fue desarrollado en los Laboratorios Bell en 1969 por Ken
Thompson como un proyecto de investigación privado para usar una de otra manera
ociosa PDP-7. Pronto Dennis Ritchie se unió a Thompson, quien no solo contribuye
al diseño e implementación del sistema, sino que también invento el lenguaje de
programación C. El sistema fue completamente reescrito en C, dejando muy poco
lenguaje ensamblador.
Plataforma en la que trabaja
El BSD4.4 amplió la base de hardware del BSD4.3, y ahora soporta numerosas
arquitecturas, incluyendo Motorola 68000, Sun de SAPARC, MIPS, y PCs de Intel.
3. Componentes
Podemos ver la organización del Kernel del BSD 4.4 en dos formas.
- Como un cuerpo estático de software, categorizado por la funcionalidad
ofrecida por los módulos que componen el kernel.
- Por su operación dinámica, categorizada de acuerdo a los servicios
proporcionados a los usuarios.
La parte mas larga de las implementaciones del Kernel los servicios del
sistema que las aplicaciones accedan a través de llamadas al sistema. En BSD
4.4, este software ha sido organizado de acuerdo a lo siguiente:
- Facilidades básicas del kernel:
Manejo del timer y del reloj del sistema, administración de descriptor y
administración de procesos.
- Soporte de administración – de memoria:
Paginación e intercambio.
- Interfaces del sistema genéricas:
Las Entradas/Salidas, control, y operaciones de multiplexado ejecutadas en
descriptores.
Archivos, directorios, conversión de nombres de ruta, bloqueado de archivo, y
administración de Entradas / salidas del buffer.
- Soporte para manejo de terminal:
El manejador de interface – de - terminal y las disciplinas de terminal en
línea.
- Facilidades de comunicación – ínter procesos:
Sockets
- Soporte de comunicación de red:
Protocolos de comunicación y facilidades genéricas de red, tal como
encaminado.
Mas del software en estas categorías es independiente de maquina y es portable
en diferentes arquitecturas de hardware.
Los aspectos dependientes-de-maquina del kernel son aislados del código
principal. En particular, ninguno del código independiente-de-maquina contiene
código condicional para una arquitectura especifica. Cuando una acción
dependiente-de-arquitectura es necesitada, el código independiente-de-maquina
llama una función dependiente-de-arquitectura que es localizada en el código
dependiente-de-maquina. El software que es dependiente de maquina incluye:
- Acciones de sistema-de-arranque de bajo nivel.
- Manejo de fallas y trampas.
- Manipulación de bajo nivel del contexto en tiempo de ejecución de un
proceso.
- Configuración e inicialización de dispositivos de hardware.
- Soporte de tiempo de ejecución para dispositivos de Entrada/Salida.
Tabla
Software independiente de maquina en el kernel BSD 4.4.
| Categoría |
Líneas de
código |
% De kernel |
| Encabezados |
9,393 |
4.6 |
| Inicialización |
1,107 |
0.6 |
| Facilidades del
kernel |
8,793 |
4.4 |
| Interfaces
genéricas |
4,782 |
2.4 |
| Comunicación
ínter procesos |
4,540 |
2.2 |
| Manejo de
terminal |
3,911 |
1.9 |
| Memoria virtual |
11,813 |
5.8 |
| administración
vnode |
7,954 |
3.9 |
| Nombrado del
sistema de archivos |
6,550 |
3.2 |
| Almacenamiento
de archivos rápido |
4,365 |
2.2 |
| Estructura
lógica de almacenamiento de archivos |
4,337 |
2.1 |
| Memoria basada
en almacenamiento de archivos |
645 |
0.3 |
| Sistema de
archivo cd9660 |
4,177 |
2.1 |
| Misceláneos
(10) Sistema de archivos |
12,695 |
6.3 |
| Sistemas de
archivos de red |
17,199 |
8.5 |
| Comunicación de
red |
8,630 |
4.3 |
| Protocolos de
Internet |
11,984 |
5.9 |
| Protocolos ISO |
23,924 |
5.9 |
| Protocolos X.25 |
10,626 |
5.3 |
| Protocolos XNS |
5,192 |
2.6 |
| Total
Independiente de maquina |
162,617 |
80.4 |
Tabla
Software dependiente de maquina para la HP300 en el kernel BSD 4.4.
| Categoría |
Líneas de
código |
% De kernel |
| Encabezados
dependientes de maquina |
1,562 |
0.8 |
| Encabezados
manejadores de dispositivo |
3,495 |
1.7 |
| Fuente
manejador de dispositivo |
17,506 |
8.7 |
| Memoria virtual |
3,087 |
1.5 |
| Otros
dependientes de maquina |
6,287 |
3.1 |
| Rutinas en
lenguaje ensamblador |
3,014 |
1.5 |
| Compatibilidad
HP/UX |
4,683 |
2.3 |
| Total
dependiente de maquina |
39,634 |
19.6 |
Aplicaciones
El sistema UNIX corre en computadoras desde sistemas de casa personales hasta
grandes supercomputadoras. Es el sistema operativo de selección para sistemas
multiprocesador, gráficos, y procesamiento de vector, y es ampliamente usado
para su propósito original de compartimento de tiempo. Es la plataforma mas
común para proveer servicios de red (desde FTP hasta WWW) en la Internet. Es el
sistema operativo mas portable jamas desarrollado.
4. Comunicación entre procesos
La comunicación entre procesos en BSD 4.4 es organizada en Dominios de
Comunicación. Los dominios actualmente soportados incluyen:
Para comunicación entre procesos ejecutándose en la misma maquina
Para comunicación entre procesos usando la suite de protocolos TCP/IP (quizás
dentro de la Internet)La familia de protocolos para comunicación entre sitios
requeridos para correrlos.
Para comunicación entre procesos usando los protocolos de Sistemas de Red
XEROX (XNS: XEROX Network Systems)
Dentro de un dominio, la comunicación toma lugar entre puntos finales de
comunicación conocidos como Sockets. La llamada al sistema de Socket crea un
socket y regresa un descriptor. Cada Socket tiene un tipo que define su
semántica de comunicación; esta semántica incluye propiedades tales como
confiabilidad, ordenación, y prevención de duplicación de mensajes.
Cada Socket tiene asociado con el un Protocolo de Comunicación. Este protocolo
proporciona la semántica requerida por el Socket de acuerdo con los tipos mas
recientes. Las aplicaciones pueden requerir un protocolo especifico cuando crea
un Socket, o puede permitirle al sistema seleccionar un protocolo que sea
apropiado para el tipo de socket que ha sido creado.
Los Sockets pueden tener direcciones consecutivas. La forma y significado de
direcciones de socket son dependientes del Dominio de Comunicación en el cual el
socket es creado. Comprometer un nombre a un socket en el Dominio Local causa la
creación de un archivo en el sistema de archivos.
Datos normales transmitidos y recibidos a través de socket son sin tipo. Asuntos
de representación de datos son la responsabilidad de librerías construidas en la
parte superior de las facilidades de Comunicación – ínter procesos. Además de la
transportación de datos normales, los Dominios de Comunicación pueden soportar
la transmisión y recepción de especialmente datos con tipo, Derechos de Acceso
establecidos. El Dominio Local por ejemplo, usa esta prestación para pasar
descriptores entre procesos.
Implementaciones de red en UNIX antes del BSD 4.2 usualmente trabajan
sobrecargando las interfaces de dispositivo de carácter. Una meta de la
interface de socket fue para programas ingenuos para ser capaz de trabajar sin
cambio en conexiones de estilo – flujo. Tales programas pueden trabajar
solamente si las llamadas de sistemas de Lectura y Escritura son incambiables.
Consecuentemente, las interfaces originales fueron dejadas intactas, y fueron
hechas para trabajar sobre socktes tipo flujo. Una nueva interface fue añadida
para sockets mas complicados, tales como los usados para envía datagramas, con
los cuales una dirección de destino debe ser presentada con cada llamada send.
Otro beneficio es que la nueva interface es altamente portable. Poco después una
edición de prueba estuvo disponible desde Berkeley, la interface de socket había
sido portada a System III por proveedor de UNIX. La interface de socket fue
también portada para correr en muchas tarjetas Ethernet de proveedores, tales
como Excelan e Interlan, que fueron vendidas en el mercado de Pcs, donde las
maquinas fueron muy pequeñas para correr redes en el procesador principal. Mas
recientemente, la interface de socket fue usada como la base para la interface
de red Winsock de Microsoft para Windows.
5. La administración de los procesos y el procesador
Un Proceso es un programa en ejecución. Un proceso debe tener recursos del
sistema, tal como memoria y la CPU. El Kernel soporta la ilusión de ejecución de
concurrencia de múltiple procesos planificando los recursos del sistema entre el
conjunto de procesos que están listos para ejecutarse. Un proceso tiene su
propia composición, se usa un método para switchear entre procesos, y existen
políticas de planificación que se usan para compartir la CPU. Los procesos se
crean y se terminan, existen prestaciones de señal y prestaciones para la
depuración de procesos.
Un proceso opera de dos modos modo usuario (user mode) o modo kernel (kernel
mode). En modo usuario un proceso ejecuta código de aplicación con la maquina en
un modo de protección no privilegiado. Cuando un proceso solicita servicios del
sistema operativo con una llamada al sistema, el proceso switchea del modo de
protección privilegiado de la maquina vía un mecanismo protegido, y después
opera en modo kernel.
Los recursos usados por un proceso son similarmente divididos en dos partes. Los
recursos necesitados para ejecución en modo usuario son definidos por la
arquitectura de CPU y típicamente incluye registros de propósito general de CPU,
el contador de programa, el registro del estado de procesador, y registros
relacionados con la pila, así como el contenido de los segmentos de memoria que
constituye la noción del BSD 4.4 de un programa (en texto, datos, y segmentos de
pila).
Los recursos del modo kernel incluyen los requeridos por el hardware fundamental
(tal como registros, contador de programa, y apuntador de pila) y por el estado
requerido por el kernel del BSD4.4 para proveer servicios de sistemas para un
proceso. Este Estado del Kernel incluye parámetros para llamadas al sistema
actual, la identidad de usuario del proceso actual, información de
planificación, y así sucesivamente. El estado de kernel para cada proceso es
dividido en varias estructuras de datos separadas, con dos estructuras primarias
: La Estructura de Proceso y la Estructura de Usuario.
La Estructura de Proceso contiene información que debe siempre permanecer
residente en memoria principal, junto con referencias a un numero de otras
estructuras que permanecen residentes; donde la estrucutra de usuario contiene
informacion que necesita estar residente solo cuando el proceso esta ejecutando
(aunque las estructuras de usuario de otros procesos tambien pueden estar
residente). Las Estructuras de Usuario son ubicadas dinámicamente por medio de
las prestaciones de administración de memoria. Históricamente, mas de la mitad
del estado de proceso fue almacenado en la estructura de usuario. En el BSD 4.4,
la estructura de usuario es usada solamente para la pila de kernel por proceso y
un par de estructuras que son referenciadas desde la estructura de proceso. Las
Estructuras de Proceso son ubicadas dinámicamente como parte de creación de
proceso, y son liberadas como parte del proceso de salida.
6. Coordinación y sincronización de procesos
La sincronización entre procesos del usuario de un recurso típicamente es
implementada por la asociación con el recurso de dos banderas; la bandera locked
y la bandera wanted. Cuando un proceso quiere usar un recurso, primero checa la
bandera locked. Si el recurso actualmente no esta en uso por otro proceso, esta
bandera no debería estar activada, y el proceso puede simplemente activar la
bandera locked y usar el recurso. Si el recurso esta en uso, el proceso
activaría la bandera wanted y llamar la función sleep() con un canal de espera
asociado con el recurso ( típicamente la dirección de la estructura de datos
usada para describir el recurso). Cuando un proceso ya no necesita el recurso,
limpia la bandera locked y, si la bandera wanted esta activa, invoca la función
wakeup() para despertar todos los procesos que llamaron la función sleep() para
esperar el acceso al recurso.
Las rutinas que corren en la primer mitad del kernel no tienen un contexto y
consecuentemente no puede esperar que un recurso se vuelva disponible llamando
la función sleep(). Cuando la segunda mitad del kernel accesa recursos que son
compartidos con la primer mitad del kernel, no puede usar la bandera locked para
asegurar uso exclusivo. En su lugar, debe prevenir la primer mitad de no
correrlo mientras esta usando el recurso. Acceso de sincronización con rutinas
que se ejecutan en la primer mitad del kernel requiere conocimiento de cuando
estas rutinas pueden correr. Aunque las prioridades de interrupción son
dependiente de maquina, la mayoría de las implementaciones del BSD 4.4 las
ordenan de acuerdo a la siguiente tabla.
Tabla
Asignaciones de prioridad de interrupciones, ordenados desde lo mas bajo hasta
lo mas alto.
| Name |
Blocks |
| Spl0( ) |
Nada (modo de
operación normal) |
| Slpsoftclock( ) |
Procesamiento
de reloj de baja prioridad |
| Splnet( ) |
Procesamiento
de protocolo de red |
| Spltty( ) |
Multiplexados
de terminal y dispositivos de baja prioridad |
| Splbio( ) |
Controladores
de disco y cinta y dispositivos de alta prioridad |
| Splimp( ) |
Controladores
de dispositivos de red |
| Splclock( ) |
Procesamiento
de reloj de alta prioridad |
| Splhigh( ) |
Toda actividad
de interrupción |
Para bloquear rutinas de interrupción a un cierto nivel de prioridad y por
debajo de este, una sección critica debe hacer una llamada apropiada de
set-priority-level (establecer nivel de prioridad). Todas las llamadas a
set-priority-level regresan el nivel de prioridad previo. Cuando la sección
critica es hecha, la prioridad es regresada a su nivel previo usando splx( ).
Por ejemplo, cuando un proceso necesita manipular una cola de datos de una
terminal, el código que acesa la cola es escrita en el siguiente estilo:
s = spltty ( ); /* eleva la prioridad al bloque de procesamiento tty */
. . . /* manipula el tty */
splx(s); /*reestablece el nivel de prioridad al valor previo*/
Los procesos deben cuidar evitar bloqueo mutuo cuando busquen múltiples
recursos. Suponga que dos procesos, A y B, requieren acceso exclusivo a dos
recursos, R1 y R2, para hacer alguna operación. Si el proceso A adquiere R1 y el
proceso B adquiere R2, entonces un bloqueo mutuo ocurre cuando el proceso A
trata de adquirir R2 y el proceso B trata de adquirir R1. Ya que un proceso de
BSD4.4 ejecutándose en modo kernel nunca es sustituido por otro proceso,
protección de recursos múltiples es simple, aunque debe llevarse a cabo
cuidadosamente. Si un proceso sabe que múltiples recursos son requeridos para
hacer una operación, entonces el proceso puede seguramente proteger uno o mas de
esos recursos en cualquier orden, si y solo si el proceso nunca renuncia el
control del CPU. Si, como sea , un proceso no puede adquirir todos los recursos
que este necesita, entonces este debe liberar algunos recursos que tiene antes
de llamar a sleep( ) para esperar que el recurso inaccesible actualmente este
disponible.
Alternativamente, si los recursos pueden ser parcialmente ordenados, es
necesario solamente que estén ubicados en un orden creciente. Por ejemplo, como
la rutina namei( ) recorre el espacio de nombre del sistema de archivos, debe
proteger el siguiente componente de una ruta de acceso antes de renunciar al
componente actual. Un ordenamiento parcial de componentes de rutas de acceso
existe desde la raíz del espacio de nombre hasta las hojas. Por lo tanto
traducciones del árbol de nombres pueden solicitar un bloqueo en el siguiente
componente sin preocuparse por el bloqueo mutuo. Como sea, cuando esta
recorriendo arriba el árbol de nombres (p.e. siguiendo un componente de ruta de
acceso de punto-punto (..)), el kernel debe cuidar evitar dormir mientras
mantiene algunos bloqueos.
Elevar el nivel de prioridad del procesador para protegerse contra actividad de
interrupción funciona para una arquitectura uniprocesador, pero no para una
maquina multiprocesador de memoria compartida. Similarmente, mucho del kernel
del BSD 4.4 implícitamente asume que el procesamiento de kernel nunca se llevara
a cabo concurrentemente. Numerosos proveedores (tal como Sequent, OSF/1, AT&T, y
Sun Microsystem) han rediseñado el esquema de sincronización y han eliminado la
asunción de uniprocesador implícita en el kernel de UNIX estándar, para que UNIX
corra en arquitecturas de multiprocesador ajustadamente acopladas.
7. Administración de memoria
Un componente central de cualquier sistema operativo es el sistema de
administración de memoria. Como su nombre lo dice, las prestaciones de
administración de memoria son responsable de la administración de los recursos
de memoria disponible en una maquina. Típicamente estos recursos caen en una
moda jerárquica, con tiempos de acceso a memoria inversamente relacionados a su
proximidad con la CPU. El sistema de memoria primaria es memoria principal; el
siguiente nivel de almacenamiento es almacenamiento secundario o almacenamiento
de respaldo.
Procesos y Memoria
Cada proceso opera en una maquina virtual que es definida por la arquitectura
del hardware donde se ejecuta.
Paginación
La traducción de direcciones proporciona la implementación de la memoria virtual
decoplando el espacio de direcciones virtual de un proceso desde los espacios de
direcciones física de la CPU. Cada pagina de memoria virtual es marcado como
residente o no residente en memoria principal.
Algoritmos de Reemplazo
La política de reemplazo es el aspecto mas critico de cualquier sistema de
paginación. Hay un amplio rango de algoritmos desde los cuales podemos
seleccionar en el diseño de una estrategia de reemplazo para un sistema de
paginación.
El Modelo de Conjunto-Trabajando
El modelo conjunto-trabajando asume que los procesos exhiben una localidad
cambiante lentamente de referencia. Por un periodo de tiempo, un proceso opera
en un conjunto de subrutinas o lazos, causando que todas sus referencias de
memoria se refieran a un subconjunto fijo de su espacio de dirección, denominado
el conjunto de trabajo.
Intercambio
Intercambio es el termino usado para describir una política de administración de
memoria en la cual procesos enteros son movidos hacia y desde el almacenamiento
secundario donde la memoria principal esta en suministro corto.
Ventajas de la Memoria Virtual
Hay varias ventajas para el uso de memoria virtual en computadoras capaces de
soportar esta prestación propiamente. La memoria virtual permite a grandes
programas correr en maquinas con configuraciones de memoria principal que son
mas pequeñas que el tamaño del programa.
Requerimiento de Hardware para Memoria Virtual
Casi todas las versiones de UNIX han requerido alguna forma de hardware de
administración de memoria para soportar multiprogramación transparente.
El Sistema de Memoria Virtual del BSD 4.4
El sistema de memoria virtual del BSD4.4 difiere completamente del sistema que
fue usado en el BSD4.3 y predecesores. La implementación es basada en el sistema
de memoria virtual del Mach 2.0, con actualizaciones tomadas del Mach 2.5 y el
Mach 3.0.
El sistema de memoria virtual implementa espacios de dirección protegidos dentro
de los cuales puede ser mapeado fuentes de datos (objetos) tales como archivos o
privados, piezas anónimas de espacio de intercambio. La memoria física es usada
como una cache de paginas usadas recientemente de estos objetos, y es
administrada por un algoritmo de reemplazamiento -de –pagina global parecido en
mucho al del BSD 4.3
El espacio de direcciones virtual de la mayoría de las arquitecturas es dividido
en dos partes. Típicamente, los mas altos de 30 a 100 Mbyte del espacio de
direcciones es reservado para uso del kernel. El espacio de direcciones restante
esta disponible para uso de procesos. En un mapa tradicional de UNIX, el kernel
y sus estructuras de datos asociadas residen en la parte alta del espacio de
direcciones. El texto inicial y las áreas de datos empiezan en o cerca del
principio de la memoria. Típicamente, los primeros 4 o 8 Kbyte de memoria son
conservados fuera de los limites del proceso. La razón de esta restricción es
para una depuración de programa fácil; indirectamente a travez de un apuntador
nulo causara un fallo de direccion invalida, en lugar de leer o escribir el
texto de programa. La localización de memoria hecha por el proceso en ejecución
usando la rutina de librería malloc( ) (o la llamada al sistema sbrk ) son
hechas de la parte que empieza inmediatamente siguiente al área de datos y crece
hasta las direcciones mas altas. El vector de argumento y los vectores de
ambiente están en la parte mas alta de la porción de usuario del espacio de
direcciones. La pila de usuario empieza justo debajo de estos vectores y crece
hasta las direcciones mas bajas.
En el BSD 4.4 y otros sistemas UNIX modernos que soportan la llamada al sistema
mmap, el uso del espacio de direcciones es menos estructurado. Implementación de
librerías compartidas pueden ubicar texto o datos arbitrariamente, representar
la noción de regiones predefinidas obsoletas. Por compatibilidad, el BSD 4.4
todavía soporta la llamada sbrk que usa malloc ( ) para proveer una región
contigua, y el kernel tiene una región de pila diseñada donde localizaciones
adyacentes son automáticamente ejecutadas.
A cualquier tiempo, el proceso en ejecución es mapeado dentro del espacio de
direcciones virtual. Cuando el sistema decide al contexto cambiar a otro
proceso, debe almacenar la información acerca del mapa de direcciones del
proceso actual, después cargar el mapeo de direcciones para el nuevo proceso.
Los detalles de este mapa de direcciones cambiando son dependientes de
arquitectura. Algunas arquitecturas necesitan cambiar solo unos pocos registros
de mapeo de memoria que apuntan a la base, y para dar la longitud de las tablas
de paginas de memoria residente. Otras arquitecturas almacenan los descriptores
de la tablas de paginas en especial RAM estática de alta velocidad. Cambiar
estos mapas puede requerir vaciad y recargado de cientos de entradas de mapas.
Ambos los procesos de kernel y de usuario usan la misma base de estructuras de
datos para la administración de su memoria virtual. Las estructuras de datos
usadas para administrar memoria virtual son como sigue:
vmspace Estructura que abarca ambas las estructuras dependientes de maquina y
las independientes de maquina describiendo un espacio de direcciones de proceso.
vm_map Estructura de datos de mas alto nivel que describe es espacio de
direcciones virtual del dependiente- de- maquina
vm_map_entry Estructura que describe un rango contiguo virtualmente de espacio
de direcciones que comparte atributos de protección y herencia.
object Estructura que describe una fuente de datos para un rango de direcciones
shadow object objeto especial que representa copia modificada de datos
originales.
vm_page La estructura de datos de mas bajo nivel que representa la memoria
física siendo usados por el sistema de memoria virtual.
8. La administración de los archivos
Soporte de sistemas de archivos múltiple
Con la expansión de computación de red, se hace deseable soportar ambas sistemas
de archivos local y remotos. Para simplificar el soporte de sistemas de archivos
múltiple, los desarrolladores añadieron un nuevo nodo virtual o interface vnode
para el kernel. El juego de operaciones exportadas desde la interface vnode se
parecen mas a las operaciones de sistemas de archivos previamente soportadas por
el sistemas de archivos local. Como sea, pueden ser soportadas por un amplio
rango de tipos de sistemas de archivos:
- Sistema de archivos basado -en –disco local
- Archivos importados usando una variedad de protocolos de sistema de
archivos remoto
- Sistema de archivos de CD-ROM de solo-lectura
- Sistema de archivos que proveen interfaces de propósito especial (Por.
Ejemplo, el sistema de archivos /proc)
Algunas variantes del BSD 4.4, tal como FreeBSD, permite al sistema de
archivos ser cargado dinámicamente cuando los sistemas de archivos son primero
referenciados por la llamada al sistema mount.
Sistema de archivos
Un archivo regular es un arreglo lineal de bytes, y pueden ser leídos y escritos
empezando por cualquier byte en el archivo. El kernel no distingue limites de
registros en archivos regulares, aunque muchos programas reconocen caracteres
alimentación-de-línea como distinguir el fin de línea, y otros programas puede
usar otra estructura. Ninguna información relacionada con el sistema es
conservada acerca de un archivo en el archivo mismo, pero el sistema de archivo
almacena una pequeña cantidad de información propietario, protección, y uso con
cada archivo.
Un componente del nombre-de-archivo es una cadena de hasta 255 caracteres.
Estos nombres de archivo son almacenados en un tipo de archivo llamado un
directorio. La información en un directorio acerca de un archivo es llamada
entrada-de-directorio e incluye, además del nombre-de-archivo, un apuntador al
archivo mismo. Las entradas de directorio pueden referir a otros directorios,
también como planear archivos. Por lo tanto una jerarquía de directorios y
archivos es formada, y es llamada un sistema-de-archivos. Los Directorios pueden
contener, y no hay limitaciones inherentes a la profundidad con lo cual
anidamientos de directorios pueden ocurrir. Para proteger la consistencia del
sistema-de-archivos, el kernel no permite a los procesos escribir directamente
en los directorios. Un sistema-de-archivos puede incluir no solo archivos planos
y directorios, sino también referencias a otros objetos, tales como dispositivos
y sockets.
El sistema-de-archivos forma un árbol, e principio del cual es el directorio
raíz, algunas veces referidas por el nombre slash, representado por un carácter
sólido (/). El directorio raíz contiene archivos; En el ejemplo, contiene a
vmunix, una copia del archivo objeto de kernel-ejecutable. También contiene
directorios; ien este ejemplo, contiene el directorio usr. Dentro del directorio
usr esta el directorio bin, el cual principalmente contiene código objeto
ejecutable de programas, tales como los archivos ls y vi.
Un proceso identifica un archivo especificando la ruta-de-acceso del archivo,
la cual es una cadena compuesta de cero o mas nombres-de-archivo separados por
el carácter diagonal (/). El kernel asocia dos directorios con cada proceso para
uso en la interpretación de rutas-de-acceso. Un directorio-raíz de un proceso es
el punto mas arriba en el sistema-de-archivos que el proceso puede acceder; este
se activa ordinariamente para el directorio raiz del sistema-de-archivo entero.
Una ruta-de-acceso que empieza con una diagonal es llamado una ruta-de-acceso
absoluta, y es interpretada por el kernel empezando con el directorio raíz del
proceso.

Sistema - de - archivos Local
Las operaciones definidas para sistema-de-archivos local son divididas en dos
partes. Comunes a todos los sistemas de archivos locales son nombrado
jerárquico, buscando, cuotas, administración de atributos, y protección. Estas
característica, las cuales son independientes de cómo los datos son almacenados,
son provistos de código UFS. La otra parte de los sistemas de archivo local le
concierne a la organización y administración de datos en el medio de
almacenamiento. El almacenamiento es administrado por las operaciones de
sistema-de-archivos del almacén-de-datos.
Las operaciones de vnode definidas para hacer operaciones de sistema-de-archivos
jerárquicos son mostrados en la siguiente tabla.
Tabla
Operaciones de sistema-de-archivos jerárquico
| Operación |
Nombre de
operaciones |
| Búsqueda de
ruta de acceso |
lookup |
| Creación de
nombre |
create, mknod,
link,symlink, mkdir |
| Borrar/cambiar
nombre |
rename, remove,
rmdir |
| Manipulación de
atributos |
access,
getattr, setattr |
| Interpretación
de objetos |
open,
readdir,readlink, mmap,close |
| Control de
proceso |
advlock,ioctl,
select |
| administración
de objetos |
lock, unlock,
inactive, reclaim, abortop |
Sistema - de - archivos de red
Cuando redes primero se convirtiendo ampliamente disponible en el BSD 4.2,
los usuarios que quisieron compartir archivos lo que tenian que hacer era entrar
a través de la red a una maquina central en la cual los archivos compartidos se
localizaban. Esta maquina central rápidamente se cargo mas que la maquina del
usuario local, por lo tanto la demanda por una forma conveniente de compartir
archivos al mismo tiempo en varias maquinas creció rápidamente.
NFS (Network file system) fue diseñado como una aplicación cliente-servidor.
Su implementación es dividida en una parte cliente que importa sistemas de
archivos desde otras maquinas y una parte servidor que exporta sistemas de
archivos locales a otras maquinas. El modelo general es mostrado en la figura
enseguida. Muchos metas fueron incluidas en el diseño de NFS:
- El protocolo es diseñado para ser sin estado. Como no hay estado que
mantener o recuperar, NFS puede continuar operar incluso durante periodos de
fallas de cliente o servidor. Por lo tanto, es mucho mas robusto que un
sistema que opera con estado.
- NFS es diseñado para soportar semánticas de sistema-de-archivos de UNIX.
Como sea, su diseño también permite soportar la posibilidad de semánticas
menos ricas de otros tipos de sistemas de archivos, tal como MS-DOS.
- Los controles de protección y acceso sigue a la semántica de UNIX de
tener el presente proceso un UID y un conjunto de grupos que son checados
contra el propietario de archivo, grupo, y otros modos de acceso. El chequeo
de seguridad es hecha por código dependiente-de-sistema-de-archivos que
puede hacer mas o algunos chequeos basado en las capacidades del sistema de
archivos que esta soportando. Por ejemplo, el sistema-de-archivos de MS-DOS
no puede implementar la validación de seguridad total de UNIX y hace
decisiones de acceso solamente basado en la UID.
- El diseño del protocolo es independiente del transporte. Aunque fue
originalmente construido usando el protocolo de datagramas UDP, fue
fácilmente movido al protocolo de flujos TCP. Este también ha sido portado
para correr sobre otros numerosos protocolos no-basados-en-IP.
Algunas de las decisiones de diseño limitan el conjunto de aplicaciones para
el cual NFS es apropiado:
- El diseño visiona a los clientes y servidores estar conectados
localmente a una red rápida. El protocolo NFS no trabaja bien sobre enlaces
lentos o entre clientes y servidores con puertas de acceso. También trabaja
pobremente para computación móvil que tiene periodos extendidos de operación
desconectados.
- El modelo de obtención (caching) asume que la mayoría de archivos no
serán compartidos. La funcionalidad sufre cuando los archivos son
compartidos pesadamente.
- El protocolo sin estado requiere algunas perdidas de semánticas de UNIX
tradicional. El cerrar sistemas de archivos (flocks) ha de ser implementado
por un demonio de estado separado. Aplaza la liberación de espacio en un
archivo diferenciado hasta que el proceso final ha cerrado el archivo es
aproximado con una heurística que a veces falla.
A pesar de estas limitaciones, NFS ha proliferado porque este hace un
razonable trato entre semántica y funcionalidad; su bajo costo de adopcion lo ha
hecho ubicuo.

9. La seguridad y protección
NFS no es seguro porque el protocolo no fue diseñado con seguridad en mente.
A pesar de esto se intenta fijar problemas de seguridad, la seguridad de NFS es
todavía limitado. La encriptación es necesaria para construir un protocolo
seguro, pero la encriptación robusta no puede ser exportada desde los Estados
Unidos. Por lo tanto, incluso si construir un protocolo seguro fuera posible,
hacer eso seria sin sentido, porque todos los archivos de datos son enviados a
la red en texto limpio. Incluso si Alguien es incapaz obtener que su servidor
para enviarles un archivo sensitivo, pueden solo esperar hasta que un legitimo
usuario lo accede, y después pueda recogerlo cuando vaya por la red.
El control de exportar de NFS esta en la granularidad del sistema-de-archivo
local. Asociado con cada sistema-de-archivo local el punto de montar es una
lista de hosts para los cuales ese sistema de archivos puede ser exportado. Un
sistema de archivos local puede ser exportado a un especifico host, hacia todos
los hosts que coincidan con la mascara de subred, o a todos los otros hosts(el
mundo). Por cada host o grupo de host, el sistema de archivos puede ser
exportado solo-lectura o solo-escritura. Además, un servidor puede especificar
un conjunto de subdirectorios dentro del sistema de archivos que puede ser
montado. Como sea, esta lista de puntos de montaje es forzada solo por el
demonio mountd. Si un cliente malicioso hacer eso, puede acceder cualquier parte
de un sistema de archivos que es exportado al.
La determinación final de exportabilidad es hecha por la lista mantenida en
el kernel. Por lo tanto, incluso si un cliente pícaro maneja muy curioso la red
y para robar un archivo maneja por un punto de montar de un cliente valido, el
kernel rechazara aceptar el manejo de archivo a menos que el cliente presentando
ese manejo este en la lista de exportar del kernel. Cuando el NFS este
trabajando con TCP, el chequeo es llevado a cabo cuando la conexión es
establecida. Cuando el NFS esta trabajando con UDP, el chequeo se lleva acabo
por cada solicitud de RPC.
El servidor NFS también permite limitado remapeado de credenciales de usuarios.
Típicamente la credencial para el súper usuario no es confiado y es remapeado al
usuario de bajo privilegio "nadie". Las credenciales de todos los demás usuarios
pueden ser aceptadas como dadas o también mapeadas a un usuario por omisión (típicamente"nadie").
El usos de la lista de cliente UID y GID incambiable en el servidor implica que
los espacios UID y GID son comunes entre el cliente y el servidor (p.e. el UID N
en el cliente debe referir al mismo usuario en el servidor). El administrador de
sistema puede soportar mapeos mas complejos de UID y GID usando el sistema de
archivos umapfs.
El administrador de sistema puede incrementar seguridad usando credenciales
Kerberos, en lugar de aceptar credenciales de usuarios arbitrarios enviados sin
encriptación por clientes de confianza desconocida. Cuando un usuario nuevo en
un cliente quiere empezar a acceder archivos en un sistema de archivos NFS que
es exportado usando Kerberos, el cliente debe proveer un ticket de Kerberos para
autenticar el usuario en el servidor. Si hay éxito, el sistema busca el Kerberos
principal en las base de datos de grupo y clave de acceso del servidor para
obtener un conjunto de credenciales, y pase al servidor nfsd una traducción
local del UID del cliente a esas credenciales. Los demonios nfsd corren
enteramente dentro del kernel excepto cuando un ticket Kerberos es recibido.
Para evitar poner toda la autenticación de Kerberos en el kernel, el nfsd
regresa del kernel temporalmente a verificar el ticket usando librerías de
Kerberos, y después regresa al kernel con los resultados.
La implementación de NFS con Kerberos estampas de tiempo encriptadas para
advertir intentos de reenvío. Cada solicitud de RPC incluye una estampa de
tiempo que es encriptada por el cliente y desencriptada por el servido usando
una clave de sesión que ha sido cambiada como parte de la autenticación inicial
de Kerberos. Cada estampa de tiempo puede ser usada solo una vez, y debe ser
dentro de algunos minutos del tiempo actual grabado por el servidor. Esta
implementación requiere que el reloj del cliente y del servidor se conserven
dentro de algunos minutos de sincronización (este requerimiento es ya impuesto
para correr Kerberos). También requiere que el servidor conserve copias de todas
las estampas de tiempo que ha recibido que están dentro del rango de tiempo que
aceptara, para que pueda verificar que una estampa de tiempo no esta siendo
rehusada. Alternativamente, el servidor puede requerir que estampas de tiempo
desde cada uno de sus clientes sean monótonamente incrementadas. Como sea este
algoritmo causara que las solicitudes de RPC que salen de orden sean expulsadas.
Este mecanismo de usar Kerberos para autenticación de solicitudes NFS no esta
bien definido, y la implementación de BSD 4.4 no ha sido probada para
interoperatividad con otros proveedores. Por lo tanto, Kerberos puede ser usado
solo entre clientes y servidores de BSD 4.4.
10. Conclusión final del trabajo
El BSD 4.4 debe ser un sistema operativo de principal uso en redes y sistemas
distribuidos por su idiosincrasia y funcionalidad en este campo.
A lo largo de los años de uso del sistema UNIX, el BSD ha venido aportando
conceptos nuevos de gran relevancia para los sistemas usuarios de redes, como lo
es el concepto de Socket
Se ha demostrado que cada día el BSD avanza en la mejora, prueba de ello es que
en la actualidad soporta mas arquitecturas como lo son la de Motorola 68000 y
las PCs de Intel.
En la actualidad se trata de eliminar las dependencias de maquina, y vemos que
el Kernel del BSD 4.4. va en ese sentido ya que solo el 19.6 % del mismo es
dependiente de maquina en el ejemplo dado. Mostrando así su portabilidad.
Los Dominios de Comunicación entre procesos es clasificada de manera sencilla
aprovechando el concepto de Socket y los protocolos de comunicación.
El BSD 4.4 es un sistema operativo muy bien administrado, administra la
comunicación entre procesos locales y remotos, la administración de su memoria
no es tan diferente de otros sistemas. Conserva la funcionalidad de los sistemas
UNIX. Pero aun le falta completar el trabajo de la seguridad.
La forma en que lleva a cabo la intercomunicación entre procesos remotos y
locales es entendible y funcional.
Como los demás sistemas derivados del UNIX, el BSD 4.4 también a tomado ideas de
diferentes sistemas, y los ha mejorado desde el punto de vista de las diferentes
organizaciones que soportan este sistema como BSD, y otros.
Aunque evitar el bloqueo mutuo se debe llevar a cabo de manera cuidadosa, BSD
4.4 proporciona un mecanismo que usándolo correctamente el bloqueo mutuo se
puede evitar.
El sistema de memoria virtual del BSD 4.4. difiere completamente de sus
predecesores, pero es basada en el sistema de memoria virtual del Mach 2.0.
Con el uso del nodo virtual o interface vnode para el kernel, el sistema soporta
sistemas de archivos múltiple.
Es impresionante la forma en que UNIX ha marcado muchos de los sistemas con las
iniciativas que se han tenido sobre él, por ejemplo, el MS-DOS se ha basado en
él, el concepto de sockets que forma parte del sistema operativo BSD desde la
versión 2 ahora se usan librerías para su implementación en diferentes
arquitecturas. Por lo tanto esto nos puede decir que el software abierto es más
probable que implemente mecanismos de; solución de problemas, de mejoramiento,
de adaptabilidad, etc., que el software que no lo es.
11. Referencia Bibliográfica
McKusick, M. K., Bostic, K., Karels, M.J. & Quaterman, J. S. (1996). The
design
and implementation of the 4.4bsd operating system. [El diseño e implementacion
del sistema operativo 4.4bsd]. USA: Addison Wesley.
Trabajo enviado por:
Armando Fausto Flores
fauzto@hotmail.com
Análisis del Sistema Operativo
BSD 4.4 (Unix)
Cd. Guzmán JaL; 16 de Enero de 2003
Compartir 
Publicación enviada por Armando Fausto Flores
Contactar mailto:fauzto@hotmail.com
Código ISPN de la Publicación EpyVZuyppuJupAuUIQ
Publicado Thursday 9 de October de 2003
Ultimas Publicaciones en ilustrados.com
ilustrados.com nace con el fin difundir el conocimiento publicando trabajos de investigación, monografias, tesis, presentaciones powerpoint y afines. Publicar trabajos en ilustrados.com ha alcanzado prestigio y reconocimiento internacional siendo cada vez más el número de académicos, empresas, investigadores, científicos que consultan las publicaciones de nuestro portal.
|