Está en la página 1de 19

Resolución de todo lo que se puede

Práctica 1
1 - Qué es la Shell? Para qué sirve?

Una shell es un intérprete de comandos. Provee una interface para interactuar con el
sistema.

2 - En qué espacio (de usuario o kernel) se ejecuta?

Se ejecuta en espacio de usuario.

4 - Investigue la system call fork:


(a) ¿Qué es lo que realiza?
La llamada fork crea una copia casi idéntica del proceso padre (se copia todo
el código) y continúan ejecutándose en paralelo.

(b) ¿Qué retorna?


0 al hijo, -1 si es error y PID del hijo al padre

(c) ¿Para qué podrían servir los valores que retorna?

Si el proceso es exitoso, retorna la PID del hijo al padre y 0 la hijo. Si falla se


retorna -1 al padre y ningún proceso hijo es creado, también se setea la
variable errno apropiadamente.

(d) ¿Por qué invocaria a la misma al implementar una shell?


Revisar.

5 - Investigue la system call exec:


(a) ¿Para qué sirve?
Reemplaza el archivo o prog. anterior del proceso con un nuevo archivo o
programa

(b) ¿Cómo se comporta?


Todo el contenido del proceso se sustituye por un nuevo programa. El nuevo
programa, se carga en el mismo espacio de proceso. El proceso actual simplemente se
convierte en un nuevo proceso y por lo tanto el id del proceso no se cambia, esto se debe a
que no estamos creando un nuevo proceso, simplemente estamos reemplazando un
proceso con otro proceso.
6. Investigue la system call wait:
(a) ¿Para qué sirve?

Una llamada a wait() bloquea el proceso de llamada hasta que uno de sus procesos
secundarios termina o se recibe una señal. Después de que finaliza el proceso hijo, el padre
continúa su ejecución después de esperar la instrucción de llamada al sistema.
El proceso hijo puede terminar debido a cualquiera de estos:

● Llama a exit ();


● Vuelve (un int) de main
● Recibe una señal (del sistema operativo u otro proceso) cuya acción
predeterminada es terminar.

(b) Sin ella, ¿qué sucedería, pensando en la implementación de la shell?

No tengo idea.

Práctica 2

1. ¿Qué es el kernel de GNU/Linux? ¿Cuáles son sus funciones principales dentro


del Sistema Operativo?

El kernel Linux es un programa que ejecuta programas y gestiona dispositivos de


hardware. Es el encargado de que el software y el hardware puedan trabajar juntos.

Sus principales funciones son:

● Administración de memoria principal


● Administración del uso de la CPU
2. Explique brevemente la arquitectura del kernel de GNU/Linux teniendo en
cuenta: tipo de kernel, módulos, portabilidad, etc.

Tipos de kernel:

Kernel Monolítico: Es un kernel en el cual no hay protección de acceso entre


los varios subsistemas del kernel, y las funciones públicas pueden ser llamadas
directamente por varios subsistemas. Al tener memoria compartida requiere
sincronización. Todos sus componentes se encuentran linkeados a un único binario
en memoria, es un kernel grande y complejo.

Microkernel: Es aquel en el que las partes del kernel están protegidas de ellas
mismas, usualmente corriendo como servicios en espacio usuario. Basicamente es
tan pequeño que solo contiene mecanismos de IPC(comunicación entre procesos) y
la implementación del scheduler. Su código permite solamente el pasaje de
mensajes entre los diferentes procesos que está corriendo, todo lo demas esta en
espacio usuario.

3. ¿Cómo se define el versionado de los kernels de GNU/Linux?

X.Y.Z

X: Indica serie principal. Cambia cuando su funcionalidad sufre un cambio muy


importante.

Y: Indica si es una versión en Producción o Desarrollo.

Z: Nuevas versiones dentro de la actual. Bugfixes.

• Existían dos versiones del kernel:

• Números Y pares indicaban versiones en Producción (estable).

• Números Y impares indicaban versiones en Desarrollo.

4. ¿Cuáles son las razones por las cuáles los usuarios de GNU/Linux recompilan
sus kernels?

Las razones por las que los usuarios recompilan sus kernels son:

- Dar soporte a nuevos dispositivos

- Agregar mayor funcionalidad (soporte para algún hardware específico)

- Optimizar el funcionamiento de acuerdo al sistema en el que corre

- Adaptarlo al sistema donde corre (quitar soporte de hardware no utilizado)

- Corrección de bugs

5. ¿Cuáles son las distintas opciones para realizar la configuración de opciones


de compilación de un kernel? Cite diferencias, necesidades (paquetes
adicionales de software que se pueden requerir), pro y contras de cada una de
ellas.

El kernel de linux se configura mediante el archivo .config, este reside en la raíz del
directorio del kernel y contiene las instrucciones de que es lo que el kernel debe
compilar.

Existen tres interfaces que permiten generar este archivo:

make config: texto y secuencial. Es tedioso

make xconfig: interfaz gráfica utilizando un sistema de ventanas. No todos los


sistemas tienen instalado X.

make menuconfig: permite generar una interfaz con paneles.

9 - Indique que tarea realiza cada uno de los siguientes comandos durante la tarea de
configuración/compilación del kernel:

(a) make menuconfig

Nos provee una interfaz que nos permitirá navegar las categorías de drivers y
módulos para seleccionar los que queramos.

(b) make clean

Limpia los archivos generados por el comando “make”.

(c) make (investigue la funcionalidad del parámetro -j)

Make compila el kernel según las opciones del .config.

El -j define la cantidad de núcleos en paralelo que ejecutarán el make.

(d) make modules (utilizado en antiguos kernels, actualmente no es necesario)

Compila archivos individuales por cada opción marcada con “M” durante la
configuración del kernel.

(e) make modules_install

(f) make install

6. Una vez que el kernel fue compilado, ¿dónde queda ubicada su imagen?
¿dónde debería ser reubicada? ¿Existe algún comando que realice esta copia
en forma automática?

Cuando termina el proceso de compilación, la imagen del kernel quedará ubicada en


directorio-del-código-/arch/arquitectura/boot.

Por convención es recomendable almacenar en el directorio /boot la imagen


compilada del kernel junto con su .config
El próximo paso es instalar el kernel y otros archivos en el directorio /boot, existe una
regla en el Makefile que realiza esto en forma automática.

$ sudo make install

10. ¿A qué hace referencia el archivo initramfs? ¿Cuál es su funcionalidad?


¿Bajo qué condiciones puede no ser necesario?

Es un sistema de archivo temporal, se monta durante el arranque del sistema, y


contiene ejecutables, drivers y módulos necesarios para iniciar el sistema. Luego del
arranque del disco es desmontado.

12. ¿Cuál es la razón por la que una vez compilado el nuevo kernel, es
necesario reconfigurar el gestor de arranque que tengamos instalado?

Luego de instalar el kernel, se debe reconfigurar el gestor de arranque ya que este lo


debe reconocer (al kernel nuevo). Suponiendo que tenemos instalado grub, se debe
hacer mediante un comando update-grub2.

13. ¿Qué es un módulo del kernel? ¿Cuáles son los comandos principales para
el manejo de módulos del kernel?

Un módulo es una porcion de codigo (compilado) que brinda una funcionalidad


especifica al kernel y se carga y descarga bajo demanda.

lsmod: Lista los módulos

rmmod: descarga uno o más módulos

insmod: Trata de cargar el módulos especificado

modinfo: información del módulo

depmod: Calcula dependencias de un módulo

modprobe: emplea la información generada por depmod

14.¿Qué es un parche del kernel? ¿Cuáles son las razones principales por las
cuáles se deberían aplicar parches en el kernel? ¿A través de qué comando se
realiza la aplicación de parches en el kernel?

Un parche es una actualización no incremental sobre la versión base. Esto quiere


decir que, considerando el sistema de versionado de 3 dígitos x.y.z, si tenemos la
versión 4.7.2 (es porque a la versión base 4.7.0 se le instalo el parche 4.7.2)
debemos desinstalar el parche 4.7.2 para quedar en la versión base 4.7.0 y recien
ahi instalar el parche 4.7.3 a la versión base.

Están basados en archivos diff (archivos de diferencia) que indican que se debe
agregar o quitar. Permiten agregar funcionalidad. La idea es simplificar lo que es
descargar todo el código de una nueva versión, descargando solamente el archivo
de diferencia.

ejemplo:
$ cd ~/linux-4.7.2 # change to the kernel source dir

$ patch -p1 -R < ../patch-4.7.2 # revert the 4.7.2 patch

$ patch -p1 < ../patch-4.7.3 # apply the new 4.7.3 patch

$ cd ..

$ mv linux-4.7.2 linux-4.7.3 # rename the kernel source dir

Práctica 3
1. ¿Qué es una System Call?, ¿para que se utiliza?
Es el mecanismo por el cual una aplicación accede a los recursos del sistema, solicitando un
servicio al sistema operativo. Este servicio es generalmente algo que solo el kernel tiene el
privilegio de hacer.

2. ¿Para qué sirve la macro syscall?. Describa el propósito de cada uno de sus
parámetros.
Ayuda: http://www.gnu.org/software/libc/manual/html_mono/libc.html#System-Calls

A veces uno quiere hacer una system call de manera explícita y para eso la librería C para
GNU provee la función syscall. Esta rinde más cuando estás trabajando con una system call
que es especial a tu sistema o que es más nueva que la librería de C para el GNU que estés
usando.

long int syscall (long int sysno, …)

sysno es el número de la system call. Cada system call es identificada por un número.
Todos los macros definidos para esos número están en sys/syscall.h

El resto de los parámetros son para la system call. Y el significado depende de la clase de
system call que estemos por invocar. Cada system call tiene definidos distintas cantidades
de parámetros, desde 0 a 5.

3. ¿Para qué sirven los siguientes archivos?


<kernel_code>/arch/x86/syscalls/syscall_32.tbl
<kernel_code>/arch/x86/syscalls/syscall_64.tbl

Están listadas todas las porongas esas y como se acceden.


https://github.com/torvalds/linux/blob/master/arch/x86/entry/syscalls/syscall_64.tbl

4. ¿Para qué sirve la macro asmlinkage?

Se usa para decirle al compilador que cuando se llama a esta funcion debe buscar los
parametros en la pila y no en los registros.
Se usa al declarar una system call para informarle al compilador que al invocarse la misma,
no debe buscar los parámetros en los registros (como se hace normalmente) sino que debe
buscarlos en la pila.

5. ¿Para qué sirve la herramienta strace?, ¿Cómo se usa?

Permite monitorear las system calls usadas por un determinado programa y todas las
señales que éste recibe

Conceptos Generales
1.
a. ¿Cómo se denomina en Gnu/Linux a la porción de código que se agrega al
kernel en tiempo de ejecución?
Se denomina Módulo :D

b. ¿Es necesario reiniciar el sistema al cargarlo?


No.

c. Si no se pudiera utilizar esto. ¿Cómo deberíamos hacer para proveer la


misma funcionalidad en Gnu/Linux?
Cargando como un parche pero necesitará reiniciar el sistema luego de
aplicarlo.

2. ¿Qué es un driver? ¿para que se utiliza?

Código que permite ejecutar operaciones sobre un dispositivo del hardware.

3. ¿Porque es necesario escribir drivers?


Para que los periféricos sean utilizables?

4. ¿Cuál es la relación entre módulo y driver en Gnu/Linux?


Un driver es un módulo cuya tarea específica es brindar comunicación al kernel con
algún dispositivo de hardware y se encarga de la gestión del mismo.

5. ¿Qué implicancias puede tener un bug en un driver o módulo?


Un bug puede generar un mal funcionamiento del sistema y/o hardware destinado de
ese driver.

6.¿Qué tipos de drivers existen en Gnu/Linux?


Los drivers se clasifican en:
Drivers de bloques: son un grupo de bloques de datos
persistentes. Leemos y escribimos de a bloques, generalmente
de 1024 bytes.
Drivers de carácter: Se accede de a 1 byte a la vez y 1 byte
solo puede ser leído por única vez.
Drivers de red: tarjetas ethernet, WIFI, etc.
7. ¿Que hay en el directorio /dev? ¿qué tipos de archivo encontramos en esa
ubicación?

En /dev estan los archivos que representan a los dispositivos del sistema.
Encontramos links, directorios y archivos de tipo dispositivo.

8. ¿Para qué sirven el archivos /lib/modules/<version>/modules.dep utilizado por el


comando modprobe
El archivo modules.dep lista las dependencias que lee el comando modprobe.

Responda lo siguiente:
1. ¿Para qué sirve la estructura ssize_t y memory_fops? ¿Y las funciones
register_chrdev y unregister_chrdev?
ssize_t: Es una estructura de C para leer y escribir drivers.
memory_fops:
register_chrdev:
unregister_chrdev:

2. ¿Cómo sabe el kernel que funciones del driver invocar para leer y escribir al
dispositivo?
La struct file_operations sirve para decirle al kernel como leer y/o escribir al
dispositivo.

Práctica 4
File Systems
1. ¿Qué es un file system?

Un file system es una abstracción que permite la creación, eliminación, modificación


y búsqueda de archivos y su organización en directorios

2. Describa las principales diferencias y similitudes entre los file systems: FAT, NTFS,
Ext(2,3,4), XFS y HFS+
FAT: Solo puede manejar archivos menores a 4 gbs
NTFS:
Ext2: Tiene blockgroup y tabla de inodos
Ext3: Incorpora “journaling”, que permite reparar posibles inconsistencias en el file
system
Ext4: Mejor alocación de bloques para disminuir la fragmentación e
incrementar el throughput: “persistent preallocation”, “delay
and multiple block allocation”. Uso de extents: descriptor que representa un rango
contiguo de bloques físicos.

XFS: FS divide en regiones llamadas “allocation groups”. Uso de


extents. Inodo asignados din ́amicamente.Journaling (primer FS de la familia UNIX en
tenerlo). No es posible achicar este tipo de FS.
HFS+:

3. En ext4, describa las siguientes características: extents, multiblock allocation,


delay allocation y persistent pre-allocation (https://kernelnewbies.org/Ext4).

extents: Una extensión es básicamente un montón de bloques físicos contiguos.


Básicamente dice "Los datos están en los siguientes n bloques".

multiblock allocation: Un "asignador multibloque" (mballoc) que asigna muchos


bloques en una sola llamada, en lugar de un solo bloque por llamada, evitando una
gran cantidad de sobrecarga. Esto mejora el rendimiento, y es particularmente útil
con la asignación retrasada y la extensión

delay allocation: Es una característica de rendimiento (no cambia el formato del


disco) que se encuentra en algunos sistemas de archivos modernos como XFS, ZFS,
btrfs o Reiser 4, y consiste en retrasar la asignación de bloques tanto como sea
posible, contrariamente a lo que tradicionalmente, los sistemas de archivos (como
Ext3, reiser3, etc.) sí: asignan los bloques tan pronto como sea posible.

persistent pre-allocation: Permite a las aplicaciones preasignar espacio en el disco:


las aplicaciones le dicen al sistema de archivos preasignar el espacio, y el sistema de
archivos preasigna los bloques necesarios y Estructuras de datos, pero no hay datos
hasta que la aplicación realmente necesite escribir los datos en el futuro.

4. ¿Qué es el particionado? ¿Qué es el UUID? ¿Para qué se lo utiliza?

Una partición es una subdivisión de un disco entero. Están definidas en un área


especial del disco llamada partition table. Cada partición puede contener un “file
system” específico.

El UUID es utilizado para crear identificadores únicos universales que permitan


reconocer y distinguir un objeto dentro de un sistema, o el mismo objeto en
diferentes contextos.

GUID ES LO MISMO PERO PARA MICROSOFT.

5. ¿Es necesario tener un file system para acceder a una partición?


Si, caso contrario no podríamos crear, buscar, borrar archivos.

6. ¿Qué es el área de swap en Linux? ¿Existe un área similar en Windows?


El swap es un espacio de intercambio, que bien puede ser una partición lógica en el
disco o simplemente un archivo.
Si, windows utiliza un archivo de intercambio que cumple la misma función.
7. ¿Qué función cumple el directorio lost+found en Linux?

Los archivos que aparecen en lost + found son típicamente archivos que ya estaban
desvinculados (es decir, su nombre se había borrado), pero aún estaban abiertos por
algún proceso cuando el sistema se detuvo repentinamente.

8. En Linux, ¿dónde se almacena el nombre y los metadatos de los archivos?

El nombre de los archivos, es almacenado en los bloques de datos de los directorios.


También ahí se almacenan los inodos, que contienen los metadatos de los archivos.

9. Seleccione uno de sus filesystems (una partición) y conteste usando el comando


dumpe2fs:
● ¿Qué información describe el comando dumpe2fs?

brinda información detallada sobre el filesystem que queramos.

10. ¿Qué es el file system procfs? ¿Y el sysfs?

/procFS

ProcFS es un pseudo-filesystem montado comúnmente en el directorio /proc.

En /proc hay información sobre procesos y otra información del sistema en una
estructura jerárquica de “archivos”.

No existe en disco, el kernel lo crea en memoria.

/sysFS

Con el paso del tiempo, /proc se convirtió en un verdadero desorden.

“Sysfs” exporta información sobre los dispositivos de hardware y sus controladores


desde el kernel hacia el espacio del usuario.

Esencialmente hacen los mismo, pero el sysfs es algo más estructurado.

12. ¿Qué archivo debería consultar si se quiere ver el mismo resultado que el
comando lsmod?
Se debe consultar el archivo /proc/modules

13. Usando el comando stat, contestar:


El comando stat te da información del archivo.
● ¿Es posible conocer la fecha de creación de un file en Linux? ¿Por qué?
No, porque no corresponde.

14. Los permisos por defecto de Linux al crear un archivo o directorio son 666 y 777
respectivamente.
Cree un nuevo archivo y analice sus permisos. ¿Es así? ¿Por qué sucede esto?
FALSO, archivo es 644 y directorio es 755

15. ¿Qué es un link simbólico? ¿En qué se diferencia de un hard-link?

Duro: Es un archivo que apunta al mismo contenido almacenado en disco que el


archivo original

Simbólico: Apuntan al nombre de un archivo y posteriormente el archivo apunta a


un contenido almacenado en nuestro disco duro.

16. Si se tiene un archivo llamado prueba.txt y se le genera un link simbólico, ¿qué


sucede con el link simbólico si se elimina el archivo prueba.txt? ¿Y si el link fuese
hard-link?

Si se borra el archivo original, con un link simbólico, este link sigue existiendo pero
apuntaría un archivo inexistente.

Si el link fuese Duro, no pasaría nada, porque el link seguirá apuntando al i-nodo en
disco, que contiene la información.

17. ¿Para qué sirven los permisos especiales en Linux? Analizar el Sticky-bit, SUID y
SGID

Sticky bit: el Sticky bit se utiliza para permitir que cualquiera pueda escribir y
modificar sobre un archivo o directorio, pero que solo su propietario o root pueda
eliminarlo.
SUID: el bit SUID activo en un archivo significa que el que lo ejecute va a tener los
mismos permisos que el que creó el archivo.
SGID: el SGID es lo mismo que en el SUID, pero a nivel de grupo.

19. Crear un archivo en el directorio /tmp. Si abre otra consola y se loguea con un
usuario distinto ¿puede borrar ese archivo? ¿Por qué? (Hint.: ver permisos especiales
en Linux)

No se puede borrar porque el dueño del archivo es otro usuario(al menos por default).

20. ¿Qué es Advanced Format en los disco rígidos? ¿Qué es 512e?

El formato avanzado (AF) es un estándar nuevo que mejora la eficiencia de formateo.


512e es el formato avanzado en el que el sector físico tiene un tamaño de 4.096 bytes, pero
el tamaño del sector lógico emula el tamaño del sector de 512 bytes.

21. ¿Por qué es recomendable alinear las particiones?

Esto se hace para hacer un uso más eficiente del espacio físico de las unidades de disco.

RAID
1. ¿Qué es un RAID? Explique las diferencias entre los distintos niveles de RAID

RAID es una técnica que permite usar múltiples discos en forma conjunta.

Spare Disks: discos disponibles para reemplazo de discos en falla

Disk Striping: proceso de dividir datos en bloques y esparcirlos en múltiples dispositivos de


almacenamiento.

Raid 0:
distribuye los datos equitativamente entre dos o más discos sin información de paridad que
proporcione redundancia.

● Capacidad: Sumatoria de la capacidad de los discos participantes


● No es un RAID. No existe redundancia
● Si falla un disco, todos los demás se vuelven inaccesibles.

Raid 1:
- Crea una copia exacta (o espejo) de un conjunto de datos en dos o más discos.
- Capacidad (n discos): n/2.
- Es ineficiente por la escritura en espejo.
- Requiere mínimo 2 discos y siempre en cantidades pares.

Raid 5:
• Striping a nivel de bloque y paridad distribuida
• Una de las implementaciones más utilizadas
• Distribuye la información de paridad entre todos los discos del array
• 3 discos requeridos como mínimo
• Alto rendimiento. No hay cuello de botella
• No ofrece solución al fallo simultáneo de discos
Capacidad (n-1)

Raid 6
-Striping a nivel de disco y doble paridad distribuida
-Requiere 4 discos como mínimo
-Operaciones de escritura más lentas por el cálculo de doble paridad.
Capacidad (n-2)
4. ¿Por qué es necesario crear una partición extendida? Si se usase GPT, ¿sería
necesario este tipo de particiones?

Las particiones extendidas se inventaron para superar el límite de 4 particiones primarias


máximas por cada disco duro y poder crear un número ilimitado de unidades lógicas, cada una
con un sistema de archivos diferente de la otra.

GPT no tiene particiones extendidas. No sería necesario. (trae 128 particiones por defecto)

7. ¿Qué significan los valores sda5, sda6 y sda7?


sdaX hace referencia a la partición X del disco sda (detalle innecesario, del 1-4 se
asocia a particiones primarias, de 5 para arriba es para logicas.)

LVM (Logical Volumen Management)

1. ¿Qué es LVM? ¿Qué ventajas presenta sobre el particionado tradicional de Linux?

LVM significa Logical Volume Management. Es un sistema de administración de volúmenes


lógicos, o sistemas de archivos.

Un Volume Group es una colección con nombre de volúmenes físicos y lógicos.

Los sistemas típicos solo necesitan un Grupo de volúmenes para contener todos los
volúmenes físicos y lógicos en el sistema. Los volúmenes físicos corresponden a discos; son
dispositivos de bloque que proporcionan el espacio para almacenar volúmenes lógicos. Los
volúmenes lógicos corresponden a particiones: contienen un sistema de archivos. Sin
embargo, a diferencia de las particiones, los volúmenes lógicos obtienen nombres en lugar
de números, pueden abarcar varios discos y no tienen que ser físicamente contiguos.

2. ¿Cómo funcionan los “snapshots” en LVM?


Los snapshots son una copia de un volumen lógico, que contiene metadata y bloques de
dato de un LV origen que hayan sido modificados desde que se genero el snapshot, las
copias se hacen CoW, ya que cuando un dato es modificado, instantáneamente se copia en
el snapshot.
BTRFS & ZFS
1. Tanto para BTRFS como para ZFS, responder:

¿Quién los creó? ¿Cuál es su modo de licenciamiento?


BTRFS fue creado por Oracle Corporation para GNU/Linux.
ZFS Sun Microsystems originally, Oracle Corporation since 2010

¿Cuáles son las características más importante de cada uno?


BTRFS reemplaza a ext4 agregando mejoras como el tamaño máximo de los ficheros

ZFS
● Pooled storage
● Copy-on-write
● Snapshots
● Data integrity verification and automatic repair
● RAID-Z
● Maximum 16 Exabyte file size
● Maximum 256 Quadrillion Zettabytes storage

Investigar qué es la técnica copy-on-write


Es una política de optimización. Si múltiples procesos piden recursos que inicialmente
son indistinguibles (iguales), se les devuelven punteros al mismo recurso; en el momento
en que un proceso intenta modificar su "copia" del recurso, se crea una copia auténtica
para prevenir que los cambios producidos por dicho proceso sean visibles por todos los
demás. Todo ocurre de forma transparente para los procesos. La principal ventaja de
este método es que no se crea ninguna copia adicional del recurso si ningún proceso
llega a realizar modificaciones.

“Copy-on-Write (CoW)”: datos son copiados al snapshot


cuando se modifican

Práctica 5
1. Defina virtualización. Investigue cuál fue la primer implementación que se realizó.
Es crear por software una versión virtual de algún recurso tecnológico, como
hardware, un sistema operativo, un dispositivo de almacenamiento u otros recursos
de red.

2. ¿Qué diferencia existe entre virtualización y emulación?


Emulador: Es un programa de software que simula la funcionalidad de otro
programa o un componente de hardware. Dado que implementa funcionalidad por
software.

Virtualización: El programa huésped se ejecuta realmente en el hardware


subyacente. El software de virtualización (VMM, Virtual Machine Monitor) sólo media
en los accesos de las diferentes máquinas virtuales al hardware real. Así, éstas son
independientes, y pueden ejecutar programas a velocidad casi nativa.

3. Investigue el concepto de hipervisor y responda:


(a) ¿Qué es un hypervisor?
Es una plataforma que permite aplicar diversas técnicas de control de virtualización
para utilizar, al mismo tiempo, diferentes sistemas operativos en una misma
computadora.

(b) ¿Qué beneficios traen los hypervisors? ¿Cómo se clasifican?


Hipervisor tipo 1
También denominado nativo, unhosted o bare
metal (sobre el metal desnudo), es software que
se ejecuta directamente sobre el hardware, para
ofrecer la funcionalidad descrita.
(Linux KVM, Microsoft Hyper-V Server, etc)

Hipervisor tipo 2
También denominado hosted, es software que se
ejecuta sobre un sistema operativo para ofrecer la
funcionalidad descrita.
(VirtualBox, vmWare, etc...)

(c) Indique por qué un hypervisor de tipo 1 no podría correr en una arquitectura
sin tecnología de virtualización. ¿Y un hypervisor de tipo 2 en hardware sin
tecnología de virtualización?
Porque… no?
Tampoco?

4. Investigue el concepto de paravirtualización y responda:


(a) ¿Qué es la paravirtualización?
La paravirtualización es una técnica de programación informática que permite
virtualizar por software sistemas operativos. El programa paravirtualizador
presenta una interfaz de manejo de máquinas virtuales. Cada máquina virtual
se comporta como un computador independiente, por lo que permite usar un
sistema operativo o varios por computador emulado.

Paravirtualizado significa que comparte de manera dinámica los recursos con


el sistema padre y el resto de las máquinas virtuales paravirtualizadas. Es
más eficiente en cuanto a rendimiento, pues las VMs que están ocupando
menos recursos los prestan a las VMs que ocupan más.

Virtualizacin completa, significa que tiene asignada una cantidad fija de


recursos (núcleos y memoria)

(b) ¿Sería posible utilizar paravirtualización en sistemas operativos como


Windows o iOS? ¿Por qué?

El cambio más grande en virtualbox 5.0 es la introducción de el soporte de la


paravirtualización, aportando un mayor rendimiento y tiempo de
mantenimiento de la precisión de los sistemas operativos invitados
compatibles (Hyper-V en Windows y en Linux KVM).

5. Investigue sobre containers en el ámbito de la virtualización y responda:


(a) ¿Qué son?

Tecnología liviana de virtualización (lightweight virtualization) a nivel de sistema operativo


que permite ejecutar múltiples sistemas aislados (conjuntos de procesos) en un único host.

Las instancias se ejecutan en el espacio del usuario. Comparten el mismo kernel (el del SO
base)

Dentro de cada instancia son como máquinas virtuales. Por fuera son procesos normales del
SO.

(b) ¿Dependen del hardware subyacente?

No dependen para su funcionamiento, pero no es posible ejecutar instancias de un SO con


kernel diferente al SO base.

(c) ¿Qué lo diferencia por sobre el resto de las tecnologías estudiadas?

Su menor consumo tamaño.

Conceptos:

Chroot (service isolation):

Chroot es una forma de aislar aplicaciones del resto del sistema. Cambia el directorio raíz
aparente de un proceso, afectando sólo a dicho proceso y sus procesos hijos.
Al entorno virtual creado por chroot a partir de la nueva raíz del sistema se lo conoce como
jail chroot. No se puede acceder a archivos y comandos fuera de ese directorio.

Control groups: En un SO se ejecutan concurrentemente varios procesos, que por defecto


(en Linux) reciben el mismo tiempo de CPU.
El kernel, no puede determinar que procesos son más importantes y cuáles no, para esto
surgen los Control Groups (cgroups) que proporcionan un mecanismo que permite organizar
procesos de forma jerárquica y distribuir los recursos del sistema (CPU, memoria, I/O...) a lo
largo de esa jerarquía, de forma controlada y configurable.

cgroups provee:

- Resource Limiting: grupos no pueden excederse en la utilización de un recurso


(tiempo de CPU, cantidad de CPUs, cantidad de memoria..).
- Prioritization: un grupo puede obtener prioridad en el uso de los recursos
- Accounting: permite medir el uso de determinados recursos por parte de un grupo.
- Control: Permite freezar y reiniciar un grupo de procesos.

Organizado jerárquicamente como los procesos, y los procesos heredan atributos.


Cada jerarquía se asocia a uno o más subsistemas.
Un subsistema representa un único recurso: tiempo de CPU, memoria, I/O etc…
Compuesto de dos:
-Core: Responsable de organizar jerárquicamente los procesos.
-Controller: Responsable de distribuir los recursos del sistema a lo largo de la
jerarquía.

Cada proceso del sistema, solo puede pertenecer a un cgroup dentro de una jerarquía

Cgroup se implementa como un pseudo filesystem.

Un proceso y todos sus threads pertenecen a un solo cgroup

Namespace Isolation
Permite abstraer un recurso global del sistema, para que los procesos dentro de ese
namespace piensen que tienen su propia instancia aislada de ese recurso global.

Entre los namespaces provistos por Linux:


• IPC: System V IPC, cola de mensaje POSIX
• Network: dispositivos de red, pilas, puertos, etc
• Mount: puntos de montaje
• PID: IDs de procesos
• User: IDs de usuarios y grupos
• UTS: HostName y nombre de dominio

PID Namespace: Brinda la posibilidad de tener múltiples árboles de procesos anidados y


aislados.

Mount Namespace: Permite aislar la tabla de montajes (montajes por namespace). Cada
proceso o conjunto de procesos, tiene una vista distinta de los puntos de montajes.
Linux Containers

Es una tecnología liviana de virtualizacion a nivel SO, que permite ejecutar varios sistemas
aislados en un unico host. Todas las instancias son ejecutadas en espacio de usuario
compartiendo el kernel del SO base (no es posible ejecutar instancias de SO con otro
kernel).
Internamente, cada instancia es una maquina virtual, pero por fuera son procesos normales
del SO.

LXC es un método de virtualización más eficiente, performante y de booteo más rápido. No


necesita un software de virtualización (VMM o Hypervisor).
Utiliza las características de cgroups y namespace isolation

Cada container:
- Tiene su propio nombre y dominio
- Tiene sus propias interface de red (junto con sus IPs)
- Tiene sus propios filesystems
- Tiene su propio espacio de nombre de procesos ID(PIDs) e IPC
- Provee aislación (seguridad y uso de recursos)

With:

● cgroup: Control Groups provide a mechanism for aggregating/partitioning


sets of tasks, and all their future children, into hierarchical groups with
specialized behaviour.
● namespace: wraps a global system resource in an abstraction that makes it
appear to the processes within the namespace that they have their own
isolated instance of the global resource.

In short:

● Cgroups = limits how much you can use;


● namespaces = limits what you can see (and therefore use)

También podría gustarte