SISTEMASOPERATIVOS PREGUNTASFRECUENTES 1. ¿ Qué es un sistema operativo ? Un sistema operativo es un programa que actúa como interfaz entre el usuario del ordenador y los componentes físicos (hardware) del mismo. Su objetivo principal es facilitar el uso del sistema informático empleando el hardware en forma eficiente. 2. ¿ Qué es un sistema informático ? Un sistema informático se define como las relaciones entre los medios (equipo, hardware), los datos y la información necesaria en la toma de decisiones desde el punto de vista de un sistema integrado. 3. ¿ Qué relación encuentra entre las dos preguntas anteriores ? El sistema operativo forma parte del sistema informático que está compuesto por: Hardware (C.P.U. memoria, E/S), Sistema operativo, Programas de aplicación y usuarios y actúa como gestor de los recursos del sistema informático. 4. ¿ Qué puede comentar acerca de un interfaz entre hardware y usuario, como por ejemplo ventajas/desventajas ? Un sistema operativo actúa como interfaz entre hard y usuario. Este interfaz será más eficiente cuanto más fácil sea de manejar y viceversa. El rango y la extensión de los servicios proporcionados por un S.O. depende de varios factores. Entre otras cosas: las funciones visibles al usuario de un S.O. están en gran medida determinadas por las necesidades y características del entorno objetivo que el S.O. está destinado a soportar. Por ejemplo, un S.O. destinado al desarrollo de programas en un entorno interactivo puede tener un conjunto diferente de llamadas y ordenes que el S.O. diseñado para soporte en tiempo de ejecución de una aplicación de tiempo real dedicada, tal como el control del motor de un coche. Cuanto más eficiente sea el interfaz más recursos necesitará y viceversa. 5. A este nivel, ¿ puede contestar nuevamente la pregunta 1 indicando que hace un Sistema Operativo y como lo hace ? El sistema operativo es una especie de gobierno. Los recursos básicos de un sistema informático son el hardware, el software y los datos. El S.O. facilita los medios para el uso adecuado de estos recursos durante la operación del sistema creando un entorno en el que otros programas puedan realizar un trabajo útil. Es posible también considerar el sistema operativo como un asignador de recursos (gestor) de forma tal que los asigna a los usuarios y a los programas para que estos realicen su tarea evitando conflictos entre recursos compartidos y haciendo un control eficiente en la compartición de los mismos. 6. ¿ Que elementos componen el hardware y que características poseen cada uno de ellos ? El hardware es un conjunto de dispositivos eléctricos y algunos mecánicos. Se compone principalmente de: * C.P.U. : microprocesador. Sus funciones principales son: 1 a) Controlar y supervisar el sistema integral del ordenador en base a un programa almacenado en la memoria principal. b) Desarrollar operaciones lógicas que sean necesarias para procesar las demás y controlar la secuencia. La ejecución de las instrucciones. c) Controlar el envío y recepción de datos de todas las unidades periféricas a la unidad de memoria. En función de la cantidad de instrucciones que puede descodificar la C.P.U. se dividen en: a) CISC: tiene un gran conjunto de instrucciones. b) RISC: tiene un conjunto regular de instrucciones. * MEMORIA: dispositivos que permiten almacenar un conjunto de instrucciones. Dos clases principales: a) RAM memoria de lectura/escritura. Son de acceso aleatorio, lentas y volátil. b) ROM solo lectura. De acceso aleatorio y permanentes * Dispositivos de E/S: Son una serie de dispositivos que permiten al ordenador comunicarse con el exterior. Los principales son: a) Teclados. b) Displays. c) Discos: flexibles, duros... d) Impresoras. e) Comunicaciones. 7. Indique las diferencias que existen entre cada uno de los siguientes programas, qué soporte del sistema informático necesitan y cuál es su objetivo: compiladores, assemblers, sistema operativo, comandos de sistema operativo, editores, controladores de dispositivos, rutinas de entrada salida dependientes del hardware (p.e. BIOS), prácticas de Sistemas Operativos. Compiladores: son lenguajes de alto nivel, a diferencia de los assemblers que son lenguajes intermedios. Se usa un lenguaje inteligible orientado al problema en vez de orientado a la máquina. Permite pasar un lenguaje escrito en lenguaje de alto nivel, a lenguaje máquina. Los compiladores requieren que el programa sea introducido de una vez en su totalidad y producen el diagnóstico de errores, si los hay, al finalizar el proceso de traducción, la modificación de una sola instrucción requiere reiniciar de nuevo toda la traducción ( proceso batch ). El compilador traduce una instrucción a muchas. Assemblers: es el nivel más bajo de los lenguajes simbólicos. El programador utiliza códigos o nombres simbólicos para designar las operaciones que ha de realizar el ordenador. El traductor ensambla los códigos simbólicos y los traduce al lenguaje máquina, su codificación está muy ligada a la estructura de la C.P.U. El ensamblador traduce una instrucción a otra. Sistema operativo: es un programa que permite que podamos trabajar de forma eficiente con un sistema informático. Es un programa como cualquier otro pero con funciones específicas. 2 Editores: programa que permite que podamos escribir y modificar de forma interactiva otros programas. Controladores de dispositivos: las unidades de entrada / salida, por lo general, consta de una componente mecánica y de otra electrónica. A menudo es posible separar las dos porciones para ofrecer un diseño más modular y general. La componente electrónica se denomina controlador del dispositivo o adaptador. El sistema operativo casi siempre habla con el controlador, no con el dispositivo. El interfaz entre el controlador y el dispositivo es con frecuencia un interfaz de muy bajo nivel. Rutina de E / S dependientes del hardware ( p. e. BIOS): Son pequeños programas que están en la ROM.BIOS (sistema básico de E / S ). El usuario teclea un comando en el terminal y el S.O. carga el programa solicitado del disco en la memoria y lo ejecuta. Cuando el proceso termina, el S.O. teclea un carácter la solicitud de entrada en un terminal y después espera un comando del terminal para cargar otro proceso escribiendo encima del primero. 8. ¿ Puede dar una analogía entre Sistema operativo y Gobierno ? La función del Sistema operativo es la de preparar y organizar un entorno para que el uso del hardware sea lo más eficiente posible, si sustituimos el Sistema Operativo por el Gobierno y el hardware por la sociedad obtendremos que el gobierno se encarga de crear un entorno para que cada uno de nosotros nos encontremos lo mejor posible, es decir, tienen una finalidad semejante aplicada a campos diferentes. 9. ¿ En base a qué idea se puede considerar el Sistema Operativo como un Administrador de recursos ? El Sistema operativo se dice que actúa como un asignador de Recursos porque se encarga de asignar a cada uno de los recursos (hardware y software) cada uno de los programas y usuarios específicos, según las necesidades para que realicen sus tareas lo mejor posible el Sistema Operativo se encarga de recoger cada una de las solicitudes de recursos y asignar cada solicitud a cada recurso de manera que el Sistema Informático funcione de manera eficiente. 10. ¿ En base a que idea se puede considerar el Sistema Operativo como un Programa de Control ? Además de ser (Sistema Operativo) un Asignador de Recursos es también un programa de control porque el Sistema Operativo no sólo se tiene que encargar del propio ordenador sino también de los dispositivos de E/S, es decir, el Sistema tiene que controlar la ejecución de los programas de usuario para evitar errores y el uso inadecuado del ordenador, principalmente las operaciones y dispositivos de E/S. 11. ¿ Defina un Sistema Operativo por el trabajo que realiza ? El trabajo principal de un Sistema Operativo es ejecutar los programas de usuario y resolver todas sus dudas, para ello utiliza el hardware y el software. 12. ¿ Defina un Sistema Operativo por lo que es ? Es un programa que actúa como una interfaz entre el usuario de un ordenador y el hardware del mismo, ofreciendo el entorno necesario para que el usuario pueda ejecutar programas. 13. ¿ Donde aplicaría el termino eficiencia en las respuestas de las preguntas anteriores ? En el trabajo que realiza un Sistema Operativo. 14. En 2 minutos realice una descripción de los primeros sistemas hasta llegar a un sistema con programa Monitor. 3 Inicialmente, lo único que existía era el hardware del ordenador. El programador escribía un programa y lo ejecutaba directamente desde la consola. A medida que se ejecutaba el programa, el programador / operador seguía su ejecución por medio de los pilotos de la consola. Un aspecto importante de este entorno era su naturaleza directamente interactiva. El programador era el operador. La mayoría de los sistemas utilizaban un método de reservas por solicitud. Con el tiempo el hardware y el software se fueron perfeccionando. Aparecieron los primeros lectores de tarjeta, impresoras de línea y cintas magnéticas. Se diseñaron ensambladores, cargadores y enlazadores para facilitar la tarea de programación . Se crearon librerías de funciones corrientes que podían ser copiadas en programas nuevos sin tener que volver a ser escritas. Las rutinas que realizaban entradas y salidas eran especialmente importantes esta se llama controlador del dispositivo. Un controlador de dispositivo sabe cómo utilizar los buffers, indicadores, registros, bits de control y bits de estado de un dispositivo dado. Más tarde aparecieron compiladores para Fortran, Cobol y otros lenguajes, haciendo mucho más sencilla la programación, pero más compleja la operación del ordenador. La ejecución de un trabajo podía implicar un tiempo de preparación considerable. Cada trabajo estaba formado por muchos pasos independientes: carga de la cinta con el compilador de Fortran, ejecución del compilador, descarga de la cinta con el compilador, carga de la cinta con el ensamblador, ejecución del ensamblador, descarga de la cinta del ensamblador, carga del programa objeto y ejecución del programa objeto. Si se producía un error en cualquiera de los pasos quizá había que empezar de nuevo desde el principio. Cada paso podía implicar la carga y descarga de cintas magnéticas, cintas de papel y/o tarjetas. El tiempo de preparación de la tarea era un problema real. La solución fue doble. En primer lugar, se contrataron operadores de ordenador profesionales. Tan pronto como se acababa un trabajo, un operador podía iniciar el siguiente. Como un operador tenía más experiencia en el montaje de cintas que un programador, el tiempo de preparación se redujo. El segundo ahorro de tiempo fue debido a la reducción del tiempo de preparación. Los trabajos con necesidades similares se incluyeron en lotes y se ejecutaban en el ordenador como un grupo. Estos cambios, que llevaron al operador a clasificar a los usuarios y a agruparlos en lotes de trabajos similares, mejoraron bastante la productividad. Pero aún había problemas. Por ejemplo cuando un trabajo se detenía, los operadores tenían que darse cuenta observando la consola, determinar por qué se había detenido la ejecución del programa, realizar un volcado si era necesario, cargar la lectora de tarjetas o de cinta de papel con el trabajo siguiente y poner de nuevo en marcha el ordenador. Durante esta transición de un trabajo al siguiente, la C.P.U. permanecía inactiva. Para eliminar este tiempo de inactividad se introdujo el secuenciamiento automático de trabajos y con él se crearon los primeros y rudimentarios sistemas operativos. Lo que se deseaba era un procedimiento para la transferencia automática del control de un trabajo al siguiente. Con este propósito se creó un pequeño programa, llamado monitor residente. El monitor residente secuenciaba automáticamente en programa tras otro y un trabajo tras otro. 15. ¿ Cuándo no existía el programa Monitor cuáles eran los problemas a solucionar ? El tiempo de preparación de una tarea era un problema a solucionar. En una máquina con un costo muy elevado y en el cual pasaba cerca del 87 % de tiempo desocupada no era rentable, por lo que se debía maximizar la cuota de empleo. Esto implicó una doble solución: contar con operadores profesionales y agrupar los trabajos por lotes. Si bien esto solucionaba en parte los problemas no era suficiente. 16. ¿ Qué es un secuenciador automático de trabajos y cual es su función ? En el caso anterior los trabajos divididos por lotes existía un tiempo entre dos trabajos consecutivos que podía ser utilizado. Con el objetivo de aprovechar este tiempo se crearon los primeros 'tiempo de las cavernas' sistemas operativos cuya función principal era secuenciar sin intervención del operador los programas de un lote. La forma de hacerlo era un pequeño programa llamado 'monitor residente' porque residía en memoria. Inicialmente, el control pasaba al monitor quien lo transfería al programa de usuario. Cuando el programa acababa, devolvía el control al monitor, que continuaba con el siguiente, y así sucesivamente el monitor 4 'secuenciaba' los trabajos. 17. ¿ Encuentra relación entre la pregunta anterior y el termino de Monitor Residente ? El secuenciamiento de trabajos automático y el Monitor Residente es lo mismo, el Monitor Residente es una especie de Sistema Operativo que estaba siempre en memoria, cuando encendíamos el ordenador el control de este lo tenía el Monitor que se encargaba de buscar el primer trabajo y ejecutarlo, una vez terminado el trabajo se le volvía a pasar el control y otra vez se volvía a ejecutar el siguiente trabajo; antes de ejecutar cualquier trabajo el Monitor recibía una breve descripción de los programas que tenía que ejecutar y los datos que le acompañaban, esto y además una tarjeta de control que le indicaban que programa tenía que ejecutar. 18. ¿ Qué partes puede enumerar de las que componen un Monitor Residente ? Una de las partes más importantes del Monitor es el interprete de tarjetas, sin este interprete no existiría orden al ejecutarse un programa, otra parte importante es el cargador ya que se encarga de cargar el trabajo que le viene a continuación en la memoria para poder ejecutarlo, y tanto como el cargador como el interprete necesitan realizar llamadas a E / S por lo tanto el Monitor también necesitará un conjunto de controladores para los dispositivos de E / S. 19. ¿ Qué problemas seguían existiendo a pesar del Monitor Residente ? El problema que seguia existiendo es que la C.P.U. permanecia inactiva demasiado tiempo debido a que los dispositivos de E/S son muy lento en comparación con los dispositivos electronicos. 20. ¿ Qué implica la operación off−line, que ventajas y que desventajas incluye ? En lugar de que la C.P.U. leyera directamente de las tarjetas estas primero se copiaban a una cinta magnética (la cinta magnética era ás rápida que las tarjetas ), cuando la cinta se llenaba lo suficiente, se desmontaba y se llevaba al computador. De forma parecida, la salida se escribia en la cinta y el contenido de esta se imprimía más tarde, los lectores de tarjetas y las impresoras de líneas se operaban fuera de línea off−line, no lo hacía el computador principal. La principal ventaja era que el computador ya no estaba restringido a la velocidad de los lectores de taretas o las impresoras de líneas mucho más lentos que las unidades de cinta magnética, la verdadera mejora fue la posibilidad de usar varios sistemas lector−cinta y cinta−impresora con una misma C.P.U. La desventaja es que hay un mayor retardo, es razonable para los sistemas de procesamiento por lotes, pues se pueden agrupar varios trabajos semejantes. 21. ¿ En este momento puede definir que es independencia de dispositivos de Entrada / Salida ? ¿ Puede mencionar un S.O. que cumpla esta premisa ? La capacidad para ejecutar un programa con dispositivos de entrada salida diferentes se llama INDEPENDENCIA DE DISPOSITIVOS. La independencia de dispositivos es posible haciendo que el S.O. determine que dispositivo utiliza un programa cuando necesita E / S. Los programas se escriben para utilizar dispositivos de Entrada / Salida lógicas. Las tarjetas de control u otros comandos indican como deben asignarse los dispositivos lógicos a los dispositivos físicos. 22. ¿ Qué implica el Buffering, que ventajas y qué desventajas presenta ? 5 Es una solución a la lentitud de los dispositivos de Entrada / Salida. Este trata de mantener permanentemente ocupados tanto la C.P.U. como los dispositivos de E / S. La idea es sencilla, una vez se han leído los datos y que la C.P.U. ha de iniciar la operación con ellos, el dispositivo de entrada es instruido para iniciar inmediatamente la siguiente lectura. La C.P.U. y el dispositivo de entrada permanecen ocupados. Con suerte, cuando la C.P.U. esté libre para el siguiente grupo de datos, el dispositivo de entrada habrá acabado de leerlos. En la práctica pocas veces el buffering mantiene ocupados todo el tiempo la C.P.U. y los dispositivos de Entrada / Salida. Desventajas: El Buffering es complicado y resulta difícil de programar. Uno de los problemas reside en detectar tan pronto como sea posible que un dispositivo de E/ S ha acabado una operación. 23. ¿ El Buffering reemplaza a la operación off−line o pueden coexistir ? ¿ Como ? No no la reemplaza y pueden coexistir aplicando el Buffering a la cinta en lugar de al lector de tarjetas o la impresora de líneas, puesto que las unidades de cinta, pese a ser más rápidas que éstos, siguen siendo mucho más lentas que la C.P.U. 24. ¿ Para que sirve una interrupción ? ¿Es un método hardware o software ? ¿ Puede controlarlas el usuario ? ¿ Cómo ? ¿ Qué tipo de interrupciones conoce ? ... Sirve para que las operaciones de E/S y de la C.P.U. puedan superponerse es un mecanismo que permite la desincronización y la resincronización de la operación y así evitar que la C.P.U. permanezca inactiva demasiado tiempo, o omitamos parte de la entrada. Cuando se interrumpe la C.P.U. esta abandona lo que estaba haciendo y transfiere de inmediato la ejecución a una posición fija, la cual generalmente contiene la dirección de inicio donde se encuentra la rutina de procesamiento de la interrupción, esta transfiere los datos del buffer local del controlador del dispositivo a la memoría principal, una vez lograda la transferencia la C.P.U. puede continuar. 25. Sea una C.P.U. y una impresora, ¿como traducirias los siguientes dialogos?. A: C.P.U.: imprimeme estos 10 caracteres. imp: bueno, esperate... C.P.U.: ¿terminaste?..¿terminaste?...¿terminaste? Interrupcion por encuesta sin numero de interrupcion(la C.P.U. pregunta y pierdetiempo preguntando si termino el dispositivo de E/S la tarea recomendada). B: C.P.U.: imprimeme estos 10 caracteres y avisame.. imp: bueno. Te acordaras que soy 007? C.P.U.: si, me voy a hacer un calculo super extra. mientras la C.P.U. esta haciendo el cse suena el timbre de interupcion... Sit i: C.P.U. por el nivel de timbre int es la improra 6 Que ha terminado..... Interrupcion autovectorizada: la direccion de la rutina de atencion la saca del nivel de interrupcion con la cual la impresora ha interrumpido (por ejemplo: tres lineas fisicas de int. −>8 niveles, existe una tabla con 8 vectores (0..7) y en cada vector existe la direccion de la rutina de atencion para la int. De este nivel donde la C.P.U. obtiene sgun el nivel de direc. De la rutina de atencion). Sit ii: C.P.U. : hola, quien es? imp: soy 007! C.P.U.: super, ya te atiendo −y se va a en... Interupcion vectorizada: el dispositivo de e/s le comunica a la C.P.U. cual es el vector de su rutina de atencion. Ventajas contra las anteriores: todos los disp. Entran por solo una linea de int. Desventajas: dispositivos pseudo−inteligentes (establecen dialogo con la C.P.U. y le comunica el nº de vector. 27. ¿ Qué diferencia hay entre las interrupciones que son enmascarales y las que no lo son ? Las interrupciones no enmascarables se realizan justo en el momento en que se declaran y las enmascarables no. 28. ¿Puede definir que es un controlador DMA, que hace y como lo hace ?. Un ctr. DMA es un coprocesador que realiza transferencias a memoria no por unidades de informacion (b,w lw) sino por bloques de estas sin intervencion de la C.P.U. Solo se genera una interupcon por bloque en lugar de una int. Por unidad. An te una transferencia el dispositivo interrumpe a la C.P.U. que controla los errores de las transferencias anteriores selecciona un buffer vacio, carga los registros del disp. DMA e instruye al controlador que realice la e/s desde/hacia el buffer indicado. La siguiente int. Indica que bloque se ha tranferido o que se ha producido un error. 29. Hablando de buffering, ¿ En qué casos realmente presenta sólo una mejora en la eficiencia del sistema informático ? Si las velocidades de promedio de la UCP y los dispositivos de E/S son las mismas, el almacenamiento temporal con buffers permite a la C.P.U. adelantarse o retrasarse ligeramente respecto a los dispositivos de E/S, funcionando ambos a toda vekocidad. Si la C.P.U. fuese mucho más rápida el uso de buffers tiene poca utilidad. 30. ¿Qué implica el Spooling, qué ventajas y qué desventajas presenta ? Con la aparición de los discos las tarjetas se leen directamente del lector de tarjetas al disco. La ubicación del contenido de las tarjetas se anota en una tabla que mantiene el sistema operativo. Cuando se ejecuta un trabajo, el sistema operativo satisface las solicitudes de entrada en el lector de tarjetas leyendo del disco, lo mismo ocurre con la impresora, de esta manera usamos el disco como un enorme buffer. Tiene un efecto beneficioso sobre el rendimiento del sistema. A cambio de cambio del costo de unas cuantas tablas y de espacio en disco. 31. ¿ El Spooling tiene algo que ver con el Buffering ? ¿ Lo reemplaza ? ¿ Y con la operación off−line ? ¿ O pueden coexistir ? ¿ Cómo ? 7 Si ambos son buffers el Spooler más grande, el buffer hace simultanea la E/S de un trabajo con los propios calculos del trabajo, en cambio el spooler puede superponer la E/S y los calculos de varios trabajos diferentes. Reemplaza al buffer, en cambio puede coexistir con la operación off−line. 33. ¿ Por qué se dice que aparece aquí una cola de trabajos (job pool)? En operación Off−Line los trabajos también estaban en cola en la cinta pero no se hablaba de esto, ¿por qué? El spooling generalmente hará que varios trabajos ya leídos permanezcan esperando en un disco, dispuestos a ser ejecutados. Un grupo de trabajos en disco permite que el sistema operativo seleccione que trabajo ejecutará a continuación, con vistas a incrementar la utilización de la C.P.U.. Cuando los trabajos entran directamente desde tarjetas o incluso desde cinta magnética, no es posible saltar y ejecutar trabajos en un orden diferente. Cuando hay varios trabajos en un dispositivo de acceso directo ce posible la planificación de trabajos. 35. ¿ Qué es la multiprogramación ? ¿ Qué ventajas desventajas tiene ? ¿ Con que la compararía ? ¿ conoce algún sistema operativo que la posea ? La multiprogramación aumenta la utilización de la C.P.U. organizando los trabajos de manera que esta siempre tenga algo que hacer. El concepto es el siguiente el S.O: coge uno de los trabajos cuando este tenga que esperar (montar una cinta, imprimir...) este coge otro trabajo de la cola de trabajos. Ventaja la C.P.U. nunca inactiva, desventajas estos S.O. son más complejos. Se puede comparar con un abogado que no tiene solamente un cliente, cuando tenga que esperar la recepción de algún documento p.e. el abogado puede trabajar en otro caso. 37. ¿Que opinion tiene sobre un sist. en tiempo compartido?. En que se basa? ¿para que sirve?. ¿cual es lo opuesto a interactivo?. ¿se usa lo opuesto? Los sist. en tiempo compartido son son el resultado de la tentativa de obtener un funcionamiento interactivo de un sistema informatico a un coste razonable.un sistema operativo en tiempo compartido utiliza la Planificacion de la C.P.U. y la multiprogramacion para dotar a cada usuario de una pequeña parte del ordenador. Lo opuesto a interractivo es batch (generalmente vax durante las noches los trabajos se ejecutan En modo batch). Aqui el usuario envia a ejecutar un programa con sus datos y cuando el so. Tiene tiempo lo hace pero el usuario no espera la respuesta. Este modo de ejecucion es indicado para los programas con mucha carga de C.P.U, i poca interactividad. 39. ¿ Qué opinión le merece un sistema de tiempo real (RT) ? ¿ En que se basa ? ¿ Para qué sirve ? ¿ Un sistema RT puede ser de tiempo compartido ? ¿Por qué ? Un sistema RT se utiliza como sistema de control de una aplicación especializada. Unos sensores proporcionan los datos a la C.P.U.. La C.P.U. analiza los datos. La C.P.U. analiza los datos y ajusta en lo posible los controles para modificar las entradas del sensor. El procesamiento tiene que realizarse dentro de los límites definidos, si no el sistema fallará. Compárese este requerimiento con un sistema en tiempo compartido donde es deseable (pero no obligatorio) responder rápidamente, o con un sistema en batch donde puede no haber limitaciones de tiempo en absoluto. 48. ¿ Qué significa concurrencia ? ¿ Puedes dar un ejemplo ? Dos o más procesos son concurrentes cuando se ejecutan al mismo tiempo. Por ejemplo tenemos las siguientes operaciones sencillas. a:=x+y 8 b:=z+1 c:=a−b w:=c+1 Supongamos que deseamos ejecutar alguna de estas instrucciones concurrentemente para reducir el tiempo de ejecución. El calculo de a y b se puede realizar concurrente, mientras que c no se puede calcular hasta que halla acabado la operación anterior. ab c w 49. ¿ Como hará un dibujo para mostrar la concurrencia ? Poniéndolas al mismo nivel en el dibujo se ejecutarán de manera concurrente. 50. ¿ Que es un grafo de precedencia ? Es un grafo aciclico orientado cuyos nodos corresponden a sentencias individuales. Un arco que une el nodo Si al nodo Sj significa que a sentencia Sj puede ejecutarse después de que la instrucción Si haya sido completada.. También es una herramienta útil para definir las restricciones de proceso entre puntos de una computación. 51. ¿ Qué son restricciones de precedencia ? Dentro de un programa hay restricciones de precedencia, con las distintas instrucciones. El resultado de una sentencia no podrá ejecutarse si depende del resultado de una sentencia anterior. 52. ¿ Que significa que el grafo de precedencia es aciclico y porque debe serlo ? Pues que no puede meterse en un ciclo ya que los procesos dependen el uno del otro nunca se podrán satisfacer. Por ejemplo imaginemos el grafo siguiente: S1 S2 S3 S3 puede ejecutarse solamente después de que S2 haya terminado y S2 puede ejecutarse solamente después que S2 acabe. Estas restricciones no se pueden satisfacer simultáneamente.. 53. ¿ Cuales son las condiciones que se deben dar para que los procesos sean concurrentes ? Antes definamos algunas condiciones: R(Si)={ a1, a2, a3...an }, conjunto de lectura de Si. 9 W(Si)={ b1, b2, b3...bn }, conjunto de escritura de Si. Para que las instrucciones sucesivas S1, S2 sean ejecutables concurrentemente sin variación de resultados tienen que satisfacer las siguientes condiciones: 1. R(S1)"W(S2)= { } 2. W(S1)"R(S2)= { } 3. W(S1)"W(S2)= { } Por ejemplo consideremos S1: a= x + y, S2: b=z+1. estas instrucciones pueden ejecutarse concurrentemente por que: R(S1)={ x, y } R(S2)={ z } W(S1)={ a } W(S2)={ b } Sin embargo S2 no puede ejecutarse concurrentemente con S3: c=a−b puesto que W(S2)"R(S3)={ b } 54. ¿ Qué es y como se utiliza la instrucción fork ? La instrucción fork L genera las ejecuciones concurrentes en un programa, Una ejecución se inicia han la instrucción etiquetada con L, mientras que la otra es la continuación de la ejecución en la instrucción siguiente a la instrucción fork. Por ejemplo: S1 S1 Fork L Fork S2 . S2 S3 . . L: S3 55. ¿ Qué es y como se utiliza la instrucción Join ? ¿ Puede ir sin la variable asociada a ella count ? ¿ Escriba con la sentencia If esta instrucción ? La instrucción join ofrece los motivos para reunir dos computaciones concurrentes en una tenemos que saber el numero de computaciones que hay que unir, de modo que podemos terminarlas todas excepto la última. La instrucción join tiene un parámetro para especificar el numero de computaciones a reunir ( count ). Para dos computaciones la variable se tendrá que inicializar a 2. 10 Count:=2 S1 S2 CON LA INST. IF Fork L1 Joint count:= count−1 . S3 if count"0 then quit S1 goto L2 L1: S2 L2: joint count S3 56. ¿ Siempre que hay fork existe en alguna parte el join ? ¿ Debe haber tantos join como fork en un código ? Si. No debe haber el mismo nº de forks y joins necesariamente. 57. ¿ Cualquier grafo de precedencia se puede representar por fork−join ? ¿ Porqué ? ¿ El siguiente grafo se puede representar por fork−join: S1!S2, S2!S3, S3!S1 ? ¿ Porqué ? Si, si se puede representar con fork−join. Por que la instrucción fork es similar a la instrucción goto y resulta una estructura de difícil uso. S1 S2 S3 No se puede representar por que es un grafo cíclico, no aciclico. 58. Escriba el código con fork− join de un proceso que lee en un archivo, dos procesos que escriben en dos archivos diferentes en forma concurrente. var f,g,h, file of T; r,s,q: T begin reset(f) read(f,r) while not eof(f) do begin count:=2; 11 s:=r; q:=r; fork L1; write (g,s) write(h,q) goto L2 L1: read (f,r) L2: join count end write (g,r) write(h,r) end; 59. ¿ Cómo se utiliza y se define la instrucción parbegin−parend ? forma: Parbegin S1, S2; ..; Sn Parend Cada Si es una instrucción . Todas las instrucciones insertadas entre parbegin y parend. El grafo de precedencia sería. Si S1 S2 Sn Sj La instrucción concurrente se añade con facilidad a un lenguaje moderno de alto nivel estructurado, tiene mucha de las ventajas de otras instrucciones de control estructuradas. 60. ¿ Que ventajas y desventajas con respecto a la instrucción fork−join ? VENTAJAS: Que se añade con facilidad a un lenguaje moderno de alto nivel estructurado y tiene muchas de las ventajas de otras instrucciones de control estructuradas. DESVENTAJAS: No es lo suficientemente poderosa para como para representar todos los grafos de precedencia posibles. 61. Escriba el código con parbegin/parent de un proceso que lee de un archivo y dos procesos que escriben en dos archivos diferentes en forma concurrente. var 12 f, g, h: file of T q, r, s: T begin reset (F) read(f,r) while not eof(f) do begin s=r q=r for begin write(g,s); write(h,q); read(f,r) parent; end; write(g,r); write(h,r); end; 62. ¿Cuantos estados conoce en los que puede estar un proceso? ¿Puede estar mas de uno a la vez? ¿Como pasa de uno a otro? ¿Quien los pasa? −Ejecución. Las instrucciones están siendo ejecutadas. −Bloqueado: El proceso espera que se produzcan algún suceso. −Preparado: El proceso esta esperando para ser asignado a un procesador. −Interbloqueado(en abrazo mortal). El proceso esta esperando a que se produzcan algún suceso que nunca tendrá lugar. −Solo puede estar en un solo estado. 13 −Pasa de un estado a otro mediante intercepciones. 63. Relaciona estos dos conceptos: grafos de procedencia y procesos. La computación concurrente hecho de un solo programa puede representarse por un grupo de procedencia los procesos aparecen y desaparecen dinámicamente durante la ejecución de un único programa. Aquellos aciclicos que se realizan secuencialmente se puede minimizar, si los contenemos en un solo proceso. Cada nodo de un grafo de procedencia es un proceso. 64. A todo esto: ¿ qué significa proceso ? ¿cómo lo definiría?. Un proceso es un programa en ejecucion. Un programa no es un proceso en si mismo; un programa es una entidad pasiva mientras que un proceso es una entidad activa. La ejecucion de un proceso debe progresar de manera secuencial. Típicamente un trabajo bach es un proceso, etc. Se puede considerar como un proceso un programa o un trabajo en ejecución en tiempo computado. 65. ¿Por que es necesaria una jerarquía de procesos? ¿Quienes se benefician con esta jerarquía? Cuando un proceso Pi ejecuta la instrucción FORK L, se crea un nuevo proceso Pj Pi y Pj comparten el mismo programa. La principal diferencia es que el contador de instrucciones de Pj se ajusta a L y sus registros de hardware interno se inicializan apropiadamente. La jerarquía de procesos muestra las relaciones entre los distintos procesos y que clases de relaciones pueden invocarse sobre un proceso (grafo de proceso). Un grafo de proceso es un árbol con raíz, orientado cuyos nodos corresponden a procesos. Un arco desde el nodo Pi al nodo Pj significa que Pi creo a Pj . En este caso diremos que Pj es hijo de Pi.El grafo tiene que ser un árbol con raíz puesto que cada proceso puede tener un padre como máximo, pero tantos hijos como cree. 66. ¿Que operaciones se pueden realizar sobre un proceso? a) Creación de un proceso: cuando un proceso crea un nuevo proceso por medio de alguna operación la creación (fork), son posibles varias implementaciones. 1. Ejecución; Concurrente: El padre continua ejecutando concurrentemente con sus hijos. Secuencial: El padre espera a que todos sus hijos han acabado. 2.Comparticion: Completo: El padre y el hijo comparten todos las variables. Parcial: El hijo comparte un subconjunto de variable. b)Terminación de un proceso: Un proceso termina cuando acaba la ejecución de su ultima instrucción. Pero hay otras circunstancias que provocan la terminación, por ejemplo un proceso puede ocasionar la terminación de otro proceso emitiendo el comando Kill id; Un padre puede terminar la ejecución de uno de sus hijos por divirsas razones. 1. El hijo ha excedido el uso de los recursos que le han sido asignados. 14 2.La tarea asignada al hijo ya no es precisa. 67. ¿ Respecto a la ejecución que formas conoce y que operativos adoptan cada una de estas formas ? ( ver pregunta anterior. ) 68. ¿ Respecto a la computación de variables que formas conoce y que operativos conoce que utilicen estas formas ? COMPLETA: FORK−JOIN PARCIAL: UNIX ( VER PREG. 66 ) 69. ¿ Qué implica la terminación de un proceso ? ( ver preg. 66 ) Para determinar si un proceso ha excedido el uso de algunos de los recursos se ha de disponer de un mecanismo que haga posible que el padre inspeccione el estado de su hijo. Muchos sistemas no permiten que un hijo exista si su padre ha terminado. 70. ¿ Indique la diferencia entre proceso estático y dinámico ? Un proceso que no termina mientras el sistema operativo este funcionando se llama estático; un proceso que puede terminar se llama dinámico. 71. ¿ Qué significa el problema de la sección crítica ? ¿Cuál es la analogía que puede hacer con un cruce de calles y la sección crítica ? Un entorno de multiprogramación y varios procesos pueden competir por un nº finito de recursos. Un proceso solicita recurso; si estos no se encuentran disponibles en ese momento el proceso entra en un estado de espera. Puede suceder que el proceso en espera nunca vuelva a cambiar de estado debido a que los recursos que ha solicitado están retenidos por otros procesos. Cada proceso tiene un segmento de código, denominado sección crítica, en que el proceso puede estar leyendo variables comunes actualizando una tabla, escribiendo sobre un fichero, etc. La característica relevante del sistema es que cuando un proceso está ejecutándose en su sección crítica, ningún otro proceso puede ejecutarse en su sección crítica. 72. De la idea de procesos concurrentes productores y consumidores escriba el código de un proceso productor y uno consumidor con buffer limitado. ¿Cómo controla el buffer ? ¿ Són necesarios los punteros ? ¿ Cómo detecta si el buffer está vacio o lleno ? De una forma alternativa de controlar el buffer. Un proceso productor genera información que es utilizada por un proceso consumidor. Para que 2 procesos productores y consumidores se ejecuten concurrentemente, tenemos que crear un pool de buffers que pueden ser alimentados por el productor y vaciados por el consumidor. Un productor puede producir sobre un buffer mientras que el consumidor está extrayendo del otro. El productor y el consumidor tienen que estar sincronizados. El problema de productor−consumidor con buffer limitado supone que hay un fijo de buffers n. En este caso el consumidor tiene que esperar si todos los buffers se encuentran vacios, y el productor tiene que esperar si todos los bufares se encuentran llenos. En la siguiente solución el poll de buffers compartidos se implementa con una tabla circular con dos punteros lógicos in y out. La variable in apunta al siguiente buffer libre, mientras que out apunta al primer buffer lleno. El pool (deposito) se encuentra vacío cuando in = out y el pool está lleno cuando in+1 mod n = out. 15 type item=.....; var buffer: array (0...n−1) of item in, out: 0.. n−1 nextp, nextc: item; in:=0; out:=0; parbegin productor: begin repeat ... produce un item en nextp ... while (in+1 mod n)= out do skip buffer(in):=nextp in:=in + 1 mod n until false end Consumidor: : begin repeat while in=out do skip next c:= bufer(out) out=out + 1 mod n .... consumo el item en nextc until false end 16 parend Eliminando los punteros será así: Declaraciones Paregin Productor: begin repetir ... produce un item en nextp ... while counter = n do skip buffer(in):= nextp in:= in + 1 mod n; counter:= counter + 1 until false end Consumidor: begin repetir while counter = 0 do skip next:= buffer (out) out:= out + 1 mod n counter:= counter − 1 ... consume el item en nextc until false end; parend 17 Estos si nos aseguramos que cada proceso manipula al mismo tiempo la variable counter. 73. ¿ Como mejora en código anterior para aprovechar todos los elementos del buffer ? ¿ Que problemas adicionales trae ? −Estableciendo un contador, para que se queden n buffers y no n−1. − Pueden aparecer problemas, si permitimos que ambos procesos manipulen al mismo tiempo la variable contador 74. Define el problema de la sección crítica nuevamente. Consideramos un sistema que consta de n procesos en cooperación, cada proceso tiene un segmento de código denominado sección crítica, en el que el proceso puede estar leyendo variables comunes, actualizando la tabla y escribiendo un fichero, etc. La característica relevante del sistema es que cuando un proceso se está ejecutando en su sección crítica, ningún otro proceso está autorizado a ejecutarse en su sección crítica. Así la ejecución de secciones críticas por procesos es mutuamente excluyente en el tiempo. El problema de la sección crítica consiste en diseñar un protocolo, que puedan utilizar los procesos para cooperar. Cada proceso tiene que solicitar permiso para entrar en su S.C. 75. Defina que es la exclusión mutua. Si un procedo Pi esta ejecutándose en su S.C. entonces ningún otro proceso puede estar ejecutándose en esta. − Si en un cruce de calles esta alguien cruzando la calle nadie más podrá cruzarla hasta que el otro haya acabado de cruzar. 76. Defina que es progresión y realice una analogía con un cruce de calles. Si no hay ningún proceso ejecutándose en su S.C. y hay algunos procesos que desearían entrar en su S.C. entonces solamente aquellos procesos que no están ejecutando su S.Residual pueden participar en la decisión de cual entrará en la sección crítica acto seguido y esta selección no puede posponerse indefinidamente. Supongamos que hay varios coches que están esperando para cruzar y tienen los intermitentes puestos y los hay que no, sólo aquellos que tienen los intermitentes puestos tienen opción a cruzar, los otros tienen que esperar, poner los intermitentes y luego cruzar. 77. Defina que es la espera limitada y haz una analogía con lads calles. Tiene que haber un límite al nº de veces que otros procesos reciben autorización para entrar en sus S.C. después de que un proceso haya realizado una solicitud para entrar en su S.C. y antes de que esa solicitud sea satisfecha. Si hay 4 coches en el cruce uno en cada calle no puede ser que uno cruce de izquierda a derecha y luego otra vez de derecha a izquierda. Tiene que esperar a que los otros acaben. 78. ¿ Para tratar el problema de la S.C. como define los dos procesos intervinientes mediante parbegin−parend y su entrada salida de la S.C. ? −begin declaración de variables comunes 18 parbegin P0 P1 parend end repeat entry section S.C. exit section sección residual until false 79. ¿ Que desventajas tiene el algoritmo 1 de detección de Peterson ? Deja que dos procesos compartan una variable, Turn inicializada a a 0 (01). Si Turn= y, entonces el proceso Pi tiene permiso para ejecutar su SC. repeat while turn= y do skip S.C. turn:= j S. Residual until false No satisface el requerimiento de programación, puesto que requiere una alternancia estricta de procesos en la ejecución de la S.C. Por ejemplo si Turn= 0 y P1 quiere entrar en su S.C, o puede hacerlo, aunque P0 pueda encontrarse en su S.R. 80. ¿ Qué desventajas tiene el algoritmo II de Peterson ? El problema del algoritmo Y es que no guarda el estado de cada proceso, sino solo que proceso está autorizado para entrar a su S.C. Para remediar esto reemplazamos la variable Turn por Matriz: var flag: array (0,1) of boolean Los elementos de la tabla se inicializan a false. Si flag(i) es true, entonces el proceso está ejecutandose en su S.C:: 19 repeat flag(i):= true while flag(i) do skip S.C: flag(i):= false S.R: until false Primero fijamos nuestro flag(i) en true, señalando que queremos entrar en nuestra S.C: comprobamos que el otro proceso no quiere entrar en su S.C. también. En otro caso esperamos . Entonces entramos en nuestra S.C., al salir de la S.C: fijamos nuestro flag en false, permitiendo que otro proceso entre en su S.C. si está esperando. DESVENTAJAS: satisface el requerimiento de exclusión mutua, pero no se da el requerimiento de progresión. T0: P0 fija flag(0): true T1: P1 fija flag(1): true Ahora P0 y P1 se encuentran en un bucle indefinido en sus while. 81. ¿ Funciona el algoritmo IV Indique donde se satisface la exclusión mutua, la progresión y la espera limitada ? Si, funciona correctamente. Los procesos comparten 2 variables: var flag: array (0..1) of boolean turn: 0..1 Inicialmente play (0)= flag (1)= false y el valor de TURN es indiferente (0,1). repeat flag(i) := true turn := j while (flag(j) and turn =j do skip S.C. flag(i):=false 20 S.R. until false EXCLUSION MUTUA: Cada Pi entra en su S.C. solamente si flag(j)=false o bien turn=i. PROGRESIÓN DE ESPERA LIMITADA: Observamos que a un proceso Pi se le puede impedir solamente entrar en la S.C. si permanece atrapado en el bucle while con la condición flag(j)=true y turn = j; este es el único bucle si Pj no está interesado en entrar en la S.C. , entonces flag(j)= false y Pi puede entrar en la S.C. Si PJ ha fijado flas(j)=true y también está ejecutando su instrucción while entonces o bien turn=i o bien turn=j. Si turn=i Pi entrará en la S.C., si turn=j Pj entrará en la S.C.. No obstante una vez Pj salga de su S.C. restaurará flag(j)=false permitiendo a Pi entrar en su S.C. Si Pj tuviera que restaurar su flag(j) a true, también tendrá que fijar turn=i. Así puesto que Pi no cambie el valor de la variable turn mientra esté ejecutando la instrucción while, Pi entrará en la S.C. (progresión) como máximo una entrada después de Pj (espera limitada). 82. ¿ Cuál es la idea del algoritmo de la panadería ? ¿ Para cuantos procesos sirve? Sirve para n procesos. Los procesos reciben un nº de llegada. El nº más bajo pide primero. Si Pi y Pj reciben el mismo nº pasa al del nº más bajo. La estructura de datos más común es: var choosing : array [ 0, n−1 ) of boolean number: array [ 0, n−1 ) of integer Inicialmente estas estructuras de datos están inicializadas a false y a 0 respectivamente. Por conveniencia definimos la siguiente notación: .(a, b ) < (c, d) si a < c o si a = y b < a .max (A0,...An−1) es un nº K, t q K"Ai para y 0 0...n−1 repeat choosing[i]:= true number[i]:= max(number[0], number[1]...number[n−1]+1); choosing[i]:=false for j:=0 to n−1 do begin while choosing[j] do skip while number[j]"0 and (number[j], j )<(number[i], i) do skip 21 endL; S.C. number[i]:=0 S.R. until false 83. ¿ Cuantas soluciones hardware conoce y porque son más utilizadas ? ¿ Que desventajas posee ? ¿ Que significa que son indivisibles ? Muchas veces las maquinas ofrecen instrucciones de hardware especiales que permiten o bien modificar y verificar el contenido de una palabra o bien intercambiar automáticamente el contenido de dos palabras. Sirve también para resolver el problema de la S.C. 84. ¿ Cómo se utiliza el Test&Set para entrar en una S.C. ? var waiting: array [0..n−1] of boolean lock: boolean j: 0..n−1 key: boolean repeat waiting(i)= true ; key:= true while waiting[i] and key do key:= test & set (locks) wating[i]: false S.C. j:= y +1 mod n while (j "1) and (not wraiting [j]= do j:=j+1 mod n if j=i then lock:=false else waiting [j]:= false S.R. until false 22 85. ¿ Cómo utilizaría el Swap para entrar en una S.C. ? Igual que la anterior pero con Swap. 86. ¿Qué es un semáforo ? ¿Puede ser binario o cualquier otro tipo de datos ? De las primitivas para él . ¿El semáforo es indivisible ? ¿ Porqué ? Un semáforo S es una variable entera que aparte de la inicialización, puede ser accedida por medio de dos operaciones indivisibles estandar P y V. Las definiciones clásicas son: P(S): while S"0 do skip s:=s−1 V(S): s:=s+1 La modificación del calor entero de un semáforo se ejecuta indivisiblemente y este es cuando un proceso modifica el valor de un semáforo, ningún otro proceso puede modificar simultáneamente el valor de ese mismo semáforo. Se utilizan en el tratamiento de la S.C. para n procesos. 87. ¿Cómo se utiliza para sincronizar procesos? ¿ Cómo soluciona los problemas del parbegin−parend ? Consideremos dos procesos en ejecución concurrente: P1 con la instrucción S1, y P2 con la instrucción S2. Supongamos que requerimos que S2 ejecutado únicamente después de que S1 haya terminado. Debemos de dejar que P1 y P2 compartan un semáforo, inicializado a 0 e insertar las instrucciones S1 V(synch)!( en el proceso P1) P(synch)!(en el proceso P2) S2 Puesto que synch está inicializado a cero, P2 ejecutará S1 solo después que P1 haya invocado V(synch) lo que será después de P1. −La instrucción parbegin−parend es tan poderosa como FORK_JOIN si le añadimos semáforos. 88. ¿ Qué problema tienen los semáforos ? ¿ Cómo lo soluciona ? ¿ En qué estado están los procesos que se duermen cuando el semáforo está en rojo? Los procesos con semáforos sufren una espera improductiva. Esto ocurre mientras un proceso se encuentra en su S.C. . Cualquier otro proceso que trate de entrar en su S.C. tiene que mantenerse en un bucle en el código de entrada. Para evitar la necesidad de espera improductiva, podemos modificar la definición de las operaciones P y V sobre semáforos. Cuando un proceso ejecuta la operación P y encuentra que el color del semáforo no es positivo tiene que esperar. No obstante en lugar de esperar improductivamente , el suceso puede bloquearse a sí mismo. La operación sitúa el proceso en un estado de espera. Entonces transfiere el control al planificador de la C.P.U., que selecciona otro proceso para ejecutar de la cola para ejecución. 23 89. ¿Qué problemas tienen los semáforos? ¿Cómo los soluciona ? Los procesos con semáforos sufren una espera improductiva. Esto es que mientras un proceso se encuentra en su sección critica, cualquier otro proceso que trate de entrar en su sección critica, tiene que mantenerse en el bucle del código de entrada. Para evitar la espera improductiva, podemos modificar la definición de las operaciones de P y V sobre semáforos. Cuando un proceso ejecuta la operación P y encuentra que el valor del semáforo no es positivo tiene que esperar. No obstante en lugar de esperar improductivamente, el proceso puede bloquearse a si mismo. La operación sitúa al proceso en un estado de espera. Entonces transfiere el control al planificador de la C.P.U., que selecciona otro proceso para ejecutar de la cola de ejecución. 90. De el código con semáforos para un productor y tres consumidores. ¿porque no utilizan punteros para manejar el buffer? ¿Aquí el buffer es circular o lineal? Type item=...; var buffer =...; full,empty,mutex:semaphore; nextp,nextc,item; turn:0..3 begin full:=0; empty :=n; mutex:=1 turn=1 parbegin producer: repeat consumer1:repeat ... While turn#1 do skip; produce un item P(full) .. P(mutex) P(empty) ... P(mutex) Seccion Critica 24 .... Turn:=turn+1 Seccion Critica ... .... V(mutex) V(mutex) V(full) V(full) ... until false consume un item ... until false 91. De el código con semáforos para dos lectores y tres escritores. Mutex,wrt: semáforo Nro_lec:integer (cuenta el nº de lectores) (si nro_lec=1 o 2 entecos wrt=0 (rojo)) (si nro_lec=0 entonces wrt=1) ESCRITOR LECTOR P(mutex) P(mutex) N_esc:=nro_esc+1 nro_lec=nrolec+1 V(mutex) if nro_lec=1 or P(wrt) nro_esc=1 then P(wrt) excribe V(mutex) V(wrt) leer P(mutex) P(mutex) n_esc:=nr_esc−1 nro_lec=nro_lec−1 V(mutex) if nro_lec=0 and nro_esc=0 then V(wrt) V(mutex) 92. De el código con semáforos para 3 fil. 25 #define n 3 COGER " i (i−1) mod n until " d (1+1) mod n p(mutex) " pe 0 estado[i]=ha; " ha 1 comprobar(i); " co 2 v(mutex) Typedef int semaf; p(s[i]) semaf mutex =1 DEJAR semaf s[n] p(mutex) int estado[n] estado[i]=pe FILOSOFO I comprobar[i] Until comprobar[d] while(t) { v(mutex) pensar() COMPROBAR coger(i) if (estado[i]==ha && comer() estado[i]!=co && dejar(i) estado[d]!=co) estado[i]=co v(s[i]) Buffer−limitado Lleno=0; Vacio=n; Mutex=1 (verde) parbegin productor consumidor 26 parend End; Productor: cuando consumidor Repeat vacio=0 repeat Produce item lleno=n P(lleno) P(vacio) ! !debe parar P(mutex) P(mutex) sc(quito item) Sc(añade item) V(mutex) V(mutex) V(vacio) V(lleno) consumo item Until false until false EVITACION DEL ABRAZO MORTAL ALGORISMO DEL BANQUERO 1. Si Solicitud(i)<= Necesidad, entonces pasar a paso 2. En otro caso tenemos un error, puesto que el proceso ha excedido de la solicitud máxima. 2. Si solicitud(i)<=Disponible, entonces pasar a paso 3. En otro caso los recursos no están disponibles y p(i) tiene que esperar. 3. El sistema trata de asignar los recursos solicitados al proceso p(i), modificando el estado del modo siguiente: Disponible:=disponible−solicitud(i) Asignado(i):=Asignado(i)+Solicitud(i); Necesidad(i):=Necesidad(i)−Solicitud(i); Si el estado de asignación de recursos resultante es seguro la transacción es completa y se asignan los recursos al proceso p(i). No obstante, si le nuevo estado es inseguro, entonces p(i) tiene que esperar a Solicitud(i) y se restaura el estado de asignación de recursos anterior. ALGORITMO DE SEGURIDAD 1. Sean Trabajo y Acabar vectores de longitud m y n resp. Inicializamos Trabajo a Disponible y Acabar[i]=falso. 2. Hallar un i tal que: 27 a. Acabar[ì]=falso, y b. Necesidad(i)<=Trabajo si no existe tal y, ir a paso 4. 3. Trabajo:=Trabajo+Asignacion(i) Acabar[i]=cierto ir a paso 2. 4. Si acabar[i]= cierto para toda i , entonces el sistema se encuentra en estado seguro. DETECCIÓN DEL ABRAZO MORTAL ALGORITMO DE DETECCIÓN 1. Sean Trabajo y Acabar vectores de longitud m y n resp. Inicializamos Trabajo a Disponible. Si Assignacio"0 entonces Acabar[i]=falso, en otro caso Acabar[i]=cierto. 2. Hallar un índice i tal que: a. Acabar[ì]=falso, y b. Solicitud<=Trabajo si no existe tal y, ir a paso 4. 3. Trabajo:=Trabajo+Asignacion(i) Acabar[i]=cierto ir a paso 2. 4. Si acabar[i]=falso para alguna i, entonces el sistema se encuentra en estado de abrazo mortal. Además, si Acabar[i]=falso entonces p(i) esta en abrazo mortal. 28