From 37f6a2f3b0f2533434bae52dcca4c336f163e31c Mon Sep 17 00:00:00 2001
From: Aleksa Vučković <aleksav013@gmail.com>
Date: Mon, 25 Apr 2022 16:25:14 +0200
Subject: odradjeni chapteri x86 i boot

---
 kernel.tex | 75 +++++++++++++++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 60 insertions(+), 15 deletions(-)

(limited to 'kernel.tex')

diff --git a/kernel.tex b/kernel.tex
index e112c36..6980280 100644
--- a/kernel.tex
+++ b/kernel.tex
@@ -308,30 +308,43 @@ Specifichna uloga segmentnih registara:
 
 Realni mod karakterishe 20-tobitna segmentirana memorija shto znachi da se
 mozhe adresirati samo malo vishe od jednog megabajta. Svi procesori pochev od
-80286 zapochinju u ovom modu nakon paljenja rachunara. Da bi mogli da
-adresiramo vishe memorije potrebno je da koristimo segmentne registre.\\
+80286 zapochinju u ovom modu nakon paljenja rachunara zbog kompatibilnosti. Da
+bi mogli da adresiramo vishe memorije potrebno je da koristimo segmentne
+registre.\\
 
 Postupak kojim iz realnoh moda prelazimo u zashtic1en mod naziva se daleki skok
 {\eng ("far jump")} gde pri postavljanju segmentnih registara "skachemo" iz
 jednog segmenta u drugi. Daleki skok najchesh\/c1e podrazumeva promenu selektora
 segmenta, koji se nalazi u segmentu koda, i koji pokazuje na segment koda u
-kome se nalaze funkcije koje se trenutno izvrshavaju.
+kome se nalaze instrukcije koje se trenutno izvrshavaju.
 
 \section{Segmentacija}
 \medskip
 
 Segmentacija je reshenje kojim se omoguc1ava adresiranje vishe memorije nego
 shto je to hardverski predvidjeno. Segmentacija se postizhe korish\/c1enjem
-offseta.
-
-%{\eng\url{https://wiki.osdev.org/Segmentation}}
+{\eng offset}-a. Sa segmenatcijom smo u realnom modu da adresiramo memoriju sa
+20 umesto predvidjenih 16 bitova.
 
 \section{{\eng Protected mode}}
 \medskip
 
 Zashtic1en mod je stanje procesora u kojem procesor ima pun pristup celom
-opsegu
-memorije za razliku od realnog moda.
+opsegu memorije za razliku od realnog moda. Maksimalna velichina {\eng RAM}
+memorije koju arhitektura {\eng i386} podrzhava je {\eng 4GB} upravo zbog
+velichine registra od 32 bita ($2^{32}B = 4GB$). Neki procesori koji
+podrzhavaju {\eng PAE - Physical Address Extension} podrzhavaju i adresiranje
+memorija preko 64 bita. Kasnije je na ovom starndardu utemeljeno i adresiranje
+memorija na {\eng X86\_64}.\\
+
+Adresiranje svih 32 bita memorije postizhe se  korish\/c1enjem stranichenja
+({\eng "paging"}), koje nam dozvoljava da mapiramo fizichku memoriju na
+virtuelnu. Na taj nachin prilikom izvrshavanja svakog programa mozhe se
+zavarati program tako da misli da njegovo izvrshavanje krec1e od pocheka
+memorije. Na taj nachin znachajno nam je olakshano izvrshavanje programa jer
+nam svi programi postaju nezavisni od adrese fizichke memorije gde se oni
+zapravo nalaze, dok prilikom kreiranja programa mozhemo fiksno postaviti adresu
+prve instrukcije.
 
 %{\eng\url{https://wiki.osdev.org/Protected_Mode}}
 
@@ -345,8 +358,8 @@ memorije za razliku od realnog moda.
 
 Od pritiska dugmeta za paljenje rachunara, pa do uchitavanja operativnog sitema
 postoji ceo jedan proces. Nakon pritiska dugmeta rachunar prvo izvrshava {\eng
-POST (Power On Self Test)} koji je jedna od pochetnih faza {\eng BIOS}-a {\eng
-(Basic Input Output System)}. U {\eng POST}-u rachunar pokushava da
+POST (Power On Self Test)} rutinu koja je jedna od pochetnih faza {\eng BIOS}-a
+{\eng (Basic Input Output System)}. U {\eng POST}-u rachunar pokushava da
 incijalizuje komponente rachunarskog sistema i proverava da li one ispunjavaju
 sve uslove za startovanje rachunara. Ukoliko je ceo proces proshao bez greshaka
 nastavlja se dalje izvrshavanje {\eng BIOS}-a. {\eng BIOS} sada ima ulogu da
@@ -358,20 +371,52 @@ sistema u ram memoriju rachunara. Taj program se naziva {\eng Bootloader}.
 \section{{\eng Bootloader}}
 \medskip
 
-{\eng Bootloader} je program koji se nalazi u prvih 512bitova medijuma u {\eng
-MBR} odeljku, i njegov zadatak je da uchita jezgro operativnog sistema u ram
-memoriju i preda mu dalje upravljanje.
+{\eng Bootloader} je program koji se nalazi u prvih 512 bajtova medijuma u
+{\eng MBR} odeljku, i njegov zadatak je da uchita jezgro operativnog sistema u
+{\eng RAM} memoriju i preda mu dalje upravljanje. Zbog kompleksnosti danashnjeg
+softvera, 512 bajtova je vrlo malo za uchitavanje celog {\eng bootloader}-a. Iz
+tog razloga neki {\eng bootloader}-i razdvojeni su u vishe delova
+(najchesh\/c1e) 2. Prvi deo je vrlo mali i staje u 512 bajtova {\eng
+MBR}-a i on sluzhi samo da bi uchitao drugi deo u kome se nalazi glavni kod
+koji dalje predaje upravljanje jezgru operativnog sistema.\\
+
+Neki od najpopularnijih {\eng bootloader}-a jesu {\eng GRUB, LILO,
+systemd-boot, rEFInd}, kao i {\eng Windows Boot Manager}. Za potrebe ovog
+operativnog sistema korish\/c1en je {\eng GRUB} o kome c1e biti vishe rechi u
+odeljku Korish\/c1eni alati.
 
 %{\eng\url{https://wiki.osdev.org/Bootloader}}
 
 \section{{\eng Multiboot2}}
 \medskip
 
+{\eng Multiboot} specifikacija je otvoreni standard koji jezgrima obezbedjuje
+ujednachen nachin pokretanja od strane bootloadera usaglashenih sa ovom
+specifijkacijom. Jedna od prvih stvari koji nashe jezgro uradi je postavljanje
+konstanti definisanih {\eng multiboot} standardom da bi bilo prepoznato od
+strane {\eng bootloader}-a i da mu bilo predato dalje upravljanje.
+
 \section{{\eng ELF}}
 \medskip
 
-{\eng ELF} je format binarni fajl koji se sastoji od tachno odredjenih sekcija
-i koji mozhe da se pokrene.
+{\eng ELF} je format za skladishtenje programa ili fragmenata programa na
+disku, kreiran kao rezultat kompajlovanja i linkovanja. {\eng ELF} fajl je
+podeljen na odeljke. Za program koji mozhe da se izvrshi, postoje sledec1i
+odeljci: odeljak sa tekstom za kod, odeljak sa podacima za globalne promenljive
+i odeljak "Rodata" koji obično sadrži konstantne niske ({\eng Read only data}).
+{\eng ELF} fajl sadrzhi zaglavlja koja opisuju kako ovi odeljci treba da budu
+uskladishteni u memoriji.\\
+
+Ovaj format definisan je u {\eng System V ABI} ({\eng System V Application
+Binary Interface}) koji je set specifikacija koji definishe pozivanje funkcija,
+format objektnih fajlova, format fajlova koji mogu da se izvrshe, dinamicho
+linkovanje kao i mnoge druge.\\
+
+Funkcije arhitekture {\eng i386} po konvenciji povratne vrednosti chuvaju u
+{\eng eax} registru, dok se vrednosti koje ne staju u 32 bita {\eng eax}
+registra "prelivaju" u {\eng edx} registar. Ova informacija c1e nam biti
+kljuchna kada budemo pozivali funkcija napisane u {\eng C}-u iz {\eng
+Assembler}-a.
 
 %{\eng\url{https://wiki.osdev.org/ELF}}
 
-- 
cgit v1.2.3

