UTNianos

Versión completa: [APORTE] Final Sistemas Operativos 18/02/2014
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Buenas, no tengo la foto del final pero ahí va lo que me acuerdo:

Parte teórica:

1) El comportamiento de las funciones de semáforos no se modifica al ser estas bloqueantes o no bloqueanes.

2) En la segmentación, cuando se traduce una dirección lógica a física de memoria, esta se guarda en el programa que la generó para acceder más rápidamente cuando se vuelva a referenciar.

3) En paginación por demanda, el SO es quien detecta los accesos inválidos a memoria, y el Hardware es quien dispara la interrupción.

4) El algoritmo de planificación HRRN es más justo y equitativo que el SJF (Shortest Job First).

5) Un programa puede tener instrucciones privilegiadas, pero nunca va a poder ejecutarlas correctamente.

Parte práctica:


1) Bueno, este era un ejercicio para pensar, no había que hacer ningún cálculo (o al menos yo no lo hice). Era una mezcla de sistemas de archivos y seguridad. Preferiría esperar a que alguien consiga el enunciado y no meter la pata escribiendo algo que no me acuerdo bien.

2) Típico ejercicio de paginación bajo demanda.

Páginas de 1024 bytes, memoria física de 8K. Habia un proceso A (PID: 1000) que se estaba ejecutando y te daban la tabla de páginas con el marco en donde se encontraba cada una. Y te decia que el proceso iba a referenciar un cantidad de direcciones virtuales (eran 5 o 6, no me acuerdo).

Te pedían:

a) Traducir las siguientes direcciones virtuales (en decimal) a direcciones físicas (en decimal).
b) Realizar la tabla invertida luego de las referencias que hizo el proceso A.
c) En base al punto anterior. Realizar la tabla invertida, sabiendo que hay un nuevo proceso B (PID: 2000) que hace referencia a 3 páginas (todas en memoria), donde la función hash f(página,2000) da siempre 3.

Lamentablemente no me acuerdo de memoria la tabla que te daban como dato, cuando aparezca el enunciado se aclarará seguramente.


Bueno, espero que les sirva.
B2) Me acuerdo que pedia estas direcciones (no son todas)1024, 1025, 0

la tabla de paginas no me la acuerdo =(

(peor es nada)

Saludos!
Adriano prometió subirlo =P
Hola! Unas aclaraciones sobre la teoría:

2) En la segmentación, cuando se traduce una dirección lógica a física, la dirección física se guarda en el programa que la generó para acceder más rápidamente cuando se vuelva a referenciar.
(quizás parece medio confusa sin eso)

3) En paginación por demanda, el SO es quien detecta los accesos inválidos a memoria, y el Hardware es quien dispara la interrupción.

Con respecto a la práctica, me acuerdo que uno de los accesos me daba que no estaba cargado en memoria, y el resto sí... no me acuerdo más que eso.
La tabla era algo similar a esto:

Pagina ---> 0 1 2 3 4 5 6 7 8 9
Marco ---> 3 1 - - 2

Me acuerdo de estas porque fue las que usé. Las direcciones eran: 1024, 0, 3728, 1025, 4677(o algun numero parecido, pero 4mil y pico seguro, es decir que te daba la pag 4). Sé que tenia 4 paginas cargadas en memoria, asi que me falta una, la que va en el marco "0".

Traducido quedaba:
lógica -> física
1024 -> 1024
0 -> 3072
3728 -> Page Fault
1025 -> 1025
4677 -> 2581 (o similar, ya que depende de la dir fisica, que no se si es correcta la que puse).
(19-02-2014 22:07)Adriano escribió: [ -> ]Ahi va: http://www.campusvirtual.frba.utn.edu.ar...download=1

Buena onda! Se ve que para el ejercicio B1 se pusieron en creativos jajaja
Bendito el 1er practico... el q labura, lo sacaba por un caño...
MUCHA gente tuvo problemas con eso de que un programa corre con un usuario determinado.

Muchos interpretaron que el usuario era para desarrollar, otros interpretaban que si corría el programa no iba a poder hacer otra cosa con ese usuario, etc...
Tampoco era la muerte, solo era cuestión de levantarse y preguntar.

Igual, es verdad lo que dijo Lucho, el que labura, lo sacaba por un caño...
Alguno tiene el resuelto de este final?

Por lo menos las teoricas jaja
Lo que yo contestaría ahora (no recuerdo cuáles eran las respuestas "oficiales"):

A) 1 - FALSÍSIMA. Lo que uno busca teniendo semáforos es, justamente, bloquear la ejecución del programa hasta que se le otorgue el mismo. Claro que cambia el comportamiento.
2 - FALSO. Los programas manejan siempre direcciones lógicas, a fin de que al suspender y reanudar el proceso, la ubicación en memoria física pueda cambiar, pero las referencias internas se mantengan constantes.
3 - No estoy seguro. El hardware va a tirar interrupciones, OK, peeeero no recuerdo si el que detecta la violación es el SO, el hardware, o si colaboran. ***Creo*** que para que el SO pueda hacer todo este chistecito, tiene que tener hardware que lo soporte (digamos, en el hardware tiene que haber lugar para la tabla de páginas y todo eso). Así que, vida o muerte, yo contestaría falso, pero sin estar para nada seguro.
4 - VERDADERO. SJF sufre starvation (si caen muchos procesos cortos, los procesos largos no ejecutan nunca), mientras que HRRN busca remediar esto teniendo en cuenta al momento de elegir cuánto hace que está esperando cada proceso (busquen la fórmula, pero la idea era esa: le da prioridad a los más cortos, pero también le da prioridad a los que hace mucho que están esperando).
5 - VERDADERO asterisco. Un programa podría contener instrucciones privilegiadas si así fue compilado (o si se lo modificó "a mano" post-compilación), pero no podrá ejecutarlas correctamente A MENOS QUE CORRA EN MODO KERNEL - el CPU tiraría una interrupción al intentar ejecutar una instrucción privilegiada en modo protegido.




B) 1 -
a) Correr como root es la más fácil, porque el webserver SIEMPRE va a poder leer los scripts php para ejecutarlos. El tema es que es una potencial brecha jodidísima de seguridad: si te toman control del Aparche, el atacante tiene acceso a TODO tu sistema. Apesta, es la peor de las tres soluciones, pero es la más simple de implementar: sólo tenés que setear que Aparche se corra como root, no hay más setup que ese.
b) Correr con el usuario user1 es fácil, también, porque el usuario ya existe (como pasaba con root), y es un poquito mejor porque el usuario no tiene permisos para romper todo el sistema: si un atacante toma control del Aparche, no puede romper el resto del sistema. Pero el usuario1 sí tiene permisos para editar el script del sitio, por lo cual el atacante podría rompernos el sitio. Osea, no jode a otros servicios en ese servidor, pero sí al propio. Vamos mejorando, pero todavía falta. Es la 2da mejor alternativa de estas 3.
c) Crearle un nuevo ususario es la que va. Es un poquito más de laburo (hay que crearle el usuario), y hay que incluirlo en el grupo developers (esa es la configuración extra que piden aclarar), pero es lo más seguro: como sólo pertenece al grupo developers, no va a poder romper nada del servidor, ni va a tener permisos de escritura sobre el script del sitio: sólo va a leerlo.
Ya que es barato escribirlo, también aclararía que me aseguraría de que el Aparche pueda interpretar el script incluso sin tener permisos de ejecución. No estoy seguro de cómo funciona PHP/Apache en este punto, creo que depende de cómo esté configurado. Con sólo tener permisos de lectura podría alcanzarle, pero por las dudas lo aclararía. La """""desventaja"""""" de este tercer punto es que hay que crear el usuario (osea, paja administrativa). Pero es claramente la más feliz de todas.


En cuanto a la 2 de la práctica, temo morir asesinado por un velociraptor (o por la paja infernal) si me pongo a pensarlo y resolverlo ahora, así que se lo dejo a algún otro valiente que quiera pensar =)
Vuelvo a ver este final y se me cae una lágrima. Qué lindo ejercicio el B1!!!!
Que tal, estaba viendo este final. Y tengo dudas con el punto practico 2. En mi cursada no vi mucho de tablas invertidas y lo estoy intentando hacer leyendo la teoria.

Alguien me podrían indicar como se hace el 2.b y 2.c??

Desde ya Muchas Gracias
Hola,

La tabla de paginas invertida es unica (a diferencia de las tablas de paginas, que son una por proceso). En lugar de tener como indice el numero de paginas, utiliza el numero de marco. Entonces una entrada de la tabla invertida podria verse asi:

Marco | Pagina | Proceso
0 | 0 | P1
1 | 5 | P2

Esto tiene un problema... cuando un proceso te pide la pagina X, vos tenes que leer secuencialmente la tabla hasta encontrarla. Entonces, para evitar esto, se usan funciones de hash que te indican donde buscar la página aproximadamente.

Pegale una leida a la teoría para complementar esto que te cuento en cuatro lineas, pero espero que te sirva como empujon!
Páginas: 1 2
URLs de referencia