Cuando un gestor de arranque compatible con arranque múltiple carga un núcleo, pasa
un puntero a una estructura de información de arranque en el ebxregistro. Podemos
usarlo para obtener información sobre la memoria disponible y las secciones cargadas
del kernel.
Memoria disponible
La estructura de información de arranque consta de varias
etiquetas . La etiqueta del mapa de memoria contiene una
lista de todas las áreas de RAM disponibles. Las áreas
especiales como el búfer de texto VGA en 0xb8000no están
disponibles. Tenga en cuenta que parte de la memoria
disponible ya la utiliza nuestro núcleo y la propia estructura
de información de arranque múltiple.
frame allocator
Cuando se utiliza la paginación, la memoria física se divide en
fragmentos de igual tamaño (normalmente 4096 bytes). Este fragmento
se denomina "página física" o "marco". Estos marcos se pueden asignar
a cualquier página virtual a través de tablas de páginas.
Necesitaremos un marco libre en muchos casos. Por ejemplo, cuando queremos aumentar el
tamaño de nuestro futuro montón de kernel. O cuando creamos una nueva tabla de páginas.
O cuando agregamos un nuevo hilo de kernel y, por lo tanto, necesitamos asignar una nueva
pila. Por lo tanto, necesitamos algún tipo de asignador que realice un seguimiento de los
fotogramas físicos y nos proporcione uno libre cuando sea necesario.
formas de escribir un
asignador de marcos
Podríamos crear algún tipo de lista vinculada a partir de los marcos libres.
Por ejemplo, cada cuadro podría comenzar con un puntero al siguiente
cuadro libre. Como los marcos son libres, esto no sobrescribirá ningún
dato. Nuestro asignador simplemente guardaría el encabezado de la lista
y podría asignar y desasignar fácilmente marcos actualizando punteros.
Otro enfoque es crear algún tipo de estructura de datos, como un
mapa de bits o una pila para administrar marcos libres. Podríamos
colocarlo en el área ya mapeada de identidad justo detrás del
núcleo o la estructura de arranque múltiple. De esa manera no
necesitaríamos mapear (temporalmente) cada cuadro libre.
The Allocator
Es una abstracción que proporciona el kernel para manejar
la creación y destrucción de estructuras en memoria
Funciona como un cache de datos de forma que
se sacan estructuras creadas del cache y se
devuelven al mismo cuando ya no se necesitan
Al dar una interfase general el kernel tiene
control sobre el tamaño del caché y puede
reducirlo cuando hay poca memoria