Scrieți sistemul nostru de operare

Ne scriem sistemul de operare. Manager de memorie

Este timpul să începeți să scrieți un manager de memorie - cea mai importantă componentă a oricărui sistem de operare. Cu toate acestea, înainte de punerea sa în aplicare în cod, dintr-un motiv oarecare, nu a ajuns la niciuna dintre trimiterile cunoscute.







Vom scrie fișierul antet memory_manager.h, indicând sarcinile pentru această versiune:

Să începem să scriem memory_manager.c cu o simplă funcție de inițializare:

Această funcție salvează valoarea curentă a CR3 la variabila kernel_page_dir (atunci va fi utilă pentru a apela map_pages) și interpretează, de asemenea, cartela de memorie, care a fost obținută odată de BIOS. Pentru toate blocurile de memorie care sunt mai mari de 1 megabyte și care sunt disponibile și pentru utilizare (tipul 1), este apelată funcția free_phys_pages, care ar trebui să marcheze regiunea de memorie fizică specificată ca fiind gratuită. În paralel cu aceasta, init_memory_manager calculează suma totală de RAM care va fi disponibilă în variabila globală memory_size.







Acum vom scrie câteva funcții mici, dintre care unul este util pentru alte module, iar cel de-al doilea va fi unul dintre cele mai frecvent utilizate:

Gestionarea paginilor fizice necesită o discuție separată și dacă managerul de memorie fizică este descris în aceeași ediție, se va dovedi a fi prea mare, de aceea pentru moment vom face doar funcții stub și codul complet va fi luat în considerare data viitoare:

Acum putem schimba alocarea de memorie sub tabela de întrerupere în funcția init_interrupts a fișierului interrupts.c într-una mai convenabilă:

Rămâne să adăugăm codul de inițializare la kernel_main (managerul de memorie trebuie inițializat mai întâi la toate celelalte subsisteme de kernel):

Pe lângă inițializarea reală a managerului de memorie, acest cod demonstrează funcționarea anumitor funcții. Ecranul ar trebui să afișeze:

Pentru a compila, trebuie să adăugați fișierul Makefile:

Asta e tot! În concluzie, dau codul complet memory_manager.c:







Articole similare

Trimiteți-le prietenilor: