Está en la página 1de 8

HP UX

Este sistema operativo es una versión de UNIX el cual provee el poder de


controlar empresas y servidores de misión critica. Que operan en las plataformas
PA – RISC e Itanium. Este sistema operativo ofrece manejabilidad con
interoperabilidad para dar un control total de la integridad de la infraestructura.
El sistema HP UX combina un kernel robusto, compatibilidad con Linux y
herramientas de desarrollo con código abierto.
El sistema HP UX se encuentra disponible para múltiples plataformas de
hardware:
• Arquitectura PA – RISC
• Intel Itanium

Sistema de Archivos
Existen dos tipos de sistemas de archivos:
• UFS.- Se configura con bloques de 64 kb y fragmentos de 8 kb. Este
sistema de archivos tiene preferencia sobre el desempeño de entrada y
salida en bloques de 64 kb.
• JFS.- Se conoce como VxFS, es un sistema de archivos en el que no hay
que preocuparse cuando las aplicaciones chocan o cuando se han
completado satisfactoriamente. Cuando se trata de montar este sistema se
hace con 3 opciones especificas para ganar rendimiento:
o Nolog
o Mincache = TmpCache.
o Convosync = Delay

Memoria Física y virtual


El sistema de manejo de memoria está diseñado para hacer disponibles los
recursos de seguridad y eficiencia para los hilos y los procesos.

-Este sistema provee un espacio completo de dirección para cada proceso, siendo
protegido de todos los demás procesos.

-También habilita el tamaño del programa para que pueda ser más largo que el
tamaño de la memoria.

-El sistema decide que procesos e hilos residen en memoria física y manipula los
hilos y los procesos dentro y fuera de la memoria.

- Maneja las partes del espacio virtual de direcciones de un hilo o proceso no en la


memoria física y determina que porciones del espacio de direcciones debe residir
en la memoria física.
Los datos e instrucciones de cualquier proceso (un programa en ejecución)
o hilo de ejecución en un proceso debe residir en la memoria física al momento de
ser ejecutado.

Para ejecutar un proceso, el kernel crea un espacio virtual de dirección , en


la que parte de este espacio es mapeado en la memoria física.

A través de la "Paginación por demanda", HP-UX permite ejecutar hilos y


procesos por medio de páginas virtuales en la memoria principal solo cuando se
necesita, y coloca fuera de ella porciones del proceso que no han sido usadas
recientemente.

El término "Manejo de memoria" se refiere a unas reglas que gobiernan la


memoria física y la memoria virtual ayudando a un mejor uso de los recursos del
sistema por los procesos del sistema y los del usuario.

PAGINAS.
Las páginas son los bloques más pequeños y contiguos de la memoria
física que pueden alojar datos y código. El tamaño de página de todos los
sistemas HP-UX es de cuatro kilobytes. En los sistemas PA-RISC, cada página de
memoria física es direccionada por un número físico de página. El acceso a las
páginas es hecho por medio de direcciones virtuales.

DIRECCIONES VIRTUALES.
Cuando un programa es compilado, el compilador genera direcciones
virtuales para el código, las direcciones virtuales representan una localidad en
memoria. Estas direcciones virtuales deben ser mapeadas a direcciones físicas
(Localidades de las páginas físicas en memoria) por el código compilado a
ejecutar.

El kernel y el hardware coordinan el mapeo de estas direcciones físicas y


virtuales para el CPU, esto es llamado "Translación de dirección", para colocar el
proceso en memoria.

La dirección virtual de un PA-RISC consiste en un identificador de


espacio(Space Identifier) y un desplazamiento.
- Cada identificador de espacio representa una unidad de 4GB de memoria
virtual.
- La porción de desplazamiento de una dirección virtual es el
desplazamiento en este espacio.
PAGINACION POR DEMANDA.
Para que un proceso se ejecute, las páginas no son cargadas en memoria hasta
que son requeridas por el proceso. Solamente la parte que se está ejecutando de
el proceso necesita estar en memoria al mismo tiempo, la translación no se puede
hacer hasta que la página actual sea accesada.

MANEJO DEL ESPACIO DE SWAP.


El espacio de swap es un área de un dispositivo de almacenamiento de alta
velocidad(casi siempre un disco), reservada para ser usada por el sistema de
memoria virtual para desactivar y paginar los procesos.

Durante el arranque del sistema, la localidad y tamaño de cada dispositivo


de SWAP es desplegado en bloques de 512 KB. El swapper reserva el espacio de
swap a la hora de que se crea un proceso El reservar espacio de swap a la hora
de crear el proceso protege al swapper para que no corra fuere de este espacio.

Es posible agregar o quitar swaps como sea necesario (ya que es dinámico)
mientras el sistema se encuentra corriendo, sin tener que regenerar el kernel.

ESTADOS Y TRANSICIONES DE LOS PROCESOS.


Durante su tiempo de vida los procesos transitan a través de varios
estados.

Por medio de colas en memoria principal se mantiene la pista de un


proceso por medio de su ID, el proceso reside en memoria de acuerdo al estado
en el que se encuentra, los estados del proceso están definidos dentro del archivo
de cabecera proc.h.
El recibir una señal provoca que un proceso cambie de un estado a otro.

Tabla 1 Estados de un proceso


Estado Que sucede
idle (SIDL) El proceso es creado al llamar fork, vfork, or exec.
run (SRUN) El proceso está en una cola de espera para ser ejecutado.

stopped La ejecución del proceso es detenida por una señal o por un


(SSTOP) proceso padre

sleep El proceso no se está ejecutando ya que puede estar esperando


(SSLEEP) algún recurso.

Zombie El proceso ha sido terminado, ya no existe pero se mantiene atrás


(SZOMB) por si algún proceso requiere de el.
Figura 2 : Estados y Transiciones de los procesos

Cuando un programa comienza un proceso, el kernel aloja una estructura


para él de la tabla de procesos, el proceso entonces esta en el estado idle (El
proceso es creado al llamar fork, vfork, o exec), en espera de que se le asignen
recursos del sistema.

Una vez que ha adquirido el recurso, el proceso es ligado hacia una cola de
espera para que se haga corrible , en este momento se corre switcheando como
sea necesario entre modo kernel y modo usuario.

Si un proceso que se encuentra ejecutando recibe una señal SIGSTOP


entra a un estado de detenido.

Cuando reciba una señal SIGCONT , el proceso regresa a una cola de


ejecución(in-core runnable). Si un proceso en ejecución debe esperar por un
recurso (como un semáforo o una competencia de E/S), el proceso va a una cola
de dormido (Estado de dormido) hasta que obtenga el recurso, en ese momento el
proceso despierta y es puesto en una cola de ejecución . Un proceso en estado de
dormido debe ser sacado de memoria hasta que reciba su recurso (señal de
despertar) y colocarse en una cola de ejecución entonces el proceso es traído a
memoria nuevamente y colocado en la cola.
Una vez que el proceso es terminado, sigue existiendo en un estado llamado
Zombie.

Creación del proceso.


El proceso 0 es creado e inicializado al mismo tiempo que se arranca el sistema
pero todos los otros procesos son creados por las llamadas del sistema fork() o
vfork().

- La llamada del sistema fork() provoca la creación de un nuevo proceso, en


el que el nuevo hijo es una copia exacta del proceso llamado padre.
- Vfork() difiere de fork() solo en que el proceso hijo puede compartir codigo y
datos con el proceso padre.

Ejecución del proceso.


Una vez que el proceso es creado con fork() y vfork(), el proceso llama a exec()
(localizada en kern_exec.c) para comenzar a ejecutar el código del programa.
Exec(), en todas sus formas, carga un programa de un archivo ejecutable ordinario
de ese proceso
Reemplazando el texto existente de un proceso por una nueva copia y un archivo
ejecutable.
Un archivo ejecutable consiste de una cabecera, segmento de texto y segmento
de datos.
El segmento de datos consiste en una porción inicializada y una porción no
inicializada , la parte del argumento del archivo se refiere a si es un arcyhivo
ejecutable o solo de texto.
Una vez terminada la llamada a exec() no se regresa nada ya que el nuevo
programa sobrescribe lo anterior.

Terminación de un proceso.
Cuando un proceso termina su ejecución , HP-UX lo termina por medio de la
llamada de sitema exit.

En algunas ocasiones se requiere que el proceso sea sincronizado para su


ejecución con un proceso hijo, esto es posible haciendo uso de la llamada de
sistema wait.
Durante la llamada exit , el proceso entra en estado de zombie y debe esperar a
los procesos hijos.
Para terminar los procesos y sus hijos existen tres rutinas freeproc(), freethread() y
kissofdeath().
Scheduling del proceso.
Para entender como corre un hilo de un proceso, debemos de entender como son
planificados.
Aunque aparentemente los proceso están corriendo simultáneamente para el
usuario, de hecho un solo procesador está ejecutando solo un hilo a cualquier
momento.

Factores que contribuyen para el scheduling de un proceso.

- Tipo de política de scheduling requerida : Esta política gobierna como el


proceso (o hilo) interactua con otros procesos (o hilos) de la misma
prioridad.
- Elección de scheduler: Existen cuatro schedulers : HP-UX timeshare
scheduler (SCHED_HPUX), Manejador de recursos (HP) , HP-UX real-time
scheduler (HPUX_PTPRIO) , y el POSIX-compilant real-time scheduler.
- Prioridad del proceso, la prioridad denota la importancia relativa de la
ejecución de un proceso o hilo.
- Colas de ejecución de donde ha sido tomado el proceso.
- Las rutinas del kernel que hacer el schedule del proceso.

Políticas de sheduling.
El scheduling de HP-UX es gobernado por una política que nota la urgencia
por la que el CPU es requerido.

DEADLOCK.
HP-UX usa un método simple de orden de seguro para ayudar a la detección de
un deadlock, lo que es encuentra atrás de orden de seguro es que los seguros son
puestos al mismo orden que los threads , así reduciendo la oportunidad de que
ocurra un deadlock.

El ejemplo clásico de deadlock cuando el hilo1 requiere un lock-A y un


lock-B para hacer un trabajo, de igual manera el hilo2 requiere de los mismos para
hacer otro trabajo, el hilo1 tiene el lock-A y el thread2 tiene el lock-B , pero si el
hilo1 quiere el lock-B no lo puede obtener porque lo tiene el hilo2 y viceversa,
entonces si ninguno de los dos suelta su lock y se quedan esperando jamás les va
a llegar nada, por el contrario si se forza a que el hilo1 tomo el lock-A y después el
lock-B el hilo 2 no va a tomar el lock-B de esa manera el deadlock será eliminado.
En el caso de los spinlocks, cada spinlock es asignado de acuerdo al orden mayor

SEMÁFOROS ALFA.
Los semáforos alfa son mutuamente excluyentes, al bloquear los semáforos
su propósito es la protección de los datos. Estos semáforos protegen los recursos
de clase alfa. Estos recursos estan definidos como un recurso consistente a la
hora de hacer un cambio de contexto. Desde que el recurso alfa es consiste a
través del cambio de contexto, el semáforo alfa es soltado por el kernel,
readquiriendo dicho semáforo y continua su ejecución. Generalmente los
semáforos alfa son usados por el kernel para proteger subsistemas.

SEMÁFOROS BETA.
Los semáforos beta son mutuamente excluyente. Sus propietarios son los
threads que los adquieren y son utilizados para proteger a los recursos de clase
beta, típicamente los semáforos beta son bloqueados y desbloqueados por el
thread. Estos recursos estan definidos como un recurso no consistente a la hora
de hacer un cambio de contexto. Los semáforos beta son sostenidos a traves del
cambio de contexto. El hilo adquiere un semáforo beta y es lanzado. Los hilos
pueden dormir mientras sean sostenidos por los semáforos beta. Los semáforos
beta no pueden ser usados en la interrupción contexto. Los semáforos beta tienen
dos atributos , el estado de bloqueo y el propietario.

SEMAFOROS DE SINCRONIZACIÓN.
Los semáforos de sincronización son más que los tradicionales ya que
provee un camino para que los threads se comuniquen y se sincronicen.

Los threads incluyendo los que se encuentran en diferentes procesos,


pueden sincronizar eventos al usar P(recibir), v (liberar), inicialmente el semáforo
tiene un contador de eventos en 0, la operación V incrementa el valor de ese
contador para indicar que ha ocurrido un evento , si es que se trata de un thread
que está esperando por un evento este es desbloqueado.

La operación P decrementa el valor del contador y bloquea el hilo si el


evento no ha ocurrido.

Un condicional de la operación V permite que la operación V solo si existe


un thread bloqueado esperando por que suceda un evento.

También podría gustarte