apoyo del sistema operativo veremos en este capīıtulo

56
CAPITULO 7: APOYO DEL SISTEMA OPERATIVO Veremos en este cap´ ıtulo: 1. Introducci´ on, 2. La capa del sistema operativo, 3. Protecci´ on, 4. Procesos y hebras, 5. Comunicaci´ on e invocaci´ on, 6. Arquitectura de un sistema operativo. 7. Virtualizacion en el nivel del sistema operativo 8. Resumen Se describe c´ omo el middleware se apoya en el sistema operativo de cada uno de los nodos. El sistema operativo facilita la protecci´ on y encapsulaci´ on de recursos dentre de servidores, y da apoyo a la comunicaci´ on y planificaci´ on (scheduling) necesarias para la “invocaci´ on” Se analizan tambi´ en las ventajas y desventajas de colocar c´ odigo en el kernel o el nivel de usuario.

Upload: dinhthien

Post on 09-Dec-2016

215 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

CAPITULO 7:APOYO DEL SISTEMA OPERATIVO

Veremos en este capıtulo:

1. Introduccion,

2. La capa del sistema operativo,

3. Proteccion,

4. Procesos y hebras,

5. Comunicacion e invocacion,

6. Arquitectura de un sistema operativo.

7. Virtualizacion en el nivel del sistema operativo

8. Resumen

Se describe como el middleware se apoya en elsistema operativo de cada uno de los nodos.

El sistema operativo facilita la proteccion yencapsulacion de recursos dentre de servidores, yda apoyo a la comunicacion y planificacion(scheduling) necesarias para la “invocacion”

Se analizan tambien las ventajas y desventajas decolocar codigo en el kernel o el nivel de usuario.

Page 2: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Y por ultimo, se estudia el diseno eimplementacion de sistemas de comunicacion y deproceso multihebra.

2

Page 3: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

7.1 Introduccion

Un aspecto importante de los sistemas operativosdistribuidos es la comparticion de recursos.

A menudo los clientes y los recursos estan ennodos (o al menos procesos) distintos. Elmiddleware provee el enlace entre ambos.

Y por debajo del middleware esta el sistemaoperativo, que es el objetivo de este capıtulo.Analizaremos la relacion entre ambos.

El middleware necesita que el SO le de accesoeficiente y robusto a los recursos fısicos, con laflexibilidad necesaria para implementar distintasreglas (policies) de gestion de recursos.

Todo sistema operativo no hace mas queimplementar abstracciones del hardware basico:procesos para abstraer el procesador, canales paraabstraer las lıneas de comunicacion, segmentospara abstraer la memoria central, ficheros paraabstraer la memoria secundaria, etc.

Es interesante contraponer los sistemasoperativos de red frente a los verdaderossistemas operativos distribuidos.

3

Page 4: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Tanto UNIX como Windows NT son sistemasoperativos de red. Aunque se pueda acceder aficheros remotos de manera en gran medida“transparente”.

Pero lo que distingue a los sistemas operativos dered frente a los verdaderos sistemas operativosdistribuidos es que cada uno de los sistemasoperativos locales mantiene su propia autonomıaen cuanto a la gestion de sus propios recursos.

Por ejemplo, aunque un usuario pueda hacerrlogin, cada copia del sistema operativoplanifica sus propios procesos.

Por contra, se podrıa tener una unica imagen desistema en el ambito de toda la red. El usuariono sabrıa donde ejecutan sus procesos, dondeestan almacenados sus ficheros, etc.

Por ejemplo, el sistema operativo podrıa decidircrear un nuevo proceso en el nodo menos cargado.

4

Page 5: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Sistemas Operativos de red yMiddleware

De hecho, no hay sistemas operativos distribuidosde uso generico, solo sistemas operativos de red

Y es posible que sea ası en el futuro, por dosrazones principales: Que hay mucho dineroinvertido en (aplicaciones) software tradicionalque son muy eficientes, y que los usuariosprefieren tener un cierto grado de autonomıasobre sus propias maquinas.

La combinacion de middleware y sistemaoperativo de red es un buen termino medio quepermite, tanto usar las aplicaciones de la maquinapropia, como acceder de manera transparente arecursos de la red.

5

Page 6: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

7.2 La capa del sistema operativo

En cada nodo hay un hardware propio sobre elque ejecuta un SO especıfico con su kernel yservicios asociados —bibliotecas, por ejemplo—

Y el middleware usa una combinacion de losrecursos locales para implementar los mecanismosde invocacion remota entre objetos (recursos) yprocesos (clientes).

– figura 7.1

La figura muestra como una capa unica demiddleware se apoya en distintos S.O. paraproveer una infraestructura distribuida paraaplicaciones y servicios.

Para que el middleware realice su trabajo, ha deutilizar kernels y procesos servidores. Y ambosdeben de ser capaces de ofrecer:

• Encapsulacion: Separar el “que” del “como”.Interfaz sencilla y util.

• Proteccion: frente a los accesos no permitidos

• Proceso concurrente: Para aumentar elrendimiento (con “transparencia” deconcurrencia)

6

Page 7: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Los recursos se acceden por los programas clientesbien mediante llamada remota a un servidor, obien mediante llamada al sistema en un kernel.En los dos casos se llama una invocacion.

Una combinacion de bibliotecas del sistema,kernels y servidores, se encarga de realizar la:

• Comunicacion de parametros de la operacionen un sentido, y de los resultados en el otro

• Planificacion de la operacion invocada, ya seadel kernel o de un servidor.

– figura 7.2

La figura muestra la funcionalidad basica que nosinteresa: gestor de procesos, gestor de hebras, ...

El software del SO se disena para que seatransportable en gran medida, y por ello seprograma casi todo en algun lenguaje de altonivel (C, C++, Modula-3, etc.).

7

Page 8: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

A veces, el nodo es multiprocesador (con memoriacompartida) y tiene un kernel especial que escapaz de ejecutar en el.

Puede haber tambien algo de memoria privadapor procesador. Y lo mas usual es la arquitecturasimetrica, con todos los procesadores ejecutandoel mismo kernel y compartiendo estructuras dedatos claves como la cola de procesos listos paraejecutar.

En sistemas distribuidos, la alta capacidad decomputo de un multiprocesador viene bien paraimplementar servidores de altas prestaciones (unabase de datos con acceso compartido y simultaneopor parte de muchos clientes, por ejemplo).

8

Page 9: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Las partes basicas de un SO son pues:

• Gestor de procesos basicos: un espacio dememoria y una o mas hebras

• Gestor de hebras, con creacion, sincronizaciony planificacion de hebras.

• Normalmente, solo comunicaciones locales,entre hebras de distintos procesos

• Gestor de memoria: gestion de memoria fısicay logica

• Supervisor: interrupciones y desvıos. Gestionde MMUs y caches hardware. Gestion deregistros generales, procesador principal yprocesador de coma flotante

9

Page 10: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

7.3 Proteccion

Tanto si es por malicia como si es por error.

Y tanto a operaciones no permitidas como aoperaciones “inexistentes” (datos internos).

Lo segundo podrıa evitarse programando enlenguajes de alto nivel con comprobacion de tipos(control de acceso), pero no suele ser este el caso.

Kernels y proteccion

El kernel o nucleo es un programa que ejecutacon control total de la maquina. Y suele impedirque otro codigo no privilegiado lo use, pero aveces deja que los servidores accedan a ciertosrecursos fısicos (registros de dispositivosperifericos, por ejemplo).

La mayor parte de los procesadores tiene unregistro cuyo contenido determina si se puedenejecutar instrucciones privilegiadas en esemomento o no. El kernel trabaja en modoprivilegiado y asegura que el resto del codigotrabaje en modo usuario

El kernel establece tambien espacios dedirecciones para garantizar la proteccion, y

10

Page 11: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

maneja la “unidad de gestion de memoria” (tablade paginacion).

Un espacio de direcciones es un conjunto de zonascontiguas de memoria logica, cada una con suspropios derechos de acceso (lectura, escritura,ejecucion, ...). Y un proceso no puede accederfuera de su espacio de direcciones.

Cuando un proceso pasa de ejecutar en modousuario a ejecutar codigo del kernel, su espacio dedirecciones cambia.

El paso de modo usuario a modo kernel se hacede manera segura ejecutando una instruccionespecial TRAP de llamada al sistema que:

• Cambia el contador de programa

• Pasa el procesador a modo privilegiado osupervisor

• Establece el espacio de direcciones del kernel

• Realiza de hecho enlace dinamico

La proteccion obliga a pagar un precio eneficiencia. La llamada al sistema es mas costosaque la llamada a una subrutina

11

Page 12: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

7.4 Procesos y hebras

El proceso de UNIX resulto “caro” en tiempo decreacion y sobre todo, multiplexacion.

Un segundo nivel de multiplexacion: hebras.Comparten el mismo espacio de memoria.

Ahora un proceso es hebras mas un entorno deejecucion (espacio de memoria mas mecanismosde sincronizacion y de comunicacion, comopuertos).

La concurrencia (de hebras) permite alcanzar maseficiencia (quitar cuellos de botella en servidores,por ejemplo), y tambien simplificar laprogramacion.

Confusion terminologica: procesos, tareas, hebras,procesos ligeros (y pesados).

“La jarra cerrada con comida y aire y conmoscas.”

12

Page 13: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

7.4.1 Espacios de direcciones

Lo mas caro de crear y gestionar de un entornode ejecucion.

Suele ser grande (32 y hasta 64 bits de direccion),y formado por varias regiones, trozos contiguosde memoria logica separados por areas dememoria logica inaccesibles.

– Figura 7.3

Es una ampliacion de la memoria paginadatradicional, no de la segmentacion.

Pero de alguna manera simula la segmentacion, abase de usar un espacio logica “discontinuo”.

Tiene implicaciones en el hardware (TLB): Tablasde paginas muy grandes y ”dispersas”.

Cada region consta de un numero completo depaginas y tiene:

• Posicion y tamano

• Permisos de acceso(lectura/escritura/ejecucion)

• “Extension” o no y sentido (hacia arriba ohacia abajo)

13

Page 14: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Permite dejar “huecos” suficientemente grandespara que las regiones crezcan. Pero hay lımites(no como en segmentacion).

De todas maneras, se va a direcciones de 64 bits. . . Meditar que significa esto.

Tradicionalmente, en UNIX habıa codigo,“monton” y pila.

Lo primero, ahora, que se pueden crear nuevasregiones para pilas de flujos concurrentes(problema de las llamadas a subrutinas y la “pilacactus”). Ası se controla mejor si se desbordan,que poniendolas en el monton del proceso.

Tambien, al tener numero variable de regiones, sepueden asociar ficheros de datos (no solo decodigo y datos binarios) en memoria logica (ideatambien original de MULTICS, curiosamente . . . ).

14

Page 15: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Por ultimo, se pueden tener regionescompartidas para:

• Bibliotecas del sistema: Se ponen en una unicaregion que se asocia con todos los procesos. Seahorra mucha memoria central y secundaria.

• Kernel: Cuando se produce una excepcion odesvıo, no hay que cambiar el espacio dedirecciones, solo las protecciones de suspaginas.

• Comparticion de datos y comunicacion entreprocesos o con el kernel: mucho mas eficienteque mediante mensajes.

7.4.2 Creacion de un nuevo proceso

Tradicionalmente, en UNIX hay fork y exec:Explicarlas.

En un sistema distribuido se puede diferenciarentre:

• Escoger el computador donde ponerlo.

• La creacion de un entorno de ejecucion

• La creacion de la hebra inicial

15

Page 16: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Elegir el computador explıcitamente, o que seescoja automaticamente (bien para equilibrar lacarga, o siempre el local).

La explıcita no es transparente, pero puedenecesitarse para tolerancia a fallos o para usarcomputadores especıficos.

La implıcita puede usar reglas estaticas o reglasdinamicas. Y las reglas estaticas pueden serdeterministas o probabilistas.

El reparto de carga puede ser centralizado,jerarquico o descentralizado.

Y hay tambien algoritmos iniciados por elemisor e iniciados por el receptor

Los segundos son mejores para hacer migracionde procesos.

Que en todo caso se utiliza muy poco por su grancomplejidad de implementacion (sobre todo, porla gran dificultad de la recoleccion del estado deun proceso en un kernel tradicional).

16

Page 17: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

(Cluster: conjunto de hasta miles decomputadores estandar conectados por una redlocal de alta velocidad: Caso dewww.Google.com).

Creacion de un nuevo entorno deejecucion

Espacio de direcciones con valores iniciales (yquizas otras cosas como ficheros abiertospredefinidos).

Iniciado explıcitamente, dando valores para lasregiones (normalmente sacados de ficheros), oheredado del “padre”. El caso de UNIX(explicarlo) se puede generalizar para masregiones, controlando cuales se heredan y cualesno.

La herencia puede ser por copia o porcomparticion.

Si es por comparticion, simplemente se ajustanlas tablas de paginas.

Cuando es por copia, hay una optimizacionimportante: “copia en la escritura”

– Figura 7.4

17

Page 18: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Explicarlo con las regiones RA y RB. Suponemosque las paginas residen en memoria.

Viene de UNIX de Berkeley (vfork).

La herencia de puertos da problemas, sinembargo. Se suele arrancar con un conjunto deellos predefinido, que comunican con “ligadores”de servicios.

7.4.3 Hebras

– Figura 7.5

Fijemonos primero en el servidor multihebra.

Supongamos inicialmente 2 ms. de CPU y 8 dedisco, lo cual da 100 servicios (1000/(2+8)) porsegundo con una unica hebra.

Si ahora ponemos dos hebras, sube a 125(1000/8) servicios. Importante resaltar que, enrealidad, ya tenemos un “multiprocesador”aunque solo haya una CPU.

Si ahora tenemos cache del disco, con un 75% deaciertos, ¡500 servicios! (hace falta que siemprehaya hebras listas).

En realidad, puede que el tiempo de CPU haya

18

Page 19: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

subido ahora. Supongamos que sea de 2,5 ms.Aun tenemos entonces 400 servicios.

Si ahora ponemos otra CPU, con las hebrasejecutadas por cualquiera de las dos CPUs,volvemos a 444 servicios con dos hebras, y a 500servicios con tres hebras o mas.

Las hebras son utiles tambien para los clientes, nosolo para los servidores.

Arquitecturas de servidores multihebra

Una posibilidad es la arquitectura del banco detrabajadores

– Figura 7.5

La cola puede tener prioridades (o puede habervarias colas).

Otras, las de hebra por peticion, hebra porconexion y hebra por objeto

– Figura 7.6

Las dos ultimas ahorran en gastos de creacion ydestruccion de hebras, pero pueden dar lugar aesperas.

Los modelos han sido expuestos en el contexto de

19

Page 20: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

CORBA, pero son generales.

Son modelos “estandar” en programacionconcurrente, en todo caso.

Hebras dentro de los clientes

Las hebras son utiles tambien para los clientes, nosolo para los servidores.

– Figura 7.5

El cliente no necesita respuesta.

Pero la llamada remota suele bloquear al cliente,incluso cuando no hace falta esperar.

Con este esquema solo se le bloquea cuando sellena el buffer.

Otro ejemplo tıpico de clientes multihebra son loshojeadores (browsers) web, donde es esencial quese puedan gestionar varias peticiones de paginasal mismo tiempo debido a lo lento que se suelenrecibir.

20

Page 21: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Hebras frente a multiples procesos

Las hebras son mucho mas eficientes enmultiplexacion (y creacion y destruccion) yademas permiten comparticion eficiente derecursos (memoria y otros).

Estados de procesos y hebras

– Figura 7.7

Al ser el estado de las hebras menor, su creaciony, sobre todo, su multiplexacion, es menoscostosa. (Pero programar con hebras es masdifıcil y produce mas errores —¡desde luego!—).

En la creacion y destruccion, 11 ms. frente a 1ms.

El cambio de contexto supone el cambio deestado (registros) del procesador y el cambio dedominio (espacio de direcciones y modo deejecucion del procesador).

Lo que mas cuesta es el cambio de dominio.

21

Page 22: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Si son hebras del mismo proceso, o llamada alkernel estando este en el mismo espacio dememoria, no hay cambio de dominio. Si es entrediferentes procesos (o entre espacio de usuario yde kernel), sin embargo, es mucho mas costoso.

1,8 ms. entre procesos y 0,4 ms. entre hebras delmismo proceso. Diez veces menos si no hay que iral kernel (planificador de hebras en espacio deusuario).

Y esta tambien el problema de las tablas depaginas y la cache. Explicar caches direccionadaslogica y fısicamente. Importante.

Tambien eficiencia adicional por comunicacion atraves de memoria compartida (¡y peligro!).

22

Page 23: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Programacion con hebras

Es la programacion concurrente tradicional, soloque en un nivel de abstraccion muy bajo. Haylenguajes que permiten subir el nivel: Ada95,Modula-3, Java, etc.

Los mismos problemas y soluciones clasicos:carreras, regiones crıticas, semaforos, cerrojos,condiciones, etc.

Varias versiones: C threads (Mach), “Procesosligeros” de SunOS, Solaris threads, Java threads,. . .

En Java hay metodos para crear, destruir ysincronizar hebras.

– Figura 7.8

Vida de las hebras

Las hebras nacen en la misma maquina virtual(JVM, Java es un lenguaje interpretado) que suprogenitor, y en el estado SUSPENDED.

El metodo start() les arranca, y empiezan aejecutar el codigo del metodo run().

23

Page 24: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Tanto JVM como las hebras que tiene ejecutansobre el SO subyacente.

Hay prioridades (setPriority)... ¿hayprioridades realmente?...

El final de run() o destroy() acaba la vida delas hebras.

Las hebras pueden agruparse. Los grupos sonutiles para proteccion y para gestion deprioridades (“techo” de prioridad por grupo).

Sincronizacion de las hebras

Las variables globales del proceso son compartidaspor las hebras. Solo tienen copias propias de lapila y de las variables locales de las subrutinas.

En Java, los metodos puede ser synchronized yentonces se ejecutan con exclusion mutua de otrosmetodos sincronizados para el mismo objeto (oclase, si son metodos de clase).

Tambien se pueden sincronizar (solo) bloquesdentro de un metodo, y no el metodo entero.

24

Page 25: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Hay tambien “senales” para realizarsincronizacion “productor/consumidor”. Conmetodos predefinidos wait y notify (ynotifyAll).

Y tambien join e interrupt

– Figura 7.9

Otros mecanismos como semaforos puedenimplementarse encima.

Tambien se pueden mezclar metodossincronizados y no sincronizados dentro de lamisma clase. Esto no es lectores/escritores, ¡ojo!

Y solo hay una condicion por objeto.

Y no se usa el modelo de “cascara de huevo”...

25

Page 26: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Planificacion de hebras

Expulsiva (preemptive) o no expulsiva(non-preemptive).

La segunda garantiza exclusion mutua. Laprimera es necesaria para tiempo real ymultiprocesadores.

Con la segunda se suele usar yield para evitar elmonopolio.

Hay una nueva version de Java para tiempo real(crıtico, Hard Real-time programming).

En tiempo real suele hacer falta un mayor controlde la planificacion: planificador como parte de laaplicacion (al estilo de Modula-2).

Implementacion de Hebras

Una forma, como parte de la biblioteca delsistema. Ejecuta en el nivel de usuario. Es lo quese hace en los procesos ligeros de SunOS. Elkernel no sabe de hebras, solo de procesos.

• Es muy eficiente (no hay cambio de dominio alkernel)

• Se puede adaptar a la aplicacion

26

Page 27: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

• Se puede tener un numero mayor de hebras

Ademas, no necesita cambiar el kernel original delSO

Pero no hay prioridades globales ni se puedenusar multiples CPUs dentro del mismo proceso.Tambien, el bloqueo de una hebra bloquea alproceso (la E/S asıncrona complica mucho losprogramas, y si es un fallo de pagina no se puedehacer nada).

Se pueden combinar ambos esquemas. En Mach,el kernel recibe hints del nivel de aplicacion(numero y tipo de procesadores, gang scheduling,etc.).

En Solaris 2 hay planificacion jerarquica. Unproceso puede crear crear uno o mas “procesosligeros” (hebras del kernel) y hay tambien hebrasde nivel de usuario.

Y un planificador de nivel de usuario asigna cadahebra de nivel de usuario a una hebra del kernel.

Permite combinar las ventajas (¡y desventajas!)de ambos modelos.

27

Page 28: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

En otros sistemas, la planificacion jerarquica esmas complicada: hay colaboracion estrecha entreel kernel y el planificador (del nivel de usuario).

Verlo primero con una sola CPU.

El kernel avisa al planificador del nivel de usuario(mediante una interrupcion software) del bloqueode una hebra al iniciar una operacion de E/S, asıcomo de cuando se finaliza esa misma operacionde E/S.

Esto se llama un upcall y es otra tecnica muyutilizada para disminuir el tamano del kernel.

Puede que el planificador entre en el estadoequivalente a wait, y entonces hay que notificarloal kernel.

Hay comunicacion con el kernel a traves dememoria compartida.

Para multiprocesadores, existe el concepto deprocesador virtual.

– Figura 7.10

28

Page 29: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Se piden procesadores virtuales y el kernelinforma de su concesion.

El kernel avisa tambien de procesadores virtualesque se asignan y de procesadores virtuales que sedesasignan.

Y tambien de bloqueos de hebras por E/S y definalizacion posterior

El kernel simula una “maquina virtual” alplanificador.

La forma de hacerlo es sutil. En realidad, elkernel solo fuerza la ejecucion de cierto codigo enel planificador.

Y una instruccion especial da el numero deprocesador en el que se esta ejecutando; y lasinterrupciones, del reloj por ejemplo, sonprivativas de cada procesador.

En todo caso, con este esquema el kernel siguecontrolando la planificacion de (asignacion detiempo a) los procesos.

29

Page 30: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

7.5 Comunicacion e invocacion

La comunicacion se usa normalmente parainvocar o solicitar servicios.

Se puede hablar de tipos de primitivas, protocolossoportados y flexibilidad (openness), eficiencia dela comunicacion, y del soporte que pueda existir ono para funcionamiento con desconexion o conalta latencia.

Primitivas de comunicacion

Algunos kernel tienen operaciones especıficasajustadas a la invocacion remota. Amoeba, porejemplo, tieneDoOperation/GetRequest---SendReply.

Es mas eficiente que el simple Send-Receive (ymas fiable y legible).

Amoeba y otros sistemas tienen tambiencomunicacion con grupos o radiado (parcial)(broadcast).

30

Page 31: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Es importante para tolerancia de fallos, mejora derendimiento y reconfigurabilidad.

Diversas variantes: como mensajes, comomultiples RPCs, con un solo valor devuelto, convarios valores devueltos (todos juntos o pidiendouno a uno), etc.

En la practica, mecanismos de comunicacion dealto nivel tales como RPC/RMI, radiado ynotificacion de sucesos (parecido a losmanejadores de interrupciones), se implementanen middleware y no en el kernel.

Normalmente, sobre un nivel TCP/IP, porrazones de transportabilidad, (aunque resulta“caro”).

31

Page 32: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Protocolos y “apertura”

Los protocolos se organizan normalmente comouna pila (“torre”) de niveles.

Conviene que se tengan los niveles normalizadosen la industria (TCP/IP), y que ademas sepuedan soportar otros, incluso dinamicamente.

Es lo que aparecio (por primera vez) con losstreams de UNIX.

Por ejemplo, para portatiles que se mueven porlugares distintos y ası ajustan la comunicacion,bien en LAN, o bien en WAN.

Esto es lo que se entiende como “apertura”, desdelos tiempos de UNIX (hacer un dibujo).

Para algunas aplicaciones, TCP/IP es pocoeficiente y conviene saltarlo (por ejemplo, HTTPno deberıa establecer una conexion por peticion).

En el caso mas dinamico, el protocolo enparticular se decide “al vuelo” para cada mensaje.por ejemplo en base a tecnicas de programacionmediante objetos (“dynamic binding” desubrutinas).

32

Page 33: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

7.5.1 Eficiencia en la invocacion deservicios

Es un factor crıtico en sistemas distribuidos, pueshay muchas invocaciones.

A pesar de los avances en redes, los tiempos deinvocacion no disminuyen proporcionalmente.

Los costes en tiempo mas importantes son desoftware, no de comunicacion.

Costes de invocacion

Una llamada al nucleo o una RPC son ejemplosde invocacion de servicios.

Tambien puede ser llamada sıncrona o asıncrona(no hay respuesta).

Todos suponen ejecutar codigo en otro dominio, ypasar parametros en los dos sentidos. A veces,tambien acceder a la red.

Lo mas importante es el cambio de dominio(espacio de direcciones), la comunicacion por lared y el coste de la planificacion (multiplexacion)de flujos de control (hebras).

– Figura 7.11

33

Page 34: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Invocacion a traves de la red

Una RPC nula tarda del orden de decimas demilisegundo con una red de 100 Mbits/s. y PCs a500 Mhz, frente a una fraccion de microsegundoen una llamada a procedimiento local.

El coste de la transmision por la red es solo deuna centesima de milisegundo (unos 100 bytes).Pero hay costes fijos muy importantes que nodependen del tamano del mensaje.

Para una RPC que solicita datos a un servidor,hay pues un retraso fijo importante cuando losdatos son pequenos.

– Figura 7.12

Hay una solucion de continuidad cuando elmensaje supera el tamano del paquete.

Con una red ATM de 150 Mbits/s., el maximoancho de banda que se ha conseguido,trasmitiendo paquetes grandes, de 64 Kb, es delorden de 80 Mbits/s.

34

Page 35: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Aparte del tiempo de transmision por la red, hayotros retrasos software:

• “Aplanado” y “desaplanado” de parametros(marshalling y unmarshalling) por parte delos stubs

• Copia de parametros entre niveles deprotocolos y con el kernel

• Copia a, y de, controladores de red

• Iniciacion y preparacion de paquetes(checksum, etc.)

• Planificacion de hebras y cambios de contexto

• Espera por confirmaciones de mensajes

Comparticion de memoria

Se usan regiones compartidas entre procesos oentre proceso y kernel. Ya se ha mencionado.

Mach lo usa para enviar mensajes localmente,usando automaticamente copy-on-write. Losmensajes estan en grupos completos (yadyacentes) de paginas. Muy eficiente y seguro.

El enviador coloca el mensaje en una regionaparte.

35

Page 36: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

De vuelta del receive el receptor se encuentracon una nueva region, donde esta el mensajerecibido.

Las regiones compartidas (sin copy-on-write) sepueden usar tambien para comunicar grandesmasas de datos con el kernel o entre procesos deusuario. Hace falta entonces sincronizacionexplıcita para evitar “condiciones de carrera”.

Eleccion de protocolo

UDP suele ser mas eficiente que TCP, exceptocuando los mensajes son largos.

Pero en general los buffer de TCP puede suponerbajas prestaciones, al igual que el coste fijo deestablecer las conexiones.

Lo anterior esta muy claro en HTTP, que al irsobre TCP establece una nueva conexion paracada peticion.

Y ademas, TCP tiene un arranque lento, pues alprincipio usa una ventana de datos pequena porsi hay congestion en la red.

36

Page 37: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Por eso, HTTP 1.1 utiliza “conexionespersistentes”, que permanecen a traves de variasinvocaciones.

Tambien se han hecho experimentos para evitar elbuffering automatico, a base de juntar variosmensaje pequenos y enviarlos juntos (pues es loque va hacer el SO operativo en todo caso, perocon mayor coste).

Se ha experimentado incluso cambiando el SOpara que no haga buffering (con peticiones HTTP1.1) y ası evitar el coste importante que suponenlos plazos (time-outs).

Invocacion dentro de un mismocomputador

Se presentan de hecho con mucha frecuencia: poruso de servidores en microkernels, y debido acaches grandes.

A diferencia de lo mostrado en la figura 7.11, hayuna LRPC (Lightweight Remote ProcedureCall) para esos casos. Se ahorra copia de datos, ymultiplexacion de hebras.

37

Page 38: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Para cada cliente hay una region compartida,donde hay una o mas pilas A (de argumentos).

Se pasa la pila del resguardo llamante,directamente al resguardo del procedimientollamado.

– Figura 7.13

En una llamada al nucleo no suele haber cambiode hebra. Lo mismo se puede hacer con la LRPC.

El servidor, en vez de crear un conjunto de hebrasque escuchan, solo exporta un conjunto de rutinas(como un monitor clasico). Los clientes se “ligan”con las rutinas del servidor. Cuando el servidorresponde afirmativamente al kernel, este pasacapabilities al cliente (esto no se muestra en lafigura).

Se hace, de nuevo, una llamada “ascendente”(upcall).

38

Page 39: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Analisis de LRPC

Del orden de 3 veces mas rapida que una RPClocal normal. Compromete la migraciondinamica, sin embargo.

Pero un bit puede indicar al stub si la llamada eslocal o remota.

Es complicado, y hay aun otras optimizaciones(para multiprocesadores, por ejemplo).

39

Page 40: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

7.5.2 Operacion asıncrona

Internet tiene con frecuencia retrasos grandes yvelocidades bajas, ası como desconexiones yreconexiones (y computadores portatiles conacceso esporadico, por ejemplo por radio—GSM—).

Una posible solucion al problema es operarasıncronamente. Bien con invocacionesconcurrentes, o bien con invocaciones asıncronas(no bloqueantes).

Son mecanismos que se usan principalmente en elnivel de middleware, no en el del sistemaoperativo.

40

Page 41: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Invocaciones concurrentes

En este primer modelo, el middleware solo tieneoperaciones bloqueantes, pero las aplicacionesarrancan hebras multiples para realizar lasinvocaciones bloqueantes concurrentemente.

Es el caso de un hojeador de web tıpico, cuandopide varias imagenes de una misma paginaconcurrentemente usando peticiones HTTP GET(y el hojeador suele tambien hacer la presentacionconcurrentemente con la peticion).

– Figura 7.14

En el caso concurrente, el cliente tiene dos hebras,cada una de las cuales hace una peticionbloqueante (sıncrona).

Se aprovecha mejor la CPU del cliente.

Algo parecido ocurre si se hacen peticionesconcurrentes a servidores diferentes.

Y si el cliente es multiprocesador, aun se puedeobtener mas mejora al poder ejecutar sus hebrasen paralelo.

41

Page 42: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Invocaciones asıncronas

Es una invocacion no bloqueante que devuelvecontrol tan pronto como el mensaje de invocacionse ha creado y esta listo para envıo.

Hay peticiones que no requieren respuesta. Porejemplo, las invocaciones CORBA de tipo “unsolo sentido” (oneway), que tienen semantica“quizas” (maybe).

En otro caso, el cliente utiliza una llamadadistinta para recoger los resultados. Es el caso delas “promesas” del sistema Mercury de BarbaraLiskov.

Las promesas son handles que se devuelveninmediatamente con la invocacion, y que puedenusarse mas adelante para recoger los resultados,mediante la operacion primitiva claim.

La operacion claim ya sı es bloqueante, si bienexiste otra, ready, que tampoco lo es.

42

Page 43: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Invocaciones asıncronas persistentes

Invocaciones tradicionales como las de un solosentido en CORBA y las de Mercury van sobreconexiones TCP y fallan si la conexion se rompe.Es decir, si falla la red o se cae el nodo destino.

Para funcionar en modo desconectado, cada vez seusa mas un nuevo modelo de invocacion asıncronallamada Invocacion asıncrona persistente.

Basicamente, se dejan de usar los plazos(timeouts) que cuando vencen abortan lasinvocaciones remotas. Y solo las aborta laaplicacion cuando lo estima oportuno.

El sistema QRPC (Queued RPC) pone laspeticiones en una cola “estable” en el clientecuando no hay conexion disponible con el servidory las envıa cuando la conexion se reestablece.

43

Page 44: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Y pone tambien las respuestas en una cola en elservidor cuando no hay conexion con el cliente.

Adicionalmente, puede comprimir las peticiones ylas respuestas para cuando la conexion se realizacon poco ancho de banda.

Puede usar tambien enlaces de comunicaciondiferentes (¡y “esperar” al cliente con la respuestaalmacenada en el sitio siguiente mas probable!).

Un aspecto interesante es que puede ordenar lacola de peticiones pendientes por prioridadesasignadas por las aplicaciones.

Y esas prioridades las utiliza tambien a la hora deextraer los resultados de las invocaciones remotas.

44

Page 45: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

7.6 Arquitectura de un sistemaoperativo

Veremos cual es la arquitectura adecuada para unkernel de sistema distribuido.

Lo mas importante es que sea, de nuevo,“abierto”.

Y por que sea “abierto” (otra vez la figura clasicade UNIX) entendemos ahora que sea flexible (oadaptable):

• Que cada nodo ejecute solo lo que necesita

• Que se puedan cambiar y ampliar los serviciosdinamicamente segun cambian las necesidades

• Que existan alternativas al mismo servicio

• Que se puedan introducir nuevos servicios sindanar la integridad de los ya existentes

El principio basico de diseno de SO durante yamucho tiempo ha sido separar “reglas” de“mecanismos”

45

Page 46: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Por ello, lo ideal es que el kernel implemente sololos mecanismos basicos, permitiendo ası que lasreglas se implementen sobre el medianteservidores (que se cargan dinamicamente).

Microkernels frente a kernelsmonolıticos

La diferencia esta en cuanta funcionalidad estadentro del kernel, o fuera del mismo en servidores.

Los microkernels (y nanokernels :-) son de hechopoco usados en la practica, pero su estudio esinstructivo.

Con kernels tradicionales como el de UNIX yservidores con RPCs se puede hacer algo en esalınea (DCE, CORBA).

Mejor usar microkernels, que tienen solo eldenominador comun.

Son mas pequenos y mas faciles de entender ysolo proveen los servicios mınimos para soportarlos otros: procesos e IPC local, y espacios dedirecciones (y posiblemente gestion basica deperifericos).

– figura 7.15

46

Page 47: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Los servidores se cargan dinamicamente segun senecesiten, y se invocan sus servicios mediantepaso de mensajes (principalmente, RPCs).

Los servidores se pueden cargar en espacio deusuario (lo mas frecuente), o incluso comoprocesos del mismo espacio del kernel (caso deChorus).

Los kernel monolıticos mezclan todo el codigo ydatos, no estan bien estructurados.

Los microkernels suelen tambien emular sistemasoperativos tradicionales

En conjunto, se tiene:

– figura 7.16

Los programas de aplicacion suelen usar losservicios del kernel a traves de subsistemas,bien mediante compiladores de un lenguaje deprogramacion y sistemas de soporte de ejecucion(run-time systems), o bien llamando alsubsistema de emulacion de un S.O. en particular.

47

Page 48: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Puede haber incluso mas de un sistema operativoejecutando encima del microkernel (casos deMACH y NT).

Es importante resaltar que esto es diferente de lavirtualiacion de la maquina, que se vera acontinuacion.

Comparacion

El microkernel es mas flexible y simple. Muyimportante esto ultimo.

El kernel monolıtico es mas eficiente. Hablar denumeros: peticion de disco, por ejemplo, y desincronizacion.

El monolıtico se puede organizar en capas, pero esfacil cometer errores en lenguajes como C y C++.

Si se modifica, es complicado probarlo (todo) denuevo.

Ineficiencia en microkernels tambien por cambiosde espacios de direcciones, no solo porcomunicacion.

Soluciones mixtas

Dos microkernels, Mach y Chorus, empezaron con

48

Page 49: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

los servidores ejecutando solo como procesos denivel de usuario.

De esa forma, la modularidad viene garantizadapor los espacios de direcciones.

Con excepcion hecha del acceso directo a registrosde dispositivos y buffers, que se obtiene mediantellamadas al kernel especiales. Y el kernel tambientransforma las interrupciones en mensajes.

Pero, por razones de eficiencia, ambos sistemascambiaron para permitir la carga dinamica deservidores tanto en un espacio de direcciones deusuario como dentro del kernel.

Los clientes interaccionan en los dos casos deigual forma con los servidores, lo cual permiteuna depuracion sencilla del codigo servidor.

Aunque sigue siendo un riesgo meter losservidores en el kernel.

El sistema SPIN usa un metodo mas sutil:programa en un lenguaje de alto nivel, Modula-3,y el compilador provee el control de acceso (y usa“notificacion de sucesos” para reducir lainteraccion entre componentes software al

49

Page 50: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

mınimo).

50

Page 51: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Otros sistemas como Nemesis usan un soloespacio de direcciones para el kernel y todos losprogramas de aplicacion (con direcciones de 64bits es posible) y ası no evacuan las caches(logicas y de la MMU).

L4 ejecuta los servidores (incluso de gestion dememoria) en el nivel de usuario, pero optimiza lacomunicacion entre procesos.

Exokernel usa rutinas de biblioteca en vez derutinas dentro del kernel o servidores en el nivelde usuario, de ahı su nombre. Es mas rapido.

51

Page 52: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

7.7 Virtualizacion en el nivel del sistemaoperativo

Una idea antigua de IBM (sistema VM de laarquitectura IBM 370). Explicarlo con un dibujo.

7.7.1 Virtualizacion del Sistema

Lo que se busca es proveer diferentes maquinasvirtuales, cada una de las cuales ejecuta su propiacopia del sistema operativo.

Las maquinas modernas son muy potentes ypermiten ejecutar varios sistemas operativosconcurrentemente. Por otra parte, esta es laforma mas segura de aislar usuarios yaplicaciones. Por seguridad, por facturacion(servicio “de plataforma” en cloud computing),etc.

¿Facilidad tambien de migracion yreconfiguracion?

El sistema de virtualizacion, se encarga demultiplexar los recursos fısicos de la maquinaentre los distintos sistemas operativos queejecutan sobre ella.

Parecido a la multiplexacion de procesos, pero

52

Page 53: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

distinto. Pues se multiplexa la maquina (casi)exactamente, y no una variante de la misma.

El equivalente al kernel en este caso, se llamamonitor/supervisor de maquina virtual o“hipervisor”.

Es una capa de software muy pequena.

Cuando se tiene virtualizacion completa, elhipervisor exporta una interfaz identica a lamaquina fısica. Ası, los sistemas operativos nonecesitan ser modificados en absoluto.

Para algunos computadores, sin embargo, lavirtualizacion completa es muy cara, porquerequire interpretar todos las instrucciones porsoftware.

Porque hay algunas instrucciones “sensibles” queno son detectadas automaticamente por elhardware. Vamos, que no son privilegiadas

Hay dos tipos de instrucciones “sensibles”, las“sensibles en control” y las “sensibles encomportamiento”. Las dos dan el mismoproblema.

En las arquitecturas x86, por ejemplo, hay 17

53

Page 54: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

instrucciones sensibles que no son privilegiadas(LAR, LSL, etc.).

En la “paravirtualizacion”, la interfaz que seexporta es ligeramente diferente. Y los sistemasoperativos necesitan ser modificados (algo), parano usar instrucciones sensibles no privilegiadas.

7.7.2 Caso de estudio: Virtualizacion enel sistema XEN

Universidad de Cambridge, ejemplo temprano deCloud computing—

54

Page 55: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

7.8 Resumen

Hemos visto la idea de un sistema operativocomo un kernel sobre el que se asienta elmiddleware que provee la distribucion

El sistema operativo o kernel provee losmecanismos, y las reglas (policies) seimplementan por encima como servidores (ollamadas ascendentes en algunos casos)

Tambien, el sistema operativo provee losmecanismos para que los clientes invoquen losservicios que exportan los servidores

Por razones de eficiencia en el modeloconcurrente, sobre todo debidas a grandesespacios logicos de memoria y a maquinas conmultiples procesadores, los procesos tienenhebras.

El coste fijo de la comunicacion entre nodossuele ser muy alto, debido a motivos delsoftware, no del hardware.

Las dos arquitecturas posibles de un kernel onucleo son la monolıtica y el microkernel.Ambas tienen ventajas e inconvenientes.

55

Page 56: APOYO DEL SISTEMA OPERATIVO Veremos en este capīıtulo

Los microkernels necesitan implementar almenos cierta funcionalidad basica. Y apoyarla ejecucion de subsistemas, tales comocompiladores e interpretes de lenguajes deprogramacion, y emuladores de sistemasoperativos tradicionales

Una alternativa a esto ultimo, es lavirtualizacion del computador, para ası poderejecutar multiples sistemas operativos, uno encada maquina virtual.

56