Sunteți pe pagina 1din 30

Cul es el principio de funcionamiento de los Hipervisores tipo I?

Los hipervisores de tipo 1 se ejecutan en modo kernel.


La maquina virtual se ejecuta como un proceso de usuario en modo usuario y como tal, no puede
ejecutar instrucciones sensibles( Instrucciones sensibles son aquellas que realizan operaciones tales
como E/S, modificar opciones de la MMU, etc ). La maquina virtual ejecuta un sistema operativo
invitado que piensa que se encuentra en modo kernel, aunque desde luego se encuentra en modo de
usuario. A esto lo llamaremos modo de kernel virtual.
La maquina virtual tambien ejecuta procesos de usuario, los cuales creen que se encuentran en
modo de usuario ( y en realidad as es ).
Cuando el sistema operativo, el cual cree que se encuentra en modo kernel, ejecuta una instruccin
sensible(una que solo se permite en modo kernel), en las CPUS con VT(Virtual Tecnology), se
produce una interrupcin en el kernel. As el hipervisor puede inspeccionar la instruccin para ver si
el sistema operativo invitado la emiti en la maquina virtual o si fue un programa de usuario en la
maquina virtual. En el primer caso, hace las preparaciones para que se ejecute la instruccin. En el
segundo caso, emula lo que hara el hardware real al confrontarlo con una instruccin sensible que
se ejecuta en modo de usuario.

Cul es el principio de funcionamiento de los Hipervisores tipo II?

Los hipervisores tipo 2 se ejecutan como programas de usuario ordinario encima de un sistema
operativo anfritrin, como Windows o Linux.
Cuando se inician por primera vez, actua como una computadora que se acaba de iniciar y espera
encontrar el instalador del sistema operativo. Luego se instala el sistema operativo en su disco
virtual ( que es un archivo de Windows o Linux). Una vez instalado, se puede iniciar el sistema
operativo.
El esquema de funcionamiento consiste que cuando se ejecute un programa binario, primero se
realiza una exploracin del cdigo para buscar bloques bsicos, es decir ejecuciones de
instrucciones seguidas que terminan en un salto, una llamada ,una interrupcin, o alguna instruccin
que modifica el flujo de control. Por definicin, ningun bloque bsico contiene una instruccin que
modifique el contador del programa. Se inspecciona el bloque bsico para ver si contiene
instrucciones sensibles (en el sentido de Popek y Goldberg). De ser as, cada una de estas
instrucciones se sustituye con una llamada a un procedimiento de VMware que la maneja. La
instruccin final tambien se sustituye con una llamada a VMWare.
Una vez que se realicen estos pasos, el bloque bsico se coloca en la cache de VMWare y despues
se ejecuta. Un bloque basico que no contenga instrucciones sensibles se ejecutar con la misma
rapidez bajo Vmware que en la mquina bsica. Las instrucciones sensitivas se atrapan y emulan de
esta manera. A esta tcnica se le conoce como traduccin binaria.

No hay necesidad de sustituir las instrucciones sensibles en los programas de usuario; el hardware
las ignorar de todas formas.

Debe estar claro por qu funcionan los hipervisores de tipo 2, incluso en hardware que no se puede
virtualizar: todas las instrucciones sensibles se sustituyen mediante llamadas a procedimientos que
emulan estas instrucciones. El verdadero hardware nunca ejecuta las instrucciones sensibles que
emite el sistema operativo invitado. Se convierten en llamadas al hipervisor, quien a su vez las
emula.

Cumple el Intel Pentium con las condiciones de Popeck y Goldberg para virtualizar una
plataforma? Como se realiza esta virtualizacin?

Cada CPU con modo kernel y modo usuario tiene un conjunto de instrucciones que slo se pueden
ejecutar en modo kernel, como las instrucciones que realizan operaciones de E/S, las que modifican
las opciones de MMU, etc.
Popke y Goldberg desarrollaron un trabajo sobre virtualizacin en el cual a estas instrucciones las
llamaron instrucciones sensibles. Tambien hay un conjunto de instrucciones que producen una
trampa(interrupcin) si se ejecutan en modo de usuario. A estas instrucciones, Popek y Goldberg
las llamaron instrucciones privilegiadas.
Declararon que una maquina se puede virtualizar solo si las instrucciones sensibles son un
subconjunto de las instrucciones privilegiadas. Esto es, si usted trata de hacer algo en modo de
usuario que no deba hacer en este modo, el hardware deber producir una interrupcin.
A diferencia de la IBM/370 que si tenia esta propiedad, el Intel 386 no la tiene. Se ignoraban
muchas instrucciones sensibles del 386 si se ejecutaba en modo de usuario. Por ejemplo, la
instruccin POPF sustituye el registro de banderas, que modifica el bit que habilita/deshabilita las
interrupciones. En modo usuario, este bit simplemente no se modifica. Como consecuencia, el 386 y
sus sucesores no se podan virtualizar, por lo que no podan soportar un hipervisor de tipo 1.
Algo peor, es cuando hay instrucciones que pueden leer el estado sensible en modo usuario sin
producir una interrupcin. Por ejemplo, en el Pentium un programa puede determinar si se est
ejecutando en modo usuario en modo kernel con solo leer su selector del segmento de codigo. Un
sistema operativo que hiciera esto y descubriera que se encuentra en modo usuario podra tomar una
decisin incorrecta con base a esta informacin.

Como se debe realizar esta virtualizacin?


La idea bsica es crear contenedores en los que se puedan ejecutar maquinas virtuales. Cuando se
inicia un sistema operativo invitado en un contenedor, se sigue ejecutando ah hasta que se produce
una excepcin y se atrapa en el hipervisor, por ejemplo, mediante la ejecucin de una instruccin de
E/S. El conjunto de operaciones que se atrapan se controla mediante un mapa de bits de hardware
establecido por el hipervisor. Con estas extensiones, es posible utilizar el clsico mtodo de atrapar
y emular de una mquina virtual.
En qu consiste la paravirtualizacin?

Los hipervisores de tipo 1 y 2 funcionan con sistemas operativos invitados que no estn
modificados, pero tienen que hacer un gran esfuerzo por obtener un rendimiento razonable.
Un mtodo distinto que se est haciendo popular es modificar el cdigo fuente del sistema opeartivo
invitado, de manera que en vez de ejecutar instrucciones sensibles, realiza llamadas al hipervisor.
En efecto, el sistema operativo invitado acta como un programa de usuario que realiza llamadas al
sistema operativo ( el hipervisor). Cuando se utiliza este mtodo, el hipervisor debe definir una
interfaz que consiste en un conjunto de llamadas a procedimientos que los sistemas operativos
invitados puedan utilizar.
Al eliminar todas las instrucciones sensibles del sistema operativo para que solo haga llamadas al
hipervisor, hemos convertido al hipervisor en un microkernel. Se dice que un sistema operativo
invitado para el que se han eliminado de manera intencional algunas instrucciones sensibles est
paravirtualizado.

Qu diferencias hay entre la implementacin de threads a nivel de Kernel y como biblioteca


de usuario? Qu ocurre en ambos casos con una llamada que debera bloquear al proceso
como una lectura?

Hay dos formas de implementar un paquete de hilos: en espacio de usuario y en el kernel.

El primer mtodo es colocar el paquete de hilos completamente en espacio de usuario. El kernel no


sabe nada acerca de ellos. En lo que al kernel concierne, est administrando procesos ordinarios con
un solo hilo. La primera ventaja, la ms obvia, es que un paquete de hilos a nivel de usuario puede
implementarse en un sistema operativo que no acepta hilos. Con este mtodo, los hilos se
implementan mediante una biblioteca.

Cuando los hilos se administran en espacio de usuario, cada proceso necesita su propia tabla de
hilos privada para llevar la cuenta de los hilos en ese proceso. Esta tabla es similar a la tabla de
procesos del kernel, excepto porque solo lleva la cuenta de las propiedades por cada hilo, como el
contador de programa, stack pointer, registros, etc. Cuando un hilo pasa al estado listo o bloqueado,
la informacin necesaria para reiniciarlo se almacena en la tabla de hilos, en la misma forma exacta
que el kernel almacena la informacin acerca de los procesos en la tabla de procesos.
Cuando un hilo hace algo que puede ponerlo en estado bloqueado en forma local, por ejemplo,
esperar a que otro hilo dentro de su proceso complete cierto trabajo, llama a un procedimiento del
run-time system. Este procedimiento comprueba si el hilo debe ponerse en estado bloqueado. De ser
as, almacena los registros del hilo en la tabla de hilos, busca en la tabla un hilo listo para ejecutarse
y vuelve a cargar los registros de la maquina con los valores guardados del nuevo hilo. Tan pronto
como se conmutan el stack pointer y el contador de programa, el nuevo hilo vuelve otra vez a la
vida de manera automtica. La conmutacin de hilos a nivel de usuario es ms rapida que a nivel de
kernel.
Un problema que tiene los hilos en el espacio de usuario es con los bloqueos. Supongamos que un
hilo lee del teclado. Es inaceptable permitir que el hilo realice la llamada al sistema, ya que esto
detendr a todos los hilos.
Otro problema es que si un hilo empieza a ejecutarse, ningn otro hilo en ese proceso se ejecutar a
menos que el primer renuncie de manera voluntaria a la CPU. Dentro de un solo proceso no hay
interrupciones de reloj, lo cual hace que sea imposible planificar hilos en el formato round robin
( tomando turnos ).

Hilos en el kernel

No hay tabla de hilos en cada proceso. En vez de ello, el kernel tiene una tabla de hilos que lleva la
cuenta de todos los hilos en el sistema. Cuando un hilo desea crear un nuevo hilo o destruir uno
existente, realiza una llamada al kernel, la cual se encarga de la creacin o destruccin mediante una
actualizacin en la tabla de hilos del kernel.
La tabla de hilos del kernel contiene los registros, el estado y dems informacin de cada hilo.
Adems el kernel tambien mantiene la tabla de procesos tradicional para llevar la cuenta de los
procesos.
Cuando un hilo se bloquea, el kernel, segn lo que decida, puede ejecutar otro hilo del mismo
proceso( si hay uno listo ) o un hilo de un proceso distinto.

Hibridas

Con este mtodo, el kernel est conciente solo de los hilos de nivel kernel y los planifica. Algunos
de esos hilos pueden tener varios hilos de nivel usuarios multiplexados encima de ellos; los hilos de
nivel de usuario se crean, destruyen y planifican de igual forma que los hilos de nivel usuario.
Describa los componentes y algunas funciones de EFI (Extended Firmware Interface)

UEFI ( Unified Extensible Firmware Interface ) es una especificacin que define una interface de
software entre el sistema operativo y el firmware de la plataforma. UEFI reemplaza a la interface de
firmware de BIOS ( Basic Input/Output System).

Caracteristicas:

1) Servicios: EFI define dos tipos de servicios: boot services y runtime services. Boot services estn
disponibles solo cuando el firmware domina la plataforma. Incluye consolas de texto, consolas
graficas sobre varios dispositivos, file services, etc. Runtime services siguen estando disponibles
cuando el sistema operativo est corriendo. Incluye servicios como fecha y hora, device drivers.

2) Protocolos: EFI define protocolos como un conjunto de interfaces de software usados para
comunicacin entre dos modulos binarios. Todos los drivers EFI deben proporcionar servicios a
otros via protocolos.

3) Device drivers (controladores de dispositivo): La especificacin EFI permiten ofrecer un


controlador de dispositivo independiente del procesador denominado EFI Byte Code. Gracias a
esto, se permite soporte para la carga de grficos, red, sonido y opciones avanzadas del sistema, sin
haber precargado el sistema operativo en cuestin.
4) Gestor de arranque: Un gestor de arranque propio de EFI permite tambien la seleccin y carga
directa de los sistemas operativos, eliminando la necesidad de recurrir a gestores de arranque.
Define un boot manager que carga el loader del sistema operativo y los drivers que se necesitan.
La configuracin del booteo se almacena en la variable NVRAM
Tiene una especificacin de protocolo llamado Secure Boot que impide la carga de drivers y SOs
que no tengan una firma digital aceptable.
Cuando un proceso est en estado Zombie? Describa una forma de lograrlo.
Un proceso zombie es un proceso que ha completado su ejecucin ( por medio de la llamada al
sistema exit ) pero sigue teniendo una entrada en la tabla de procesos: Es un proceso en el estado
terminado.
Esto ocurre para procesos hijos, donde la entrada es necesaria para permitir al proceso padre leer el
estado de salida de su hijo: Una vez que el exit status es leido por medio de la system call wait, la
entrada es removida de la tabla de procesos.

int main () {
pid_t child_pid;
child_pid = fork();
if (child_pid > 0) {
sleep (60);
}else {
exit (0);
}
return 0;
}

Describa los algoritmos de scheduling:


1) First come- First served
2) Shortest Job Next
3) Round Robin
4) Multiples colas con prioridad

- First-Come, First Server scheduling


El algoritmo ms simple. Con este esquema, el proceso que peticiona primero la CPU es el que la
obtiene primero. Se implementa facilmente con una FIFO queue.
Como negativo, tiene que el tiempo promedio de espera es un poco alto.
Si un proceso de gran CPU burst llega primero, los que tengan un corto CPU burst tendran que
eseprar demasiado para poder ejecutarse tan solo un instante y volver a peticionar por I/O.
Este tipo de algoritmo es no apropiativo, es decir, una vez que el proceso tiene la CPU, el proceso
permanece con la CPU hasta que la deja, ya sea terminando el proceso o peticionado por I/O.

- Shortest-Job-First scheduling

Este algoritmo asocia con cada proceso la longitud de su siguiente CPU burst. Cuando la CPU este
disponible, es asignada al proceso que tenga el CPU burst ms chico.
Este algoritmo, comparandolo al FCFS, da un tiempo promedio de espera mucho menor.
La complejidad del algoritmo es saber la longitud del siguiente pedido de CPU.
Cuando short-term scheduling, no hay forma de saber la longitud del siguiente CPU burst. Pero se
puede predicir, por ejemplo, usando valores anteriores.

- Priority Scheduling

El algoritmo SJF es un caso especial del algoritmo general priority-scheduling.


Una prioridad es asociada con cada proceso, y la CPU es dada al proceso con la prioridad ms alta.
Las prioridades pueden ser definidas ya sean internamente o externamente. Prioridades definidas
internamente puede ser por ejemplo, requerimientos de memoria, el numero de archivos abiertos.
External priorities son seteado por fuera del criterio del sistema operativo, como puede ser la
importancia del proceso, el tipo y cantidad de pago para el uso de la computadora, etc.

- Round-Robing scheduling

Este algoritmo esta diseado especificamente para sistemas de tiempo compartido.


Una pequea unidad de tiempo, llamada time quantum o time slice es definido. Un time quantum es
generalmente de 10 a 100 ms en longitud. La ready queue es tratada como una cola circular.

Una de dos cosas pueden pasar. El proceso puede tener un CPU burst de menos de un quantum. En
este caso, el proceso por si mismo va a liberar la CPU voluntariamente. El scheduler proceder a
seleccionar al siguiente proceso en la ready queue. Si el CPU burst del proceso corriendo
actualmente es mayor a un quantum, el timer causar una interrupcin al sistema operativo. Un
cambio de contexto ser ejecutado y el proceso ser puesto en la ready queue. Luego el CPU
scheduler seleccionara al siguiente proceso en la ready queue.

La performance de este algoritmo esta basado en el tamao del quantum.


Si el tiempo quauntum es extremandamente largo, RR es el mismo que FCFS. En contraste, si el
time quantum es extremandemente pequeo, el enfoque RR puede resultar en un gran numero de
context switches.
Se desea que el time quantum sea largo con respecto al tiempo de cambio de contexto.

- Multilevel queue scheduling

Otra clase de algoritmos de scheduling han sido creado para situaciones en el cual los procesos son
facilmente clasificados en diferentes grupos. Por ejemplo, procesos foreground (interactivos) y
procesos background( batch). Estos dos tipos de procesos tienen diferentes requerimientos de
tiempo de respuesta y pueden tener diferentes necesidades de scheduling. Adems los procesos
foreground pueden tener prioridad sobre los procesos background.
Un algoritmo de multilevel queue scheduling particiona la ready queue en varias queues separadas.

Los procesos son asignados a una queue, generalmente basado en alguna propiedad del proceso, tal
como el tamao de memoria, prioridad de proceso o tipo de proceso. Cada queue tiene su propio
scheduling algorithm.
Por ejemplo, foreground queue puede ser manejado por un RR algorithm y background queue por
un FCFS algorithm.

Ningun proceso en la cola de batch puede ser ejecutado a menos que las colas para procesos de
sistemas, interactive processes e interactive editing process estn todas vacias.
Si un proceso interactive editing entra a la ready queue mientras un proceso batch est corriendo, el
batch process debe ser apropiado.

Otra posibilidad es que , cada cola obtenga una porcion del tiempo de CPU. Por ejemplo, para el
ejemplo de foreground-background, la cola foreground puede obtener un 80 porciento del CPU time
para RR scheduling entre sus procesos, mientras que la cola background recibe un 20 porciento del
CPU time para darle a sus procesos en base a FCFS.

-Multilevel feedback queue scheduling


En el esquema de multilevel queue scheduling, los procesos son permanentemente asignados a la
cola cuando ellos entran al sistema.
El algoritmo de scheduling multilevel feedback queue permite que un proceso se mueva entre colas.
La idea es separar procesos de acuerdo a las caracteristicas de sus CPU burst. Si un proceso usa
demasiado tiempo de CPU, ser movido a una cola de baja prioridad. Este esquema deja a los
procesos de fuerte I/O y procesos interactivos en colas de alta prioridad. Adems, si un proceso
espera demasiado en una cola de baja prioridad puede ser movido a una cola de mayor prioridad.
En qu casos una pgina puede estar siendo usada en forma simultnea por mas de un
proceso? Vara esta respuesta si la pgina es de cdigo o de datos?

En un sistema de multiprogramacin grande, es comn que varios usuarios ejecuten el mismo


programa a la vez. Evidentemente es ms eficiente compartir las pginas para evitar tener dos
copias de la misma pgina en memoria al mismo tiempo. Un problema es que no todas las paginas
se pueden compartir. En especial, solo pueden compartirse las pginas que son de solo lectura como
el texto del programa, pero las pginas de datos no.
Si se admiten espacios de I y D separados, es relativamente simple compartir los programas al hacer
que dos o ms procesos utilicen la misma tabla de pginas para su espacio I pero distintas tablas de
pginas para sus espacios D.
Compartir datos es ms complicado que compartir cdigo, pero no imposible. En especial, en Unix
despues de una llamada al sistema fork, el padre y el hilo tienen que compartir tanto el texto del
programa como el texto de los datos. En un sistema paginado, lo que se hace a menudo es dar a
cada uno de estos procesos su propia tabla de pginas y hacer que ambos apunten al mismo
conjunto de pginas. Asi, no se realiza una copia de pginas al momento de la operacin fork. Sin
embargo, todas las pginas de datos son asociados en ambos procesos de SOLO LECTURA.
Mientras ambos procesos solo lean sus datos, sin modificarlos, esta situacin puede continuar. Tan
pronto como cualquiera de los procesos actualiza una palabra de memoria,se hace una copia de la
pgina ofensora para que cada proceso tenga ahora su propia copia privada.

Cmo se realiza un write en un Log File System? tienen alguna ventaja respecto de los
archivos tradicionales?

Las escrituras se hacen siempre en la cabeza de un log circular como transacciones.


Se crean entonces versiones de mismo archivo. Si estas son accesibles, es un Versioning File
System. Si se reconstruye el archivo, se lo llama Journaling File System.
Ext3 o Ext4 son Journaling File System.

Lo que hace el sistema de archivos es escribir primero una entrada de registro que liste las acciones
a realizar. Solo hasta que se ha escrito la entrada de registro es cuando empiezan las diversas
operaciones. Una vez que las operaciones se completan con xito, se borra la entrada de registro.
Si ahora el sistema falla, al momento de recuperarse el sistema de archivos puede verificar el
registro para ver si habia operaciones pendientes. De ser as, todas ellas se pueden volver a ejecutar
( multiples veces, en caso de fallas repetidas). Para que esto funcione, las operaciones registradas
deben ser idempotentes, lo cual significa que pueden repetirse todas las veces que sea necesario sin
peligro.

Cal es el problema de la relocacin que se debe resolver en las bibliotecas dinmicas?


Como resuelve este problema la generacin de Position Independent Code / Position
Independent Executable ( PIC/PIE )?

Se debe solucionar el problema de la relocacin.


No se puede depender de posiciones absolutas de memoria ni en el programa ni en las bibliotecas.
Si se usa posiciones absolutas, se depender de donde se cargue en memoria despues.
Se deben calcular las direcciones cada vez que se carga el programa o la biblioteca.

Position Independent Code es cdigo que puede ejecutarse correctamente en forma independiente
de su posicin en la memoria.
Como la biblioteca es compartida, cada proceso acceder a ella a travs de una direccion virtual
distinta, pero ambas se traducirn a la misma direccin fisica. Por lo tanto, posiciones absolutas no
funcionaran.
Es por ello que es necesario compilar las bibliotecas con una bandera de compilador especial, para
indicar que no se debe producir instrucciones que utilicen direcciones absolutas. En vez de ello,
solo se utilizan instrucciones con direcciones relativas. Por ejemplo, instrucciones para saltar hacia
adelante por n bytes. De esta forma, la biblioteca funciona correctamente, sin importar en donde se
coloque la biblioteca compartida en el espacio de direcciones virtuales.

Qu son y como se usan los archivos mapeados a memoria? Cual es su relacin con la
memoria virtual? Tienen alguna ventaja respecto de los archivos tradicionales?

Se ven como parte de la memoria


Se manejan junto con la memoria virtual
Permite compartir archivos.

Las bibliotecas compartidas son un caso de una herramienta ms general, conocida como archivos
asociados a memoria. La idea es que un proceso puede emitir una llamada al sistema para asociar un
archivo a una porcin de su espacio de direcciones virtuales. Cuando el proceso termina o desasocia
en forma explicita el archivo, todas las pginas modificadas se escriben de vuelta en el archivo.
Los archivos asociados proporcionan un modelo alternativo para la E/S. En vez de realizar lecturas
y escrituras, el archivo se puede accesar como un gran arreglo de caracteres en la memoria.
Si dos o ms procesos se asocian al mismo archivo y al mismo tiempo, se pueden comunicar a
travs de la memoria compartida. Las escrituras realizadas por un proceso en la memoria
compartida son inmediatamente visibles cuando el otro lee de la parte de su espacio de direcciones
virtuales asociado al archivo. Por lo tanto, este mecanismo proporciona un canal con un gran ancho
de banda entre los procesos, y a menudo se utiliza como tal. Ahora debe estar claro que si hay
disponibles archivos asociados a memoria, las bibliotecas compartidas pueden usar este mecanismo.

Explique en un diagrama con valores ejemplo el proceso de traduccin y carga de pginas


usando pginas invertida para una direccin.

En este diseo hay una entrada por cada marco de pgina en la memoria real, en vez de tener una
entrada por pgina de espacio de direcciones virtuales. La entrada lleva el registro de quien
(proceso, pagina virtual) se encuentra en el marco de pgina.
Aunque las tablas de pgina invertidas ahorran grandes cantidades de espacio, al menos cuando el
espacio de direcciones virtuales es mucho mayor que la memoria fsica, tienen una seria desventaja:
la traduccin de direccin virtual a direccin fisica se hace mucho ms dificil. Cuando el proceso n
hace referencia a la pgina virtual p, el hardware ya no puede buscar la pgina fisica usando p como
indice en la tabla de pginas.
En vez de ello, debe buscar una entrada (n, p) en toda la tabla de pginas invertida. Lo que es peor:
esta bsqueda se debe realizar en cada referencia a memoria.
Una manera factible de realizar esta bsqueda es tener una tabla de hash arreglada segn el hash de
la direccin virtual. Todas las paginas virtuales que se encuentren en memoria y tengan el mismo
valor de hash se encadenan en conjunto. Si la tabla de hash tiene tantas ranuras como las paginas
fisicas de la mquina, la cadena promedio tendr solo una entrada, con lo cual se acelera de manera
considerable la asociacin. Una vez que se ha encontrado el nmero de marco de pgina, se
introduce el nuevo par (virtual , fisica) en el TLB.
Diagrama en la hoja.
Explique en un diagrama con valores ejemplo el proceso de traduccin y carga de pginas
usando paginas invertida para una direccin.
1. Cuyo mapeo se encuentra en la TLB
2. El mapeo no se encuentra en la TLB pero la pgina est en memoria
3. La pgina no se encuentra en memoria.

1) Si el mapeo se encuentra en la TLB, no hay nada que realizar. Se indexa a travs del nmero de
pagina virtual, y obtenemos el nmero de pagina fisica.
2) Si no est en la TLB, tendremos que ir a la tabla de pginas a realizar la busqueda.
Como es una tabla de pagna invertida, para que la busqueda sea rapida, se indexa la tabla por un
hash del nmero de pgina virtual.
Luego de esto, tenemos que obtener el marco de pgina, verificando que la entrada corresponda al
nmero de pagina virtual y proceso correspondiente.
3) Cuando una pgina no se encuentra en memoria, no estar en la tabla de pgina. Al momento de
indexar el nmero de pgina virtual para buscar en la tabla invertida, no habr ninguna entrada con
ese nmero de pagina virtual. Esto quiere decir, que no se encuentra en memoria. Si la pagina no se
encuentra en memoria, tendremos que ir a buscar al disco para cargarla en memoria.

Describa la diferencia entre Storage Area Network (SAN) y Network Area Storage (NAS). D
ejemplo de los protocolos utilizados en cada caso.

Network Attached Storage (NAS) conecta un file-system remoto a una red, proveyendo el acceso a
clientes heterogeneos.
Storage Area Network (SAN) conecta dispositivos remotos que el SO ve como locales ( e
implementa el file system).
NAS
Provee servicios basados en archivos
Generalmente es una version reducida empotrada de algun sistema operativo.
Protocolos: SMB/CIFS, NFS, AFP
SAN
Consolida las islas de discos con conexiones de red.
- Pueden ser discos o RAIDs o alguna arquitectura no RAID.
- Usan protocolos como iSCSI, HyperSCSI, ATA_over_Ethernet, InfiniBand.
- Requieren de un software de administracin
- Algunas proveen capacidades RAID.

NAS (Network-attached storage) proporciona tanto almacenamiento y un file system.


SAN (Storage Area Network) proporciona solo almacenamiento basado en bloques y deja los
asuntos del file system del lado del cliente. SAN protocols incluye Fibre Channel, iSCSI, ATA over
Ethernet, HyperSCSI.

NAS aparece al sistema operativo cliente como un file server.


UN disco disponible a travs de SAN siguen apareciendo al client como un disco, visible junto con
los discos locales del cliente y disponible para ser formateado con un file system y para ser
montado.

Describa en un grfico un ejemplo completo de un sistema que use NAS, y uno que use SAN.
1- En cada caso indique que protocolo est usando
2- Indique como implementar RAID en cada uno de los casos Quien se encargara de correr
el software de raid?
Quien implementa el software de RAID y quien implementa el file system( el controlador o el
sistema operativo) en?
1. Un sistema con SAN
2. Un sistema con NAS
En cada caso hago un diagrama indicando que protocolo puede usarse en cada comunicacin.

1. En un sistema con SAN, el file system es implementado por el cliente.


El software RAID puede ser implementado por el controlador SAN.

2. En un sistema con NAS, el file system es implementado por el sistema NAS.


El software RAID puede ser implentado por el controlador NAS.

Qu es RAID, stripping y mirroring? Describa las diferencias entre RAID propiamente


dicho y software raid o fake raid.

Principios del RAID:


- Combinar varios discos fisicos en una unica unidad lgica. Ya sea por software o por hardware.
Provee varios esquemas de:
- Mirror o redundancia de datos
- Stripping o distribucin de bloques de datos
- Correccin de errores

Hardware RAID: El sistema basado en el hardware gestiona el subsistema independientemente de la


maquina y presenta a la mquina un unico disco por conjunto de discos RAID.
-Requiere de un controlador dedicado. Debe tener un Back End hacia los discos ATA, SATA, SCSI,
Fibre Channel o SAS. Un front end hacia el host.

Software RAID: El software RAID implementa los diversos niveles de RAID en el cdigo del
kernel. Es una solucin ms barata ya que las tarjetas controladoras de discos no son baratas.
- El procesador debe usar su tiempo para las operaciones de RAID
- Es una capa entre el file system y el device driver.

Fake RAID:
Es un controlador de firmware que toma las funciones de raid durante el boot.
Una vez que el kernel de un SO est cargado, el control pasa al SO.
Se debe a que Windows no puede bootear de software RAID.
Es un software RAID y carga al procesador con un controlador de mltiples canales ATA.

RAID Structure

Los discos duros cada vez son ms pequeos y baratos, por lo que es ms econmico juntar muchos
discos a una computadora.
Tener un gran numero de discos en un sistema presenta oportunidades para mejorar el ratio en el
cual los datos pueden ser ledos o escritos, si los discos operan en paralelo.
Tambin, esta configuracin ofrece el potencial para mejorar la confiabilidad de los datos, ya que
informacin redundante puede ser almacenada en mltiples discos. As, la falla de un disco no nos
lleva a la perdida de los datos.
La variedad de tcnicas de organizacin de discos, colectivamente llamadas redundant arrays of
independent disks (RAID) son comunmente usados para manejar los asuntos de confiabilidad y
performance.
Un sistema puede tener discos directamente ligados a sus buses. En este caso, el sistema operativo
puede implementar la funcionalidad RAID.
Alternativamente, un controlador inteligente puede controlar multiples discos ligados y puede
implementar RAID sobre estos discos en hardware. Un RAID array es una unidad con su propia
controlador y discos. Es ligada al host por medio de uno o ms controladores. Esta configuracin
permite a un sistema operativo sin la funcionalidad RAID que tenga los discos protegidos con
RAID. Es incluso usado en sistemas que tienen RAID software layers debido a su simplicidad y
flexibilidad.
Hardware RAID: El sistema basado en el hardware gestiona el subsistema independientemente de la
maquina y presenta a la mquina un unico disco por conjunto de discos RAID.
Software RAID: El software RAID implementa los diversos niveles de RAID en el cdigo del
kernel. Es una solucin ms barata ya que las tarjetas controladoras de discos no son baratas.

Mejora de confiabilidad por medio de redundancia

La solucin al problema de confiabilidad es introducir redundancia . Almacenamos informacin


extra que puede ser usado cuando un disco falla para reconstruir la informacin perdida. As, si un
disco falla, los datos no son perdidos.

El enfoque ms simple, pero ms caro, para introducir redundancia es duplicar cada disco. Est
tecnica es llamada mirroring. Con mirroring, un disco logico consiste de dos discos fisicos, y cada
escritura es llevada a los dos discos. El resultado es llamado a mirrored volume. Si uno de los
discos en el volumen falla, los datos pueden ser leidos desde el otro. Los datos sern perdidos solo
si el segundo disco falla antes de que el primer disco haya sido reemplazado.

Mejora en performance por medio de paralelismo


Con multiples discos, podemos mejorar el ratio de transferencia haciendo striping data a travs de
los discos.
En su forma ms simple, data striping consiste de dividir los bits de cada byte entre los multiples
discos, tal striping es llamado bit-level striping. Por ejemplo, si tenemos un array de 8 discos,
escribimos el bit i de cada byte al disco i. El array de 8 discos puede ser tratado como un unico
disco con sectores que son 8 veces ms grande que el tamao normal y que tiene 8 veces el ratio de
acceso. Cada disco participa en cada acceso ( lectura o escritura).
Otro ejemplo es block-level striping, que consiste en que los bloques de un archivo son striped
entre multiples discos. Con n discos, bloque i del archivo va al disco (i mod n) +1.
El objetivo es:
1 ) Incrementar el rendimiento de multiples pequeos accesos(esto es, accesos de paginas), por
medio de balanceo de carga.
2) Reducir el tiempo de respuesta de largos accesos.

Niveles de RAID

Mirroring proporciona confiabilidad, pero es caro.


Striping proporciona altos ratios de tranferencia de datos, pero no mejora la confiabilidad.

En la figura, P indica error-correcting bits y C indica una segunda copia de los datos.

- RAID level 0: Se refiere a arreglo de discos con stripping a nivel de bloques pero sin ninguna
redundancia (mirroring o parity bits).
- RAID level 1: Se refiere a disk mirroring.

- RAID level 2: Se detecta errores usando paridad de bits. Cada byte en un sistema de memoria
puede tener un bit de paridad asociado que marca si el nmero de bits en el byte es par o impar. Si
uno de los bits en el byte est daado ( ya sea un 1 se transformo en 0, o un 0 se transformo en un
1), la paridad del byte cambia y por lo tanto no coincide con la paridad almacenada. Tambien puede
pasar que el bit de paridad se dae.
RAID 2 stripea datos al nivel de bit y usa codigos Hamming para correccin de error.
- RAID level 3:
Consiste de byte-level striping con un disco de paridad.

- RAID level 4:
Consiste de block-level striping con un disco de paridad.

- RAID level 5:
Consiste de block-level
stripping con paridad distribuida.
- RAID level 6:
Extiende RAID 5 agregando otro bloque de paridad; por lo tanto, usa block-level stripping con dos
bloques de paridad distribuidos.

- RAID Anidados
Cuales son las ventajas y los inconvenientes de la multiprogramacin? Como se
implementa basandose en interrupciones?
Todo el software ejecutable en la computadora se organiza en varios procesos secuenciales. Un
proceso no es ms que una instancia de un programa en ejecucin, incluyendo los valores actuales
del contador de programa, registros y variables.
En concepto, cada proceso tiene su propia CPU virtual; en la realidad, la CPU real conmuta de un
proceso a otro, pero para entender el sistema es mucho ms facil pensar en una coleccin de
procesos que se ejecutan en pseudo paralelo, en vez de tratar de llevar la cuenta de como la CPU
conmuta de programa en programa. Esta conmutacin rpida de un proceso a otro se conoce como
multiprogramacin.
Dado que la CPU conmuta rpidamente entre un proceso y otro, la velocidad a la que un proceso
ejecuta sus calculos no es uniforme y tal vez ni siquiera sea reproducible si se ejecutan los mismos
procesos de nuevo.
La idea clave es que un proceso es una actividad de cierto tipo: tiene un programa, una entrada, una
salida y un estado. Varios procesos pueden compartir un solo procesador mediante el uso de un
algoritmo de planificacin para determinar cuando se debe detener el trabajo en un proceso para dar
servicio a otro.

La diferencia de velocidades CPU-I/O es del orden de 10 o 10. Esto significa mucho tiempo
ocioso mientras se completa una operacin de I/O. Para aprovecharlo aparece la multiprogramacin.
Cuando hay mas de un procesador se conoce como multiprocesamiento.

Los tres estados en los que se puede encontrar un proceso:


1- En ejecucin, usando la CPU.
2- Listo ( ejecutable; se detuvo temporalmente para dejar que se ejecute otro proceso ).
3- Bloqueado ( no puede ejecutarse sino hasta que ocurra cierto evento externo).

Hay cuatro transiciones posibles entre estos tres estados.


La transicin 1 ocurre cuando el sistema operativo descubre que un proceso no puede continuar
justo en ese momento.
Las transiciones 2 y 3 son producidas por el planificador de procesos, sin que el proceso sepa
siquiera acerca de ello. La transicin 2 ocurre cuando el planificador decide que el proceso en
ejecucin se ha ejecutado el tiempo suficiente y es momento de dejar que otro proceso tenga una
parte del tiempo de la CPU. La transicin 3 ocurre cuando todos los dems procesos han tenido su
parte del tiempo de la CPU y es momento de que el primer proceso obtenga la CPU para ejecutarse
de nuevo.
La transicin 4 ocurre cuando se produce el evento externo por el que un proceso estaba esperando (
como la llegada de ciertos datos de entrada). Si no hay otro proceso en ejecucin en ese instante, se
activa la transicin 3 y el proceso empieza a ejecutarse. En caso contrario, tal vez tenga que esperar
en el estado listo por unos instantes, hasta que la CPU est disponible y sea su turno de utilizarla.
En cuanto a los incovenientes podra mencionarse un tiempo de espera de un proceso para
ejecutarse debido a una mala administracin del planificador. Por ejemplo, un proceso que es CPU
dependiente podra tardar demasiado si el planificador le da poca prioridad y planifica otros
procesos.

Con base en un ejemplo sencillo de cdigo, indique las diferencias entre un thread y un
proceso en cuanto al tratamiento de los espacios de direcciones.

Cada proceso se ejecuta en un espacio de direcciones distinto.


Los threads son hilos de ejecucin que comparten los recursos del proceso, entre ellos el espacio de
direcciones.
variable_compartida vale 10.
En Android: Como se separan los recursos de cada aplicacin, como se evita que un error en
una de ellas afecte al resto?

Las aplicaciones en Android tienen cuatro componentes:


- Activities
- Services
- Content providers
- Broadcast Receivers

Las aplicaciones de Android vienen empaquetadas en un .apk.


Una vez instalada tiene su sandbox, cada apk es un usuario de linux con permisos y directorio
propios.
Una aplicacin tiene cuatro componentes: Activities, Services, Content providers y Broadcast
Receivers.
Se activan con un mensaje llamado Intent.

Activities: Es una aplicacin que se comunica por medio de una pantalla con el usuario
Services: Maneja background processing asociado con una aplicacin
Broadcast Receivers: Manejan comunicacin entre las aplicaciones y Android OS.
Content Providers: Manejan asuntos de gestin de datos y base de datos.

Cada aplicacin corre en su propio proceso con su propia copia de Dalvik/ART. Los procesos son
provistos por el kernel y manejados por el Android Run Time.
Para mantener la respuesta del sistema, Android puede matar sin aviso procesos ( y las aplicaciones
contenidas).

Capas de la arquitectura Android


1. Applications
2. Frameworks
3. Libraries, Android Run Time
4. Linux Kernel

Activities
Ciclos de vida de una activitie
Active: est al tope del stack e interactuando con el usuario.
Paused: Visible pero sin foco.
Stopped: Queda en memoria pero ya termin. Candidata al kill.
Inactive: Fuera de la memoria. Debe lanzarse nuevamente.

Como se separan los recursos de cada aplicacin, como se evita que un error en una de ellas
afecte al resto?
a) en IOS
b) en Android. OK arriba.

a)
Presenta 4 capas de abstraccin:
1. Cocoa Touch
2. Media
3. Core Services
4. Core OS

1. Cocoa Touch: Es el framework para el desarrollo de aplicaciones.


- Auto-Layout y StoryBoards
-Multitasking y printing
- Data protection ( encriptado )
- Push y Local notifications
etc

2. Media layer: Manejo de Audio, video y grficos.

3. Core Services Layer:


- Servicios fundamentales usados por las aplicaciones.
Ejemplo: iCloud, Bloqueo de objetos, SQLite, XML, etc.
- Core frameworks
Ejemplo: Foundation, AdressBook, Location, Eventos, Store, etc.

4. Core OS Layer: Frameworks de bajo nivel


- Accelerate (math, DSP, vector)
- External accesories
- Security
- System

Los procesos corren bajo dos UIDs, root(0), algunos del sistema y mobile(501).
No se pueden manejar en forma directa.
Al pasar a background provocan un evento y quedan suspendido
Pueden cerrarse usando la taskbar.
En IOS: Como se usa el almacenamiento en la nube (iCloud)? Qu debe hacer una
aplicacin para guardar sus datos en la nube?

iCloud sincroniza los datos del usuario en todos los dispositivos asociados a la cuenta de iCloud.
- Usa Ubiquity Containers
- Key-Value files
- Document files
- Core-Data files

Hay tres servicios de almacenamiento de iCloud: key-value storage, document storage y CloudKit.
CloudKit permite almacenar datos de usuario y de la aplicacin como registros en una base de datos
publica, esto es compartida entre los usuarios de la aplicacin, o una base de datos privada accedida
solo por un usuario. Para native apps, se usa CloudKit framework, y para web apps se usa CloudKit
JS library y web services para acceder a las base de datos.

En pseudocdigo muy simple indique como hace para llamar a una funcin de biblioteca
func1() de la que no conoce el nombre de la biblioteca en que se encuentra hasta el momento
de ejecucin
Qu diferencia hay entre la system call fork() y las exec()?
1) Responda en base a un ejemplo de cdigo
2) Indique en su respuesta el contenido antes y despues de la ejecucin de las areas PCB, TXT
y U_AREA

Fork crea un duplicado exacto del proceso original, incluyendo todos los descriptores de archivos,
registros y todo lo dems.
Despues de fork, el proceso original y la copia se van por caminos separados. Todas las variables
tienen valores idnticos al momento de la llamada a fork, pero como los datos del padre se copian
para crear al hijo, los posteriores cambios en uno de ellos no afectarn al otro (el texto del
programa, que no se puede modificar, se comparte entre el padre y el hijo). La llamada fork
devuelve un valor, que es cero en el hijo e igual al identificador del proceso (PID) hijo en el padre.
Mediante el uso del PID devuelto, los dos procesos pueden ver cual es el proceso padre y cual es el
proceso hijo.

Despues de una llamada fork, el hijo tendr que ejecutar cdigo distinto al del padre. Considere el
caso del shell: lee un comando de la terminal, llama a fork para crear un proceso hijo, espera a que
el hijo ejecute el comando y despues lee el siguiente comando cuando el hijo termina. Para esperar a
que el hijo termine, el padre ejecuta una llamada al sistema waitpid, la cual solo espera hasta que el
hijo termine.
El proceso hijo debe ejecutar el comando de usuario. Para ello utiliza la llamada al sistema execve,
la cual hace que toda su imagen de ncleo completa se sustituya por el archivo nombrado en su
primer parametro.

Describa el funcionamiento de la system call exec() explicando su efecto sobre las estructuras
de datos del proceso que la emite ( Process Control block, U-File Table, U Area, BSS (area
static) , txt, stack)

La llamada al sistema exec hace que toda la imagen de nucleo completa se sustituya por el archivo
nombrado en su primer parametro.
Exec tiene tres parametros: el nombre del archivo que se va a ejecutar, un apuntador al arreglo de
argumentos y un apuntador al arreglo del entorno.
Qu es y que cosas debe contener un Object File tanto para un ejecutable como para una
biblioteca ( por ejemplo los object file formats pe, elf, coff)?

Un object file es un archivo que contiene codigo objeto e informacin relacionada.


Ademas del codigo objeto, object files pueden contener metadata usada para linking o debugging,
incluyendo: informacin para resolver referencias, informacin de relocacin, comments, program
symbols, debugging o profiling information.

- Que dos sistemas operativos tengan el mismo object file format no significa que los programas de
uno puedan correr en el otro.
- Es clave para la performance del sistema

La mayora de los formatos de los archivos objeto estn estructurados como secciones separadas de
datos, cada seccin conteniendo cierto tipo de datos.
Tipos de datos soportados por la mayoria de los tipicos object file formats:
- Header (informacin de control y descriptiva)
- Code segment (text segment, executable code)
- Data segment ( initialized static variables )
- Read-only data segment( initialized static constants)
- BSS segment (uninitialized static data, tanto variables y contantes)
- External definitions y referencias para linking
- Relocation information
- Dynamic linking information
- Debugging information

Virtual file system

La mayoria de los sistemas UNIX han utilizado el concepto de Virtual File System para tratar de
integrar multiples sistemas de archivos en una estructura ordenada. La idea clave es abstraer la parte
del sistema de archivos que es comn para todos los sistemas de archivos y poner ese cdigo en una
capa separada que llame a los sistemas de archivos concretos subyacentes para administrar los
datos.
Todas las llamadas al sistema relacionadas con archivos se dirigen al sistema de archivos virtual
para su procesamiento inicial. Estas llamadas que provienen de procesos de usuario, son las
llamadas de POSIX estndar tales como open, read, write, seek, etc. Por ende, el VFS tiene una
interfaz superior para los procesos de usuario y es la muy conocida interfaz de POSIX.
El VFS tiene una interfaz inferior para los sistemas de archivos concretos, etiquetada como Interfaz
de VFS. Esta interfaz consiste de varias docenas de llamadas a funciones que el VFS puede hacer a
cada sistema de archivos para realizar el trabajo. Asi, para crear un nuevo sistema de archivos que
trabaje con el VFS, los diseadores del nuevo sistema de archivos se deben asegurar que suministre
las llamadas a funciones que requiere el VFS.
En consecuencia, el VFS tiene dos interfaces distintas: la superior para los procesos de usuario y la
inferior para los sistemas de archivos concretos.
Qu es la link-edicin? En un ejemplo explique sus funciones principales.

Un link editor es un programa que toma uno o ms object files generados por un compilador y los
combina en un unico archivo ejecutable, archivo de biblioteca o otro object file.

El link-editor se encarga de mezclar las direcciones de cada mdulo en un nico espacio de


direcciones.
- Resuelve smbolos
-Relocaliza cdigo que asume una direccin base especifica.
Discuta en que casos usara linkeo
a) Estatico
b) Dinamico en tiempo de carga
c) dinamico en tiempo de ejecucn ( donde la biblioteca se elige externamente)

a) Estatico
El link-editor incorpora la biblioteca al archivo ejecutable.
Esto facilita la instalacin de los programas en otras mquinas.
El problema es que el tamao del ejecutable termina siendo mucho ms grande.
Adems, si se corrige algn error de la biblioteca, se tendr que generar de vuelta el ejecutable.

b) Dinamico
El link-editor solo indica las llamadas. Estas se resuelven:
- Durante la carga o
- Durante la ejecucin.

Un uso comun de estas bibliotecas son los plugins.

La ventaja es que se reduce el tamao de los archivos ejecutables y se ahorra espacio en memoria.
Tambien si una funcin de la biblioteca se actualiza para eliminar un error, no es necesario
recompilar los programas que la llaman, ya que los antiguos binarios siguen funcionando.

b) Dinamico en tiempo de carga


El programador no tiene control si no se encuentra la biblioteca.

c) Dinamico en tiempo de ejecucin( donde la biblioteca se elige externamente)


El programador puede intervenir si hay error.

Cmo pueden usarse las estructuras de pginado (MMU, Page Tables, etc) para resolver los
problemas de reubicacin de cdigo y cargar/compartir bibliotecas tradicionalmente resueltos
por la link edicin?

Si compilamos la biblioteca compartida con una bandera de compilador especial para indicarle que
no debe producir instrucciones que utilicen direcciones absolutas, si no que se utilicen instrucciones
con direcciones relativas, se puede hacer que la biblioteca est ubicada donde se desee en el espacio
de direcciones virtual de cada proceso. De esta manera, los procesos pueden compartir la biblioteca,
cargando la biblioteca solo una vez en RAM.

S-ar putea să vă placă și