initial commit
[pfinal.git] / Routix / doc / cambios.txt
blob6b375d215787471bb79083492587e6d1cc22fbde
1 Documento de cambios
4 08/09/2003 - prop Cero 0.4
6         + Reubica el kernel en memoria (segmentos de código, datos y stack)
8                             MEMORIA FÍSICA
10                         |--------------------| 0x0
11                         |       KCODE        |
12                         |                    |
13                         |--------------------| 0x0a0000
14                         |     Reservado      |
15                         |--------------------| 0x100000
16                         |                    |
17                         |       KDATA        |
18                         |                    |
19                         |--------------------| Depende de como cuantas
20                         |  Tablas del Kernel | tablas se inicien
21                         |  (gdt, page dir)   |
22                         |--------------------| 0x200000 - 0x20000
23                         |       KSTACK       |
24                         |                    |
25                         |--------------------| 0x200000
26                         |       Kernel       |
27                         |   Memory Manager   |
28                         |   Area de datos    |
29                         |--------------------| La calcula el kernel en función
30                         |                    | de la cantidad
31                         |   Memoria Libre    |
32                         ~  Alocada en forma  ~
33                         ~       dinámica     ~
34                         |  (kmalloc_page y   |
35                         |     kfree_page)    |
36                         |                    |
37                         |--------------------| Fin Mem Física
42         + Inicialización y mapeo de toda la memoria física en un espacio de igual direccionamiento virtual.
44         + Memoria Virtual
46                             MEMORIA VIRTUAL
47                         |--------------------| La calcula el kernel en función
48                         |                    | de la cantidad
49                         |   Memoria física   |
50                         | mapeada linealmente|
51                         |                    |
52                         ~                    ~
53                         ~                    ~
54                         |                    |
55                         |                    |
56                         |                    |
57                         |                    |
58                         |--------------------| 0xc0000000
59                         |                    |
60                         |       KCODE        |
61                         |                    |
62                         |--------------------| 0xc8000000
63                         |                    |
64                         |       KDATA        |
65                         |                    |
66                         |--------------------| 0xd0000000
67                         |                    |
68                         |       KSTACK       |
69                         |                    |
70                         |--------------------| 0xd8000000 (0xd7ffffff -> TOP del Stack)
71                         |       IDT          |
72                         |--------------------| La calcula el kernel en función
73                         |                    | de la cantidad
74                         |                    |
75                         ~                    ~
76                         ~                    ~
77                         |                    |
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
99           su ejecución).
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).
127         
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.