Hola Andrés, 2011/6/25 Andres Valloud <[email protected]>
> > ¿Es obvio porquè, no? Si estuviera en disco no habrìa còdigo para traerlo > de > > vuelta. Imagino que ese es el problema al que te referìas anteriomente. > Se > > supone que eso està resuelto a nivel de hardware y sòlo es necesario > indicar > > cuàl es el còdigo que hace el page in e indicar que no debe ser paged > out. > > En el antiguo procesador 8086 habìa un par de instrucciones parecidas que > se > > llamaban STI y CLI. Si no me equivoco STI era para decir "no me > interrumpan > > porque estoy en un segmento de còdigo delicado" y CLI era lo contrario. > > ¿Porquè digo que es parecido? Porque si estoy resolviendo un page in, no > > puedo generar otro page in (o quizàs sì si tuviera un stack de page in > por > > resolver). En el caso del STI y CLI es lo mismo, si estoy manejando una > > interrupciòn no quiero que me interrumpan, pero podrìamos usar u stack > > tambièn, aunque por otro lado puede que sea una mala idea si tengo un > tiempo > > limitado para atenderla. > > Conste que el modo protegido asi como lo conocemos hoy aparecio con el 386. > > > El problema en Smalltalk, imagino, es que gracias al polimorfismo tomas > un > > dato que es un entero y de pronto ese paràmetro puede recibir cualquier > > clase que acepte el mismo protocolo, lo que significarìa que podrìa > ejecutar > > còdigo arbitrario que si estoy resolviendo un page in, no quiero que me > > cause otro page in, ¿no?. > > No entendi. > El polimorfismo tiene varios efectos. De partida cuando creas que un método así: add: aNumber ^self + aNumber entonces le peudes pasar como parámetro un integer, un float o una matriz (asumiendo que la clase Matrix entendiera el operador +). Ahora bien, cuál es el tipo de aNumber. No lo sabemos. Podemos asumir que el programador pensó en un clase que descendiera de Number, pero nada lo obliga. La premisa que puse arriba (y que no aparece en el texto que dejaste) es que estamos ejecutando código Smalltalk que se encuentra en un área de memoria que está marcada como que no se puede hacer page out. ¿Cómo se eso? Porque el sistema operativo puede marcar las áreas de memoria como "esto se puede hacer page out" o "esto no". Para eso, el código de page out simplemente revisa si el área está marcada o no, y sólo hace page out de lo que está marcado. Hasta ahí trivial. (Oops, no debí haber dicho eso no se vaya a molestar alguien :-)... Entonces el código de pageIn es la misma cuestión. Detecta que el código está paged out (eso lo hace el hardware), a través de una interrupción echa a andar el código que hace page in. Ahora este códgo está en Smalltalk, entonces si uso polimorfismo, puede que reciba un parámetro que no corresponde, o mejor dicho, que ejecute código esté paged out, entonces puede caer en un ciclo infinito, gatillando la interrupción adínfinitum. > > > Ahora bien, lo que propone Andy Tannenbaum, el creador de Minix, es que > en > > el futuro todos los sistemas operativos seràn hypervisors y cada driver > > correrà como si estuviera en su propio sistema operativo. Lo dificil ahì > no > > es que ejecute, ni que si se cae el driver no se caiga el sistema > operativo. > > Todo eso ya estarìa resuelto. > > Pero claro, esto es simplemente una cuestion de sentarse y programar :). > Al revés. Si se cae el driver se cae el sistema operativo, pero este corre dentro de una VM que es el VMWare, de modo que se echa a andar de nuevo inmediatamente. > > Punto aparte, no me termina de convencer poner tantos cores en un > CPU... tarde o temprano la probabilidad de falla catastrofica sera > suficientemente grande como para que el sistema en conjunto no sea > confiable. ¿Qué dices? > Por ejemplo, por mas RAID que pongas, tarde o temprano no > es posible copiar un array de discos suficientemente grande sin > fallas. Ah.sí claro. Si todos los discos tienen un MTBF, entonces llega un momento que si tengo un millón de discos, al menos un byte sale errado. Por suerte ya existen las memorias con autocorreción de errores. Primero dectan el error y luego lo corrigen. Y de nuevo el algoritmo es trivial ;-D Claro que sobre 8 bits, pueden corregir uno, utilizando 2 adiconales. El algoritmo se llama ECC. Acá hay un ejemplo: http://en.wikipedia.org/wiki/BCH_code Ahora si tienes eso, puedes aplicar el algortimo varias veces y proteger cada vez más los datos, aumentando en un 25% el costo en $$$ cada vez que lo aplicas. O tampoco es posible hacer un backup de dicho array sin > fallas. > Es lo mismo que dijiste antes, un caso particular. -- Saludos cordiales, Guillermo Schwarz Sun Certified Enterprise Architect -- To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] http://www.clubSmalltalk.org
