PRUEBA Y DEPURACIN
Depuracin:
La depuracin de un programa es la forma de saber si un programa contiene
errores o no, as mismo tambin nos ayuda a corregir dichos errores. Se dice
que un programa esta depurado cuando est libre de errores.
Cuando se depura un programa se hace un seguimiento del funcionamiento de
dicho programa y se van estudiando los valores de las distintas variables, as
como los resultados obtenidos en las operaciones.
Una vez depurado el programa se solucionan los posibles errores encontrados
y se procede a depurar otra vez. Estas acciones se repiten hasta que el
programa no contiene ningn tipo de errores, tanto en tiempo de programacin
como en tiempo de ejecucin.
ENTORNO BASE DE DEPURACIN
Manejadores de excepciones
Es necesario un gestor de excepciones fiable que diga lo que sali mal, Es
conveniente ver que qu tipo de excepcin se produjo, en el gestor de
excepciones, antes de que algo "peligroso" se intente. Viendo, por ejemplo, el
(hexadecimal) nmero de excepcin en una esquina de la pantalla, puede
ahorrar horas de depuracin.
Bucles de excepcin
Es necesario evitar los bucles de excepcin, ya que si el contador est por
encima de un determinado umbral de unas pocas unidades (3 debern dar ms
resultados interesantes), el ncleo abortar tratar de resolver la excepcin y
entrar en un modo de "pnico" (fondo rojo, LED intermitente, lo que sea).
Localizacin de la instruccin defectuosa
En la mayora de los casos, cuando se llama al controlador de excepciones, la
direccin de la instruccin defectuosa est en algn lugar en la pila. El primer
paso aqu es imprimir la direccin de esta instruccin.
Una vez hecho esto, usted (como un ser humano) puede inspeccionar el mapa
del enlazado y averiguar en qu objeto era el problema. Puede solicitar un
mapa con ld <habituales opciones> -Mapa <> filename.map.
Localizacin de la lnea de cdigo fuente
Una vez que haya encontrado la direccin de la instruccin defectuosa en el
paso anterior, se puede identificar la lnea correspondiente del cdigo fuente
mediante la ejecucin:
PRUEBAS
Es necesario probar nuevas versiones de sistemas operativos. En general hay
dos mtodos para crear un entorno de prueba.
-
Mquina virtual
Maquina fsica
Entorno de prueba de xito
Velocidad
Se busca que la ejecucin del cdigo sea lo ms rpido posible.
Facilidad de uso
Generar menos comandos, para que se configure y cree ms rpido la imagen
de disco para correr en el emulador.
Cercana al objeto real
Si la mquina de prueba es lo ms real posible en el manejo del sistema.
Maquina fsica de prueba
La principal ventaja de utilizar una mquina real para la prueba es que; si su
sistema operativo, ejecuta en el banco de pruebas, es muy probable que se
ejecute en cualquier otro equipo. Considerando que, si se prueba utilizando un
emulador, que podra no funcionar en el objeto real. Las desventajas son
principalmente que necesita el espacio y dinero para mantener un segundo
equipo. Con el hardware barato disponible en la actualidad, se recomienda que
tenga un segundo equipo fsico, que cumpla con lo mnimo:
-
Unidad de disquete (para los conductores de arranque y de FAT12 pruebas).
Un VGA tarjeta de vdeo compatible.
Puerto serie.
Disco duro (500 MB es ms que suficiente).
PCI / ISA bus.
Tarjeta de red, tales como un NE2000 o una 3C90x.
Mquina virtual de prueba
Proceso simple para ejecutar y depurara el nuevo ncleo. Si se elige un buen
emulador, se puede conseguir gran cantidad de ayuda por medio de mensajes
de depuracin. La desventaja ex que los dispositivos que no se pueden emular,
al tener errores, ya que no funcionan como los dispositivos reales.
UNIDAD DE PRUEBAS
Significa que, adems del cdigo de la aplicacin, tambin se escribe un "piloto
de pruebas" que pone el cdigo de implementacin a travs de una serie de
ensayos, comprobando los retornos para la correccin. Tenga en cuenta que
esto se hace durante el desarrollo / pruebas - el "piloto de pruebas" no se
suministra con el cdigo publicado.
Objetivos de la unidad de pruebas
Si posteriormente cambia las cosas en el cdigo de implementacin, el
conductor de prueba indica si los resultados siguen siendo los mismos (prueba
de regresin);
Prueba de la unidad es una gran manera de mejorar la fiabilidad y la exactitud
de su cdigo. Sin embargo, requiere que el cdigo a-ser-probado realmente
puede ejecutarse bajo el control del piloto de pruebas.
DEPURACIN DEL NCLEO
Hablaremos de las tcnicas comunes que se pueden utilizar para aislar errores
en su sistema operativo.
Sentencias de depuracin y archivos de registro
Es capaz de investigar el contenido de una variable en un punto de interrupcin
especfica.
Insercin de una lnea de cdigo para escribir en la pantalla o en un registro de
algn tipo.
Uso de mquina virtual
BOCHS es capaz de establecer puntos de interrupcin en cualquier tipo de
software. Proporcionar un adicional de depuracin para acceder fcilmente
desde el cdigo del Kernel para imprimir mensajes de depuracin.
SIMICS es capaz no slo de los puntos de interrupcin y la visualizacin de
registrar la informacin, sino que tambin es capaz de abrir un puerto para su
uso con la depuracin.
DESARROLLO
Consideraciones de diseo
Disear el sistema operativo como un conjunto, y una parte a otra, es una tarea
difcil, pero importante de lograr.
cdigo Estructuracin
Debe decidir cmo su cdigo debe ser estructurado. Tengamos en cuenta que
es muy probable que el puerto del sistema operativo para diferentes
arquitecturas, con diferentes instrucciones de montaje, con diferentes
secuencias de inicializacin, con un hardware diferente, con diferentes
estructuras de memoria, etc Usted tiene que asegurarse de no mezclar
archivos de una arquitectura con archivos de otra arquitectura. carnoso
esqueleto sirve como un ejemplo de cmo mnimo para estructurar su cdigo.
prueba de futuro
Tenemos en cuenta que es muy probable que desee aadir nuevas
caractersticas a toda la gama de interfaces del ncleo. Por lo tanto, usted tiene
que asegurarse de que es fcil de re factorizar sin romper las interfaces
dependientes.
multihilo
Tomar en cuenta que, en algn momento a partir de ahora, no se ejecute el
cdigo en un solo hilo, pero va a estar corriendo en paralelo con otros hilos y
con otros procesadores, lo que significa que ser finalmente adelant durante
una operacin crtica, y que algunos otros hilos podran no ser capaz de daar
el estado guardado.
abstraccin de hardware
Tomar en cuenta que no todas las piezas de hardware estn presentes en cada
ordenador, as que sera bueno para abstraer a travs de una abstraccin de
hardware de capa. Por ejemplo, PIT y HPET son dos temporizadores, que es
posible que desee abstracta en una nica interfaz de sincronizacin.
algoritmos
Para cada tarea, encontrar el algoritmo que consigue la mayora de los puntos
de todos los aspectos que le importa a usted (por ejemplo, la simplicidad,
velocidad, uso de memoria, etc.).
PAGINACIN
La mitad superior
Debe continuar con una mitad superior del ncleo, por lo que los programas de
espacio de usuario pueden ser cargados a las 4 MiB (o menos si se quiere) sin
entrar en conflicto con el binario del kernel. Una decisin importante a tomar es
dnde mapa exactamente el ncleo.
Muchos prefieren la cartografa del kernel para 0x80000000, dejando 2 GB de
datos del ncleo y 2 GB para los procesos. Esto puede permitir a un ncleo
monoltico para almacenar en cach los archivos grandes o estructuras del
sistema de archivos.
Otros prefieren la cartografa a 0xC0000000, dejando 1 GiB de datos del ncleo
y 3 GiB de procesos. Su principal argumento es que se integra mejor con PAE ,
ya que todo el espacio del ncleo encaja exactamente en un directorio de
pginas.
Algunos otros (incluyendo el autor original de esta pgina) van extrema y el
mapa del ncleo en 0xE0000000, dejando el espacio reducido de 512 MiB de
datos del ncleo y 3.5 GB de procesos. Su principal argumento es que el
espacio de usuario debe ser capaz de utilizar la mayor cantidad de memoria
posible.
permisos
Las secciones del ejecutable. En .text se almacenan las instrucciones del
procesador, en .data hay datos, en .rodata hay datos de slo lectura, en .bss
hay datos no inicializados. Es posible que haya ms secciones, pero vamos a
centrarnos en ellas por ahora.
Cada una de estas secciones deberan tener diferentes permisos que se
aplican, por ejemplo .text debera ser de slo lectura, .data de lectura-escritura
debe ser, .rodata de slo lectura debe ser, y .bss debera ser de lectura y
escritura. Para que estos cambios tengan efecto en el espacio del kernel, hay
que establecer el bit WP en el registro correspondiente. Asegrese de
desactivar la ejecucin de los no .text secciones en x86-64 y PAE modos.
Para facilitar la configuracin de permisos en las secciones que usted puede
hacer lo siguiente:
Decirle al enlazador para alinearlos en lmites de 4 KB, por lo que las secciones
ocupan pginas enteras.
Decirle al enlazador para insertar smbolos que indican las direcciones de inicio
y final de las secciones especficas, para que pueda acceder a ellos desde su
cdigo de mapeo.
GESTIN DE MEMORIA
Conseguir el mapa de memoria
Primero tiene que obtener el mapa de memoria, para que sepa qu reas
fsicas son libres. A continuacin, se construye encima de eso.
Administrador de memoria fsica
Usted tambin necesita asegurarse de una lista de pginas fsicas libres, para
que sepa lo que los marcos de pgina fsicos para asignar siguiente.
Una forma comn de hacerlo es crear una lista enlazada, es decir para
almacenar la direccin fsica de la siguiente pgina libre al inicio de la pgina
anterior libre, por lo que slo se utiliza la memoria libre para almacenarlo. Sin
embargo, usted tiene habilitada la paginacin, por lo que no se puede escribir
de forma arbitraria a cada parte de la memoria. En su lugar puede trazar un
marco de pgina a la vez, y escribir en l la direccin de la siguiente pgina
libre.
Asignador de memoria virtual
Usted tambin necesitar una manera de asignar pginas virtuales para el
mapeo de memoria fsica, en lugar de valores codificados. Obtener una manera
de seguir el que se utilizan partes del espacio de direcciones, y cules no lo
son.
Existen mltiples maneras de rastrear el espacio de direcciones. Los sistemas
operativos modernos como Linux y Windows utilizan rboles AVL, pero tambin
se puede usar cualquier estructura de datos que te gusta.
Programador
Ningn sistema operativo es real si no se puede programar tareas. Cada
sistema operativo de escritorio moderna debe permitir navegar por la web,
mientras que la prestacin de una escena 3D, mientras que la ordenacin de
datos en una hoja de clculo, al escribir un archivo de gran tamao en el disco.
Esta es atendida por el programador.
multiprocesamiento
Est preparado para multiprocesamiento. Un programador que no est listo
para multiprocesamiento probablemente estar totalmente reescrito.
Niveles de prioridad
Disear el planificador de una manera, por lo que las discusiones pueden tener
diferentes niveles de prioridad.
Listas de hilo
En general se recomienda que existen diversas listas de hilos para cada nivel
de estado y prioridad. De esta manera, el cdigo de programacin no tiene que
mirar a travs de todos los hilos para una alta prioridad uno, entonces
posiblemente no logran encontrar uno, entonces iterar la lista de temas de
nuevo para encontrar un hilo de menor prioridad, entonces posiblemente
fracasar de nuevo, etc. Estos medios el cdigo planificador ejecuta ms rpido,
ya que la falta de un hilo de un nivel de prioridad especfico se puede detectar
inmediatamente, al tiempo que no iteracin a travs de hilos inactivos.