1 Fundamentos de los Sistemas Operativos Convocatoria extraordinaria – 1 de julio de 2016 Nombreyapellidos 2 3 4 DNI/NIE NOTA DURACIÓN:Disponesdetreshoraspararealizarelexamen. 1 (4puntos)Respondealassiguientescuestionesdeformabreveyjustificandoadecuadamente tusargumentos. a) b) c) d) (0,60p)¿ParaquéseincorporóelbitdereferenciaalasMMU? (0,60p)Explicalasdiferenciasprincipalesentrelasllamadaspthread_create()yfork(). (0,40p)¿Porquélasoperacionesdeunsemáforodebensernecesariamenteatómicas? (0,80p)LossistemasoperativosofrecenllamadasalsistemadeE/Sindependientesdel dispositivo.¿Québeneficiosreportaestoalprogramador? e) (0,80p)¿Enquéconsisteunmicronúcleoomicrokernel? f) (0,80p)¿Mediantequémecanismosunprocesodeusuariopuedeconmutardemodo usuarioamodonúcleo? 2 (2puntos)Auncomputadorconunúnicoprocesadorllegalacargadetrabajoquesemuestra enlatabla.Planificaestacargadetrabajoconestostresalgoritmos:RoundRobin(Q=2),SJFySJF expulsivo(SRTF).Paracadaalgoritmo,obténeldiagramadeGantt,eltiempomediodeespera,el númerodecambiosdecontextoyelrendimientodelaCPU. proceso llegada duración A 0 4 B 1 3 C D 3 9 1 3 E 10 1 3 (2puntos)Tenemosunaarquitecturadememoriaqueutilizapaginacióndeunsolonivel,con lassiguientescaracterísticas:direccioneslógicasde24bits,direccionesfísicasde32bits,tamaño depáginade1KiBytamañodecadaentradaenlatabladepáginasiguala3bytes. (1p)Enestesistema,¿cuántosbytesocuparálatabladepáginasdeunprocesoquemanejaun espaciológicode100MiB?¿Cuántosmarcosdepáginapodráocuparesemismoproceso? (0,75p)EstemismosistemautilizaunaTLB,paralaqueseobservaunatasadeaciertosdel95%.Si eltiempodeaccesoalaTLBesde2nanosegundosyeltiempomediodeaccesoalaRAMesde40 nanosegundos,¿cuálseráeltiempomedioefectivodeaccesoaundatoenmemoria? (0,25p)Enestemismosistema,seobservaquehay3procesosenejecución:unomanejaun espaciológicode100MiB,otromaneja200MiByelterceromaneja50MiB.Seobservaqueel espaciofísicoqueconsumenesde275MiB,bastantemenosquelasumadelostresespacios lógicos.TeniendoencuentaqueelsistemaNOutilizamemoriavirtual,¿aquépuedeserdebida estadiferenciadetamaños? ·Página1de2 4 (2puntos)EnlaO.S.T.I.A.(OperatingSystemsTechnologyInnovationAgency)están desarrollandounsoftwareparagestionarunaimpresora.Primerohanescritounafunciónpara enviarundocumentoalaimpresora(imprime_documento)yhafuncionadoperfectamente. Despuéshanintentadoescribirunprogramaparamanejarunservidordeimpresiónqueatiende unacoladedocumentospendientesdeimprimir,talycomosemuestramásabajo. Lamentablemente,conelcódigoactuallosdocumentossuelensalirmalimpresos:porejemplo,se mezclancontenidosdedistintosdocumentos,osepierdendocumentoscompletos. AyudalaO.S.T.I.A.:¿Aquécreesquesedebeelproblema?Explicalosmotivosdesdetus conocimientossobreprogramaciónconcurrente. Ademásdedarunaexplicación,arreglaelcódigoaquíexpuestoparaquelosdocumentosse imprimancorrectamente.Utilizasemáforosparalograrlasincronizaciónqueseanecesaria. NOTA:puedesescribirtusoluciónenseudocódigo,nohacefaltaquetualgoritmoseacompilable. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 struct Documento { // ... campos con el contenido del documento }; // función para imprimir directamente sobre la impresora // (comprobado que funciona correctamente) void imprime_documento(struct Documento* doc); // funciones auxiliaries para manejar una cola FIFO // (también funcionan correctamente) void cola_añade (struct Documento* doc); struct Documento* cola_extrae(); int peticiones_en_cola = 0; // rutina del servidor de impresión void servidor_impresora() { while (true) { while ( peticiones_en_cola == 0 ) {} struct Documento* doc = cola_extrae(); imprime_documento(doc); peticiones_en_cola--; } } // función para que un proceso envíe // un documento a la cola de impresión void envía_cola_impresión (struct Documento* doc) { peticiones_en_cola++; cola_añade (doc); } Página2de2