Final 1ra Diciembre 2024 (Sistemas Operativos)
Condiciones
Final oral, eramos 3 personas. Hizo una pregunta por tema. No entró Sistemas Distribuidos porque por los paros no se dió.
Las respuestas escritas abajo son las que yo escribí mientras preparaba el final. Son similares a las que respondí en el oral.
Procesos
- ¿Cual es la diferencia entre un proceso y un thread?
Un *proceso* es la instancia dinamica de un programa corriendo en una computadora en una seccion de la memoria intensivo en el uso de recursos. Representa la ejecucion de un programa y es administrado por el sistema operativo.
Un *thread* es una pequena unidad de ejecucion **dentro** de un proceso.
La diferencia es que dos procesos son independientes aun si son la ejecucion del mismo programa. Tienen espacio de memoria diferentes, tienen PCBs diferentes y estados diferentes. Los threads comparten el mismo espacio de memoria dentro de un proceso y recursos aunque tienen un stack y registros diferentes. (comparten las mismas variables globales).
Los procesos se usan para *correr aplicaciones de manera independiente* mientras que los threads se usan para tareas paralelas dentro de un proceso.
- ¿Qué pasaría si los threads compartieran el stack?
Comportamiento inesperado. Supongamos que dos threads T1 y T2 se separaron y estan corriendo en funciones diferentes. Ambos estan por terminar de ejecutar una funcion, T1 esta por retornar (return address en el top del stack) pero justo se hace un context switch y T2 ahora sera el que va a retornar. T2 podria retornar a la funcion llamadora de la funcion donde estaba T1 implicando que salto a otra seccion de texto que no le correspondia. Mientras, al volver T1 a ejecutar, perdio su direccion de retorno y va a "retornar" a un valor random.
Seguridad
- ¿Qué es y para qué sirve el permiso de SetUID?
SETUID es un permiso de acceso que pueden asignar a archivos o directorios en un sistema operativo basado en Unix. Se utiliza para permitir que un usuario ejecute un binario con privilegios elevados temporalmente para realizar una tarea especifica. Si un archivo tiene activado el bit "SETUID" se identifica con una s en el listado.
- ¿Como crees que se implementa el comando "sudo" de linux?
Le comenté que para mi sudo es un binario donde root es el dueño. Luego el programa tiene un setuid donde con execv o algo así ejecuta con privilegios del dueño (o sea, root) los argumentos que le pases a este. No me acuerdo si la respuesta estaba bien, creo que iba por ahí la mano. Creo que la implementación es distro specific porque el me comentó como funciona la de Ubuntu pero le dije que uso Fedora y me dijo que es similar.
Sistema de archivos
- Explicar las diferencias entre soft links y hard links.
- Hard link**: Es un directory entry que asocia un nombre con un archivo (inodo). Esto implica que cada archivo tiene que tener al menos un inodo.
- Soft link**: Es un directory entry que apunta a un inodo que en sus bloques de datos tiene la direccion de un archivo. No apunta a otro direntry, si no al path de otro inodo. (Archivo).
- ¿Cuales son las ventajas y desventajas entre ambos?
Los hardlinks no pueden apuntar a otro sistemas de archivos mientras que los softlinks si. Los hard links se basan en inodos. Los inodos son una estructura interna específica de un sistema de archivos, y cada sistema de archivos tiene su propio conjunto de inodos, gestionados de manera independiente. Cuando creamos un hard link estamos creando un directory entry en el sistema de archivos que apunta al mismo inodo que el direntry original. Si intentamos crear un hardlink en otro sistema de archivos no podemos hacer referencia al mismo inodo ya que el sistema de archivos de destino tienen un conjunto diferente de inodos. Como los symlinks guardan un path y no un inodo, se pueden vincular a diferentes sistemas de archivos.
Si borramos el archivo de un hardlink no pasa nada, el archivo sigue exisitiendo porque hay un hardlink al inodo (solo se eliminan cuando el contador de hardlinks es 0) mientras que si borramos el archivo al que apunta un simlink este se rompe, apunta a algo que ya no existe en el file system.
También me preguntó que es mas costoso. ¿Buscar un archivo con un hardlink o un softlink? Le respondi que con el softlink porque hay que empezar desde root y con el nombre buscar cada directorio de manera recursiva hasta llegar al archivo mientras que con el hardlink vas directo al inodo.
Concurrencia
- Hablar de sincronización entre procesos. ¿Como se implementan?
Los procesos manipulan varios recursos y en general puede ocurrir que dos procesos cambien el estado de un dato al mismo tiempo evitando que sus rutinas se completen de manera consistente. El hardware nos ofrece formas de crear secciones criticas y formas de sincronizar. Hablé de los semáforos, de los objetos atómicos como TestAndSet (TAS) y TestAndTestAndSet (TTAS).
Se implementan usando busy waiting sobre estas variables atómicas.
- TAS**: variable.TestAndSet(). Devuelve el valor de la variable y la pone en true de manera atomica. (Hace las dos cosas a la vez).
- TTAS**: variable.get() and variable.TestAndSet(). permite usar un while donde se hace variable.get() para obtener el valor *SIN SOBREESCRIBIR* (o sea que las lineas de cache no se descartan y se garantiza cache hits). Si el valor es false entonces recien ahi hacemos el test and set atomico.
- ¿Que es un spinlock?
El spin lock es la implementación de una zona critica donde usamos variables atómicas y busy waiting para modelar un mutex. Bloquea el acceso a la zona critica de un solo proceso usando variables atomicas con busy waiting donde el while hace cache hits en cada iteracion (si se ejecuta en el mismo procesador y se usa TTAS. Puede variar si no estamos usando afinidad dura). Los spin locks estan buenos para cuando queremos que un solo proceso entre a la zona critica donde la zona critica es "chica". Si la zona critica es grande puede que el busy waiting consuma mas cpu que el overhead de dormir y despertar otros procesos que quieren entrar a esta.
Scheduling
- Mencionar 3 politicas de scheduling.
Dije y expliqué fairness, throughput y minimizar el tiempo de ejecución de un proceso en total.
- ¿Como diseñarías un scheduler para un dispositivo móvil teniendo en cuenta cuestiones de hardware?
Esta pregunta la estuvimos charlando un rato porque no sabía bien la respuesta pero fue generoso porque tampoco se dió en clase algo así. La respuesta tiene que ver con que los telefonos tratan de optimizar la bateria y tienen procesadores que consumen mas bateria peros on mas rápidos y otros que consumen menos pero son mas lentos. El sheduler debería darle los procesos mas pesados a los procesadores que consumen menos y los interactivos/livianos a los que consumen mas.
Memoria
- ¿Cual puede ser la razón de que el proceso no encuentre una página en memoria? Explicar los 3 casos.
1. La pagina no existe. 2. La pagina no fue cargada en memoria. 3. La pagina fue cargada a memoria pero la swapearon a disco porque faltaba espacio. (creo que esta era la respuesta).
Entrada/Salida
- No me acuerdo si me hizo una pregunta de entrada/salida. Hablamos un poco de ssds y hdds. El tema de como la memoria swap disminuye la vida útil de los ssds.