Professional Documents
Culture Documents
Sun Microsystems, Inc. posee derechos de propiedad intelectual en relación con la tecnología incluida en el producto
descrito en este documento. De forma específica y sin limitación, entre estos derechos de propiedad intelectual se
incluyen una o varias patentes en los EE.UU. o aplicaciones pendientes de patente en los EE.UU. y otros países.
Derechos gubernamentales de los EE. UU. – Software comercial. Los usuarios gubernamentales están sujetos al
acuerdo de licencia estándar de Sun Microsystems, Inc. y a las disposiciones aplicables de la regulación FAR y sus
suplementos.
Esta distribución puede incluir materiales desarrollados por terceras partes.
Determinadas partes del producto pueden derivarse de Berkeley BSD Systems, con licencia de la Universidad de
California. UNIX es una marca registrada en los EE.UU. y otros países, bajo licencia exclusiva de X/Open Company,
Ltd.
Sun, Sun Microsystems, el logotipo de Sun, el logotipo de Solaris, el logotipo de la taza de café de Java, docs.sun.com,
Java y Solaris son marcas comerciales o marcas comerciales registradas de Sun Microsystems, Inc. en EE.UU y otros
países. Todas las marcas registradas SPARC se usan bajo licencia y son marcas comerciales o marcas registradas de
SPARC International, Inc. en los EE.UU. y en otros países. Los productos con las marcas registradas de SPARC se
basan en una arquitectura desarrollada por Sun Microsystems, Inc.
La interfaz gráfica de usuario OPEN LOOK y SunTM fue desarrollada por Sun Microsystems, Inc. para sus usuarios y
licenciatarios. Sun reconoce los esfuerzos pioneros de Xerox en la investigación y desarrollo del concepto de
interfaces gráficas o visuales de usuario para el sector informático. Sun dispone de una licencia no exclusiva de Xerox
para la interfaz gráfica de usuario de Xerox, que también cubre a los licenciatarios de Sun que implementen las GUI
de OPEN LOOK y que, por otra parte, cumplan con los acuerdos de licencia por escrito de Sun.
Los productos descritos y abordados en esta publicación están sometidos a la legislación de control de exportaciones
de los EE.UU. y pueden estar sujetos a leyes de importación o exportación de otros países. Se prohíbe estrictamente el
uso final de estos productos en misiles nucleares, armas químicas o biológicas o aplicaciones nucleares marítimas, ya
sea de forma directa o indirecta. Se prohíbe estrictamente la exportación o reexportación a países bajo el embargo de
los EE.UU o a entidades incluidas en la lista de exclusión de exportación de los EE.UU., incluidas, pero no
limitándose a, las personas rechazadas y a las listas nacionales designadas específicamente.
ESTA DOCUMENTACIÓN SE PROPORCIONA “TAL CUAL”. SE RENUNCIA A TODAS LAS CONDICIONES
EXPRESAS O IMPLÍCITAS, REPRESENTACIONES Y GARANTÍAS, INCLUIDAS CUALQUIER GARANTÍA
IMPLÍCITA DE COMERCIALIZACIÓN, ADECUACIÓN PARA UNA FINALIDAD DETERMINADA O DE NO
CONTRAVENCIÓN, EXCEPTO EN AQUELLOS CASOS EN QUE DICHA RENUNCIA NO FUERA
LEGALMENTE VÁLIDA.
Copyright 2007 Sun Microsystems, Inc. 4150 Network Circle, Santa Clara, CA 95054 U.S.A. Tous droits
réservés.
Sun Microsystems, Inc. détient les droits de propriété intellectuelle relatifs à la technologie incorporée dans le produit
qui est décrit dans ce document. En particulier, et ce sans limitation, ces droits de propriété intellectuelle peuvent
inclure un ou plusieurs brevets américains ou des applications de brevet en attente aux Etats-Unis et dans d'autres
pays.
Cette distribution peut comprendre des composants développés par des tierces personnes.
Certaines composants de ce produit peuvent être dérivées du logiciel Berkeley BSD, licenciés par l'Université de
Californie. UNIX est une marque déposée aux Etats-Unis et dans d'autres pays; elle est licenciée exclusivement par
X/Open Company, Ltd.
Sun, Sun Microsystems, le logo Sun, le logo Solaris, le logo Java Coffee Cup, docs.sun.com, Java et Solaris sont des
marques de fabrique ou des marques déposées de Sun Microsystems, Inc. aux Etats-Unis et dans d'autres pays. Toutes
les marques SPARC sont utilisées sous licence et sont des marques de fabrique ou des marques déposées de SPARC
International, Inc. aux Etats-Unis et dans d'autres pays. Les produits portant les marques SPARC sont basés sur une
architecture développée par Sun Microsystems, Inc.
L'interface d'utilisation graphique OPEN LOOK et Sun a été développée par Sun Microsystems, Inc. pour ses
utilisateurs et licenciés. Sun reconnaît les efforts de pionniers de Xerox pour la recherche et le développement du
concept des interfaces d'utilisation visuelle ou graphique pour l'industrie de l'informatique. Sun détient une licence
non exclusive de Xerox sur l'interface d'utilisation graphique Xerox, cette licence couvrant également les licenciés de
Sun qui mettent en place l'interface d'utilisation graphique OPEN LOOK et qui, en outre, se conforment aux licences
écrites de Sun.
Les produits qui font l'objet de cette publication et les informations qu'il contient sont régis par la legislation
américaine en matière de contrôle des exportations et peuvent être soumis au droit d'autres pays dans le domaine des
exportations et importations. Les utilisations finales, ou utilisateurs finaux, pour des armes nucléaires, des missiles,
des armes chimiques ou biologiques ou pour le nucléaire maritime, directement ou indirectement, sont strictement
interdites. Les exportations ou réexportations vers des pays sous embargo des Etats-Unis, ou vers des entités figurant
sur les listes d'exclusion d'exportation américaines, y compris, mais de manière non exclusive, la liste de personnes
qui font objet d'un ordre de ne pas participer, d'une façon directe ou indirecte, aux exportations des produits ou des
services qui sont régis par la legislation américaine en matière de contrôle des exportations et la liste de ressortissants
spécifiquement designés, sont rigoureusement interdites.
LA DOCUMENTATION EST FOURNIE "EN L'ETAT" ET TOUTES AUTRES CONDITIONS, DECLARATIONS
ET GARANTIES EXPRESSES OU TACITES SONT FORMELLEMENT EXCLUES, DANS LA MESURE
AUTORISEE PAR LA LOI APPLICABLE, Y COMPRIS NOTAMMENT TOUTE GARANTIE IMPLICITE
RELATIVE A LA QUALITE MARCHANDE, A L'APTITUDE A UNE UTILISATION PARTICULIERE OU A
L'ABSENCE DE CONTREFACON.
Contenido
5
Contenido
7
Contenido
Objetivos
El objetivo de este curso es conocer el funcionamiento de un
sistema operativo utilizando el código fuente del sistema operativo
SolarisTM, disponible de forma gratuita a través del proyecto
OpenSolaris.
9
¿Qué es el proyecto OpenSolaris?
Portales de países
La Internationalization and Localization Community está
contribuyendo a la traducción de la página Web en inglés de
OpenSolaris a múltiples idiomas. Hasta la fecha, se están
desarrollando los portales de ocho países:
■ Portal de India: http://in.opensolaris.org
■ Portal de China: http://cn.opensolaris.org
■ Portal de Japón: http://jp.opensolaris.org
■ Portal de Polonia: http://pl.opensolaris.org
■ Portal de Francia: http://fr.opensolaris.org
■ Portal de Brasil: http://opensolaris.org/os/project/br
■ Portal de España:
http://opensolaris.org/os/project/es
Debates
Los debates permiten entrar en contacto con los expertos que
trabajan en nuevas tecnologías de código abierto. Asimismo,
incluyen un archivo de las conversaciones anteriores que puede
consultar para dar respuesta a sus preguntas. Consulte
http://www.opensolaris.org/os/discussions para ver una
lista completa de los foros a los que se puede suscribir.
Comunidades
Las comunidades permiten contactar con otros participantes
con intereses similares en el proyecto OpenSolaris. Se
componen de grupos de interés, tecnologías, soporte,
herramientas y grupos de usuarios, como:
Teoría e http://www.opensolaris.org/os/community/edu
investigación
DTrace http://www.opensolaris.org/
os/community/dtrace
ZFS http://www.opensolaris.org/os/community/zfs
Redes http://www.opensolaris.org/
os/community/networking
Zonas http://www.opensolaris.org/os/community/zones
Documentación http://www.opensolaris.org/
os/community/documentation
Controladores http://www.opensolaris.org/
de dispositivos os/community/device_drivers
Herramientas http://www.opensolaris.org/os/community/tools
Impulsores http://www.opensolaris.org/
os/community/advocacy
Seguridad http://www.opensolaris.org/
os/community/security
Rendimiento http://www.opensolaris.org/
os/community/performance
Almacenamiento http://www.opensolaris.org/
os/community/storage
Administradores http://www.opensolaris.org/
de sistemas os/community/sysadmin
Proyectos
Los proyectos alojados en la página Web
http://www.opensolaris.org/ reúnen aportaciones que
generan, por ejemplo, cambios de código, documentos, gráficos
o productos de varios autores. Los proyectos cuentan con
depósitos de código y "committers", y pueden existir dentro de
una comunidad o de forma independiente.
Herramienta de http://www.opensolaris.org/
visualización os/project/dtrace-chime
Chime para
DTrace
Indiana http://www.opensolaris.org/os/project/indiana
OpenGrok http://www.opensolaris.org/
os/project/opengrok
Concurso de http://www.opensolaris.org/os/project/contest
programación
Paquete de http://www.opensolaris.org/
inicio os/project/starterkit
Depósitos de origen
Los depósitos de origen centralizados y distribuidos se alojan en
el sitio Web opensolaris.org. El modelo de administración de
orígenes centralizados utiliza el programa de administración de
control de origen Subversion (SVN). Los depósitos
administrados de forma distribuida utilizan el programa de
administración de control de origen Mercurial (hg).
Los responsables de proyectos de opensolaris.org utilizan las
páginas Web de proyectos para completar la creación de un
depósito de origen. Los desarrolladores con derechos de envío
acceden a los depósitos a través de sus cuentas de
opensolaris.org. Los responsables de proyectos se encargan
de administrar los derechos de envío. Si necesita una cuenta,
puede registrarse para obtener una. Debe proporcionar una
clave pública Secure Shell (SSH). Consulte la comunidad de
herramientas para conocer la información más reciente relativa
al control de origen, acceder a descargas y obtener
instrucciones
(http://opensolaris.org/os/community/tools).
OpenGrok
OpenGrokTM es el motor de búsqueda de código fuente y
referencias cruzadas de gran rapidez que se utiliza en
OpenSolaris. Vaya a http://cvs.opensolaris.org/source
para probarlo.
OpenGrok fue el primer proyecto que se alojó en
opensolaris.org. Consulte
http://www.opensolaris.org/os/project/opengrok para
obtener información sobre el proyecto de desarrollo actual.
Eche un vistazo al código fuente; descubrirá código claro y con
amplios comentarios que se leen con gran facilidad. Si le
interesa trabajar en un proyecto de OpenSolaris, descargue el
Impulsores de OpenSolaris
Objetivos
La comunidad de impulsores tiene la finalidad de promover la
participación de personas de todo el mundo en la comunidad
OpenSolaris. Agradecemos la participación de cualquier persona,
independientemente de su idioma, cultura o nivel de
conocimientos técnicos y no técnicos. Todo el mundo tiene algo
que aportar.
Consulte http://opensolaris.org/os/community/advocacy/.
19
¿Por qué se recomienda el uso de OpenSolaris?
Precio
Desde el lanzamiento del sistema operativo Solaris 10 en enero
de 2005, su popularidad ha crecido enormemente. A fecha de
julio de 2007, se registraron más de 8,7 millones de copias, una
cifra superior a la suma de todas las versiones anteriores del
sistema operativo Solaris. El lanzamiento de OpenSolaris en
junio de 2005 afianzó esta frenética tendencia. Debido a este
aumento repentino del número de usuarios, cada vez más
desarrolladores (tanto comerciales como de código abierto)
consideran el sistema operativo Solaris como una solución
viable para su software.
Herramientas de desarrollo
Una de las características más importantes de un sistema
operativo desde el punto de vista de un desarrollador es la
variedad y calidad de las herramientas de desarrollo
disponibles. Los compiladores y depuradores son el ejemplo
más obvio de estas herramientas, pero también se incluyen
comprobadores de código (para asegurarse de que el código no
tenga pequeños errores que no detecte el compilador),
generadores de referencias cruzadas (para ver qué funciones
hacen referencia a otras funciones y variables) y analizadores
del rendimiento.
Agradecimientos
Los siguientes miembros de la comunidad OpenSolaris han
revisado y comentado este documento:
■ Boyd Adamson
■ Pradhap Devarajan
■ Alan Coopersmith
■ Brian Gupta
■ Rainer Heilke
■ Eric Lowe
■ Ben Rockwood
■ Cindy Swearingen
http://www.opensolaris.org/
os/community/documentation/reviews
Objetivos
El objetivo de este módulo es comprender los requisitos del
sistema, la información de compatibilidad y la documentación
disponible para la instalación y configuración del proyecto
OpenSolaris.
Recursos adicionales
■ Solaris Express Developer Edition Installation Guide: Laptop
Installations. Sun Microsystems, Inc., 2007.
■ Recursos para ejecutar el sistema operativo Solaris en un
portátil:
http://www.sun.com/
bigadmin/features/articles/laptop_resources.html
■ Comunidad de OpenSolaris para portátiles:
http://opensolaris.org/os/community/laptop
■ Paquete de inicio de OpenSolaris:
http://opensolaris.org/os/project/starterkit
■ System Administration Guide: IP Services, Sun Microsystems,
Inc., 2007
■ Comunidad de redes de OpenSolaris:
http://www.opensolaris.org/os/community/networking
27
Planificación del entorno de OpenSolaris
Componente
configurable Compatibilidad del proyecto OpenSolaris
Redes
El proyecto OpenSolaris satisface los futuros requisitos de las
redes al mejorar radicalmente el rendimiento de las mismas sin
necesidad de efectuar cambios en las aplicaciones.
■ Acelera el rendimiento de la aplicación en un 50 por ciento
gracias al uso de una pila TCP/IP mejorada
■ Admite muchas de las recientes tecnologías de redes, como
10 Gigabit Ethernet, redes inalámbricas y transferencia de
hardware
■ Admite flujo de datos de alta disponibilidad y funciones de
redes de Voz sobre IP (VoIP) gracias a la compatibilidad
con protocolos y rutas extendidas
■ Admite las especificaciones IPv6 actuales
# svcs nwam
Administración de zonas
La administración de zonas se compone de los comandos
siguientes:
■ zonecfg: crea y configura zonas (agrega recursos y
propiedades). Almacena la configuración en un archivo
XML privado en /etc/zones.
■ zoneadm: lleva a cabo las tareas administrativas de las zonas,
como la lista, la instalación, el arranque o la detención.
■ zlogin: permite al usuario iniciar sesión en la zona para
realizar tareas de mantenimiento.
■ zonename: muestra el nombre de zona actual.
Resumen
Se utilizan ejemplos detallados para enseñar el proceso de
creación, instalación y arranque de una zona.
# zonecfg -z Apache
Apache: No such zone configured
Use ’create’ to begin configuring a new zone.
zonecfg:Apache> create
zonecfg:Apache> set zonepath=/export/home/Apache
zonecfg:Apache> add net
zonecfg:Apache:net> set address=192.168.0.50
zonecfg:Apache:net> set physical=bge0
zonecfg:Apache:net> end
zonecfg:Apache> verify
zonecfg:Apache> commit
zonecfg:Apache> exit
# /etc/mount
/export/home/Apache/root/lib on /lib read only
/export/home/Apache/root/platform on /platform read only
/export/home/Apache/root/sbin on /sbin read only
/export/home/Apache/root/usr on /usr read only
/export/home/Apache/root/proc on proc
read/write/setuid/nodevices/zone=Apache
4 Arranque la zona.
# ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL>
mtu 8232 index 1 inet 127.0.0.1 netmask ff000000
bge0: flags=1004803<UP,BROADCAST,MULTICAST,DHCP,IPv4> mtu 1500 index 2
inet 192.168.0.4 netmask ffffff00 broadcast 192.168.0.255
ether 0:c0:9f:61:88:c9
# zoneadm -z Apache boot
# ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL>
mtu 8232 index 1 inet 127.0.0.1 netmask ff000000
lo0:1: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL>
mtu 8232 index 1 zone Apache inet 127.0.0.1
bge0: flags=1004803 inet 192.168.0.4 netmask ffffff00 broadcast
192.168.0.255 ether 0:c0:9f:61:88:c9
bge0:1: flags=1000803mtu 1500 index 2 zone Apache inet
192.168.0.50 netmask ffffff00 broadcast 192.168.0.255
# ifconfig -a
lo0:2: flags=2001000849 mtu 8232 index 1 inet 127.0.0.1
netmask ff000000
bge0:2: flags=1000803 inet 192.168.0.50 netmask ffffff00
broadcast 192.168.0.255
# ping -s 192.168.0.50
64 bytes from 192.168.0.50: icmp_seq=0. time=0.146 ms
# exit
[Connection to zone ’Apache’ pts/5 closed]
Resumen
El acceso simultáneo a ambos servidores Web se configura de
modo que cada sistema y servidor Web quede protegido en caso
de que uno de ellos peligre.
10 http://apache2zone/manual/
El servidor Web Apache2 está en funcionamiento.
Discusión
El usuario final ve cada zona como un sistema diferente. Cada
servidor Web tiene su propio servicio de nombres:
■ /etc/nsswitch.conf
■ /etc/resolv.conf
Creación de agrupaciones de
almacenamiento ZFS y sistemas de
archivos
Cada agrupación de almacenamiento ZFS se compone de uno o
más dispositivos virtuales, que describen la disposición del
almacenamiento físico y sus características de errores.
Creación de agrupaciones de
almacenamiento ZFS duplicadas
El objetivo de este ejercicio práctico es crear y enumerar la
agrupación de almacenamiento duplicada mediante el
comando zpool.
Resumen
ZFS es realmente sencillo de utilizar. A continuación, va a crear
su primera agrupación.
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
tank 33.8G 89K 33.7G 0% ONLINE -
Resumen
Utilizaremos el comando zfs para crear un sistema de archivos
y definir su punto de montaje.
Resumen
Si desea crear una configuración RAID-Z como alternativa a
una configuración de agrupación de almacenamiento duplicada
si necesita maximizar el espacio en disco.
Consolidaciones de userland
Objetivos
El objetivo de este módulo es introducirle a las consolidaciones
userland de OpenSolaris. En general, puede considerar las
consolidaciones userland como externas al núcleo y como
componentes con los que interactúan los usuarios. Cada una de las
consolidaciones siguientes transfieren archivos de origen al sitio
Web opensolaris.org o al centro de descargas. Para acceder a
cada consolidación, consulte la siguiente dirección URL:
http://opensolaris.org/os/downloads/
55
Consolidaciones userland y descripciones
Páginas del comando Código fuente para las páginas del manual de
man referencia de SunOS.
Objetivos
La finalidad de este módulo es describir las características
principales del sistema operativo Solaris y cómo han cambiado de
forma sustancial el funcionamiento del sistema operativo.
Recursos adicionales
OpenSolaris Development Process;
http://www.opensolaris.org/
os/community/onnv/os_dev_process/
59
Proceso de desarrollo y estilo de código
Consulte http://www.opensolaris.org/
os/community/onnv/os_dev_process/ para obtener
información más detallada acerca del proceso que se sigue para
el desarrollo colaborativo de código de OpenSolaris.
Información general
Una vez considerados el entorno de desarrollo, los procesos y
valores que aplican los desarrolladores en el proceso de
ingeniería, describiremos más detalladamente las funciones del
sistema operativo que ejemplifican el rendimiento, la
seguridad, la capacidad de servicio y la manejabilidad:
■ Rendimiento
■ FireEngine
■ Nemo
■ Crossbow
■ Seguridad
■ Minimización de los privilegios
■ Filtros de paquetes
■ Zonas
■ Zonas de marca (BrandZ)
■ Facilidad de mantenimiento
■ Recuperación automática predecible
■ Tecnología Dynamic Tracing (DTrace)
■ Modular Debugger (MDB)
■ Capacidad de control
■ Utilidad de gestión de servicios (SMF)
■ ZFS
FireEngine
El enfoque de FireEngine en Solaris 10 combina todas las capas
de protocolo en un módulo STREAMS de subproceso múltiple.
En el módulo combinado, en lugar de bloqueos de estructura
por datos, se utiliza un mecanismo de sincronización por CPU
denominado "perímetro vertical". El "perímetro vertical" se
implementa utilizando una abstracción de cola de serialización
Sincronización
Dado que la pila cuenta con múltiples subprocesos (y bloquea la
serialización por CPU que aplica el perímetro vertical), utiliza
un esquema basado en referencias para asegurar que haya una
instancia de conexión cuando se necesite. Para una conexión
TCP establecida, se garantiza la existencia de tres referencias.
Cada capa de protocolo cuenta con una referencia en la
instancia (una para TCP e IP) y el clasificador tiene una
referencia al tratarse de una conexión establecida. Cada vez que
llega un paquete para la conexión y el clasificador consulta la
instancia de conexión, se coloca una referencia adicional, que se
suelta cuando la capa de protocolo termina de procesar el
paquete.
TCP, IP y UDP
El sistema operativo Solaris 10 proporciona la misma vista para
TCP que las versiones anteriores, es decir, TCP aparece como
dispositivo de copia pero en realidad es un compuesto, con el
código TCP e IP combinado en un único módulo D_MP
STREAMS. La parte operativa de TCP está completamente
protegida por el perímetro vertical que se activa mediante las
primitivas de squeue. FireEngine cambia la interfaz entre TCP e
IP desde la interfaz de transferencia de mensajes basada en
STREAMS hasta una interfaz funcional basada en llamadas,
ambas en las rutas de control y datos.
GLDv3
El software Solaris 10 introduce una nueva estructura de
controladores de dispositivos denominada GLDv3 junto con la
nueva pila. La mayoría de los controladores de dispositivos se
ha pasado a esta estructura, y todos los controladores de
dispositivos de 10 Gb y futuros se basarán en ella. Esta
estructura también proporciona una capa DLPI basada en
STREAMS para la compatibilidad con versiones anteriores
(para permitir que los módulos externos que no sean IP sigan
funcionando). La arquitectura GLDv3 virtualiza la capa dos de
la pila de red. Ya no existe una correspondencia uno a uno entre
las interfaces de red y los dispositivos.
Virtualización
El proyecto Crossbow crea pilas virtuales para cualquier
servicio (HTTP, HTTPS, FTP, NFS, etc.), protocolo (TCP, UDP,
SCTP, etc.) o tecnología de Solaris Containers. Las pilas
virtuales se separan mediante un motor de clasificación H/W
para que el tráfico de una pila no repercuta en otras pilas
virtuales. A cada pila virtual se puede asignar su propia
Filtros de paquetes
El filtro IP de Solaris proporciona un filtrado de paquetes con
estado y traducción de direcciones de red (NAT). El filtro IP de
Solaris se deriva de software de filtro IP de código abierto. El
filtro IP puede filtrar por dirección IP, puerto, protocolo o
interfaz de red de acuerdo con las reglas de filtros.
Filtro IP
La API de enlaces de filtros de paquetes (PFHooks) se ha
introducido desde Solaris 10 Update 4, para reemplazar la
implementación basada en STREAMS del filtro IP. Con el uso
de la estructura PFHooks, el rendimiento del software
cortafuegos como el filtro IP se ha mejorado
considerablemente. PFhooks también permite interceptar el
tráfico en bucle y entre zonas. El software cortafuegos de otros
proveedores se desarrolla y registra con la API PFHooks
utilizando el enlace net_register_hook(info, event,
hook);.
block in log quick on le0 from any to any with short frag
block in log on le0 proto icmp from any to any icmp-type unreach
block in log on le0 proto udp from any to any port = 2049
Zonas
Una zona es una abstracción virtual del sistema operativo que
ofrece un entorno protegido en el que se ejecutan las
aplicaciones. Las aplicaciones se protegen unas de otras para
aislar los errores de software. Para facilitar la administración de
múltiples aplicaciones y sus entornos, coexisten en una
instancia del sistema operativo y normalmente se gestionan
como una entidad.
Consulte
http://opensolaris.org/os/community/zones/faq para ver
la respuesta a una gran cantidad de preguntas frecuentes sobre
las zonas y vínculos a la documentación más reciente sobre
administración.
Consulte
http://opensolaris.org/os/community/brandz/install
para ver las instrucciones y los requisitos de instalación.
Redes de zonas
Las zonas de Solaris se pueden designar como:
■ Zona de IP exclusiva
■ Zona de IP compartida
Dispositivos de zonas
Cada zona tiene sus propios dispositivos. Las zonas ven un
subconjunto de pseudodispositivos seguros en su directorio
/dev. Las aplicaciones hacen referencia a la ruta lógica de un
dispositivo presentado en /dev. El directorio /dev existe en las
Recuperación automática
predecible
La tecnología de reparación preventiva Predictive Self-Healing
se implantó de dos modos en el sistema operativo Solaris 10. En
esta sección se describen las nuevas tecnologías Fault
Management Architecture y Services Management Facility que
componen la tecnología de reparación preventiva.
RAID-Z
Además del almacenamiento agrupado, ZFS proporciona
configuraciones de redundancia de datos RAID-Z y
redundantes con duplicaciones. RAID-Z es un dispositivo
virtual que almacena datos y paridad en varios discos, similar a
RAID-5.
Consulte
http://opensolaris.org/os/community/smf/scfdot para
ver un gráfico de los servicios SMF y sus dependencias en un
sistema x86 en el que se acaba de instalar el sistema operativo
Solaris Nevada.
Conceptos de programación
Objetivos
Este módulo ofrece una descripción avanzada de los conceptos
fundamentales del entorno de programación de OpenSolaris:
■ Administración del sistema y los procesos
■ Programación de subprocesos
■ Descripción general del núcleo
■ Planificación de la CPU
■ Depuración de procesos
Recursos adicionales
■ Solaris Internals (2nd Edition), Prentice Hall PTR (12 de mayo
de 2006), de Jim Mauro y Richard McDougall
■ Solaris Systems Programming, Prentice Hall PTR (19 de agosto
de 2004), de Rich Teer
■ Multithreaded Programming Guide Sun Microsystems, Inc.,
2005.
■ STREAMS Programming Guide. Sun Microsystems, Inc., 2005.
■ Solaris 64-bit Developer’s Guide Sun Microsystems, Inc., 2005.
83
Administración del sistema y los procesos
Programación de subprocesos
Una vez descritos los procesos en el contexto de las tareas, los
proyectos, las agrupaciones de recursos, las zonas y las zonas de
marca, pasaremos al contexto de los subprocesos. El sistema
UNIX tradicional ya admite el concepto de subprocesos. Cada
proceso contiene un único subproceso, de modo que
programar con varios procesos implica programar con varios
subprocesos. Sin embargo, un proceso también es un espacio de
direcciones; crear un proceso implica crear un nuevo espacio de
direcciones.
Sincronización
Los objetos de sincronización son variables en la memoria a las
que se accede como si fueran datos. Los subprocesos de
distintos procesos pueden comunicarse entre sí a través de los
objetos de sincronización que se encuentran en la memoria
compartida controlada por los subprocesos. Los subprocesos se
pueden comunicar entre sí aunque los subprocesos de distintos
procesos normalmente no se pueden ver entre sí. Los objetos de
sincronización también se pueden colocar en archivos. Los
objetos de sincronización pueden tener una vida útil más larga
que la del proceso que los crea.
Planificación de la CPU
Los procesos se ejecutan en una clase de planificación con una
política de planificación independiente para cada clase, del
modo siguiente:
■ Realtime (RT): la clase de planificación de mayor prioridad
ofrece una política para los procesos que requieren una
respuesta rápida y un control absoluto por parte del usuario,
o la aplicación de las prioridades de planificación. La
planificación en tiempo real RT se puede aplicar a un
proceso completo o a uno o más procesos ligeros (LWP) de
un proceso. Para utilizar la clase Realtime, es necesario tener
el privilegio proc_priocntl. Consulte la página del
comando man privileges(5) para obtener más
información.
■ System (SYS): es la clase de planificación de prioridad
media; no se puede aplicar a un proceso del usuario.
% man priocntl
Reformatting page. Please Wait... done
NAME
priocntl - display or set scheduling parameters of specified
process(es)
SYNOPSIS
priocntl -l
DESCRIPTION
The priocntl command displays or sets scheduling parameters
of the specified process(es). It can also be used to display
the current configuration information for the system’s pro-
cess scheduler or execute a command with specified schedul-
ing parameters.
Depuración de procesos
La depuración de procesos en todos los niveles de la pila de
desarrollo constituye una parte principal de la escritura de los
módulos de núcleo.
Introducción a DTrace
Objetivos
El objetivo de esta práctica es introducirle a DTrace utilizando una
secuencia de sondeo para una llamada de sistema con DTrace.
Recursos adicionales
■ Solaris Dynamic Tracing Guide. Sun Microsystems, Inc., 2007.
■ DTrace User Guide, Sun Microsystems, Inc., 2006
99
Activación de sondeos DTrace sencillos
Resumen
En primer lugar, vamos a aprender el funcionamiento de
DTrace mediante la creación de varias solicitudes muy sencillas
con el sondeo denominado BEGIN, que se activa cada vez que
inicia una nueva solicitud de seguimiento. Puede utilizar la
opción n de -dtrace(1M) para activar un sondeo utilizando su
nombre de cadena.
2 Active el sondeo:
# dtrace -n BEGIN
Después de una breve pausa, dtrace indicará que se ha
habilitado un sondeo y verá una línea de salida que informará
de que se ha activado el sondeo BEGIN. Cuando vea esta salida,
dtrace permanece en estado de pausa, a la espera de que se
activen otros sondeos. Como no se ha habilitado ninguno de los
otros sondeos y BEGIN sólo se activa una vez, pulse Control+C
en la shell para salir de dtrace y volver al indicador de la shell:
Resumen
En los ejemplos anteriores, hemos aprendido a utilizar dos
sencillos sondeos denominados BEGIN y END. Pero, ¿de dónde
proceden estos sondeos? Los sondeos DTrace provienen de un
conjunto de módulos del núcleo denominados proveedores;
cada uno de ellos realiza un tipo determinado de
instrumentación para crear sondeos. Por ejemplo, el proveedor
syscall ofrece sondeos en cada llamada del sistema; por su
parte, el proveedor fbt los ofrece en cada función del núcleo.
# dtrace -l -P lockstat
ID PROVIDER MODULE FUNCTION NAME
4 lockstat genunix mutex_enter adaptive-acquire
5 lockstat genunix mutex_enter adaptive-block
6 lockstat genunix mutex_enter adaptive-spin
7 lockstat genunix mutex_exit adaptive-release
Sólo se enumeran en la salida los sondeos disponibles en el
proveedor lockstat.
# dtrace -l -m ufs
ID PROVIDER MODULE FUNCTION NAME
15 sysinfo ufs ufs_idle_free ufsinopage
16 sysinfo ufs ufs_iget_internal ufsiget
356 fbt ufs allocg entry
Sólo se enumeran en la salida los sondeos del módulo UFS.
# dtrace -l -f open
ID PROVIDER MODULE FUNCTION NAME
4 syscall open entry
5 syscall open return
116 fbt genunix open entry
# dtrace -l -n start
ID PROVIDER MODULE FUNCTION NAME
506 proc unix lwp_rtt_initial start
2766 io genunix default_physio start
2768 io genunix aphysio start
5909 io nfs nfs4_bio start
El comando anterior enumera todos los sondeos cuyo nombre
es start.
Programación en D
Ahora que ya tiene conocimientos básicos sobre cómo asignar
un nombre a un sondeo, activarlo y enumerarlo, puede escribir
la versión de DTrace del primer programa general, "Hola,
mundo""
Resumen
En este ejercicio puede constatar que, además de la creación de
experimentos de DTrace en la línea de comandos, también
puede escribirlos en archivos de texto utilizando el lenguaje de
programación D.
Discusión
Cada programa D está formado por una serie de cláusulas; cada
una de ellas describe uno o varios de los sondeos que se van a
habilitar, y una serie de acciones opcionales que se efectuarán
una vez activado el sondeo. Estas acciones se enumeran como
una serie de instrucciones entre llaves { } a continuación del
nombre del sondeo. Cada instrucción finaliza con un punto y
coma (;).
Objetivos
El objetivo de este módulo es utilizar DTrace para supervisar los
eventos de las aplicaciones.
Recursos adicionales
Application Packaging Developer’s Guide. Sun Microsystems, Inc.,
2005.
111
Activación de los sondeos en modo de usuario
pid:mod:function:name
Resumen
Este ejercicio se basa en el uso de un ID de proceso en la
descripción del sondeo para hacer un seguimiento de la
aplicación asociada. La complejidad del procedimiento va
aumentando hasta el final del ejercicio; también aumenta la
cantidad y profundidad de la información sobre el
comportamiento de la aplicación que se genera.
...
La columna izquierda muestra el nombre de la función; la
derecha, el tiempo dedicado a dicha función. El tiempo se mide
en nanosegundos.
Objetivos
Los ejemplos de este módulo muestran el uso de DTrace para
diagnosticar errores de aplicación C++. Estos ejemplos también se
utilizan para comparar DTrace con otras herramientas de
depuración de aplicaciones, como Sun Studio 10 o mdb.
119
Uso de DTrace para perfilar y depurar un programa en C++
# /usr/ccs/bin/nm CCtest
...
[61] | 134549248| 53|FUNC |GLOB |0 |9 |__1cJTestClass2T5B6M_v_
[85] | 134549301| 47|FUNC |GLOB |0 |9 |__1cJTestClass2T6M_v_
[76] | 134549136| 37|FUNC |GLOB |0 |9 |__1cJTestClass2t5B6M_v_
[62] | 134549173| 71|FUNC |GLOB |0 |9 |__1cJTestClass2t5B6Mpc_v_
[64] | 134549136| 37|FUNC |GLOB |0 |9 |__1cJTestClass2t6M_v_
[89] | 134549173| 71|FUNC |GLOB |0 |9 |__1cJTestClass2t6Mpc_v_
[80] | 134616000| 16|OBJT |GLOB |0 |18 |__1cJTestClassG__vtbl_
[91] | 134549348| 16|FUNC |GLOB |0 |9 |__1cJTestClassJClassName6kM_pc_
...
# dem ‘nm CCtest | awk -F\| ’{ print $NF; }’‘ | egrep "new|delete"
__1c2k6Fpv_v_ == void operator delete(void*)
__1c2n6FI_pv_ == void*operator new(unsigned)
#!/usr/sbin/dtrace -s
pid$1::__1c2n6FI_pv_:
{
@n[probefunc] = count();
}
pid$1::__1c2k6Fpv_v_:
{
@d[probefunc] = count();
}
END
{
printa(@n);
printa(@d);
}
# pkill dtrace
# ./CCtest
Ventana 2:
Ventana 3:
# pkill dtrace
void*operator new(unsigned) 12
void operator delete(void*) 8
#!/usr/sbin/dtrace -s
# pkill dtrace
#!/usr/sbin/dtrace -s
/*
__1c2k6Fpv_v_ == void operator delete(void*)
__1c2n6FI_pv_ == void*operator new(unsigned)
*/
pid$1::__1c2n6FI_pv_:entry
{
ustack();
}
pid$1::__1c2n6FI_pv_:return
{
printf("%s: %x\n", probefunc, arg1);
}
pid$1::__1c2k6Fpv_v_:entry
{
printf("%s: %x\n", probefunc, arg0);
}
libCrun.so.1‘void*operator new(unsigned)
CCtest‘main+0x19
CCtest‘0x8050cda
void*operator new(unsigned): 80a2bd0
libCrun.so.1‘void*operator new(unsigned)
CCtest‘main+0x57
CCtest‘0x8050cda
void*operator new(unsigned): 8068a70
libCrun.so.1‘void*operator new(unsigned)
CCtest‘main+0x9a
CCtest‘0x8050cda
void*operator new(unsigned): 80a2bf0
void operator delete(void*): 8068a70
void operator delete(void*): 80a2bf0
# dem __1cJTestClass2t5B6M_v_
__1cJTestClass2t5B6M_v_ == TestClass::TestClass #Nvariant 1()
...
t = new TestClass();
cout << t->ClassName();
delete(t);
delete(tt);
...
class TestClass
{
public:
TestClass();
TestClass(const char *name);
TestClass(int i);
virtual ~TestClass();
virtual char *ClassName() const;
private:
char *str;
};
TestClass.cc:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include "TestClass.h"
TestClass::TestClass() {
str=strdup("empty.");
}
TestClass::TestClass(int i) {
str=(char *)malloc(128);
sprintf(str, "Integer = %d", i);
}
TestClass::~TestClass() {
if ( str )
free(str);
}
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "TestClass.h"
while (1) {
t = new TestClass();
cout << t->ClassName();
delete(t);
delete(tt);
sleep(1);
}
}
OBJS=CCtest.o TestClass.o
PROGS=CCtest
CC=CC
all: $(PROGS)
echo "Done."
clean:
rm $(OBJS) $(PROGS)
CCtest: $(OBJS)
$(CC) -o CCtest $(OBJS)
.cc.o:
$(CC) $(CFLAGS) -c $<
Objetivos
En este módulo utilizaremos lo que ha aprendido sobre el uso de
DTrace para observar los procesos examinando un fallo de página.
A continuación, incorporaremos depuración de bajo nivel con
MDB para localizar el problema en el código.
Recursos adicionales
Solaris Modular Debugger Guide Sun Microsystems, Inc., 2007.
133
Gestión de memoria del software
Resumen
Empezaremos con una secuencia de DTrace para rastrear las
acciones de un único fallo de página de un proceso concreto. La
secuencia imprime la dirección virtual del usuario que provoca
el fallo; a continuación, rastrea cada una de las funciones a las
que se llama desde el momento del fallo hasta que se devuelve el
control del fallo de la página. Utilizaremos la salida de la
secuencia para determinar el código fuente que se debe
examinar para obtener más información.
pagefault:entry
/execname == $$1/
{
printf("fault occurred on address = %p\n", args[0]);
self->in = 1;
}
pagefault:return
/self->in == 1/
{
self->in = 0;
exit(0);
}
entry
/self->in == 1/
{
}
return
/self->in == 1/
{
}
# ./pagefault.d mozilla-bin
dtrace: script ’./pagefault.d’ matched 42626 probes
CPU FUNCTION
0 -> pagefault fault occurred on address = fb985ea2
0 <- pvn_read_kluster
0 -> pageio_setup <-- setup page(s) for io common/os/bio.c
0 <- pageio_setup
0 -> lufs_read_strategy <-- logged ufs read
0 -> bdev_strategy <-- read device common/os/driver.c
0 -> cmdkstrategy <-- common disk driver (cmdk(7D))
<-- common/io/dktp/disk/cmdk.c
0 -> dadk_strategy <-- direct attached disk (dad(7D))
<-- for ide disks(common/io/dktp/dcdev/dadk.c)
<-- driver sets up dma and starts page in
0 <- dadk_strategy
0 <- cmdkstrategy
0 <- bdev_strategy
0 -> biowait <-- wait for pagein complete common/os/bio.c
0 -> sema_p <-- wakeup sema_v from completion interrupt
0 -> swtch <-- let someone else run(common/disp/disp.c)
0 -> disp <-- dispatch to next thread to run
0 <- disp
0 -> resume <-- actual switching occurs here
<-- intel/ia32/ml/swtch.s
0 -> savectx <-- save old context
0 <- savectx
<-- someone else is running here...
0 -> restorectx <-- restore context (we’re awakened)
0 <- restorectx
0 <- resume
0 <- swtch
0 <- sema_p
0 <- biowait
0 -> pageio_done <-- undo pageio_setup
0 <- pageio_done
0 -> pvn_plist_init
0 <- pvn_plist_init
0 <- ufs_getpage_miss <-- page is in memory
0 <- ufs_getpage
0 <- fop_getpage
0 -> segvn_faultpage <-- call hat to load pte(s) for page(s)
0 -> hat_memload
0 -> page_pptonum <-- get page frame number
0 <- page_pptonum
# mdb -k
Loading modules: [ unix krtld genunix specfs dtrace
ufs ip sctp usba random fctl s1394
nca lofs crypto nfs audiosup sppp cpc fcip ptm ipc ]
> ::ps !grep mozilla-bin <-- find the mozilla-bin process
R 933 919 887 885 100 0x42014000 ffffffff81d6a040 mozilla-bin
vpage = 0xffffffff82552000
cred = 0xffffffff81f95018
swresv = 0
advice = 0
pageadvice = 0x1
flags = 0x490
softlockcnt = 0
policy_info = {
mem_policy = 0x1
mem_reserved = 0
}
}
p_io_cv = {
_opaque = 0
}
p_iolock_state = 0
p_szc = 0
p_fsdata = 0
p_state = 0
p_nrm = 0x2
p_embed = 0x1
p_index = 0
p_toxic = 0
p_mapping = 0xffffffff82d265f0
p_pagenum = 0xbd62 <-- the page frame number of page
p_share = 0
p_sharepad = 0
p_msresv_1 = 0
p_mlentry = 0x185
p_msresv_2 = 0
}
> bd62*1000=K <-- multiple page frame number time page size (hex)
bd62000 <-- here is physical address of page
> bd62000+ea2,10/ai <-- data looks like code, let’s try dumping as code
0xbd62ea2:
0xbd62ea2: pushq %rbp
0xbd62ea3: movl %esp,%ebp
0xbd62ea5: subl $0x2cc,%esp
0xbd62eab: andl $0xfffffff0,%esp
0xbd62eae: pushq %rbx
> 0::context
debugger context set to kernel
Depuración de controladores
con DTrace
Objetivos
El objetivo de este módulo es aprender a utilizar DTrace para
depurar los proyectos de desarrollo de controladores estudiando
un caso.
149
Asignación de puertos al controlador smbfs de Linux al sistema operativo Solaris
# modload /usr/kernel/fs/smbfs
can’t load module: Out of memory or no room in system tables
#!/usr/sbin/dtrace -s
fbt::mod_getsysnum:entry
/execname == "modload"/
{
self->follow = 1;
}
fbt::mod_getsysnum:return
{
self->follow = 0;
trace(arg1);
}
fbt:::entry
/self->follow/
{
}
fbt:::return
/self->follow/
{
trace(arg1);
}
# ./mod_getsysnum.d
dtrace: script ’./mod_getsysnum.d’ matched 35750 probes
CPU FUNCTION
0 -> mod_getsysnum
0 -> find_mbind
0 -> nm_hash
0 <- nm_hash 41
0 -> strcmp
0 <- strcmp 4294967295
0 -> strcmp
0 <- strcmp 7
0 <- find_mbind 0
0 <- mod_getsysnum 4294967295
fbt::strcmp:entry
{
# ./mod_getsysnum.d
dtrace: script ’./mod_getsysnum.d’ matched 35751 probes
CPU FUNCTION
0 -> mod_getsysnum
0 -> find_mbind
0 -> nm_hash
0 <- nm_hash 41
0 -> strcmp
0 | strcmp:entry name:smbfs,
hash:timer_getoverrun
0 <- strcmp 4294967295
0 -> strcmp
0 | strcmp:entry name:smbfs,
hash:lwp_sema_post
0 <- strcmp 7
0 <- find_mbind 0
0 <- mod_getsysnum 4294967295
’smbfs 177’
(read_binding_file() is read once at boot time.)
# modload /usr/kernel/fs/smbfs
# modunload -i 160
can’t unload the module: Device busy
# dtrace -l fbt:smbfs:: | wc -l
1002
#!/usr/sbin/dtrace -s
fbt:smbfs::entry
{
}
fbt:smbfs::return
{
trace(arg1);
}
#!/usr/sbin/dtrace -s
fbt::modunload:entry
{
self->follow = 1;
trace(execname);
trace(arg0);
}
fbt::modunload:return
{
self->follow = 0;
trace(arg1);
}
fbt:::entry
/self->follow/
{
}
fbt:::return
/self->follow/
{
trace(arg1);
}
# ./modunload.d
dtrace: script ’./modunload.d’ matched 36695 probes
CPU FUNCTION
0 -> modunload modunload 160
0 | modunload:entry
0 -> mod_hold_by_id
0 -> mod_circdep
0 <- mod_circdep 0
0 -> mod_hold_by_modctl
0 <- mod_hold_by_modctl 0
0 <- mod_hold_by_id 3602566648
0 -> moduninstall
0 <- moduninstall 16
0 -> mod_release_mod
0 -> mod_release
0 <- mod_release 3602566648
0 <- mod_release_mod 3602566648
0 <- modunload 16
1. if (mp->mod_prim || mp->mod_ref ||
mp->mod_nenabled != 0) return (EBUSY);
2. if ( detach_driver(mp->mod_modname) != 0 ) return
(EBUSY);
3. if ( kobj_lookup(mp->mod_mp, "_fini") == NULL )
4. A failed call to smbfs _fini() routine
#!/usr/sbin/dtrace -s
fbt::moduninstall:entry
{
self->follow = 1;
printf("mod_prim:%d\n",
((struct modctl *)arg0)->mod_prim);
printf("mod_ref:%d\n",
((struct modctl *)arg0)->mod_ref);
printf("mod_nenabled:%d\n",
((struct modctl *)arg0)->mod_nenabled);
printf("mod_loadflags:%d\n",
((struct modctl *)arg0)->mod_loadflags);
}
fbt::moduninstall:return
{
self->follow = 0;
trace(arg1);
}
fbt::kobj_lookup:entry
/self->follow/
{
fbt::kobj_lookup:return
/self->follow/
{
trace(arg1);
}
fbt::detach_driver:entry
/self->follow/
{
}
fbt::detach_driver:return
/self->follow/
{
trace(arg1);
}
# ./moduninstall.d
dtrace: script ’./moduninstall.d’ matched 6 probes
CPU FUNCTION
0 -> moduninstall
mod_prim:0
mod_ref:0
mod_nenabled:0
mod_loadflags:1
0 -> detach_driver
0 <- detach_driver 0
0 -> kobj_lookup
0 <- kobj_lookup 4273103456
0 <- moduninstall 16
int _fini(void)
{
/* don’t allow module to be unloaded */
return (EBUSY);
}
Recursos de OpenSolaris
161
162