Cuestionario 1 1. ¿Qué es la multiprogramación? Se denomina multiprogramación a una técnica por la que dos o más procesos pueden alojarse en la memoria principal y ser ejecutados concurrentemente por el procesador o CPU. 2. ¿Qué es spooling? ¿Cree usted que las computadoras personales avanzadas tendrán spooling como característica estándar en el futuro? Se refiere al proceso mediante el cual la computadora introduce trabajos en un buffer (un área especial en memoria o en un disco), de manera que un dispositivo pueda acceder a ellos cuando esté listo. 3. En las primeras computadoras, cada byte de datos leídos o escritos se manejaba mediante la CPU (es decir, no había DMA). ¿Qué implicaciones tiene esto para la multiprogramación? La CPU se sometía a una carga masiva de interrupciones, se sobrecarga al procesador y éste no era capaz de realizar tareas adicionales o de tener un óptimo rendimiento. 4. La idea de una familia de computadoras fue introducida en la década de 1960 con las mainframes IBM System/360. ¿Está muerta ahora esta idea o sigue en pie? Se mantiene porque a partir de los años 60 se produjo la invención del circuito integrado o microchip, por parte de Jack St.ClaireKilby y Robert Noyce. Después llevó a Ted Hoff a la invención del microprocesador, en Intel. A finales de 1960 investigadores como George Gamow notó que las secuencias de nucleótidos en el ADN formaban un código, otra forma de codificar o programar. A partir de esta fecha, empezaron a empaquetarse varios transistores diminutos y otros componentes electrónicos en un solo chip o encapsulado, que contenía en su interior un circuito completo: un amplificador, un oscilador, o una puerta lógica. Naturalmente, con estos chips (circuitos integrados) era mucho más fácil montar aparatos complicados: receptores de radio o televisión y computadoras. En 1965y, IBM anunció el primer grupo de máquinas construidas con circuitos integrados, que recibió el nombre de serie Edgar. Estas computadoras de tercera generación sustituyeron totalmente a los de segunda, introduciendo una forma de programar que aún se mantiene en las grandes computadoras actuales. 5. Una razón por la cual las GUI no se adoptaron con rapidez en un principio fue el costo del hardware necesario para darles soporte. ¿Cuánta RAM de video se necesita para dar soporte a una pantalla de texto monocromático de 25 líneas x 80 caracteres? 4kb de RAM ¿Cuánta se necesita para un mapa de bits de 1024 _ 768 píxeles y colores 24 bits? 25165824bits ¿Cuál fue el costo de esta RAM con precios de 1980 (5 dólares/KB)? 122880 dolares ¿Cuánto vale ahora? 467001 dolares 6. Hay varias metas de diseño a la hora de crear un sistema operativo, por ejemplo: la utilización de recursos, puntualidad, que sea robusto, etcétera. De un ejemplo de dos metas de diseño que puedan contradecirse entre sí. Para poder diseñar un sistema operativo es necesario que el diseñador debe tener en cuenta que funciones quieres que haga el sistema operativo. 7. ¿Cuál de las siguientes instrucciones debe permitirse sólo en modo kernel? a) Deshabilitar todas las interrupciones. b) Leer el reloj de la hora del día. c) Establecer el reloj de la hora del día. d) Cambiar el mapa de memoria. 8. Considere un sistema con dos CPUs y que cada CPU tiene dos hilos (hiperhilamiento). Suponga que se inician tres programas P0, P1 y P2 con tiempos de ejecución de 5, 10 y 20 mseg, respectivamente. ¿Cuánto se tardará en completar la ejecución de estos programas? Suponga que los tres programas están 100% ligados a la CPU, que no se bloquean durante la ejecución y no cambian de CPU una vez que se les asigna. el tiempo que tarda en completar la ejecución de un programa en un nanosegundo. 9. Una computadora tiene una canalización con cuatro etapas. Cada etapa requiere el mismo tiempo para hacer su trabajo, a saber, 1 nseg. ¿Cuántas instrucciones por segundo puede ejecutar esta máquina? se pueden ejecutar dos o más instrucciones se obtienen a la vez, se decodifican y se vacían en un búfer de contención hasta que puedan ejecutarse. 10. Considere un sistema de cómputo con memoria caché, memoria principal (RAM) y disco, y que el sistema operativo utiliza memoria virtual. Se requieren 2 nseg para acceder a una palabra desde la caché, 10 nseg para acceder a una palabra desde la RAM y 10 ms para acceder a una palabra desde el disco. Si la proporción de aciertos de caché es de 95% y la proporción de aciertos de memoria (después de un fallo de caché) es de 99%, ¿cuál es el tiempo promedio para acceder a una palabra? el tiempo promedio de retraso para acceder a una palabra despues de un fallo de la cache es de uno o dos ciclos de reloj. 11. Un revisor alerta observa un error de ortografía consistente en el manuscrito del libro de texto de sistemas operativos que está a punto de ser impreso. El libro tiene cerca de 700 páginas, cada una con 50 líneas de 80 caracteres. ¿Cuánto tiempo se requerirá para digitalizar en forma electrónica el texto, para el caso en que la copia maestra se encuentre en cada uno de los niveles de memoria de la figura 1-9? Para los métodos de almacenamiento interno, considere que el tiempo de acceso dado es por carácter, para los discos suponga que el tiempo es por bloque de 1024 caracteres y para la cinta suponga que el tiempo dado es para el inicio de los datos, con un acceso posterior a la misma velocidad que el acceso al disco. el tiempo para acceder en forma aleatoria a los datos en ella es de cerca de tres órdenes de magnitud más lento. 12. Cuando un programa de usuario realiza una llamada al sistema para leer o escribir en un archivo en disco, proporciona una indicación de qué archivo desea, un apuntador al búfer de datos y la cuenta. Después, el control se transfiere al sistema operativo, el cual llama al driver apropiado. Suponga que el driver inicia el disco y termina hasta que ocurre una interrupción. En el caso de leer del disco, es obvio que el procedimiento que hizo la llamada tiene que ser bloqueado (debido a que no hay datos para leer). ¿Qué hay sobre el caso de escribir en el disco? ¿Necesita ser bloqueado el procedimiento llamador, para esperar a que se complete la transferencia del disco? En cierto sentido, realizar una llamada al sistema es como realizar un tipo especial de llamada a un procedimiento, sólo que las llamadas al sistema entran al kernel y las llamadas a procedimientos no. 13. ¿Qué es una instrucción de trap? Explique su uso en los sistemas operativos. el trap se usa para transferir el control al sistema operativo 14. ¿Cuál es la diferencia clave entre un trap y una interrupción? Cuando ocurre una interrupción, el sistema operativo sólo puede tener unos cuantos microsegundos para realizar cierta acción o de lo contrario, puede perder información crítica. 15. ¿Por qué se necesita la tabla de procesos en un sistema de tiempo compartido? ¿Se necesita también en los sistemas de computadora personal en los que sólo existe un proceso, y ese proceso ocupa toda la máquina hasta que termina? El sistema de tiempo compartido oficial de IBM, conocido como TSS/360, se liberó después de tiempo y cuando por fin llegó era tan grande y lento que pocos sitios cambiaron a este sistema. 16. ¿Existe alguna razón por la que sería conveniente montar un sistema de archivos en un directorio no vacío? De ser así, ¿cuál es? Después de la llamada a mount, se puede tener acceso a un archivo en la unidad 0 con sólo utilizar su ruta del directorio raíz o del directorio de trabajo, sin importar en cuál unidad se encuentre. 17. ¿Cuál es el propósito de una llamada al sistema en un sistema operativo? el propósito principal de un sistema operativo es proveer ciertas abstracciones clave, siendo las más importantes los procesos y hilos, los espacios de direcciones y los archivos. 18. Para cada una de las siguientes llamadas al sistema, proporcione una condición que haga que falle: fork, exec y unlink. En realidad, la llamada al sistema en sí es exec, pero varios procedimientos de biblioteca lo llaman con distintos parámetros y nombres ligeramente diferentes. 19. ¿Podría la llamada cuenta = write(fd, bufer, nbytes); devolver algún valor en cuenta distinto de nbytes? Si es así, ¿por qué? porque Crea un duplicado exacto del proceso original, incluyendo todos los descriptores de archivos. 20. Un archivo cuyo descriptor es fdcontiene la siguiente secuencia de bytes: 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5. Se realizan las siguientes llamadas al sistema: lseek(fd, 3, SEEK_SET); read(fd, &bufer, 4); en donde la llamada lseek realiza una búsqueda en el byte 3 del archivo. ¿Qué contiene buferdespués de completar la operación de lectura? La llamada a fork devuelve un valor, que es cero en el hijo e igual al identificador del proceso (PID) hijo en el padre. 21. Suponga que un archivo de 10 MB se almacena en un disco, en la misma pista (pista #: 50) en sectores consecutivos. El brazo del disco se encuentra actualmente situado en la pista número 100. ¿Cuánto tardará en recuperar este archivo del disco? Suponga que para desplazar el brazo de un cilindro al siguiente se requiere aproximadamente 1 ms y se requieren aproximadamente 5 ms para que el sector en el que está almacenado el inicio del archivo gire bajo la cabeza. Suponga además que la lectura ocurre a una velocidad de 100 MB/s. Para desplazar el brazo a un cilindro aleatoriamente se requieren por lo general de 5 a 10 milisegundos, dependiendo de la unidad. 22. ¿Cuál es la diferencia esencial entre un archivo especial de bloque y un archivo especial de carácter? Los archivos especiales de bloque se utilizan para modelar dispositivos que consisten en una colección de bloques direccionables al azar, tales como los discos. Al abrir un archivo especial de bloque y leer, por decir, el bloque 4, un programa puede acceder de manera directa al cuarto bloque en el dispositivo sin importar la estructura del sistema de archivos que contenga. De manera similar, los archivos especiales de carácter se utilizan para modelar impresoras, módems y otros dispositivos que aceptan o producen como salida un flujo de caracteres. 23. En el ejemplo que se da en la figura 1-17, el procedimiento de biblioteca se llama ready la misma llamada al sistema se llama read. ¿Es esencial que ambos tengan el mismo nombre? Si no es así, ¿cuál es más importante? En su preparación para llamar al procedimiento de biblioteca read, que es quien realmente hace la llamada al sistema read, el programa llamador primero mete los parámetros en la pila, como se muestra en los pasos 1 a 3 de la figura 1-17. 24. El modelo cliente-servidor es popular en los sistemas distribuidos. ¿Puede utilizarse también en un sistema de una sola computadora? Se puede utilizar para un solo equipo o para una red de equipos. 25. Para un programador, una llamada al sistema se ve igual que cualquier otra llamada a un procedimiento de biblioteca. ¿Es importante que un programador sepa cuáles procedimientos de biblioteca resultan en llamadas al sistema? ¿Bajo qué circunstancias y por qué? Cuando un programa de CMS ejecutaba una llamada al sistema, ésta quedaba atrapada para el sistema operativo en su propia máquina virtual, no para VM/370, de igual forma que si se ejecutara en una máquina real, en vez de una virtual. Después, CMS emitía las instrucciones normales de E/S de hardware para leer su disco virtual o lo que fuera necesario para llevar a cabo la llamada. 26. La figura 1-23 muestra que varias llamadas al sistema de UNIX no tienen equivalentes en la API Win32. Para cada una de las llamadas que se listan y no tienen un equivalente en Win32, ¿cuáles son las consecuencias de que un programador convierta un programa de UNIX para que se ejecute en Windows? Tiene muchos parámetros que especifican las propiedades del proceso recién creado. Windows no tiene una jerarquía de procesos como UNIX, por lo que no hay un concepto de un proceso padre y un proceso hijo. Una vez que se crea un proceso, el creador y el creado son iguales. 27. Un sistema operativo portátil se puede portar de la arquitectura de un sistema a otro, sin ninguna modificación. Explique por qué no es factible construir un sistema operativo que sea completamente portátil. Describa dos capas de alto nivel que tendrá al diseñar un sistema operativo que sea altamente portátil. En el primer grupo de ordenadores portátiles tenemos los menos potentes, los denominados netbooks. En este tipo de equipos no deberíamos plantearnos otra opción que no fuera Windows 7 Starter o bien Windows XP que, aun siendo un sistema operativo antiguo, resulta ideal para este tipo de equipos de bajo coste. Si nos decantamos por Linux, podemos optar por alguna distribución específica para este tipo de equipos como puede ser Kuki Linux, compilada especialmente para los Aspire One de Acer, hasta otras más generalistas como Linpus Lite o Joli OS. Explique cómo la separación de la directiva y el mecanismo ayuda a construir sistemas operativos basados en microkernel. Con el diseño de capas, los diseñadores podían elegir en dónde dibujar el límite entre kernel y usuario. Tradicionalmente todos las capas iban al kernel, pero eso no es necesario. De hecho, puede tener mucho sentido poner lo menos que sea posible en modo kernel, debido a que los errores en el kernel pueden paralizar el sistema de inmediato. En contraste, los procesos de usuario se pueden configurar para que tengan menos poder, por lo que un error en ellos tal vez no sería fatal. 29. He aquí algunas preguntas para practicar las conversiones de unidades: (a) ¿A cuántos segundos equivale un microaño? 1 micro año = (1 x 10^-6) x (31,536,000) = 31.536 segundos (b) A los micrómetros se les conoce comúnmente como micrones. ¿Qué tan largo es un gigamicron? (c) ¿Cuántos bytes hay en una memoria de 1 TB? 1 TB ocupa 1012 bytes de almacenamiento (d) La masa de la Tierra es de 6000 yottagramos. ¿Cuánto es eso en kilogramos? 30. Escriba un shell que sea similar a la figura 1-19, pero que contenga suficiente código como para que pueda funcionar y lo pueda probar. También podría agregar algunas características como la redirección de la entrada y la salida, los canales y los trabajos en segundo plano. #define TRUE 1 while (TRUE) { /* se repite en forma indefinida */ type_prompt(); /* muestra el indicador de comando en la pantalla */ read_command(command, parameters); /* lee la entrada de la terminal */ if (fork() !=0) { /* usa fork para el proceso hijo */ } else { } } 31. Si tiene un sistema personal parecido a UNIX (Linux, MINIX, FreeBSD, etcétera) disponible que pueda hacer fallar con seguridad y reiniciar, escriba una secuencia de comandos de shell que intente crear un número ilimitado de procesos hijos y observe lo que ocurre. Antes de ejecutar el experimento, escriba sync en el shell para vaciar los búferes del sistema de archivos al disco y evitar arruinar el sistema de archivos. Nota: No intente esto en un sistema compartido sin obtener primero permiso del administrador del sistema. Las consecuencias serán obvias de inmediato, por lo que es probable que lo atrapen y sancionen. Cuestionario 2 1. En la figura 2-2 se muestran los estados de tres procesos. En teoría, con tres estados podría haber seis transiciones, dos fuera de cada estado. Sin embargo sólo se muestran cuatro transiciones. ¿Existe alguna circunstancia en la que una o ambas de las transiciones faltantes pudiera ocurrir? *No ya que si llegará a bloquearse el sistema se detendrian los demás procesos. 2. Suponga que debe diseñar una arquitectura de computadora avanzada que hiciera conmutación de procesos en el hardware, en vez de tener interrupciones. ¿Qué información necesitaría la CPU? Describa cómo podría trabajar la conmutación de procesos por hardware. *Para obtener una precisión completa, debemos recalcar que el modelo probabilístico que acabamos de describir es sólo una aproximación. Supone en forma implícita que los n procesos son independientes, lo cual significa que es bastante aceptable para un sistema con cinco procesos en memoria. 3. En todas las computadoras actuales, al menos una parte de los manejadores de interrupciones se escriben en lenguaje ensamblador. ¿Por qué? 4. Cuando una interrupción o una llamada al sistema transfiere el control al sistema operativo, por lo general se utiliza un área de la pila del kernel separada de la pila del proceso interrumpido. ¿Por qué? *Por que la pila del proceso se desactiva y la del kernel va arreglando el problema. 5. Varios trabajos se pueden ejecutar en paralelo y terminar con más rapidez que si se hubieran ejecutado en secuencia. Suponga que dos trabajos, cada uno de los cuales necesita 10 minutos de tiempo de la CPU, inician al mismo tiempo. ¿Cuánto tiempo tardará el último en completarse, si se ejecutan en forma secuencial? ¿Cuánto tiempo si se ejecutan en paralelo? Suponga que hay 50% de espera de E/S. *El último tardará aproximadamente 12 minutos ya que el cpu inició al mismo tiempo. 6. En el texto se estableció que el modelo de la figura 2-11(a) no era adecuado para un servidor de archivos que utiliza una memoria caché. ¿Por qué no? ¿Podría cada proceso tener su propia caché? *Por que Cuando se ejecuta un proceso con multihilamiento en un sistema con una CPU, los hilos toman turnos para ejecutarse. 7. Si un proceso con multihilamiento utiliza la operación fork, ocurre un problema si el hijo obtiene copias de todos los hilos del padre. Suponga que uno de los hilos originales estaba esperando la entrada del teclado. Ahora hay dos hilos esperando la entrada del teclado, uno en cada proceso. ¿Acaso ocurre este problema en procesos con un solo hilo? *No, ya que si el proceso es con un sólo hilo no habría interferencia ni conflicto. 8. En la figura 2-8 se muestra un servidor Web con multihilamiento. Si la única forma de leer un archivo es la llamada al sistema read normal con bloqueo, ¿cree usted que se están usando hilos a nivel usuario o hilos a nivel kernel para el servidor Web? ¿Por qué? *Utiliza hilos nivel cliente ya que va y busca en los datos del disco en procesos. 9. En el texto describimos un servidor Web con multihilamiento, mostrando por qué es mejor que un servidor con un solo hilo y que un servidor de máquina de estados finitos. ¿Hay alguna circunstancia en la cual un servidor con un solo hilo podría ser mejor? Dé un ejemplo. *Sería mejor por que no habría choque en proceso. Ejemplo si esta buscando un archivo y tiene un servidor de 1 sólo hilo la búsqueda sería más rapida. 10. En la figura 2-12, el conjunto de registros se lista por hilos, en vez de por procesos. ¿Por qué? Después de todo, la máquina sólo tiene un conjunto de registros. *Porque un hilo puede estar en uno de varios estados: en ejecución, bloqueado, listo o terminado. Por eso presenta el listado por hilos. 11. ¿Por qué un hilo otorgaría de manera voluntaria la CPU al llamar a thread_yield? Después de todo, como no hay una interrupción periódica de reloj, tal vez nunca obtenga la CPU de vuelta. * es importante que los hilos sean amables y entreguen de manera voluntaria la CPU de vez en cuando, para dar a otros hilos la oportunidad de ejecutarse. 12. ¿Puede darse alguna vez el apropiamiento de un hilo mediante una interrupción de reloj? De ser así, ¿bajo qué circunstancias? Si no es así, ¿por qué no? *Si, por que en una de las interrupciones se puede apropiarse un proceso ya que esta libre. 13. En este problema debe comparar la lectura de un archivo, utilizando un servidor de archivos con un solo hilo y un servidor multihilado. Se requieren 15 mseg para obtener una petición, despacharla y realizar el resto del procesamiento necesario, suponiendo que los datos necesarios están en la caché del bloque. Si se necesita una operación de disco, como es el caso una tercera parte del tiempo, se requieren 75 mseg adicionales, durante los cuales el hilo duerme. ¿Cuántas peticiones por segundo puede manejar el servidor, si es de un solo hilo? ¿Si es multihilado? 14. ¿Cuál es la mayor ventaja de implementar hilos en espacio de usuario? ¿Cuál es la mayor desventaja? *Que permite que cada hilo tenga su propio algoritmo, también se escalan mejor, ya que los hilos del kernel requieren sin duda algo de espacio en la tabla y en la pila del kernel, lo cual puede ser un problema si hay una gran cantidad de hilos. 15. En la figura 2-15, las creaciones de hilos y los mensajes impresos por los mismos se intercalan al azar. ¿Hay alguna forma de forzar el orden para que sea estrictamente: hilo 1 creado, hilo 1 imprime mensaje, hilo 1 termina, hilo 2 creado, hilo 2 imprime mensaje, hilo 2 termina, y así en lo sucesivo? De ser así, ¿cómo se puede hacer? Si no es así, ¿por qué no? 16. En el análisis de las variables globales en hilos, utilizamos un procedimiento llamado crear_global para asignar espacio para un apuntador a la variable, en vez de la misma variable. ¿Es esto esencial o podrían trabajar los procedimientos con los valores en sí mismos de igual forma? 17. Considere un sistema en el cual los hilos se implementan por completo en espacio de usuario, en donde el sistema en tiempo de ejecución obtiene una interrupción de reloj una vez por segundo. Suponga que ocurre una interrupción de reloj mientras un hilo se ejecuta en el sistema en tiempo de ejecución. ¿Qué problema podría ocurrir? ¿Puede usted sugerir una forma de resolverlo? *Se perdería el proceso o presentaría un error en el proceso al volver el reloj. 18. Suponga que un sistema operativo no tiene algo parecido a la llamada al sistema select para ver por adelantado si es seguro leer de un archivo, canal o dispositivo, pero que sí permite establecer relojes de alarma que interrumpen las llamadas bloqueadas al sistema. ¿Es posible implementar un paquete de hilos en espacio de usuario bajo estas condiciones? Explique. *Pienso que si se puede ya que se puede configurar un hilo para que inicie las busquedas. 19. ¿Puede el problema de inversión de prioridades que vimos en la sección 2.3.4 ocurrir con hilos a nivel usuario? ¿Por qué si o por qué no? *No por que se perderían algunos de los procesos iniciados. 20. En la sección 2.3.4 se describió una situación con un proceso de alta prioridad H y un proceso de baja prioridadL, que ocasionaba que H iterara en forma indefinida. ¿Ocurre el mismo problema si se utiliza la planificación por turno circular en vez de la planificación por prioridad? Explique. 21. En un sistema con hilos, ¿hay una pila por cada hilo o una pila por cada proceso cuando se utilizan hilos a nivel usuario? ¿y cuando se utilizan hilos a nivel de kernel? Explique. *Hay una pila por cada hilo. En el kernel se utilizan los hilos para iniciar provesos. 22. Cuando se está desarrollando una computadora, por lo general primero se simula mediante un programa que ejecuta una instrucción a la vez. Incluso hasta los multiprocesadores se simulan estrictamente en forma secuencial como ésta. ¿Es posible que ocurra una condición de carrera cuando no hay eventos simultáneos como éste? 23. ¿Funciona la solución de espera ocupada en la que se utiliza la variable turno (figura 2-23) cuando los dos procesos se ejecutan en un multiprocesador con memoria compartida, es decir, dos CPU que comparten una memoria común? 24. La solución de Peterson al problema de exclusión mutua que se muestra en la figura 2-24, ¿funciona cuando la planificación es apropiativa? ¿Y qué pasa cuando es no apropiativa? 25. Dé un bosquejo acerca de cómo un sistema operativo que puede deshabilitar interrupciones podría implementar semáforos. 26. Muestre cómo pueden implementarse los semáforos contadores (es decir, semáforos que pueden contener un valor arbitrario) utilizando sólo semáforos binarios e instrucciones de máquina ordinarias. Si el programa opera en fases y ningún proceso puede entrar en la siguiente fase hasta que haya terminado con la fase actual, tiene todo el sentido de utilizar una barrera. 27. Si un sistema sólo tiene dos procesos, ¿tiene sentido utilizar una barrera para sincronizarlos? ¿Por qué sí o por qué no? Con el formato round robin funciona. Tarde o temprano se ejecutará, y, finalmente, dejará su región crítica. El punto es, con planificación por prioridades, nunca llega a funcionar en absoluto; con round robin, se pone una cantidad de tiempo normal periódicamente, por lo que tiene la oportunidad de salir de su región crítica. 28. ¿Pueden dos hilos en el mismo proceso sincronizarse mediante un semáforo de kernel, si los hilos son implementados por el kernel? ¿Qué pasa si se implementan en espacio de usuario? Suponga que ningún hilo de ningún otro proceso tiene acceso al semáforo. Analice sus respuestas. Con los hilos del kernel, un hilo se puede bloquear en un semáforo y el kernel puede ejecutar algún otro hilo en el mismo proceso. En consecuencia, no hay ningún problema utilizando semáforos. Con hilos a nivel de usuario, cuando un hilo se bloquea en un semáforo, el kernel piensa que todo el proceso se bloquea y no lo ejecuta Nunca más. En consecuencia, el proceso falla. 29. La sincronización con monitores utiliza variables de condición y dos operaciones especiales: waity signal. Una forma más general de sincronización tendría que tener una sola primitiva, waituntil, que tuviera un predicado booleano arbitrario como parámetro. Así, podríamos decir por ejemplo: waituntilx< 0 o y _ z < n La primitiva signalno sería ya necesaria. Es evidente que este esquema es más general que el de Hoare o Brinch Hansen, pero no se utiliza. ¿Por qué no? Sugerencia: Considere la implementación. Es muy dificil de implementar. Cada vez que cualquier variable aparece, sobre la que algún proceso está esperando cambios, el sistema en ejecución debe reevaluar, para ver si el proceso puede ser desbloqueado. Con el Hoare y monitores Brinch Hansen, los procesos sólo pueden ser despertados en una señal primitiva. 30. Un restaurante de comida rápida tiene cuatro tipos de empleados: (1) los que toman pedidos de los clientes; (2) los cocineros, que preparan la comida; (3) los especialistas de empaquetado, que meten la comida en bolsas; y (4) los cajeros, que entregan las bolsas a los clientes y reciben su dinero. Cada empleado puede considerarse como un proceso secuencial comunicativo. ¿Qué forma de comunicación entre procesos utilizan? Relacione este modelo con los procesos en UNIX. Los empleados se comunican mediante el paso de mensajes. En términos UNIX, los cuatro procesos están conectadas. 31. Suponga que tenemos un sistema de paso de mensajes que utiliza buzones. Al enviar a un buzón lleno o al tratar de recibir de uno vacío, un proceso no se bloquea. En vez de ello, recibe de vuelta un código de error. Para responder al código de error, el proceso sólo vuelve a intentar, una y otra vez, hasta tener éxito. ¿Produce este esquema condiciones de carrera? No conduce a condiciones de carrera (no se pierda nada), pero es tiempo de espera. 32. Las computadoras CDC 6000 podían manejar hasta 10 procesos de E/S en forma simultánea, utilizando una forma interesante de planificación por turno circular conocida como compartición del procesador. Se llevaba a cabo una conmutación de procesos después de cada instrucción, por lo que la instrucción 1 provenía del proceso 1, la instrucción 2 del proceso 2, etcétera. La conmutación de procesos se realizaba mediante hardware especial y la sobrecarga era de cero. Si un proceso necesitaba T segundos para completarse en ausencia de competencia, ¿cuánto tiempo necesitaría si se utilizara la compartición del procesador con n procesos? Se necesitará nTseg. 33. ¿Puede una medida determinar, analizando el código fuente, si un proceso es más probable que esté limitado a CPU o limitado a E/S? ¿Cómo puede determinarse esto en tiempo de ejecución? Si se produce un proceso varias veces en la lista, se obtendrán múltiples ciclos. Este enfoque podría ser utilizado para dar a los procesos más importantes mas espacio en la CPU. Pero cuando los procesos se bloquean, todas las entradas se eliminarían de la lista de procesos ejecutables. 34. En la sección “Cuándo se deben planificar” se mencionó que algunas veces la planificación se podría mejorar si un proceso importante pudiera desempeñar un papel al seleccionar el siguiente proceso a ejecutar al bloquearse. Mencione una situación en la que se podría utilizar esto y explique cómo. Para varios procesos en una seccion, el padre común podría pasar a la información del sistema operativo sobre el flujo de datos. Con esta información el OS podría, por ejemplo, determinar qué proceso podría suministrar la salida a un proceso de bloqueo en una llamada de entrada. 35. Las mediciones de cierto sistema han demostrado que el proceso promedio se ejecuta durante un tiempoTantes de bloquearse debido a una operación de E/S. Una conmutación de procesos requiere de un tiempo S, es efectivamente desperdiciado (sobrecarga). Para la planificación por turno circular con un quántum Q, proporcione una fórmula para la eficiencia de la CPU en cada uno de los siguientes casos: (a) Q _ ∞ (b) Q >T (c) S <Q <T (d) Q _ S (e) Q cercano a 0 La eficiencia de la CPU es el tiempo de CPU útil dividida por el tiempo total de CPU. Cuando Q ≥ T, el ciclo básico es que el proceso se ejecute para T y someterse a un interruptor de proceso para S. Por lo tanto (a) y (b) tienen una eficiencia de T (S + T) /. Cuando la cuantía es inferior a T, cada serie T, se requiere proceso de T / Q interruptores, desperdiciando un tiempo de ST / Q. La eficacia aquí es entonces T + ST / Q 33333T3333 lo que reduce a Q / (Q + S), que es la respuesta a (c). Para (d), sólo sustituimos Q para S y se encontró que la eficiencia es del 50 por ciento. Por último, para (e), como Q → 0 la eficiencia va a 0. 36. Hay cinco trabajos en espera de ser ejecutados. Sus tiempos de ejecución esperados son 9, 6, 3, 5 y X. ¿En qué orden se deben ejecutar para minimizar el tiempo de respuesta promedio? (Su respuesta dependerá de X). Los procesos más cortos primeros, es la forma de minimizar el tiempo de respuesta promedio. 0 <X ≤ 3: X, 3, 5, 6, 9. 3 <X ≤ 5: 3, X, 5, 6, 9. 5 <X ≤ 6: 3, 5, X, 6, 9. 6 <X ≤ 9: 3, 5, 6, X, 9. X> 9: 3, 5, 6, 9, X. 37. Cinco trabajos de procesamiento por lotes, A aE, llegan a un centro de cómputo casi al mismo tiempo. Tienen tiempos de ejecución estimados de 10, 6, 2, 4 y 8 minutos. Sus prioridades (determinadas en forma externa) son 3, 5, 2, 1 y 4, respectivamente, en donde 5 es la prioridad más alta. Para cada uno de los siguientes algoritmos de planificación, determine el tiempo de respuesta de proceso promedio. Ignore la sobrecarga por conmutación de procesos. a) Por turno circular. b) Por prioridad. c) Primero en entrar, primero en ser atendido (ejecutados en el orden 10, 6, 2, 4, 8). d) El trabajo más corto primero. Para (a), suponga que el sistema es multiprogramado y que cada trabajo recibe su parte equitativa de la CPU. Para los incisos del (b) al (d), suponga que sólo se ejecuta un trabajo a la vez hasta que termina. Todos los trabajos están completamente ligados a la CPU. Por turno circular, durante los primeros 10 minutos de cada trabajo se pone 1/5 de la CPU. A el final de los 10 minutos, C termina. Durante los siguientes 8 minutos, cada trabajo se 1/4 de la CPU, tiempo después del cual D termina. Entonces cada uno de los tres restantes empleos consigue 1/3 de la CPU durante 6 minutos, hasta que termina B, y así sucesivamente. Los tiempos de acabado para los cinco puestos de trabajo son de 10, 18, 24, 28 y 30, para un promedio de 22 minutos. Por prioridad, B está dirigido en primer lugar. Después de 6 minutos es terminado. El resto de trabajos a los 14, 24, 26 y 30, para un promedio de 18,8 minutos. Si los trabajos se ejecutan en el orden de llegada, sería un promedio de 19,2 minutos. Por último, el trabajo mas corto, con un promedio de 14 minutos. 38. Un proceso que se ejecuta en un CTSS necesita 30 quántums para completarse. ¿Cuántas veces se debe intercambiar, incluyendo la primera vez (antes de que se haya ejecutado siquiera)? La primera vez que se pone 1 quántum. En carreras sucesivas se pone 2, 4, 8, y 15, por lo que debe ser intercambiada en 5 veces. 39. ¿Puede idear una forma de evitar que el sistema de prioridades CTSS sea engañado por los retornos de carro? Se podría hacer una verificación para ver si el programa del que se esperaba entrada se ejecutó o no se ejecutó. Un programa que no espera entrada no obtendría ninguna prioridad especial. 40. El algoritmo de envejecimiento con a _ 1/2 se utiliza para predecir los tiempos de ejecución. Las cuatro ejecuciones anteriores, de la más antigua a la más reciente, son de 40, 20, 40 y 15 mseg. ¿Cuál es la predicción del siguiente tiempo? La secuencia de las predicciones es 40, 30, 35, y ahora 25. 41. Un sistema de tiempo real suave tiene cuatro eventos periódicos con periodos de 50, 100, 200 y 250 mseg cada uno. Suponga que los cuatro eventos requieren 35, 20, 10 y x mseg de tiempo de la CPU, respectivamente. ¿Cuál es el mayor valor de x para que el sistema sea planificable? La fracción de la CPU utilizado es 35/50 + 20/100 + 10/200 + x / 250. Para ser planificable, este debe ser menor que 1. Por lo tanto x debe ser inferior a 12,5 m seg. 42. Explique por qué se utiliza comúnmente la planificación de dos niveles. Se necesita programación de dos niveles cuando la memoria es demasiada pequeña para contener todos los procesos listos. Un conjunto de ellos se pone en la memoria, y una elección se hace de ese conjunto. De vez en cuando, se ajusta el conjunto de procesos en el núcleo. Este algoritmo es fácil de implementar y razonablemente eficiente, sin duda mucho mejor que digamos, todos contra todos, sin tener en cuenta si un proceso se encontraba en memoria o no. 44. Considere un sistema en el que se desean separar la política y el mecanismo para la planificación de hilos de kernel. Proponga una manera de lograr este objetivo. El kernel podría programar procesos por cualquier medio que desee, pero dentro de cada proceso se