4 08/09/2003 - prop Cero 0.4
6 + Reubica el kernel en memoria (segmentos de código, datos y stack)
10 |--------------------| 0x0
13 |--------------------| 0x0a0000
15 |--------------------| 0x100000
19 |--------------------| Depende de como cuantas
20 | Tablas del Kernel | tablas se inicien
22 |--------------------| 0x200000 - 0x20000
25 |--------------------| 0x200000
29 |--------------------| La calcula el kernel en función
37 |--------------------| Fin Mem Física
42 + Inicialización y mapeo de toda la memoria física en un espacio de igual direccionamiento virtual.
47 |--------------------| La calcula el kernel en función
50 | mapeada linealmente|
58 |--------------------| 0xc0000000
62 |--------------------| 0xc8000000
66 |--------------------| 0xd0000000
70 |--------------------| 0xd8000000 (0xd7ffffff -> TOP del Stack)
72 |--------------------| La calcula el kernel en función
78 |--------------------| 0xffffffff Fin Mem Virtual
83 + Ajuste del stack pointer (en kmain.c) para llevarlo de su dirección real a la virtual
85 + Mapea las interrupciones en la dirección virtual KERNEL_INTERRUPT (0xd800000)
87 + Malloc de Páginas DINÁMICO (funciones kmalloc_page y kmalloc_free)
89 + Función de Mapeo kmapmen (mapea una dirección fisica a una lógica y agrega todas las entradas
90 necesarias en el directorio de página correspondiente).
92 + Multitasking básico con 3 tareas (el scheduler básico, un mini shell y un símbolo rotario).
93 El switching se realiza sobre 2 tss, uno contiene el contexto del scheduler y el otro el
94 contexto de cada tarea en forma alternativa (se usa como tss temporal, antes de switchear
95 a una tarea determinada carga su contexto en este tss).
97 + Hay que revisar las funciones de VIDEO concensuadas, ya que arrojan una excepción. Ahora estoy
98 utilizando otras (les agregué un par de detalles para que no haya problema de interrupciones durante
101 En este punto, todo debería estar correctamente inicializado.
104 Para hacer (por ahora):
107 + El código y datos de cada tarea debería ser copiado a otra dirección de memoria física (kmalloc_page()) y
108 mapeado a las direcciones virtuales correspondientes. (La copia a otra posición de memoria física podríamos
109 obviarla alineando los bloques a 4Kb, tenemos que analizar esta alternativa).
111 + Los stacks de las tareas estan trabajando sobre las direcciones físicas y no remapeados a las virtuales.
113 + Agregar al scheduler mas inteligencia de manera de poder asignar tiempos de ejecución en base a prioridades
114 de las tareas, estado de la tarea, y demás condiciones a definir.
116 + Optimizar el switching de tareas
118 + Cada tarea debe debe guardar en su estructura task_t todos lás páginas de memoria física alocadas a ella
119 por el kernel, para una vez terminada poder liberar todo ese espacio.
121 + Función malloc para alocamiento de bytes.
123 + Las tareas deben estar corriendo en Nivel de Privilegio 3 mientras que el scheduler en Nivel 0.
125 + Agregar llamadas al sistema mediante interrupciones (Interrupt Gate).
130 04/10/03 - prop Cero 0.5.2.2d
132 + Se migra la estructura de task switching por hardware (via tss) a una por software vía el stack. En iguales condiciones de prioridad las tareas corren con una velocidad superior a las 2 veces.