Thursday, December 30, 2010

Utilización de los anillos de privilegio del x86 en TORO

En la arquitectura x86 existen 4 niveles de privilegio, siendo el anillo 0 el más privilegiado y el anillo 3 el menos. En un sistema operativo tradicional el nivel de mayor privilegio es del kernel y el de menor nivel es el del usuario.

Al usar un SO de uso general, el código y datos del kernel utilizan descriptores de anillo 0, mientras que la aplicación de usuario utiliza el anillo 3. La capacidad de la GDT es de 8192 descriptores pero estos no se utilizan en general, usándose solo 4 descriptores, dos descriptores para datos y código de usuario, y dos más para datos y código del kernel. Estos descriptores se utilizan para el acceso a toda la memoria, es decir, que permiten acceder a los 4 GB (caso del direccionamiento de 32 bits).

El hecho de utilizar diferentes niveles de privilegio agrega latencias debido a que el procesador deberá corroborar que cada acceso de escritura/lectura/ejecución es válido. En un SO de uso general la utilización de diferentes niveles de privilegios es totalmente necesario, permite que se ejecuten varios procesos y que éstos no se solapen; y por otro lado que aplicaciones mal programadas no sobreescriban código del kernel.

Si suponemos que corremos una aplicación dedicada multihilo, que ésta se ejecuta sola en el sistema y que la aplicación fue escrita con suficiente cuidado como para no realizar escrituras sobre zonas prohibidas, será necesaria la protección?, suponiendo una situación así podemos simplificar bastante el SO.

Primero, tanto la aplicación de usuario como el código y datos del kernel estarían en el mismo nivel de privilegio , por lo tanto, cuando debemos realizar una llamada al sistema no habría ningún salto de nivel de privilegio y se podrían implementar simplemente con la instrucción “call”. Recordemos que actualmente para soportar las llamadas al sistema se utiliza una interrupción que permite realizar el salto de nivel de privilegio de anillo 3 a anillo 0 y es muy costosa.

Segundo, cuando los dispositivos de hardware producen interrupciones y nos encontramos ejecutando código de usuario se producirán saltos de niveles de privilegio. Ésto se debe a que dejamos de ejecutar código de anillo 3 para ejecutar una rutina de manejo de interrupción que se encuentra en anillo 0. Si la aplicación de usuario se ejecuta en el mismo nivel del kernel nos ahorramos la latencia que presenta saltar a un mayor nivel de privilegio.

En el caso de TORO, el kernel y la aplicación de usuario se ejecutan en anillo 0, por otro lado, como ambos se compilan juntos, las llamadas al sistema son implementadas como simples instrucciones “call” a funciones del kernel.

Matias E. Vara

2 comments:

JJsoft said...

Hola Matías, te escribo para decirte que tu proyecto me resulta bastante interesante y me emociona bastante ver este tipo de proyectos, yo apenas estoy empezando en la programación, Estudio Ingeniería en sistemas , tengo 17 años soy de República Dominicana y tengo un año y cuatro meses que inicie mis estudios universitarios, me encantaría colaborar contigo en algo , sé diseñar webs en php y mysql, la única aplicación que he hecho la realice en Object pascal(Delphi) y un Blog en php hecho por mi , otra web la realice en php poo algo similar a taringa, y la aplicación que hice en pascal trata de una aplicación de administración de consultorios médicos,puedes ver un ejemplo de la web que realice completamente en php , www.jjsoftcompany.tk , es una especie de blog para publicar las aplicaciones que realizo de forma gratuita todo lo hice yo , incluso el programa que tengo publicado, si necesitas ayuda en algo de este tema puedes contar conmigo.

Tengo unas preguntas acerca de este tema , me intriga bastante y deseo aprender sobre sistemas operativos , desde que inicie la universidad me da curiosidad saber como funcionan los sistemas operativos desde adentro y poder crear o manipular uno me parece algo fantástico, quería preguntarte , qué es lo que necesito profundizar para poder crear un proyecto de esta magnitud , en la web he buscado documentación sin embargo todo lo que aparece está en ingles y no hablo ingles, sin embargo me gustaría saber para un futuro que se necesita para poder crear un proyecto de un sistema operativo aunque sea básico , sé que existen algoritmos ya diseñados , pero no he podido entender,me gustaría que si tienes tiempo , puedas por lo menos responder , que se requiere o lo que se necesita estudiar para poder apoyar proyectos como este y poder desarrollar un sistema operativo te lo agradeceré bastante, espero que estés bien, y que Dios te bendiga y puedas continuar con este maravilloso proyecto.

puedes responderme a este correo, o a jeffreyharry23@hotmail.com.

Matias E. Vara said...

Hola, lo que debes leer es:
-"SO, diseño e implementation" de Tanenbaum.
- Manuales de desarrollo de intel, volumen 3.
Creo que eso es suficiente para empezar ...
Buena suerte.