aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksa Vučković <aleksav013@gmail.com>2022-05-24 02:27:37 +0200
committerAleksa Vučković <aleksav013@gmail.com>2022-05-24 03:20:17 +0200
commita5f5378f913d9bac3a5d686372cf1b8dda1cd835 (patch)
treed790c7e4aea9087bd97f1935d6c76f96a425177e
parentd4e20a9321b2ecdef110c60d267734203c7b5286 (diff)
lektorisanje
-rw-r--r--include/00.build/Makefile24
-rw-r--r--kernel.pdfbin478774 -> 479187 bytes
-rw-r--r--kernel.tex161
3 files changed, 96 insertions, 89 deletions
diff --git a/include/00.build/Makefile b/include/00.build/Makefile
index 03b5c11..d11d742 100644
--- a/include/00.build/Makefile
+++ b/include/00.build/Makefile
@@ -39,7 +39,7 @@ GCC_USR_DIR=$(shell $(CC) -print-file-name=)
# TARGET
-TARGET=myos
+TARGET=aleksa_os
BINARY=$(BUILD_DIR)/$(TARGET).bin
ISO=$(TARGET).iso
@@ -66,9 +66,12 @@ GRUB.CFG=$(SOURCE_DIR)/grub.cfg
# RULES
-.PHONY: all compile run run-iso clean install_headers
+.PHONY: all clean compile install_headers iso run run-iso
all: compile
+clean:
+ $(RM) $(BUILD_DIR) $(ISO_DIR) $(ISO)
+
$(BINARY): $(OBJ)
$(CC) -T $(LINKER) -o $(BINARY) $(CFLAGS) -nostdlib -lgcc $(OBJ)
@@ -80,19 +83,22 @@ compile:
@$(MAKE) --directory $(SOURCE_DIR)
$(MAKE) $(BINARY)
-$(ISO): $(BINARY)
- grub-file --is-x86-multiboot $(BINARY)
+$(ISO): $(OBJ) $(GRUB.CFG)
+ifeq ($(shell ./scripts/is_multiboot.sh), 0)
$(MKDIR) $(ISO_DIR)/boot/grub
$(CP) $(BINARY) $(ISO_DIR)/boot/$(TARGET).bin
$(CP) $(GRUB.CFG) $(ISO_DIR)/boot/grub/grub.cfg
grub-mkrescue -o $(ISO) $(ISO_DIR)
+else
+ @echo "$(BINARY) is not x86 multiboot compatible"
+ $(RM) $(BINARY)
+endif
+
+iso: compile
+ $(MAKE) $(ISO)
run: compile
$(QEMU) -kernel $(BINARY) $(QEMU_DEBUG)
-run-iso: compile
- $(MAKE) $(ISO)
+run-iso: iso
$(QEMU) -cdrom $(ISO)
-
-clean:
- $(RM) $(BUILD_DIR) $(ISO_DIR) $(ISO)
diff --git a/kernel.pdf b/kernel.pdf
index f3c9460..5cafa0d 100644
--- a/kernel.pdf
+++ b/kernel.pdf
Binary files differ
diff --git a/kernel.tex b/kernel.tex
index ead876e..36e13c2 100644
--- a/kernel.tex
+++ b/kernel.tex
@@ -124,18 +124,18 @@
\bigskip
Ideja za ovaj rad proizishla je iz ekstenzivnog korish\/c1enja {\eng GNU/Linux}
-sistema, kao i zhelja za razumevanjem rada rachunara na najnizhem nivou.
+sistema, kao i zhelja za razumevanjem rada rachunara na najnizhem nivou.\\
-Ceo kod je pisan u {\eng GNU Asembler}-u i {\eng C}-u i mozhe se nac1i na
+Ceo kod je pisan u {\eng GNU Assembler}-u i {\eng C}-u i mozhe se nac1i na
{\eng GitHub}-u na stranici {\eng\url{https://github.com/aleksav013/mykernel}}.
-Kod, zajedno sa svim alatima za njegovo korishenje i upotrebu, je dostupan pod
-{\eng GPLv3} licencom.
+Kod, zajedno sa svim alatima za njegovo korish\/c1enje i upotrebu, je dostupan
+pod {\eng GPLv3} licencom.\\
Ovaj projekat se konstantno unapredjuje i nemoguc1e je odrzhavati
sinhronizovanim fajlove koji sachinjavaju operativni sistem, a koji se
istovremeno pominju u ovom radu. Iz tog razloga, rad c1e biti napisan za
verziju operativnog sistema 1.0.0. Na stranici {\eng GitHub}-a ova verzija se
-mozhe nac1i pod {\eng tag/s} sekcijom na stranici projekta.
+mozhe nac1i pod {\eng tag/s} sekcijom na stranici projekta.\\
Radi laksheg kompajlovanja koda od strane chitaoca, kreiran je {\eng toolchain}
- set alata, specifichno za kompajlovanje ovog operativnog sistema, koji se
@@ -143,9 +143,9 @@ mozhe nac1i na stranici
{\eng\url{https://github.com/aleksav013/aleksa-toolchain}},
takodje dostupan pod {\eng GPLv3} licencom otvorenog koda. Set alata {\eng
aleksa-toolchain} kreiran je takodje i iz razloga shto je zapravo neizbezhan
-proces kreiranja {\eng cross-compilera} - kompajlera koji kompapajluje kod za
-drugi sistem/arhitekturu na trenutnom sistemu/arhitekturi. Na taj nachin i
-drugi ljudi osim autora mogu doprineti izradi i pobojshanju ovog operativnog
+proces kreiranja \text{{\eng cross-compiler}-a} - kompajlera koji kompajluje
+kod za drugi sistem/arhitekturu na trenutnom sistemu/arhitekturi. Na taj nachin
+i drugi ljudi osim autora mogu doprineti izradi i poboljshanju ovog operativnog
sistema u buduc1nosti.\\
Ovaj projekat ima za cilj da prikazhe postupak kreiranja jednog za sada
@@ -166,9 +166,9 @@ ove familije nose zajednichki naziv upravo po sufiksu 86 koji se pojavljuje u
imenima svih ovih procesora.\\
U periodu od 1999. do 2003. {\eng AMD} je proshirio velichinu registra na 64 bita
-i ta arhitektura ima vishe naziva od kojih su najkorisheniji: {\eng x86\_64,
-amd64} i {\eng x64}. Velika vec1ina uredjaja danas koristi {\eng x86\_64} arhitekturu
-procesora.\\
+i ta arhitektura ima vishe naziva od kojih su najkorish\/c1eniji: {\eng
+x86\_64, amd64} i {\eng x64}. Velika vec1ina uredjaja danas koristi {\eng
+x86\_64} arhitekturu procesora.\\
Jezgo operativnog sistema prikazano u ovom radu bazirano je na {\eng X86}
arhitekturi sa registrom velichine 32 bita. Konkretna verzija ove arhitekture
@@ -182,7 +182,7 @@ imenom 80386 shto oznachava trec1u generaciju {\eng X86} arhitekture.
Postoji vishe vrsta registara procesora\cite[75]{misc:1}. Neki od osnovnih
registara koje je potrebno pomenuti dati su u tekstu koji sledi. Razlog zbog
kojeg su navedena i imena registara prethodnih verzija {\eng X86} arhitekture
-je zbog toga shto je moguc1e adresirati prvih {\eng x} bitova ako se koristi
+je zbog toga shto je moguc1e adresirati prvih {\eng x} bitova, ako se koristi
ime registra za {\eng x}-tobitnu verziju {\eng X86} arhitekture. Naravno, ovo
vazhi samo ukoliko je duzhina registra nasheg sistema (32 bita), vec1a ili
jednaka duzhini registra chiju notaciju koristimo.
@@ -222,7 +222,7 @@ gdtr & ldtr & idtr \\
\hline
\end{tabular}}\\
-Osim pomenutih, pochev od shesnaestobitne {\eng X86} arhitekture postoje i
+Osim pomenutih, pochev od shesnaestobitne {\eng X86} arhitekture, postoje i
registri {\eng ah, bh, ch, dh (h-higher)} koji predstavljaju gornju polovinu
(od 9. do 16. bita) {\eng ax, bx, cx, dx} registara redom. U daljem tekstu
bic1e prikazan odnos izmedju registara o kome je ranije bilo rechi, kao i
@@ -253,7 +253,7 @@ Registri opshte namene imaju ulogu u chuvanju operandi i pokazivacha:
\begin{itemize}
\item Operandi za logichke i aritmetichke operacije
\item Operandi za adresne kalkulacije
-\item Pokazivache na memorijsku lokaciju
+\item Pokazivacha na memorijsku lokaciju
\end{itemize}
Registri opshte namene se mogu koristiti proizvoljno prema potrebi. Medjutim,
@@ -262,8 +262,8 @@ se svakom od ovih registara dodeli neka specifichna uloga u kojoj je malo bolji
od ostalih registara opshte namene.\\
Na taj nachin kompajleri vec1inu vremena kreiraju bolji asemblerski kod nego
-ljudi, prosto iz razloga jer svaki od registara opshte namene takodje koriste i
-za njihovu specifichnu funkciju svaki put gde je to moguc1e.\\
+ljudi, prosto iz razloga shto svaki od registara opshte namene takodje koriste
+i za njihovu specifichnu funkciju svaki put gde je to moguc1e.\\
Specifichna uloga registara opshte namene:
\begin{itemize}
@@ -295,7 +295,7 @@ Specifichna uloga segmentnih registara:
izvrshavaju.
\item {\eng ds - data segment}. Osim {\eng ds}, segmentni registri za segmente
podataka su i {\eng es, fs}, kao i {\eng gs}.
-\item {\eng ss - stack segment} {\eng ss} registar sadrzhi selektor segmenta
+\item {\eng ss - stack segment}. {\eng ss} registar sadrzhi selektor segmenta
koji pokazuje na segment steka gde se chuva stek programa koji se trenutno
izvrshava. Za razliku od registra za segment koda, {\eng ss} registar
se mozhe eksplicitno postaviti shto dozvoljava aplikacijama da postave
@@ -309,27 +309,27 @@ 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 zbog kompatibilnosti. Da
-bismo mogli da adresiramo vishe memorije potrebno je da koristimo segmentne
+bismo 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 instrukcije koje se trenutno izvrshavaju.
+Postupak kojim iz realnog moda prelazimo u zashtic1eni 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 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
-{\eng offset}-a. Sa segmenatcijom smo u realnom modu da adresiramo memoriju sa
-20 umesto predvidjenih 16 bitova.
+{\eng offset}-a. Upravo smo uz pomoc1 segmenatcije u realnom modu adresirali
+memoriju sa 20, umesto predvidjenih 16 bitova.
\section{{\eng Protected mode}}
\medskip
-Zashtic1en mod je stanje procesora u kojem procesor ima pun pristup celom
+Zashtic1eni mod je stanje procesora u kojem procesor ima pun pristup celom
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
@@ -356,16 +356,16 @@ prve instrukcije.
\section{Redosled pokretanja}
\medskip
-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)} rutinu koja je jedna od pochetnih faza {\eng BIOS}-a
-{\eng (Basic Input Output System)}. U {\eng POST}-u rachunar pokushava da
-inicijalizuje komponente rachunarskog sistema jednu po jednu 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 pronadje medijum koji sadrzhi program koji c1e uchitati
-jezgro operativnog sistema u ram memoriju rachunara. Taj program se naziva
-{\eng Bootloader}.
+Od pritiska dugmeta za paljenje rachunara, pa do uchitavanja operativnog
+sistema postoji ceo jedan proces. Nakon pritiska dugmeta, rachunar prvo
+izvrshava {\eng 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 inicijalizuje komponente rachunarskog sistema jednu po
+jednu 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 pronadje medijum koji sadrzhi
+program koji c1e uchitati jezgro operativnog sistema u ram memoriju rachunara.
+Taj program se naziva {\eng Bootloader}.
%{\eng\url{https://wiki.osdev.org/Boot_Sequence}}
@@ -388,13 +388,13 @@ odeljku Korish\/c1eni alati.
%{\eng\url{https://wiki.osdev.org/Bootloader}}
-\section{{\eng Multiboot2} specifikacija}
+\section{{\eng Multiboot} specifikacija}
\medskip
{\eng Multiboot} specifikacija je otvoreni standard koji jezgrima obezbedjuje
ujednachen nachin pokretanja od strane {\eng bootloader}-a usaglashenih sa ovom
specifikacijom. Jedna od prvih stvari koji svako jezgro uradi je postavljanje
-konstanti definisanih {\eng multiboot2} standardom da bi bilo prepoznato od
+konstanti definisanih {\eng multiboot} standardom da bi bilo prepoznato od
strane {\eng bootloader}-a i da bi mu bilo predato dalje upravljanje.
\section{{\eng ELF}}
@@ -430,7 +430,7 @@ Assembler}-a.
U daljem tekstu se mogu videti neki od alata korish\/c1enih u kreiranju ovog
rada. Vec1ina korish\/c1enih alata poseduje {\eng GPLv3} licencu.
{\eng GNU Public Licence} je licenca otvorenog koda koja dozvoljava
-modifikovanje i distribuiranje koda sve dok taj je taj kod javno dostupan.
+modifikovanje i distribuiranje koda sve dok je taj kod javno dostupan.
Jedini programi sa ove liste koji nije kreirao {\eng GNU} su {\eng QEMU}
virtuelna mashina, {\eng git} i {\eng NeoVim} koji koriste {\eng GPLv2}
licencu.\\
@@ -501,7 +501,7 @@ Instrukcije za kompajlovanje date su u nastavku.
Iako trenutno postoje mnogo popularnije alternative poput {\eng NASM (Netwide
Assembler)} i {\eng MASM (Microsoft Assembler)} koji koriste noviju Intelovu
sintaksu, autor se ipak odluchio za {\eng GASM} zbog kompatibilnosti sa {\eng
-GCC} kompajlerom. {\eng GASM} kosristi stariju {\eng AT\&T} sintaksu koju
+GCC} kompajlerom. {\eng GASM} koristi stariju {\eng AT\&T} sintaksu koju
karakterishe: obrnut poredak parametara, prefiks pre imena registara i
vrednosti konstanti, a i velichina parametara mora biti eksplicitno definisana.
Zbog toga c1e mozhda nekim chitaocima biti koristan program {\eng intel2gas}
@@ -515,7 +515,7 @@ napisanog u asembleru.
\smallskip
{\eng GNU Linker} je korish\/c1en za linkovanje, tj. "spajanje" svog
-komapjlovanog koda u jednu binarnu datoteku tipa {\eng ELF} koja predstavlja
+kompajlovanog koda u jednu binarnu datoteku tipa {\eng ELF} koja predstavlja
jezgro (kernel).
\section{{\eng GCC}}
@@ -526,7 +526,7 @@ Izvorni kod softvera se mozhe nac1i na stranici
korish\/c1enje.\\
Isto kao i za {\eng GNU Binutils} moguc1e je pronac1i vec1 spreman paket u
-pojedinim distribucijama ali je preporuka manuelno kompajlovati iz
+pojedinim distribucijama, ali je preporuka manuelno kompajlovati iz
prethodno navedenih razloga. Za {\eng Arch Linux} ovaj paket se mozhe nac1i na
stanici {\eng\url{https://aur.archlinux.org/packages/i686-elf-gcc/}}.\\
@@ -578,14 +578,14 @@ Makefile}-ovi.
\medskip
Izvorni kod softvera se mozhe nac1i na stranici
-{\eng\url{https://www.gnu.org/software/make/}}
+{\eng\url{https://www.gnu.org/software/make/}},
zajedno sa uput\/stvom za kompajlovanje i korish\/c1enje.\\
-{\eng Make}\cite{book:78575} nam omoguc1ava da sa lakoc1om odrzhavamo i manipulishemo izvornim
-fajlovima. Moguc1e je sve kompajlovati, obrisati, kreirati {\eng iso} fajl kao
-i pokrenuti {\eng QEMU} virtuelnu mashinu sa samo jednom kljchnom rechi u
-terminalu. Kreirani {\eng Makefile} za potrebe ovog projekta bic1e detaljno
-objashnjen u sekciji {\eng Build system}.
+{\eng Make}\cite{book:78575} nam omoguc1ava da sa lakoc1om odrzhavamo i
+manipulishemo izvornim fajlovima. Moguc1e je sve kompajlovati, obrisati,
+kreirati {\eng iso} fajl kao i pokrenuti {\eng QEMU} virtuelnu mashinu sa samo
+jednom kljuchnom rechi u terminalu. Kreirani {\eng Makefile} za potrebe ovog
+projekta bic1e detaljno objashnjen u sekciji {\eng Build system}.
\section{Manje bitni alati}
\medskip
@@ -605,7 +605,7 @@ Linux} kernel. Izvorni kod softvera se mozhe nac1i na stranici
{\eng Git} je program koji nam pomazhe da odrzhavamo izvodne fajlove
sinhronizovanim sa repozitorijumom. Osim toga znachajan je i njegov sistem
-kontrole verzija - moguc1nost da se za svaku promenu({\eng commit}) vidi
+kontrole verzija - moguc1nost da se za svaku promenu ({\eng commit}) vidi
tachno koji su se fajlovi izmenili i koja je razlika izmedju neke dve verzije
projekta.
@@ -613,7 +613,7 @@ projekta.
\smallskip
Izvorni kod softvera se mozhe nac1i na stranici
-{\eng\url{https://www.gnu.org/software/xorriso/}}
+{\eng\url{https://www.gnu.org/software/xorriso/}},
zajedno sa uput\/stvom za kompajlovanje i korish\/c1enje.\\
Sluzhi za kreiranje {\eng ISO} fajlova koji se mogu "narezati" na {\eng CD}
@@ -624,13 +624,13 @@ koji sadrzhi sve shto je neophodno za uspeshno podizanje sistema.
\smallskip
Izvorni kod softvera se mozhe nac1i na stranici
-{\eng\url{https://www.sourceware.org/gdb/}}
+{\eng\url{https://www.sourceware.org/gdb/}},
zajedno sa uput\/stvom za kompajlovanje i korish\/c1enje.\\
{\eng GDB} je {\eng GNU}-ov {\eng debugger} koji sluzhi za pronalazhenje
greshaka u kodu, kao i aktivno prac1enje izvrshavanja programa (u ovom sluchaju
jezgra). Uz pomoc1 ovog programa ustanovljeno je shta svako dugme na tastaturi
-vrac1a nakon pritiska shto je znachajno ubzalo proces mapiranja tastature.
+vrac1a nakon pritiska, shto je znachajno ubzalo proces mapiranja tastature.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -648,7 +648,7 @@ operativnog sistema kreirao je Endrju S. Tanenbaum kao profesor Vrije
univerziteta u Amsterdamu. Profesor Tanenbaum kreirao je operativni sistem kao
primer principa koji su prikazani u njegovoj knjizi "Operativni sistemi: Dizajn
i Implementacija" ({\eng Operating Systems: Design and
-Implementation})\cite{book:1400099}. Osim ove knjige Tanenbaum napisao je i
+Implementation})\cite{book:1400099}. Osim ove knjige, Tanenbaum napisao je i
mnoge druge koje mogu biti od koristi svima koji zhele da se bave dizajnom
operativnih sistema\cite{book:821745}\cite{book:915673}.
Zanimljiva chinjenica je da je {\eng Minix} najpopularniji operativni sistem
@@ -665,14 +665,14 @@ najkorish\/c1enijim operativnim sistemom ikada.
Vec1 duzhe od dve godine koristim operativni sistem sa {\eng Linux} jezgrom
shto je bio i glavni razlog zashto sam izabrao rad na ovu temu.
-U toku izrade ovog projekta pozheleo sam da bolje razumem kako funkcionishe
+U toku izrade ovog projekta, pozheleo sam da bolje razumem kako funkcionishe
izrada {\eng Linux} kernela i kako je to "zajednica" ona koja ga pokrec1e i
odrzhava, a ne neka velika korporacija. Stoga sam odluchio da dam svoj doprinos
i poslao sam nekoliko zakrpa ({\eng patch}-eva) koji su primljeni i
implemetirani u novoj 5.17 verziji {\eng Linux} kernela. Ovo iskustvo pokazalo
mi je koliko je ozbiljna organizacija koja stoji iza celog tog projekta i
koliko je bitno raditi na svim sferama nekog projekta kao shto su i izrada
-dokumentacije i spremnost da se edukuju i zaiteresuju mladi ljudi kojima c1e
+dokumentacije i spremnost da se edukuju i zainteresuju mladi ljudi kojima c1e
ovakvo iskustvo znachiti u daljem profesionalnom usavrshavanju. Drago mi je
shto me je ovaj projekat odvazhio da nachinim taj korak i doprinesem mozhda
najvec1em softverskom projektu ikada.
@@ -681,13 +681,13 @@ najvec1em softverskom projektu ikada.
\medskip
Najpopularniji {\eng BSD} operativni sistemi su redom {\eng
FreeBSD\cite{book:1310096}, OpenBSD} i {\eng NetBSD}. Svaki od njih ima
-razlichite ciljeve ali svi se slazhu u jednom: softver mora ostati minimalan.
+razlichite ciljeve, ali se svi slazhu u jednom: softver mora ostati minimalan.
Svi ovi operativni sistemi svoje sistemske programe i biblioteke imaju napisano
-u duplo ako ne i nekoliko puta manje linija koda nego {\eng GNU/Linux}. To ih chini
-mnogo lakshim za odrzhavanje, ali i mnogo sigurnijim.\\
+u duplo, ako ne i nekoliko puta manje linija koda nego {\eng GNU/Linux}. To ih
+chini mnogo lakshim za odrzhavanje, ali i mnogo sigurnijim.\\
-{\eng BSD} oprativni sistemi razlikuju se od {\eng GNU/Linux}-a po tome shto su
-kod {\eng BSD}-a jezgro i korisnichki programi celina koje je nastala od
+{\eng BSD} operativni sistemi razlikuju se od {\eng GNU/Linux}-a po tome shto
+su kod {\eng BSD}-a jezgro i korisnichki programi celina koja je nastala od
strane jednog tima ljudi i odrzhavaju se uporedo, dok je kod {\eng GNU/Linux}-a
jezgro {\eng Linux}, a {\eng GNU Coreutils} chini korisnichke programe {\eng
(user space)} i njihov razvoj je potpuno nezavisan. Zbog te chinjenice, {\eng
@@ -733,8 +733,8 @@ arhive, a zatim je {\eng patch}-uje (primenjuje skup izmena). Nakon toga
korish\/c1enjem {\eng GCC} kompajlera na {\eng host} sistemu, kompajluje se
poseban {\eng GCC} kompajler koji sluzhi za kompajlovanje izvornog koda
namenjenog jezgru ovog operativnog sistema. Nakon toga on se instalira na
-put {\eng /opt/aleksa/usr/bin/} gde se nalazi novi {\eng SYSROOT} koji koristi
-{\eng Makefile}.
+put {\eng /opt/aleksa/usr/bin/}, gde se nalazi novi {\eng \$SYSROOT} koji
+koristi {\eng Makefile}.
\section{{\eng Makefile}}
\medskip
@@ -745,7 +745,7 @@ koji se pokrec1e ukucavanjem komande {\eng make $<$ime\_pravila$>$}. U tekstu
koji sledi mozhe se videti koji je to set pravila koje su definisani za ovaj
projekat.
-\medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=make,linerange={70-98}]{include/00.build/Makefile}\srb\end{minipage}\smallskip
+\medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=make,linerange={70-200}]{include/00.build/Makefile}\srb\end{minipage}\smallskip
Mozhemo videti da je ovo kompleksnija forma {\eng Makefile}-a jer sadrzhi
proces rekurzivnog pozivanja {\eng \$(MAKE)} komande. To znachi da ovaj
@@ -781,11 +781,11 @@ jeziku\cite{book:441007}\cite{book:690930}.
{\eng as/boot.s}:\\
U prvom delu postavljamo promenljive na vrednosti koje su odredjene {\eng
-Multiboot2} standardom da bi {\eng bootloader} prepoznao nashe jezgro.
+Multiboot} standardom da bi {\eng bootloader} prepoznao nashe jezgro.
\medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/boot1.s}\srb\end{minipage}\smallskip
-Nakon toga postavljamo prvih 512 bajtova na prethodno pomenute vrednosti ali
+Nakon toga postavljamo prvih 512 bajtova na prethodno pomenute vrednosti, ali
tako da za svaku promenljivu ostavljamo 32 bita prostora.
\medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/boot2.s}\srb\end{minipage}\smallskip
@@ -795,7 +795,7 @@ podataka, redom.
\medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/boot3.s}\srb\end{minipage}\smallskip
-Definishemo sekciju {\eng bss} u kojoj kreiramo stek i dodeljujemo mu 16
+Definishemo sekciju {\eng .bss} u kojoj kreiramo stek i dodeljujemo mu 16
kilobajta.
\medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/boot4.s}\srb\end{minipage}\smallskip
@@ -808,7 +808,7 @@ ima naziv {\eng "far jump"} jer skachemo van tekuc1eg segmenta.
U segmentu koda postavljamo segmentne registre na adresu segmenta podataka.
Zatim postavljamo {\eng esp} registar na pochetak steka koji smo
-inicijalizovali u {\eng bss} sekciji i predajemo upravljanje {\eng
+inicijalizovali u {\eng .bss} sekciji i predajemo upravljanje {\eng
kernel\_main} funkciji.
\medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/boot6.s}\srb\end{minipage}\smallskip
@@ -880,7 +880,7 @@ niz karaktera a zatim iskoristi prethodnu funkciju.
\medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga12.c}\srb\end{minipage}\smallskip
-Funkcija koja ispisuje realnan broj na ekran tako shto je prvo pretvori u niz
+Funkcija koja ispisuje realan broj na ekran tako shto je prvo pretvori u niz
karaktera a zatim iskoristi funkciju za ispis niza karaktera.
\medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/vga13.c}\srb\end{minipage}\smallskip
@@ -897,7 +897,7 @@ brojache kolone i reda na pochetnu poziciju.
Globalna tabela deskriptora je struktura u kojoj se chuvaju informacije o
segmentima memorije.\\
-{\eng include/source/gdt.h}:
+{\eng include/source/gdt.h}:\\
Koristimo {\eng \#ifndef} i {\eng \#define} direktive da bi se osigurali da se
ovaj fajl ukljuchuje ({\eng include}-uje) samo jednom u toku celog rada
@@ -913,7 +913,6 @@ UINT16\_MAX...}.
\medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt2.h}\srb\end{minipage}\smallskip
-Format u kom rachunar prihvata unos pojedinachnih definicija segmenata.
Primetimo {\eng \_\_attribute\_\_((packed))}, na kraju definicije strukture. To
nam oznachava da se nec1e ostavljati mesta u memoriji izmedju promenljivih
unutar strukture, vec1 c1e se "pakovati" jedna do druge u memoriji.
@@ -951,7 +950,8 @@ funkciji.
\medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt3.c}\srb\end{minipage}\smallskip
-Funkcija koja na osnovu parameta inicijalizuje jedan globalni segment memorije.
+Funkcija koja na osnovu parametara inicijalizuje jedan globalni segment
+memorije.
\medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt4.c}\srb\end{minipage}\smallskip
@@ -963,7 +963,7 @@ inicijalizuje sve segmente memorije koji c1e se koristiti,
\medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt6.c}\srb\end{minipage}\smallskip
-kao i poziva fukciju kojoj prosledjuje pokazivach na globalnu tabelu segmenata
+kao i poziva funkciju kojoj prosledjuje pokazivach na globalnu tabelu segmenata
memorije.
\medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/gdt7.c}\srb\end{minipage}\smallskip
@@ -976,12 +976,13 @@ memorije.
Globalna tabela prekida je struktura koja nam govori koja funkcija zapravo
reaguje kada procesor dobije zahtev za prekid ({\eng interrupt request}). Tada
-procesor pauzira ono shto trenutno radi i predaje upravljenje odredjenoj funkciji.\\
+procesor pauzira ono shto trenutno radi i predaje upravljanje odredjenoj
+funkciji.\\
Funkcija je duzhna da dojavi procesoru da je c1e ona preuzeti ({\eng
handle}-ovati) taj prekid i ukoliko je prekid fatalan (deljenje nulom, {\eng
-triple fault},...) funkcija ima zadatak da ukloni novonastali problem i obezbedi
-operativnom sistemu oporavak od greshke.\\
+triple fault},...) funkcija ima zadatak da ukloni novonastali problem i
+obezbedi operativnom sistemu oporavak od greshke.\\
{\eng include/source/idt.h}:
@@ -999,8 +1000,8 @@ Struktura u kojoj rachunar prihvata globalnu tabelu prekida.
\medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/idt6.h}\srb\end{minipage}\smallskip
-Pokazivach na tabelu prekida koja se prosledjuje funkciji napisanoj u {\eng
-Assembler}-u, a koja uchitava tabelu prekida u odgovarajuc1i registar.
+Pokazivach na tabelu prekida koja se prosledjuje funkciji napisanoj u \text{{\eng
+Assembler}-u}, a koja uchitava tabelu prekida u odgovarajuc1i registar.
\medskip\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/idt7.h}\srb\end{minipage}\smallskip
@@ -1107,9 +1108,9 @@ funkciji.
\section{{\eng Heap}}
\medskip
-{\eng Heap} za ovo jezgro kotisti algoritam\cite{book:1412} bitmape da bi na
-najefikasniji nachin chuvalo podatke o trenutno korishc1enim blokovima. Hip nam
-sluzhi da bismo dinamichki alocirali memoriju, tj. da bismo mogli da
+{\eng Heap} za ovo jezgro koristi algoritam\cite{book:1412} bitmape da bi na
+najefikasniji nachin sachuvalo podatke o trenutno korish\/c1enim blokovima. Hip
+nam sluzhi da bismo dinamichki alocirali memoriju, tj. da bismo mogli da
koristimo globalne promenljive, kao i promenljive chiji zhivotni vek mora biti
dugotrajniji od funkcije u kojoj je ta promenljiva nastala.\\