Scrie său sistem de operare (ev) buletinul informativ

Buna ziua! Ultima lansare de discuții cu mult timp în urmă. Scuzele mele, dar, din păcate, nu a fost suficient timp. Și acum, după o astfel de perioadă lungă de timp, dorința de a rescrie sistemul de operare de la zero, repara greșelile vechi (și adăugarea de noi, tuse, tuse. Poate că ar trebui să organizeze sistemul de operare ca proiect OpenSource, care a fost întotdeauna disponibil complet codul sursă, și toată lumea ar putea face corecturi (am fi trebuit să trimită o scrisoare prin care solicita rezultatul completă.

Mult timp nu a scris noile versiuni. este timpul pentru a remedia problema. Astăzi, am schimbat o mulțime de procesare-structura a întrerupe IRQ. Anterior, fiecare întrerupere este descrisă separat. Acum avem tot ce ne puteți reduce procesarea întrerupe într-o singură funcție. Dacă beneficiați acum de acest lucru nu este evident, atunci mai târziu, el va fi mult mai vizibile. La urma urmei, în cele din urmă miezul trebuie să aibă loc la IRQ-întrerupe trimite un mesaj program de conducător auto (avem aceeași micro-kernel. Și schimbarea mesajului va întrerupe doar numărul. Nu vom, vom scrie 1.

Motivul pentru căderea sistemului de operare, atunci când a fost găsit optimizarea - pentru memset (cum ar fi memcpy) modifică valoarea registrului EDI, care este considerat a fi același pentru convenții C, telefon (functia apelata trebuie să salveze valoarea am primit o soluție destul de radicală -. Dintre funcțiile standard de bibliotecă vor fi aduse într-un fișier de asamblare . pentru o mai bună optimizare (operații string compilator face neeficient) și simplitatea de a scrie acum în proiectul nostru care apare fișierul stdlib.i386.asm: format ELF memset publice pub.

În această problemă ne uităm la teoria multi-tasking și să se pregătească codul nostru pentru sprijinul său. Până la sfârșitul acestei probleme de multitasking nu face acest lucru, deoarece este destul de un subiect complex. Teoria Multitasking - abilitatea de a rula mai multe sisteme de operare în programe paralele. Într-o situație ideală, fiecare aplicație rulează pe un nucleu de procesor separat, independent și complet paralele. Cu toate acestea, aceasta este o situație ideală și realitatea este de obicei imposibil de atins, astfel încât o dată o mulțime de procese trebuie să împartă unul.

În această problemă ne dăm seama în cele din urmă managerul de memorie virtuală, care nu numai că știe „acest proiect un“ dar „în cazul în care proiectat.“ Punerea sa în aplicare în acest moment poate fi considerat ca un proiect (spre deosebire de manager de memorie fizică) și un loc de muncă excelent, nu pot garanta. Pentru a începe mici erori corecte în map_pages: bool map_pages (phyaddr page_dir, void * vaddr, phyaddr paddr, numărul size_t, steaguri int nesemnate)

În această problemă ne uităm la managerul de memorie virtuală, și de a îmbunătăți alte părți memory_manager.c. fișier antet Memory_manager.h va arata astfel: #ifndef MEMORY_MANAGER_H #define MEMORY_MANAGER_H #include "stdlib.h" #define PAGE_SIZE 0x1000 #define PAGE_OFFSET_BITS 12 #define PAGE_OFFSET_MASK 0xFFF #define PAGE_TABLE_INDEX_BITS 10 #define PAGE_TABLE_INDEX_MASK 0x3FF #define PHYADDR_BITS 32 #define PAGE_PRESENT (1 <<0) #define PAGE_WRITABLE (1 <<.